Add odtAction, which can output metadata odt, use the odtphp class
This commit is contained in:
parent
4c78e4a84f
commit
ff20f636d2
|
@ -410,9 +410,11 @@ class ServiceController extends Zend_Controller_Action
|
|||
$projection='';
|
||||
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($row['data']);
|
||||
$dom->loadXML($row['data']);
|
||||
$xpath = new DOMXpath($dom);
|
||||
$row['rfdenom']=@$dom->getElementsByTagName('rfDenom')->item(0)->nodeValue;
|
||||
$row['resolution']=@$dom->getElementsByTagName('scaleDist')->item(0)->nodeValue;
|
||||
$row['resolution']=@$xpath->query('//scaleDist/value/Real')->item(0)->nodeValue;
|
||||
$row['resolution'].=@$dom->getElementsByTagName('uomName')->item(0)->nodeValue;
|
||||
|
||||
$pdf=new MetadataPDF();
|
||||
$pdf->metadata=$row;
|
||||
|
@ -423,6 +425,126 @@ class ServiceController extends Zend_Controller_Action
|
|||
//->setHeader('Content-Disposition','inline; filename="'.$row['title'].'.pdf"');
|
||||
$pdf->Output($row['title'].'.pdf','I');
|
||||
//die();
|
||||
}
|
||||
public function odtAction()
|
||||
{
|
||||
$this->_helper->layout->disableLayout();
|
||||
$this->_helper->viewRenderer->setNoRender();
|
||||
$uuid=$this->_request->getParam('uuid');
|
||||
$review=$this->_request->getParam('review');
|
||||
//error_reporting(1);
|
||||
if (!empty($uuid))
|
||||
{
|
||||
$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
|
||||
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="";
|
||||
foreach($ref as $k=>$refer)
|
||||
{
|
||||
$reference.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$refer['reference'])."\r\n";
|
||||
}
|
||||
$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=?";
|
||||
$sql=$this->db->quoteInto($sql,$uuid);
|
||||
$limits=$this->db->fetchAll($sql);
|
||||
$uselimits="";
|
||||
foreach($limits as $k=>$limit)
|
||||
{
|
||||
//$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
|
||||
$uselimits.=($k+1).'. '.str_replace(array("\r\n", "\n", "\r"),'',$limit['uselimit'])."\r\n";
|
||||
}
|
||||
$row['uselimits']=$uselimits;
|
||||
$sql="select ol.* from onlineresource ol left join metadata m on ol.uuid=m.uuid where m.uuid=?";
|
||||
$sql=$this->db->quoteInto($sql,$uuid);
|
||||
$res=$this->db->fetchAll($sql);
|
||||
$resource="";
|
||||
foreach($res as $k=>$r)
|
||||
{
|
||||
$resource.=($k+1).". ".$r['name'].' '.$r['linkage']."\n";
|
||||
}
|
||||
$row['resources']=$resource;
|
||||
$sql="select r.role,s.* from role r left join responsible s on r.resid=s.id left join metadata m on m.uuid=r.uuid where m.uuid=? order by r.role,r.id";
|
||||
$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;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue