793 lines
33 KiB
PHP
793 lines
33 KiB
PHP
<?php
|
|
class HiwaterController extends DataController
|
|
{
|
|
private $limit=20;
|
|
|
|
function preDispatch()
|
|
{
|
|
parent::preDispatch();
|
|
|
|
$this->debug = 0;
|
|
$acName = $this->_request->getActionName();
|
|
if(in_array($acName,array("aviation","radiometer","lidar","ccdlidar","widas",'ccdwidas',"nearvis","thermal")))
|
|
{
|
|
$this->view->pageIn = "collapse1";
|
|
}
|
|
else if(in_array($acName,array("airborne","demdsm","reflectance","vegtypeair","vegparam","temperature","soilmoisture")))
|
|
{
|
|
$this->view->pageIn = "collapse2";
|
|
}
|
|
else if(in_array($acName,array("hmon",'hmon2012','hmon2013','hmon2012up','hmon2012middle','hmon2012down','hmon2013up','hmon2013middle','hmon2013down','super','normal','prec')))
|
|
{
|
|
$this->view->pageIn = "collapse3";
|
|
}
|
|
else if(in_array($acName,array("cgs","calibration","ground",'sync')))
|
|
{
|
|
$this->view->pageIn = "collapse4";
|
|
}
|
|
else if(in_array($acName,array("wsn","waternet","soilnet","bnunet",'bnulai')))
|
|
{
|
|
$this->view->pageIn = "collapse5";
|
|
}
|
|
else if(in_array($acName,array("mso","autometeo","ec",'las',"cosmos","tdp","isotope")))
|
|
{
|
|
$this->view->pageIn = "collapse6";
|
|
}
|
|
else if(in_array($acName,array("rsproduct","dem","precipitation",'sm',"snow","vegtype","vegcov",'phenology','npp')))
|
|
{
|
|
$this->view->pageIn = "collapse7";
|
|
}
|
|
else if(in_array($acName,array("browse","thumb","fund","tag","timeline","timemap",'author','organization')))
|
|
{
|
|
$this->view->pageIn = "collapse10";
|
|
}
|
|
else if(in_array($acName,array("other")))
|
|
{
|
|
$this->view->pageIn = "collapse9";
|
|
}
|
|
$this->view->pageID = "hiwater-".$acName;
|
|
//$this->_helper->layout->setLayout('heihe');
|
|
}
|
|
|
|
function indexAction()
|
|
{
|
|
$sql="select m.uuid,m.title,m.id,m.description from en.normalmetadata m left join en.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('Heihe Watershed Allied Telemetry Experimental Research (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 en.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('en.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 en.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('en.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 language<>'zh' and id in (select refid from mdref where uuid in (select uuid from en.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 language<>'zh' and id in (select refid from mdref where uuid in (select uuid from en.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,"literatures");
|
|
$this->view->offset=$offset+1;
|
|
}
|
|
|
|
function aviationAction()
|
|
{
|
|
$this->getmdlimited(array('WiDAS','WIDAS','PLMR','LIDAR','CASI','thermal-infrared hyperspectral data'),'airborne remote sensing');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function radiometerAction()
|
|
{
|
|
$this->getmdlimited('PLMR','airborne remote sensing');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function lidarAction()
|
|
{
|
|
$this->getmdlimited('LIDAR','airborne remote sensing',array('CCD'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function ccdlidarAction()
|
|
{
|
|
$this->getmdrestricted(array('CCD','airborne remote sensing',"LIDAR"));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function widasAction()
|
|
{
|
|
$this->getmdlimited('WIDAS','airborne remote sensing',array('CCD'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function ccdwidasAction()
|
|
{
|
|
$this->getmdrestricted(array('CCD','airborne remote sensing','WIDAS'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function nearvisAction()
|
|
{
|
|
$this->getmdlimited('CASI','airborne remote sensing');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function thermalAction()
|
|
{
|
|
$this->getmdlimited('thermal-infrared hyperspectral data','airborne remote sensing');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function airborneAction()
|
|
{
|
|
$this->getmdlimited(array('DEM','DSM','DOM','albedo','land use','vegetation type','Vegetation structure parameters','soil water content','land surface temperature'),'airborne remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function demdsmAction()
|
|
{
|
|
$this->getmdlimited(array('DEM','DSM','DOM'),"airborne remote sensing data products");
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function reflectanceAction()
|
|
{
|
|
$this->getmdlimited(array('albedo'),"airborne remote sensing data products");
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function vegtypeairAction()
|
|
{
|
|
$this->getmdlimited(array('vegetation type','land use'),'airborne remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function vegparamAction()
|
|
{
|
|
$this->getmdlimited(array("",'Vegetation structure parameters'),"airborne remote sensing data products");
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function soilmoistureAction()
|
|
{
|
|
$this->getmdlimited(array('','soil water content'),"airborne remote sensing data products");
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function temperatureAction()
|
|
{
|
|
$this->getmdlimited(array('','land surface temperature'),"airborne remote sensing data products");
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function hmonAction()
|
|
{
|
|
$this->getmd(array('Hydrometeorology observation network'));
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-HMon','about');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function superAction()
|
|
{
|
|
$this->getmdlimited(array('阿柔超级站','大满超级站','四道桥超级站'),'水文气象');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function normalAction()
|
|
{
|
|
$this->getmdlimited(array('景阳岭站','峨堡站','黄草沟站','阿柔阴坡站','阿柔阳坡站','黄藏寺站','大沙龙站','寺大隆站','排露沟林前气象站','水源涵养林研究院观测站','巴吉滩戈壁站','神沙窝沙漠站','张掖湿地站',
|
|
'花寒子荒漠站','五里墩气象站','四道桥混合林站','四道桥胡杨林站','四道桥裸地站','四道桥农田站','黑河上游生态-水文试验研究站','临泽内陆河流域研究站','阿拉善荒漠生态-水文实验研究站'),'水文气象');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function autometeoAction()
|
|
{
|
|
$this->getmdlimited(array('','automatic weather station'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-MSO','about');
|
|
}
|
|
function ecAction()
|
|
{
|
|
$this->getmdlimited(array('','eddy covariance system'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-MSO','about');
|
|
}
|
|
function lasAction()
|
|
{
|
|
$this->getmdlimited(array('','large aperture scintillometer'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-MSO','about');
|
|
|
|
}
|
|
function precAction()
|
|
{
|
|
$this->getmd(array('','河川径流观测'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function cgsAction()
|
|
{
|
|
$this->getmd(array('calibration measurement','ground measurement','synchronous observation'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function calibrationAction()
|
|
{
|
|
$this->getmd(array('','calibration measurement'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function groundAction()
|
|
{
|
|
$this->getmd(array('','ground measurement'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function syncAction()
|
|
{
|
|
$this->getmd(array('','synchronous observation'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function wsnAction()
|
|
{
|
|
$this->getmdlimited(array('WATERNET','SoilNET','BNUNET','LAI'),'Eco-hydrological Wireless Sensor Network');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function waternetAction()
|
|
{
|
|
$this->getmd(array('','WATERNET'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function soilnetAction()
|
|
{
|
|
$this->getmd(array('','SoilNET'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function bnunetAction()
|
|
{
|
|
$this->getmd(array('','BNUNET'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function bnulaiAction()
|
|
{
|
|
$this->getmdlimited('LAI','Eco-hydrological Wireless Sensor Network');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function satelliteAction()
|
|
{
|
|
$this->getmd(array('','satellite remote sensing'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function soilAction()
|
|
{
|
|
$this->getmd(array('','卫星遥感'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function meteoAction()
|
|
{
|
|
$this->getmd('气象','theme');
|
|
}
|
|
|
|
function hydroAction()
|
|
{
|
|
$this->getmd('水文观测','theme');
|
|
}
|
|
function irragationAction()
|
|
{
|
|
$this->getmd('灌溉','theme');
|
|
}
|
|
|
|
function obsAction()
|
|
{
|
|
$this->getmd('试验','theme');
|
|
}
|
|
|
|
function msoAction()
|
|
{
|
|
$this->getmdlimited(array('automatic weather station','eddy covariance system','large aperture scintillometer','stable isotope','TDP','cosmic-ray soil moisture observing system'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-MSO','about');
|
|
}
|
|
|
|
function isotopeAction()
|
|
{
|
|
$this->getmdlimited(array('','stable isotope'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function tdpAction()
|
|
{
|
|
$this->getmdlimited(array('','TDP'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function cosmosAction()
|
|
{
|
|
$this->getmdlimited(array('','cosmic-ray soil moisture observing system'),'flux observation matrix');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function rsproductAction()
|
|
{
|
|
$this->getmdlimited(array('DEM','DOM','降水','soil moisture','snow','vegetation type','vegetation cover','crop phenology','NPP'),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function demAction()
|
|
{
|
|
$this->getmdlimited(array('DEM','DOM'),'数据产品');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function precipitationAction()
|
|
{
|
|
$this->getmdlimited(array('降水',''),'数据产品');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function smAction()
|
|
{
|
|
$this->getmdlimited(array('soil moisture',""),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function snowAction()
|
|
{
|
|
$this->getmdlimited(array('snow',""),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function vegtypeAction()
|
|
{
|
|
$this->getmdlimited(array('vegetation type',''),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function vegcovAction()
|
|
{
|
|
$this->getmdlimited(array('vegetation cover',''),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function phenologyAction()
|
|
{
|
|
$this->getmdlimited(array('crop phenology',''),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function nppAction()
|
|
{
|
|
$this->getmdlimited(array('NPP',''),'satellite remote sensing data products');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2012Action()
|
|
{
|
|
$this->getmdrestricted(array('2012','Hydrometeorology observation network'));
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-HMon','about');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2013Action()
|
|
{
|
|
$this->getmdrestricted(array('2013','Hydrometeorology observation network'));
|
|
$archive = new Archive($this->db);
|
|
$this->view->info = $archive->getOneArchive('HiWATER-HMon','about');
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2012upAction()
|
|
{
|
|
$this->getmdrestricted(array('2012','上游寒区水文试验区','Hydrometeorology observation network'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2012middleAction()
|
|
{
|
|
$this->getmdrestricted(array('2012','中游人工绿洲试验区','Hydrometeorology observation network'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2012downAction()
|
|
{
|
|
$this->getmdrestricted(array('2012','下游天然绿洲试验区','Hydrometeorology observation network'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2013upAction()
|
|
{
|
|
$this->getmdrestricted(array('2013','上游寒区水文试验区','Hydrometeorology observation network'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2013middleAction()
|
|
{
|
|
$this->getmdrestricted(array('2013','中游人工绿洲试验区','Hydrometeorology observation network'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
function hmon2013downAction()
|
|
{
|
|
$this->getmdrestricted(array('2013','下游天然绿洲试验区','Hydrometeorology observation network'));
|
|
$this->_helper->viewRenderer('base');
|
|
}
|
|
|
|
function listAction()
|
|
{
|
|
$sql="select uuid,title from en.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');
|
|
$keytype = $this->_request->getParam('keytype');
|
|
$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(k.id) from en.keyword k left join en.normalmetadata m on k.id=m.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 k.keyword=?",$key);
|
|
$state=$this->db->query($sql);
|
|
$row=$state->fetchAll();
|
|
$sum=$row[0]['count'];
|
|
$sql="select uuid,title,id,description from en.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 en.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 {
|
|
$sql="select k.keyword,count(*),k.keytype from en.keyword k left join en.normalmetadata m on k.id=m.id where m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') ";
|
|
if (!empty($keytype) && ($keytype=='place' || $keytype=='theme' || $keytype=='discipline'||$keytype=='temporal')) $sql.=" and k.keytype='".$keytype."'";
|
|
$sql.=' group by k.keyword,k.keytype order by k.keytype,k.keyword,count desc';
|
|
$state=$this->db->query($sql);
|
|
$this->view->keytype=$keytype;
|
|
$this->view->keywords=$state->fetchAll();
|
|
}
|
|
}
|
|
|
|
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 SimpleSearch($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 en.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 en.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 en.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="hiwatertime.xml";
|
|
$rows=$this->db->fetchAll("select ts_created from en.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 en.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 en.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 en.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 en.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 {
|
|
//提供全部分类列表
|
|
}
|
|
}
|
|
|
|
function viewAction()
|
|
{
|
|
parent::viewAction();
|
|
include_once("ipip/IP.class.php");
|
|
$ip=new IP();
|
|
if (!$ip->mainland_verify())
|
|
$this->_helper->viewRenderer('hiwater/view');
|
|
else
|
|
$this->_helper->viewRenderer('hiwater/view-tianditu');
|
|
}
|
|
|
|
private function getmd($keyword,$type='theme')
|
|
{
|
|
$page=(int)$this->_request->getParam('page');
|
|
if (empty($page)) $page=1;
|
|
$offset=$this->limit*($page-1);
|
|
if (!is_array($keyword))
|
|
{
|
|
$keyword=array($keyword);
|
|
}
|
|
$key="(";
|
|
foreach($keyword as $k)
|
|
{
|
|
$key.="'".$k."',";
|
|
}
|
|
$key=substr($key,0,-1);
|
|
$key.=")";
|
|
$keyword=$key;
|
|
|
|
$state=$this->db->query("select count(m.*) from en.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 en.keyword where keytype='".$type."' and keyword in ".$keyword.")");
|
|
$row=$state->fetchAll();
|
|
$sum=$row[0]['count'];
|
|
//@todo: add order with title
|
|
$sql="select uuid,title from en.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 en.keyword where keytype='".$type."' and keyword in ".$keyword.")
|
|
order by regexp_replace(title,'[0-9]+','','g'),(substring(title, '([0-9]+)'))::int 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;
|
|
}
|
|
|
|
//获取多项条件并列关系的数据并必须满足limited条件
|
|
//$keyword:字符串或字符串数组
|
|
//$limited:限制字符串
|
|
//$without:明确不包含的字符串数组
|
|
private function getmdlimited($keyword,$limited,$without='')
|
|
{
|
|
$page=(int)$this->_request->getParam('page');
|
|
if (empty($page)) $page=1;
|
|
$offset=$this->limit*($page-1);
|
|
if (!is_array($keyword))
|
|
{
|
|
$keyword=array($keyword);
|
|
}
|
|
$key="(";
|
|
foreach($keyword as $k)
|
|
{
|
|
$key.="'".$k."',";
|
|
}
|
|
$key=substr($key,0,-1);
|
|
$key.=")";
|
|
$keyword=$key;
|
|
|
|
if (!empty($without))
|
|
{
|
|
if (!is_array($without))
|
|
{
|
|
$without=array($without);
|
|
}
|
|
$withoutkey="(";
|
|
foreach ($without as $wo)
|
|
{
|
|
$withoutkey.="'".$wo."',";
|
|
}
|
|
$withoutkey=substr($withoutkey,0,-1);
|
|
$withoutkey.=")";
|
|
}
|
|
|
|
$sql="select count(m.*) from en.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 en.keyword where lower(keyword)=lower('".$limited."'))
|
|
and m.id in (select id from en.keyword where keyword in ".$keyword.")";
|
|
if (!empty($without)) $sql.=" and m.id not in (select id from en.keyword where keyword in $withoutkey)";
|
|
$state=$this->db->query($sql);
|
|
$row=$state->fetchAll();
|
|
$sum=$row[0]['count'];
|
|
//@todo: add order with title
|
|
$sql="select uuid,title from en.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 en.keyword where lower(keyword)=lower('".$limited."'))
|
|
and id in (select id from en.keyword where keyword in ".$keyword.")";
|
|
if (!empty($without)) $sql.=" and id not in (select id from en.keyword where keyword in $withoutkey)";
|
|
$sql.=" order by regexp_replace(title,'[0-9]+','','g'),(substring(title, '([0-9]+)'))::int 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;
|
|
}
|
|
|
|
//获取多项必须满足的条件
|
|
//$keyword:字符串或字符串数组
|
|
private function getmdrestricted($keyword)
|
|
{
|
|
$page=(int)$this->_request->getParam('page');
|
|
if (empty($page)) $page=1;
|
|
$offset=$this->limit*($page-1);
|
|
if (!is_array($keyword))
|
|
{
|
|
$keyword=array($keyword);
|
|
}
|
|
$key="(";
|
|
foreach($keyword as $k)
|
|
{
|
|
$key.="m.id in (select id from en.keyword where keyword='".$k."') and ";
|
|
}
|
|
$key=substr($key,0,-4);
|
|
$key.=")";
|
|
$keyword=$key;
|
|
|
|
$state=$this->db->query("select count(m.*) from en.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 $keyword");
|
|
$row=$state->fetchAll();
|
|
$sum=$row[0]['count'];
|
|
//@todo: add order with title
|
|
$sql="select uuid,title from en.normalmetadata m where m.uuid in
|
|
(select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater')
|
|
and $keyword
|
|
order by regexp_replace(title,'[0-9]+','','g'),(substring(title, '([0-9]+)'))::int 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 authorAction()
|
|
{
|
|
$ac = $this->_request->getParam('ac');
|
|
$id = (int)$this->_request->getParam('id');
|
|
if ($ac=='verified') {
|
|
//已经认证过的数据作者
|
|
$this->view->tabID='author-verified';
|
|
$this->view->ac='verified';
|
|
if ($id) {
|
|
//列出作者的数据
|
|
$sql="select username,realname from users where id=?";
|
|
$this->view->author=$this->db->fetchRow($sql,array($id));
|
|
$sql="select m.* from en.normalmetadata m left join mdauthor a on a.uuid=m.uuid where m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and a.userid=?";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute(array($id));
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(10);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
} else {
|
|
//已经认证过的数据作者
|
|
$sql="select u.username,u.realname,u.id,count(u.id) as count from mdauthor a left join users u on a.userid=u.id where a.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and a.status=1 and a.uuid in (select uuid from en.normalmetadata) group by u.id,u.username,u.realname";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute();
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(50);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
}
|
|
} else if ($ac=='unverified' || empty($ac)) {
|
|
//未认证的数据作者
|
|
$this->view->tabID='author-unverified';
|
|
$this->view->ac='unverified';
|
|
if ($id) {
|
|
//列出数据
|
|
$sql="select individual as username from en.responsible where id=?";
|
|
$this->view->author=$this->db->fetchRow($sql,array($id));
|
|
$sql="select distinct m.* from en.normalmetadata m left join en.role r on m.uuid=r.uuid left join en.responsible s on r.resid=s.id where r.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and r.role in ('pointOfContact','resourceProvider','owner') and s.id=?";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute(array($id));
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(10);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
} else {
|
|
//列出所有作者
|
|
$sql="select distinct responsible.individual as username,responsible.id from en.responsible left join en.role on role.resid=responsible.id where role.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and role.role in ('pointOfContact','resourceProvider','owner')";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute();
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(50);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
}
|
|
}
|
|
}
|
|
|
|
function fundAction()
|
|
{
|
|
$id = (int)$this->_request->getParam('id');
|
|
if (!empty($id)) {
|
|
$sql="select * from fund where id=?";
|
|
$this->view->fund=$this->db->fetchRow($sql,array($id));
|
|
if ($this->view->fund) {
|
|
$sql="select distinct m.* from en.normalmetadata m left join mdfund mf on m.uuid=mf.uuid where m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and mf.fid=?";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute(array($id));
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(10);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
}
|
|
} else {
|
|
//提供全部分类列表
|
|
$sql="select f.id,f.title_en,f.fund_id,f.fund_type_en,f.ts_created,count(m.id) as datacount,sum(md.filesize) as filesize from fund f left join mdfund m on f.id=m.fid right join en.normalmetadata md on m.uuid=md.uuid where m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') group by f.id,f.title,f.fund_id,f.fund_type,f.ts_created order by f.ts_created desc";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute();
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(10);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
$this->_helper->viewRenderer('fund-list');
|
|
}
|
|
}
|
|
|
|
function organizationAction()
|
|
{
|
|
$page = $this->_request->getParam('page');
|
|
$name = $this->_request->getParam('name');
|
|
$state=$this->db->query("select distinct responsible.organisation from en.responsible left join en.role on role.resid=responsible.id where role.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='hiwater') and role.role in ('pointOfContact','resourceProvider','owner')");
|
|
$this->view->organisation=$state->fetchAll();
|
|
if (!empty($name)) {
|
|
$this->view->codename=$name;
|
|
$sql="select distinct m.* from en.normalmetadata m left join en.role r on m.uuid=r.uuid left join en.responsible s on r.resid=s.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 r.role in ('pointOfContact','resourceProvider','owner') and s.organisation=?";
|
|
$sth = $this->db->prepare($sql);
|
|
$sth->execute(array($name));
|
|
$rows = $sth->fetchAll();
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
|
$paginator->setItemCountPerPage(10);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
} else {
|
|
//提供全部分类列表
|
|
}
|
|
}
|
|
} |