259 lines
8.9 KiB
PHP
259 lines
8.9 KiB
PHP
<?php
|
|
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 = 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('uuid = ?',$uuid);
|
|
} else {
|
|
$where=$this->db->quoteInto('id = ?',$id);
|
|
}
|
|
$sql="select * from thumbnail 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->view->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,description,filesize,fileformat from metadata where east<? and west>? and north<? and south>?";
|
|
if (!empty($key)) {
|
|
$sql.= " and (title ilike ? or description ilike ?)";
|
|
$sql.= " order by title";
|
|
$rows=$this->db->fetchAll($sql,array($e,$w,$n,$s,'%'.$key.'%','%'.$key.'%'));
|
|
} else {
|
|
$sql.= " order by title";
|
|
$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->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 metadata 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 title,datatype,filesize,id from metadata";
|
|
$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>";
|
|
}
|
|
|
|
}
|
|
}
|
|
|