_helper->viewRenderer->setNoRender(); $this->_helper->layout->disableLayout(); } function preDispatch() { $this->db=Zend_Registry::get('db'); $this->view->config = $this->config = Zend_Registry::get('config'); //$this->messenger=$this->_helper->getHelper('FlashMessenger'); //$this->view->messages = $this->messenger->getMessages(); } /* * 返回XML源文件 */ function xmlAction() { $uuid=$this->_request->getParam('uuid'); $row=$this->db->fetchRow("select xml.data from xml left join metadata on xml.id=metadata.id where metadata.uuid=?",array($uuid)); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $this->getResponse()->setHeader('Content-Type', 'text/xml') ->setBody($row['data']); } /* * 查看数据缩略图 */ function thumbAction() { $id = (int)$this->_request->getParam('id'); if (empty($id)) { $uuid = $this->_request->getParam('uuid'); if (empty($uuid)) $this->_redirect('/data'); $where=$this->db->quoteInto('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 north?"; 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( '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 normalmetadata 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 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 "
"; } } /* * 转换元数据为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 g.data,m.title,m.description,g.id,m.projection from metadata m left join xml x 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='
    '; foreach($ref as $refer) { $reference.='
  1. '.$refer['reference'].'
  2. '; } $reference.='
'; 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','$2',$abs); $abs=str_replace(array("\r\n", "\n", "\r"),'

',$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=' '; $content.=''.$row['title'].''; $content.=' '; $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); $content.=""; $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)) { $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 metadata m left join xml x 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); $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']; } 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('/[\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); $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'); $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; //提前对表格进行预处理 $wiki=new WikiFormat(); $row['description']=$wiki->parseTable($row["description"]); preg_match_all('/
[\s\S]*?<\/table>/im', $row['description'],$tables); $search=array(); $replace=array(); foreach($tables as $k=>$table) { /*$search[]="
"; $replace[]=''.str_repeat('',substr_count($table[0],'"; $replace[]=""; $search[]=""; $replace[]=""; $search[]=""; $replace[]=""; $search[]="
')); $search[]="
"; $replace[]=""; $search[]=""; $replace[]=""; $search[]=""; $replace[]=""; $search[]="
"; $replace[]=""; $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://westdc.westgis.ac.cn/service/bigthumb/uuid/'.$row['uuid']); $odf->setImage('thumb', 'http://westdc.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->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 = ''; else $preview = ""; $msg['html'] = $preview.$realname.'[已完成]

'; $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 = ''; else $preview = ""; $atts[$k]['html']= $preview.$v['realname'].'[已完成]
'; } echo Zend_Json::encode($atts); exit(); }else { exit(); } }else{ exit(); } //不输出错误 }//获取附件 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); } /* * 附件下载 */ 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>#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>#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>#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>!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 = '
  • Prev
  • '; } if($num > $pageSize*($page+1)) { $next = '
  • Next
  • '; } } $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 '
      '; foreach($rows as $c) { echo '
    • '.$c['title'].'

      '.$c['title'].'

      推荐指数:'.$c['downtimes'].'
    • '; } echo '
    '; echo ''; }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 '
  • '.$c['title']."
  • \r\n"; } echo '
    '.$paginator.'
    '; } } //相关数据 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 '
  • '.$c['title'].'【'.$c['author'].' '.$c['publisher'].' '.$c['ts_issued']."】
  • "; } echo '
    '.$paginator.'
    '; } }//相关文献 function refdatalistAction(){ $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $id = $this->_request->getParam('id'); $page = $this->_getParam('page'); $pageSize = 10;//每页容量 $sql = "select md.title,md.uuid from mdref mr left join metadata md on md.uuid=mr.uuid 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 = '<'; }else{ $pre = '<'; } if($num <= $pageSize*($page+1)) { $next = '>'; }else{ $next = ">"; } $pagnation = '
    '.$pre.$next.'共 '.$num.' 条
    '; } $sql .="limit $pageSize offset ".$page*$pageSize; } else { $sql .="limit $pageSize"; } $re = $this->db->query($sql); $rows = $re->fetchAll(); echo ''; echo $pagnation; }//文档页面相关数据 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 = '<'; }else{ $pre = '<'; } if($num <= $pageSize*($page+1)) { $next = '>'; }else{ $next = ">"; } $pagnation = '
    '.$pre.$next.'共 '.$num.' 条
    '; } $sql .="limit $pageSize offset ".$page*$pageSize; } else { $sql .="limit $pageSize"; } $re = $this->db->query($sql); $rows = $re->fetchAll(); echo '数据和文献存在一定的相关性,仅供参考。
      '; foreach($rows as $c) { echo '
    • '.$c['title'].'
    • '; } if (!$rows) echo '
    • 很抱歉,未找到相关的数据
    • '; echo '
    '; 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; } /* 输出验证码 */ 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=''; $content.=eval('?>'.$header); $content.=''; $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); } }