2010-11-18 07:24:32 +00:00
< ? 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 ()
{
2011-10-26 09:27:11 +00:00
$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' ]);
}
}
2010-11-18 07:24:32 +00:00
/*
2011-10-28 09:40:00 +00:00
* 查看数据缩略大图
*/
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 ;
}
}
/*
2011-10-26 09:27:11 +00:00
* 搜索 , no page , json output
2010-11-18 07:24:32 +00:00
*/
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');
2010-12-02 14:24:57 +00:00
$sql = " select id,title,uuid,description,filesize,fileformat from metadata where east<? and west>? and north<? and south>? " ;
2010-11-18 07:24:32 +00:00
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> " ;
}
}
}