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

1903 lines
72 KiB
PHP
Raw Normal View History

2013-05-27 08:59:42 +00:00
<?php
use Helpers\View;
use Helpers\dbh;
use Files\Files;
use Files\Output;
use Files\Listener\FileListener;
2013-05-27 08:59:42 +00:00
class ServiceController extends Zend_Controller_Action
{
private $limit=10;
function __call($id, $arguments)
{
$this->_helper->viewRenderer->setNoRender();
$this->_helper->layout->disableLayout();
}
function preDispatch()
{
$this->db=Zend_Registry::get('db');
$this->view->config = $this->config = Zend_Registry::get('config');
//$this->messenger=$this->_helper->getHelper('FlashMessenger');
//$this->view->messages = $this->messenger->getMessages();
}
/*
* 返回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 thumbAction()
{
$id = (int)$this->_request->getParam('id');
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="select t.* from thumbnail t left join metadata m on t.id=m.id where ".$where;
$thumb=$this->db->fetchRow($sql);
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
if (empty($thumb['data'])) {
header("Content-Type:image/png");
header("Content-Length: " . filesize("images/nothumb.png"));
$file=fopen("images/nothumb.png",'r');
fpassthru($file);
exit;
} else {
header("Content-Type:image/".$thumb['filetype']);
print base64_decode($thumb['data']);
}
}
/*
* 查看数据缩略大图
*/
function bigthumbAction()
{
$id = (int)$this->_request->getParam('id');
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="select g.id as gid,t.filename,t.filetype from geonetworkmetadata g left join metadata m on g.uuid=m.uuid left join thumbnail t on t.id=m.id where ".$where;
$thumb=$this->db->fetchRow($sql);
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
if (empty($thumb['filename'])) {
header("Content-Type:image/png");
header("Content-Length: " . filesize("images/nothumb.png"));
$file=fopen("images/nothumb.png",'r');
fpassthru($file);
exit;
} else {
$url=$this->config->bigthumb->path.sprintf('%05d',floor(($thumb['gid']+0.1)/100)*100).'-'.sprintf('%05d',ceil(($thumb['gid']+0.1)/100)*100-1)."/".$thumb['gid'];
$url.='/public/'.str_replace('_s.','.',$thumb['filename']);
header("Content-Type:image/".$thumb['filetype']);
$file=fopen($url,'r');
fpassthru($file);
exit;
}
}
/*
* 搜索, no page, json output
*/
function searchAction()
{
$this->view->addHelperPath('helper','Zend_View_Helper_');
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
//$page=(int)$this->_request->getParam('page');
//if (empty($page)) $page=1;
//$offset=$this->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');
$sql="select id,title,uuid,substring(description for 400) as description,filesize,fileformat from normalmetadata where east<? and west>? and north<? and south>?";
if (!empty($key)) {
$search=new SimpleSearch($key);
$where=$search->sql_expr(array("title","description"));
$sql.= " and ".$where;
$sql.= " order by title";
$rows=$this->db->fetchAll($sql,array($e,$w,$n,$s));
} else {
$sql.= " order by title limit 10";
$rows=$this->db->fetchAll($sql,array($e,$w,$n,$s));
}
$this->_helper->json($rows);
}
}
/*
* 产生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 metadata'.$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 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->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 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();
}
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 uuid,title,datatype,filesize,id from normalmetadata";
$md=$this->db->fetchAll($sql);
foreach($md as $m)
{
print $m["uuid"].",";
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>";
}
}
/*
* 转换元数据为WORD DOC格式
*/
public function docAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
$review=$this->_request->getParam('review');
if (!empty($uuid))
{
$sql="select g.data,m.title,m.description,g.id,m.projection,m.citation,m.title_en
,m.ts_published,d.doi as datadoi,d.authors,d.author_en,d.publisher,d.publisher_en, date_part('year',d.ts_published) as publish_year
from metadata m left join thumbnail t on m.id=t.id
left join datadoi d on d.uuid=m.uuid
left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=".$this->db->quote($uuid);
2013-05-27 08:59:42 +00:00
$row=$this->db->fetchRow($sql);
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.reftype=0 and m.uuid=? order by m.place";
2013-05-27 08:59:42 +00:00
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$reference='<ol>';
foreach($ref as $refer)
{
$reference.='<li>'.$refer['reference'].'</li>';
}
$reference.='</ol>';
if (is_numeric($row['projection']))
{
$sql="select proj4text from spatial_ref_sys where auth_srid=?";
$rs=$this->db->fetchRow($sql,array($row['projection']));
if ($rs) $projection=$rs['proj4text'];
}
if (empty($projection)) $projection=$row['projection'];
//判断是否使用多篇文献引用
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.reftype=3 and m.uuid=? order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$ref1="";
foreach($ref as $k=>$refer)
{
$ref1.='<li>'.str_replace(array("\r\n", "\n", "\r"),'',$refer['reference'])."</li>";
}
$row['mcitation']=$ref1;
$citation='';
if ($row['mcitation'])
{
$citation=$row['mcitation'];
} else if ($row['citation'])
{
$citation=$row['citation'];
if (!empty($row['datadoi']) && !strpos($row['citation'],$row['datadoi']))
{
$citation='<li>文章引用:'.$row['citation'].'</li>';
$citation.="<li>数据的引用:";
$citation.=substr($row['authors'],1,-1).'. '.$row['title'].'. '.$row['publisher'].', '.(empty($row['ts_published'])?$row['publish_year']:date('Y',strtotime($row['ts_published']))).'. doi:'.$row['datadoi'];
$citation.=' ['.str_replace('"','',substr($row['author_en'],1,-1)).'. '.$row['title_en'].'. '.$row['publisher_en'].', '.(empty($row['ts_published'])?$row['publish_year']:date('Y',strtotime($row['ts_published']))).'. doi:'.$row['datadoi'].']';
$citation.="</li>";
}
}
//支持项目判断
$sql="select f.* from fund f left join mdfund m on m.fid=f.id where m.uuid=? order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$fund="";
foreach($ref as $k=>$refer)
{
$fund.='<li>'.$refer['fund_type'].''.str_replace(array("\r\n", "\n", "\r"),'',$refer['title']).'(编号:'.$refer['fund_id'].")</li>";
}
if (empty($fund)) $fund=$row['suppinfo'];
}
2013-05-27 08:59:42 +00:00
$dom = new DOMDocument();
$dom->loadXML($row['data']);
//提前对表格进行预处理
$wiki=new WikiFormat();
$abs=$wiki->parseTable($this->view->escape($row["description"]));
//处理外部链接
$abs=preg_replace('/\[\s*(http:\/\/.+?)\s+(.*?)\]/m','<a href="$1">$2</a>',$abs);
$abs=str_replace(array("\r\n", "\n", "\r"),'</p><p>',$abs);
$abs=str_replace("'","&apos;",$abs);//not needed?
$id = $row['id'];
$thumburl=sprintf('%05d',floor(($id+0.1)/100)*100).'-'.sprintf('%05d',ceil(($id+0.1)/100)*100-1)."/".$id;
$xslt = new XSLTProcessor();
$xslt->registerPHPFunctions();
$xslt->setParameter('', 'thumburl', $thumburl);
$xslt->setParameter('', 'abstract', $abs);
$xslt->setParameter('','projection',$projection);
$xslt->setParameter('','reference',$reference);
$xslt->setParameter('','citation',$citation);
$xslt->setParameter('','fund',$fund);
2013-05-27 08:59:42 +00:00
$XSL = new DOMDocument();
$XSL->load( '../data/doc.xsl', LIBXML_NOCDATA);
$xslt->importStylesheet($XSL);
$content='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
$content.='<title>'.$row['title'].'</title>';
$content.='<style>
body{MARGIN-RIGHT: auto;MARGIN-LEFT: auto;font-size:14px;line-height:22px;font-family:宋体,Arial;}
span{font-size:14px;}
div{clear: both;margin: 0 auto;width:100%;vertical-align:baseline;}
#uuid{text-align: right;}
h3{font-size: 18px;}
img {}
2013-05-27 08:59:42 +00:00
a, a:visited {color:Blue;text-decoration:none;}
a:hover{text-decoration:underline;}
ul{list-style: none;margin: 0;}
ul li{list-style:none;}
#etitle{font-size:16px;margin-left:10px;}
span{font-weight:bolder;}
#content{padding:5px 0 10px 0;border:1px solid #BF5008;}
#divFooter {background-color:#BF5008;color:White;font-size:12px;padding:5px 15px;}
#divFooter a:link, #divFooter a:visited, #divFooter a:active {color:White;font-family:Arial,Serif;text-decoration:none;}
</style>
</head>
<body>';
$dispostion = 'attachment; filename*="utf8\' \''.urlencode($row['title']).'.doc"';
$ua = $_SERVER["HTTP_USER_AGENT"];
if (preg_match("/MSIE/", $ua)) {
$dispostion = 'attachment; filename="'.urlencode($row['title']).'.doc"';
} else if (preg_match("/Firefox/", $ua)) {
//$dispostion;
} else {
$dispostion = 'attachment; filename="'.$row['title'].'.doc"';
}
$content.=$xslt->transformToXML($dom);
if ($review==1) $content.=file_get_contents('../data/review-table.htm',true);
$content.="</body></html>";
2013-05-27 08:59:42 +00:00
$this->getResponse()->setHeader('Content-Type', 'application/vnd.ms-doc')
->setHeader('Content-Disposition',$dispostion)
->setHeader('Content-Length', strlen($content))
->setHeader('Content-Type','application/force-download')
->setHeader('Content-Type','application/download')
->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);
}
/*
* 转换元数据为PDF格式
*/
public function pdfAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
$review=$this->_request->getParam('review');
error_reporting(1);
if (!empty($uuid))
{
$sql="select g.data,m.title,m.citation,m.suppinfo,m.doi,m.filesize,m.fileformat,m.south,m.east,m.west,m.north,date(m.timebegin) as timebegin,date(m.timeend) as timeend,m.title_en,m.uuid,m.description,g.id,m.projection,t.filetype
,m.ts_published,d.doi as datadoi,d.authors,d.author_en,d.publisher,d.publisher_en, date_part('year',d.ts_published) as publish_year
from metadata m left join thumbnail t on m.id=t.id
left join datadoi d on d.uuid=m.uuid
2013-05-27 08:59:42 +00:00
left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=".$this->db->quote($uuid);
$row=$this->db->fetchRow($sql);
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.reftype=0 and m.uuid=? order by m.place";
2013-05-27 08:59:42 +00:00
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$reference="";
foreach($ref as $k=>$refer)
{
$reference.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$refer['reference'])."\r\n";
}
$row['reference']=$reference;
//判断是否使用多篇文献引用
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.reftype=3 and m.uuid=? order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$reference="";
foreach($ref as $k=>$refer)
{
$reference.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$refer['reference'])."\r\n";
}
$row['mcitation']=$reference;
//支持项目判断
$sql="select f.* from fund f left join mdfund m on m.fid=f.id where m.uuid=? order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$fund="";
foreach($ref as $k=>$refer)
{
$fund.=($k+1).'. '.$refer['fund_type'].''.str_replace(array("\r\n", "\n", "\r"),'',$refer['title']).'(编号:'.$refer['fund_id'].")\r\n";
}
if (!empty($fund)) $row['suppinfo']=$fund;
$sql="select cc.name as category, cc.name_zh from metadata m left join category c on m.id=c.id left join categorycode cc on c.code=cc.code where m.uuid=".$this->db->quote($uuid);
$cat=$this->db->fetchAll($sql);
$row['category_zh']='';
foreach($cat as $category)
{
$row['category_zh'].=$category['name_zh'].' ';
2013-06-11 07:07:01 +00:00
}
2013-05-27 08:59:42 +00:00
$sql="select u.uselimit from mdlimit ml left join metadata m on ml.uuid=m.uuid left join uselimit u on ml.lid=u.id where m.uuid=?";
$sql=$this->db->quoteInto($sql,$uuid);
$limits=$this->db->fetchAll($sql);
$uselimits="";
foreach($limits as $k=>$limit)
{
//$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
}
$row['uselimits']=$uselimits;
$sql="select ol.* from onlineresource ol left join metadata m on ol.uuid=m.uuid where m.uuid=?";
$sql=$this->db->quoteInto($sql,$uuid);
$row['resources']=$this->db->fetchAll($sql);
$sql="select r.role,s.* from role r left join responsible s on r.resid=s.id left join metadata m on m.uuid=r.uuid where m.uuid=? order by r.role,r.id";
$sql=$this->db->quoteInto($sql,$uuid);
$row['contacts']=$this->db->fetchAll($sql);
$sql="select k.keyword, k.keytype from keyword k left join metadata m on k.id=m.id where m.uuid=? order by k.keytype";
$sql=$this->db->quoteInto($sql,$uuid);
$keys=$this->db->fetchAll($sql);
$keyword=array();
foreach($keys as $key)
{
@$keyword[$key['keytype']].=$key['keyword'].'';
}
$row['keyword']=$keyword;
if (is_numeric($row['projection']))
{
$sql="select proj4text from spatial_ref_sys where auth_srid=?";
$rs=$this->db->fetchRow($sql,array($row['projection']));
if ($rs) $projection=$rs['proj4text'];
}
if (!empty($projection)) $row['projection']=$projection;
$cit='';
if ($row['mcitation'])
{
$cit=$row['mcitation'];
} else if ($row['citation'])
{
if (empty($row['datadoi']))
{
$cit=$row['citation'];
}
elseif (!strpos($row['citation'],$row['datadoi']))
{
$cit='文章引用:'.$row['citation'];
$cit.="\r\n数据的引用:";
$cit.=substr($row['authors'],1,-1).'. '.$row['title'].'. '.$row['publisher'].', '.(empty($row['ts_published'])?$row['publish_year']:date('Y',strtotime($row['ts_published']))).'. doi:'.$row['datadoi'];
$cit.=' ['.str_replace('"','',substr($row['author_en'],1,-1)).'. '.$row['title_en'].'. '.$row['publisher_en'].', '.(empty($row['ts_published'])?$row['publish_year']:date('Y',strtotime($row['ts_published']))).'. doi:'.$row['datadoi'].']';
}
}
$row['citation']=$cit;
}
2013-05-27 08:59:42 +00:00
$dom = new DOMDocument();
$dom->loadXML($row['data']);
$xpath = new DOMXpath($dom);
$row['rfdenom']=@$dom->getElementsByTagName('rfDenom')->item(0)->nodeValue;
$row['resolution']=@$xpath->query('//scaleDist/value/Real')->item(0)->nodeValue;
$row['resolution'].=@$dom->getElementsByTagName('uomName')->item(0)->nodeValue;
//提前对表格进行预处理
/*$wiki=new WikiFormat();
$row['description']=$wiki->parseTable($row["description"]);
preg_match_all('/<table>[\s\S]*?<\/table>/im', $row['description'],$tables);
foreach($tables as $k=>$table)
{
$row['description']=@str_replace($tables[$k],"\n 【表格内容暂不支持,请访问网站查看,此处请忽略】\n",$row['description']);
}*/
$pdf=new MetadataPDF();
$pdf->metadata=$row;
$pdf->Draw();
$pdf->setTitle($row['title'],true);
$pdf->setAuthor('寒区旱区科学数据中心',true);
$this->getResponse()->setHeader('Content-Type', 'application/pdf');
//->setHeader('Content-Disposition','inline; filename="'.$row['title'].'.pdf"');
$pdf->Output($row['title'].'.pdf','I');
//die();
}
public function odtAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
$review=$this->_request->getParam('review');
2013-06-11 09:23:21 +00:00
$ac=$this->_request->getParam('ac');
2013-05-27 08:59:42 +00:00
//error_reporting(1);
if (!empty($uuid))
{
2013-06-11 10:34:59 +00:00
$sql="select g.data,m.title,m.citation,m.suppinfo,m.doi,m.filesize,m.fileformat,m.ts_created,m.south,m.east,m.west,m.north,date(m.timebegin) as timebegin,date(m.timeend) as timeend,m.title_en,m.uuid,m.description,g.id,m.projection,t.filetype
,m.ts_published,d.doi as datadoi,d.authors,d.author_en,d.publisher,d.publisher_en, date_part('year',d.ts_published) as publish_year
from metadata m left join thumbnail t on m.id=t.id
left join datadoi d on d.uuid=m.uuid
2013-05-27 08:59:42 +00:00
left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=".$this->db->quote($uuid);
$row=$this->db->fetchRow($sql);
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.reftype=0 and m.uuid=? order by m.place";
2013-05-27 08:59:42 +00:00
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$reference="";
foreach($ref as $k=>$refer)
{
$reference.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$refer['reference'])."\r\n";
}
$row['reference']=$reference;
//判断是否使用多篇文献引用
$sql="select r.* from reference r left join mdref m on m.refid=r.id where m.reftype=3 and m.uuid=? order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$reference="";
foreach($ref as $k=>$refer)
{
$reference.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$refer['reference'])."\r\n";
}
$row['mcitation']=$reference;
//支持项目判断
$sql="select f.* from fund f left join mdfund m on m.fid=f.id where m.uuid=? order by m.place";
$sql=$this->db->quoteInto($sql,$uuid);
$ref=$this->db->fetchAll($sql);
$fund="";
foreach($ref as $k=>$refer)
{
$fund.=($k+1).'. '.$refer['fund_type'].''.str_replace(array("\r\n", "\n", "\r"),'',$refer['title']).'(编号:'.$refer['fund_id'].")\r\n";
}
if (!empty($fund)) $row['suppinfo']=$fund;
$sql="select cc.name as category, cc.name_zh from metadata m left join category c on m.id=c.id left join categorycode cc on c.code=cc.code where m.uuid=".$this->db->quote($uuid);
$cat=$this->db->fetchAll($sql);
$row['category_zh']='';
foreach($cat as $category)
{
$row['category_zh'].=$category['name_zh'].' ';
2013-06-11 07:07:01 +00:00
}
2013-05-27 08:59:42 +00:00
$sql="select u.uselimit from mdlimit ml left join metadata m on ml.uuid=m.uuid left join uselimit u on ml.lid=u.id where m.uuid=?";
$sql=$this->db->quoteInto($sql,$uuid);
$limits=$this->db->fetchAll($sql);
$uselimits="";
foreach($limits as $k=>$limit)
{
//$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
}
$row['uselimits']=$uselimits;
$sql="select ol.* from onlineresource ol left join metadata m on ol.uuid=m.uuid where m.uuid=?";
$sql=$this->db->quoteInto($sql,$uuid);
$res=$this->db->fetchAll($sql);
$resource="";
foreach($res as $k=>$r)
{
$resource.=($k+1).". ".$r['name'].' '.$r['linkage']."\n";
}
$row['resources']=$resource;
$sql="select r.role,s.* from role r left join responsible s on r.resid=s.id left join metadata m on m.uuid=r.uuid where m.uuid=? order by r.role,r.id";
if ($ac=='simple')
2013-06-11 10:34:59 +00:00
$sql="select r.role,s.* from role r left join responsible s on r.resid=s.id left join metadata m on m.uuid=r.uuid where r.role in ('resourceProvider','owner','pointOfContact') and m.uuid=? order by r.role,r.id";
2013-05-27 08:59:42 +00:00
$sql=$this->db->quoteInto($sql,$uuid);
$contact=$this->db->fetchAll($sql);
$contacts="";
$party_zh=array('resourceProvider'=>'资源提供者','custodian'=>'维护者','owner'=>'拥有者','user'=>'用户','distributor'=>'数据服务联系人','originator'=>'创建者','pointOfContact'=>'联系人','principalInvestigator'=>'数据调查与处理者','processor'=>'处理者','publisher'=>'元数据发布者','author'=>'元数据作者');
foreach($contact as $k=>$c)
{
@$contacts.=($k+1).". ".$party_zh[$c['role']]."\n";
@$contacts.=$c['individual'].' 单位:'.$c['organisation']."\n";
@$contacts.='地址:'.$c['country'].' '.$c['administractive'].' '.$c['city'].' '.$c['delivery']."\n";
@$contacts.='邮编:'.$c['postal'].' 电话:'.$c['phone'].' 邮件:'.$c['email']."\n\n";
}
$row['contacts']=$contacts;
$sql="select k.keyword, k.keytype from keyword k left join metadata m on k.id=m.id where m.uuid=? order by k.keytype";
$sql=$this->db->quoteInto($sql,$uuid);
$keys=$this->db->fetchAll($sql);
$keyword=array();
foreach($keys as $key)
{
@$keyword[$key['keytype']].=$key['keyword'].'';
}
$row['keyword']=$keyword;
if (is_numeric($row['projection']))
{
$sql="select proj4text from spatial_ref_sys where auth_srid=?";
$rs=$this->db->fetchRow($sql,array($row['projection']));
if ($rs) $projection=$rs['proj4text'];
}
if (!empty($projection)) $row['projection']=$projection;
} else
$projection='';
$dom = new DOMDocument();
$dom->loadXML($row['data']);
$xpath = new DOMXpath($dom);
$row['rfdenom']=@$dom->getElementsByTagName('rfDenom')->item(0)->nodeValue;
$row['resolution']=@$xpath->query('//scaleDist/value/Real')->item(0)->nodeValue;
$row['resolution'].=@$dom->getElementsByTagName('uomName')->item(0)->nodeValue;
//提前对表格进行预处理
$wiki=new WikiFormat();
$row['description']=$wiki->parseTable($row["description"]);
preg_match_all('/<table>[\s\S]*?<\/table>/im', $row['description'],$tables);
$search=array();
$replace=array();
foreach($tables as $k=>$table)
{
/*$search[]="<table>";
$replace[]='<table:table table:name="Table 3">'.str_repeat('<table:table-column />',substr_count($table[0],'<th>'));
$search[]="<tr>";
$replace[]="<table:table-row>";
$search[]="<td>";
$replace[]="<table:table-cell><text:p>";
$search[]="<th>";
$replace[]="<table:table-cell><text:p>";
$search[]="</td>";
$replace[]="</text:p></table:table-cell>";
$search[]="</th>";
$replace[]="</text:p></table:table-cell>";
$search[]="</tr>";
$replace[]="</table:table-row>";
$search[]="</table>";
$replace[]="</table:table>";
$table=str_replace($search,$replace,$table[0]);*/
$row['description']=@str_replace($tables[$k][0],"\n 【表格内容暂不支持,请访问网站查看,此处请忽略】\n",$row['description']);
}
require_once('odtphp/library/odf.php');
$config["PATH_TO_TMP"]="/tmp/zip";
$config["ZIP_PROXY"]="ZipArchive";
2013-06-11 09:23:21 +00:00
if ($ac=='simple')
$odf=new Odf("../data/metadata-template-simple.odt",$config);
else
2013-06-11 09:23:21 +00:00
$odf=new Odf("../data/metadata-template.odt",$config);
2013-05-27 08:59:42 +00:00
$odf->setVars('title',$row['title'],true,'utf-8');
@$odf->setVars('title_en',$row['title_en'],true,'utf-8');
2013-06-11 09:23:21 +00:00
@$odf->setVars('uuid',$row['uuid'],true,'utf-8');
2013-06-11 10:34:59 +00:00
$odf->setVars('datetime',date('Y-m-d',strtotime($row['ts_created'])));
2013-05-27 08:59:42 +00:00
$odf->setVars('abstract',$row['description'],true,'utf-8');
@$odf->setVars('theme_keyword',$row['keyword']['theme'],true,'utf-8');
@$odf->setVars('place_keyword',$row['keyword']['place'],true,'utf-8');
@$odf->setVars('temporal_keyword',empty($row['keyword']['temporal'])?'':$row['keyword']['temporal'],true,'utf-8');
@$odf->setVars('discipline_keyword',$row['keyword']['discipline'],true,'utf-8');
2013-06-11 10:34:59 +00:00
2013-05-27 08:59:42 +00:00
@$odf->setVars('category',$row['category'].' '.$row['category_zh'],true,'utf-8');
2013-06-11 10:34:59 +00:00
2013-05-27 08:59:42 +00:00
@$odf->setVars('filesize',$row['filesize'],true,'utf-8');
@$odf->setVars('fileformat',$row['fileformat'],true,'utf-8');
@$odf->setVars('timebegin',$row['timebegin'],true,'utf-8');
@$odf->setVars('timeend',$row['timeend'],true,'utf-8');
$cit='';
if ($row['mcitation'])
{
$cit=$row['mcitation'];
} else if ($row['citation'])
{
$cit=$row['citation'];
if (!empty($row['datadoi']) && !strpos($row['citation'],$row['datadoi']))
{
$cit='文章引用:'.$row['citation'];
$cit.="\r\n数据的引用:";
$cit.=substr($row['authors'],1,-1).'. '.$row['title'].'. '.$row['publisher'].', '.(empty($row['ts_published'])?$row['publish_year']:date('Y',strtotime($row['ts_published']))).'. doi:'.$row['datadoi'];
$cit.=' ['.str_replace('"','',substr($row['author_en'],1,-1)).'. '.$row['title_en'].'. '.$row['publisher_en'].', '.(empty($row['ts_published'])?$row['publish_year']:date('Y',strtotime($row['ts_published']))).'. doi:'.$row['datadoi'].']';
}
}
@$odf->setVars('citation',$cit,true,'utf-8');
2013-05-27 08:59:42 +00:00
@$odf->setVars('reference',$row['reference'],true,'utf-8');
@$odf->setVars('doi',$row['doi'],true,'utf-8');
2013-06-11 10:34:59 +00:00
2013-05-27 08:59:42 +00:00
@$odf->setVars('north',$row['north'],true,'utf-8');
@$odf->setVars('south',$row['south'],true,'utf-8');
@$odf->setVars('west',$row['west'],true,'utf-8');
@$odf->setVars('east',$row['east'],true,'utf-8');
if (!$ac=='simple')
{
@$odf->setImage('bigthumb', 'http://westdc.westgis.ac.cn/service/bigthumb/uuid/'.$row['uuid']);
@$odf->setImage('thumb', 'http://westdc.westgis.ac.cn/service/thumb/uuid/'.$row['uuid']);
@$odf->setVars('projection',$row['projection'],true,'utf-8');
@$odf->setVars('resolution',$row['resolution'],true,'utf-8');
@$odf->setVars('rfdenom',$row['rfdenom'],true,'utf-8');
@$odf->setVars('stratum_keyword',$row['keyword']['stratum'],true,'utf-8');
@$odf->setVars('uselimits',$row['uselimits'],true,'utf-8');
@$odf->setVars('resources',$row['resources'],true,'utf-8');
@$odf->setVars('suppinfo',$row['suppinfo'],true,'utf-8');
@$odf->setVars('contacts',$row['contacts'],true,'utf-8');
} else {
@$odf->setImage('qrcode', 'http://westdc.westgis.ac.cn/service/qrcode/uuid/'.$row['uuid']);
2013-06-11 09:23:21 +00:00
}
2013-05-27 08:59:42 +00:00
$odf->exportAsAttachedFile($row['title'].'.odt');
}
function uploadAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
try{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
}
if(empty($userid)||!is_numeric($userid)){
$msg['error'] = "请先登录";
echo Zend_Json::encode($msg);
exit();
}
$files=new files();
$msg = $files -> upload($this->config->upload,$_FILES['Filedata'],'reviewatt');
if(empty($msg['error']))
{
$msg['error']="";
$filename = $msg['db_path'];
$filesize = $msg['file_size'];
$filedesc = $this->_request->getParam('filedesc');
$filetype = $this->_request->getParam('dir');
$realname = $msg['realname'];
$fileurl = $msg['file_url'];
$sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','reviewatt','$filedesc','$userid','$filesize','$realname') RETURNING id";
$sth = $this->db->prepare($sql);
$sth->execute();
$att = $sth->fetch(PDO::FETCH_ASSOC);
$msg['attid'] = $attid = $att['id'];
include_once('files.php');
$imgct = files::getImageType($this->config->upload.$filename);
if(!isset($imgct['error'])) $preview = '<img src="/service/attpreview/id/'.$attid.'" style="display:block;" />';
else $preview = "";
$msg['html'] = $preview.$realname.'[已完成]<input type="hidden" name="atts[]" value="'.$attid.'" /><div class="cancel"><a href="javascript:;" id="deletebtn_'.$attid.'"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>';
$msg['preview'] = "/service/attpreview/id/".$attid;
echo Zend_Json::encode($msg);
exit();
}else{
$msg['error'] = '附件上传失败:'.$msg['error'];
@unlink($filename);
echo Zend_Json::encode($msg);
exit();
}
}catch(Exception $e){
$msg['error'] = "错误:".$e->getMessage();
echo Zend_Json::encode($msg);
exit();
}
}
function getattsAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
if($id!='')
{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
$sql = "select att.realname,att.id,att.filename from attachments att
left join mdreviewattach ratt on att.id=ratt.attachid
where ratt.reviewid=$id and att.userid=$userid";
$rs = $this->db->query($sql);
$atts = $rs->fetchAll();
include_once('files.php');
foreach($atts as $k=>$v)
{
$imgct = files::getImageType($this->config->upload.$v['filename']);
if(!isset($imgct['error'])) $preview = '<img src="/service/attpreview/id/'.$v['id'].'" style="display:block;" />';
else $preview = "";
$atts[$k]['html']= $preview.$v['realname'].'[已完成]<input type="hidden" name="atts[]" value="'.$v['id'].'" /><div class="cancel"><a href="javascript:;" id="deletebtn_'.$v['id'].'"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>';
}
echo Zend_Json::encode($atts);
exit();
}else
{
exit();
}
}else{
exit();
}
//不输出错误
}//获取附件
//json 文件列表
2013-05-27 08:59:42 +00:00
function filelistAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
$sql="select f.filename,f.id,s.uuid,f.depth,f.filesize as filesize,f.ts_created from datafile f,dataset s where s.id=f.dsid and s.lang in ('','cn') and s.uuid=? and f.depth=1 and f.filename<>'/uuid.txt' order by f.isdir desc,f.filename";
$files=$this->db->fetchAll($this->db->quoteInto($sql,$uuid));
//文件大小处理
foreach($files as $k=>$v)
{
if ($v['filesize']<1024)
{
$files[$k]['filesize']=$v['filesize'].'Byte';
} elseif($v['filesize']<1024*1024) {
$files[$k]['filesize']=round($v['filesize']/1024,2).'KB';
} elseif($v['filesize']<1024*1024*1024) {
$files[$k]['filesize']=round($v['filesize']/1024/1024,2).'MB';
} else {
$files[$k]['filesize']=round($v['filesize']/1024/1024/1024,2).'GB';
}
$files[$k]['ts_created'] = date("Y-m-d H:i",strtotime($v['ts_created']));
2013-06-18 12:08:28 +00:00
}
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($files,JSON_NUMERIC_CHECK));
return true;
2013-05-27 08:59:42 +00:00
}
function subfilelistAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
2013-05-27 08:59:42 +00:00
$uuid=$this->_request->getParam('uuid');
$subpath=(int)$this->_request->getParam('subpath');
$depth=(int)$this->_request->getParam('depth');
$depth++;
$sql="select f.*,s.uuid from datafile f,dataset s where s.id=f.dsid and s.lang in ('','cn') and s.uuid=? and f.depth=".$depth." and f.filename<>'/uuid.txt' and f.filename ilike (select filename from datafile where id=".$subpath.")||'%' order by f.isdir desc,f.filename";
2013-05-27 08:59:42 +00:00
$files=$this->db->fetchAll($this->db->quoteInto($sql,$uuid));
foreach($files as $k=>$v)
{
$files[$k]['ts_created'] = date("Y-m-d H:i",strtotime($v['ts_created']));
if ($v['filesize']<1024)
{
$files[$k]['filesize']=$v['filesize'].'Byte';
} elseif($v['filesize']<1024*1024) {
$files[$k]['filesize']=round($v['filesize']/1024,2).'KB';
} elseif($v['filesize']<1024*1024*1024) {
$files[$k]['filesize']=round($v['filesize']/1024/1024,2).'MB';
} else {
$files[$k]['filesize']=round($v['filesize']/1024/1024/1024,2).'GB';
}
if ($v['isdir']==1)
{
$files[$k]['filename']=substr(strrchr(substr($v['filename'],0,-1),'/'),1).'/';}
else{
$files[$k]['filename']=substr(strrchr($v['filename'],'/'),1);
}
2013-06-18 12:08:28 +00:00
$files[$k]['ext'] = "";
$temp_arr = explode(".", $v['filename']);
if($temp_arr)
{
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$files[$k]['ext'] = strtolower($file_ext);
}
}
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($files,JSON_NUMERIC_CHECK));
return true;
}
2013-05-27 08:59:42 +00:00
/*
* 附件下载
*/
function attachAction()
{
$zipuuid = $this->_request->getParam('zip');
$id=(int)$this->_request->getParam('id');
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
if(!empty($zipuuid))
{
$sql=$this->db->quoteInto("select a.*,md.title from mdattach m left join metadata md on m.uuid=md.uuid left join attachments a on m.id=a.id where m.uuid=? order by a.ts_created desc",$zipuuid);
$atts = $this->db->fetchAll($sql);
$title=$atts[0]['title'];
$zip = new ZipArchive();
$url = tempnam($this->config->temp->path,$zipuuid);//创建临时文件
$last_update=strtotime($atts[0]['ts_created']);
if (!file_exists($url) || (filemtime($fn)<$last_update))
{
if( $zip->open($url, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true )
{
throw new Exception("cannot open {$url} for writing.");
}
$updates = array(); //统计被下载的附件ID
foreach ($atts as $k=>$v)
{
if (file_exists($this->config->upload.$v['filename'])) {
$updates[]=$v['id'];
$zip->addFile($this->config->upload.$v['filename'],'/'.basename($v['realname']));
}
}
$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->getResponse()->setHeader('Content-Type', 'application/octet-stream')
->setHeader('Content-Disposition','attachment; filename="'.basename($title).'-文档.zip"')
->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);
}
elseif ($id>0)
{
//下载单个附件
$sql=$this->db->quoteInto("select a.* from attachments a where a.id=? order by a.ts_created desc",$id);
$atts = $this->db->fetchRow($sql);
$updates = array(); //统计被下载的附件ID
//更新统计
$sql = "update attachments set downtimes=downtimes+1 where id in ($id)";
@$this->db->exec($sql);
//输出下载
$content=file_get_contents($this->config->upload.$atts['filename']);
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
->setHeader('Content-Disposition','attachment; filename="'.$atts['realname'].'"')
->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);
}
else
{
throw new Exception('发生严重意外!您确认链接正确?');
}
}
function delreviewattAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
$basepath = $this->view->config->upload;
$info = $this->getFileinfo($id);
$filepath = $basepath.$info['filename'];
try{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
$sql = "delete from attachments where id='$id' and userid='$userid'";
if($this->db->exec($sql)>0)
{
@unlink($filepath);
}
}
}catch(Exception $e){}
//不输出任何错误
}//删除评审附件
function attpreviewAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id=(int)$this->_request->getParam('id');
include_once('files.php');
$info = files::getOne($this->db,$id);
if(!empty($info['error']))
{
exit($info['error']);
}
else
{
try{
$filename = $this->config->upload.$info['filename'];
$imgct = files::getImageType($filename);
if(isset($imgct['error'])) exit("Error");
//var_dump($imgct);exit();
files::thumb($filename,300,0);
exit;
}catch(Exception $e){
echo $e->getMessage();
exit();
}
}
}
function mdjsonAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$num=(int)$this->_request->getParam('num');
$source=$this->_request->getParam('source');
if (empty($num)) $num=3;
$sql="select m.uuid,m.title,m.id,substring(m.description from 0 for 200) as description from normalmetadata m left join thumbnail t on m.id=t.id where ";
if (!empty($source))
$sql.=$this->db->quoteInto(" m.uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code=?) and ",$source);
$sql.=" length(t.data)>2 order by random() limit $num";
$rows=$this->db->fetchAll($sql);
echo Zend_Json::encode($rows);
}
function googlesearchAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$q = $this->_request->getParam('q');
$rez = $this->google_search_api(array(
'q' => $q, // 查询内容
'key' => $this->config->google->maps->api,
'userip' => $_SERVER['REMOTE_ADDR'],
'rsz' => 5
));
print_r($rez);
exit();
}
function google_search_api($args, $referer = 'http://westdc.westgis.ac.cn/', $endpoint = 'web'){
$url = "http://ajax.googleapis.com/ajax/services/search/".$endpoint;
if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';
$url .= '?'.http_build_query($args, '', '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
return $body;
}// google 搜索
function bingsearchAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$q = $this->_request->getParam('q');
$rez = $this->bing_search($q);
print_r($rez);
exit();
}
function bing_search($keyword,$referer = 'http://westdc.westgis.ac.cn/'){
$keyword=urlencode($keyword);
$url = "http://api.bing.net/json.aspx?AppId=".$this->config->bing->api
."&Query=".$keyword
."&Sources=Web"
."&Version=2.0"
."&Market=zh-cn"
."&Adult=Moderate"
//."&Options=EnableHighlighting"
."&Web.Count=5"
."&Web.Offset=0"
."&Web.Options=DisableHostCollapsing+DisableQueryAlterations";
//&JsonType=callback&JsonCallback=SearchCompleted
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
return $body;
}//bing 搜索
function cnkisearchAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$q = $this->_request->getParam('q');
$rez = $this->cnki_search($q);
print_r($rez);
exit();
}
function cnki_search($keyword , $referer = 'http://westdc.westgis.ac.cn/'){
$keyword = urlencode($keyword);
$url = "http://search.cnki.net/search.aspx?q=$keyword";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
$rev = array();
$max = 5;
$error='';
if(preg_match_all("#<a\sclass=\"acticle\" href=\"(.+?)\".*?>(.+?)<\/a>#im",$body,$matchs,PREG_PATTERN_ORDER))
{
foreach ($matchs[2] as $k=>$v){
if($k < $max) $rev[$k]['title']=$v;
}
foreach ($matchs[1] as $k=>$v){
if($k < $max) $rev[$k]['url']=$v;
}
}else{
$error = "无搜索结果";
}
if(preg_match_all("#<span class=\"search_result_snap\" >(.+?)<\/span>#im",$body,$matchs,PREG_PATTERN_ORDER))
{
foreach ($matchs[1] as $k=>$v){
if($k < $max) $rev[$k]['content']=$v;
}
}
$response=array("result"=>$rev,"count"=>$max,"morelink"=>'http://search.cnki.net/search.aspx?q='.$keyword,"error"=>$error);
$rev = Zend_Json::encode($response);
return $rev;
}//cnki 搜索
function scholarsearchAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$q = $this->_request->getParam('q');
$rez = $this->scholar_search($q);
print_r($rez);
exit();
}
function scholar_search($keyword , $referer = 'http://westdc.westgis.ac.cn/'){
$keyword = urlencode($keyword);
$url = "http://scholar.google.com/scholar?q=$keyword";
$url .= "&hl=en&btnG=搜索&lr=";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$html = curl_exec($ch);
curl_close($ch);
$rev = array();
$max = 5;
$error='';
if(preg_match_all("#<h3.*?>(.+?)<\/h3>#im",$html,$matchs,PREG_PATTERN_ORDER))
{
foreach ($matchs[0] as $k=>$v){
if($k < $max) $rev[$k]['title']=utf8_encode($v);
}
}else{
$error = "无搜索结果";
}
if(preg_match_all('!<div class="gs_a">(.*?)<\/div>!im',$html,$matchs,PREG_PATTERN_ORDER))
{
foreach ($matchs[0] as $k=>$v){
if($k < $max) $rev[$k]['content']=utf8_encode($v);
}
}
//var_dump($rev);
//exit();
$response=array("result"=>$rev,"count"=>$max,"morelink"=>'http://scholar.google.com/scholar?hl=zh-CN&btnG=搜索&lr=&q='.$keyword,"error"=>$error);
$rev = Zend_Json::encode($response);
return $rev;
}//scholar 搜索
function recommendAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid = $this->_request->getParam('uuid');
$page = $this->_getParam('page');
$pageSize = 5;//每页容量
$pre='';
$next='';
$sql = "select d.uuid,count(distinct(d.userid)) as downtimes,m.title from dataorder d left join 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";
$pagnation="";
if(isset($page))
{
$page=intval($page);
if($page<0)
{
$page=0;
}
$re = $this->db->query($sql,array($uuid,$uuid));
$rows = $re->fetchAll();
$num = count($rows);
if( $num > $pageSize)
{
if($page > 0)
{
$pre = '<li><a href="javascript:void(0);" onClick="recommend('. ($page-1) .')">Prev</a></li>';
}
if($num > $pageSize*($page+1))
{
$next = '<li><a href="javascript:void(0);" onClick="recommend('. ($page+1) .')">Next</a></li>';
}
}
$sql .=" limit $pageSize offset ".$page*$pageSize;
}
else
{
$sql .=" limit $pageSize";
}
$re = $this->db->query($sql,array($uuid,$uuid));
$rows = $re->fetchAll();
if(count($rows>0))
{
echo '<ul class="unstyled">';
foreach($rows as $c)
{
echo
'<li class="well well-small" style="overflow:hidden;">
<img src="/service/thumb/uuid/'.$c['uuid'].'" alt="'.$c['title'].'" title="'.$c['title'].'"
class="pull-left img-polaroid img-rounded" style="height:80px;"/>
<h4><a target="_blank" href="/data/'.$c['uuid'].'"><span class="title">'.$c['title'].'</span></a></h4>
<h5>推荐指数:'.$c['downtimes'].'</h5>
</li>';
}
echo '</ul>';
echo '<div class="pagination"><ul>';
echo $pre;
echo $next;
echo '</ul></div>';
}else
{
echo "暂无相关数据";
}
}//相关下载 给我推荐
function relatedAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid = $this->_request->getParam('uuid');
$sql="select m.id from normalmetadata m left join mdstatus s on m.uuid=s.uuid
left join thumbnail t on t.id=m.id left join geonetworkmetadata g on m.uuid=g.uuid where ";
$where=$this->db->quoteInto('m.uuid = ?',$uuid);
$sql.=$where;
$row=$this->db->fetchRow($sql);
if (!$row) exit("读取信息错误");
$id=$row['id'];
//相关元数据,根据同名关键词实现
$sql="select distinct(md.uuid),md.title from keyword kw left join normalmetadata md on kw.id=md.id where length(md.title)>2 and kw.keyword in (select k.keyword from keyword k left join metadata m on k.id=m.id where m.id=? and k.keytype='theme') and kw.id<>?";
$rows=$this->db->fetchAll($sql,array($id,$id));
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(10);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('data/pagination_related.phtml');
if ($paginator)
{
foreach($paginator as $c)
{
print '<li><a target="_blank" href="/data/'.$c['uuid'].'">'.$c['title']."</a></li>\r\n";
}
echo '<div class="paginator">'.$paginator.'</div>';
}
} //相关数据
function literatureAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid = $this->_request->getParam('uuid');
$sql="select m.id from normalmetadata m left join mdstatus s on m.uuid=s.uuid
left join thumbnail t on t.id=m.id left join geonetworkmetadata g on m.uuid=g.uuid where ";
$where=$this->db->quoteInto('m.uuid = ?',$uuid);
$sql.=$where;
$row=$this->db->fetchRow($sql);
if (!$row) exit("读取信息错误");
$id=$row['id'];
$keys=$this->db->fetchAll("select * from keyword where id=? order by keytype,ts_created",array($id));
$wheresql = array();
foreach ($keys as $k=>$v)
{
if($v['keytype']=="theme")
$wheresql[] = " a.title like '%".$v['keyword']."%' ";
}
$wheresql[] = " 1<>1 ";
$wheresql = join(" or ",$wheresql);
$sql="select a.*,array_to_string(array(select author from knl_author t where t.item_id=a.item_id order by place asc),'; ') as author from knl_article a where ($wheresql) order by a.ts_created desc";
$rows = $this->db->fetchAll($sql);
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(10);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('data/pagination_literature.phtml');
if ($paginator)
{
foreach($paginator as $c)
{
$u=parse_url($c['url']);
if (@$u['host']=='hdl.handle.net') $c['url'] = $this->config->seekspace->handleurl.$u['path'];
print '<li><a target="_blank" href="'.$c['url'].'">'.$c['title'].'</a>【'.$c['author'].' '.$c['publisher'].' '.$c['ts_issued']."】</li>";
}
echo '<div class="paginator">'.$paginator.'</div>';
}
}//相关文献
function refdatalistAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
$page = $this->_getParam('page');
$pageSize = 10;//每页容量
2014-01-09 12:25:43 +00:00
$sql = "select distinct md.title,md.uuid from mdref mr
2013-06-09 15:21:27 +00:00
right join normalmetadata md on md.uuid=mr.uuid
2013-05-27 08:59:42 +00:00
where mr.refid=$id";
$pagnation="";
if(isset($page))
{
$page=intval($page);
if($page<0)
{
$page=0;
}
$re = $this->db->query($sql);
$rows = $re->fetchAll();
$num = count($rows);
if( $num > $pageSize)
{
if($page <= 0)
{
$pre = '<span class="disabled">&lt;</span>';
}else{
$pre = '<a href="javascript:void(0);" onClick="showdata('.$id.','. ($page-1) .')">&lt;</a>';
}
if($num <= $pageSize*($page+1))
{
$next = '<span class="disabled">&gt;</span>';
}else{
$next = "<a href=\"javascript:void(0);\" onclick=\"showdata(".$id.",". ($page+1) .")\">&gt;</a>";
}
$pagnation = '<div class="paginationControl">'.$pre.$next.'<span class="disabled">共 '.$num.' 条</span></div>';
}
$sql .="limit $pageSize offset ".$page*$pageSize;
}
else
{
$sql .="limit $pageSize";
}
$re = $this->db->query($sql);
$rows = $re->fetchAll();
echo '<ul>';
foreach($rows as $c)
{
echo '<li><a href="/data/'.$c['uuid'].'">'.$c['title'].'</a></li>';
}
echo '</ul>';
echo $pagnation;
}//文档页面相关数据
function refdatacountAction()
{
if(view::isXmlHttpRequest($this))
{
$id = (int)$this->_getParam('id');
if($id < 1){
echo 0;
return;
}
2014-01-09 12:27:07 +00:00
$sql = "select count(distinct md.id) as total from mdref mr
right join normalmetadata md on md.uuid=mr.uuid
where mr.refid=$id";
$rs = $this->db->query($sql);
$row = $rs->fetch();
echo $row['total'];
}
}
2013-05-27 08:59:42 +00:00
function tagdatalistAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
$page = $this->_getParam('page');
$pageSize = 10;//每页容量
$keys=$this->db->fetchAll("select keyword from knl_keyword where item_id=$id");
$wheresql = array();
$where2sql=array();
foreach ($keys as $k=>$v)
{
//split chinese keyword and english keyword
$k1=explode('(',$v['keyword']);
if (is_array($k1) && count($k1)>1)
{
$k2=substr($k1[1],0,-1);
$wheresql[] = " a.keyword like '%".$k2."%' ";
$where2sql[] = " title like '%".$k2."%' ";
$where2sql[] = " description like '%".$k2."%' ";
}
$wheresql[] = " a.keyword like '%".$k1[0]."%' ";
$where2sql[] = " title like '%".$k1[0]."%' ";
$where2sql[] = " description like '%".$k1[0]."%' ";
}
$wheresql[] = " 1<>1 ";
$wheresql = join(" or ",$wheresql);
$where2sql[] = " 1<>1 ";
$where2sql = join(" or ",$where2sql);
$sql = "select m.title,m.uuid from normalmetadata m where id in (select distinct id from keyword a where $wheresql) or $where2sql";
$pagnation="";
if(isset($page))
{
$page=intval($page);
if($page<0)
{
$page=0;
}
$re = $this->db->query($sql);
$rows = $re->fetchAll();
$num = count($rows);
if( $num > $pageSize)
{
if($page <= 0)
{
$pre = '<span class="disabled">&lt;</span>';
}else{
$pre = '<a href="javascript:void(0);" onClick="showdata('.$id.','. ($page-1) .')">&lt;</a>';
}
if($num <= $pageSize*($page+1))
{
$next = '<span class="disabled">&gt;</span>';
}else{
$next = "<a href=\"javascript:void(0);\" onclick=\"showdata(".$id.",". ($page+1) .")\">&gt;</a>";
}
$pagnation = '<div class="paginationControl">'.$pre.$next.'<span class="disabled">共 '.$num.' 条</span></div>';
}
$sql .="limit $pageSize offset ".$page*$pageSize;
}
else
{
$sql .="limit $pageSize";
}
$re = $this->db->query($sql);
$rows = $re->fetchAll();
echo '<strong>数据和文献存在一定的相关性,仅供参考。</strong><ul>';
foreach($rows as $c)
{
echo '<li><a href="/data/'.$c['uuid'].'">'.$c['title'].'</a></li>';
}
if (!$rows) echo '<li>很抱歉,未找到相关的数据</li>';
echo '</ul>';
echo $pagnation;
}//利用关键词查找的相关数据
function geonetworkAction()
{
//$this->_helper->viewRenderer->setNoRender();
//$this->_helper->layout->disableLayout();
$auth = Zend_Auth::getInstance();
$url = $this->config->geonetwork->url.'/srv/cn/'.urldecode($this->_request->getParam('url'));
if (!$auth->hasIdentity())
{
//$this->_redirect('/account/login?href=/service/geonetwork?url='.$url);
$url = '/account/login?href=/service/geonetwork?url='.$url;
}else{
$user = $auth->getIdentity();
//need to get pwd from database
$sql='select username,md5(password) as pwd from users where id='.$user->id;
$this->db->setFetchMode(Zend_Db::FETCH_OBJ);
$row=$this->db->fetchRow($sql);
$this->view->login=$this->config->geonetwork->url.'srv/en/xml.user.login?username='.$row->username.'&password='.$row->pwd;
}
$this->view->url = $url;
}
//上传申请表
function uploadapplicationformAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_getParam('offlineappid');
if(empty($id))
{
$this->jsonexit(array('error'=>"参数错误"));
return true;
}
$uid = view::User('id');
if(!is_numeric($uid))
{
$this->jsonexit(array('error'=>"用户信息读取失败,请重试"));
return true;
}
$files = new Files();
$FileListener = new FileListener();
@$files->events()->attachAggregate($FileListener);
$statu = $files->uploadApplicationForm($_FILES['Filedata'],$id);
if(isset($statu['error']))
{
$this->jsonexit($statu);
return true;
}else{
$sql = "UPDATE offlineapp SET applicationform='{$statu['file']}' WHERE id=$id AND userid=$uid";
if($this->db->exec($sql))
{
$this->jsonexit(array("success"=>1));
return true;
}else{
$this->jsonexit(array('error'=>"申请表上传失败".$sql));
return true;
}
}
}
//下载申请表
public function downloadapplicationformAction()
{
}
2013-05-27 08:59:42 +00:00
/*
输出验证码
*/
public function imgcodeAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
include_once('ImgCode.php');
$imagecode=new Custom_Controller_Plugin_ImgCode();
$imagecode->image2();
}
//header output
function headerAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$header=file_get_contents('../application/default/views/scripts/header.phtml');
$content='<link rel="stylesheet" type="text/css" media="screen"
href="/css/default.css" />';
$content.=eval('?>'.$header);
$content.='<script src="/js/navi.js" type="text/javascript"></script>';
$this->getResponse()->setHeader('Content-Type', 'text/html')
->setBody($content);
}
//footer output
function footerAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$footer=file_get_contents('../application/default/views/scripts/footer.phtml');
$this->getResponse()->setHeader('Content-Type', 'text/html')
->setBody($footer);
}
//RIS format convert
function risAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
//文献id
$id=(int)$this->_request->getParam('id');
2013-05-27 08:59:42 +00:00
$lang=$this->_request->getParam('lang');
$ris='';
if ($lang=='cn' && !empty($uuid))
{
$sql="select d.*,m.description,m.ts_published as publish_year from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid='$uuid' and d.ts_published is not null";
$row=$this->db->fetchRow($sql);
$authors=explode(',',str_replace('"','',substr($row['authors'],1,-1)));
$ris.='TY - JOUR'."\r\n";
$ris.='T1 - '.$row['title']."\r\n";
foreach($authors as $a)
{
$ris.='A1 - '.$a."\r\n";
}
$ris.='Y1 - '.(empty($row['publish_year'])?date('Y/m/d',strtotime($row['ts_published'])):date('Y/m/d',strtotime($row['publish_year'])))."\r\n";
$ris.='JF - '.$row['publisher']."\r\n";
$ris.='JA - '.$row['publisher']."\r\n";
$ris.='UR - http://dx.doi.org/'.$row['doi']."\r\n";
$ris.='PB - '.$row['publisher']."\r\n";
$ris.='M3 - doi:'.$row['doi']."\r\n";
$ris.='DO - doi:'.$row['doi']."\r\n";
$ris.='ER -'."\r\n";
}
else if ($lang=='en' && !empty($uuid))
{
$sql="select d.*,m.description,m.ts_published as publish_year from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid='$uuid' and d.ts_published is not null";
$row=$this->db->fetchRow($sql);
$authors=explode(',',str_replace('"','',substr($row['author_en'],1,-1)));
$ris.='TY - JOUR'."\r\n";
$ris.='T1 - '.$row['title_en']."\r\n";
foreach($authors as $a)
{
$ris.='A1 - '.$a."\r\n";
}
$ris.='Y1 - '.(empty($row['publish_year'])?date('Y/m/d',strtotime($row['ts_published'])):date('Y/m/d',strtotime($row['publish_year'])))."\r\n";
$ris.='JF - '.$row['publisher_en']."\r\n";
$ris.='JA - '.$row['publisher_en']."\r\n";
$ris.='UR - http://dx.doi.org/'.$row['doi']."\r\n";
$ris.='PB - '.$row['publisher_en']."\r\n";
$ris.='M3 - doi:'.$row['doi']."\r\n";
$ris.='DO - doi:'.$row['doi']."\r\n";
$ris.='ER -'."\r\n";
} else if ($id) {
$sql="select ris from reference where id=$id";
$row=$this->db->fetchRow($sql);
$ris=$row['ris'];
2013-05-27 08:59:42 +00:00
}
if (!empty($ris))
{
$this->getResponse()->setHeader('Content-Type', 'application/x-Research-Info-Systems')->setHeader('Content-Disposition','attachment; filename="'.$uuid.'.ris"')
//->setHeader('Content-Type','application/force-download')
->setBody($ris);
}
}
//Bibtex format convert
function bibtexAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid=$this->_request->getParam('uuid');
$lang=$this->_request->getParam('lang');
$bib='';
if ($lang=='cn' && !empty($uuid))
{
$sql="select d.*,m.description,m.ts_published as publish_year from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid='$uuid' and d.ts_published is not null";
$row=$this->db->fetchRow($sql);
$bib.='@article{'.$row['doi'].",\r\n";
$bib.=' author = '.str_replace('"','',str_replace(',',' and ',$row['authors'])).",\r\n";
$bib.=' journal = {'.$row['publisher']."},\r\n";
$bib.=' publisher = {'.$row['publisher']."},\r\n";
$bib.=' title = {'.$row['title']."},\r\n";
$bib.=' year = {'.(empty($row['publish_year'])?date('Y',strtotime($row['ts_published'])):date('Y',strtotime($row['publish_year'])))."},\r\n";
$bib.=' month = {'.(empty($row['publish_year'])?date('m',strtotime($row['ts_published'])):date('m',strtotime($row['publish_year'])))."},\r\n";
$bib.=' url = {http://dx.doi.org/'.$row['doi']."},\r\n";
$bib.=' doi = {'.$row['doi']."}\r\n";
$bib.="}\r\n";
}
else if ($lang=='en' && !empty($uuid))
{
$sql="select d.*,m.description,m.ts_published as publish_year from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid='$uuid' and d.ts_published is not null";
$row=$this->db->fetchRow($sql);
$bib.='@article{'.$row['doi'].",\r\n";
$bib.=' author = '.str_replace('"','',str_replace(',',' and ',$row['author_en'])).",\r\n";
$bib.=' journal = {'.$row['publisher_en']."},\r\n";
$bib.=' publisher = {'.$row['publisher_en']."},\r\n";
2016-04-05 14:17:34 +00:00
$bib.=' title = {'.$row['title_en']."},\r\n";
2013-05-27 08:59:42 +00:00
$bib.=' year = {'.(empty($row['publish_year'])?date('Y',strtotime($row['ts_published'])):date('Y',strtotime($row['publish_year'])))."},\r\n";
$bib.=' month = {'.(empty($row['publish_year'])?date('m',strtotime($row['ts_published'])):date('m',strtotime($row['publish_year'])))."},\r\n";
$bib.=' url = {http://dx.doi.org/'.$row['doi']."},\r\n";
$bib.=' doi = {'.$row['doi']."}\r\n";
$bib.="}\r\n";
}
if (!empty($bib))
{
$this->getResponse()->setHeader('Content-Type', 'application/x-Bibtex')->setHeader('Content-Disposition','attachment; filename="'.$uuid.'.bib"')
//->setHeader('Content-Type','application/force-download')
->setBody($bib);
}
}
function mapsearchAction(){
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
include_once("data/Metadata.php");
$md = new Metadata($this->db);
$options = $this->_getParam('opt');
if(isset($options['east']))
$options['east'] = (float)$options['east'];
if(isset($options['west']))
$options['west'] = (float)$options['west'];
if(isset($options['north']))
$options['north'] = (float)$options['north'];
if(isset($options['south']))
$options['south'] = (float)$options['south'];
$data = $md->DatasFilter($options);
2013-05-27 08:59:42 +00:00
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
return true;
}
function qrcodeAction()
{
2013-06-12 04:29:07 +00:00
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid = $this->getRequest()->getParam('uuid');
$code_params = array('text' => 'http://westdc.westgis.ac.cn/data/'.$uuid,
'backgroundColor' => '#FFFFFF',
'foreColor' => '#000000',
'padding' => 4, //array(10,5,10,5),
'moduleSize' => 2);
$renderer_params = array('imageType' => 'png');
Zend_Matrixcode::render('qrcode', $code_params, 'image', $renderer_params);
2013-05-27 08:59:42 +00:00
}
public function jsonexit($data){
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
return true;
}
public function dciAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
//must have doi to output dci
$uuid=$this->_request->getParam('uuid');
$xml='<?xml version="1.0" encoding="utf-8"?>
<DigitalContentData>
<DataRecord>
<Header>
<DateProvided>'.date("Y-m-d").'</DateProvided>
<RepositoryName>Cold and Arid Regions Science Data Center at Lanzhou</RepositoryName>
<Owner>CARD-WDS</Owner>
<RecordIdentifier>'.$uuid.'</RecordIdentifier>
</Header>
<BibliographicData>
<AuthorList>';
$sql="select d.title_en,d.doi,author_en,d.ts_published,m.description,m.timebegin,m.timeend
from datadoi d left join en.normalmetadata m on d.uuid=m.uuid where d.uuid=".$this->db->quote($uuid);
$row=$this->db->fetchRow($sql);
$authors=explode(',',str_replace('"','',substr($row['author_en'],1,-1)));
$i=0;
foreach($authors as $a)
{
$i=$i+1;
$xml.='<Author seq="'.$i.'" AuthorRole="Author">';
$xml.='<AuthorName>'.$a.'</AuthorName></Author>';
}
$xml.='
</AuthorList>
<TitleList>
<ItemTitle TitleType="English title"><![CDATA['.$row['title_en'].']]></ItemTitle>
</TitleList>
<Source>
<SourceURL>http://card.westgis.ac.cn/data/'.$uuid.'</SourceURL>
<SourceRepository AbbreviatedRepository="CARD">CARD</SourceRepository>
<PublicationYear>'.date('Y',strtotime($row['ts_published'])).'</PublicationYear>
</Source>
<LanguageList>
<Language>English</Language>
</LanguageList>
</BibliographicData>';
$xml.='<Abstract><![CDATA['.$row['description'].']]></Abstract>';
$xml.='<DescriptorsData>';
$sql="select k.keyword from en.keyword k left join en.normalmetadata m on k.id=m.id where k.keytype='theme' and m.uuid=".$this->db->quote($uuid);
$rowk=$this->db->fetchAll($sql);
$xml.='<KeywordsList>';
foreach ($rowk as $k)
{
$xml.='<Keyword><![CDATA['.$k['keyword'].']]></Keyword>';
}
$xml.='
</KeywordsList>';
if ($row['timebegin'])
{
$xml.='<TimeperiodList>
<TimePeriod TimeSpan="Start">'.date('Y-m-d',strtotime($row['timebegin'])).'</TimePeriod>';
if ($row['timeend'] && (date('Y-m-d',strtotime($row['timebegin']))!=date('Y-m-d',strtotime($row['timeend'])))) $xml.='
<TimePeriod TimeSpan="End">'.$row['timeend'].'</TimePeriod>';
$xml.='</TimeperiodList>';
}
$xml.='</DescriptorsData>';
$sql="select f.* from fund f left join mdfund mf on f.id=mf.fid where mf.uuid=".$this->db->quote($uuid).' order by mf.place asc';
$rowf=$this->db->fetchAll($sql);
$xml.='<FundingInfo>';
foreach ($rowf as $f)
{
$xml.='
<FundingInfoList>
<FundingStatement><GrantNumber>'.$f['fund_id'].'</GrantNumber><FundingOrganization>'.$f['fund_type_en'].'</FundingOrganization></FundingStatement>
</FundingInfoList>';
}
$xml.='</FundingInfo>';
$sql="select r.* from reference r left join mdref mr on r.id=mr.refid where mr.reftype=1 and r.language<>'zh' and mr.uuid=".$this->db->quote($uuid).' order by mr.place asc';
$rowc=$this->db->fetchAll($sql);
$xml.='<CitationList>';
foreach ($rowc as $c)
{
$xml.='<Citation CitationType="Citing" CitationSeq="1">
<CitationString>'.$c['reference'].'</CitationString>';
if ($c['doi'])
$xml.='<CitationDOI>'.$c['doi'].'</CitationDOI>';
$xml.='</Citation>';
}
$xml.='</CitationList>
</DataRecord>
</DigitalContentData>';
$this->getResponse()->setHeader('Content-Type', 'text/xml')
->setBody($xml);
}
2013-05-27 08:59:42 +00:00
}