2011-11-07 06:22:51 +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 ()
{
$id = ( int ) $this -> _request -> getParam ( 'id' );
2011-10-26 09:27:11 +00:00
if ( empty ( $id )) {
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( empty ( $uuid )) $this -> _redirect ( '/data' );
2011-11-02 14:07:49 +00:00
$where = $this -> db -> quoteInto ( 'm.uuid = ?' , $uuid );
2011-10-26 09:27:11 +00:00
} else {
2011-11-02 14:07:49 +00:00
$where = $this -> db -> quoteInto ( 'm.id = ?' , $id );
2011-11-07 06:22:51 +00:00
}
2011-11-02 14:07:49 +00:00
$sql = " select t.* from thumbnail t left join metadata m on t.id=m.id where " . $where ;
2011-10-26 09:27:11 +00:00
$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' ]);
2011-11-07 06:22:51 +00:00
}
}
/*
* 查看数据缩略大图
*/
function bigthumbAction ()
{
$id = ( int ) $this -> _request -> getParam ( 'id' );
2011-10-28 09:40:00 +00:00
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 );
2011-11-07 06:22:51 +00:00
}
2011-10-28 09:40:00 +00:00
$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 ;
2011-11-07 06:22:51 +00:00
} 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' ];
2011-10-28 09:40:00 +00:00
$url .= '/public/' . str_replace ( '_s.' , '.' , $thumb [ 'filename' ]);
header ( " Content-Type:image/ " . $thumb [ 'filetype' ]);
$file = fopen ( $url , 'r' );
fpassthru ( $file );
exit ;
2011-11-07 06:22:51 +00:00
}
}
/*
* 搜索 , 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> " ;
}
}
2011-11-03 02:37:24 +00:00
/*
* 转换元数据为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 x.data,m.title,m.description,g.id,m.projection from xml x left join metadata m on m.id=x.id 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.uuid=? " ;
$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' ];
} else
$projection = '' ;
$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 ( " ' " , " ' " , $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 );
$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 : 14 px ; line - height : 22 px ; font - family : 宋体 , Arial ;}
span { font - size : 14 px ;}
div { clear : both ; margin : 0 auto ; width : 100 % ; vertical - align : baseline ;}
#uuid{text-align: right;}
h3 { font - size : 18 px ;}
img { border : 0 none ;}
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 > ' ;
$content .= $xslt -> transformToXML ( $dom );
if ( $review == 1 ) $content .= file_get_contents ( '../data/review-table.htm' , true );
$content .= " </body></html> " ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/vnd.ms-doc' )
-> setHeader ( 'Content-Disposition' , 'attachment; filename="' . $row [ 'title' ] . '.doc"' )
-> 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 );
2011-11-07 06:22:51 +00:00
}
2011-11-02 14:07:49 +00:00
/*
* 转换元数据为PDF格式
*/
public function pdfAction ()
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
2011-11-07 06:22:51 +00:00
$review = $this -> _request -> getParam ( 'review' );
2011-11-02 14:07:49 +00:00
error_reporting ( 1 );
if ( ! empty ( $uuid ))
{
2011-11-07 06:22:51 +00:00
$sql = " select x.data,m.title,m.citation,m.suppinfo,m.doi,m.filesize,m.fileformat,m.south,m.east,m.west,m.north,m.timebegin,m.timeend,m.title_en,m.uuid,m.description,g.id,m.projection,t.filetype,
cc . name as category , cc . name_zh as category_zh
from xml x left join metadata m on m . id = x . id left join thumbnail t on x . id = t . id
left join category c on c . id = m . id left join categorycode cc on c . code = cc . code
2011-11-02 14:07:49 +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.uuid=? " ;
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$ref = $this -> db -> fetchAll ( $sql );
2011-11-02 14:07:49 +00:00
$reference = " " ;
foreach ( $ref as $k => $refer )
{
$reference .= ( $k + 1 ) . '. ' . str_replace ( array ( " \r \n " , " \n " , " \r " ), '' , $refer [ 'reference' ]) . " \r \n " ;
2011-11-07 06:22:51 +00:00
}
$row [ 'reference' ] = $reference ;
$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=? " ;
2011-11-02 14:07:49 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$limits = $this -> db -> fetchAll ( $sql );
2011-11-02 14:07:49 +00:00
$uselimits = " " ;
foreach ( $limits as $k => $limit )
{
2011-11-07 06:22:51 +00:00
//$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
2011-11-02 14:07:49 +00:00
$uselimits .= ( $k + 1 ) . '. ' . str_replace ( array ( " \r \n " , " \n " , " \r " ), '' , $limit [ 'uselimit' ]) . " \r \n " ;
2011-11-07 06:22:51 +00:00
}
$row [ 'uselimits' ] = $uselimits ;
$sql = " select ol.* from onlineresource ol left join metadata m on ol.uuid=m.uuid where m.uuid=? " ;
2011-11-02 14:07:49 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$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 " ;
2011-11-02 14:07:49 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$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 " ;
2011-11-02 14:07:49 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$keys = $this -> db -> fetchAll ( $sql );
$keyword = array ();
foreach ( $keys as $key )
{
@ $keyword [ $key [ 'keytype' ]] .= $key [ 'keyword' ] . ', ' ;
}
2011-11-02 14:07:49 +00:00
$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 ();
2011-11-07 06:22:51 +00:00
$dom -> loadXML ( $row [ 'data' ]);
2011-11-03 15:32:33 +00:00
$xpath = new DOMXpath ( $dom );
2011-11-07 06:22:51 +00:00
$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 ;
2011-11-04 09:58:43 +00:00
//提前对表格进行预处理
/* $wiki = new WikiFormat ();
2011-11-07 06:22:51 +00:00
$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 );
2011-11-02 14:07:49 +00:00
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/pdf' );
2011-11-07 06:22:51 +00:00
//->setHeader('Content-Disposition','inline; filename="'.$row['title'].'.pdf"');
2011-11-02 14:07:49 +00:00
$pdf -> Output ( $row [ 'title' ] . '.pdf' , 'I' );
//die();
2011-11-07 06:22:51 +00:00
}
public function odtAction ()
{
2011-11-03 15:32:33 +00:00
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
2011-11-07 06:22:51 +00:00
$review = $this -> _request -> getParam ( 'review' );
//error_reporting(1);
2011-11-03 15:32:33 +00:00
if ( ! empty ( $uuid ))
{
2011-11-07 06:22:51 +00:00
$sql = " select x.data,m.title,m.citation,m.suppinfo,m.doi,m.filesize,m.fileformat,m.south,m.east,m.west,m.north,m.timebegin,m.timeend,m.title_en,m.uuid,m.description,g.id,m.projection,t.filetype,
cc . name as category , cc . name_zh as category_zh
from xml x left join metadata m on m . id = x . id left join thumbnail t on x . id = t . id
left join category c on c . id = m . id left join categorycode cc on c . code = cc . code
2011-11-03 15:32:33 +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.uuid=? " ;
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$ref = $this -> db -> fetchAll ( $sql );
2011-11-03 15:32:33 +00:00
$reference = " " ;
foreach ( $ref as $k => $refer )
{
$reference .= ( $k + 1 ) . '. ' . str_replace ( array ( " \r \n " , " \n " , " \r " ), '' , $refer [ 'reference' ]) . " \r \n " ;
2011-11-07 06:22:51 +00:00
}
$row [ 'reference' ] = $reference ;
$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=? " ;
2011-11-03 15:32:33 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$limits = $this -> db -> fetchAll ( $sql );
2011-11-03 15:32:33 +00:00
$uselimits = " " ;
foreach ( $limits as $k => $limit )
{
2011-11-07 06:22:51 +00:00
//$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
2011-11-03 15:32:33 +00:00
$uselimits .= ( $k + 1 ) . '. ' . str_replace ( array ( " \r \n " , " \n " , " \r " ), '' , $limit [ 'uselimit' ]) . " \r \n " ;
2011-11-07 06:22:51 +00:00
}
$row [ 'uselimits' ] = $uselimits ;
$sql = " select ol.* from onlineresource ol left join metadata m on ol.uuid=m.uuid where m.uuid=? " ;
2011-11-03 15:32:33 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$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 " ;
2011-11-03 15:32:33 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$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 " ;
2011-11-03 15:32:33 +00:00
$sql = $this -> db -> quoteInto ( $sql , $uuid );
2011-11-07 06:22:51 +00:00
$keys = $this -> db -> fetchAll ( $sql );
$keyword = array ();
foreach ( $keys as $key )
{
@ $keyword [ $key [ 'keytype' ]] .= $key [ 'keyword' ] . ', ' ;
}
2011-11-03 15:32:33 +00:00
$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 ();
2011-11-07 06:22:51 +00:00
$dom -> loadXML ( $row [ 'data' ]);
2011-11-03 15:32:33 +00:00
$xpath = new DOMXpath ( $dom );
2011-11-07 06:22:51 +00:00
$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 ;
2011-11-04 09:58:43 +00:00
//提前对表格进行预处理
$wiki = new WikiFormat ();
2011-11-07 06:22:51 +00:00
$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 " ;
$odf = new Odf ( " ../data/metadata-template.odt " , $config );
$odf -> setVars ( 'title' , $row [ 'title' ], true , 'utf-8' );
@ $odf -> setVars ( 'title_en' , $row [ 'title_en' ], true , 'utf-8' );
$odf -> setVars ( 'uuid' , $row [ 'uuid' ], true , 'utf-8' );
$odf -> setVars ( 'datetime' , date ( 'Y-m-d' ));
$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' );
@ $odf -> setVars ( 'stratum_keyword' , $row [ 'keyword' ][ 'stratum' ], true , 'utf-8' );
@ $odf -> setVars ( 'category' , $row [ 'category' ] . ' ' . $row [ 'category_zh' ], true , 'utf-8' );
@ $odf -> setVars ( 'rfdenom' , $row [ 'rfdenom' ], true , 'utf-8' );
@ $odf -> setVars ( 'resolution' , $row [ 'resolution' ], true , 'utf-8' );
@ $odf -> setVars ( 'projection' , $row [ 'projection' ], true , 'utf-8' );
@ $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' );
@ $odf -> setVars ( 'citation' , $row [ 'citation' ], true , 'utf-8' );
@ $odf -> setVars ( 'reference' , $row [ 'reference' ], true , 'utf-8' );
@ $odf -> setVars ( 'doi' , $row [ 'doi' ], true , 'utf-8' );
@ $odf -> setVars ( 'suppinfo' , $row [ 'suppinfo' ], true , 'utf-8' );
@ $odf -> setVars ( 'uselimits' , $row [ 'uselimits' ], true , 'utf-8' );
@ $odf -> setVars ( 'resources' , $row [ 'resources' ], true , 'utf-8' );
@ $odf -> setVars ( 'contacts' , $row [ 'contacts' ], true , 'utf-8' );
@ $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' );
$odf -> setImage ( 'bigthumb' , 'http://test.westgis.ac.cn/service/bigthumb/uuid/' . $row [ 'uuid' ]);
$odf -> setImage ( 'thumb' , 'http://test.westgis.ac.cn/service/thumb/uuid/' . $row [ 'uuid' ]);
$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 -> view -> 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' ];
$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' ];
$msg [ 'html' ] = $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>' ;
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 ();
}
2011-11-07 06:38:27 +00:00
}
function filelistAction ()
{
$uuid = $this -> _request -> getParam ( 'uuid' );
$sql = " select f.filename,f.id,s.uuid,f.depth from datafile f,dataset s where s.id=f.dsid 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 ));
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
echo Zend_Json :: encode ( $files );
}
function subfilelistAction ()
{
$uuid = $this -> _request -> getParam ( 'uuid' );
$subpath = ( int ) $this -> _request -> getParam ( 'subpath' );
$depth = ( int ) $this -> _request -> getParam ( 'depth' );
$depth ++ ;
$sql = " select f.filename,f.id,s.uuid,f.depth from datafile f,dataset s where s.id=f.dsid 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 " ;
$files = $this -> db -> fetchAll ( $this -> db -> quoteInto ( $sql , $uuid ));
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
echo Zend_Json :: encode ( $files );
}
2011-11-07 06:22:51 +00:00
}