2013-05-27 08:59:42 +00:00
< ? php
2013-09-05 01:54:50 +00:00
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' );
2014-06-19 00:26:54 +00:00
$this -> submd = 'normalmetadata' ;
2013-05-27 08:59:42 +00:00
//$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 (
2014-06-19 00:26:54 +00:00
'title' => '三江源生态监测综合服务平台' ,
'link' => 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/service/feed' ,
'description' => '管理、共享三江源生态监测数据' ,
2013-05-27 08:59:42 +00:00
'language' => 'zh-CN' ,
'charset' => 'utf-8' ,
'published' => time (),
//'generator' => 'Zend Framework Zend_Feed',
'entries' => array ()
);
2014-06-19 00:26:54 +00:00
$sql = " select * from $this->submd order by ts_created desc " ;
2013-05-27 08:59:42 +00:00
$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 ))
{
2013-06-18 09:04:45 +00:00
$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
2013-06-18 02:03:32 +00:00
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 );
2013-06-18 02:03:32 +00:00
$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' ];
}
2013-06-18 09:04:45 +00:00
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' ])
{
2014-02-25 04:12:57 +00:00
$citation = $row [ 'citation' ];
if ( ! empty ( $row [ 'datadoi' ]) && ! strpos ( $row [ 'citation' ], $row [ 'datadoi' ]))
2013-06-18 09:04:45 +00:00
{
$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> " ;
}
2014-06-19 00:26:54 +00:00
if ( empty ( $fund ) && ! empty ( $row [ 'suppinfo' ])) $fund = $row [ 'suppinfo' ];
2013-06-18 02:03:32 +00:00
}
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 ( " ' " , " ' " , $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 );
2013-06-18 09:04:45 +00:00
$xslt -> setParameter ( '' , 'reference' , $reference );
$xslt -> setParameter ( '' , 'citation' , $citation );
2014-06-19 00:26:54 +00:00
if ( $fund ) $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 : 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 ;}
2013-06-18 02:03:32 +00:00
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 );
2013-06-18 09:04:45 +00:00
$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 ))
{
2013-06-18 09:04:45 +00:00
$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 );
2013-06-18 00:31:08 +00:00
$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 " ;
}
2013-06-18 09:04:45 +00:00
$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' ];
}
2013-06-18 09:04:45 +00:00
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' ] . ']' ;
}
}
2013-06-18 00:31:08 +00:00
$row [ 'citation' ] = $cit ;
2013-06-18 09:04:45 +00:00
}
2013-06-18 00:31:08 +00:00
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 );
2014-06-19 00:26:54 +00:00
$pdf -> setAuthor ( '三江源生态监测综合服务平台' , true );
2013-05-27 08:59:42 +00:00
$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' );
2013-06-18 09:04:45 +00:00
$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
2013-06-18 09:04:45 +00:00
, 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
2013-06-18 00:18:57 +00:00
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 );
2013-06-18 00:18:57 +00:00
$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 " ;
}
2013-06-18 09:04:45 +00:00
$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 " ;
}
2013-06-18 09:04:45 +00:00
$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 " ;
2013-06-18 09:04:45 +00:00
$config [ " ZIP_PROXY " ] = " ZipArchive " ;
2013-06-11 09:23:21 +00:00
if ( $ac == 'simple' )
2013-06-18 09:04:45 +00:00
$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' );
2013-06-18 09:04:45 +00:00
@ $odf -> setVars ( 'timeend' , $row [ 'timeend' ], true , 'utf-8' );
2013-06-18 00:18:57 +00:00
$cit = '' ;
2013-06-18 09:04:45 +00:00
if ( $row [ 'mcitation' ])
{
$cit = $row [ 'mcitation' ];
} else if ( $row [ 'citation' ])
{
2014-02-25 04:12:57 +00:00
$cit = $row [ 'citation' ];
if ( ! empty ( $row [ 'datadoi' ]) && ! strpos ( $row [ 'citation' ], $row [ 'datadoi' ]))
2013-06-18 09:04:45 +00:00
{
$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' ] . ']' ;
}
}
2013-06-18 00:18:57 +00:00
@ $odf -> setVars ( 'citation' , $cit , true , 'utf-8' );
2014-06-19 00:26:54 +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' );
2013-06-18 09:04:45 +00:00
@ $odf -> setVars ( 'east' , $row [ 'east' ], true , 'utf-8' );
if ( ! $ac == 'simple' )
{
2014-06-19 00:26:54 +00:00
@ $odf -> setImage ( 'bigthumb' , 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/service/bigthumb/uuid/' . $row [ 'uuid' ]);
@ $odf -> setImage ( 'thumb' , 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/service/thumb/uuid/' . $row [ 'uuid' ]);
2013-06-18 09:04:45 +00:00
@ $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' );
2014-06-19 00:26:54 +00:00
//@$odf->setVars('suppinfo',$row['suppinfo'],true,'utf-8');
2013-06-18 09:04:45 +00:00
@ $odf -> setVars ( 'contacts' , $row [ 'contacts' ], true , 'utf-8' );
} else {
2014-06-19 00:26:54 +00:00
@ $odf -> setImage ( 'qrcode' , 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/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' );
}
2015-02-01 13:05:35 +00:00
//用于制备三江源数据目录简要文件
public function odtmdAction ()
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
$ac = $this -> _request -> getParam ( 'ac' );
//error_reporting(1);
if ( ! empty ( $uuid ))
{
$sql = " select g.data,m.title,m.citation,m.suppinfo,m.doi,m.filesize,m.fileformat,m.ts_created,m.datatype,
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 . publisher , 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 );
$row = $this -> db -> fetchRow ( $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 ;
}
require_once ( 'odtphp/library/odf.php' );
$config [ " PATH_TO_TMP " ] = " /tmp/zip " ;
$config [ " ZIP_PROXY " ] = " ZipArchive " ;
$odf = new Odf ( " ../data/metadata-template-simplemd.odt " , $config );
$odf -> setVars ( 'title' , $row [ 'title' ], true , 'utf-8' );
@ $odf -> setVars ( 'uuid' , $row [ 'uuid' ], true , 'utf-8' );
2015-02-01 13:15:16 +00:00
//$odf->setVars('datetime',date('Y-m-d',strtotime($row['ts_created'])));
2015-02-01 13:05:35 +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' );
@ $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 [ 'datadoi' ])
{
$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' ];
} else
{
$cit = $row [ 'citation' ];
}
@ $odf -> setVars ( 'citation' , $cit , true , 'utf-8' );
//@$odf->setVars('reference',$row['reference'],true,'utf-8');
//@$odf->setVars('doi',$row['doi'],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' );
2015-02-03 08:33:14 +00:00
@ $odf -> setVars ( 'service' , $row [ 'datatype' ] ? '离线申请' : '在线下载' , true , 'utf-8' );
2015-02-01 13:05:35 +00:00
//@$odf->setImage('bigthumb', 'http://'.$_SERVER['SERVER_NAME'].'/service/bigthumb/uuid/'.$row['uuid']);
@ $odf -> setImage ( 'thumb' , 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/service/thumb/uuid/' . $row [ 'uuid' ]);
@ $odf -> setImage ( 'qrcode' , 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/service/qrcode/uuid/' . $row [ 'uuid' ]);
$odf -> exportAsAttachedFile ( $row [ 'title' ] . '.odt' );
}
2013-05-27 08:59:42 +00:00
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 ();
}
//不输出错误
} //获取附件
2013-06-18 09:04:45 +00:00
//json 文件列表
2013-05-27 08:59:42 +00:00
function filelistAction ()
{
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
2013-06-18 09:04:45 +00:00
$uuid = $this -> _request -> getParam ( 'uuid' );
2013-06-18 12:08:28 +00:00
$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.uuid=? and f.depth=1 and f.filename<>'/uuid.txt' order by f.isdir desc,f.filename " ;
2013-09-05 01:54:50 +00:00
$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
}
2013-06-18 09:04:45 +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 ()
{
2013-06-18 09:04:45 +00:00
$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 ++ ;
2013-06-18 12:08:28 +00:00
$sql = " select f.*,s.uuid 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 " ;
2013-05-27 08:59:42 +00:00
$files = $this -> db -> fetchAll ( $this -> db -> quoteInto ( $sql , $uuid ));
2013-06-18 09:04:45 +00:00
foreach ( $files as $k => $v )
{
$files [ $k ][ 'ts_created' ] = date ( " Y-m-d H:i " , strtotime ( $v [ 'ts_created' ]));
2013-09-05 01:54:50 +00:00
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
2013-06-18 09:04:45 +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 13:44:26 +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"><</span>' ;
} else {
$pre = '<a href="javascript:void(0);" onClick="showdata(' . $id . ',' . ( $page - 1 ) . ')"><</a>' ;
}
if ( $num <= $pageSize * ( $page + 1 ))
{
$next = '<span class="disabled">></span>' ;
} else {
$next = " <a href= \" javascript:void(0); \" onclick= \" showdata( " . $id . " , " . ( $page + 1 ) . " ) \" >></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 ;
} //文档页面相关数据
2013-10-28 09:45:48 +00:00
function refdatacountAction ()
{
if ( view :: isXmlHttpRequest ( $this ))
{
$id = ( int ) $this -> _getParam ( 'id' );
if ( $id < 1 ){
echo 0 ;
return ;
}
2014-01-09 13:44:26 +00:00
$sql = " select count(distinct md.id) as total from mdref mr
2013-10-28 09:45:48 +00:00
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"><</span>' ;
} else {
$pre = '<a href="javascript:void(0);" onClick="showdata(' . $id . ',' . ( $page - 1 ) . ')"><</a>' ;
}
if ( $num <= $pageSize * ( $page + 1 ))
{
$next = '<span class="disabled">></span>' ;
} else {
$next = " <a href= \" javascript:void(0); \" onclick= \" showdata( " . $id . " , " . ( $page + 1 ) . " ) \" >></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 ;
2013-09-05 01:54:50 +00:00
}
//上传申请表
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 {
2013-09-06 07:56:41 +00:00
$sql = " UPDATE offlineapp SET applicationform=' { $statu [ 'file' ] } ' WHERE id= $id AND userid= $uid " ;
2013-09-05 01:54:50 +00:00
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' );
2013-11-15 14:41:56 +00:00
//文献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 " ;
2013-11-15 14:41:56 +00:00
} 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 " ;
$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 " ;
}
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' ];
2013-05-30 02:24:36 +00:00
$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 ;
2013-06-18 09:04:45 +00:00
}
function qrcodeAction ()
{
2013-06-12 04:29:07 +00:00
$this -> _helper -> layout -> disableLayout ();
2013-06-18 09:04:45 +00:00
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> getRequest () -> getParam ( 'uuid' );
2014-06-19 00:26:54 +00:00
$code_params = array ( 'text' => 'http://' . $_SERVER [ 'SERVER_NAME' ] . '/data/' . $uuid ,
2013-06-18 09:04:45 +00:00
'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
}
2013-09-05 01:54:50 +00:00
public function jsonexit ( $data ){
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( json_encode ( $data , JSON_NUMERIC_CHECK ));
return true ;
2014-02-27 14:11:54 +00:00
}
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 > ' ;
2014-03-03 13:34:19 +00:00
$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 );
2014-02-27 14:11:54 +00:00
$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 >
2014-03-03 13:34:19 +00:00
< ItemTitle TitleType = " English title " ><! [ CDATA [ '.$row[' title_en '].' ]] ></ ItemTitle >
2014-02-27 14:11:54 +00:00
</ 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 >
2014-03-03 13:34:19 +00:00
</ 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 >
2014-02-27 14:11:54 +00:00
</ DataRecord >
</ DigitalContentData > ' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'text/xml' )
-> setBody ( $xml );
}
2013-05-27 08:59:42 +00:00
}