westdc-zf1/application/default/controllers/DataController.php

1183 lines
76 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use \data\DataService;
use Helpers\View as view;
use Order\Order;
class DataController extends Zend_Controller_Action
{
private $limit=10;
function preDispatch()
{
$this->db=Zend_Registry::get('db');
$this->view->config = Zend_Registry::get('config');
$this->messenger=$this->_helper->getHelper('FlashMessenger');
$this->view->messages = $this->messenger->getMessages();
$this->view->theme = new Theme();
$this->view->main_nav_pageID = "data";
$this->view->nav = array(
array('link'=>'/','title'=>'<i class="icon-home"></i>'),
array('link'=>'/data','title'=>$this->view->config->title->data),
);
}
function indexAction()
{
//序列
$state=$this->db->query('select s.id,s.name,count(*) as count from en.series s,en.dataseries d where d.sid=s.id and length(s.name)>2 group by s.id,s.name order by count desc limit 15');
$this->view->serie=$state->fetchAll();
//分类
$state=$this->db->query('select c.code,name,name_zh,count(*) from en.category c,en.categorycode cc where c.code=cc.code group by c.code,cc.name,cc.name_zh');
$this->view->category=$state->fetchAll();
//关键词
$state=$this->db->query("select keyword,count(*) from en.keyword right join en.normalmetadata on keyword.id=en.normalmetadata.id where keytype='place' group by keyword order by count desc limit 20");
$k1=$state->fetchAll();
$state=$this->db->query("select keyword,count(*) from en.keyword right join en.normalmetadata on keyword.id=en.normalmetadata.id where keytype='theme' group by keyword order by count desc limit 20");
//$state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join en.normalmetadata m on k.id=m.id where k.keytype='theme' and (m.uuid in (select uuid from dataorder group by uuid order by count(uuid) desc limit 20)) group by k.keyword order by count(k.keyword) desc limit 20");
$k2=$state->fetchAll();
$state=$this->db->query("select keyword,count(*) from en.keyword right join en.normalmetadata on keyword.id=en.normalmetadata.id where keytype='discipline' group by keyword order by count desc limit 20");
$k3=$state->fetchAll();
$state=$this->db->query("select keyword,count(*) from en.keyword right join en.normalmetadata on keyword.id=en.normalmetadata.id where keytype='stratum' group by keyword order by count desc limit 20");
$k4=$state->fetchAll();
$state=$this->db->query("select keyword,count(*) from en.keyword right join en.normalmetadata on keyword.id=en.normalmetadata.id where keytype='temporal' group by keyword order by count desc limit 20");
//$state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join en.normalmetadata m on k.id=m.id where k.keytype='temporal' and (m.uuid in (select uuid from dataorder group by uuid order by count(uuid) desc limit 20)) group by k.keyword order by count(k.keyword) desc limit 20");
$k5=$state->fetchAll();
$this->view->keywords=array('place'=>$k1,'theme'=>$k2,'discipline'=>$k3,'stratum'=>$k4,'temporal'=>$k5);
//最新10个入库数据
$state=$this->db->query('select id,uuid,title from en.normalmetadata order by id desc limit 10');
$this->view->metadata = $state->fetchAll();
//特色数据
//服务
$searchform=new SearchForm();
$this->view->searchform=$searchform;
//其他连接
}
function onlinelistAction()
{
$page=(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$limit=30;
$offset=$limit*($page-1);
$state=$this->db->query('select count(*) from en.normalmetadata where datatype=0');
$row=$state->fetchAll();
$sum=$row[0]['count'];
$select=$this->db->select();
$select->from('en.normalmetadata','*')->where('datatype=0')->order('title')->limitPage($page,$limit);
$this->view->metadata = $this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$limit);
}
function offlinelistAction()
{
$page=(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$limit=30;
$offset=$limit*($page-1);
$state=$this->db->query('select count(*) from en.normalmetadata where datatype=1');
$row=$state->fetchAll();
$sum=$row[0]['count'];
$select=$this->db->select();
$select->from('en.normalmetadata','*')->where('datatype=1')->order('title')->limitPage($page,$limit);
$this->view->metadata = $this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$limit);
}
//展示最近20条离线神情记录情况
function offlineappAction()
{
$sql="select * from offlineapp where ts_approved is not null and pdflink<>'' and status>=0 and uuid in (select uuid from en.metadata) order by ts_created desc limit 20";
$this->view->rows=$this->db->fetchAll($sql);
}
function requestAction()
{
$archives=new Archive($this->db);
$this->view->item=$archives->getOneArchive('如何申请数据','help');
}
function submitAction()
{
$archives=new Archive($this->db);
$this->view->item=$archives->getOneArchive('如何发布数据','help');
}
function serviceAction()
{
}
function newsletterAction()
{
$l=new mydir($this->view->config->paths->newsletter,"newsletter_*.pdf");
$this->view->newsletters=$l->toArray();
$this->view->addHelperPath('helper','Zend_View_Helper_');
rsort($this->view->newsletters);
$form=new MaillistForm();
$this->view->form=$form;
$form->submit->setLabel('输入邮件地址,订阅数据通讯列表');
if ($this->_request->isPost()) {
//发送邮件
$formData=$this->_request->getPost();
if ($form->isValid($formData)) {
//$mail=new Zend_Mail('utf-8');
$mail=new WestdcMailer($this->view->config->smtp);
$mail->setFrom($formData['email']);
$mail->setBodyText(".");
$mail->setSubject('subscribe');
$mail->addTo($this->view->config->reportemail);
/*
$tr=new Zend_Mail_Transport_Smtp($this->view->config->smtp->host,
array('ssl' => $this->view->config->smtp->ssl,
'auth'=>$this->view->config->smtp->auth,
'username'=>$this->view->config->smtp->username,
'password'=>$this->view->config->smtp->password));
$mail->send($tr);
*/
$mail->send();
$this->messenger->addMessage('订阅成功,请检查您的邮件!');
$this->_redirect('/data/newsletter');
}
} else {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$user=$auth->getIdentity();
$formData['email']=$user->email;
$form->populate($formData);
}
}
}
function featureAction()
{
$sql="select * from datafeature order by id desc";
$this->view->feature=$this->db->fetchAll($sql);
}
function datasetcdAction()
{
$cd=new DatasetcdTable();
$this->view->rows=$cd->fetchAll();
}
/*
* 数据浏览
*/
function browseAction()
{
$page=(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$limit=10;
$offset=$limit*($page-1);
$state=$this->db->query('select count(*) from en.normalmetadata');
$row=$state->fetchAll();
$sum=$row[0]['count'];
$select=$this->db->select();
$select->from('en.normalmetadata','*')->order('id desc')->limitPage($page,$limit);
$this->view->metadata = $this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$limit);
}
function tagAction()
{
$id = (int)$this->_request->getParam('id');
$key = $this->_request->getParam('key');
$keytype = $this->_request->getParam('keytype');
$page=(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$limit=10;
$offset=$limit*($page-1);
$sql='select keyword,count(*),keytype from en.keyword right join en.normalmetadata on keyword.id=en.normalmetadata.id ';
if (!empty($keytype) && ($keytype=='place' || $keytype=='theme' || $keytype=='discipline'||$keytype=='temporal')) $sql.=" where keytype='".$keytype."'";
$sql.=' group by keyword,keytype order by keytype,keyword,count desc';
$state=$this->db->query($sql);
$this->view->keywords=$state->fetchAll();
if ($id>0 or !empty($key)) {
if (empty($key)) {
$where=$this->db->quoteInto('id = ?',$id);
$row=$md->fetchRow($where);
$key=$row->name;
}
$this->view->codename=$key;
$sql=$this->db->quoteInto('select count(m.id) from en.normalmetadata m,en.keyword k where m.id=k.id and k.keyword=?',$key);
$state=$this->db->query($sql);
$row=$state->fetchAll();
$sum=$row[0]['count'];
$select=$this->db->select();
$select->from('en.normalmetadata','*')->join('en.keyword','en.normalmetadata.id=keyword.id')->where('keyword.keyword=?',$key)->order('en.normalmetadata.title')->limitPage($page,$limit);
//$sql=$db->quoteInto('select m.* from metadata m,keyword k where m.id=k.id and k.keyword=?',$key);
//$state=$db->query($sql);
$this->view->metadata=$this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$limit);
}
}
/*
* 数据集序列浏览
*/
function seriesAction()
{
$id = $this->_request->getParam('id');
if (empty($id)) $id=0;
if (!is_numeric($id))
{
$name=$id;
$id='';
}
$keyword=$this->_request->getParam('keyword');
if (empty($id)) {
if (!empty($name))
{
$where=$this->db->quoteInto('name = ?',$name);
$row=$this->db->fetchRow("select * from en.series where ".$where);
}
} else {
$where=$this->db->quoteInto('id = ?',$id);
$row=$this->db->fetchRow("select * from en.series where ".$where);
}
if (!empty($id) or !empty($name))
{
if (!$row) $this->_redirect('/data');
$id=$row['id'];
}
$page=(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$limit=10;
$offset=$limit*($page-1);
$state=$this->db->query('select s.id,name,count(*) from en.series s,en.dataseries d where d.sid=s.id group by s.id,s.name');
$this->view->serie=$state->fetchAll();
if ($id>0) {
//$where=$this->db->quoteInto('id = ?',$id);
//$row=$this->db->fetchRow("select * from series where ".$where);
$this->view->codename=$row['name'];
if (!empty($keyword))
{
$sql='select count(m.id) as count from en.normalmetadata m,en.dataseries d,en.keyword k where m.id=d.id and m.id=k.id and d.sid=? and k.keyword=?';
$row=$this->db->fetchAll($sql,array($id,$keyword));
$this->view->codename.="[Tags: ".$keyword." ]";
}else{
$sql='select count(m.id) as count from en.normalmetadata m,en.dataseries d where m.id=d.id and d.sid=?';
$row=$this->db->fetchAll($sql,array($id));
}
$sum=$row[0]['count'];
$select=$this->db->select();
$select->from('en.normalmetadata','*')->join('en.dataseries','en.normalmetadata.id=dataseries.id')->where('dataseries.sid=?',$id)->order('en.normalmetadata.title')->limitPage($page,$limit);
if (!empty($keyword)) $select->join('keyword','keyword.id=en.normalmetadata.id')->where('keyword.keyword=?',$keyword);
$this->view->metadata=$this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$limit);
//$this->view->showtools=($sum>$page)?true:false;
//$this->view->form=new SearchForm();
$sql=$this->db->quoteInto("select keyword,count(*) as count from (select t.keyword,t.id from en.keyword t left join en.dataseries d on t.id=d.id where t.keytype='place' and d.sid=?) as f group by keyword order by count desc limit 30",$id);
$state=$this->db->query($sql);
$row=$state->fetchAll();
$this->view->places=$row;
$this->view->seriesid=$id;
} else {
//提供全部数据集序列列表
}
}
/*
* 分类浏览模式
*/
function categoryAction()
{
$page = $this->_request->getParam('page');
$code = (int)$this->_request->getParam('code');
$state=$this->db->query('select c.code,name,name_zh,count(*) from en.category c,categorycode cc where c.code=cc.code group by c.code,cc.name,cc.name_zh');
$this->view->category=$state->fetchAll();
if ($code>0 && $code<20) {
$where=$this->db->quoteInto('code = ?',$code);
$row=$this->db->fetchRow("select * from categorycode where ".$where);
$this->view->codename=$row['name'];
$sql='select count(m.id) from en.normalmetadata m left join en.category c on m.id=c.id where c.code=?';
$row=$this->db->fetchRow($sql,array($code));
$sum=$row['count'];
$select=$this->db->select();
$select->from('en.normalmetadata as m','*')->joinLeft('en.category as c','m.id=c.id')->where('c.code=?',$code)->order('m.title')->limitPage($page,$this->limit);
$this->view->metadata=$this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$this->limit);
} else {
//提供全部分类列表
}
}
/*
* 时间浏览方式
* todo:实现xml的缓存基于时间的缓存每天基于元数据修改的缓存每次导入后都重新生成一次。
*/
function timelineAction()
{
$fn="time1.xml";
$rows=$this->db->fetchAll("select ts_created from en.normalmetadata 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";
$md = new MetadataTable();
$db=$md->getAdapter();
$state=$db->query('select id,uuid,description,title,timebegin,timeend from en.normalmetadata where timebegin is not null order by timebegin');
$rows=$state->fetchAll();
$timexml='<data>';
foreach($rows as $row) {
$timexml.='<event start="'.date($dateformat,strtotime($row['timebegin'])).'" ';
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="/data/'.$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);
}
//$this->_helper->layout->disableLayout();
}
/*
* 空间浏览
*/
function mapAction()
{
//use json & openlayers?
$id=(int)$this->_request->getParam('id');
if ($id>0) $this->view->params="/id/$id";
}
/*
* 产生geojson数据
*/
function jsonAction()
{
$md=new MetadataTable();
$db=$md->getAdapter();
$id = (int)$this->_request->getParam('id');
$where='';
if (!empty($id)) { $where=' where id='.$id; }
$sql='select id,uuid,west,south,north,east,title from en.normalmetadata'.$where;
$state=$db->query($sql);
$rows=$state->fetchAll();
$geomd=new GeoMetaData();
foreach($rows as $row){
if ($id)
$box=new GeoBox($row['west'],$row['south'],$row['east'],$row['north']);
else
$box=new GeoBoxLine($row['west'],$row['south'],$row['east'],$row['north']);
$feature=new Geofeature();
$feature->id=$row['id'];
$feature->addProperties('title',$row['title']);
$feature->addProperties('uuid',$row['uuid']);
$feature->addProperties('id',$row['id']);
$feature->geometry=$box;
$geomd->addFeature($feature);
}
$this->_helper->json($geomd);
}
/*
* 时空动态浏览
*/
function timemapAction()
{
$sql='select id,uuid,west,south,north,east,title,timebegin,timeend from en.normalmetadata where timebegin is not null';
$this->view->rows=$this->db->fetchAll($sql);
}
/*
* 返回XML源文件
*/
function xmlAction()
{
$uuid=$this->_request->getParam('uuid');
$row=$this->db->fetchRow("select xml.data from xml left join metadata on xml.id=metadata.id where metadata.uuid=?",array($uuid));
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->getResponse()->setHeader('Content-Type', 'text/xml')
->setBody($row['data']);
}
function detailAction()
{
$id=(int)$this->_request->getParam('id');
$xml=new XmlTable();
$db=$xml->getAdapter();
$where=$db->quoteInto('id=?',$id);
$order='id desc';
$row=$xml->fetchRow($where,$order);
// Load the XML source
$xml = new DOMDocument;
$xml->loadXML($row->data);
$xsl = new DOMDocument;
$xsl->load($this->view->config->westdc->xsl);
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
$this->view->xml=$proc->transformToXML($xml);
//$this->_helper->layout->disableLayout();
//$this->_helper->viewRenderer->setNoRender();
//$this->getResponse()->setHeader('Content-Type', 'text/html')
// ->setBody($proc->transformToXML($xml));
}
function feedAction()
{
$feedArray = array(
'title' => '中国西部环境与生态科学数据中心',
'link' => 'http://'.$_SERVER['SERVER_NAME'].'/data/feed',
'description' => '共享西部计划产生的数据',
'language' => 'zh-CN',
'charset' => 'utf-8',
'published' => time(),
//'generator' => 'Zend Framework Zend_Feed',
'entries' => array()
);
$sql="select * from en.normalmetadata order by ts_created desc";
$rs=$this->db->fetchAll($sql);
$feedArray['published']=strtotime($rs[0]['ts_created']);
foreach($rs as $r)
{
$feedArray['entries'][] = array(
'title' => $r['title'],
'link' => 'http://'.$_SERVER['SERVER_NAME'].'/data/' . $r['uuid'],
'guid' => 'http://'.$_SERVER['SERVER_NAME'].'/data/' . $r['uuid'],
//'content'=>$r['description'],
'description' => $r['description'],
'lastUpdate' => strtotime($r['ts_created'])
);
}
$feed = Zend_Feed::importArray($feedArray,'rss');
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$feed->send();
}
/*
* todo: search
*/
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)) {
//$formData=$this->_request->getPost();
//include_once("bcspamblock.php");
//if ($form->isValid($formData)) {
$page=@(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$offset=$this->limit*($page-1);
$search=new Search($key);
$where=$search->sql_expr(array("title","description"));
$row=$this->db->fetchAll("select count(*) from en.normalmetadata where ".$where);
$sum=$row[0]['count'];
$sql="select uuid,title,id,description from en.normalmetadata where ".$where." order by 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;
}
}
/*
* todo: 高级搜索
*/
function advancesearchAction()
{
$this->view->addHelperPath('helper','Zend_View_Helper_');
//$form=new SearchForm();
//$this->view->form=$form;
$md=new MetadataTable();
$db=$md->getAdapter();
$page=(int)$this->_request->getParam('page');
if (empty($page)) $page=1;
$limit=10;
$offset=$limit*($page-1);
$key=$this->_request->getParam('q');
$n=(int)$this->_request->getParam('n');
$s=(int)$this->_request->getParam('s');
$e=(int)$this->_request->getParam('e');
$w=(int)$this->_request->getParam('w');
if (!(empty($n) && empty($key))) {
if (empty($n)) $n=90;
if (empty($s)) $s=-90;
if (empty($e)) $e=180;
if (empty($w)) $w=-180;
$start=$this->_request->getParam('start');
$end=$this->_request->getParam('end');
if (!empty($key)) {
$sql='select count(*) from en.normalmetadata where east<? and west>? and north<? and south>? and (title ilike ? or description ilike ?)';
$row=$db->fetchAll($sql,array($e,$w,$n,$s,'%'.$key.'%','%'.$key.'%'));
} else {
$sql='select count(*) from en.normalmetadata where east<? and west>? and north<? and south>?';
$row=$db->fetchAll($sql,array($e,$w,$n,$s));
}
$sum=$row[0]['count'];
$select=$db->select();
$select->from('en.normalmetadata','*')->where('east<?',$e)->where('west>?',$w)->where('north<?',$n)->where('south>?',$s);
if (!empty($key)) $select->where('(title ilike ? or description ilike ?)','%'.$key.'%');
$select->order('title')->limit($limit,$offset);
$this->view->metadata = $db->fetchAll($select);
$this->view->page=new Pagination($sum,$page);
$this->view->key=$key;
}
}
/*
* 根据id或uuid来查看元数据
* id为一组数字uuid为唯一标识符
*/
function viewAction()
{
$id = (int)$this->_request->getParam('id');
$sql="select m.*,s.status,g.id as gid,t.filename,i.doi as datadoi,i.author_en,i.publisher_en, date_part('year',i.ts_published) as publish_year from en.normalmetadata m left join en.mdstatus s on m.uuid=s.uuid
left join en.thumbnail t on t.id=m.id left join en.geonetworkmetadata g on m.uuid=g.uuid left join datadoi i on i.uuid=m.uuid where ";
if (empty($id)) {
$uuid = $this->_request->getParam('uuid');
if (empty($uuid)) $this->_redirect('/data');
$where=$this->db->quoteInto('m.uuid = ?',$uuid);
} else {
$where=$this->db->quoteInto('m.id = ?',$id);
}
$sql.=$where;
$this->db->setFetchMode(Zend_Db::FETCH_OBJ);
$row=$this->db->fetchRow($sql);
if (!$row) $this->_redirect('/data');
$id=$row->id;
$uuid=$row->uuid;
$this->view->metadata=$row;
//提前对表格进行预处理
$wiki=new WikiFormat();
$this->view->metadata->description=$wiki->parseTable($this->view->escape($row->description));
//处理外部链接
$this->view->metadata->description=preg_replace('/\[\s*(http:\/\/.+?)\s+(.*?)\]/m','<a href="$1">$2</a>',$this->view->metadata->description);
$this->view->thumburl='/gndata/'.sprintf('%05d',floor(($row->gid+0.1)/100)*100).'-'.sprintf('%05d',ceil(($row->gid+0.1)/100)*100-1)."/".$row->gid;
$this->view->thumburl.='/public/'.str_replace('_s.','.',$row->filename);
if (is_numeric($row->projection))
{
$sql="select proj4text from spatial_ref_sys where auth_srid=?";
$rs=$this->db->fetchRow($sql,array((int)$row->projection));
if ($rs) $this->view->projection=$rs->proj4text;
}
$sql = "select * from en.keyword where id=? order by keytype,ts_created";
$sth = $this->db->prepare($sql);
$rs = $sth->execute(array($id));
$this->view->keys = $sth->fetchAll(PDO::FETCH_BOTH);
$sql='select c.code,cc.name,cc.name_zh from en.category c,en.categorycode cc where c.code=cc.code and c.id= ?';
$state=$this->db->query($sql,array($id));
$this->view->category=$state->fetchAll();
$sql='select s.name,s.id from en.dataseries d, en.series s where d.sid=s.id and d.id= ?';
$state=$this->db->query($sql,array($id));
$this->view->series=$state->fetchAll();
$sql=$this->db->quoteInto("select count(*) as count from dataorder where uuid=?",$uuid);
$row=$this->db->fetchRow($sql);
$this->view->downloaded=$row->count;
//update the viewed times
$sql="update mdstat set viewed=viewed+1 where uuid=?";
$this->db->query($sql,array($uuid));
$sql=$this->db->quoteInto("select viewed from mdstat where uuid=?",$uuid);
$row=$this->db->fetchRow($sql);
$this->view->viewed=$row->viewed;
//相关资源
$sql="select * from en.onlineresource where uuid=? and (linkage not like '%ftp.westgis%') and name<>'元数据地址'";
$sql=$this->db->quoteInto($sql,$uuid);
$this->view->resources=$this->db->fetchAll($sql);
//相关文献:作者建议
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.uuid=? and m.reftype=0 and r.language<>'zh' order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$this->view->ref=$this->db->fetchAll($sql);
//数据的参考文献
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.uuid=? and m.reftype=2 and r.language<>'zh' order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$this->view->dataref=$this->db->fetchAll($sql);
//数据的专题文献
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.uuid=? and m.reftype=4 and r.language<>'zh' order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$this->view->themeref=$this->db->fetchAll($sql);
//用户发表文献
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.uuid=? and m.reftype=1 and r.language<>'zh' order by r.year desc,r.ts_created desc limit 15";
$sql=$this->db->quoteInto($sql,$uuid);
$this->view->userref=$this->db->fetchAll($sql);
//多篇引用形式hiwater
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.uuid=? and m.reftype=3 and r.language<>'zh' order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$this->view->mcitation=$this->db->fetchAll($sql);
//相关用户
$sql="select p.email,p.individual,p.organisation,r.role from en.role r left join en.responsible p on r.resid=p.id where r.uuid=? order by r.role,r.id";
$this->view->authors=$this->db->fetchAll($sql,array($uuid));
//数据限制信息
$sql="select u.* from en.uselimit u left join en.mdlimit m on u.id=m.lid where m.uuid=?";
$this->view->uselimits=$this->db->fetchAll($sql,array($uuid));
//相关下载
$sql = "select d.uuid,count(distinct(d.userid)) as downtimes,m.title from dataorder d left join en.metadata m on d.uuid=m.uuid where d.userid in (
select distinct(userid) from dataorder where uuid=? and status in (0,5)
) and d.uuid<>? and length(m.title)>2 group by d.uuid,m.title order by count(distinct(d.userid)) desc limit 10;";
$this->view->downlists = $this->db->fetchAll($sql,array($uuid,$uuid));
//数据附件
$sql = $this->db->quoteInto("select m.id,a.realname from mdattach m left join attachments a on m.id=a.id where language='en' and m.uuid=?",$uuid);
$this->view->attachments = $this->db->fetchAll($sql);
//数据版本
$sql = "SELECT count(id) as c FROM en.mdversion WHERE uuid=? AND changelog IS NOT NULL";
$sth = $this->db->prepare($sql);
$sth->execute(array($uuid));
$row = $sth->fetch();
$this->view->version = $row;
$archives = new Archive($this->db);
$data_archives = $archives->getArchiveByUUID($uuid);
if(!empty($data_archives))
{
foreach($data_archives as $k=>$v)
{
$data_archives[$k]['url'] = $archives->getArchiveUrlByCid($v['id']);
}
}
$this->view->data_archives = $data_archives;
//支持项目
include_once("data/Fund.php");
$fund = new Fund($this->db);
$this->view->fund = $fund->fetch($uuid);
//判断特殊数据服务
$this->view->dataService= $this->checkDataService($uuid);
//自动跳转
$sql="select s.* from datasource d left join source s on d.sourceid=s.id where d.uuid=?";
$row=$this->db->fetchRow($this->db->quoteInto($sql,$uuid));
$jump=$this->_request->getParam('jump');
if ($jump=="") $jump=1;//默认跳转
if (@$row->has_pages && ($jump==1))
{
$this->_helper->viewRenderer($row->code.'/view',null,true);
}
} //viewAction
//检查特殊数据服务是否存在
private function checkDataService($uuid)
{
$order = new \Order\Mount\OrderOperate();
$service = $order->getDataService($uuid);
if(empty($service))
{
return NULL;
}else{
if($order->checkOrderHas($uuid))
{
return NULL;
}else{
return $service;
}
}
}//checkDataService
//特殊数据服务
public function dataserviceAction()
{
$uuid = $this->_getParam('uuid');
if(empty($uuid))
{
$this->jsonexit(array("error"=>"参数错误"));
}
$dataservice = new \data\DataService();
$info = $dataservice->get($uuid);
//暂时只有wsn
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$data = array(
"type"=>"wsn", //服务类型
"info"=>$info, //信息 dataservice 表中的字段
"callback"=>"westdc.dataservice.wsn.request()", //成功后的js回调函数
);
$data['data'] = $dataservice->getWsnData("site",$uuid);
if(empty($data['data']))
{
$this->jsonexit(array("error"=>'数据接口错误,请联系管理员'));
return true;
}
if(!is_array($data['data']))
{
$this->jsonexit(array("error"=>$data['data']));
return true;
}
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->jsonexit($data);
}
// WSN end
}
public function wsnAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$type = $this->_getParam('type');
$uuid = $this->_getParam("uuid");
$dataservice = new DataService();
if($type == 'var')
{
$sites = array(
"chk"=>$this->_getParam("siteid")
);
$info = $dataservice->get($uuid);
$data = array(
"type"=>"wsn", //服务类型
"info"=>$info, //信息 dataservice 表中的字段
"callback"=>"westdc.dataservice.wsn.Submit()", //成功后的js回调函数
);
$data['data'] = $dataservice->getWsnData("var",$uuid,$sites);
if(empty($data['data']))
{
$this->jsonexit(array("error"=>'数据接口错误,请联系管理员'));
return true;
}
if(!is_array($data['data']))
{
$this->jsonexit(array("error"=>$data['data']));
return true;
}
$this->jsonexit($data);
return true;
}
if($type == "submit")
{
$info = $dataservice->get($uuid);
$param = array(
"site" => $this->_getParam("site"),
);
$data = array(
"type"=>"wsn", //服务类型
"info"=>$info, //信息 dataservice 表中的字段
"callback"=>"westdc.dataservice.wsn.Submited()", //成功后的js回调函数
);
$data['data'] = $dataservice->getWsnData("submit",$uuid,$param);
if(empty($data['data']))
{
$this->jsonexit(array("error"=>'数据接口错误,请联系管理员'));
return true;
}
if(!is_array($data['data']))
{
$this->jsonexit(array("error"=>$data['data']));
return true;
}
$order = new Order();
$status = $order->addOrder($uuid,json_encode($data['data']['site'],JSON_NUMERIC_CHECK));
if($status !== true)
{
$this->jsonexit(array("error"=>$status));
return true;
}
$this->jsonexit($data);
return true;
}
}
/*
getversionAction() 获取数据版本
*/
function getversionAction(){
$ac = $this->_getParam('ac');
$uuid = $this->_getParam('uuid');
if($ac == 'list')
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$sql = "SELECT v.changelog,v.ts_created,u.username FROM mdversion v
LEFT JOIN users u ON v.userid=u.id
WHERE v.uuid=? AND v.changelog IS NOT NULL
ORDER BY v.ts_created DESC";
$sth = $this->db->prepare($sql);
$sth->execute(array($uuid));
$rows = $sth->fetchAll();
if($rows)
{
foreach($rows as $k=>$v)
{
$rows[$k]['ts_created'] = date("Y-m-d H:i",strtotime($v['ts_created']));
$rows[$k]['changelog'] = str_replace("\n","</p><p>",$v['changelog']);
}
$data = array("list"=>$rows);
$this->jsonexit($data);
return true;
}else{
$data = array("error"=>"处理中出现错误");
$this->jsonexit($data);
return true;
}
}
}//getversionAction()
function replace($string){
$patterns = array("/\"/i","/\'/i");
$replacements = array("","");
ksort($patterns);
ksort($replacements);
return preg_replace($patterns, $replacements, $string);
}//引号替换
function postcommentAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
try{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
}else
{
$userid=0;
}
$author = mb_substr($this->replace(trim($this->_request->getParam('author'))),0,30,'UTF-8');
$email = mb_substr($this->replace(trim($this->_request->getParam('email'))),0,60,'UTF-8');
$url = mb_substr($this->replace(trim($this->_request->getParam('url'))),0,60,'UTF-8');
$content = $this->replace(trim($this->_request->getParam('content')));
$vdcode = mb_substr($this->replace(trim($this->_request->getParam('vdcode'))),0,4,'UTF-8');
if(empty($author))
{
echo "请输入您的名字";
exit();
}
if(strlen($author)<3) exit("姓名长度不得少于2个汉字 :)");
if(empty($email))
{
echo "请输入您的电子邮箱地址";
exit();
}
if(strlen($email)<4) exit("Email长度太短请填写正确的Email :)");
if(!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i",$email))
{
echo "Email格式不正确";
exit();
}
if(strlen($content)<5) exit("评论长度不得少于3个汉字 :)");
if(preg_match("/script/i",$content))
{
$content = preg_replace("/script/i","",$content);
}
if(preg_match("/<|>/",$content))
{
$data=array(
'<'=>'&lt;',
'>'=>'&gt;',
);
$patterns = array();
$replacements = array();
foreach($data as $k=>$v)
{
$patterns[]='/'.$k.'/i';
$replacements[]=$v;
}
ksort($patterns);
ksort($replacements);
$content=preg_replace($patterns, $replacements, $content);
if(!empty($url))
{
$url=preg_replace($patterns, $replacements, $url);
}
}
if(preg_match("/script/i",$url))
{
$url = preg_replace("/script/i","",$url);
}
if(!preg_match("/http:\/\//",$url))
{
$url = "http://".$url;
}
$uuid = trim($this->_request->getParam('uuid'));
if(!preg_match("/^[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}$/",$uuid))
{
echo "参数错误!";
exit();
}
if(strtolower($vdcode) != $_SESSION['vdcodes'])
{
echo "验证码错误,请重新输入";
exit();
}
$data = array(
'uuid' => $uuid,
'uid' => $userid,
'author' => $author,
'email' => $email,
'url' => $url,
'ip' => $_SERVER['REMOTE_ADDR'],
'content' => $content,
'agent' => $_SERVER['HTTP_USER_AGENT'],
'type' => 'comment'
);
$sql = "INSERT INTO comments (author,email,url,ip,content,agent,type,uuid,userid) VALUES (?,?,?,?,?,?,?,?,?)";
$sth = $this->db->prepare($sql);
$exec = $sth->execute(array($data['author'],$data['email'],$data['url'],$data['ip'],$data['content'],$data['agent'],$data['type'],$data['uuid'],$data['uid']));
if($exec)
{
$sql = "SELECT u.email FROM mdauthor au
LEFT JOIN users u on au.userid=u.id
WHERE au.uuid='$uuid'";
$sth = $this->db->query($sql);
$rows = $sth->fetchAll();
@$mailtp=new EmailText(
$this->db,
'data-comment-note-en',
array(
'user' =>$user->username,
'uuid' =>$data['uuid'],
'title' =>$this->replace(trim($this->_request->getParam('mdtitle'))),
'content'=>$content
)
);
@$mail=new WestdcMailer($this->view->config->smtp);
@$mail->setBodyText($mailtp->getBody());
@$mail->setFrom($this->view->config->service->email,'CARD data service');
@$mail->addTo($this->view->config->service->email);
if(is_array($rows) && count($rows)>0)
{
foreach($rows as $v)
{
@$mail->addTo($v['email']);
}
}
@$mail->setSubject($mailtp->getSubject());
@$mail->send();
$msg = "用户".$user->username."对元数据《".$this->replace(trim($this->_request->getParam('mdtitle')))."》进行了评论,<a href=\"/admin/data/comment\">点击查看</a>";
include_once("message.php");
message::post($this->db,0,-1,"收到新数据评论",$msg);
echo "评论成功<script>$('#reset').click();ajaxpage(0);$('#imgcode').click();</script>";
exit();
}else
{
echo "评论失败,请重试 :)";
exit();
}
}catch(Exception $e){
echo "出错了,请稍后再试";
exit();
}
}//ajax评论
/*
* 数据评论根据UUID读取
*/
function commentAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
if (empty($uuid)) die();
$sql="select * from comments where uuid=? AND reply=0 order by id desc";
$comments=$this->db->fetchAll($sql,array($uuid));
$paginator = Zend_Paginator::factory($comments);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(5);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('data/pagination_ajax.phtml');
include_once("Avatar.php");
$avatar = new Avatar();
if ($paginator)
{
foreach($paginator as $c)
{
//$author=$this->view->escape($c['author']);
$sql = "SELECT cr.id,cr.content as body,cr.reply,u.username,cr.ts_created,u.usertype,u.email as email,
(SELECT au.uuid FROM mdauthor au WHERE au.userid=u.id AND au.uuid='$uuid') as uuid
FROM comments cr
LEFT JOIN users u ON cr.userid=u.id
WHERE cr.reply=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($c['id']));
$replys = $sth->fetchAll();
$replyhtml = "";
if(!empty($replys) || count($replys)>0)
{
foreach($replys as $v)
{
$usertype = "";
$color = "";
if($v['usertype'] == "administrator")
{
$usertype = "[管理员]";
$color="#009d00";
}
if($v['uuid'] == $uuid)
{
$usertype = "[数据作者]";
$color="#add2e9";
}
if(!empty($color))
{
$color = 'background:'.$color.';color:#FFFFFF;';
}
$img = $avatar->Get($v['email'],48);
$replyhtml .='
<div class="media" style="background:#cecece;border-radius:6px 6px 6px 6px;">
<a class="pull-left" href="javascript:void(0);">
<img class="media-object img-rounded" src="'.$img.'">
</a>
<div class="media-body">
<span class="pull-right">回复于'.date('Y-m-d H:i:s',strtotime($v['ts_created'])).'</span>
<h5 class="media-heading">'.$v['username'].' '.$usertype.'</h5>
'.$v['body'].'
</div>
</div>
';
}
}
$img = $avatar->Get($c['email'],64);
//$img = '<img src="'.$img.'" />';
$author = $c['author'];
$author = ($c['url'])?'<a href="'.$c['url'].'">'.$author.'</a>':$author;
$author = ''.$author."";
$time = '发表于'.date('Y-m-d H:i:s',strtotime($c['ts_created'])).'';
print '
<div class="media" style="background:#eee;border-radius:6px 6px 6px 6px;">
<img class="media-object img-rounded pull-left" src="'.$img.'">
<div class="media-body">
<span class="pull-right">'.$time.'</span>
<h4 class="media-heading">'.$c['author'].'</h4>
'.$c['content'].'
'.$replyhtml.'
</div>
</div>
';
}
echo '<div class="paginator">'.$paginator.'</div>';
}//else echo "<li>No comments.</li>";
}//评论列表
/**
* 判断用户是否填写了申请信息
* @param string $uuid
* @param int $userid
*/
function todownloadAction() {
$this->view->pageID = "account-dataorder";
$this->_helper->viewRenderer('onlineapp-download');
$this->view->uuid = $uuid = $this->_request->getParam('uuid');
$auth = Zend_Auth::getInstance();
if (!$auth->hasIdentity())
{
$this->view->AlertType = "alert-error";
$this->view->msg = "Please login first.";
$this->view->jump_url = '/account/login/?href=/data/todownload/uuid/'.$uuid;
return true;
}
if(empty($uuid))
{
$this->view->AlertType = "alert-error";
$this->view->msg = "Wrong Parameter.";
$this->view->jump_url = "/data";
return true;
}
$this->view->projectType = array(
"Choose Funding type" => "",
"National Funding" => "National Funding",
"Thesis or Dissertation"=>"Thesis or Dissertation",
"Others" => "Others",
);
$userid = Zend_Auth::getInstance()->getIdentity()->id;
$submit = $this->_getParam('submit');
if(!empty($submit)){
$datas = array();
$datas['realname'] = $this->_request->getParam('realname');
$datas['unit'] = $this->_request->getParam('unit');
$datas['phone'] = $this->_request->getParam('phone');
$datas['address'] = $this->_request->getParam('address');
$datas['postcode'] = $this->_request->getParam('postcode');
$datas['email'] = $this->_request->getParam('email');
$datas['project'] = $this->_request->getParam('project');
$datas['project_id'] = $this->_request->getParam('project_id');
$datas['project_type'] = $this->_request->getParam('project_type');
$datas['project_title'] = $this->_request->getParam('project_title');
$datas['project_leader']= $this->_request->getParam('project_leader');
$this->view->info = $datas;
$this->view->AlertType = "alert-error";
foreach($datas as $k=>$v)
{
if(empty($v))
{
$this->view->error = "Every input could not be empty.";
return true;
}
}
if(!is_numeric($datas['postcode']))
{
$this->view->error = "Phone and zip code must be number.";
return true;
}
if(!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i",$datas['email']))
{
$this->view->error = "Please correct your email";
return true;
}
if(mb_strlen($datas['project'],"utf-8")<8)
{
$this->view->error = "The content of the fund must large than 8 chars.";
return true;
}
if(preg_match('/^\d+$/',$datas['project']))
{
$this->view->error = "Please input the content of the fund.";
return true;
}
$data = array(
'userid' => $userid,
'username' => $datas['realname'],
'unit' => $datas['unit'],
'phone' => $datas['phone'],
'address' => $datas['address'],
'postcode' => $datas['postcode'],
'project' => $datas['project'],
'uuid' =>$uuid,
'email' =>$datas['email'],
'project_id'=>$datas['project_id'],
'project_title'=>$datas['project_title'],
'project_type'=>$datas['project_type'],
'project_leader'=>$datas['project_leader']
);
if($this->db->insert('onlineapp',$data))
{
$select = "select id from onlineapp where userid='$userid' order by id desc";
$re=$this->db->query($select);
$row=$re->fetch();
$this->view->AlertType = "alert-success";
$this->view->jump_url = '/data/download/uuid/'.$uuid.'/onlineappid/'.$row['id'];
$this->view->msg = "You are successful submit your online data download information, just wait a moment to auto jump to the download url.<a href=\"".$this->view->jump_url."\"> Or click here to visit the download url.</a>";
$msg = "用户{$data['username']} 填写了在线数据申请表 <a href=\"/admin/down/online/show/{$row['id']}\">查看详细</a>";
$title = "用户 {$data['username']} 申请了在线下载数据";
include_once("message.php");
message::post($this->db,0,-1,$title,$msg);
return true;
}else {
$this->view->AlertType = "alert-error";
$this->view->error = "Failure.";
$this->view->info = $data;
return true;
}
return true;
}else{
$testsql="select * from onlineapp where userid='$userid' and uuid='$uuid' order by id desc";
$result=$this->db->query($testsql);
$rows = $result->fetch();
if (empty($rows['id']))
{
include_once("Users.php");
$usr = new Users($this->db);
$this->view->info = $usr->getUserInfo($userid);
return true;
}else{
$datas['realname'] = $rows['username'];
$datas['unit'] = $rows['unit'];
$datas['phone'] = $rows['phone'];
$datas['address'] = $rows['address'];
$datas['postcode'] = $rows['postcode'];
$datas['email'] = $rows['email'];
$datas['project'] = $rows['project'];
$datas['project_id'] = $rows['project_id'];
$datas['project_type'] = $rows['project_type'];
$datas['project_title'] = $rows['project_title'];
$datas['project_leader'] = $rows['project_leader'];
$this->view->info = $datas;
return true;
}
}
return true;
}
/*
* 数据下载根据UUID进行判断
* 一次只下载一个数据(一个元数据项)
*/
function downloadAction()
{
$uuid=$this->_request->getParam('uuid');
$onlineappid=$this->_request->getParam('onlineappid');
$this->view->pageID = "account-dataorder";
if (empty($uuid)) $this->_redirect('/data');
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
}
$testsql="select id,has_send_mail from onlineapp where userid='$userid' and uuid='$uuid' order by id desc";
$result=$this->db->query($testsql);
$rows = $result->fetch();
$has_send_mail=$rows['has_send_mail'];
if (empty($rows['id']))
{
$this->_redirect('/data/'.$uuid);
}else{
$sql="select onlineappid,id from dataorder where status=0 and userid='$userid' and uuid='$uuid' order by id desc";
$re=$this->db->query($sql);
$row=$re->fetch();
if(empty($row['onlineappid']))
{
$data = array(
'userid' => $userid,
'uuid' => $uuid,
'onlineappid'=> $onlineappid,
'ts_approved'=>'now()',
);
try {$this->db->insert('dataorder',$data);} catch (Exception $e) {}
}else{
$sql="update dataorder set onlineappid='$onlineappid',ts_approved=now() where id='{$row['id']}'";
try {$this->db->exec($sql);} catch (Exception $e) {}
}
}
$sql=$this->db->quoteInto("select * from dataset o left join en.metadata m on o.uuid=m.uuid left join en.mdstatus s on m.uuid=s.uuid where s.status>4 and m.datatype=0 and m.uuid=?",$uuid);
$data=$this->db->fetchRow($sql);
$updateftp=$updateftp1=false;
$this->view->md=$data;
$this->view->userpass=md5('westdc'.rand(1000,9999));
$this->view->ftptime=date('Y-m-d H:i:s', strtotime('+1 week'));
$sql=$this->db->quoteInto("select * from ftpuser where userid=?",$userid);
$row=$this->db->fetchRow($sql);
$datacount=$row['datacount'];
if ($data['host']=='ftp.westgis.ac.cn')
{
//添加FTP帐号信息以及时间控制信息
$updateftp=true;
$g6=new G6ftp();
$g6->db=$this->db;
//不进行判断,每个元数据中的下载地址都对应一个虚拟路径
$path[]=$data['path'];
$this->view->username='westdc'.$userid;
$uu=(object)array("id"=>$userid,
"username"=>$this->view->username,
"password"=>$this->view->userpass,
"path"=>$path,
"maxdata"=>$this->view->config->download->max,
"time"=>$this->view->ftptime,
"datacount"=>$datacount);
if ($g6->createuser($uu)) {
$this->view->userpass=$g6->pwd;
$this->view->ftptime=$g6->time;
} else {
$this->messenger->addMessage('Error: You are downloading too much data now.');
$this->_redirect('/data/order');
}
} elseif ($data['host']=='ftp1.westgis.ac.cn') {
//添加FTP1帐号信息以及时间控制信息
$proftp=new Proftp();
$proftp->db=$this->db;
//proftp离线用户名和g6的用户名稍有不同
$this->view->username='westdc_'.$userid;
$uu=(object)array("id"=>$userid,
"username"=>$this->view->username,
"password"=>$this->view->userpass,
"host"=>'ftp1.westgis.ac.cn',
"param"=>"onlineappid=".$onlineappid,
"maxdata"=>$this->view->config->download->max,
"time"=>$this->view->ftptime,
"datacount"=>$datacount);
if ($proftp->createuser($uu))
{
$this->view->userpass=$proftp->pwd;
$this->view->ftptime=$proftp->time;
}
} elseif ($data['host']=='ftp2.westgis.ac.cn'){
//添加FTP2帐号信息以及时间控制信息
$proftp=new Pureftp();
$proftp->db=$this->db;
$this->view->username='westdc_'.$userid;
$uu=(object)array("id"=>$userid,
"username"=>$this->view->username,
"password"=>$this->view->userpass,
"host"=>'ftp2.westgis.ac.cn',
"param"=>"onlineappid=".$onlineappid,
"maxdata"=>$this->view->config->download->max,
"time"=>$this->view->ftptime,
"datacount"=>$datacount);
if ($proftp->createuser($uu))
{
$this->view->userpass=$proftp->pwd;
$this->view->ftptime=$proftp->time;
}
}
$ftpurl='ftp://'.$this->view->username.'@'.$data['host'];
if ($data['host']=='ftp.westgis.ac.cn') $ftpurl.=$data['path'];
//设置输出
//if ($updateftp || $updateftp1) $this->view->userpass=$password;
$this->view->ftpurl=$ftpurl;
//更新下载记录
//todo: 尝试添加一个RULE若有对应数据存在则不插入 userid,uuid,status=0,ts_approved:null)
/*$sql="select * from dataorder where userid=? and uuid=? and status=0 and (ts_approved is null)";
$u=$this->db->fetchRow($sql,array($userid,$uuid));
if (empty($u)) {
$sql="insert into dataorder (userid,uuid,ts_created) values(?,?,now())";
$this->db->query($sql,array($userid,$uuid));
}*/
if (!empty($ftpurl) && !$has_send_mail)
{
$data = array(
"uuid"=>$uuid,
"title"=>$this->view->md['title']."(".$this->view->md['filesize']."MB)",
"user"=>$user->username,
"ftpuser"=>$this->view->username,
"ftppwd"=>$this->view->userpass,
"ftptime"=>$this->view->ftptime,
"ftpurl"=>$this->view->ftpurl,
"note"=>$updateftp?'BTW: You need to enter the path mannually.':''
);
$mailtp=new EmailText($this->db,'online-download-en',$data);
$mail=new WestdcMailer($this->view->config->smtp);
$mail->setBodyText($mailtp->getBody());
$mail->setFrom($this->view->config->service->email,'CARD data service');
$mail->addTo($user->email);
$mail->setSubject($mailtp->getSubject());
@$mail->send();
$sql="update onlineapp set has_send_mail=true where id=?";
$sth=$this->db->prepare($sql);
$sth->execute(array($onlineappid));
}
}
/*
* 离线申请(可以包括在线数据),在无数据参数时,则显示已有列表
*/
function orderAction()
{
$this->view->pageID = "account-dataorder";
$ac = $this->_request->getParam('ac');
$uuid = $this->_request->getParam('uuid');
$del = $this->_request->getParam('del');
$apply = $this->_request->getParam('apply');
$finish = $this->_request->getParam('finish');
$cancel = $this->_request->getParam('cancel');
$wsn = $this->_request->getParam('wsn');
$pdf = $this->_request->getParam('pdf');
$selections = $this->_request->getParam('data');
//if (empty($uuid)) $this->_redirect('/data');
$userid = view::User('id');
//添加到数据篮
if ($uuid)
{
//存在历史遗留问题,原来的数据并不能保证唯一
$order = new Order();
$state = $order->addOrder($uuid);
if($state !== true)
{
if(!is_array($state))
{
$this->view->msg = view::Msg('alert-error',$state);
}else{
$service_type = $order->serviceTypeTest($state['service_type']);
if($service_type !== false)
{
view::Post($this,$service_type,$state['service_url']."?href=".urlencode(view::getHostLink()."/data/order/")."&uuid=".$state['uuid']."&uid=".$userid);
}else{
$this->view->msg = view::Msg('alert-error',"Error: could not add this dataset.");
}
}
}else{
$this->view->msg = view::Msg('alert-success',"Success! You can add more dataset or submit your application.");
}
if (empty($ac)) $ac='offline1';
} elseif ($selections) {
if(empty($uuid))
{
$this->view->msg = view::Msg('alert-error',"Error: Wrong parameter.");
}
$order = new Order();
$state = $order->addOrder($uuid,$selections);
if($state !== true)
{
$this->view->msg = view::Msg('alert-error',$state);
}else{
$this->view->msg = view::Msg('alert-success',"Success! You can add more dataset or submit your application.");
}
if (empty($ac)) $ac='offline1';
}
//删除申请
elseif ($del) {
$order = new Order();
$state = $order->del($del);
if($state !== true)
{
$this->view->msg = view::Msg('alert-error',$state);
}else{
$this->view->msg = view::Msg('alert-success',"The order is canceled.");
}
$this->_redirect('/data/order');
}
//提交申请
elseif ($apply) {
if($apply == "all" || !is_numeric($apply))
{
$apply = -1;
}
$order = new Order();
$state = $order->apply($apply);
if($state !== true)
{
$this->view->msg = view::Msg('alert-error',$state);
}else{
$this->view->msg = view::Msg('alert-success',"Please click Submitting to generate your pdf Order.");
}
if (empty($ac)) $ac='offline2';
}
//完成
elseif ($finish) {
if ($finish=='all') {
$sql=$this->db->quoteInto("update dataorder set ts_approved=now() where status=0 and userid=?",$userid);
$this->db->query($sql);
$sql="update ftpuser set datacount=0 where userid=?";
$this->db->query($sql,array($userid));
} else {
$sql="update dataorder set ts_approved=now() where status=0 and userid=? and id=?";
$this->db->query($sql,array($userid,(int)$finish));
$sql="update ftpuser set datacount=datacount-1 where userid=? and datacount>0";
$this->db->query($sql,array($userid));
}
}
elseif($wsn){
$this->_helper->viewRenderer('order-wsn');
return true;
}
elseif ($cancel) {
if ($cancel=='all') {
$sql=$this->db->quoteInto("update dataorder set ts_approved=now(),status=-1 where status=0 and userid=?",$userid);
$this->db->query($sql);
$sql="update ftpuser set datacount=0 where userid=?";
$this->db->query($sql,array($userid));
} else {
$sql="update dataorder set ts_approved=now(),status=-1 where status in (0,1,2) and userid=? and id=?";
$this->db->query($sql,array($userid,(int)$cancel));
$sql="update ftpuser set datacount=datacount-1 where userid=? and datacount>0";
$this->db->query($sql,array($userid));
}
if (empty($ac)) $ac='offline2';
}
//生成PDF离线申请文件
elseif ($pdf) {
//用户信息可以从SESSION中读取离线申请信息
//$sql="select * from users where id=?";
$order = new Order();
$rows = $order->getOrderItemForPdf();
$this->view->projectType = $order->projectType;
if ($rows) {
$this->_helper->viewRenderer('pdf');
$this->view->data2 = $rows;
if ($this->_request->isPost()) {
$this->view->formData = $formData = $this->_request->getPost();
$datalist='';
foreach($rows as $i=>$row)
{
$datalist.=($i+1).". ".$row['title'].";";
}
$formData['datalist'] = $datalist;
if (@$formData['save']) {
$order->setPdfData($rows);
$s = $order->SaveOrder($formData);
if($s !== true)
{
$this->view->error = view::Msg('alert-error',$s);
return true;
}
//不能修改顺序
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
return true;
} elseif ($formData['submit']) {
//生成PDF
$order->setPdfData($rows);
$s = $order->SubmitOrder($formData);
if($s !== true)
{
$this->view->error = view::Msg('alert-error',$s);
return true;
}
$this->view->msg = view::Msg('alert-success','Message: Your offline order is submitted. Please <a href="/data/order/ac/offline3">upload your PDF with personal signature</a>.',0);
if (empty($ac)) $ac='offline3';
}
} else {
$sql="select u.* from users u left join offlineapp o on u.id=o.userid where u.id=? ORDER BY o.id DESC";
$row=$this->db->fetchRow($sql,array($userid));
$this->view->formData = $row;
}
} else{
$this->view->msg=view::Msg('alert-error',"Error: You have not submitted any order, or you need to wait the auditing.",0);
}
return true;
}//pdf
if($ac == "commitapplicationform")
{
$offlineappid = $this->_getParam('offlineappid');
if(!is_numeric($offlineappid) || $offlineappid < 1)
{
view::Post($this,"Wrong parameter",-1);
return true;
}
$order = new Order();
$status = $order->commitApplicationForm($offlineappid);
if( $status !== true)
{
view::Post($this,$status,-1);
}else{
view::Post($this,"Your order has submitted, please wait CARD receive your order.",'/data/order/ac/offline3');
}
return true;
}
//index
$this->view->ac = $ac;
$this->_helper->viewRenderer('order');
if ($ac=='' || $ac=='online')
{
$this->view->tabID='order-online';
} else if ($ac=='offline1') {
$this->view->tabID='order-offline1';
} else if ($ac=='offline2') {
$this->view->tabID='order-offline2';
} else if ($ac=='offline3') {
$this->view->tabID='order-offline3';
} else if ($ac=='offline4') {
$this->view->tabID='order-offline4';
}
//显示已经申请的数据,包括已经提交的申请和未提交的申请,还有已经处理完成的申请,正在进行的在线数据下载
$sql="select d.*,m.title,m.datatype,off.applicationform from dataorder d
right join en.metadata m on d.uuid=m.uuid
left join offlineapp off ON off.id = d.offlineappid
where d.userid=? order by d.status,d.ts_created desc";
$rows=$this->db->fetchAll($sql,array($userid));
$showorders = array();
$counts = array(
'onlineapp' => 0,
'offline1' => 0,
'offline2' => 0,
'offline3' => 0,
'offline4' => 0
);
if(count($rows) > 0) {
foreach($rows as $k=>$v)
{
switch($v['status']) {
case 0:
$counts['onlineapp'] ++;
break;
case 1:
$counts['offline1'] ++;
break;
case 2:
$counts['offline2'] ++;
break;
case 3:
$counts['offline3'] ++;
break;
case 4:
$counts['offline3'] ++;
break;
case 5:
$counts['offline4'] ++;
break;
}
switch($ac){
default :
if($v['status'] == 0 && !empty($v['ts_approved']))$showorders[] = $rows[$k];
break;
case 'online' :
if($v['status'] == 0 && !empty($v['ts_approved']))$showorders[] = $rows[$k];
break;
case 'offline1' :
if($v['status'] == 1) $showorders[] = $rows[$k];
break;
case 'offline2' :
if($v['status'] == 2)
{
$showorders[] = $rows[$k];
$this->view->offlineappid = $v['offlineappid'];
$this->view->applicationform = $v['applicationform'];
$this->view->offlineappstatus = $v['status'];
}
break;
case 'offline3' :
if($v['status'] == 3 || $v['status'] == 4)
{
$showorders[] = $rows[$k];
$this->view->offlineappid = $v['offlineappid'];
$this->view->applicationform = $v['applicationform'];
$this->view->offlineappstatus = $v['status'];
}
break;
case 'offline4' :
if($v['status'] == 5) $showorders[] = $rows[$k];
break;
}
}
}
$this->view->counts = $counts;
view::addPaginator($showorders,$this,10);
}
/*
* 查看数据缩略图
*/
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");
$row=$state->fetchAll();
$sum=$row[0]['count'];
$select=$this->db->select();
$select->from('en.normalmetadata as m','m.*')
->order('m.title desc')->limitPage($page,9);
$this->view->metadata = $this->db->fetchAll($select);
$this->view->page=new Pagination($sum,$page,$this->limit);
}
/*
*附件下载
*/
function attachAction(){
$uuid = $this->_request->getParam('uuid');
if(!empty($uuid))
{
$sql="select * from mdattach m left join attachments a on m.id=a.id where m.uuid='$uuid'";
$re=$this->db->query($sql);
$atts = $re->fetch();
if(empty($atts['id']))
{
$this->_redirect("/data/$uuid");
}//没有附件
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
/*
$user = $auth->getIdentity();
$userid = $user->id;
$sql = "select d.* from dataorder d
left join users u on u.id=d.userid
left join metadata m on m.uuid=d.uuid
where (d.status=5 and d.userid='$userid' and d.uuid='$uuid') or u.usertype='administrator'";
$re= $this->db->query($sql);
$row=$re->fetch();
if(!empty($row['uuid']))
{
$this->messenger->addMessage('您没有权限下载该附件');
$this->_redirect("/data");
}
else
{*/
//由于涉及多个文件下载所以将附件添加到zip压缩文件再输出
$sql="select * from mdattach m left join attachments a on m.id=a.id where m.uuid='$uuid'";
$re=$this->db->query($sql);
$atts = $re->fetchAll();
$zip = new ZipArchive();
$url=$this->view->config->upload."tmp/attachments_$uuid.zip";//创建临时文件
$opened=$zip->open($url, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
if( $opened !== true ){
die("cannot open {$url} for writing.");
}
$updates = array(); //统计被下载的附件ID
foreach ($atts as $k=>$v)
{
if (is_file($this->view->config->upload.$v['filename'])) {
$updates[]=$v['id'];
$zip->addFile($this->view->config->upload.$v['filename'],'/'.basename($v['filename']));
}
}
$zip->close();
//更新统计
$ids=join(',',$updates);
$sql = "update attachments set downtimes=downtimes+1 where id in ($ids)";
@$this->db->exec($sql);
//输出下载
$content=file_get_contents($url);
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
->setHeader('Content-Disposition','attachment; filename="'.basename($url).'"')
->setHeader('Content-Length', strlen($content))
->setHeader('Content-Type','application/force-download')
->setHeader('Content-Type','application/download')
->setHeader('Content-Type','application/zip')
->setHeader('Content-Description','File Transfer')
->setHeader('Content-Transfer-Encoding','binary')
->setHeader('Expires',0)
->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0')
->setHeader('Pragma','public')
->setBody($content);
// }
}//end if
else
{
$this->messenger->addMessage('您没有权限下载该附件');
$this->_redirect("/data/$uuid");
}//未登陆
}//end if
else
{
$this->messenger->addMessage('您没有权限下载该附件');
$this->_redirect("/data/$uuid");
}//无权限
}
/*
* 西部计划项目及其数据产出
*/
public function westeeAction()
{
//$sql="select w.*,m.uuid from westee w left join westeemd m on w.id=m.eeid order by w.id";
$sql="select * from westee order by id";
$this->view->westee=$this->db->fetchAll($sql);
$sql="select w.eeid,m.title,m.uuid from westeemd w left join metadata m on w.uuid=m.uuid order by w.eeid";
$this->view->westeemd=$this->db->fetchAll($sql);
}
public function pingbackAction()
{
$this->_helper->ViewRenderer->setNoRender();
$this->_helper->layout->disableLayout();
$server = new Zend_XmlRpc_Server();
$server->setClass('PingbackRpc', 'pingback');
echo $server->handle();
}
public function pingtestAction()
{
$this->_helper->ViewRenderer->setNoRender();
$this->_helper->layout->disableLayout();
$client = new Zend_XmlRpc_Client('http://test.westgis.ac.cn/data/pingback');
$arg1 = 'http://wlx.westgis.ac.cn/567/';
$arg2 = 'http://test.westgis.ac.cn/data/487591d0-d437-4114-b810-cbef7c4ee4b2';
//$result = $client->call('pingback.ping', array($arg1, $arg2));
$test = $client->getProxy('pingback');
$test->ping($arg1,$arg2);
//var_dump($result);
}
public function outputAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$sql="select title,datatype,filesize,id from en.normalmetadata";
$md=$this->db->fetchAll($sql);
foreach($md as $m)
{
print $m["title"].",";
print ($m["datatype"]?"内部":"公开").",";
print ($m["filesize"]==1?" ":$m["filesize"]).",";
$sql1="select keyword from keyword where id=".$m["id"]." and keytype='place'";
$kd=$this->db->fetchAll($sql1);
foreach ($kd as $p) print $p["keyword"]." ";
print ",";
$sql1="select keyword from keyword where id=".$m["id"]." and keytype='temporal'";
$kd=$this->db->fetchAll($sql1);
foreach ($kd as $p) print $p["keyword"]." ";
print ",";
print "<br>";
}
}
public function jsonexit($data){
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
return true;
}
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.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 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 {
//提供全部分类列表
}
}
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 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.id is not null group by f.id,f.title,f.fund_id,f.fund_type,f.ts_created order by datacount desc,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');
}
}
//实现基于DOI信息的浏览
function doiAction()
{
$ac = $this->_request->getParam('ac');
if ($ac=='unready') {
//列出没有DOI的数据
$sql="select m.* from en.normalmetadata m where length(m.doi)<3 and m.uuid not in (select uuid from datadoi) order by m.ts_created desc";
$this->view->pageID='doi-unready';
} else if ($ac=='prepare') {
//列出有DOI但还未进行提交申请的数据
$sql="select m.* from en.normalmetadata m where length(m.doi)>3 and m.uuid not in (select uuid from datadoi) order by m.ts_created desc";
$this->view->pageID='doi-prepare';
} else if ($ac=='unsubmit') {
//列出有DOI并计划提交申请的数据
$sql="select m.*,d.doi as datadoi,date(d.ts_created) as ts_created from en.normalmetadata m left join datadoi d on m.uuid=d.uuid where length(m.doi)>3 and d.ts_created is not null and d.ts_submitted is null order by d.ts_created desc";
$this->view->pageID='doi-unsubmit';
} else if ($ac=='submit') {
//列出有DOI并计划提交申请的数据
$sql="select m.*,d.doi as datadoi,date(d.ts_submitted) as ts_submitted from en.normalmetadata m left join datadoi d on m.uuid=d.uuid where length(m.doi)>3 and d.ts_submitted is not null and d.ts_published is null order by d.ts_submitted desc,d.ts_created desc";
$this->view->pageID='doi-submit';
} else if ($ac=='publish' || empty($ac)) {
//默认列出最新发布的DOI数据
$sql="select m.*,d.doi as datadoi,date(d.ts_submitted) as ts_submitted,date(d.ts_published) as ts_published from en.normalmetadata m left join datadoi d on m.uuid=d.uuid where length(m.doi)>3 and d.ts_published is not null order by d.ts_published desc,d.ts_submitted desc,d.ts_created desc";
$this->view->pageID='doi-publish';
}
$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;
}
//基于数据作者的浏览(包括认证后的数据作者以及未认证的数据作者)
function authorAction()
{
$ac = $this->_request->getParam('ac');
$id = (int)$this->_request->getParam('id');
if ($ac=='verified')
{
//已经认证过的数据作者
$this->view->pageID='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 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.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->pageID='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.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.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 listAction()
{
$sql="select m.uuid,m.title,m.citation,m.doi,d.doi as datadoi,d.ts_published,d.authors,d.publisher,date_part('year',d.ts_published) as publish_year from en.normalmetadata m
left join mdstatus s on m.uuid=s.uuid
left join datadoi d on d.uuid=m.uuid
where s.status>4
and m.uuid not in
(select d.uuid from datasource d left join source s on d.sourceid=s.id
where s.code in ('heihe','water','hiwater','westee'))
order by m.title";
$this->view->metadata=$this->db->fetchAll($sql);
$sql="select m.uuid,m.title,m.citation,m.doi,d.doi as datadoi,d.ts_published,d.authors,d.publisher,date_part('year',d.ts_published) as publish_year
from en.normalmetadata m left join datadoi d on d.uuid=m.uuid left join mdstatus s on m.uuid=s.uuid where s.status>4 and m.title like '黑河综合遥感联合试验%' order by title";
$this->view->water=$this->db->fetchAll($sql);
$sql="select m.uuid,m.title,m.citation ,m.doi,d.doi as datadoi,d.ts_published,d.authors,d.publisher,date_part('year',d.ts_published) as publish_year
from en.normalmetadata m left join datadoi d on d.uuid=m.uuid left join mdstatus s on m.uuid=s.uuid where s.status>0 and m.title like '黑河生态水文遥感试验%' order by title";
$this->view->hiwater=$this->db->fetchAll($sql);
$sql="select m.uuid,m.title,m.citation ,m.doi,d.doi as datadoi,d.ts_published,d.authors,d.publisher,date_part('year',d.ts_published) as publish_year
from en.normalmetadata m left join datadoi d on d.uuid=m.uuid left join mdstatus s on m.uuid=s.uuid left join datasource ds on ds.uuid=m.uuid left join source sr on ds.sourceid=sr.id where sr.code='heihe' and s.status>0 and m.title not like '黑河生态水文遥感试验%' order by title";
$this->view->heihe=$this->db->fetchAll($sql);
$sql="select m.uuid,m.title,m.citation ,m.doi,d.doi as datadoi,d.ts_published,d.authors,d.publisher,date_part('year',d.ts_published) as publish_year
from en.normalmetadata m left join datadoi d on d.uuid=m.uuid left join mdstatus s on m.uuid=s.uuid left join datasource ds on ds.uuid=m.uuid left join source sr on ds.sourceid=sr.id where sr.code='westee' and s.status>4 order by title";
$this->view->westee=$this->db->fetchAll($sql);
}
}