718 lines
28 KiB
PHP
718 lines
28 KiB
PHP
<?php
|
||
class HiwaterController extends DataController
|
||
{
|
||
private $limit=20;
|
||
|
||
function preDispatch()
|
||
{
|
||
parent::preDispatch();
|
||
$this->_helper->layout->setLayout('hiwater');
|
||
$this->debug = 1;
|
||
}
|
||
|
||
function indexAction()
|
||
{
|
||
$sql="select m.uuid,m.title,m.id,m.description from normalmetadata m left join thumbnail t on m.id=t.id where m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and length(t.data)>2 order by random() limit 3";
|
||
$this->view->meatdata=$this->db->fetchAll($sql);
|
||
$archive = new Archive($this->db);
|
||
$this->view->info = $archive->getOneArchive('HiWATER:黑河流域生态-水文过程综合遥感观测联合试验','about');
|
||
}
|
||
|
||
/*
|
||
* 数据浏览
|
||
*/
|
||
function browseAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') ");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$select=$this->db->select();
|
||
$select->from('normalmetadata','*')->where(" uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') ")->order('title desc')->limitPage($page,$this->limit);
|
||
$this->view->metadata = $this->db->fetchAll($select);
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function thumbAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') ");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$select=$this->db->select();
|
||
$select->from('normalmetadata as m','m.*')
|
||
->where(" uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') ")
|
||
->order('m.title desc')->limitPage($page,$this->limit);
|
||
$this->view->metadata = $this->db->fetchAll($select);
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
}
|
||
|
||
function documentAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$row=$this->db->fetchAll("select count(*) from reference where id in (select refid from mdref where uuid in (select uuid from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') ))");
|
||
$sum=$row[0]['count'];
|
||
$sql="select * from reference where id in (select refid from mdref where uuid in (select uuid from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') )) order by reference limit ? offset ?";
|
||
$this->view->refs=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit,"文献");
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function baseAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化' or keyword='基础地理' or keyword='遥感影像' or keyword='水文地质' or keyword='社会经济' or keyword='人口' or keyword='SWAT' or keyword='NPP' or keyword='WRF' or keyword='辐射' or keyword='NEP'))");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化' or keyword='基础地理' or keyword='遥感影像' or keyword='水文地质' or keyword='社会经济' or keyword='人口' or keyword='SWAT' or keyword='NPP' or keyword='WRF' or keyword='辐射' or keyword='NEP')) order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function geobaseAction()
|
||
{
|
||
$this->getmd('基础地理');
|
||
}
|
||
|
||
function coreAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='DEM' or keyword='土地利用' or keyword='土壤' or keyword='气象' or keyword='水文观测' or keyword='灌溉' or keyword='试验'))");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='DEM' or keyword='土地利用' or keyword='土壤' or keyword='气象' or keyword='水文观测' or keyword='灌溉' or keyword='试验')) order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function demAction()
|
||
{
|
||
$this->getmd('DEM');
|
||
}
|
||
|
||
function rsAction()
|
||
{
|
||
$this->getmd('遥感影像');
|
||
}
|
||
|
||
function waterAction()
|
||
{
|
||
$this->getmd('水文地质');
|
||
}
|
||
|
||
function modelAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='WRF' or keyword='NPP' or keyword='SWAT' or keyword='NEP' or keyword='辐射'))");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='WRF' or keyword='NPP' or keyword='SWAT' or keyword='NEP' or keyword='辐射')) order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function economicAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='人口' or keyword='社会经济'))");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='人口' or keyword='社会经济')) order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function landsurfaceAction()
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化'))");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化')) order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
function landuseAction()
|
||
{
|
||
$this->getmd('土地利用','theme');
|
||
}
|
||
|
||
function soilAction()
|
||
{
|
||
$this->getmd('土壤','theme');
|
||
}
|
||
|
||
function meteoAction()
|
||
{
|
||
$this->getmd('气象','theme');
|
||
}
|
||
|
||
function hydroAction()
|
||
{
|
||
$this->getmd('水文观测','theme');
|
||
}
|
||
function irragationAction()
|
||
{
|
||
$this->getmd('灌溉','theme');
|
||
}
|
||
|
||
function obsAction()
|
||
{
|
||
$this->getmd('试验','theme');
|
||
}
|
||
|
||
function listAction()
|
||
{
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') order by timebegin,title";
|
||
$this->view->metadata=$this->db->fetchAll($sql);
|
||
}
|
||
|
||
function tagAction()
|
||
{
|
||
$key = $this->_request->getParam('key');
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
if (!empty($key)) {
|
||
$this->view->codename=$key;
|
||
$sql=$this->db->quoteInto('select count(id) from keyword where keyword=?',$key);
|
||
$state=$this->db->query($sql);
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title,id,description from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keyword='".$key."') order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
} else {
|
||
$state=$this->db->query("select keyword.keyword,count(*) from keyword left join normalmetadata m on keyword.id=m.id where keyword.keytype='place' and m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by keyword.keyword order by count desc");
|
||
$k1=$state->fetchAll();
|
||
$state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join normalmetadata m on k.id=m.id where k.keytype='theme' and m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by k.keyword order by k.keyword");
|
||
$k2=$state->fetchAll();
|
||
$state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join normalmetadata m on k.id=m.id where k.keytype='discipline' and m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by k.keyword order by k.keyword");
|
||
$k3=$state->fetchAll();
|
||
$state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join normalmetadata m on k.id=m.id where k.keytype='stratum' and m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by k.keyword order by k.keyword");
|
||
$k4=$state->fetchAll();
|
||
$state=$this->db->query("select keyword.keyword,count(*) from keyword left join normalmetadata m on keyword.id=m.id where keyword.keytype='temporal' and m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by keyword.keyword order by keyword.keyword");
|
||
$k5=$state->fetchAll();
|
||
$this->view->keywords=array('place'=>$k1,'theme'=>$k2,'discipline'=>$k3,'stratum'=>$k4,'temporal'=>$k5);
|
||
}
|
||
}
|
||
|
||
function searchAction()
|
||
{
|
||
$this->view->addHelperPath('helper','Zend_View_Helper_');
|
||
$form=new SearchForm();
|
||
$this->view->form=$form;
|
||
//$form->submit->setLabel('快速搜索');
|
||
$key=$this->_request->getParam('q');
|
||
if (!empty($key)) {
|
||
$search=new Search($key);
|
||
$where=$search->sql_expr(array("title","description"));
|
||
$page=@(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$row=$this->db->fetchAll("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and ".$where);
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title,id,description from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and ".$where." order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->key=$key;
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
}
|
||
|
||
function timemapAction()
|
||
{
|
||
$sql="select id,uuid,west,south,north,east,title,timebegin,timeend from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and timebegin is not null";
|
||
$this->view->rows=$this->db->fetchAll($sql);
|
||
}
|
||
|
||
function timelineAction()
|
||
{
|
||
$fn="heihetime.xml";
|
||
$rows=$this->db->fetchAll("select ts_created from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') order by ts_created desc limit 1");
|
||
$last_update=strtotime($rows[0]['ts_created']);
|
||
if (!file_exists($fn) || (filemtime($fn)<$last_update))
|
||
{
|
||
$dateformat="M j Y";
|
||
$rows=$this->db->fetchAll("select id,uuid,description,title,timebegin,timeend from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and timebegin is not null order by timebegin,title");
|
||
$timexml='<data>';
|
||
foreach($rows as $row) {
|
||
$timexml.='<event start="'.date($dateformat,strtotime($row['timebegin'])).' GMT+0800" ';
|
||
if ($row['timeend']!='' && $row['timeend']!=$row['timebegin']) $timexml.=' end="'.date($dateformat,strtotime($row['timeend'])).'" isDuration="true"';
|
||
$timexml.= ' title="'.htmlspecialchars($row['title']).'" image="/images/westdc_40w.gif" link="/hiwater/view/uuid/'.$row['uuid'].'">';
|
||
$desc_length=mb_strlen($row['description'],"UTF-8");
|
||
$desc=mb_substr($row['description'],0,($desc_length>300)?300:$desc_length,"UTF-8");
|
||
if ($desc_length>300) $desc.=" ...";
|
||
$timexml.=htmlspecialchars($desc);
|
||
$timexml.="</event>\n";
|
||
}
|
||
$timexml.='</data>';
|
||
$fp=fopen($fn,'w');
|
||
fwrite($fp,$timexml);
|
||
fclose($fp);
|
||
}
|
||
}
|
||
|
||
function categoryAction()
|
||
{
|
||
$code = (int)$this->_request->getParam('code');
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$this->view->category=$this->db->fetchAll("select c.code,name,name_zh,count(*) from category c left join normalmetadata m on c.id=m.id,categorycode cc where c.code=cc.code and m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by c.code,cc.name,cc.name_zh");
|
||
if ($code>0 && $code<20) {
|
||
$row=$this->db->fetchAll("select count(*) from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from category where code=".$code.")");
|
||
$sum=$row[0]['count'];
|
||
$sql="select uuid,title,description,id from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select distinct id from category where code=".$code.") order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
$row=$this->db->fetchRow("select name,name_zh from categorycode where code=?",$code);
|
||
$this->view->codename=(empty($row['name_zh'])?$row['name']:$row['name_zh']);
|
||
} else {
|
||
//提供全部分类列表
|
||
}
|
||
}
|
||
|
||
private function getmd($keyword,$type='theme')
|
||
{
|
||
$page=(int)$this->_request->getParam('page');
|
||
if (empty($page)) $page=1;
|
||
$offset=$this->limit*($page-1);
|
||
$state=$this->db->query("select count(m.*) from normalmetadata m left join datasource d on m.uuid=d.uuid left join source s on d.sourceid=s.id where s.code='hiwater' and m.id in (select id from keyword where keytype='".$type."' and keyword='".$keyword."')");
|
||
$row=$state->fetchAll();
|
||
$sum=$row[0]['count'];
|
||
//@todo: add order with title
|
||
$sql="select uuid,title from normalmetadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and id in (select id from keyword where keytype='".$type."' and keyword='".$keyword."') order by timebegin,title limit ? offset ?";
|
||
$this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
|
||
$this->view->page=new Pagination($sum,$page,$this->limit);
|
||
$this->view->offset=$offset+1;
|
||
}
|
||
|
||
|
||
/*
|
||
* projectsAction() 数据汇交计划
|
||
*
|
||
*
|
||
*
|
||
*
|
||
*/
|
||
function projectsAction()
|
||
{
|
||
|
||
$ac = $this->_getParam('ac');
|
||
$invite = $this->_getParam('invite');
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
$this->view->user_email = $user_email = $user->email;
|
||
}
|
||
|
||
if(empty($ac) || $ac == "index")
|
||
{
|
||
$this->_helper->viewRenderer('project-index');
|
||
|
||
//Search Link
|
||
$this->view->searchLink = "/heihe/projects/ac/index/";
|
||
|
||
$q = $this->_getParam('q');
|
||
|
||
$wheresql = array();
|
||
|
||
if(!empty($q))
|
||
{
|
||
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$q))
|
||
{
|
||
$this->view->error = "输入的搜索条件有误,只允许输入汉字、数字、字母";
|
||
return true;
|
||
}
|
||
$wheresql[] = " (title LIKE '%$q%' OR
|
||
code LIKE '%$q%' OR
|
||
name LIKE '%$q%')";
|
||
$this->view->searchKeyword = $q;
|
||
}
|
||
|
||
if(count($wheresql)>0)
|
||
{
|
||
$wheresql = join(" AND ",$wheresql);
|
||
}else{
|
||
$wheresql = "";
|
||
}
|
||
|
||
if(!empty($wheresql))
|
||
{
|
||
$wheresql = " WHERE ".$wheresql;
|
||
}
|
||
|
||
$sql = "SELECT * FROM heiheproject $wheresql
|
||
ORDER BY id DESC";
|
||
$sth = $this->db->query($sql);
|
||
$rows = $sth->fetchAll();
|
||
|
||
foreach ($rows as $k=>$v)
|
||
{
|
||
$rows[$k]['status'] = $this->replacestatus($v['status']);
|
||
}
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
}//ac == index
|
||
|
||
if($ac == "submitting")
|
||
{
|
||
$this->_helper->viewRenderer('project-index');
|
||
|
||
$sql = "SELECT * FROM heiheproject WHERE status<4";
|
||
$sth = $this->db->query($sql);
|
||
$rows = $sth->fetchAll();
|
||
|
||
foreach ($rows as $k=>$v)
|
||
{
|
||
$rows[$k]['status'] = $this->replacestatus($v['status']);
|
||
}
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}//ac == submitting 正在提交
|
||
|
||
if($ac == "unsubmit")
|
||
{
|
||
$this->_helper->viewRenderer('project-index');
|
||
|
||
$sql = "SELECT * FROM heiheproject WHERE attachid IS NULL OR attachid=0";
|
||
$sth = $this->db->query($sql);
|
||
$rows = $sth->fetchAll();
|
||
|
||
foreach ($rows as $k=>$v)
|
||
{
|
||
$rows[$k]['status'] = $this->replacestatus($v['status']);
|
||
}
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}//ac == unsubmit 未提交
|
||
|
||
if($ac == "submit")
|
||
{
|
||
$this->_helper->viewRenderer('project-index');
|
||
|
||
$sql = "SELECT * FROM heiheproject WHERE status=4";
|
||
$sth = $this->db->query($sql);
|
||
$rows = $sth->fetchAll();
|
||
|
||
foreach ($rows as $k=>$v)
|
||
{
|
||
$rows[$k]['status'] = $this->replacestatus($v['status']);
|
||
}
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}//ac == submit 已提交
|
||
|
||
if($ac == "upload")
|
||
{
|
||
$this->_helper->layout->setLayout('layout-iframe');
|
||
$this->_helper->viewRenderer('project-upload');
|
||
|
||
$submit = $this->_getParam('submit');
|
||
|
||
$pid = $this->_getParam('pid');
|
||
|
||
if(empty($pid) || !is_numeric($pid))
|
||
{
|
||
$this->view->error = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$this->view->pid = $pid;
|
||
|
||
if(empty($uid))
|
||
{
|
||
$this->view->error = "请先登录";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT * FROM heiheproject WHERE id=$pid";
|
||
$sth = $this->db->query($sql);
|
||
$row = $sth->fetch();
|
||
|
||
if($row['email']!= $user_email)
|
||
{
|
||
$this->view->error = "您没有权限进行此操作";
|
||
return true;
|
||
}
|
||
|
||
if(!empty($submit) && empty($this->view->error))
|
||
{
|
||
|
||
$files=new files();
|
||
$msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'heihe');
|
||
|
||
if(empty($msg['error']))
|
||
{
|
||
$msg['error']="";
|
||
$filename = $msg['db_path'];
|
||
$filesize = $msg['file_size'];
|
||
$filedesc = $this->_request->getParam('filedesc');
|
||
$filetype = $msg['file_type'];
|
||
$realname = $msg['realname'];
|
||
|
||
if(!empty($row['attachid']))
|
||
{
|
||
$sql = "SELECT * FROM attachments WHERE id={$row['attachid']}";
|
||
$sth = $this->db->query($sql);
|
||
$attach = $sth->fetch();
|
||
$this->db->exec("DELETE FROM attachments WHERE id={$row['attachid']} AND filetype='heihe'");
|
||
@unlink($this->view->config->upload.$attach['filename']);
|
||
}
|
||
|
||
$sql = " INSERT INTO attachments (filename,filetype,filedesc,userid,filesize,realname) values
|
||
('$filename','heihe','$filedesc','$uid','$filesize','$realname') RETURNING id";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$att = $sth->fetch(PDO::FETCH_ASSOC);
|
||
$msg['attid'] = $attid = $att['id'];
|
||
|
||
$sql = "UPDATE heiheproject SET attachid=$attid WHERE id=$pid";
|
||
$sth = $this->db->exec($sql);
|
||
|
||
if($sth)
|
||
{
|
||
$this->view->message = "上传成功";
|
||
}else{
|
||
@unlink($filename);
|
||
$this->view->error = '附件上传失败:写入附件表出错';
|
||
return true;
|
||
}
|
||
}else{
|
||
@unlink($filename);
|
||
$this->view->error = "附件上传失败".$msg['error'];
|
||
return true;
|
||
}
|
||
}
|
||
|
||
$sql = "SELECT * FROM heiheproject WHERE id=$pid";
|
||
$sth = $this->db->query($sql);
|
||
$row = $sth->fetch();
|
||
|
||
$sql = "SELECT * FROM attachments WHERE id = {$row['attachid']}";
|
||
$sth = $this->db->query($sql);
|
||
$this->view->att = $sth->fetch();
|
||
|
||
return true;
|
||
}
|
||
|
||
if(!empty($invite))
|
||
{
|
||
|
||
$this->_helper->viewRenderer('project-invite');
|
||
|
||
if(!preg_match("/[A-Za-z0-9]/",$invite))
|
||
{
|
||
$this->view->error = "参数错误!";
|
||
return true;
|
||
}
|
||
|
||
if(strlen($invite)!=12)
|
||
{
|
||
$this->view->error = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$pid = $this->_getParam('pid');
|
||
|
||
if(!is_numeric($pid))
|
||
{
|
||
$this->view->error = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT * FROM $projectTable WHERE id=$pid";
|
||
$sth = $this->db->query($sql);
|
||
$row = $sth->fetch();
|
||
|
||
if(empty($row['expert_name']))
|
||
{
|
||
$this->view->error = "此项目尚未邀请跟踪专家";
|
||
return true;
|
||
}
|
||
|
||
$names = $this->getArray($row['expert_name']);
|
||
$emails = $this->getArray($row['expert_email']);
|
||
$validations = $this->getArray($row['expert_validation']);
|
||
$created = $this->getArray($row['expert_created']);
|
||
|
||
if(!in_array($validations))
|
||
{
|
||
$this->view->error = "您不在被邀请的专家名单内";
|
||
return true;
|
||
}
|
||
|
||
|
||
|
||
}//专家邀请链接
|
||
|
||
|
||
}//projectsAction()
|
||
|
||
//从pgsql读取数组并拆分为php数组
|
||
function getArray($str){
|
||
if(strlen($str)>3)
|
||
{
|
||
return explode(",",substr($str,1,-1));
|
||
}else{
|
||
return NULL;
|
||
}
|
||
}
|
||
|
||
//将php数组组装成pgsql中的数组
|
||
function mkArray($array){
|
||
if(!is_array($array))
|
||
{
|
||
return "{".$array."}";
|
||
}
|
||
if(count($array)==1)
|
||
{
|
||
$key = max(array_keys($array));
|
||
return "{".$array[$key]."}";
|
||
}
|
||
if(count($array)>1)
|
||
{
|
||
return "{".join(",",$array)."}";
|
||
}
|
||
}
|
||
|
||
function replacestatus($status)
|
||
{
|
||
if($status == 0)
|
||
{
|
||
return "计划未提交";
|
||
}
|
||
if($status == 1)
|
||
{
|
||
return "计划未审核";
|
||
}
|
||
if($status == 2)
|
||
{
|
||
return "跟踪专家审核";
|
||
}
|
||
if($status == 3)
|
||
{
|
||
return "跟踪专家通过";
|
||
}
|
||
if($status == 4)
|
||
{
|
||
return "数据委员会通过";
|
||
}
|
||
}
|
||
|
||
function genRandomString($len)
|
||
{
|
||
$chars = array(
|
||
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
|
||
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
|
||
"w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
|
||
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
|
||
"S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
|
||
"3", "4", "5", "6", "7", "8", "9"
|
||
);
|
||
$charsLen = count($chars) - 1;
|
||
|
||
shuffle($chars); // 将数组打乱
|
||
|
||
$output = "";
|
||
for ($i=0; $i<$len; $i++)
|
||
{
|
||
$output .= $chars[mt_rand(0, $charsLen)];
|
||
}
|
||
return $output;
|
||
}
|
||
|
||
function chmodr($path, $filemode) {
|
||
if (!is_dir($path))
|
||
return chmod($path, $filemode);
|
||
|
||
$dh = opendir($path);
|
||
while (($file = readdir($dh)) !== false) {
|
||
if($file != '.' && $file != '..') {
|
||
$fullpath = $path.'/'.$file;
|
||
if(is_link($fullpath))
|
||
return FALSE;
|
||
elseif(!is_dir($fullpath) && !chmod($fullpath, $filemode))
|
||
return FALSE;
|
||
elseif(!$this->chmodr($fullpath, $filemode))
|
||
return FALSE;
|
||
}
|
||
}
|
||
closedir($dh);
|
||
if(chmod($path, $filemode))
|
||
return TRUE;
|
||
else
|
||
return FALSE;
|
||
}
|
||
|
||
//成为作者后的后继处理工作
|
||
private function author_first($uuid,$author)
|
||
{
|
||
$sql="insert into mdversion (xml,ts_created,uuid,changelog,userid)
|
||
select x.data,m.ts_created,?,?,? from metadata m left join xml x on m.id=x.id
|
||
left join mdversion v on m.uuid=v.uuid
|
||
where m.uuid=? and v.changelog is null";
|
||
$sth=$this->db->prepare($sql);
|
||
try
|
||
{
|
||
$sth->execute(array($uuid,'初始版本 version 1.0',$author,$uuid));
|
||
} catch(Exception $e){
|
||
// do nothing here.
|
||
// 说明之前已经有对应数据
|
||
}
|
||
$this->wdb=Zend_Db::factory($this->view->config->geonetwork);
|
||
$sql="update metadata set owner=? where uuid=?";
|
||
$sth=$this->wdb->prepare($sql);
|
||
$sth->execute(array($author,$uuid));
|
||
}
|
||
|
||
} |