From 4120cda7aa6599c657b3a2f071fde04f7d752c1a Mon Sep 17 00:00:00 2001
From: Li Jianxuan
Date: Mon, 26 May 2014 03:38:36 +0000
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=AF=E8=A7=86=E5=8C=96?=
=?UTF-8?q?=E8=A6=81=E7=B4=A0=E5=90=8E=E5=8F=B0=E7=AE=A1=E7=90=86=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../admin/controllers/DataController.php | 8416 +++++++++--------
.../admin/views/scripts/data/left.phtml | 1 +
application/admin/views/scripts/data/md.phtml | 3 +-
.../admin/views/scripts/data/visual-add.phtml | 45 +
.../admin/views/scripts/data/visual.phtml | 20 +
.../Westdc/Visual/Handle/VisualHandle.php | 43 +
.../Westdc/Visual/Listener/VisualListener.php | 27 +
application/module/Westdc/Visual/Visual.php | 86 +
8 files changed, 4440 insertions(+), 4201 deletions(-)
create mode 100644 application/admin/views/scripts/data/visual-add.phtml
create mode 100644 application/admin/views/scripts/data/visual.phtml
create mode 100644 application/module/Westdc/Visual/Handle/VisualHandle.php
create mode 100644 application/module/Westdc/Visual/Listener/VisualListener.php
create mode 100644 application/module/Westdc/Visual/Visual.php
diff --git a/application/admin/controllers/DataController.php b/application/admin/controllers/DataController.php
index ad0cc603..500ce89a 100755
--- a/application/admin/controllers/DataController.php
+++ b/application/admin/controllers/DataController.php
@@ -1,4200 +1,4216 @@
-db=Zend_Registry::get('db');
- $this->view->config = Zend_Registry::get('config');
- $this->messenger=$this->_helper->getHelper('FlashMessenger');
- $this->view->messages = $this->messenger->getMessages();
- $this->debug = 0; //1:debug, 0:release
- $this->debug_email='wangliangxu@lzb.ac.cn';
- $this->view->theme = new Theme();
- $this->_helper->layout->setLayout('administry');
- }
- function postDispatch()
- {
- $this->view->messages = $this->messenger->getMessages();
- }
- function indexAction()
- {
- //其他连接
- }
-
- //提供和GEONETWORK中的元数据的同步功能
- //提供双向同步功能,但只处理ISO 19115格式的元数据?
- function syncAction()
- {
- set_time_limit(0);
- $sql="select * from (select count(*) as westdccount from metadata) as t1,(select count(uuid) as gncount from geonetworkmetadata where schemaid='iso19115') as t2";
- $this->db->setFetchMode(Zend_Db::FETCH_OBJ);
- $this->view->mdcount=$this->db->fetchRow($sql);
- $source=$this->_request->getParam('source');
- $delete=$this->_request->getParam('delete');
- $thumb=$this->_request->getParam('thumb');
- $list=$this->_request->getParam('list');
- $adminuser=$this->_request->getParam('adminuser');
- $uuid=trim($this->_request->getParam('uuid'));
- if ($source=="geonetwork" && empty($uuid) ) {
- //从geonetwork向WESTDC同步
- //对所有的新数据增加评审状态
- $sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
- from geonetworkmetadata gn where uuid not in (select uuid from mdstatus)";
- $userid = Zend_Auth::getInstance()->getIdentity()->id;
- $this->db->query($sql,array($userid));
- $sql="select uuid,data,source from geonetworkmetadata where schemaid='iso19115'";
- $rs=$this->db->fetchAll($sql);
- foreach($rs as $gmd) {
- $this->import($gmd->data);
- $this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
- }
- $this->view->msg='成功同步元数据!';
- } elseif ($source=="watergn" && empty($uuid) ) {
- //首先删除所有的黑河试验数据
- //$sql="delete from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'";
- $sql="delete from metadata where uuid in (select uuid from watergn)";
- $this->db->query($sql);
- $sql="delete from responsible where id not in (select distinct(resid) from role)";
- $this->db->query($sql);
- //对所有的新数据增加评审状态
- $sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
- from watergn where uuid not in (select uuid from mdstatus)";
- $userid = Zend_Auth::getInstance()->getIdentity()->id;
- $this->db->query($sql,array($userid));
- //同步黑河遥感实验的元数据
- $sql="select uuid,data,source from watergn where schemaid='iso19115'";
- $rs=$this->db->fetchAll($sql);
- foreach($rs as $gmd) {
- $this->import($gmd->data);
- $this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
- }
- $this->view->msg='成功同步黑河遥感综合实验元数据!';
- }elseif ($source=="glacier" && empty($uuid) ) {
- //首先删除所有的对应专题数据
- $sql="delete from metadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='glacier')";
- $this->db->query($sql);
- $sql="delete from responsible where id not in (select distinct(resid) from role)";
- $this->db->query($sql);
- //对所有的新数据增加评审状态
- /*$sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
- from watergn where uuid not in (select uuid from mdstatus)";
- $userid = Zend_Auth::getInstance()->getIdentity()->id;
- $this->db->query($sql,array($userid));*/
- //同步专题元数据
- $sql="select uuid,data,source from geonetworkmetadata where schemaid='iso19115' and uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='glacier')";
- $rs=$this->db->fetchAll($sql);
- foreach($rs as $gmd) {
- $this->import($gmd->data);
- //source in unused now.
- //$this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
- }
- $this->view->msg='成功同步专题元数据!';
- } elseif ($source=="westdc" && empty($uuid) ) {
- //从westdc向geonetwork同步
- $sql="select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid not in (select uuid from geonetworkmetadata)";
- $rs=$this->db->fetchAll($sql);
- foreach($rs as $gmd) {
- $sql="insert into geonetworkmetadata (uuid,source,data) values('".$gmd->uuid."','".$gmd->source."',".$this->db->quote($gmd->data).")";
- $this->db->exec($sql);
- }
- $sql="select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid in (select uuid from geonetworkmetadata)";
- $rs=$this->db->fetchAll($sql);
- foreach($rs as $gmd) {
- $sql="update geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
- $this->db->exec($sql);
- }
- $this->view->msg='成功同步WESTDC元数据到GEONETWORK!';
- } elseif (!empty($uuid) && isset($_POST['gnsubmit'])) {
- //同步单条元数据到geonetwork
- $sql=$this->db->quoteInto("select m.uuid,m.source,x.data,g.id from metadata m left join xml x on m.id=x.id left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=?",$uuid);
- if ($gmd=$this->db->fetchRow($sql)) {
- if (!empty($gmd->id)) {
- $sql="update geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
- } else {
- $sql="insert into geonetworkmetadata (uuid,source,data) values('".$gmd->uuid."','".$gmd->source."',".$this->db->quote($gmd->data).")";
- }
- $this->db->exec($sql);
- $this->view->msg='成功同步元数据:'.$uuid;
- } else $this->view->msg='不存在此元数据:'.$uuid;
- } elseif (!empty($uuid) && isset($_POST['watersubmit'])) {
- //同步单条元数据
- $sql=$this->db->quoteInto("select data,source from watergn where uuid=?",$uuid);
- if ($rs=$this->db->fetchRow($sql)) {
- $this->import($rs->data);
- $this->db->query("update metadata set source=? where uuid=?",array($rs->source,$uuid));
- $this->view->msg='成功同步元数据:'.$uuid;
- } else $this->view->msg='不存在此元数据:'.$uuid;
- } elseif ($list=='westdc') {
- $sql="select uuid,title from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
- $this->view->metadata=$this->db->query($sql);
- } elseif ($list=='geonetwork') {
- $sql="select id,uuid,(regexp_matches(data,'(.*) '))[1] as title from geonetworkmetadata
- where uuid not in (select uuid from metadata)";
- $this->view->metadata=$this->db->query($sql);
- } elseif ($delete=='westdc') {
- $sql="delete from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
- $this->db->query($sql);
- $this->view->msg='已删除WESTDC中多出的元数据!';
- } elseif ($delete=='geonetwork') {
- //dblink view中删除多条有问题,暂时用单条删除替代
- //$sql="delete from geonetworkmetadata where uuid not in (select uuid from metadata)";
- $sql="select uuid from geonetworkmetadata where uuid not in (select uuid from metadata)";
- $rows=$this->db->fetchAll($sql);
- foreach($rows as $row)
- {
- $this->db->exec($this->db->quoteInto("delete from geonetworkmetadata where uuid=?",$row->uuid));
- }
- $this->view->msg='已删除GEONETWORK中多出的元数据!';
- } elseif ($delete=='water') {
- $sql="delete from metadata where uuid not in (select uuid from watergn where schemaid='iso19115') and uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
- $this->db->query($sql);
- $this->view->msg='已删除WESTDC中多出的元数据!';
- } elseif ($thumb=='geonetwork') {
- $sql="select g.id as gid,m.uuid,t.* from thumbnail t left join metadata m on t.id=m.id left join geonetworkmetadata g on m.uuid=g.uuid where t.filetype is not null and t.filename is not null";
- $rows=$this->db->fetchAll($sql);
- foreach($rows as $row) {
- $data=file_get_contents($this->view->config->geonetwork->url.'srv/cn/resources.get?access=public&id='.$row->gid.'&fname='.urlencode($row->filename));
- $sql="update thumbnail set data=? where id=?";
- $this->db->query($sql,array(base64_encode($data),$row->id));
- }
- $this->view->msg='已成功同步缩略图!';
- } elseif ($thumb=='water') {
- $sql="select g.id as gid,m.uuid,t.* from watergn g left join metadata m on m.uuid=g.uuid left join thumbnail t on t.id=m.id where t.filetype is not null and t.filename is not null";
- $rows=$this->db->fetchAll($sql);
- foreach($rows as $row) {
- $data=file_get_contents($this->view->config->watergeonetwork->url.'srv/cn/resources.get?access=public&id='.$row->gid.'&fname='.urlencode($row->filename));
- $sql="update thumbnail set data=? where id=?";
- $this->db->query($sql,array(base64_encode($data),$row->id));
- }
- $this->view->msg='已成功同步缩略图!';
- } elseif ($adminuser=='geonetwork') {
- $sql="select id,username,password,email from users";
- $rows=$this->db->fetchAll($sql);
- foreach($rows as $row) {
- $sql="select * from geonetworkusers where id=?";
- $r=$this->db->fetchRow($sql,array($row->id));
- if ($r) {
- $sql="update geonetworkusers set username='$row->username',password=encode(digest(md5('$row->password'),'sha1'),'hex'),email='$row->email' where id=$row->id";
- $this->db->query($sql);
- } else {
- $sql="insert into geonetworkusers (id,username,password,email) values($row->id,'$row->username',encode(digest(md5('$row->password'),'sha1'),'hex'),'$row->email')";
- $this->db->query($sql);
- }
- }
- $this->view->msg='已成功同步帐号!';
- } elseif (!empty($uuid) && (isset($_POST['submit']) || (!isset($_POST['gnsubmit']) && !isset($_POST['watersubmit'])))) {
- //同步单条元数据
- $sql=$this->db->quoteInto("select data,source from geonetworkmetadata where uuid=?",$uuid);
- if ($rs=$this->db->fetchRow($sql)) {
- $this->import($rs->data);
- $this->db->exec($this->db->quoteInto("update metadata set source=? where uuid='$uuid'",$rs->source));
- $userid = Zend_Auth::getInstance()->getIdentity()->id;
- $this->db->query("insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
- from geonetworkmetadata gn where uuid not in (select uuid from mdstatus) and uuid=?",array($userid,$uuid));
- $this->view->msg='成功同步元数据:'.$uuid;
- //update search document
- $search=new Search();
- $sql="select * from xunsearch where uuid=?";
- $sth = $this->db->prepare($sql);
- $sth->setFetchMode(Zend_Db::FETCH_ASSOC);
- $sth->execute(array($uuid));
- $data = $sth->fetch();
- $search->update($data);
-
- } else $this->view->msg='不存在此元数据:'.$uuid;
- }
- }
-
- function datasetcdAction()
- {
- $add=(int)$this->_getParam('add');
- $edit=(int)$this->_getParam('edit');
- $delete=(int)$this->_getParam('delete');
- set_time_limit(0);
- if ($add) {
- $form=new DatasetcdForm();
- $form->img->setRequired(true);
- $form->document->setRequired(true);
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $uploadedData = $form->getValues();
- $img = '/'.$form->img->getFileName();
- $document='/'.$form->document->getFileName();
- $sql="insert into datasetcd (title,size,uuid,img,document,descript) values(?,?,?,?,?,?)";
- $this->db->query($sql,array($formdata['title'],$formdata['size'],$formdata['uuid'],$img,$document,$formdata['descript']));
- $this->messenger->addMessage('提示信息:您已经成功添加该特色数据集。');
- $this->_redirect('/admin/data/datasetcd');
- } else {
- $form->populate($formdata);
- }
- }
- $this->view->form=$form;
- $this->_helper->viewRenderer('datasetcdadd');
- } elseif ($edit){
- $form=new DatasetcdForm();
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $uploadedData = $form->getValues();
- $img = '/'.$form->img->getFileName();
- $document='/'.$form->document->getFileName();
- $sql="update datasetcd set title=?,size=?,uuid=?,";
- if ($form->img->isUploaded()) $sql.="img=?,";
- if ($form->document->isUploaded()) $sql.="document=?,";
- $sql.="descript=? where id=?";
- $param=array($formdata['title'],$formdata['size'],$formdata['uuid']);
- if ($form->img->isUploaded()) $param[]=$img;
- if ($form->document->isUploaded()) $param[]=$document;
- $param[]=$formdata['descript'];
- $param[]=$edit;
- $this->db->query($sql,$param);
- $this->messenger->addMessage('提示信息:您已经编辑添加该特色数据集。');
- $this->_redirect('/admin/data/datasetcd');
- } else {
- $form->populate($formdata);
- }
- } else {
- $sql="select * from datasetcd where id=?";
- $formdata=$this->db->fetchRow($sql,array($edit));
- $form->populate($formdata);
- }
- $this->view->form=$form;
- $this->_helper->viewRenderer('datasetcdadd');
-
- } elseif ($delete) {
- $sql="delete from datasetcd where id=?";
- try {
- $this->db->query($sql,array($delete));
- $this->messenger->addMessage('提示信息:您已经成功删除该特色数据集。');
- } catch (Exception $e) {
- $this->messenger->addMessage($e->getMessage());
- }
- $this->_redirect("/admin/data/datasetcd");
- }
- $select=$this->db->select();
- $select->from('datasetcd')->order('id desc');
- $paginator = Zend_Paginator::factory($select);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage($this->view->config->page->max);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
- }
-
- /*
- *
- * mdAction()
- * 元数据管理
- *
- */
- function mdAction()
- {
- $delete=$this->_getParam('delete');
- $down=(int)$this->_getParam('down');
- $search = $this->_getParam('search');
- $keyword = $this->_getParam('keyword');
- $att=$this->_getParam('att');
- $attupdate = $this->_getParam('attupdate');
-
-
- if ($delete)
- {
- $sql="delete from metadata where uuid=?";
- try {
- $this->db->query("delete from mdstatus where uuid=?",array($delete));
- $this->db->query("delete from mdauthor where uuid=?",array($delete));
- $this->db->query($sql,array($delete));
- $this->messenger->addMessage('提示信息:您已经成功删除该数据。');
- $search=new Search();
- $search->del($delete,'uuid');
- } catch (Exception $e) {
- $this->messenger->addMessage($e->getMessage());
- }
- $this->_redirect("/admin/data/md");
- }//删除
-
- elseif($att>0){
- $submit=$this->_request->getParam('submit');
- $uuid=$this->_request->getParam('uuid');
- $atts=$this->_request->getParam('ids');
- $addatts=$this->_request->getParam('addatts');
-
- $this->view->id = $att;
- $this->view->uuid = $uuid;
-
- if(!empty($addatts))
- {
-
- if(empty($submit))
- {
- $sql = "select title from metadata where uuid='$uuid'";
- $re = $this->db->query($sql);
- $rows = $re->fetch();
-
-
- $this->view->id = $att;
- $this->view->uuid = $uuid;
- $this->view->mdtitle = $rows['title'];
- $this->view->thisatt = $rows;
-
- $this->_redirect("/admin/data/attachments/uuid/$uuid/mdtitle/{$rows['title']}");
- }
- else
- {
- if(!empty($uuid))
- {
- foreach($atts as $v)
- {
- $sql = "insert into mdattach (uuid,id) values ('$uuid','$v')";
- try{
- $this->db->exec($sql);
- $this->messenger->addMessage('成功添加附件:'.$v);
- }catch (Exception $e)
- {
- $this->messenger->addMessage('添加附件失败:'.$v);
- }
- }
- $this->_redirect("/admin/data/md/att/1/uuid/$uuid");
- }
- }
- }//empty($addatts)
- else
- {
- if(!empty($uuid))
- {
-
- $sql = "select m.*,a.*,d.title from mdattach m
- left join attachments a on m.id = a.id
- left join metadata d on m.uuid=d.uuid where m.uuid='$uuid'";
- $re = $this->db->query($sql);
-
- $rows = $re->fetchAll();
-
- $sql = "select title from metadata where uuid='$uuid'";
- $re = $this->db->query($sql);
- $title = $re->fetch();
-
- $this->view->atts=$rows;
- $this->view->mdtitle = $title['title'];
-
- $this->_helper->viewRenderer('attmanager');
- }
-
-
- }
-
- }//编辑附件
-
- /*
- * 输出打包下载的xml文件
- *
- * 文件量大时可能出现超时,需要修改超时时间为无限
- */
- elseif ($down) {
-
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- //临时zip文件名
- $tmpname="dataxml";
-
- //xml文件存放的缓存目录
- $dirName = '../data/import/';
-
- //查询需要创建的文件
- $sql = "SELECT md.title,md.uuid,x.* from xml x
- LEFT JOIN normalmetadata md ON md.id=x.id";
-
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll(); //将结果储存,但不使用
-
- //创建zip文件,创建成功后再使用查询结果
- $zip = new ZipArchive();
- $url = tempnam($this->config->temp->path,$tmpname);//创建临时文件
-
- if( $zip->open($url, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true )
- {
- throw new Exception("cannot open {$url} for writing.");
- }
-
- foreach($rows as $k=>$v)
- {
-
- $filename = $dirName.$v['uuid'].'.xml';
-
- //创建xml文件
- $handle = fopen($filename,"w");
- fwrite($handle,$v['data']);
- fclose($handle);
-
- //添加到zip文件
- //zip localname 直接使用UUID作为文件名
- $zip->addFile($filename,$v['uuid'].".xml");
-
- }
- $zip->close();
-
- //zip文件创建完成后删除服务器上的缓存文件,防止发生冗余
- foreach($rows as $k=>$v)
- {
- $filename = $dirName.$v['uuid'].'.xml';
- unlink($filename);
- }
-
- //输出下载
- $content=file_get_contents($url);
- $this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
- ->setHeader('Content-Disposition','attachment; filename="dataxml.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);
- }//down
- else if($search){
-
- if(!empty($keyword))
- {
- $sql = "select m.*,md.viewed,g.id as gid, ds.id as datasetid from metadata m
- left join mdstat md on m.uuid=md.uuid
- left join geonetworkmetadata g on g.uuid=m.uuid
- left join dataset ds on m.uuid=ds.uuid
- where m.title like '%$keyword%'
- order by m.id desc
- ";
-
- $re=$this->db->query($sql);
- $row=$re->fetchAll();
- $paginator = Zend_Paginator::factory($row);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage($this->view->config->page->max);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- $this->messenger->addMessage($keyword.' 的搜索结果');
- }
- else
- {
- $this->messenger->addMessage('请输入搜索关键字');
- $this->_redirect("/admin/data/md");
- }
-
- }//search
- else{
-
- $sql = "SELECT md.*,s.viewed,g.id as gid,st.status as mdstatus,ds.id as datasetid FROM metadata md
- LEFT JOIN mdstat s ON md.uuid=s.uuid
- LEFT JOIN geonetworkmetadata g ON g.uuid=md.uuid
- LEFT JOIN mdstatus st ON md.uuid=st.uuid
- LEFT JOIN dataset ds ON md.uuid=ds.uuid
- ORDER BY md.id DESC";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage($this->view->config->page->max);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
- }
-
- }//mdAction 元数据管理
-
- /*
- * datasetAction()
- * 数据路径:即数据的物理主目录
- *
- */
- function datasetAction()
- {
-
- $ac = $this->_request->getParam('ac');
-
- if($ac == "getdataset")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer('md-dataset');
-
- $uuid = $this->_request->getParam('uuid');
- $sql = "SELECT * FROM dataset WHERE uuid=?";
- $sth = $this->db->prepare($sql);
- $sth ->execute(array($uuid));
- $row = $sth->fetch();
-
- $this->view->dataset = $row;
- $this->view->uuid = $uuid;
- }
-
- else if($ac == "update")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $uuid = $this->_request->getParam('uuid');
- $host = $this->_getParam('host');
- $path = $this->_getParam('path');
-
- $sql = "UPDATE dataset SET host=?,path=? WHERE uuid=?";
- $sth = $this->db->prepare($sql);
- $ds = $sth ->execute(array($host,$path,$uuid));
- if ($host=='ftp1.westgis.ac.cn')
- {
- file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
- } else if ($host=='ftp.sanjiangyuan.org.cn')
- {
- file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
- }
-
- if($ds)
- {
- $data = array("ok"=>1);
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
- }
- }
-
- else if($ac == "add")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $uuid = $this->_request->getParam('uuid');
- $host = $this->_getParam('host');
- $path = $this->_getParam('path');
-
- $sql = "SELECT * FROM dataset WHERE uuid=?";
- $sth = $this->db->prepare($sql);
- $sth ->execute(array($uuid));
- $row = $sth->fetch();
- if(!empty($row['id']))
- {
- $data = array("error"=>"该数据已经有存档信息,不能重复添加");
- $this->jsonexit($data);
- return true;
- }
-
- $sql = "INSERT INTO dataset (uuid,host,path) VALUES (?,?,?)";
- $sth = $this->db->prepare($sql);
- $ds = $sth ->execute(array($uuid,$host,$path));
- if ($host=='ftp1.westgis.ac.cn')
- {
- file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
- } else if ($host=='ftp.sanjiangyuan.org.cn')
- {
- file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
- }
-
- if($ds)
- {
- $data = array("ok"=>1);
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
- }
- }
- else if ($ac=="import")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $uuid = $this->_request->getParam('uuid');
- $sql = "SELECT * FROM dataset WHERE uuid=?";
- $sth = $this->db->prepare($sql);
- $sth ->execute(array($uuid));
- $row = $sth->fetch();
-
- if ($row['host']=='ftp1.westgis.ac.cn')
- {
- file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
- echo '数据目录成功导入! ';
- } else if ($row['host']=='ftp.sanjiangyuan.org.cn')
- {
- file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
- echo '数据目录成功导入! ';
- } else {
- echo '数据目录未导入! ';
- }
- }
-
- }//datasetAction存档管理
-
- /*
- * commentAction()
- * 反馈管理
- * ALTER TABLE comments ADD COLUMN reply integer NOT NULL DEFAULT 0;
- */
- function commentAction()
- {
- $delete=(int)$this->_getParam('delete');
- $uuid = $this->_getParam('uuid');
- $reply = $this->_getParam('reply');
- $replylist = $this->_getParam('replylist');
- $delreply = $this->_getParam('delreply');
-
- if ($delete)
- {
- $sql="delete from comments where id=?";
- try {
- $this->db->query($sql,array($delete));
- $this->messenger->addMessage('提示信息:您已经成功删除该评论。');
- } catch (Exception $e) {
- $this->messenger->addMessage($e->getMessage());
- }
- $this->_redirect("/admin/data/comment");
- }
-
- if($reply)
- {
-
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $body = $this->_getParam('content');
- if(empty($body))
- {
- $data = array('error'=>"请输入回复内容");
- $this->jsonexit($data);
- return true;
- }
-
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $uid = $user->id;
- $email = $user->email;
- }
-
- $ipaddr = $_SERVER['REMOTE_ADDR'];
-
- $sql = "INSERT INTO comments (uuid,author,reply,userid,content,email,ip) VALUES (?,?,?,?,?,?,?)";
- $sth = $this->db->prepare($sql);
- $rs = $sth->execute(array($uuid,$user->username,$reply,$uid,$body,$email,$ipaddr));
-
- if($rs)
- {
- $sql="select c.author,c.email,c.uuid from comments c where c.id=?";
- $sth=$this->db->prepare($sql);
- $sth->execute(array($reply));
- $row=$sth->fetch();
-
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"comment-admin-reply",array(
- 'user' => $row['author'],
- 'uuid' => $row['uuid'],
- 'email'=> $row['email']
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- $mail->addTo($row['email']);
- $mail->addCc($this->view->config->service->email);
- @$mail->send();
-
- $data = array('status'=>1,'msg'=>'回复成功!');
- $this->jsonexit($data);
- return true;
- }else{
- $data = array('error'=>"回复失败,请重试");
- $this->jsonexit($data);
- return true;
- }
- return true;
- }
-
- if($uuid)
- {
- $sql = "SELECT c.*,md.title,md.uuid FROM comments c
- LEFT JOIN metadata md ON md.uuid=c.uuid
- WHERE c.uuid=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($uuid));
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage($this->view->config->page->max);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
-
- $sql = "SELECT title FROM metadata WHERE uuid=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($uuid));
- $row = $sth->fetch();
-
- $this->view->title = $row['title'];
-
- return true;
- }
-
- if($replylist)
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $sql = "SELECT cr.id,cr.content as body,cr.reply,u.username,cr.ts_created FROM comments cr
- LEFT JOIN users u ON cr.userid=u.id WHERE cr.reply=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($replylist));
- $rows = $sth->fetchAll();
-
- $this->jsonexit($rows);
- return true;
-
- }
-
- if($delreply)
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $sql = "DELETE FROM comments WHERE id=?";
- $sth = $this->db->prepare($sql);
- $rs = $sth->execute(array($delreply));
-
- if($rs)
- {
- $this->jsonexit(
- array('deleted'=>1)
- );
- return true;
- }else{
- $this->jsonexit(
- array('error'=> '处理中出现错误,请重新尝试')
- );
- return true;
- }
-
-
- }
-
-
- $sql = "SELECT cm.*,md.title,(SELECT count(id) as counts FROM comments cms WHERE cms.reply=cm.id AND cms.reply!=0) as reply_count FROM comments cm
- LEFT JOIN metadata md ON md.uuid=cm.uuid
- WHERE cm.reply=0
- ORDER BY cm.ts_created DESC,cm.id DESC";
-
- $sth = $this->db->query($sql);
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage($this->view->config->page->max);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
-
- }//comment
-
-
- function newsletterAction()
- {
- $form=new Zend_Form();
- $form->setName('newsletter');
- $form->setAttrib('enctype', 'multipart/form-data');
- $nlf=new Zend_Form_Element_File('nlf');
- $nlf->setLabel('数据通讯')
- ->setRequired(true)
- ->setDestination($this->view->config->paths->newsletter)
- ->addValidator('Count', false, 1) // ensure only 1 file
- ->addValidator('Size', false, 2048000) // limit to 2M
- ->addValidator('Extension', false, 'pdf'); // only JPEG, PNG, and GIFs
- $submit = new Zend_Form_Element_Submit('submit');
- $form->addElements(array($nlf,$submit));
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $uploadedData = $form->getValues();
- //自动生成JPG文件
- $pdf = $form->nlf->getFileName();
- $img = new Imagick($pdf.'[0]');
- $img->thumbnailImage(200, 0);
- $img->writeImage($this->view->config->paths->newsletter.basename($pdf,'.pdf').'.jpg');
- $this->messenger->addMessage('提示信息:您已经成功添加该数据通讯。');
- $this->_redirect('/admin/data/newsletter');
- }
- }
- $l=new mydir($this->view->config->paths->newsletter,"newsletter_*.pdf");
- $this->view->newsletters=$l->toArray();
- $this->view->addHelperPath('helper','Zend_View_Helper_');
- rsort($this->view->newsletters);
- $this->view->form=$form;
- }
- function featureAction()
- {
- $add=(int)$this->_getParam('add');
- $edit=(int)$this->_getParam('edit');
- $delete=(int)$this->_getParam('delete');
- if ($add) {
- $form=new DatafeatureForm();
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $uploadedData = $form->getValues();
- if (!$form->imgurl) {
- $imgurl = '/'.$form->img->getFileName();
- } else
- $imgurl=$formdata['imgurl'];
- $sql="insert into datafeature (title,detailurl,imgurl,description) values(?,?,?,?)";
- $this->db->query($sql,array($formdata['title'],$formdata['detailurl'],$imgurl,$formdata['description']));
- $this->messenger->addMessage('提示信息:您已经成功添加该特色推荐。');
- $this->_redirect('/admin/data/feature');
- } else {
- $form->populate($formdata);
- }
- }
- $this->view->form=$form;
- $this->_helper->viewRenderer('featureadd');
- } elseif ($edit){
- $form=new DatafeatureForm();
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $uploadedData = $form->getValues();
- if (!$form->imgurl) {
- $imgurl = '/'.$form->img->getFileName();
- } else
- $imgurl=$form->imgurl;
- $sql="update datafeature set title=?,detailurl=?,imgurl=?,description=? where id=?";
- $param=array($formdata['title'],$formdata['detailurl'],$formdata['imgurl'],$formdata['description'],$edit);
- $this->db->query($sql,$param);
- $this->messenger->addMessage('提示信息:您已经编辑该特色推荐。');
- $this->_redirect('/admin/data/feature');
- } else {
- $form->populate($formdata);
- }
- } else {
- $sql="select * from datafeature where id=?";
- $formdata=$this->db->fetchRow($sql,array($edit));
- $form->populate($formdata);
- }
- $this->view->form=$form;
- $this->_helper->viewRenderer('featureadd');
- } elseif ($delete) {
- $sql="delete from datafeature where id=?";
- try {
- $this->db->query($sql,array($delete));
- $this->messenger->addMessage('提示信息:您已经成功删除该特色推荐。');
- } catch (Exception $e) {
- $this->messenger->addMessage($e->getMessage());
- }
- $this->_redirect("/admin/data/feature");
- }
- $select=$this->db->select();
- $select->from('datafeature')->order('id desc');
- $paginator = Zend_Paginator::factory($select);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage($this->view->config->page->max);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
- }
- /*
- * 数据文献管理
- */
- function referenceAction()
- {
- $add=(int)$this->_getParam('add');
- $edit=(int)$this->_getParam('edit');
- $delete=(int)$this->_getParam('delete');
- $uuid=$this->_getParam('uuid');
- $search=$this->_getParam('search');
- $keyword=$this->_getParam('keyword');
- $import=(int)$this->_getParam('import');
- $show = $this->_getParam('show');
-
- if ($add) {
- $type = $this->_getParam('type');
- if($type == 'dc')
- {
- $this->_helper->viewRenderer('referenceadd');
- $this->view->type = "dc";
- }else{
- $form=new ReferenceForm();
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $sql="select id from reference where reference=?";
- $row=$this->db->fetchRow($sql,array(trim($formdata['reference'])));
- if (!$row)
- {
- $sql="insert into reference (reference,link) values(?,?)";
- $this->db->query($sql,array(trim($formdata['reference']),trim($formdata['link'])));
- $sql="select id from reference where reference=?";
- $row=$this->db->fetchRow($sql,array(trim($formdata['reference'])));
- }
- $sql="insert into mdref (uuid,refid,reftype) values(?,?,?)";
- $this->db->query($sql,array(trim($formdata['uuid']),$row['id'],$formdata['reftype']));
- $this->messenger->addMessage('提示信息:您已经成功添加该数据文献。');
- $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
- }else {
- $form->populate($formdata);
- }
- } else {
- if ($uuid)
- {
- $formdata['uuid']=$uuid;
- $form->populate($formdata);
- }
- }
- $this->view->form=$form;
- $this->_helper->viewRenderer('referenceadd');
- }
- } //添加
-
- else if($show){
- $sql = "select mr.id as mdid,mr.refid,r.reference,md.title,md.uuid,mr.place FROM mdref mr
- left join metadata md on md.uuid=mr.uuid
- left join reference r on r.id=mr.refid
- where mr.uuid='$show';
- ";
- $rs = $this->db->query($sql);
- $rows = $rs->fetchAll();
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
-
- } //按UUID查看
-
- elseif ($edit){
- $form=new ReferenceForm();
- if ($this->_request->isPost()) {
- $formdata=$this->_request->getPost();
- if ($form->isValid($formdata)) {
- $sql="select id from reference where reference=? order by id desc";
- $rs=$this->db->query($sql,array($formdata['reference']));
- $row = $rs->fetch();
- if ($row['id']!='')
- {
- //更新文献信息
- $sql="update mdref set refid=?,reftype=? where uuid=? and id=?";
- $td = $this->db->query($sql,array($row['id'],$formdata['reftype'],$formdata['uuid'],$edit));
- $sql="update reference set reference=?,link=? where id=?";
- $this->db->query($sql,array($formdata['reference'],$formdata['link'],$row['id']));
- if($td)
- {
- $this->messenger->addMessage('提示信息:您已经编辑该数据文献。');
- $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
- }
- }else
- {
- $sql = "INSERT INTO reference (reference,link) VALUES ('".$formdata['reference']."','".$formdata['link']."') RETURNING id";
- $sth = $this->db->prepare($sql);
- if($sth->execute())
- {
- $row = $sth->fetch(PDO::FETCH_ASSOC);
- $sql="update mdref set refid=?,reftype=? where uuid=? and id=?";
- $td = $this->db->query($sql,array($row['id'],$formdata['reftype'],$formdata['uuid'],$edit));
- $this->messenger->addMessage('提示信息:您已经编辑该数据文献。');
- $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
- }else
- {
- $this->messenger->addMessage('提示信息:文献创建失败,请重试');
- $this->_redirect('/admin/data/reference/edit/'.$edit);
- }
- }
- } else {
- $form->populate($formdata);
- }
- } else {
- $sql="select m.uuid,r.reference,r.link,m.reftype from reference r left join mdref m on r.id=m.refid where m.id=?";
- $formdata=$this->db->fetchRow($sql,array($edit));
- $form->populate($formdata);
- }
- $this->view->form=$form;
- $this->_helper->viewRenderer('referenceadd');
- } //编辑相关文献
-
- elseif ($delete) {
- $sql = "select uuid from mdref where id=$delete";
- $rs = $this->db->query($sql);
- $row = $rs->fetch();
- $sql="delete from mdref where id=?";
- try {
- $this->db->query($sql,array($delete));
- $this->messenger->addMessage('提示信息:您已经成功删除该数据文献。');
- } catch (Exception $e) {
- $this->messenger->addMessage($e->getMessage());
- }
- $this->_redirect('/admin/data/reference/show/'.$row['uuid']);
- } //删除相关文献
-
- elseif ($import) {
- if ($this->_request->isPost()) {
- if ($_FILES["ref"]["error"] == UPLOAD_ERR_OK) {
- $tmp_name = $_FILES["ref"]["tmp_name"];
- $fp = fopen($tmp_name, "rb");
- $ref=fread($fp, filesize($tmp_name));
- fclose($fp);
- $lines=explode("\n",$ref);
- foreach($lines as $line)
- {
- $data=explode(";",$line);
- if (count($data)==2)
- $link='';
- else
- $link=$data[2];
- $link=$this->db->quote($link);
- $sql="insert into reference (reference,link) values(?,".$link.")";
- try {
- $this->db->exec($this->db->quoteInto($sql,trim($data[1])));
- } catch (Exception $e) {}
- $sql="select id from reference where reference=?";
- $row=$this->db->fetchRow($this->db->quoteInto($sql,trim($data[1])));
- $sql="insert into mdref (uuid,refid) values(?,".$row['id'].")";
- try {
- $this->db->exec($this->db->quoteInto($sql,trim($data[0])));
- } catch (Exception $e) {}
- }
- }//end if
- }
- $this->_helper->viewRenderer('referenceimport');
- } //引用
-
- else if($search){
- if(!empty($keyword))
- {
- $sql="select rf.id as mdid,rf.refid,m.*,r.* from mdref rf
- left join metadata m on m.uuid=rf.uuid
- left join reference r on r.id=rf.refid
- where m.title like '%$keyword%'
- order by m.title";
-
- $re=$this->db->query($sql);
- $row=$re->fetchAll();
- $paginator = Zend_Paginator::factory($row);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- $this->messenger->addMessage($keyword.' 的搜索结果');
- }
- else
- {
- $this->messenger->addMessage('请输入搜索关键字');
- $this->_redirect("/admin/data/reference");
- }
- } //搜索
-
- else{
- $sql="select m.title as mdtitle,m.uuid,mr.id as mdid,mr.refid,mr.place,r.reference
- from mdref mr right join metadata m on mr.uuid=m.uuid
- left join reference r on mr.refid=r.id
- order by m.ts_created desc,mr.place";
- $re=$this->db->query($sql);
- $row=$re->fetchAll();
- $paginator = Zend_Paginator::factory($row);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
-
- }//列表
- }
-
- //文献管理
- public function refAction()
- {
- $this->view->ac = $ac = $this->_getParam('ac');
- $submit = $this->_getParam('submit');
- $keyword = $this->view->q = trim($this->_getParam('q'));
- $order = $this->view->search_order = trim($this->_getParam('order'));
- $sort = $this->view->search_sort = trim($this->_getParam('sort'));
- $field = $this->view->search_field = $this->_getParam('field');
-
- $reference = new Reference();
-
- if(!empty($keyword))
- {
- $reference->keyword = $keyword;
- }
-
- if(!empty($field))
- {
- $reference->field = $field;
- }
-
- if(!empty($order))
- {
- $reference->order = $order;
- }
-
- if(!empty($sort))
- {
- $reference->sort = $sort;
- }
-
- $this->view->reference = $reference;
- $this->view->page = $this->_getParam('page');
- $this->view->pagelimit = 12;
-
- //文献首页
- if(empty($ac))
- {
- $this->view->referenceType = $reference->referenceType();
- view::addPaginator($reference->fetchReferences(),$this, $this->view->pagelimit);
- $this->view->years = $reference->countByYear();
- return true;
- }
- else if ($ac == "water")
- {
- $this->view->referenceType = $reference->referenceType();
- view::addPaginator($reference->fetchThemeReferences('water'),$this,$this->view->pagelimit);
- return true;
- }
- else if ($ac == "westdc")
- {
- $this->view->referenceType = $reference->referenceType();
- view::addPaginator($reference->fetchWestdcReferences(),$this,$this->view->pagelimit);
- return true;
- }
- else if ($ac == "todo")
- {
- $this->view->referenceType = $reference->referenceType();
- view::addPaginator($reference->fetchTodoReferences(),$this,$this->view->pagelimit);
- return true;
- }
-
- unset($this->view->reference);
- unset($this->view->page);
- unset($this->view->pagelimit);
-
- //添加
- if($ac == "add")
- {
- $this->_helper->viewRenderer('ref-add');
- $id = $this->_getParam('id');
- $attid = $this->_getParam('attid');
-
- if(!empty($submit))
- {
- $this->view->data = $reference->getReferenceParam();
- $attid = $this->view->data['attid'];
-
- if(empty($id) || !is_numeric($id))
- {
- $status = $reference->reference();
- }else{
- $status = $reference->reference($id);
- }
-
- if($status !== true)
- {
- $this->view->error = view::Error($status);
- }else{
- if(!empty($id))
- {
- $msg = "文献修改成功!";
- view::Post($this,$msg,-2);
- return true;
- }else{
- $msg = "文献添加成功!";
- view::Post($this,$msg,"/admin/data/ref/ac/add");
- return true;
- }
- }
- }else{
- $this->view->data = array();
- if(!empty($id) && is_numeric($id))
- {
- $this->view->data = $reference->getOneReferenceData($id);
- }
- }
-
- if(!empty($attid))
- {
- $files = new Files();
- $attfile = $files->getOne($attid);
- $this->view->data['attid'] = $attid;
- $this->view->data['file'] = $attfile;
- }
-
- return true;
- }
-
- //上传pdf
- if($ac == "pdfupload")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
- $autoread = false;
- if($this->_getParam('multi'))
- {
- $autoread = true;
- }
- $statu = $reference->uploadReferencePdf($_FILES['Filedata'],$autoread);
- $this->jsonexit($statu);
- return true;
- }
-
- //删除已上传的文件
- if($ac == "delete")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
- $statu = $reference->deleteReferenceAttchment($this->_getParam('attid'));
- $this->jsonexit($statu);
- return true;
- }
-
- //批量上传
- if($ac == "multiupload")
- {
- $this->_helper->viewRenderer('ref-multiupload');
- return true;
- }
-
- //文件管理
- if($ac == "files")
- {
- $this->_helper->viewRenderer('ref-files');
- view::addPaginator($reference->getReferenceFiles(),$this,10);
- return true;
- }
-
- //删除文献
- if($ac == "deleteref")
- {
- $refid = $this->_getParam('id');
- if($reference->deleteReference($refid))
- {
- view::Post($this,"删除成功!",-1);
- }else{
- view::Post($this,"删除失败!",-1);
- }
- return true;
- }
-
- //相关数据
- if($ac == "data")
- {
- $refid = $this->view->refid = $this->_getParam('id');
- if(view::isXmlHttpRequest($this)){
- $this->jsonexit($reference->getDataByReference($refid));
- return true;
- }else{
- $this->_helper->viewRenderer('ref-metadatas');
- $this->view->referenceType = $reference->referenceType();
- view::addPaginator($reference->getDataByReference($refid),$this,10);
- return true;
- }
- }
-
- //添加数据文献
- if($ac == "mdref" && view::isXmlHttpRequest($this))
- {
- $mdrefid = $this->_getParam('id');
- $status = $reference->makeMdref($mdrefid);
- if($status !== true)
- {
- $this->jsonexit(array('error'=>$status));
- }else{
- $this->jsonexit(array('success' => 1));
- }
- return true;
- }
-
- //移除数据文献
- if($ac == "delmdref")
- {
- $mdrefid = $this->_getParam('id');
- $status = $reference->delMdref($mdrefid);
- if($status === true)
- {
- view::Post($this,"移除成功",-1);
- }else{
- view::Post($this,$status,-1);
- }
- return true;
- }
-
- //ris
- if($ac == "ris")
- {
- $this->_helper->viewRenderer('ref-ris');
- $submit = $this->_getParam('submit');
-
- if(!empty($submit))
- {
- $ris = new \Reference\Ris();
- $this->view->data = $ris->loadout();
- try{
- $ris->pushToDataTable($this->view->data);
- }catch(Exception $e)
- {
- view::Dump($e->getMessage(),false);
- }
- }
- }
-
- //ris更新单篇
- if($ac == "singleris")
- {
- $this->_helper->viewRenderer('ref-singleris');
- $id = (int)$this->_getParam('id');
- $this->view->ristext = $this->_getParam('ristext');
-
- if($id < 1)
- {
- view::Post($this,"参数错误!",-1);
- return true;
- }
-
- $this->view->referenceData = $reference->getOneReferenceData($id);
-
- if(!empty($submit))
- {
- $ris = new Ris();
- $data = $ris->loadout();
-
- if(count($data) < 1)
- {
- view::Post($this,"输入的RIS信息有误".'查看详细 ',-1);
- return true;
- }
-
- if($ris->updateWithRis($id,$data[0]) === true)
- {
- view::Post($this,"编辑成功!".'查看详细 ',-2);
- return true;
- }else{
- view::Post($this,"编辑失败!".'查看详细 ',-1);
- return true;
- }
- }
-
- return true;
- }//ris单篇更新
-
- //ris导出
- if($ac == "risoutput")
- {
- $this->_helper->viewRenderer('ref-risoutput');
- $this->view->years = $reference->countByYear();
-
- if(!empty($submit))
- {
- $mode = $this->_getParam('mode');
-
- $risOutput = new RisOutput();
- $preData = $risOutput->preRead($mode);
-
- $risData = $risOutput->processArrayDataToRisData($preData);
-
- $risText = $risOutput->output($risData);
-
- echo "";
- echo $risText;
- echo " ";
- }
- }//ris output
-
- if($ac == "ristest")
- {
- $this->_helper->viewRenderer('ref-ris');
- $submit = $this->_getParam('submit');
-
- if(!empty($submit))
- {
- $ris = new \Reference\Ris();
- view::Dump($ris->processRis(NULL,$this->_getParam('ristext')),false);
- }
- }
-
-
- }//文献管理 refAction()
-
- /*
- * 删除元数据,删除前有确认
- */
- function deleteAction()
- {
- if ($this->_request->isPost()) {
- $id = (int)$this->_request->getPost('id');
- $del = $this->_request->getPost('del');
- if ($del == 'Yes' && $id > 0) {
- $md = new MetadataTable();
- $where = 'id = ' . $id;
- $md->delete($where);
- }
- $this->_redirect('/data');
- } else {
- $id = (int)$this->_request->getParam('id');
- if ($id > 0) {
- $mdt = new MetadataTable();
- $this->view->md = $mdt->fetchRow('id='.$id);
- }
- }
- }
-
- /*
- * 导入本地元数据
- */
- function importAction()
- {
- $md=new MetadataTable();
- $thumb=new ThumbnailTable();
- $xmlt=new XmlTable();
- $cgt=new CategoryTable();
- $cgct=new CategoryCodeTable();
- $keyt=new KeywordTable();
- $dst=new DatasetSeriesTable();
- $seriestable=new SeriesTable();
- if ($this->_request->isPost()) {
- foreach ($_FILES["xmlfile"]["error"] as $key => $error) {
- if ($error == UPLOAD_ERR_OK) {
- $tmp_name = $_FILES["xmlfile"]["tmp_name"][$key];
- $name = $_FILES["xmlfile"]["name"][$key];
- $fp = fopen($tmp_name, "rb");
- $xml=fread($fp, filesize($tmp_name));
- fclose($fp);
- $this->import($xml);
- //采用UUID为文件名?
- //move_uploaded_file($tmp_name, "../data/import/$name");
- }//end if
- }//foreach
- $this->_redirect('/data');
- } else {
- //do nothing now.
- }
- }
- /*
- * 批量处理元数据(元数据保存在服务器的一个目录上)
- */
- function batchimportAction()
- {
- if ($this->_request->isPost()) {
- $dir = $this->_request->getPost('directory');
- $subdir = $this->_request->getPost('subdir');
- $l=new mydir($dir,"*.xml");
- $xmlfiles=$l->toArray();
- foreach($xmlfiles as $xmlfile)
- {
- $fp=fopen($dir.'/'.$xmlfile,'rb');
- $xml=fread($fp,filesize($dir.'/'.$xmlfile));
- fclose($fp);
- $this->import($xml);
- }
- $this->_redirect('/data');
- }
- }
- function datafileimportAction()
- {
- if ($this->_request->isPost()) {
- set_time_limit(0);
- $dir = $this->_request->getPost('directory');
- if (file_exists($dir.'/dataset.txt'))
- {
- $fp=fopen($dir.'/dataset.txt','rb');
- $ds=fread($fp,filesize($dir.'/dataset.txt'));
- fclose($fp);
- $ds1=explode("\n",$ds);
- for($i=0;$idb->query($sql);
- //$sql="insert into dataset (path,uuid) values('".$dpath."','".$duuid."')";
- $sql="insert into dataset (path,uuid) values(?,?)";
- $this->db->query($sql,array($dpath,$duuid));
- $sql="select id from dataset where uuid='".$duuid."'";
- $rs=$this->db->fetchRow($sql);
- $dsid=$rs["id"];
- $fp=fopen($dir.'/'.$duuid.'.txt','rb');
- $filep=fread($fp,filesize($dir.'/'.$duuid.'.txt'));
- fclose($fp);
- $filep1=explode("\n",$filep);
- //print $duuid." ";
- //print $dpath." ".count($dpatch)." ";
- for($j=0;$j ";
- //$sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(".$dsid.",'".$this->db->escape($fpath)."',".$fsize.",".$fdir.",".$fdepth.")";
- $sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(?,?,?,?,?)";
- $this->db->query($sql,array($dsid,$fpath,$fsize,$fdir,$fdepth));
- }
- }
- }
- }
- }
- $this->view->msg='已成功处理数据目录信息!';
- }
- }//datafileimportAction
-
-
- function sourceAction()
- {
- $do = $this->_request->getParam('do');
- $uuid = $this->_request->getParam('uuid');
- $id = $this->_request->getParam('id');
- $q = $this->_request->getParam('q');
- $search = $this->_request->getParam('search');
-
- if ($do == 'add') {
-
- $redirect = "/admin/data/source/";
-
- if(!empty($_POST['submit']))
- {
- try{
- $title = $this->_request->getParam('title');
- $uuid = $this->_request->getParam('uuid');
- $code = $this->_request->getParam('code');
- $description = $this->_request->getParam('description');
- $has_pages = $this->_request->getParam('has_pages');
- $has_agreement = $this->_request->getParam('has_agreement');
-
- $data = array(
- 'title' => $title,
- 'uuid' => $uuid,
- 'code' => $code,
- 'description' => $description,
- 'has_pages' => $has_pages,
- 'has_agreement' => $has_agreement
- );
-
- if($this->db->insert('source',$data))
- {
- $this->messenger->addMessage('添加来源信息成功');
- $this->_redirect($redirect);
- }
- }catch(Exception $e){
- $this->messenger->addMessage('添加来源信息失败:'.$e->getMessage());
- $this->_redirect('/admin/data/source/do/add');
- }
-
- }
-
- $this->_helper->viewRenderer('sourceadd');
- }// 添加项目来源
-
- else if($do == 'edit' && !empty($id))
- {
-
- if(!empty($_POST['submit']))
- {
- try{
- $title = $this->_request->getParam('title');
- $uuid = $this->_request->getParam('uuid');
- $code = $this->_request->getParam('code');
- $description = $this->_request->getParam('description');
- $has_pages = $this->_request->getParam('has_pages');
- $has_agreement = $this->_request->getParam('has_agreement');
-
- $sql = "update source set title='$title',uuid='$uuid',code='$code',description='$description',has_pages='$has_pages',has_agreement='$has_agreement' where id='$id'";
-
- if($this->db->exec($sql))
- {
- $this->messenger->addMessage('修改来源信息成功');
- $this->_redirect("/admin/data/source/do/edit/id/$id");
- }
- }catch(Exception $e){
- $this->messenger->addMessage('修改来源信息失败:'.$e->getMessage());
- $this->_redirect("/admin/data/source/do/edit/id/$id");
- }
-
- }
-
- $sql = "select * from source where id='$id'";
- $rs = $this->db->query($sql);
- $row = $rs->fetch();
-
- $this->view->info = $row;
-
- $this->_helper->viewRenderer('sourceadd');
-
- }// 编辑单条信息
-
- else if($do == 'datasource' && !empty($uuid))
- {
- $redirect = "/admin/data/source/do/datasource/uuid/$uuid";
-
- $this->view->uuid = $uuid;
- $sql = "select md.title,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
- left join datasource ds on ds.uuid=md.uuid
- left join source s on s.id=ds.sourceid
- where md.uuid='$uuid'";
- $rs = $this->db->query($sql);
- $row = $rs->fetch();
-
- $this->view->info = $row;
-
- if(!empty($_POST['submit']))
- {
- $sourceid = $this->_request->getParam('sourceid');
- if(empty($sourceid))
- {
- $this->messenger->addMessage('请选择项目来源');
- $this->_redirect($redirect);
- }
-
- $sql="";
- if(empty($row['id']))
- {
- $sql = "insert into datasource (uuid,sourceid) values ('$uuid','$sourceid')";
- }else
- {
- $sql = "update datasource set uuid='$uuid',sourceid='$sourceid' where id='{$row['id']}'";
- }
- try{
- if($this->db->exec($sql))
- {
- $this->messenger->addMessage('修改项目来源成功');
- $this->_redirect($redirect);
- }
- else
- {
- $this->messenger->addMessage('修改项目来源失败');
- $this->_redirect($redirect);
- }
- }catch (Exception $e){
- $this->messenger->addMessage('修改项目来源失败:'.$e->getMessage());
- $this->_redirect($redirect);
- }
-
- }
-
-
- $wheresql = array();
-
- if(!empty($q) && !empty($search))
- {
- $this->view->q = $q;
- $wheresql[] = " title like '%$q%' ";
- }
-
- if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
- else $wheresql='';
-
- if($wheresql!='')
- {
- $wheresql = 'where '.$wheresql;
- }
-
- $sql = "select * from source $wheresql order by id desc";
- $rs = $this->db->query($sql);
- $rows = $rs->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
-
- $this->_helper->viewRenderer('sourceselect');
- }// 为元数据选择项目来源
-
- else if($do == 'del' && !empty($id))
- {
- $redirect = "/admin/data/source/";
- $sql = "delete from source where id='$id'";
- try{
- if($this->db->exec($sql))
- {
- $this->messenger->addMessage('删除成功');
- $this->_redirect($redirect);
- }else{
- $this->messenger->addMessage('删除失败,可能该数据已不存在');
- $this->_redirect($redirect);
- }
- }catch (Exception $e){
- $this->messenger->addMessage('删除失败:'.$e->getMessage());
- $this->_redirect($redirect);
- }
- }// 删除项目来源
-
- else if($do == 'fetch' && !empty($id))
- {
-
- $wheresql = array();
-
- $wheresql[] = " ds.sourceid='$id' ";
-
- if(!empty($q) && !empty($search))
- {
- $this->view->q = $q;
- $wheresql[] = " title like '%$q%' ";
- }
-
- if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
- else $wheresql='';
-
- if($wheresql!='')
- {
- $wheresql = 'where '.$wheresql;
- }
-
- $sql = "select md.title,md.uuid,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
- left join datasource ds on ds.uuid=md.uuid
- left join source s on s.id=ds.sourceid
- $wheresql
- order by id desc";
- $rs = $this->db->query($sql);
- $rows = $rs->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
-
- $this->_helper->viewRenderer('sourcefetchone');
-
- }//查看某项目来源中的所有元数据
-
- else if($do == 'delsource' && !empty($id))
- {
- $redirect = "/admin/data/source/do/datasource/uuid/$uuid";
-
- $sql = "delete from datasource where id='$id'";
-
- try{
- if($this->db->exec($sql))
- {
- $this->messenger->addMessage('删除成功');
- $this->_redirect($redirect);
- }else{
- $this->messenger->addMessage('删除失败,可能该数据已不存在');
- $this->_redirect($redirect);
- }
- }catch (Exception $e){
- $this->messenger->addMessage('删除失败:'.$e->getMessage());
- $this->_redirect($redirect);
- }
-
-
- }// 清除元数据来源记录
- elseif ($do=='sync') { //同步数据来源到metadata表
- $redirect = "/admin/data/source/";
- $sql = "update metadata m set source=s.uuid from source s right join datasource d on s.id=d.sourceid where m.uuid=d.uuid";
- if($this->db->exec($sql))
- {
- $this->messenger->addMessage('成功同步数据来源');
- $this->_redirect($redirect);
- }else{
- $this->messenger->addMessage('同步数据来源失败');
- $this->_redirect($redirect);
- }
- }
-
- else
- {
- $wheresql = array();
-
- if(!empty($q) && !empty($search))
- {
- $this->view->q = $q;
- $wheresql[] = " title like '%$q%' ";
- }
-
- if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
- else $wheresql='';
-
- if($wheresql!='')
- {
- $wheresql = 'where '.$wheresql;
- }
-
- $sql = "select * from source $wheresql order by id desc";
- $rs = $this->db->query($sql);
- $rows = $rs->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- }// 项目来源管理
-
-
- }//function sourceAction
-
-
- function attachmentsAction()
- {
- $submit = $this->_request->getParam('submit');
- $add = $this->_request->getParam('add');
- $search = $this->_request->getParam('search');
- $delete = $this->_request->getParam('delete');
- $edit = $this->_request->getParam('edit');
- $down = $this->_request->getParam('down');
- $uuid = $this->_request->getParam('uuid');
- $mdtitle = $this->_request->getParam('mdtitle');
- $mdattdel = $this->_request->getParam('mdattdel');
- $attupdate = $this->_getParam('attupdate');
-
- if(!empty($uuid)&&!empty($mdtitle))
- {
- $this->view->uuid= $uuid;
- $this->view->mdtitle=$mdtitle;
- }
-
- if($add)
- {
- $this->_helper->viewRenderer('attachmentsadd');
- if(!empty($uuid))
- {
- $this->view->uuid = $uuid;
- }
- }//附件添加
-
- elseif($attupdate)
- {
- $submit = $this->_getParam('submit');
- if(!empty($submit))
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('attupdate');
-
- $files=new Files();
- $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true);
-
- if(empty($msg['error']))
- {
- $msg['error']="";
- $filename = $msg['db_path'];
- $filesize = $msg['file_size'];
- $filedesc = $this->_request->getParam('filedesc');
- $filetype = 'md';
- $realname = $msg['realname'];
-
-
- $sql = "UPDATE attachments SET filename=?,filetype=?,filesize=?,realname=? WHERE id=?";
- $sth = $this->db->prepare($sql);
- $ds = $sth->execute(array($filename,$filetype,$filesize,$realname,$id));
-
- if($ds)
- {
- $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]';
- $msg['ok']= 1;
- echo Zend_Json::encode($msg);
- exit();
- }else{
- @unlink($filename);
- $data = array("error"=>'附件上传失败:写入附件表出错');
- $this->jsonexit($data);
- return true;
- }
- }else{
- @unlink($filename);
- $data = array("error"=>'附件上传失败:'.$msg['error']);
- $this->jsonexit($data);
- return true;
- }
-
-
- $data = array("error"=>"处理中出现错误".$id);
- $this->jsonexit($data);
- return true;
- }else{
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer('attachments-update');
- $id = $this->_getParam('attupdate');
- $this->view->id = $id;
- }
-
- }//附件文件更新
-
- else if($mdattdel)
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
-
- $sql = "delete from mdattach where uuid=? AND id=?";
- $sth = $this->db->prepare($sql);
- $ds = $sth->execute(array($uuid,$mdattdel));
- if($ds)
- {
- $data = array("status"=>1); //操作状态代码 : 1=>成功 2=>失败
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
- }
- }
-
- else if($delete)
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
-
- //需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录
-
- $basepath = $this->view->config->upload;
-
- //从数据库获取文件路径
-
- $info = $this->getFileinfo($delete);
-
- $filepath = $basepath.$info['filename'];
-
- $sql = "SELECT * FROM mdattach WHERE id=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($delete));
- $rows = $sth->fetchAll();
-
- if(count($rows)>0)
- {
- $data = array("error"=>'删除失败!该文件有元数据附件信息,不能直接删除',"status"=>0);
- $this->jsonexit($data);
- return true;
- }
-
- $sql = "SELECT * FROM mdreviewattach WHERE attachid=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($delete));
- $rows = $sth->fetchAll();
-
- if(count($rows)>0)
- {
- $data = array("error"=>'删除失败!该文件有对应评审附件信息,不能直接删除',"status"=>0);
- $this->jsonexit($data);
- return true;
- }
-
- $sql = "SELECT link FROM reference WHERE link!=''";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $ids = array();
- foreach($rows as $k=>$v)
- {
- if(preg_match("/service/i",$v['link']))
- {
- $ids[] = str_replace("/service/attach/id/","",$v['link']);
- }
- unset($rows[$k]);
- }
- unset($rows);
-
- if(in_array($delete,$ids))
- {
- $data = array("error"=>'删除失败!该文件有对应文献附件信息,不能直接删除',"status"=>0);
- $this->jsonexit($data);
- return true;
- }
-
- if(unlink($filepath))
- {
- $sql = "delete from attachments where id='$delete'";
- if($this->db->exec($sql)>0)
- {
- $data = array("status"=>1);
- $this->jsonexit($data);
- return true;
- }
- }
- else
- {
- $sql = "delete from attachments where id='$delete'";
- if($this->db->exec($sql)>0)
- {
- $data = array("error"=>'文件删除失败,仅删除数据库记录,请手动删除文件:'.$info['filename'],"status"=>0);
- $this->jsonexit($data);
- return true;
- }
- }
-
- }//删除
-
- else if($edit>0)
- {
-
- if(empty($submit))
- {
-
- $this->view->info = $this->getFileinfo($edit);
-
- $this->_helper->viewRenderer('attachmentsadd');
-
- }
- else
- {
- $filedesc = $this->_request->getParam('filedesc');
-
- $sql="update attachments set filedesc='$filedesc' where id='$edit'";
-
- if($this->db->exec($sql)>0)
- {
- $this->messenger->addMessage('编辑成功');
- $this->_redirect("/admin/data/attachments/edit/$edit");
- }
- }
-
- }//编辑
-
- else if($search && $search!='my')
- {
- $keyword = $this->_request->getParam('keyword');
- if(empty($keyword))
- {
- $this->messenger->addMessage('请输入关键词');
- $this->_redirect("/admin/data/attachments/search/1");
- }
- else
- {
- $sql="select * from attachments where filedesc like '%$keyword%'";
- $re = $this->db->query($sql);
- $rows=$re->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- }
-
- }//搜索
-
- else if($search && $search=='my')
- {
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $userid = $user->id;
- $sql="select * from attachments where userid='$userid'";
- $re= $this->db->query($sql);
- $rows = $re->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
- }
- }//我的附件列表
-
- else if ($down>0)
- {
-
- $sql = "select * from attachments where id='$down'";
-
- $re = $this->db->query($sql);
-
- $row = $re->fetch();
-
- $file = new files();
-
- $fullPath = $this->view->config->upload.$row['filename'];
-
-
- // Parse Info / Get Extension
- $fsize = filesize($fullPath);
- $path_parts = pathinfo($fullPath);
- $ext = strtolower($path_parts["extension"]);
-
- // Determine Content Type
- switch ($ext) {
- case "pdf": $ctype="application/pdf"; break;
- case "exe": $ctype="application/octet-stream"; break;
- case "zip": $ctype="application/zip"; break;
- case "doc": $ctype="application/msword"; break;
- case "xls": $ctype="application/vnd.ms-excel"; break;
- case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
- case "gif": $ctype="image/gif"; break;
- case "png": $ctype="image/png"; break;
- case "jpeg":
- case "jpg": $ctype="image/jpg"; break;
- default: $ctype="application/force-download";
- }
-
- $content=file_get_contents($fullPath);
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
- $this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
- ->setHeader('Content-Disposition','attachment; filename="'.basename($fullPath).'"')
- ->setHeader('Content-Length', $fsize)
- ->setHeader('Content-Type','application/force-download')
- ->setHeader('Content-Type','application/download')
- ->setHeader('Content-Type',$ctype)
- ->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);
-
- //$sql = "update attachments set downtimes=downtimes+1 where id='$down'";
- //$this->db->exec($sql);
-
- }//附件下载
-
- else
- {
-
- $sql="select * from attachments order by id desc";
- $re= $this->db->query($sql);
- $rows = $re->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(30);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
- $this->view->paginator=$paginator;
- }//所有附件
-
-
-
-
- }//attachments 附件
-
- function uploadAction(){
- $this->_helper->layout()->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $uuid = $this->_getParam('uuid');
-
- 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();
- }
-
- if($user->usertype!='administrator')
- {
- $msg['error'] = "您无权使用此功能";
- echo Zend_Json::encode($msg);
- exit();
- }
-
- $files=new Files();
- $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true);
-
- if(empty($msg['error']))
- {
- $msg['error']="";
- $filename = $msg['db_path'];
- $filesize = $msg['file_size'];
- $filedesc = $this->_request->getParam('filedesc');
- $filetype = 'md';
- $realname = $msg['realname'];
-
-
- $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$userid','$filesize','$realname') RETURNING id";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $att = $sth->fetch(PDO::FETCH_ASSOC);
- $msg['attid'] = $attid = $att['id'];
-
- $sql = "insert into mdattach (uuid,id) values ('$uuid','$attid')";
- if(empty($uuid) || $this->db->exec($sql))
- {
- $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb] ';
- echo Zend_Json::encode($msg);
- exit();
- }else{
- $msg['error'] = '附件上传失败:写入附件表出错';
- @unlink($filename);
- 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();
- }
- }// uploadAction ajax上传附件
-
- function getattsAction(){
-
- $this->_helper->layout()->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $uuid = $this->_request->getParam('uuid');
-
- if($uuid!='')
- {
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $userid = $user->id;
- $sql = "select m.*,a.*,d.title from mdattach m
- left join attachments a on m.id = a.id
- left join metadata d on m.uuid=d.uuid where m.uuid='$uuid'
- ORDER BY a.ts_created ASC";
- $rs = $this->db->query($sql);
- $atts = $rs->fetchAll();
-
- echo Zend_Json::encode($atts);
- exit();
- }else
- {
- exit();
- }
- }else{
- exit();
- }
- //不输出错误
- }//获取附件
-
-
- /*
- versionAction 版本管理
- */
-
- public function versionAction(){
-
- $ac = $this->_request->getParam('ac');
- $uuid = $this->_request->getParam('uuid');
- set_time_limit(0);
-
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $u_id = $user->id;
- }
-
- //查看单条数据的所有版本
- if (!empty($uuid) && empty($ac))
- {
- //view the versions of the data
- $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname,g.id as gid FROM mdversion v
- LEFT JOIN metadata md ON md.uuid=v.uuid
- left join users u on v.userid=u.id
- left join geonetworkmetadata g on md.uuid=g.uuid
- WHERE md.title IS NOT NULL AND v.uuid=?
- order by v.ts_created desc
- ";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($uuid));
- $rows = $sth->fetchAll();
- @$this->view->mdtitle=$rows[0]['title'];
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- }
-
- //查看所有版本列表
- else if((empty($ac) && empty($uuid))|| $ac=='list')
- {
- $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v
- LEFT JOIN metadata md ON md.uuid=v.uuid
- left join users u on v.userid=u.id
- WHERE md.title IS NOT NULL
- order by v.ts_created desc
- ";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- }
-
- //按数据浏览
- else if($ac=="bydata")
- {
- $keywords = $this->_request->getParam('q');
- if(!empty($keywords))
- $this->view->q = $keywords;
- $sql = "SELECT md.title,md.uuid,count(v.id) as c FROM mdversion v
- LEFT JOIN metadata md ON md.uuid=v.uuid
- WHERE md.title IS NOT NULL";
- if(!empty($keywords))
- {
- $search=new Search($keywords);
- $where=$search->sql_expr(array("md.title","md.description"));
- $sql.=' and '.$where;
- }
- $sql.=" group by md.uuid,md.title";
-
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(10);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
-
- $this->_helper->viewRenderer('version-bydata');
- }
-
-
- //删除某个版本
- else if($ac=="delete")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $data = "";
-
- try{
- $id = $this->_request->getParam('id');
- if(empty($id) || !is_numeric($id))
- {
- $data = array("error"=>"参数错误");
- $this->jsonexit($data);
- return true;
- }
-
- $sql = "DELETE FROM mdversion WHERE id=?";
- $sth = $this->db->prepare($sql);
- $ex = $sth -> execute(array($id));
-
- if($ex)
- {
- $data = array("deleted"=>$id, "error"=>"删除成功");
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>'删除失败,请确认权限后重试');
- $this->jsonexit($data);
- return true;
- }
- }catch(Exception $e) {
- $msg = "删除失败,请确认权限后重试";
- if($this->debug>0)
- {$msg .= $e->getMessage();}
- $data = array("error"=>$msg);
- $this->jsonexit($data);
- return true;
- }
- }
-
- //恢复到geonetwork
- else if($ac == "restore")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $data = "";
- try{
- $id = $this->_request->getParam('id');
- if(empty($id) || !is_numeric($id))
- {
- $data = array("error"=>"参数错误");
- $this->jsonexit($data);
- return true;
- }
-
- $this->wdb=Zend_Db::factory($this->view->config->geonetwork);
- $sql = "SELECT v.xml,v.uuid FROM mdversion v
- WHERE v.id=?";
- $sth = $this->db->prepare($sql);
- $sth ->execute(array($id));
- $row = $sth->fetch();
-
- $sql = "SELECT data FROM metadata WHERE uuid=?";
- $sth = $this->wdb->prepare($sql);
- $sth ->execute(array($row['uuid']));
- $row_geo = $sth->fetch();
-
- if($row['xml']==$row_geo['data'])
- {
- $data = array("error"=>'无须恢复,元数据相同');
- $this->jsonexit($data);
- return true;
- }
-
- $sql = "UPDATE metadata SET data=? WHERE uuid=?";
- $sth = $this->wdb->prepare($sql);
- $ex = $sth ->execute(array($row['xml'],$row['uuid']));
-
- if($ex)
- {
- $data = array("error"=>'恢复成功');
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>'恢复失败,请确认权限后重试');
- $this->jsonexit($data);
- return true;
- }
- }catch(Exception $e) {
- $msg = "恢复失败,请确认权限后重试";
- if($this->debug>0)
- {$msg .= $e->getMessage();}
- $data = array("error"=>$msg);
- $this->jsonexit($data);
- return true;
- }
- }
-
- //发布到评审
- else if($ac == "commit")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $data = "";
- try{
- $id = $this->_request->getParam('id');
- if(empty($id) || !is_numeric($id))
- {
- $data = array("error"=>"参数错误");
- $this->jsonexit($data);
- return true;
- }
-
- $changelog = $this->_request->getParam('changelog');
- if(empty($changelog))
- {
- $data = array("error"=>'请输入变更信息');
- $this->jsonexit($data);
- return true;
- }
-
- // 1. 权限认定 --skip
- // 2. 保存变化记录 save changelog & userid
- $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id=?";
- $this->db->query($sql,array($changelog,$u_id,$id));
-
- // 3. 获取数据评审状态
- $sql = "SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid
- left join metadata m on s.uuid=m.uuid WHERE v.id=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($id));
- $row = $sth->fetch();
-
- $sql="select * from xunsearch where uuid=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($row['uuid']));
- $data_search = $sth->fetch();
- $search=new Search();
- $search->update($data_search);
-
- if (empty($row)) //无对应记录
- {
- $sql="select m.id from metadata m left join mdversion v on m.uuid=v.uuid where v.id=?";
- $sth=$this->db->prepare($sql);
- $sth->execute(array($id));
- $mrow=$sth->fetch();
- if (empty($mrow)) //说明是新数据
- {
- //导入元数据
- $iso=new ISO19115();
- $iso->saveDB($this->db,$row['xml']);
- //进入评审库
- $sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from mdversion where id=?";
- $this->db->query($sql,array($u_id,$id));
-
- //email to admin
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"metadata-new-admin",array(
- 'user' => $user->username,
- 'uuid' => $iso->uuid,
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $iso->resTitle,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- $mail->send();
-
- unset($mail);
- unset($mailtp);
- //email to author
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"metadata-new-author",array(
- 'user' => $user->username,
- 'uuid' => $iso->uuid,
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $iso->resTitle,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($user->email);
- $mail->addCc($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- @$mail->send();
-
- $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!');
- $this->jsonexit($data);
- return true;
- } else { //说明是已发布的数据且数据不存在评审信息
- //同步元数据
- $iso=new ISO19115();
- $iso->saveDB($this->db,$row['xml']);
- //移除中间版本
- $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null";
- $this->db->query($sql,array($id));
- //修改评审状态为发布,且由其提交的用户进行管理
- $sql="insert into mdstatus (uuid,status,userid) select uuid,6,? from mdversion where id=?";
- $this->db->query($sql,array($u_id,$id));
-
- //email to admin & author
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"metadata-release",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- 'changelog'=>$changelog,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($this->view->config->service->email);
- $mail->addCc($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- @$mail->send();
-
- $data = array("commited"=>1,"error"=>'该版本已经成功发布!');
- $this->jsonexit($data);
- return true;
- }
- }
- else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收
- {
- //同步元数据
- $iso=new ISO19115();
- $iso->saveDB($this->db,$row['xml']);
- //email to admin
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"version-commit-admin",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- 'changelog'=>$changelog,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- $mail->send();
-
- unset($mail);
- unset($mailtp);
- //email to author
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'数据服务组');
- $mailtp=new EmailText($this->db,"version-commit-author",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($user->email);
- $mail->addCc($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- @$mail->send();
-
- $data = array("commited"=>1,"error"=>'该版本已经成功提交并同步,请等待数据中心进一步处理!');
- $this->jsonexit($data);
- return true;
- }
- else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息
- {
- //同步元数据
- $iso=new ISO19115();
- $iso->saveDB($this->db,$row['xml']);
-
- //email to admin
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"version-commit-admin",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- 'changelog'=>$changelog,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- $mail->send();
-
- unset($mail);
- unset($mailtp);
- //email to author
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'数据服务组');
- $mailtp=new EmailText($this->db,"version-commit-author",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($user->email);
- $mail->addCc($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- @$mail->send();
-
- //email to experts
- $sql="select u.username,u.email,u.id from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($row['uuid']));
- $experts = $sth->fetchAll();
-
- unset($mail);
- unset($mailtp);
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"version-commit-expert",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/doc/uuid/'.$row['uuid']);
- $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc');
- $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$row['uuid']);
- $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.pdf');
- if($this->debug==0)
- {
- foreach ($experts as $expert) $mail->addTo($expert['email']);
- $mail->addCc($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- @$mail->send();
-
- $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!');
- $this->jsonexit($data);
- return true;
- }
- else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态
- {
- //同步元数据
- $iso=new ISO19115();
- $iso->saveDB($this->db,$row['xml']);
- //移除中间版本
- $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null";
- $this->db->query($sql,array($id));
-
- //email to admin & author
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'数据服务组');
- $mailtp=new EmailText($this->db,"metadata-release",array(
- 'user' => $user->username,
- 'uuid' => $row['uuid'],
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $row['title'],
- 'changelog'=>$changelog,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($this->view->config->service->email);
- //$mail->addCc($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- //@$mail->send();
-
- $data = array("commited"=>1,"error"=>'该版本已经成功发布!');
- $this->jsonexit($data);
- return true;
- }
-
- }catch(Exception $e) {
- $msg = "提交失败,请确认权限后重试";
- if($this->debug>0)
- {$msg .= $e->getMessage();}
- $data = array("error"=>$msg);
- $this->jsonexit($data);
- return true;
- }
- }//发布到评审
-
- //与前一个版本对比
- else if($ac == "diff" || $ac=="diff1")
- {
- $this->_helper->viewRenderer('version-diff');
- $id = $this->_request->getParam('id');
- if(empty($id) || !is_numeric($id))
- {
- $this->view->error = "参数错误";
- return true;
- }
-
- $sql = "SELECT v.uuid,md.title FROM mdversion v
- LEFT JOIN metadata md ON v.uuid=md.uuid
- WHERE v.id=?";
- $sth = $this->db->prepare($sql);
- $sth -> execute(array($id));
-
- $row = $sth->fetch();
- if ($ac=='diff')
- {
- $sql = "SELECT v.* FROM mdversion v
- WHERE v.uuid=? and v.ts_created<=(select ts_created from mdversion where id=?)
- ORDER BY v.ts_created DESC
- LIMIT ?";
- $sth = $this->db->prepare($sql);
- $sth -> execute(array($row['uuid'],$id,2));
- } else {
- $sql = "SELECT v.* FROM mdversion v
- WHERE v.uuid=? and (v.id=? or (v.ts_created<(select ts_created from mdversion where id=?) and changelog is not null))
- ORDER BY v.ts_created DESC
- LIMIT ?";
- $sth = $this->db->prepare($sql);
- $sth -> execute(array($row['uuid'],$id,$id,2));
- }
-
- $rows = $sth->fetchAll();
-
- if(count($rows)<2)
- {
- $this->view->error = "对比失败:之前没有版本可以对比";
- return true;
- }
-
- $this->view->info = $row;
- $this->view->data = $rows;
-
- }
-
-
- }//versionAction 版本控制
-
-
- /*
- * authorAction() 数据作者
- *
- * param string $ac //动作
- =add 添加
- =edit 编辑
- =update 更新
- =del 删除
- =list 列出所有数据作者
-
- * param string $uuid //UUID
- *
- * return view|application-json
- */
- public function authorAction(){
-
- $ac = $this->_getParam('ac');
- $uuid = $this->_getParam('uuid');
-
- if(empty($ac) && empty($uuid))
- {
-
- $keywords = $this->_request->getParam('q');
- if(!empty($keywords))
- $this->view->q = $keywords;
-
- $sql = "select md.id,md.title,md.uuid,count(a.userid) as c from metadata md
- right JOIN mdauthor a ON md.uuid=a.uuid
- ";
-
- if(!empty($keywords))
- {
- $search=new SimpleSearch($keywords);
- $where=$search->sql_expr(array("md.title"));
- $sql.=' and ('.$where.")";
- }
-
- $sql .= "GROUP by md.id,md.title,md.uuid,md.ts_created
- ORDER BY md.ts_created DESC";
-
- $sth = $this->db->prepare($sql);
- $sth-> execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
-
- }//列表
-
-
- else if($ac == 'add')
- {
-
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $username = $this->_getParam('username');
- $uuid = $this->_getParam('uuid');
-
- if(!preg_match("/^[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}$/",$uuid))
- {
- $data = array("error"=>"uuid参数错误");
- $this->jsonexit($data);
- return true;
- }
-
- if(empty($username))
- {
- $data = array("error"=>'请输入要添加为该数据作者的用户名');
- $this->jsonexit($data);
- return true;
- }
-
- $sql = "SELECT * FROM users WHERE username=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($username));
- $row = $sth->fetch();
-
- if(empty($row['id']) || !isset($row['id']))
- {
- $data = array("error"=>'您输入的用户名无任何对应用户');
- $this->jsonexit($data);
- return true;
- }
-
- $uid = $row['id'];
-
- $sql = "SELECT * FROM mdauthor WHERE userid=? AND uuid=?";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($row['id'],$uuid));
- $row = $sth->fetch();
-
- if(!empty($row['id']) && $row['status']==1)
- {
- $data = array("error"=>'该用户已经是此数据的作者');
- $this->jsonexit($data);
- return true;
- }
-
- if(!empty($row['id']) && in_array($row['status'],array(0,-1)) )
- {
- $sql = "UPDATE mdauthor SET status=1 WHERE uuid=? AND userid=?";
- $sth = $this->db->prepare($sql);
- $ds = $sth->execute(array($uuid,$uid));
- if($ds)
- {
- $data = array("msg"=>'该用户已被提升为数据作者','added'=>1);
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>'处理中出现错误');
- $this->jsonexit($data);
- return true;
- }
- }
-
- if(empty($row['id']))
- {
- $sql = "INSERT INTO mdauthor (uuid,userid,status) VALUES (?,?,?)";
- $sth = $this->db->prepare($sql);
- $ds = $sth->execute(array($uuid,$uid,1));
- if($ds)
- {
- $data = array("msg"=>'该用户已被添加为数据作者','added'=>1);
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
- }
- }
-
-
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
-
- }//ajax 添加作者
-
-
- else if(($ac == "edit" || $ac=="") && !empty($uuid))
- {
-
- $window = $this->_getParam('window');
-
- if($window == "iframe")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer('author-edit-iframe');
- }else{
- $this->_helper->viewRenderer('author-edit');
- }
-
- $sql = "SELECT a.*,md.title,u.realname,u.username FROM mdauthor a
- LEFT JOIN metadata md ON a.uuid=md.uuid
- LEFT JOIN users u ON a.userid=u.id
- WHERE md.uuid=?
- ORDER BY a.id DESC
- ";
-
- $sth = $this->db->prepare($sql);
- $sth->execute(array($uuid));
- $rows = $sth->fetchAll();
-
- $this->view->authors = $rows;
-
- }// 作者管理弹窗
-
- else if($ac == "del")
- {
-
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('id');
-
- $sql = "DELETE FROM mdauthor WHERE id=?";
- $sth = $this->db->prepare($sql);
- $ds = $sth->execute(array($id));
- if($ds)
- {
- $data = array("deleted"=>$id);
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
- }
-
-
- }//移除作者
-
- else if($ac == 'update')
- {
-
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('id');
-
- $sql = "UPDATE mdauthor SET status=1 WHERE id=?";
- $sth = $this->db->prepare($sql);
- $ds = $sth->execute(array($id));
- if($ds)
- {
- $data = array("updated"=>$id,'msg'=>'认证成功!');
- $this->jsonexit($data);
- return true;
- }else{
- $data = array("error"=>"处理中出现错误");
- $this->jsonexit($data);
- return true;
- }
-
-
- }//认证作者
-
- else if($ac =="list")
- {
- $this->_helper->viewRenderer('author-list');
-
- $sql = "SELECT u.id,u.realname,u.email,count(a.id) as d FROM mdauthor a
- LEFT JOIN users u ON a.userid=u.id
- WHERE a.status>0
- GROUP BY u.id,u.realname,u.email
- ORDER BY u.id DESC";
-
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- }//所有作者
-
- else if($ac == "userdatas")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('id');
-
- $sql = "SELECT md.title,md.uuid FROM mdauthor a
- LEFT JOIN metadata md ON a.uuid=md.uuid
- WHERE a.userid=? AND a.status>0
- ORDER BY a.ts_created";
- $sth = $this->db->prepare($sql);
- $sth->execute(array($id));
- $rows = $sth->fetchAll();
-
- $data = array("datas"=>$rows);
- $this->jsonexit($data);
- return true;
-
- }//用户数据
-
- else if($ac == "datas")
- {
- $this->_helper->viewRenderer('author-datas');
-
- $keywords = $this->_request->getParam('q');
- if(!empty($keywords))
- $this->view->q = $keywords;
-
- $sql = "select md.id,md.title,md.uuid,count(a.userid) as c from metadata md
- left JOIN mdauthor a ON md.uuid=a.uuid
- ";
-
- if(!empty($keywords))
- {
- $search=new SimpleSearch($keywords);
- $where=$search->sql_expr(array("md.title"));
- $sql.=' WHERE '.$where;
- }
-
- $sql .= "GROUP by md.id,md.title,md.uuid,md.ts_created
- ORDER BY md.ts_created DESC";
-
- $sth = $this->db->prepare($sql);
- $sth-> execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
-
- }
-
- }//authorAction() 数据作者管理
-
-
- //newdataAction() 新建元数据
- public function newdataAction(){
-
- $ac = $this->_request->getParam('ac');
- $id = $this->_request->getParam('id');
- $this->wdb=Zend_Db::factory($this->view->config->geonetwork);
-
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $u_id = $user->id;
- }
-
- //在geonetwork中查看单条数据
- if (!empty($id) && empty($ac))
- {
- $this->view->url='metadata.show?id='.$id;
- $this->_helper->viewRenderer('newdata-view');
- }
- //查看所有的未提交数据列表
- else if((empty($ac) && empty($uuid))|| $ac=='list')
- {
- $sql = "SELECT (regexp_matches(gn.data,'(.*) '))[1] as title,gn.id,gn.uuid,u.username,u.realname FROM geonetworkmetadata gn left join users u on gn.owner=u.id
- WHERE gn.uuid not in (select uuid from metadata)
- order by gn.id desc
- ";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- }
- //元数据导入
- else if($ac=="import")
- {
- $this->_helper->viewRenderer('newdata-import');
- }
- //从模板新建元数据
- else if($ac=="add-by-template")
- {
- $keywords = $this->_request->getParam('q');
- $sql="select id,(regexp_matches(data,'(.*) '))[1] as title,(owner-$u_id) as isowner from metadata where istemplate='y' and schemaid='iso19115'";
- if(!empty($keywords))
- {
- $this->view->q = $keywords;
- $search=new Search($keywords);
- $where=$search->sql_expr(array("data"));
- $sql.=' and '.$where;
- }
- $sql.=" order by changedate desc";
- $sth = $this->wdb->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(10);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- $this->_helper->viewRenderer('newdata-add');
- }
-
- else if($ac=="add-by-data")
- {
- $keywords = $this->_request->getParam('q');
- $sql = "SELECT md.title,md.uuid,md.description,gn.id as gid FROM normalmetadata md
- left join geonetworkmetadata gn on md.uuid=gn.uuid
- WHERE gn.id is not null";
- if(!empty($keywords))
- {
- $this->view->q = $keywords;
- $search=new Search($keywords);
- $where=$search->sql_expr(array("md.title","md.description"));
- $sql.=' and '.$where;
- }
- $sql.=" order by md.ts_created desc";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $rows = $sth->fetchAll();
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(10);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
- $this->_helper->viewRenderer('newdata-add-bydata');
- }
- //元数据格式检查
- else if ($ac=="validate")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $data = "";
- $id = $this->_request->getParam('id');
- $sql="select uuid,data from geonetworkmetadata where id=?";
- $sth=$this->db->prepare($sql);
- $sth->execute(array($id));
- $row=$sth->fetch();
-
- $iso=new ISO19115();
- @$iso->loadXML($row['data']);
- if ($iso->validate())
- {
- $data=array("error"=>"元数据中发现错误。 ".implode(" ",$iso->error));
- $this->jsonexit($data);
- return true;
- } else {
- $data=array("error"=>"元数据中没有发现错误。 ");
- $this->jsonexit($data);
- return true;
- }
- }
- //提交数据
- else if($ac=="commit")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $data = "";
- $id = $this->_request->getParam('id');
- try{
- if(empty($id) || !is_numeric($id))
- {
- $data = array("error"=>"参数错误");
- $this->jsonexit($data);
- return true;
- }
-
- $changelog = $this->_request->getParam('changelog');
- if(empty($changelog))
- {
- $data = array("error"=>'请输入变更信息');
- $this->jsonexit($data);
- return true;
- }
-
- // 1. 权限认定:当前用户必须和其owner相同
- // 数据应当没有评审状态,没有作者信息
- $sql="select uuid,data from geonetworkmetadata where id=?";
- $sth=$this->db->prepare($sql);
- $sth->execute(array($id));
- $row=$sth->fetch();
- if (empty($row))
- {
- $data = array("error"=>'无权限修改数据');
- $this->jsonexit($data);
- return true;
- }
-
- // 保存数据作者信息
-
- // 2. 保存变化记录 save changelog & userid for the latest version
- $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select v.id from mdversion v left join geonetworkmetadata g on v.uuid=g.uuid where g.id=? order by v.ts_created desc limit 1)";
- $this->db->query($sql,array($changelog,$u_id,$id));
-
- // 3. 保存数据评审状态
- //导入元数据
- $iso=new ISO19115();
- @$iso->saveDB($this->db,$row['data']);
- //进入评审库
- $sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from geonetworkmetadata where id=?";
- $this->db->query($sql,array($u_id,$id));
- //email to admin
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mailtp=new EmailText($this->db,"metadata-new-admin",array(
- 'user' => $user->username,
- 'uuid' => $iso->uuid,
- 'email'=> $user->email,
- //元数据标题
- 'title'=> $iso->resTitle,
- ));
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- if($this->debug==0)
- {
- $mail->addTo($this->view->config->service->email);
- }else{
- $mail->addTo($this->debug_email);
- }
- $mail->send();
-
- $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!');
- $this->jsonexit($data);
- return true;
- }catch(Exception $e) {
- $sql="delete from mdstatus where uuid in (select uuid from geonetworkmetadata where id=?)";
- $this->db->query($sql,array($id));
- $msg = "提交失败,请确认权限后重试";
- if($this->debug>0)
- {$msg .= $e->getMessage();}
- $data = array("error"=>$msg);
- $this->jsonexit($data);
- return true;
- }
- }
-
- }// newdataAction() 新建元数据
-
- /*
- * projectsAction() 数据汇交计划
- *
- *
- *
- *
- */
- function projectAction()
- {
- include_once("Heihe.php");
- $heihe = new Heihe($this->db);
-
- $this->view->input_NameDefaultVal = "专家姓名";
- $this->view->input_EmailDefaultVal = "专家email";
-
- $projectTable = $heihe->tbl_heiheproject;
-
- $ac = $this->_getParam('ac');
-
- if(empty($ac) || $ac == "index")
- {
- $this->_helper->viewRenderer('project');
-
- //Search Link
- $this->view->searchLink = "/admin/heihe/project/ac/index/";
-
- $q = $this->_getParam('q');
-
- $wheresql = array();
-
- if(!empty($q))
- {
- $wheresql[] = " (title LIKE '%$q%' OR
- code LIKE '%$q%' OR
- name LIKE '%$q%' OR
- email LIKE '%$q%')";
- $this->view->searchKeyword = $q;
- }
-
- if(count($wheresql)>0)
- {
- $wheresql = join(" AND ",$wheresql);
- }else{
- $wheresql = "";
- }
-
- if(!empty($wheresql))
- {
- $wheresql = " WHERE ".$wheresql;
- }
-
- $sql = "SELECT * FROM $projectTable $wheresql
- ORDER BY id ASC";
- $sth = $this->db->query($sql);
- $rows = $sth->fetchAll();
-
- foreach ($rows as $k=>$v)
- {
- $rows[$k]['status_alias'] = $heihe->getStatus($v['status']);
- }
-
- $this->view->Count = count($rows);
-
- $paginator = Zend_Paginator::factory($rows);
- $paginator->setCurrentPageNumber($this->_getParam('page'));
- $paginator->setItemCountPerPage(15);
- $paginator->setView($this->view);
- Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
- $this->view->paginator=$paginator;
-
- $this->view->project_status = $heihe->project_status;
-
- return true;
- }//ac == index
-
- //邀请专家
- if($ac == "invite")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $pid = $this->_getParam('id');
- $name = $this->_getParam('name');
- $email = $this->_getParam('email');
-
- if(!is_numeric($pid))
- {
- $this->jsonexit(array("error"=>"参数错误"));
- return true;
- }
-
- if(empty($name) || $name == $this->view->input_NameDefaultVal)
- {
- $this->jsonexit(array("error"=>"请输入专家姓名"));
- return true;
- }
-
- if(empty($email) || $email == $this->view->input_EmailDefaultVal)
- {
- $this->jsonexit(array("error"=>"请输入专家Email"));
- return true;
- }
-
- $code = $heihe->makeValidation($email);
-
- $expert_data = array(
- "name"=>$name, //专家姓名
- "email"=>$email, //专家email
- "created"=>date("Y-m-d H:i:s",time()), //邀请时间
- "validation"=>$code, //验证码
- );
-
- $rs = $heihe->expertAdd($pid,$expert_data);
-
- if($rs > 0)
- {
- $this->sendMailToExpert($pid,$name,$email,$code);// 最后再加入一个非0的数字型参数即可使用调试邮箱发送
- $this->jsonexit(array("msg"=>"专家邀请成功!","invited"=>1));
- return true;
- }else if($rs==-1){
- $this->jsonexit(array("error"=>"该专家已经邀请过"));
- return true;
- }else{
- $this->jsonexit(array("error"=>"邀请失败,请重试"));
- return true;
- }
-
- return true;
- }// 邀请专家
-
- if($ac == "showexpert")
- {
-
- $this->_helper->layout->setLayout('layout-iframe');
- $this->_helper->viewRenderer('project-showexpert');
-
- $pid = $this->_getParam('id');
-
- if(empty($pid) || !is_numeric($pid))
- {
- $this->view->error = "参数错误";
- return true;
- }
-
- $this->view->pid = $pid;
-
- $experts = $heihe->expertRead($pid);
-
- if(!is_array($experts))
- {
- $this->view->error = "此项目还没有邀请专家";
- return true;
- }
-
- foreach($experts as $k=>$v)
- {
- $experts[$k]['url'] = $heihe->makeInviteLink($pid,$v['validation']);
- }
-
- $this->view->experts = $experts;
-
- return true;
- }//ac == showexpert 查看跟踪专家
-
- if($ac == "remove")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $pid = $this->_getParam('id');
- $del = $this->_getParam('del');
-
- if(!empty($del) && !empty($pid))
- {
-
- $rs = $heihe->expertRemove($pid,$del);
-
- if($rs)
- {
- $this->jsonexit(array("deleted"=>1));
- return true;
- }else{
- $this->jsonexit(array("error"=>"删除失败,请重试"));
- return true;
- }
-
- }else{
- $this->jsonexit(array("error"=>"参数错误,请刷新"));
- return true;
- }
-
- }//ac == remove 删除专家
-
- if($ac == "upload")
- {
- $this->_helper->layout->setLayout('layout-iframe');
- $this->_helper->viewRenderer('project-upload');
-
- $submit = $this->_getParam('submit');
-
- $pid = $this->_getParam('pid');
-
- if(empty($pid) || !is_numeric($pid))
- {
- $this->view->error = "参数错误";
- return true;
- }
-
- $this->view->pid = $pid;
-
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $uid = $user->id;
- }
-
- if(!empty($submit) && empty($this->view->error))
- {
-
- $files=new files();
- $msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'heihe');
-
- if(empty($msg['error']))
- {
- $msg['error']="";
- $filename = $msg['db_path'];
- $filesize = $msg['file_size'];
- $filedesc = $this->_request->getParam('filedesc');
- $filetype = $msg['file_type'];
- $realname = $msg['realname'];
-
- if(!empty($row['attachid']))
- {
- $sql = "SELECT * FROM attachments WHERE id={$row['attachid']}";
- $sth = $this->db->query($sql);
- $attach = $sth->fetch();
- $this->db->exec("DELETE FROM attachments WHERE id={$row['attachid']} AND filetype='heihe'");
- @unlink($this->view->config->upload.$attach['filename']);
- }
-
- $sql = " INSERT INTO attachments (filename,filetype,filedesc,userid,filesize,realname) values
- ('$filename','heihe','$filedesc','$uid','$filesize','$realname') RETURNING id";
- $sth = $this->db->prepare($sql);
- $sth->execute();
- $att = $sth->fetch(PDO::FETCH_ASSOC);
- $msg['attid'] = $attid = $att['id'];
-
- $sql = "UPDATE heiheproject SET attachid=$attid WHERE id=$pid";
- $sth = $this->db->exec($sql);
-
- if($sth)
- {
- $this->view->message = "上传成功";
- }else{
- @unlink($filename);
- $this->view->error = '附件上传失败:写入附件表出错';
- return true;
- }
- }else{
- @unlink($filename);
- $this->view->error = "附件上传失败".$msg['error'];
- return true;
- }
- }
-
- $sql = "SELECT * FROM heiheproject WHERE id=$pid";
- $sth = $this->db->query($sql);
- $row = $sth->fetch();
-
- if(!empty($row['attachid']))
- {
- $sql = "SELECT * FROM attachments WHERE id = {$row['attachid']}";
- $sth = $this->db->query($sql);
- $this->view->att = $sth->fetch();
- }
-
- return true;
- }//ac == upload
-
- //改变状态
- if($ac == "changestatus")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $project = $this->_getParam('p');
- $status = $this->_getParam('s');
-
- if(!is_numeric($status))
- {
- $this->jsonexit(array('error'=>'参数错误'));
- return true;
- }
-
- $code = $heihe->ChangeStatus($project,$status);
-
- if($code > 0)
- {
- $this->jsonexit(
- array(
- 'msg'=>'修改成功!',
- 'status'=>$heihe->getStatus($status)
- )
- );
- return true;
- }else{
- $this->jsonexit(array('error'=>'参数错误'));
- return true;
- }
-
- }//ac == "changestatus"
-
- }//projectsAction()
-
- public function fundAction()
- {
- $this->_helper->layout->setLayout('administry');
- $ac = $this->_getParam('ac');
- $submit = $this->_getParam('submit');
- $this->view->q = $keyword = $this->_getParam('q');
-
- include_once("helper/view.php");
- include_once("data/Fund.php");
- $fund = new Fund($this->db);
-
- $auth = Zend_Auth::getInstance();
- if($auth->hasIdentity())
- {
- $user = $auth->getIdentity();
- $uid = $user->id;
- }
-
- if($ac=='index' || empty($ac))
- {
- $uuid = $this->_getParam('uuid');
- if(empty($uuid))
- {
- $rows = $fund->fetch(NULL,true,0,$keyword);
- view::addPaginator($rows,$this,10);
- }else{
- include('data/Metadata.php');
- $md = new Metadata($this->db);
- $this->view->md = $md->view($uuid);
- $rows = $fund->fetch($uuid);
- view::addPaginator($rows,$this,10);
- }
- return true;
- }
-
- if($ac == 'datalist')
- {
- $this->_helper->viewRenderer('fund-data-list');
- $this->view->q = $q = $this->_getParam('q');
- $rows = $fund->fetchFromData(true,0,$q);
- view::addPaginator($rows,$this,10);
- return true;
- }
-
- if($ac == 'dataview')
- {
- $this->_helper->viewRenderer('fund-data-view');
- $this->view->q = $q = $this->_getParam('q');
- $id = $this->_getParam('id');
- $this->view->fund = $fund->view($id);
- $rows = $fund->fetchFromData($id,0,$q);
- view::addPaginator($rows,$this,10);
- return true;
- }
-
- if($ac == "add")
- {
- $this->_helper->viewRenderer('fund-add');
- if(!empty($submit))
- {
- $data = $fund->_getParams($this->_request);
- $data['userid'] = $uid;
-
- if($fund->add($data) == true)
- {
- $this->view->AlertType = "alert-success";
- $this->view->msg = "添加成功!";
- $this->view->jump_url = "/admin/data/fund/";
- return true;
- }else{
- $this->view->data = $data;
- $this->view->error = "添加失败,请重试";
- return true;
- }
- }
- return true;
- }//add
-
- if($ac == "edit")
- {
- $this->_helper->viewRenderer('fund-add');
- $id = $this->_getParam('id');
-
- if(empty($id))
- {
- $this->view->AlertType = "alert-error";
- $this->view->msg = "参数错误";
- $this->view->jump_url = "/admin/data/fund/";
- }
-
- if(!empty($submit))
- {
- $data = $fund->_getParams($this->_request);
- $data['userid'] = $uid;
- if($fund->update($data,$id) == true)
- {
- $this->view->AlertType = "alert-success";
- $this->view->msg = "修改成功!";
- $this->view->jump_url = "/admin/data/fund/";
- return true;
- }else{
- $this->view->data = $data;
- $this->view->error = "修改失败,请重试";
- return true;
- }
- }else{
- $this->view->data = $fund->view($id);
- }
- return true;
- }//edit
-
- if($ac == "del")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('id');
-
- if(empty($id))
- {
- $this->jsonexit(array('error'=>'参数错误'));
- return true;
- }
-
- if($fund->delete($id) == true)
- {
- $this->jsonexit(array('success'=>$id));
- return true;
- }else{
- $this->jsonexit(array('error'=>'删除失败'));
- return true;
- }
-
- }//del
-
- if($ac == "formd")
- {
- $uuid = $this->_getParam('uuid');
-
- if(empty($uuid))
- {
- $this->view->AlertType = "alert-error";
- $this->view->msg = "参数错误";
- $this->view->jump_url = "/admin/data/fund/";
- }
-
- $id = $this->_getParam('id');
- $order = $this->_getParam('order');
-
- if(!empty($id))
- {
- if($fund->addToMdfund($uuid,$id,$order))
- {
- $this->view->AlertType = "alert-success";
- $this->view->error = "添加成功!可以继续选择并添加";
- }else{
- $this->view->AlertType = "alert-error";
- $this->view->error = "添加失败!该数据可能已被添加";
- }
- }
-
- $mfid = $this->_getParam('mfid');
-
- if(!empty($mfid))
- {
- if($fund->changeorder($mfid,$order))
- {
- $this->view->AlertType = "alert-success";
- $this->view->error = "排序修改成功!";
- }else{
- $this->view->AlertType = "alert-error";
- $this->view->error = "排序修改失败!";
- }
- $rows = $fund->fetch($uuid);
- }else{
- $this->view->ct = "ct";
- $rows = $fund->fetch($uuid,false,0,$this->_getParam('q'));
- }
-
- include('data/Metadata.php');
- $md = new Metadata($this->db);
- $this->view->md = $md->view($uuid);
-
- view::addPaginator($rows,$this,10);
-
- return true;
- }//formd
-
- if($ac == "mdfunddel")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('id');
-
- if(empty($id))
- {
- $this->jsonexit(array('error'=>'参数错误'));
- return true;
- }
-
- if($fund->mfdelete($id) == true)
- {
- $this->jsonexit(array('success'=>$id));
- return true;
- }else{
- $this->jsonexit(array('error'=>'删除失败'));
- return true;
- }
- }//mdfunddel
-
- if($ac == "data")
- {
- $this->_helper->viewRenderer('fund-data');
-
- $id = $this->_getParam('id');
- $del = $this->_getParam('del');
- $this->view->info = $fund->view($id);
-
- if(!empty($del))
- {
- $s = $fund->dataRelationDelete($del);
- if($s)
- {
- $this->view->error = view::Error("删除成功!","alert-sccuess");
- }else{
- $this->view->error = view::Error("删除失败!","alert-error");
- }
- }
-
- $rows = $fund->getData($id,$keyword);
- view::addPaginator($rows,$this,10);
- }
-
- }//fund
-
- public function doiAction()
- {
- $ac = $this->_getParam('ac');
- $submit = $this->_getParam('submit');
- $uuid = $this->_getParam('uuid');
- $q=$this->_getParam('q');
-
- include_once("data/Doi.php");
- $doi = new Doi($this->db);
- include_once("helper/view.php");
-
- if( empty($ac) || $ac == "index")
- {
- if(empty($uuid))
- {
- $rows = $doi->fetch(0,$q);
- view::addPaginator($rows,$this,10);
- }else{
- $this->_redirect('/admin/data/doi/ac/edit/?uuid='.$uuid);
- return true;
- }
- return true;
- }//index
-
- else if($ac == "add")
- {
- $this->_helper->viewRenderer('doi-add');
-
- }//add
-
- else if($ac == "edit")
- {
- $this->_helper->viewRenderer('doi-add');
- $id = $this->_getParam('id');
- if(empty($uuid) && empty($id))
- {
- view::Msg('alert-error',"参数错误",-1);
- return false;
- }
-
- if(empty($submit)){
- if(!empty($uuid))
- {
- $this->view->uuid = $uuid;
- $this->view->data = $doi->view($uuid);
- include('data/Metadata.php');
- $md = new Metadata($this->db);
- $metadata = $md->view($uuid);
- if(empty($this->view->data))
- {
- $this->view->data = array(
- 'uuid'=>$uuid,
- 'title'=>$metadata['title'],
- 'doi'=>$metadata['doi'],
- 'url'=>"http://" . $_SERVER['HTTP_HOST'].'/data/'.$uuid,
- 'publisher'=>'寒区旱区科学数据中心',
- 'title_en'=>$metadata['title_en'],
- 'publisher_en'=>'Cold and Arid Regions Science Data Center at Lanzhou',
- );
- }else{
- $this->view->data['doi'] = $metadata['doi'];
- $this->view->data['info'] = $doi->data_process_out($this->view->data);
- if(empty($this->view->data['ts_published']))
- {
- $this->view->data['title'] = $metadata['title'];
- $this->view->data['title_en'] = $metadata['title_en'];
- }
- }
- }else{
- $this->view->data = $doi->view($uuid);
- $this->view->data['info'] = $doi->data_process_out($this->view->data);
- }
- }else{
- $data = $doi->_getParams($this->_request);
- $this->view->data = $data;
- $info = $doi->checkinfo($data['info']);
- if(!is_array($info)){
- $this->view->error = view::Error($info);
- return true;
- }else{
- $data['info'] = $info;
- $data['info'] = $doi->sksort($data['info'],"order",SORT_ASC);
- }
- $state = $doi->update($data,$uuid);
- if($state)
- {
- $this->view->msg = view::Msg('alert-success',"修改成功!",'/admin/data/doi/uuid/'.$uuid);
- return false;
- }else{
- $this->view->error = view::Error("修改失败");
- return false;
- }
- }
- }//edit
-
- else if($ac == "del")
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
-
- $id = $this->_getParam('id');
-
- if(empty($id))
- {
- $this->jsonexit(array('error'=>'参数错误'));
- return true;
- }
-
- if($doi->delete($id) == true)
- {
- $this->jsonexit(array('success'=>$id));
- return true;
- }else{
- $this->jsonexit(array('error'=>'删除失败'));
- return true;
- }
-
- }//del
- else if ($ac=="convert") //转换为chinadoi所需元数据格式
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
- $sql="select d.*,m.description from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid='$uuid'";
- $row=$this->db->fetchRow($sql);
- $timestamp=date('YmdHis');
- $authors=explode(',',substr($row['authors'],1,-1));
- $orgs=explode(',',substr($row['organization'],1,-1));
- $doi='
-
- '.$timestamp.'
- '.$timestamp.'
-
- ISTIC
- tuy@istic.ac.cn
-
- ISTIC
-
-
-
-
- ';
- foreach($authors as $k=>$v)
- {
- $doi.=''.$v.' ';
- $doi.=''.$orgs[$k].' ';
- }
- $doi.='
-
-
-
- ';
- $doi.=' ';
- $doi.=''.$row['publisher'].' ';
- $doi.='
- '.$row['doi'].'
- '.$timestamp.'
-
- ';
- $doi.='
-
-
- ';
- $this->getResponse()->setHeader('Content-Type', 'text/xml')->setHeader('Content-Disposition','attachment; filename="'.$row['uuid'].'.xml"')
- ->setHeader('Content-Type','application/force-download')->setBody($doi);
- $this->db->query('update datadoi set ts_submitted=now() where uuid=?',array($uuid));
- }
- else if ($ac=="verified") //成功申请
- {
- $this->_helper->layout->disableLayout();
- $this->_helper->viewRenderer->setNoRender();
- $row=$this->db->fetchRow("select * from datadoi where uuid='$uuid'");
- $content=@file_get_contents("http://dx.doi.org/".$row['doi']);
- if (strpos($content,$row['doi'])!==false) //成功申请
- {
- $sql="update datadoi set ts_published=now() where uuid=? and ts_published is null";
- $this->db->query($sql,array($uuid));
- $this->jsonexit(array('success'=>'成功申请'));
- } else
- $this->jsonexit(array('success'=>'该DOI验证失败,请检查!'));
- return true;
- }
- }//doi
-
- //发送邀请专家的邮件
- public function sendMailToExpert($pid,$name,$email,$code,$test=0)
- {
- include_once("Heihe.php");
- $heihe = new Heihe($this->db);
- $url = $heihe->makeInviteLink($pid,$code);
-
- include_once("EmailText.php");
- $mailtp=new EmailText($this->db,"expert-invite",array(
- 'name' => $name,
- 'url' => $url,
- ));
-
- echo $mailtp->getBody();
- echo $mailtp->getSubject();
- if($test == 0)
- {
- include_once("WestdcMailer.php");
- $mail=new WestdcMailer($this->view->config->smtp);
- $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
- $mail->setBodyText($mailtp->getBody());
- $mail->setSubject($mailtp->getSubject());
- $mail->addTo($email);
- $mail->send();
- }else{
- $mail_config = array(
- 'ssl' => 'ssl',
- 'port' => 465,
- 'auth' => 'login',
- 'username' => 'la5c@qq.com',
- 'password' => ''
- );
- $transport = new Zend_Mail_Transport_Smtp('smtp.qq.com', $mail_config);
- Zend_Mail::setDefaultTransport($transport);
-
- $mail=new Zend_Mail();
- $mail->setBodyText($mailtp->getBody());
- $mail->setFrom('la5c@qq.com','Jack');
- $mail->addTo("la5c@qq.com");
- $mail->setSubject($mailtp->getSubject());
- $mail->send();
- }
- }//发送邀请邮件
-
- /*
- 获得单个文件的信息
- return array row
- */
- public function getFileinfo($id){
- $sql = "select * from attachments where id='$id'";
- $re= $this->db->query($sql);
- $row= $re->fetch();
- return $row;
- }
-
- /*
- * 保存XML数据到数据库
- */
- private function import($xml)
- {
- $iso=new ISO19115();
- $iso->saveDB($this->db,$xml);
- }
-
- /*
- * jsonexit() 退出并返回json数据
- *
- * param array $data 要返回的JSON数据,可以是任意数组
- *
- * return JSON-response
- */
- public function jsonexit($data){
- $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
- return true;
- }//jsonexit() 退出并返回json数据
-}
+db=Zend_Registry::get('db');
+ $this->view->config = Zend_Registry::get('config');
+ $this->messenger=$this->_helper->getHelper('FlashMessenger');
+ $this->view->messages = $this->messenger->getMessages();
+ $this->debug = 0; //1:debug, 0:release
+ $this->debug_email='wangliangxu@lzb.ac.cn';
+ $this->view->theme = new Theme();
+ $this->_helper->layout->setLayout('administry');
+ }
+ function postDispatch()
+ {
+ $this->view->messages = $this->messenger->getMessages();
+ }
+ function indexAction()
+ {
+ //其他连接
+ }
+
+ //提供和GEONETWORK中的元数据的同步功能
+ //提供双向同步功能,但只处理ISO 19115格式的元数据?
+ function syncAction()
+ {
+ set_time_limit(0);
+ $sql="select * from (select count(*) as westdccount from metadata) as t1,(select count(uuid) as gncount from geonetworkmetadata where schemaid='iso19115') as t2";
+ $this->db->setFetchMode(Zend_Db::FETCH_OBJ);
+ $this->view->mdcount=$this->db->fetchRow($sql);
+ $source=$this->_request->getParam('source');
+ $delete=$this->_request->getParam('delete');
+ $thumb=$this->_request->getParam('thumb');
+ $list=$this->_request->getParam('list');
+ $adminuser=$this->_request->getParam('adminuser');
+ $uuid=trim($this->_request->getParam('uuid'));
+ if ($source=="geonetwork" && empty($uuid) ) {
+ //从geonetwork向WESTDC同步
+ //对所有的新数据增加评审状态
+ $sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
+ from geonetworkmetadata gn where uuid not in (select uuid from mdstatus)";
+ $userid = Zend_Auth::getInstance()->getIdentity()->id;
+ $this->db->query($sql,array($userid));
+ $sql="select uuid,data,source from geonetworkmetadata where schemaid='iso19115'";
+ $rs=$this->db->fetchAll($sql);
+ foreach($rs as $gmd) {
+ $this->import($gmd->data);
+ $this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
+ }
+ $this->view->msg='成功同步元数据!';
+ } elseif ($source=="watergn" && empty($uuid) ) {
+ //首先删除所有的黑河试验数据
+ //$sql="delete from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'";
+ $sql="delete from metadata where uuid in (select uuid from watergn)";
+ $this->db->query($sql);
+ $sql="delete from responsible where id not in (select distinct(resid) from role)";
+ $this->db->query($sql);
+ //对所有的新数据增加评审状态
+ $sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
+ from watergn where uuid not in (select uuid from mdstatus)";
+ $userid = Zend_Auth::getInstance()->getIdentity()->id;
+ $this->db->query($sql,array($userid));
+ //同步黑河遥感实验的元数据
+ $sql="select uuid,data,source from watergn where schemaid='iso19115'";
+ $rs=$this->db->fetchAll($sql);
+ foreach($rs as $gmd) {
+ $this->import($gmd->data);
+ $this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
+ }
+ $this->view->msg='成功同步黑河遥感综合实验元数据!';
+ }elseif ($source=="glacier" && empty($uuid) ) {
+ //首先删除所有的对应专题数据
+ $sql="delete from metadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='glacier')";
+ $this->db->query($sql);
+ $sql="delete from responsible where id not in (select distinct(resid) from role)";
+ $this->db->query($sql);
+ //对所有的新数据增加评审状态
+ /*$sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
+ from watergn where uuid not in (select uuid from mdstatus)";
+ $userid = Zend_Auth::getInstance()->getIdentity()->id;
+ $this->db->query($sql,array($userid));*/
+ //同步专题元数据
+ $sql="select uuid,data,source from geonetworkmetadata where schemaid='iso19115' and uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='glacier')";
+ $rs=$this->db->fetchAll($sql);
+ foreach($rs as $gmd) {
+ $this->import($gmd->data);
+ //source in unused now.
+ //$this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
+ }
+ $this->view->msg='成功同步专题元数据!';
+ } elseif ($source=="westdc" && empty($uuid) ) {
+ //从westdc向geonetwork同步
+ $sql="select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid not in (select uuid from geonetworkmetadata)";
+ $rs=$this->db->fetchAll($sql);
+ foreach($rs as $gmd) {
+ $sql="insert into geonetworkmetadata (uuid,source,data) values('".$gmd->uuid."','".$gmd->source."',".$this->db->quote($gmd->data).")";
+ $this->db->exec($sql);
+ }
+ $sql="select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid in (select uuid from geonetworkmetadata)";
+ $rs=$this->db->fetchAll($sql);
+ foreach($rs as $gmd) {
+ $sql="update geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
+ $this->db->exec($sql);
+ }
+ $this->view->msg='成功同步WESTDC元数据到GEONETWORK!';
+ } elseif (!empty($uuid) && isset($_POST['gnsubmit'])) {
+ //同步单条元数据到geonetwork
+ $sql=$this->db->quoteInto("select m.uuid,m.source,x.data,g.id from metadata m left join xml x on m.id=x.id left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=?",$uuid);
+ if ($gmd=$this->db->fetchRow($sql)) {
+ if (!empty($gmd->id)) {
+ $sql="update geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
+ } else {
+ $sql="insert into geonetworkmetadata (uuid,source,data) values('".$gmd->uuid."','".$gmd->source."',".$this->db->quote($gmd->data).")";
+ }
+ $this->db->exec($sql);
+ $this->view->msg='成功同步元数据:'.$uuid;
+ } else $this->view->msg='不存在此元数据:'.$uuid;
+ } elseif (!empty($uuid) && isset($_POST['watersubmit'])) {
+ //同步单条元数据
+ $sql=$this->db->quoteInto("select data,source from watergn where uuid=?",$uuid);
+ if ($rs=$this->db->fetchRow($sql)) {
+ $this->import($rs->data);
+ $this->db->query("update metadata set source=? where uuid=?",array($rs->source,$uuid));
+ $this->view->msg='成功同步元数据:'.$uuid;
+ } else $this->view->msg='不存在此元数据:'.$uuid;
+ } elseif ($list=='westdc') {
+ $sql="select uuid,title from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
+ $this->view->metadata=$this->db->query($sql);
+ } elseif ($list=='geonetwork') {
+ $sql="select id,uuid,(regexp_matches(data,'(.*) '))[1] as title from geonetworkmetadata
+ where uuid not in (select uuid from metadata)";
+ $this->view->metadata=$this->db->query($sql);
+ } elseif ($delete=='westdc') {
+ $sql="delete from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
+ $this->db->query($sql);
+ $this->view->msg='已删除WESTDC中多出的元数据!';
+ } elseif ($delete=='geonetwork') {
+ //dblink view中删除多条有问题,暂时用单条删除替代
+ //$sql="delete from geonetworkmetadata where uuid not in (select uuid from metadata)";
+ $sql="select uuid from geonetworkmetadata where uuid not in (select uuid from metadata)";
+ $rows=$this->db->fetchAll($sql);
+ foreach($rows as $row)
+ {
+ $this->db->exec($this->db->quoteInto("delete from geonetworkmetadata where uuid=?",$row->uuid));
+ }
+ $this->view->msg='已删除GEONETWORK中多出的元数据!';
+ } elseif ($delete=='water') {
+ $sql="delete from metadata where uuid not in (select uuid from watergn where schemaid='iso19115') and uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
+ $this->db->query($sql);
+ $this->view->msg='已删除WESTDC中多出的元数据!';
+ } elseif ($thumb=='geonetwork') {
+ $sql="select g.id as gid,m.uuid,t.* from thumbnail t left join metadata m on t.id=m.id left join geonetworkmetadata g on m.uuid=g.uuid where t.filetype is not null and t.filename is not null";
+ $rows=$this->db->fetchAll($sql);
+ foreach($rows as $row) {
+ $data=file_get_contents($this->view->config->geonetwork->url.'srv/cn/resources.get?access=public&id='.$row->gid.'&fname='.urlencode($row->filename));
+ $sql="update thumbnail set data=? where id=?";
+ $this->db->query($sql,array(base64_encode($data),$row->id));
+ }
+ $this->view->msg='已成功同步缩略图!';
+ } elseif ($thumb=='water') {
+ $sql="select g.id as gid,m.uuid,t.* from watergn g left join metadata m on m.uuid=g.uuid left join thumbnail t on t.id=m.id where t.filetype is not null and t.filename is not null";
+ $rows=$this->db->fetchAll($sql);
+ foreach($rows as $row) {
+ $data=file_get_contents($this->view->config->watergeonetwork->url.'srv/cn/resources.get?access=public&id='.$row->gid.'&fname='.urlencode($row->filename));
+ $sql="update thumbnail set data=? where id=?";
+ $this->db->query($sql,array(base64_encode($data),$row->id));
+ }
+ $this->view->msg='已成功同步缩略图!';
+ } elseif ($adminuser=='geonetwork') {
+ $sql="select id,username,password,email from users";
+ $rows=$this->db->fetchAll($sql);
+ foreach($rows as $row) {
+ $sql="select * from geonetworkusers where id=?";
+ $r=$this->db->fetchRow($sql,array($row->id));
+ if ($r) {
+ $sql="update geonetworkusers set username='$row->username',password=encode(digest(md5('$row->password'),'sha1'),'hex'),email='$row->email' where id=$row->id";
+ $this->db->query($sql);
+ } else {
+ $sql="insert into geonetworkusers (id,username,password,email) values($row->id,'$row->username',encode(digest(md5('$row->password'),'sha1'),'hex'),'$row->email')";
+ $this->db->query($sql);
+ }
+ }
+ $this->view->msg='已成功同步帐号!';
+ } elseif (!empty($uuid) && (isset($_POST['submit']) || (!isset($_POST['gnsubmit']) && !isset($_POST['watersubmit'])))) {
+ //同步单条元数据
+ $sql=$this->db->quoteInto("select data,source from geonetworkmetadata where uuid=?",$uuid);
+ if ($rs=$this->db->fetchRow($sql)) {
+ $this->import($rs->data);
+ $this->db->exec($this->db->quoteInto("update metadata set source=? where uuid='$uuid'",$rs->source));
+ $userid = Zend_Auth::getInstance()->getIdentity()->id;
+ $this->db->query("insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
+ from geonetworkmetadata gn where uuid not in (select uuid from mdstatus) and uuid=?",array($userid,$uuid));
+ $this->view->msg='成功同步元数据:'.$uuid;
+ //update search document
+ $search=new Search();
+ $sql="select * from xunsearch where uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->setFetchMode(Zend_Db::FETCH_ASSOC);
+ $sth->execute(array($uuid));
+ $data = $sth->fetch();
+ $search->update($data);
+
+ } else $this->view->msg='不存在此元数据:'.$uuid;
+ }
+ }
+
+ function datasetcdAction()
+ {
+ $add=(int)$this->_getParam('add');
+ $edit=(int)$this->_getParam('edit');
+ $delete=(int)$this->_getParam('delete');
+ set_time_limit(0);
+ if ($add) {
+ $form=new DatasetcdForm();
+ $form->img->setRequired(true);
+ $form->document->setRequired(true);
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $uploadedData = $form->getValues();
+ $img = '/'.$form->img->getFileName();
+ $document='/'.$form->document->getFileName();
+ $sql="insert into datasetcd (title,size,uuid,img,document,descript) values(?,?,?,?,?,?)";
+ $this->db->query($sql,array($formdata['title'],$formdata['size'],$formdata['uuid'],$img,$document,$formdata['descript']));
+ $this->messenger->addMessage('提示信息:您已经成功添加该特色数据集。');
+ $this->_redirect('/admin/data/datasetcd');
+ } else {
+ $form->populate($formdata);
+ }
+ }
+ $this->view->form=$form;
+ $this->_helper->viewRenderer('datasetcdadd');
+ } elseif ($edit){
+ $form=new DatasetcdForm();
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $uploadedData = $form->getValues();
+ $img = '/'.$form->img->getFileName();
+ $document='/'.$form->document->getFileName();
+ $sql="update datasetcd set title=?,size=?,uuid=?,";
+ if ($form->img->isUploaded()) $sql.="img=?,";
+ if ($form->document->isUploaded()) $sql.="document=?,";
+ $sql.="descript=? where id=?";
+ $param=array($formdata['title'],$formdata['size'],$formdata['uuid']);
+ if ($form->img->isUploaded()) $param[]=$img;
+ if ($form->document->isUploaded()) $param[]=$document;
+ $param[]=$formdata['descript'];
+ $param[]=$edit;
+ $this->db->query($sql,$param);
+ $this->messenger->addMessage('提示信息:您已经编辑添加该特色数据集。');
+ $this->_redirect('/admin/data/datasetcd');
+ } else {
+ $form->populate($formdata);
+ }
+ } else {
+ $sql="select * from datasetcd where id=?";
+ $formdata=$this->db->fetchRow($sql,array($edit));
+ $form->populate($formdata);
+ }
+ $this->view->form=$form;
+ $this->_helper->viewRenderer('datasetcdadd');
+
+ } elseif ($delete) {
+ $sql="delete from datasetcd where id=?";
+ try {
+ $this->db->query($sql,array($delete));
+ $this->messenger->addMessage('提示信息:您已经成功删除该特色数据集。');
+ } catch (Exception $e) {
+ $this->messenger->addMessage($e->getMessage());
+ }
+ $this->_redirect("/admin/data/datasetcd");
+ }
+ $select=$this->db->select();
+ $select->from('datasetcd')->order('id desc');
+ $paginator = Zend_Paginator::factory($select);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage($this->view->config->page->max);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+ }
+
+ /*
+ *
+ * mdAction()
+ * 元数据管理
+ *
+ */
+ function mdAction()
+ {
+ $delete=$this->_getParam('delete');
+ $down=(int)$this->_getParam('down');
+ $search = $this->_getParam('search');
+ $keyword = $this->_getParam('keyword');
+ $att=$this->_getParam('att');
+ $attupdate = $this->_getParam('attupdate');
+
+
+ if ($delete)
+ {
+ $sql="delete from metadata where uuid=?";
+ try {
+ $this->db->query("delete from mdstatus where uuid=?",array($delete));
+ $this->db->query("delete from mdauthor where uuid=?",array($delete));
+ $this->db->query($sql,array($delete));
+ $this->messenger->addMessage('提示信息:您已经成功删除该数据。');
+ $search=new Search();
+ $search->del($delete,'uuid');
+ } catch (Exception $e) {
+ $this->messenger->addMessage($e->getMessage());
+ }
+ $this->_redirect("/admin/data/md");
+ }//删除
+
+ elseif($att>0){
+ $submit=$this->_request->getParam('submit');
+ $uuid=$this->_request->getParam('uuid');
+ $atts=$this->_request->getParam('ids');
+ $addatts=$this->_request->getParam('addatts');
+
+ $this->view->id = $att;
+ $this->view->uuid = $uuid;
+
+ if(!empty($addatts))
+ {
+
+ if(empty($submit))
+ {
+ $sql = "select title from metadata where uuid='$uuid'";
+ $re = $this->db->query($sql);
+ $rows = $re->fetch();
+
+
+ $this->view->id = $att;
+ $this->view->uuid = $uuid;
+ $this->view->mdtitle = $rows['title'];
+ $this->view->thisatt = $rows;
+
+ $this->_redirect("/admin/data/attachments/uuid/$uuid/mdtitle/{$rows['title']}");
+ }
+ else
+ {
+ if(!empty($uuid))
+ {
+ foreach($atts as $v)
+ {
+ $sql = "insert into mdattach (uuid,id) values ('$uuid','$v')";
+ try{
+ $this->db->exec($sql);
+ $this->messenger->addMessage('成功添加附件:'.$v);
+ }catch (Exception $e)
+ {
+ $this->messenger->addMessage('添加附件失败:'.$v);
+ }
+ }
+ $this->_redirect("/admin/data/md/att/1/uuid/$uuid");
+ }
+ }
+ }//empty($addatts)
+ else
+ {
+ if(!empty($uuid))
+ {
+
+ $sql = "select m.*,a.*,d.title from mdattach m
+ left join attachments a on m.id = a.id
+ left join metadata d on m.uuid=d.uuid where m.uuid='$uuid'";
+ $re = $this->db->query($sql);
+
+ $rows = $re->fetchAll();
+
+ $sql = "select title from metadata where uuid='$uuid'";
+ $re = $this->db->query($sql);
+ $title = $re->fetch();
+
+ $this->view->atts=$rows;
+ $this->view->mdtitle = $title['title'];
+
+ $this->_helper->viewRenderer('attmanager');
+ }
+
+
+ }
+
+ }//编辑附件
+
+ /*
+ * 输出打包下载的xml文件
+ *
+ * 文件量大时可能出现超时,需要修改超时时间为无限
+ */
+ elseif ($down) {
+
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ //临时zip文件名
+ $tmpname="dataxml";
+
+ //xml文件存放的缓存目录
+ $dirName = '../data/import/';
+
+ //查询需要创建的文件
+ $sql = "SELECT md.title,md.uuid,x.* from xml x
+ LEFT JOIN normalmetadata md ON md.id=x.id";
+
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll(); //将结果储存,但不使用
+
+ //创建zip文件,创建成功后再使用查询结果
+ $zip = new ZipArchive();
+ $url = tempnam($this->config->temp->path,$tmpname);//创建临时文件
+
+ if( $zip->open($url, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true )
+ {
+ throw new Exception("cannot open {$url} for writing.");
+ }
+
+ foreach($rows as $k=>$v)
+ {
+
+ $filename = $dirName.$v['uuid'].'.xml';
+
+ //创建xml文件
+ $handle = fopen($filename,"w");
+ fwrite($handle,$v['data']);
+ fclose($handle);
+
+ //添加到zip文件
+ //zip localname 直接使用UUID作为文件名
+ $zip->addFile($filename,$v['uuid'].".xml");
+
+ }
+ $zip->close();
+
+ //zip文件创建完成后删除服务器上的缓存文件,防止发生冗余
+ foreach($rows as $k=>$v)
+ {
+ $filename = $dirName.$v['uuid'].'.xml';
+ unlink($filename);
+ }
+
+ //输出下载
+ $content=file_get_contents($url);
+ $this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
+ ->setHeader('Content-Disposition','attachment; filename="dataxml.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);
+ }//down
+ else if($search){
+
+ if(!empty($keyword))
+ {
+ $sql = "select m.*,md.viewed,g.id as gid, ds.id as datasetid from metadata m
+ left join mdstat md on m.uuid=md.uuid
+ left join geonetworkmetadata g on g.uuid=m.uuid
+ left join dataset ds on m.uuid=ds.uuid
+ where m.title like '%$keyword%'
+ order by m.id desc
+ ";
+
+ $re=$this->db->query($sql);
+ $row=$re->fetchAll();
+ $paginator = Zend_Paginator::factory($row);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage($this->view->config->page->max);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ $this->messenger->addMessage($keyword.' 的搜索结果');
+ }
+ else
+ {
+ $this->messenger->addMessage('请输入搜索关键字');
+ $this->_redirect("/admin/data/md");
+ }
+
+ }//search
+ else{
+
+ $sql = "SELECT md.*,s.viewed,g.id as gid,st.status as mdstatus,ds.id as datasetid FROM metadata md
+ LEFT JOIN mdstat s ON md.uuid=s.uuid
+ LEFT JOIN geonetworkmetadata g ON g.uuid=md.uuid
+ LEFT JOIN mdstatus st ON md.uuid=st.uuid
+ LEFT JOIN dataset ds ON md.uuid=ds.uuid
+ ORDER BY md.id DESC";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage($this->view->config->page->max);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+ }
+
+ }//mdAction 元数据管理
+
+ /*
+ * datasetAction()
+ * 数据路径:即数据的物理主目录
+ *
+ */
+ function datasetAction()
+ {
+
+ $ac = $this->_request->getParam('ac');
+
+ if($ac == "getdataset")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer('md-dataset');
+
+ $uuid = $this->_request->getParam('uuid');
+ $sql = "SELECT * FROM dataset WHERE uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth ->execute(array($uuid));
+ $row = $sth->fetch();
+
+ $this->view->dataset = $row;
+ $this->view->uuid = $uuid;
+ }
+
+ else if($ac == "update")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $uuid = $this->_request->getParam('uuid');
+ $host = $this->_getParam('host');
+ $path = $this->_getParam('path');
+
+ $sql = "UPDATE dataset SET host=?,path=? WHERE uuid=?";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth ->execute(array($host,$path,$uuid));
+ if ($host=='ftp1.westgis.ac.cn')
+ {
+ file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
+ } else if ($host=='ftp.sanjiangyuan.org.cn')
+ {
+ file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
+ }
+
+ if($ds)
+ {
+ $data = array("ok"=>1);
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ else if($ac == "add")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $uuid = $this->_request->getParam('uuid');
+ $host = $this->_getParam('host');
+ $path = $this->_getParam('path');
+
+ $sql = "SELECT * FROM dataset WHERE uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth ->execute(array($uuid));
+ $row = $sth->fetch();
+ if(!empty($row['id']))
+ {
+ $data = array("error"=>"该数据已经有存档信息,不能重复添加");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $sql = "INSERT INTO dataset (uuid,host,path) VALUES (?,?,?)";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth ->execute(array($uuid,$host,$path));
+ if ($host=='ftp1.westgis.ac.cn')
+ {
+ file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
+ } else if ($host=='ftp.sanjiangyuan.org.cn')
+ {
+ file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
+ }
+
+ if($ds)
+ {
+ $data = array("ok"=>1);
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+ else if ($ac=="import")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $uuid = $this->_request->getParam('uuid');
+ $sql = "SELECT * FROM dataset WHERE uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth ->execute(array($uuid));
+ $row = $sth->fetch();
+
+ if ($row['host']=='ftp1.westgis.ac.cn')
+ {
+ file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
+ echo '数据目录成功导入! ';
+ } else if ($row['host']=='ftp.sanjiangyuan.org.cn')
+ {
+ file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
+ echo '数据目录成功导入! ';
+ } else {
+ echo '数据目录未导入! ';
+ }
+ }
+
+ }//datasetAction存档管理
+
+ /*
+ * commentAction()
+ * 反馈管理
+ * ALTER TABLE comments ADD COLUMN reply integer NOT NULL DEFAULT 0;
+ */
+ function commentAction()
+ {
+ $delete=(int)$this->_getParam('delete');
+ $uuid = $this->_getParam('uuid');
+ $reply = $this->_getParam('reply');
+ $replylist = $this->_getParam('replylist');
+ $delreply = $this->_getParam('delreply');
+
+ if ($delete)
+ {
+ $sql="delete from comments where id=?";
+ try {
+ $this->db->query($sql,array($delete));
+ $this->messenger->addMessage('提示信息:您已经成功删除该评论。');
+ } catch (Exception $e) {
+ $this->messenger->addMessage($e->getMessage());
+ }
+ $this->_redirect("/admin/data/comment");
+ }
+
+ if($reply)
+ {
+
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $body = $this->_getParam('content');
+ if(empty($body))
+ {
+ $data = array('error'=>"请输入回复内容");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $uid = $user->id;
+ $email = $user->email;
+ }
+
+ $ipaddr = $_SERVER['REMOTE_ADDR'];
+
+ $sql = "INSERT INTO comments (uuid,author,reply,userid,content,email,ip) VALUES (?,?,?,?,?,?,?)";
+ $sth = $this->db->prepare($sql);
+ $rs = $sth->execute(array($uuid,$user->username,$reply,$uid,$body,$email,$ipaddr));
+
+ if($rs)
+ {
+ $sql="select c.author,c.email,c.uuid from comments c where c.id=?";
+ $sth=$this->db->prepare($sql);
+ $sth->execute(array($reply));
+ $row=$sth->fetch();
+
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"comment-admin-reply",array(
+ 'user' => $row['author'],
+ 'uuid' => $row['uuid'],
+ 'email'=> $row['email']
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ $mail->addTo($row['email']);
+ $mail->addCc($this->view->config->service->email);
+ @$mail->send();
+
+ $data = array('status'=>1,'msg'=>'回复成功!');
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array('error'=>"回复失败,请重试");
+ $this->jsonexit($data);
+ return true;
+ }
+ return true;
+ }
+
+ if($uuid)
+ {
+ $sql = "SELECT c.*,md.title,md.uuid FROM comments c
+ LEFT JOIN metadata md ON md.uuid=c.uuid
+ WHERE c.uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($uuid));
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage($this->view->config->page->max);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+
+ $sql = "SELECT title FROM metadata WHERE uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($uuid));
+ $row = $sth->fetch();
+
+ $this->view->title = $row['title'];
+
+ return true;
+ }
+
+ if($replylist)
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $sql = "SELECT cr.id,cr.content as body,cr.reply,u.username,cr.ts_created FROM comments cr
+ LEFT JOIN users u ON cr.userid=u.id WHERE cr.reply=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($replylist));
+ $rows = $sth->fetchAll();
+
+ $this->jsonexit($rows);
+ return true;
+
+ }
+
+ if($delreply)
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $sql = "DELETE FROM comments WHERE id=?";
+ $sth = $this->db->prepare($sql);
+ $rs = $sth->execute(array($delreply));
+
+ if($rs)
+ {
+ $this->jsonexit(
+ array('deleted'=>1)
+ );
+ return true;
+ }else{
+ $this->jsonexit(
+ array('error'=> '处理中出现错误,请重新尝试')
+ );
+ return true;
+ }
+
+
+ }
+
+
+ $sql = "SELECT cm.*,md.title,(SELECT count(id) as counts FROM comments cms WHERE cms.reply=cm.id AND cms.reply!=0) as reply_count FROM comments cm
+ LEFT JOIN metadata md ON md.uuid=cm.uuid
+ WHERE cm.reply=0
+ ORDER BY cm.ts_created DESC,cm.id DESC";
+
+ $sth = $this->db->query($sql);
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage($this->view->config->page->max);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+
+ }//comment
+
+
+ function newsletterAction()
+ {
+ $form=new Zend_Form();
+ $form->setName('newsletter');
+ $form->setAttrib('enctype', 'multipart/form-data');
+ $nlf=new Zend_Form_Element_File('nlf');
+ $nlf->setLabel('数据通讯')
+ ->setRequired(true)
+ ->setDestination($this->view->config->paths->newsletter)
+ ->addValidator('Count', false, 1) // ensure only 1 file
+ ->addValidator('Size', false, 2048000) // limit to 2M
+ ->addValidator('Extension', false, 'pdf'); // only JPEG, PNG, and GIFs
+ $submit = new Zend_Form_Element_Submit('submit');
+ $form->addElements(array($nlf,$submit));
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $uploadedData = $form->getValues();
+ //自动生成JPG文件
+ $pdf = $form->nlf->getFileName();
+ $img = new Imagick($pdf.'[0]');
+ $img->thumbnailImage(200, 0);
+ $img->writeImage($this->view->config->paths->newsletter.basename($pdf,'.pdf').'.jpg');
+ $this->messenger->addMessage('提示信息:您已经成功添加该数据通讯。');
+ $this->_redirect('/admin/data/newsletter');
+ }
+ }
+ $l=new mydir($this->view->config->paths->newsletter,"newsletter_*.pdf");
+ $this->view->newsletters=$l->toArray();
+ $this->view->addHelperPath('helper','Zend_View_Helper_');
+ rsort($this->view->newsletters);
+ $this->view->form=$form;
+ }
+ function featureAction()
+ {
+ $add=(int)$this->_getParam('add');
+ $edit=(int)$this->_getParam('edit');
+ $delete=(int)$this->_getParam('delete');
+ if ($add) {
+ $form=new DatafeatureForm();
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $uploadedData = $form->getValues();
+ if (!$form->imgurl) {
+ $imgurl = '/'.$form->img->getFileName();
+ } else
+ $imgurl=$formdata['imgurl'];
+ $sql="insert into datafeature (title,detailurl,imgurl,description) values(?,?,?,?)";
+ $this->db->query($sql,array($formdata['title'],$formdata['detailurl'],$imgurl,$formdata['description']));
+ $this->messenger->addMessage('提示信息:您已经成功添加该特色推荐。');
+ $this->_redirect('/admin/data/feature');
+ } else {
+ $form->populate($formdata);
+ }
+ }
+ $this->view->form=$form;
+ $this->_helper->viewRenderer('featureadd');
+ } elseif ($edit){
+ $form=new DatafeatureForm();
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $uploadedData = $form->getValues();
+ if (!$form->imgurl) {
+ $imgurl = '/'.$form->img->getFileName();
+ } else
+ $imgurl=$form->imgurl;
+ $sql="update datafeature set title=?,detailurl=?,imgurl=?,description=? where id=?";
+ $param=array($formdata['title'],$formdata['detailurl'],$formdata['imgurl'],$formdata['description'],$edit);
+ $this->db->query($sql,$param);
+ $this->messenger->addMessage('提示信息:您已经编辑该特色推荐。');
+ $this->_redirect('/admin/data/feature');
+ } else {
+ $form->populate($formdata);
+ }
+ } else {
+ $sql="select * from datafeature where id=?";
+ $formdata=$this->db->fetchRow($sql,array($edit));
+ $form->populate($formdata);
+ }
+ $this->view->form=$form;
+ $this->_helper->viewRenderer('featureadd');
+ } elseif ($delete) {
+ $sql="delete from datafeature where id=?";
+ try {
+ $this->db->query($sql,array($delete));
+ $this->messenger->addMessage('提示信息:您已经成功删除该特色推荐。');
+ } catch (Exception $e) {
+ $this->messenger->addMessage($e->getMessage());
+ }
+ $this->_redirect("/admin/data/feature");
+ }
+ $select=$this->db->select();
+ $select->from('datafeature')->order('id desc');
+ $paginator = Zend_Paginator::factory($select);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage($this->view->config->page->max);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+ }
+ /*
+ * 数据文献管理
+ */
+ function referenceAction()
+ {
+ $add=(int)$this->_getParam('add');
+ $edit=(int)$this->_getParam('edit');
+ $delete=(int)$this->_getParam('delete');
+ $uuid=$this->_getParam('uuid');
+ $search=$this->_getParam('search');
+ $keyword=$this->_getParam('keyword');
+ $import=(int)$this->_getParam('import');
+ $show = $this->_getParam('show');
+
+ if ($add) {
+ $type = $this->_getParam('type');
+ if($type == 'dc')
+ {
+ $this->_helper->viewRenderer('referenceadd');
+ $this->view->type = "dc";
+ }else{
+ $form=new ReferenceForm();
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $sql="select id from reference where reference=?";
+ $row=$this->db->fetchRow($sql,array(trim($formdata['reference'])));
+ if (!$row)
+ {
+ $sql="insert into reference (reference,link) values(?,?)";
+ $this->db->query($sql,array(trim($formdata['reference']),trim($formdata['link'])));
+ $sql="select id from reference where reference=?";
+ $row=$this->db->fetchRow($sql,array(trim($formdata['reference'])));
+ }
+ $sql="insert into mdref (uuid,refid,reftype) values(?,?,?)";
+ $this->db->query($sql,array(trim($formdata['uuid']),$row['id'],$formdata['reftype']));
+ $this->messenger->addMessage('提示信息:您已经成功添加该数据文献。');
+ $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
+ }else {
+ $form->populate($formdata);
+ }
+ } else {
+ if ($uuid)
+ {
+ $formdata['uuid']=$uuid;
+ $form->populate($formdata);
+ }
+ }
+ $this->view->form=$form;
+ $this->_helper->viewRenderer('referenceadd');
+ }
+ } //添加
+
+ else if($show){
+ $sql = "select mr.id as mdid,mr.refid,r.reference,md.title,md.uuid,mr.place FROM mdref mr
+ left join metadata md on md.uuid=mr.uuid
+ left join reference r on r.id=mr.refid
+ where mr.uuid='$show';
+ ";
+ $rs = $this->db->query($sql);
+ $rows = $rs->fetchAll();
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+
+ } //按UUID查看
+
+ elseif ($edit){
+ $form=new ReferenceForm();
+ if ($this->_request->isPost()) {
+ $formdata=$this->_request->getPost();
+ if ($form->isValid($formdata)) {
+ $sql="select id from reference where reference=? order by id desc";
+ $rs=$this->db->query($sql,array($formdata['reference']));
+ $row = $rs->fetch();
+ if ($row['id']!='')
+ {
+ //更新文献信息
+ $sql="update mdref set refid=?,reftype=? where uuid=? and id=?";
+ $td = $this->db->query($sql,array($row['id'],$formdata['reftype'],$formdata['uuid'],$edit));
+ $sql="update reference set reference=?,link=? where id=?";
+ $this->db->query($sql,array($formdata['reference'],$formdata['link'],$row['id']));
+ if($td)
+ {
+ $this->messenger->addMessage('提示信息:您已经编辑该数据文献。');
+ $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
+ }
+ }else
+ {
+ $sql = "INSERT INTO reference (reference,link) VALUES ('".$formdata['reference']."','".$formdata['link']."') RETURNING id";
+ $sth = $this->db->prepare($sql);
+ if($sth->execute())
+ {
+ $row = $sth->fetch(PDO::FETCH_ASSOC);
+ $sql="update mdref set refid=?,reftype=? where uuid=? and id=?";
+ $td = $this->db->query($sql,array($row['id'],$formdata['reftype'],$formdata['uuid'],$edit));
+ $this->messenger->addMessage('提示信息:您已经编辑该数据文献。');
+ $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
+ }else
+ {
+ $this->messenger->addMessage('提示信息:文献创建失败,请重试');
+ $this->_redirect('/admin/data/reference/edit/'.$edit);
+ }
+ }
+ } else {
+ $form->populate($formdata);
+ }
+ } else {
+ $sql="select m.uuid,r.reference,r.link,m.reftype from reference r left join mdref m on r.id=m.refid where m.id=?";
+ $formdata=$this->db->fetchRow($sql,array($edit));
+ $form->populate($formdata);
+ }
+ $this->view->form=$form;
+ $this->_helper->viewRenderer('referenceadd');
+ } //编辑相关文献
+
+ elseif ($delete) {
+ $sql = "select uuid from mdref where id=$delete";
+ $rs = $this->db->query($sql);
+ $row = $rs->fetch();
+ $sql="delete from mdref where id=?";
+ try {
+ $this->db->query($sql,array($delete));
+ $this->messenger->addMessage('提示信息:您已经成功删除该数据文献。');
+ } catch (Exception $e) {
+ $this->messenger->addMessage($e->getMessage());
+ }
+ $this->_redirect('/admin/data/reference/show/'.$row['uuid']);
+ } //删除相关文献
+
+ elseif ($import) {
+ if ($this->_request->isPost()) {
+ if ($_FILES["ref"]["error"] == UPLOAD_ERR_OK) {
+ $tmp_name = $_FILES["ref"]["tmp_name"];
+ $fp = fopen($tmp_name, "rb");
+ $ref=fread($fp, filesize($tmp_name));
+ fclose($fp);
+ $lines=explode("\n",$ref);
+ foreach($lines as $line)
+ {
+ $data=explode(";",$line);
+ if (count($data)==2)
+ $link='';
+ else
+ $link=$data[2];
+ $link=$this->db->quote($link);
+ $sql="insert into reference (reference,link) values(?,".$link.")";
+ try {
+ $this->db->exec($this->db->quoteInto($sql,trim($data[1])));
+ } catch (Exception $e) {}
+ $sql="select id from reference where reference=?";
+ $row=$this->db->fetchRow($this->db->quoteInto($sql,trim($data[1])));
+ $sql="insert into mdref (uuid,refid) values(?,".$row['id'].")";
+ try {
+ $this->db->exec($this->db->quoteInto($sql,trim($data[0])));
+ } catch (Exception $e) {}
+ }
+ }//end if
+ }
+ $this->_helper->viewRenderer('referenceimport');
+ } //引用
+
+ else if($search){
+ if(!empty($keyword))
+ {
+ $sql="select rf.id as mdid,rf.refid,m.*,r.* from mdref rf
+ left join metadata m on m.uuid=rf.uuid
+ left join reference r on r.id=rf.refid
+ where m.title like '%$keyword%'
+ order by m.title";
+
+ $re=$this->db->query($sql);
+ $row=$re->fetchAll();
+ $paginator = Zend_Paginator::factory($row);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ $this->messenger->addMessage($keyword.' 的搜索结果');
+ }
+ else
+ {
+ $this->messenger->addMessage('请输入搜索关键字');
+ $this->_redirect("/admin/data/reference");
+ }
+ } //搜索
+
+ else{
+ $sql="select m.title as mdtitle,m.uuid,mr.id as mdid,mr.refid,mr.place,r.reference
+ from mdref mr right join metadata m on mr.uuid=m.uuid
+ left join reference r on mr.refid=r.id
+ order by m.ts_created desc,mr.place";
+ $re=$this->db->query($sql);
+ $row=$re->fetchAll();
+ $paginator = Zend_Paginator::factory($row);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+
+ }//列表
+ }
+
+ //文献管理
+ public function refAction()
+ {
+ $this->view->ac = $ac = $this->_getParam('ac');
+ $submit = $this->_getParam('submit');
+ $keyword = $this->view->q = trim($this->_getParam('q'));
+ $order = $this->view->search_order = trim($this->_getParam('order'));
+ $sort = $this->view->search_sort = trim($this->_getParam('sort'));
+ $field = $this->view->search_field = $this->_getParam('field');
+
+ $reference = new Reference();
+
+ if(!empty($keyword))
+ {
+ $reference->keyword = $keyword;
+ }
+
+ if(!empty($field))
+ {
+ $reference->field = $field;
+ }
+
+ if(!empty($order))
+ {
+ $reference->order = $order;
+ }
+
+ if(!empty($sort))
+ {
+ $reference->sort = $sort;
+ }
+
+ $this->view->reference = $reference;
+ $this->view->page = $this->_getParam('page');
+ $this->view->pagelimit = 12;
+
+ //文献首页
+ if(empty($ac))
+ {
+ $this->view->referenceType = $reference->referenceType();
+ view::addPaginator($reference->fetchReferences(),$this, $this->view->pagelimit);
+ $this->view->years = $reference->countByYear();
+ return true;
+ }
+ else if ($ac == "water")
+ {
+ $this->view->referenceType = $reference->referenceType();
+ view::addPaginator($reference->fetchThemeReferences('water'),$this,$this->view->pagelimit);
+ return true;
+ }
+ else if ($ac == "westdc")
+ {
+ $this->view->referenceType = $reference->referenceType();
+ view::addPaginator($reference->fetchWestdcReferences(),$this,$this->view->pagelimit);
+ return true;
+ }
+ else if ($ac == "todo")
+ {
+ $this->view->referenceType = $reference->referenceType();
+ view::addPaginator($reference->fetchTodoReferences(),$this,$this->view->pagelimit);
+ return true;
+ }
+
+ unset($this->view->reference);
+ unset($this->view->page);
+ unset($this->view->pagelimit);
+
+ //添加
+ if($ac == "add")
+ {
+ $this->_helper->viewRenderer('ref-add');
+ $id = $this->_getParam('id');
+ $attid = $this->_getParam('attid');
+
+ if(!empty($submit))
+ {
+ $this->view->data = $reference->getReferenceParam();
+ $attid = $this->view->data['attid'];
+
+ if(empty($id) || !is_numeric($id))
+ {
+ $status = $reference->reference();
+ }else{
+ $status = $reference->reference($id);
+ }
+
+ if($status !== true)
+ {
+ $this->view->error = view::Error($status);
+ }else{
+ if(!empty($id))
+ {
+ $msg = "文献修改成功!";
+ view::Post($this,$msg,-2);
+ return true;
+ }else{
+ $msg = "文献添加成功!";
+ view::Post($this,$msg,"/admin/data/ref/ac/add");
+ return true;
+ }
+ }
+ }else{
+ $this->view->data = array();
+ if(!empty($id) && is_numeric($id))
+ {
+ $this->view->data = $reference->getOneReferenceData($id);
+ }
+ }
+
+ if(!empty($attid))
+ {
+ $files = new Files();
+ $attfile = $files->getOne($attid);
+ $this->view->data['attid'] = $attid;
+ $this->view->data['file'] = $attfile;
+ }
+
+ return true;
+ }
+
+ //上传pdf
+ if($ac == "pdfupload")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+ $autoread = false;
+ if($this->_getParam('multi'))
+ {
+ $autoread = true;
+ }
+ $statu = $reference->uploadReferencePdf($_FILES['Filedata'],$autoread);
+ $this->jsonexit($statu);
+ return true;
+ }
+
+ //删除已上传的文件
+ if($ac == "delete")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+ $statu = $reference->deleteReferenceAttchment($this->_getParam('attid'));
+ $this->jsonexit($statu);
+ return true;
+ }
+
+ //批量上传
+ if($ac == "multiupload")
+ {
+ $this->_helper->viewRenderer('ref-multiupload');
+ return true;
+ }
+
+ //文件管理
+ if($ac == "files")
+ {
+ $this->_helper->viewRenderer('ref-files');
+ view::addPaginator($reference->getReferenceFiles(),$this,10);
+ return true;
+ }
+
+ //删除文献
+ if($ac == "deleteref")
+ {
+ $refid = $this->_getParam('id');
+ if($reference->deleteReference($refid))
+ {
+ view::Post($this,"删除成功!",-1);
+ }else{
+ view::Post($this,"删除失败!",-1);
+ }
+ return true;
+ }
+
+ //相关数据
+ if($ac == "data")
+ {
+ $refid = $this->view->refid = $this->_getParam('id');
+ if(view::isXmlHttpRequest($this)){
+ $this->jsonexit($reference->getDataByReference($refid));
+ return true;
+ }else{
+ $this->_helper->viewRenderer('ref-metadatas');
+ $this->view->referenceType = $reference->referenceType();
+ view::addPaginator($reference->getDataByReference($refid),$this,10);
+ return true;
+ }
+ }
+
+ //添加数据文献
+ if($ac == "mdref" && view::isXmlHttpRequest($this))
+ {
+ $mdrefid = $this->_getParam('id');
+ $status = $reference->makeMdref($mdrefid);
+ if($status !== true)
+ {
+ $this->jsonexit(array('error'=>$status));
+ }else{
+ $this->jsonexit(array('success' => 1));
+ }
+ return true;
+ }
+
+ //移除数据文献
+ if($ac == "delmdref")
+ {
+ $mdrefid = $this->_getParam('id');
+ $status = $reference->delMdref($mdrefid);
+ if($status === true)
+ {
+ view::Post($this,"移除成功",-1);
+ }else{
+ view::Post($this,$status,-1);
+ }
+ return true;
+ }
+
+ //ris
+ if($ac == "ris")
+ {
+ $this->_helper->viewRenderer('ref-ris');
+ $submit = $this->_getParam('submit');
+
+ if(!empty($submit))
+ {
+ $ris = new \Reference\Ris();
+ $this->view->data = $ris->loadout();
+ try{
+ $ris->pushToDataTable($this->view->data);
+ }catch(Exception $e)
+ {
+ view::Dump($e->getMessage(),false);
+ }
+ }
+ }
+
+ //ris更新单篇
+ if($ac == "singleris")
+ {
+ $this->_helper->viewRenderer('ref-singleris');
+ $id = (int)$this->_getParam('id');
+ $this->view->ristext = $this->_getParam('ristext');
+
+ if($id < 1)
+ {
+ view::Post($this,"参数错误!",-1);
+ return true;
+ }
+
+ $this->view->referenceData = $reference->getOneReferenceData($id);
+
+ if(!empty($submit))
+ {
+ $ris = new Ris();
+ $data = $ris->loadout();
+
+ if(count($data) < 1)
+ {
+ view::Post($this,"输入的RIS信息有误".'查看详细 ',-1);
+ return true;
+ }
+
+ if($ris->updateWithRis($id,$data[0]) === true)
+ {
+ view::Post($this,"编辑成功!".'查看详细 ',-2);
+ return true;
+ }else{
+ view::Post($this,"编辑失败!".'查看详细 ',-1);
+ return true;
+ }
+ }
+
+ return true;
+ }//ris单篇更新
+
+ //ris导出
+ if($ac == "risoutput")
+ {
+ $this->_helper->viewRenderer('ref-risoutput');
+ $this->view->years = $reference->countByYear();
+
+ if(!empty($submit))
+ {
+ $mode = $this->_getParam('mode');
+
+ $risOutput = new RisOutput();
+ $preData = $risOutput->preRead($mode);
+
+ $risData = $risOutput->processArrayDataToRisData($preData);
+
+ $risText = $risOutput->output($risData);
+
+ echo "";
+ echo $risText;
+ echo " ";
+ }
+ }//ris output
+
+ if($ac == "ristest")
+ {
+ $this->_helper->viewRenderer('ref-ris');
+ $submit = $this->_getParam('submit');
+
+ if(!empty($submit))
+ {
+ $ris = new \Reference\Ris();
+ view::Dump($ris->processRis(NULL,$this->_getParam('ristext')),false);
+ }
+ }
+
+
+ }//文献管理 refAction()
+
+ /*
+ * 删除元数据,删除前有确认
+ */
+ function deleteAction()
+ {
+ if ($this->_request->isPost()) {
+ $id = (int)$this->_request->getPost('id');
+ $del = $this->_request->getPost('del');
+ if ($del == 'Yes' && $id > 0) {
+ $md = new MetadataTable();
+ $where = 'id = ' . $id;
+ $md->delete($where);
+ }
+ $this->_redirect('/data');
+ } else {
+ $id = (int)$this->_request->getParam('id');
+ if ($id > 0) {
+ $mdt = new MetadataTable();
+ $this->view->md = $mdt->fetchRow('id='.$id);
+ }
+ }
+ }
+
+ /*
+ * 导入本地元数据
+ */
+ function importAction()
+ {
+ $md=new MetadataTable();
+ $thumb=new ThumbnailTable();
+ $xmlt=new XmlTable();
+ $cgt=new CategoryTable();
+ $cgct=new CategoryCodeTable();
+ $keyt=new KeywordTable();
+ $dst=new DatasetSeriesTable();
+ $seriestable=new SeriesTable();
+ if ($this->_request->isPost()) {
+ foreach ($_FILES["xmlfile"]["error"] as $key => $error) {
+ if ($error == UPLOAD_ERR_OK) {
+ $tmp_name = $_FILES["xmlfile"]["tmp_name"][$key];
+ $name = $_FILES["xmlfile"]["name"][$key];
+ $fp = fopen($tmp_name, "rb");
+ $xml=fread($fp, filesize($tmp_name));
+ fclose($fp);
+ $this->import($xml);
+ //采用UUID为文件名?
+ //move_uploaded_file($tmp_name, "../data/import/$name");
+ }//end if
+ }//foreach
+ $this->_redirect('/data');
+ } else {
+ //do nothing now.
+ }
+ }
+ /*
+ * 批量处理元数据(元数据保存在服务器的一个目录上)
+ */
+ function batchimportAction()
+ {
+ if ($this->_request->isPost()) {
+ $dir = $this->_request->getPost('directory');
+ $subdir = $this->_request->getPost('subdir');
+ $l=new mydir($dir,"*.xml");
+ $xmlfiles=$l->toArray();
+ foreach($xmlfiles as $xmlfile)
+ {
+ $fp=fopen($dir.'/'.$xmlfile,'rb');
+ $xml=fread($fp,filesize($dir.'/'.$xmlfile));
+ fclose($fp);
+ $this->import($xml);
+ }
+ $this->_redirect('/data');
+ }
+ }
+ function datafileimportAction()
+ {
+ if ($this->_request->isPost()) {
+ set_time_limit(0);
+ $dir = $this->_request->getPost('directory');
+ if (file_exists($dir.'/dataset.txt'))
+ {
+ $fp=fopen($dir.'/dataset.txt','rb');
+ $ds=fread($fp,filesize($dir.'/dataset.txt'));
+ fclose($fp);
+ $ds1=explode("\n",$ds);
+ for($i=0;$idb->query($sql);
+ //$sql="insert into dataset (path,uuid) values('".$dpath."','".$duuid."')";
+ $sql="insert into dataset (path,uuid) values(?,?)";
+ $this->db->query($sql,array($dpath,$duuid));
+ $sql="select id from dataset where uuid='".$duuid."'";
+ $rs=$this->db->fetchRow($sql);
+ $dsid=$rs["id"];
+ $fp=fopen($dir.'/'.$duuid.'.txt','rb');
+ $filep=fread($fp,filesize($dir.'/'.$duuid.'.txt'));
+ fclose($fp);
+ $filep1=explode("\n",$filep);
+ //print $duuid." ";
+ //print $dpath." ".count($dpatch)." ";
+ for($j=0;$j ";
+ //$sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(".$dsid.",'".$this->db->escape($fpath)."',".$fsize.",".$fdir.",".$fdepth.")";
+ $sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(?,?,?,?,?)";
+ $this->db->query($sql,array($dsid,$fpath,$fsize,$fdir,$fdepth));
+ }
+ }
+ }
+ }
+ }
+ $this->view->msg='已成功处理数据目录信息!';
+ }
+ }//datafileimportAction
+
+
+ function sourceAction()
+ {
+ $do = $this->_request->getParam('do');
+ $uuid = $this->_request->getParam('uuid');
+ $id = $this->_request->getParam('id');
+ $q = $this->_request->getParam('q');
+ $search = $this->_request->getParam('search');
+
+ if ($do == 'add') {
+
+ $redirect = "/admin/data/source/";
+
+ if(!empty($_POST['submit']))
+ {
+ try{
+ $title = $this->_request->getParam('title');
+ $uuid = $this->_request->getParam('uuid');
+ $code = $this->_request->getParam('code');
+ $description = $this->_request->getParam('description');
+ $has_pages = $this->_request->getParam('has_pages');
+ $has_agreement = $this->_request->getParam('has_agreement');
+
+ $data = array(
+ 'title' => $title,
+ 'uuid' => $uuid,
+ 'code' => $code,
+ 'description' => $description,
+ 'has_pages' => $has_pages,
+ 'has_agreement' => $has_agreement
+ );
+
+ if($this->db->insert('source',$data))
+ {
+ $this->messenger->addMessage('添加来源信息成功');
+ $this->_redirect($redirect);
+ }
+ }catch(Exception $e){
+ $this->messenger->addMessage('添加来源信息失败:'.$e->getMessage());
+ $this->_redirect('/admin/data/source/do/add');
+ }
+
+ }
+
+ $this->_helper->viewRenderer('sourceadd');
+ }// 添加项目来源
+
+ else if($do == 'edit' && !empty($id))
+ {
+
+ if(!empty($_POST['submit']))
+ {
+ try{
+ $title = $this->_request->getParam('title');
+ $uuid = $this->_request->getParam('uuid');
+ $code = $this->_request->getParam('code');
+ $description = $this->_request->getParam('description');
+ $has_pages = $this->_request->getParam('has_pages');
+ $has_agreement = $this->_request->getParam('has_agreement');
+
+ $sql = "update source set title='$title',uuid='$uuid',code='$code',description='$description',has_pages='$has_pages',has_agreement='$has_agreement' where id='$id'";
+
+ if($this->db->exec($sql))
+ {
+ $this->messenger->addMessage('修改来源信息成功');
+ $this->_redirect("/admin/data/source/do/edit/id/$id");
+ }
+ }catch(Exception $e){
+ $this->messenger->addMessage('修改来源信息失败:'.$e->getMessage());
+ $this->_redirect("/admin/data/source/do/edit/id/$id");
+ }
+
+ }
+
+ $sql = "select * from source where id='$id'";
+ $rs = $this->db->query($sql);
+ $row = $rs->fetch();
+
+ $this->view->info = $row;
+
+ $this->_helper->viewRenderer('sourceadd');
+
+ }// 编辑单条信息
+
+ else if($do == 'datasource' && !empty($uuid))
+ {
+ $redirect = "/admin/data/source/do/datasource/uuid/$uuid";
+
+ $this->view->uuid = $uuid;
+ $sql = "select md.title,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
+ left join datasource ds on ds.uuid=md.uuid
+ left join source s on s.id=ds.sourceid
+ where md.uuid='$uuid'";
+ $rs = $this->db->query($sql);
+ $row = $rs->fetch();
+
+ $this->view->info = $row;
+
+ if(!empty($_POST['submit']))
+ {
+ $sourceid = $this->_request->getParam('sourceid');
+ if(empty($sourceid))
+ {
+ $this->messenger->addMessage('请选择项目来源');
+ $this->_redirect($redirect);
+ }
+
+ $sql="";
+ if(empty($row['id']))
+ {
+ $sql = "insert into datasource (uuid,sourceid) values ('$uuid','$sourceid')";
+ }else
+ {
+ $sql = "update datasource set uuid='$uuid',sourceid='$sourceid' where id='{$row['id']}'";
+ }
+ try{
+ if($this->db->exec($sql))
+ {
+ $this->messenger->addMessage('修改项目来源成功');
+ $this->_redirect($redirect);
+ }
+ else
+ {
+ $this->messenger->addMessage('修改项目来源失败');
+ $this->_redirect($redirect);
+ }
+ }catch (Exception $e){
+ $this->messenger->addMessage('修改项目来源失败:'.$e->getMessage());
+ $this->_redirect($redirect);
+ }
+
+ }
+
+
+ $wheresql = array();
+
+ if(!empty($q) && !empty($search))
+ {
+ $this->view->q = $q;
+ $wheresql[] = " title like '%$q%' ";
+ }
+
+ if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
+ else $wheresql='';
+
+ if($wheresql!='')
+ {
+ $wheresql = 'where '.$wheresql;
+ }
+
+ $sql = "select * from source $wheresql order by id desc";
+ $rs = $this->db->query($sql);
+ $rows = $rs->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+
+ $this->_helper->viewRenderer('sourceselect');
+ }// 为元数据选择项目来源
+
+ else if($do == 'del' && !empty($id))
+ {
+ $redirect = "/admin/data/source/";
+ $sql = "delete from source where id='$id'";
+ try{
+ if($this->db->exec($sql))
+ {
+ $this->messenger->addMessage('删除成功');
+ $this->_redirect($redirect);
+ }else{
+ $this->messenger->addMessage('删除失败,可能该数据已不存在');
+ $this->_redirect($redirect);
+ }
+ }catch (Exception $e){
+ $this->messenger->addMessage('删除失败:'.$e->getMessage());
+ $this->_redirect($redirect);
+ }
+ }// 删除项目来源
+
+ else if($do == 'fetch' && !empty($id))
+ {
+
+ $wheresql = array();
+
+ $wheresql[] = " ds.sourceid='$id' ";
+
+ if(!empty($q) && !empty($search))
+ {
+ $this->view->q = $q;
+ $wheresql[] = " title like '%$q%' ";
+ }
+
+ if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
+ else $wheresql='';
+
+ if($wheresql!='')
+ {
+ $wheresql = 'where '.$wheresql;
+ }
+
+ $sql = "select md.title,md.uuid,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
+ left join datasource ds on ds.uuid=md.uuid
+ left join source s on s.id=ds.sourceid
+ $wheresql
+ order by id desc";
+ $rs = $this->db->query($sql);
+ $rows = $rs->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+
+ $this->_helper->viewRenderer('sourcefetchone');
+
+ }//查看某项目来源中的所有元数据
+
+ else if($do == 'delsource' && !empty($id))
+ {
+ $redirect = "/admin/data/source/do/datasource/uuid/$uuid";
+
+ $sql = "delete from datasource where id='$id'";
+
+ try{
+ if($this->db->exec($sql))
+ {
+ $this->messenger->addMessage('删除成功');
+ $this->_redirect($redirect);
+ }else{
+ $this->messenger->addMessage('删除失败,可能该数据已不存在');
+ $this->_redirect($redirect);
+ }
+ }catch (Exception $e){
+ $this->messenger->addMessage('删除失败:'.$e->getMessage());
+ $this->_redirect($redirect);
+ }
+
+
+ }// 清除元数据来源记录
+ elseif ($do=='sync') { //同步数据来源到metadata表
+ $redirect = "/admin/data/source/";
+ $sql = "update metadata m set source=s.uuid from source s right join datasource d on s.id=d.sourceid where m.uuid=d.uuid";
+ if($this->db->exec($sql))
+ {
+ $this->messenger->addMessage('成功同步数据来源');
+ $this->_redirect($redirect);
+ }else{
+ $this->messenger->addMessage('同步数据来源失败');
+ $this->_redirect($redirect);
+ }
+ }
+
+ else
+ {
+ $wheresql = array();
+
+ if(!empty($q) && !empty($search))
+ {
+ $this->view->q = $q;
+ $wheresql[] = " title like '%$q%' ";
+ }
+
+ if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
+ else $wheresql='';
+
+ if($wheresql!='')
+ {
+ $wheresql = 'where '.$wheresql;
+ }
+
+ $sql = "select * from source $wheresql order by id desc";
+ $rs = $this->db->query($sql);
+ $rows = $rs->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }// 项目来源管理
+
+
+ }//function sourceAction
+
+
+ function attachmentsAction()
+ {
+ $submit = $this->_request->getParam('submit');
+ $add = $this->_request->getParam('add');
+ $search = $this->_request->getParam('search');
+ $delete = $this->_request->getParam('delete');
+ $edit = $this->_request->getParam('edit');
+ $down = $this->_request->getParam('down');
+ $uuid = $this->_request->getParam('uuid');
+ $mdtitle = $this->_request->getParam('mdtitle');
+ $mdattdel = $this->_request->getParam('mdattdel');
+ $attupdate = $this->_getParam('attupdate');
+
+ if(!empty($uuid)&&!empty($mdtitle))
+ {
+ $this->view->uuid= $uuid;
+ $this->view->mdtitle=$mdtitle;
+ }
+
+ if($add)
+ {
+ $this->_helper->viewRenderer('attachmentsadd');
+ if(!empty($uuid))
+ {
+ $this->view->uuid = $uuid;
+ }
+ }//附件添加
+
+ elseif($attupdate)
+ {
+ $submit = $this->_getParam('submit');
+ if(!empty($submit))
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('attupdate');
+
+ $files=new Files();
+ $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true);
+
+ if(empty($msg['error']))
+ {
+ $msg['error']="";
+ $filename = $msg['db_path'];
+ $filesize = $msg['file_size'];
+ $filedesc = $this->_request->getParam('filedesc');
+ $filetype = 'md';
+ $realname = $msg['realname'];
+
+
+ $sql = "UPDATE attachments SET filename=?,filetype=?,filesize=?,realname=? WHERE id=?";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth->execute(array($filename,$filetype,$filesize,$realname,$id));
+
+ if($ds)
+ {
+ $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]';
+ $msg['ok']= 1;
+ echo Zend_Json::encode($msg);
+ exit();
+ }else{
+ @unlink($filename);
+ $data = array("error"=>'附件上传失败:写入附件表出错');
+ $this->jsonexit($data);
+ return true;
+ }
+ }else{
+ @unlink($filename);
+ $data = array("error"=>'附件上传失败:'.$msg['error']);
+ $this->jsonexit($data);
+ return true;
+ }
+
+
+ $data = array("error"=>"处理中出现错误".$id);
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer('attachments-update');
+ $id = $this->_getParam('attupdate');
+ $this->view->id = $id;
+ }
+
+ }//附件文件更新
+
+ else if($mdattdel)
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+
+ $sql = "delete from mdattach where uuid=? AND id=?";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth->execute(array($uuid,$mdattdel));
+ if($ds)
+ {
+ $data = array("status"=>1); //操作状态代码 : 1=>成功 2=>失败
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ else if($delete)
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+
+ //需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录
+
+ $basepath = $this->view->config->upload;
+
+ //从数据库获取文件路径
+
+ $info = $this->getFileinfo($delete);
+
+ $filepath = $basepath.$info['filename'];
+
+ $sql = "SELECT * FROM mdattach WHERE id=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($delete));
+ $rows = $sth->fetchAll();
+
+ if(count($rows)>0)
+ {
+ $data = array("error"=>'删除失败!该文件有元数据附件信息,不能直接删除',"status"=>0);
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $sql = "SELECT * FROM mdreviewattach WHERE attachid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($delete));
+ $rows = $sth->fetchAll();
+
+ if(count($rows)>0)
+ {
+ $data = array("error"=>'删除失败!该文件有对应评审附件信息,不能直接删除',"status"=>0);
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $sql = "SELECT link FROM reference WHERE link!=''";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $ids = array();
+ foreach($rows as $k=>$v)
+ {
+ if(preg_match("/service/i",$v['link']))
+ {
+ $ids[] = str_replace("/service/attach/id/","",$v['link']);
+ }
+ unset($rows[$k]);
+ }
+ unset($rows);
+
+ if(in_array($delete,$ids))
+ {
+ $data = array("error"=>'删除失败!该文件有对应文献附件信息,不能直接删除',"status"=>0);
+ $this->jsonexit($data);
+ return true;
+ }
+
+ if(unlink($filepath))
+ {
+ $sql = "delete from attachments where id='$delete'";
+ if($this->db->exec($sql)>0)
+ {
+ $data = array("status"=>1);
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+ else
+ {
+ $sql = "delete from attachments where id='$delete'";
+ if($this->db->exec($sql)>0)
+ {
+ $data = array("error"=>'文件删除失败,仅删除数据库记录,请手动删除文件:'.$info['filename'],"status"=>0);
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ }//删除
+
+ else if($edit>0)
+ {
+
+ if(empty($submit))
+ {
+
+ $this->view->info = $this->getFileinfo($edit);
+
+ $this->_helper->viewRenderer('attachmentsadd');
+
+ }
+ else
+ {
+ $filedesc = $this->_request->getParam('filedesc');
+
+ $sql="update attachments set filedesc='$filedesc' where id='$edit'";
+
+ if($this->db->exec($sql)>0)
+ {
+ $this->messenger->addMessage('编辑成功');
+ $this->_redirect("/admin/data/attachments/edit/$edit");
+ }
+ }
+
+ }//编辑
+
+ else if($search && $search!='my')
+ {
+ $keyword = $this->_request->getParam('keyword');
+ if(empty($keyword))
+ {
+ $this->messenger->addMessage('请输入关键词');
+ $this->_redirect("/admin/data/attachments/search/1");
+ }
+ else
+ {
+ $sql="select * from attachments where filedesc like '%$keyword%'";
+ $re = $this->db->query($sql);
+ $rows=$re->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }
+
+ }//搜索
+
+ else if($search && $search=='my')
+ {
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $userid = $user->id;
+ $sql="select * from attachments where userid='$userid'";
+ $re= $this->db->query($sql);
+ $rows = $re->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+ }
+ }//我的附件列表
+
+ else if ($down>0)
+ {
+
+ $sql = "select * from attachments where id='$down'";
+
+ $re = $this->db->query($sql);
+
+ $row = $re->fetch();
+
+ $file = new files();
+
+ $fullPath = $this->view->config->upload.$row['filename'];
+
+
+ // Parse Info / Get Extension
+ $fsize = filesize($fullPath);
+ $path_parts = pathinfo($fullPath);
+ $ext = strtolower($path_parts["extension"]);
+
+ // Determine Content Type
+ switch ($ext) {
+ case "pdf": $ctype="application/pdf"; break;
+ case "exe": $ctype="application/octet-stream"; break;
+ case "zip": $ctype="application/zip"; break;
+ case "doc": $ctype="application/msword"; break;
+ case "xls": $ctype="application/vnd.ms-excel"; break;
+ case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
+ case "gif": $ctype="image/gif"; break;
+ case "png": $ctype="image/png"; break;
+ case "jpeg":
+ case "jpg": $ctype="image/jpg"; break;
+ default: $ctype="application/force-download";
+ }
+
+ $content=file_get_contents($fullPath);
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+ $this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
+ ->setHeader('Content-Disposition','attachment; filename="'.basename($fullPath).'"')
+ ->setHeader('Content-Length', $fsize)
+ ->setHeader('Content-Type','application/force-download')
+ ->setHeader('Content-Type','application/download')
+ ->setHeader('Content-Type',$ctype)
+ ->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);
+
+ //$sql = "update attachments set downtimes=downtimes+1 where id='$down'";
+ //$this->db->exec($sql);
+
+ }//附件下载
+
+ else
+ {
+
+ $sql="select * from attachments order by id desc";
+ $re= $this->db->query($sql);
+ $rows = $re->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(30);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
+ $this->view->paginator=$paginator;
+ }//所有附件
+
+
+
+
+ }//attachments 附件
+
+ function uploadAction(){
+ $this->_helper->layout()->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $uuid = $this->_getParam('uuid');
+
+ 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();
+ }
+
+ if($user->usertype!='administrator')
+ {
+ $msg['error'] = "您无权使用此功能";
+ echo Zend_Json::encode($msg);
+ exit();
+ }
+
+ $files=new Files();
+ $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true);
+
+ if(empty($msg['error']))
+ {
+ $msg['error']="";
+ $filename = $msg['db_path'];
+ $filesize = $msg['file_size'];
+ $filedesc = $this->_request->getParam('filedesc');
+ $filetype = 'md';
+ $realname = $msg['realname'];
+
+
+ $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$userid','$filesize','$realname') RETURNING id";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $att = $sth->fetch(PDO::FETCH_ASSOC);
+ $msg['attid'] = $attid = $att['id'];
+
+ $sql = "insert into mdattach (uuid,id) values ('$uuid','$attid')";
+ if(empty($uuid) || $this->db->exec($sql))
+ {
+ $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb] ';
+ echo Zend_Json::encode($msg);
+ exit();
+ }else{
+ $msg['error'] = '附件上传失败:写入附件表出错';
+ @unlink($filename);
+ 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();
+ }
+ }// uploadAction ajax上传附件
+
+ function getattsAction(){
+
+ $this->_helper->layout()->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $uuid = $this->_request->getParam('uuid');
+
+ if($uuid!='')
+ {
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $userid = $user->id;
+ $sql = "select m.*,a.*,d.title from mdattach m
+ left join attachments a on m.id = a.id
+ left join metadata d on m.uuid=d.uuid where m.uuid='$uuid'
+ ORDER BY a.ts_created ASC";
+ $rs = $this->db->query($sql);
+ $atts = $rs->fetchAll();
+
+ echo Zend_Json::encode($atts);
+ exit();
+ }else
+ {
+ exit();
+ }
+ }else{
+ exit();
+ }
+ //不输出错误
+ }//获取附件
+
+
+ /*
+ versionAction 版本管理
+ */
+
+ public function versionAction(){
+
+ $ac = $this->_request->getParam('ac');
+ $uuid = $this->_request->getParam('uuid');
+ set_time_limit(0);
+
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $u_id = $user->id;
+ }
+
+ //查看单条数据的所有版本
+ if (!empty($uuid) && empty($ac))
+ {
+ //view the versions of the data
+ $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname,g.id as gid FROM mdversion v
+ LEFT JOIN metadata md ON md.uuid=v.uuid
+ left join users u on v.userid=u.id
+ left join geonetworkmetadata g on md.uuid=g.uuid
+ WHERE md.title IS NOT NULL AND v.uuid=?
+ order by v.ts_created desc
+ ";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($uuid));
+ $rows = $sth->fetchAll();
+ @$this->view->mdtitle=$rows[0]['title'];
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }
+
+ //查看所有版本列表
+ else if((empty($ac) && empty($uuid))|| $ac=='list')
+ {
+ $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v
+ LEFT JOIN metadata md ON md.uuid=v.uuid
+ left join users u on v.userid=u.id
+ WHERE md.title IS NOT NULL
+ order by v.ts_created desc
+ ";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }
+
+ //按数据浏览
+ else if($ac=="bydata")
+ {
+ $keywords = $this->_request->getParam('q');
+ if(!empty($keywords))
+ $this->view->q = $keywords;
+ $sql = "SELECT md.title,md.uuid,count(v.id) as c FROM mdversion v
+ LEFT JOIN metadata md ON md.uuid=v.uuid
+ WHERE md.title IS NOT NULL";
+ if(!empty($keywords))
+ {
+ $search=new Search($keywords);
+ $where=$search->sql_expr(array("md.title","md.description"));
+ $sql.=' and '.$where;
+ }
+ $sql.=" group by md.uuid,md.title";
+
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(10);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+
+ $this->_helper->viewRenderer('version-bydata');
+ }
+
+
+ //删除某个版本
+ else if($ac=="delete")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $data = "";
+
+ try{
+ $id = $this->_request->getParam('id');
+ if(empty($id) || !is_numeric($id))
+ {
+ $data = array("error"=>"参数错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $sql = "DELETE FROM mdversion WHERE id=?";
+ $sth = $this->db->prepare($sql);
+ $ex = $sth -> execute(array($id));
+
+ if($ex)
+ {
+ $data = array("deleted"=>$id, "error"=>"删除成功");
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>'删除失败,请确认权限后重试');
+ $this->jsonexit($data);
+ return true;
+ }
+ }catch(Exception $e) {
+ $msg = "删除失败,请确认权限后重试";
+ if($this->debug>0)
+ {$msg .= $e->getMessage();}
+ $data = array("error"=>$msg);
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ //恢复到geonetwork
+ else if($ac == "restore")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $data = "";
+ try{
+ $id = $this->_request->getParam('id');
+ if(empty($id) || !is_numeric($id))
+ {
+ $data = array("error"=>"参数错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $this->wdb=Zend_Db::factory($this->view->config->geonetwork);
+ $sql = "SELECT v.xml,v.uuid FROM mdversion v
+ WHERE v.id=?";
+ $sth = $this->db->prepare($sql);
+ $sth ->execute(array($id));
+ $row = $sth->fetch();
+
+ $sql = "SELECT data FROM metadata WHERE uuid=?";
+ $sth = $this->wdb->prepare($sql);
+ $sth ->execute(array($row['uuid']));
+ $row_geo = $sth->fetch();
+
+ if($row['xml']==$row_geo['data'])
+ {
+ $data = array("error"=>'无须恢复,元数据相同');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $sql = "UPDATE metadata SET data=? WHERE uuid=?";
+ $sth = $this->wdb->prepare($sql);
+ $ex = $sth ->execute(array($row['xml'],$row['uuid']));
+
+ if($ex)
+ {
+ $data = array("error"=>'恢复成功');
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>'恢复失败,请确认权限后重试');
+ $this->jsonexit($data);
+ return true;
+ }
+ }catch(Exception $e) {
+ $msg = "恢复失败,请确认权限后重试";
+ if($this->debug>0)
+ {$msg .= $e->getMessage();}
+ $data = array("error"=>$msg);
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ //发布到评审
+ else if($ac == "commit")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $data = "";
+ try{
+ $id = $this->_request->getParam('id');
+ if(empty($id) || !is_numeric($id))
+ {
+ $data = array("error"=>"参数错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $changelog = $this->_request->getParam('changelog');
+ if(empty($changelog))
+ {
+ $data = array("error"=>'请输入变更信息');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ // 1. 权限认定 --skip
+ // 2. 保存变化记录 save changelog & userid
+ $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id=?";
+ $this->db->query($sql,array($changelog,$u_id,$id));
+
+ // 3. 获取数据评审状态
+ $sql = "SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid
+ left join metadata m on s.uuid=m.uuid WHERE v.id=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($id));
+ $row = $sth->fetch();
+
+ $sql="select * from xunsearch where uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($row['uuid']));
+ $data_search = $sth->fetch();
+ $search=new Search();
+ $search->update($data_search);
+
+ if (empty($row)) //无对应记录
+ {
+ $sql="select m.id from metadata m left join mdversion v on m.uuid=v.uuid where v.id=?";
+ $sth=$this->db->prepare($sql);
+ $sth->execute(array($id));
+ $mrow=$sth->fetch();
+ if (empty($mrow)) //说明是新数据
+ {
+ //导入元数据
+ $iso=new ISO19115();
+ $iso->saveDB($this->db,$row['xml']);
+ //进入评审库
+ $sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from mdversion where id=?";
+ $this->db->query($sql,array($u_id,$id));
+
+ //email to admin
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"metadata-new-admin",array(
+ 'user' => $user->username,
+ 'uuid' => $iso->uuid,
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $iso->resTitle,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ $mail->send();
+
+ unset($mail);
+ unset($mailtp);
+ //email to author
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"metadata-new-author",array(
+ 'user' => $user->username,
+ 'uuid' => $iso->uuid,
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $iso->resTitle,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($user->email);
+ $mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ @$mail->send();
+
+ $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!');
+ $this->jsonexit($data);
+ return true;
+ } else { //说明是已发布的数据且数据不存在评审信息
+ //同步元数据
+ $iso=new ISO19115();
+ $iso->saveDB($this->db,$row['xml']);
+ //移除中间版本
+ $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null";
+ $this->db->query($sql,array($id));
+ //修改评审状态为发布,且由其提交的用户进行管理
+ $sql="insert into mdstatus (uuid,status,userid) select uuid,6,? from mdversion where id=?";
+ $this->db->query($sql,array($u_id,$id));
+
+ //email to admin & author
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"metadata-release",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ 'changelog'=>$changelog,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($this->view->config->service->email);
+ $mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ @$mail->send();
+
+ $data = array("commited"=>1,"error"=>'该版本已经成功发布!');
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+ else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收
+ {
+ //同步元数据
+ $iso=new ISO19115();
+ $iso->saveDB($this->db,$row['xml']);
+ //email to admin
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"version-commit-admin",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ 'changelog'=>$changelog,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ $mail->send();
+
+ unset($mail);
+ unset($mailtp);
+ //email to author
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'数据服务组');
+ $mailtp=new EmailText($this->db,"version-commit-author",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($user->email);
+ $mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ @$mail->send();
+
+ $data = array("commited"=>1,"error"=>'该版本已经成功提交并同步,请等待数据中心进一步处理!');
+ $this->jsonexit($data);
+ return true;
+ }
+ else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息
+ {
+ //同步元数据
+ $iso=new ISO19115();
+ $iso->saveDB($this->db,$row['xml']);
+
+ //email to admin
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"version-commit-admin",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ 'changelog'=>$changelog,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ $mail->send();
+
+ unset($mail);
+ unset($mailtp);
+ //email to author
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'数据服务组');
+ $mailtp=new EmailText($this->db,"version-commit-author",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($user->email);
+ $mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ @$mail->send();
+
+ //email to experts
+ $sql="select u.username,u.email,u.id from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($row['uuid']));
+ $experts = $sth->fetchAll();
+
+ unset($mail);
+ unset($mailtp);
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"version-commit-expert",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/doc/uuid/'.$row['uuid']);
+ $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc');
+ $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$row['uuid']);
+ $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.pdf');
+ if($this->debug==0)
+ {
+ foreach ($experts as $expert) $mail->addTo($expert['email']);
+ $mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ @$mail->send();
+
+ $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!');
+ $this->jsonexit($data);
+ return true;
+ }
+ else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态
+ {
+ //同步元数据
+ $iso=new ISO19115();
+ $iso->saveDB($this->db,$row['xml']);
+ //移除中间版本
+ $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null";
+ $this->db->query($sql,array($id));
+
+ //email to admin & author
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'数据服务组');
+ $mailtp=new EmailText($this->db,"metadata-release",array(
+ 'user' => $user->username,
+ 'uuid' => $row['uuid'],
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $row['title'],
+ 'changelog'=>$changelog,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($this->view->config->service->email);
+ //$mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ //@$mail->send();
+
+ $data = array("commited"=>1,"error"=>'该版本已经成功发布!');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ }catch(Exception $e) {
+ $msg = "提交失败,请确认权限后重试";
+ if($this->debug>0)
+ {$msg .= $e->getMessage();}
+ $data = array("error"=>$msg);
+ $this->jsonexit($data);
+ return true;
+ }
+ }//发布到评审
+
+ //与前一个版本对比
+ else if($ac == "diff" || $ac=="diff1")
+ {
+ $this->_helper->viewRenderer('version-diff');
+ $id = $this->_request->getParam('id');
+ if(empty($id) || !is_numeric($id))
+ {
+ $this->view->error = "参数错误";
+ return true;
+ }
+
+ $sql = "SELECT v.uuid,md.title FROM mdversion v
+ LEFT JOIN metadata md ON v.uuid=md.uuid
+ WHERE v.id=?";
+ $sth = $this->db->prepare($sql);
+ $sth -> execute(array($id));
+
+ $row = $sth->fetch();
+ if ($ac=='diff')
+ {
+ $sql = "SELECT v.* FROM mdversion v
+ WHERE v.uuid=? and v.ts_created<=(select ts_created from mdversion where id=?)
+ ORDER BY v.ts_created DESC
+ LIMIT ?";
+ $sth = $this->db->prepare($sql);
+ $sth -> execute(array($row['uuid'],$id,2));
+ } else {
+ $sql = "SELECT v.* FROM mdversion v
+ WHERE v.uuid=? and (v.id=? or (v.ts_created<(select ts_created from mdversion where id=?) and changelog is not null))
+ ORDER BY v.ts_created DESC
+ LIMIT ?";
+ $sth = $this->db->prepare($sql);
+ $sth -> execute(array($row['uuid'],$id,$id,2));
+ }
+
+ $rows = $sth->fetchAll();
+
+ if(count($rows)<2)
+ {
+ $this->view->error = "对比失败:之前没有版本可以对比";
+ return true;
+ }
+
+ $this->view->info = $row;
+ $this->view->data = $rows;
+
+ }
+
+
+ }//versionAction 版本控制
+
+
+ /*
+ * authorAction() 数据作者
+ *
+ * param string $ac //动作
+ =add 添加
+ =edit 编辑
+ =update 更新
+ =del 删除
+ =list 列出所有数据作者
+
+ * param string $uuid //UUID
+ *
+ * return view|application-json
+ */
+ public function authorAction(){
+
+ $ac = $this->_getParam('ac');
+ $uuid = $this->_getParam('uuid');
+
+ if(empty($ac) && empty($uuid))
+ {
+
+ $keywords = $this->_request->getParam('q');
+ if(!empty($keywords))
+ $this->view->q = $keywords;
+
+ $sql = "select md.id,md.title,md.uuid,count(a.userid) as c from metadata md
+ right JOIN mdauthor a ON md.uuid=a.uuid
+ ";
+
+ if(!empty($keywords))
+ {
+ $search=new SimpleSearch($keywords);
+ $where=$search->sql_expr(array("md.title"));
+ $sql.=' and ('.$where.")";
+ }
+
+ $sql .= "GROUP by md.id,md.title,md.uuid,md.ts_created
+ ORDER BY md.ts_created DESC";
+
+ $sth = $this->db->prepare($sql);
+ $sth-> execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+
+ }//列表
+
+
+ else if($ac == 'add')
+ {
+
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $username = $this->_getParam('username');
+ $uuid = $this->_getParam('uuid');
+
+ if(!preg_match("/^[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}$/",$uuid))
+ {
+ $data = array("error"=>"uuid参数错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ if(empty($username))
+ {
+ $data = array("error"=>'请输入要添加为该数据作者的用户名');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $sql = "SELECT * FROM users WHERE username=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($username));
+ $row = $sth->fetch();
+
+ if(empty($row['id']) || !isset($row['id']))
+ {
+ $data = array("error"=>'您输入的用户名无任何对应用户');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $uid = $row['id'];
+
+ $sql = "SELECT * FROM mdauthor WHERE userid=? AND uuid=?";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($row['id'],$uuid));
+ $row = $sth->fetch();
+
+ if(!empty($row['id']) && $row['status']==1)
+ {
+ $data = array("error"=>'该用户已经是此数据的作者');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ if(!empty($row['id']) && in_array($row['status'],array(0,-1)) )
+ {
+ $sql = "UPDATE mdauthor SET status=1 WHERE uuid=? AND userid=?";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth->execute(array($uuid,$uid));
+ if($ds)
+ {
+ $data = array("msg"=>'该用户已被提升为数据作者','added'=>1);
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>'处理中出现错误');
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ if(empty($row['id']))
+ {
+ $sql = "INSERT INTO mdauthor (uuid,userid,status) VALUES (?,?,?)";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth->execute(array($uuid,$uid,1));
+ if($ds)
+ {
+ $data = array("msg"=>'该用户已被添加为数据作者','added'=>1);
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+
+ }//ajax 添加作者
+
+
+ else if(($ac == "edit" || $ac=="") && !empty($uuid))
+ {
+
+ $window = $this->_getParam('window');
+
+ if($window == "iframe")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer('author-edit-iframe');
+ }else{
+ $this->_helper->viewRenderer('author-edit');
+ }
+
+ $sql = "SELECT a.*,md.title,u.realname,u.username FROM mdauthor a
+ LEFT JOIN metadata md ON a.uuid=md.uuid
+ LEFT JOIN users u ON a.userid=u.id
+ WHERE md.uuid=?
+ ORDER BY a.id DESC
+ ";
+
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($uuid));
+ $rows = $sth->fetchAll();
+
+ $this->view->authors = $rows;
+
+ }// 作者管理弹窗
+
+ else if($ac == "del")
+ {
+
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('id');
+
+ $sql = "DELETE FROM mdauthor WHERE id=?";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth->execute(array($id));
+ if($ds)
+ {
+ $data = array("deleted"=>$id);
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+
+ }//移除作者
+
+ else if($ac == 'update')
+ {
+
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('id');
+
+ $sql = "UPDATE mdauthor SET status=1 WHERE id=?";
+ $sth = $this->db->prepare($sql);
+ $ds = $sth->execute(array($id));
+ if($ds)
+ {
+ $data = array("updated"=>$id,'msg'=>'认证成功!');
+ $this->jsonexit($data);
+ return true;
+ }else{
+ $data = array("error"=>"处理中出现错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+
+ }//认证作者
+
+ else if($ac =="list")
+ {
+ $this->_helper->viewRenderer('author-list');
+
+ $sql = "SELECT u.id,u.realname,u.email,count(a.id) as d FROM mdauthor a
+ LEFT JOIN users u ON a.userid=u.id
+ WHERE a.status>0
+ GROUP BY u.id,u.realname,u.email
+ ORDER BY u.id DESC";
+
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }//所有作者
+
+ else if($ac == "userdatas")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('id');
+
+ $sql = "SELECT md.title,md.uuid FROM mdauthor a
+ LEFT JOIN metadata md ON a.uuid=md.uuid
+ WHERE a.userid=? AND a.status>0
+ ORDER BY a.ts_created";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($id));
+ $rows = $sth->fetchAll();
+
+ $data = array("datas"=>$rows);
+ $this->jsonexit($data);
+ return true;
+
+ }//用户数据
+
+ else if($ac == "datas")
+ {
+ $this->_helper->viewRenderer('author-datas');
+
+ $keywords = $this->_request->getParam('q');
+ if(!empty($keywords))
+ $this->view->q = $keywords;
+
+ $sql = "select md.id,md.title,md.uuid,count(a.userid) as c from metadata md
+ left JOIN mdauthor a ON md.uuid=a.uuid
+ ";
+
+ if(!empty($keywords))
+ {
+ $search=new SimpleSearch($keywords);
+ $where=$search->sql_expr(array("md.title"));
+ $sql.=' WHERE '.$where;
+ }
+
+ $sql .= "GROUP by md.id,md.title,md.uuid,md.ts_created
+ ORDER BY md.ts_created DESC";
+
+ $sth = $this->db->prepare($sql);
+ $sth-> execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+
+ }
+
+ }//authorAction() 数据作者管理
+
+
+ //newdataAction() 新建元数据
+ public function newdataAction(){
+
+ $ac = $this->_request->getParam('ac');
+ $id = $this->_request->getParam('id');
+ $this->wdb=Zend_Db::factory($this->view->config->geonetwork);
+
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $u_id = $user->id;
+ }
+
+ //在geonetwork中查看单条数据
+ if (!empty($id) && empty($ac))
+ {
+ $this->view->url='metadata.show?id='.$id;
+ $this->_helper->viewRenderer('newdata-view');
+ }
+ //查看所有的未提交数据列表
+ else if((empty($ac) && empty($uuid))|| $ac=='list')
+ {
+ $sql = "SELECT (regexp_matches(gn.data,'(.*) '))[1] as title,gn.id,gn.uuid,u.username,u.realname FROM geonetworkmetadata gn left join users u on gn.owner=u.id
+ WHERE gn.uuid not in (select uuid from metadata)
+ order by gn.id desc
+ ";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }
+ //元数据导入
+ else if($ac=="import")
+ {
+ $this->_helper->viewRenderer('newdata-import');
+ }
+ //从模板新建元数据
+ else if($ac=="add-by-template")
+ {
+ $keywords = $this->_request->getParam('q');
+ $sql="select id,(regexp_matches(data,'(.*) '))[1] as title,(owner-$u_id) as isowner from metadata where istemplate='y' and schemaid='iso19115'";
+ if(!empty($keywords))
+ {
+ $this->view->q = $keywords;
+ $search=new Search($keywords);
+ $where=$search->sql_expr(array("data"));
+ $sql.=' and '.$where;
+ }
+ $sql.=" order by changedate desc";
+ $sth = $this->wdb->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(10);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ $this->_helper->viewRenderer('newdata-add');
+ }
+
+ else if($ac=="add-by-data")
+ {
+ $keywords = $this->_request->getParam('q');
+ $sql = "SELECT md.title,md.uuid,md.description,gn.id as gid FROM normalmetadata md
+ left join geonetworkmetadata gn on md.uuid=gn.uuid
+ WHERE gn.id is not null";
+ if(!empty($keywords))
+ {
+ $this->view->q = $keywords;
+ $search=new Search($keywords);
+ $where=$search->sql_expr(array("md.title","md.description"));
+ $sql.=' and '.$where;
+ }
+ $sql.=" order by md.ts_created desc";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $rows = $sth->fetchAll();
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(10);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ $this->_helper->viewRenderer('newdata-add-bydata');
+ }
+ //元数据格式检查
+ else if ($ac=="validate")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $data = "";
+ $id = $this->_request->getParam('id');
+ $sql="select uuid,data from geonetworkmetadata where id=?";
+ $sth=$this->db->prepare($sql);
+ $sth->execute(array($id));
+ $row=$sth->fetch();
+
+ $iso=new ISO19115();
+ @$iso->loadXML($row['data']);
+ if ($iso->validate())
+ {
+ $data=array("error"=>"元数据中发现错误。 ".implode(" ",$iso->error));
+ $this->jsonexit($data);
+ return true;
+ } else {
+ $data=array("error"=>"元数据中没有发现错误。 ");
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+ //提交数据
+ else if($ac=="commit")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $data = "";
+ $id = $this->_request->getParam('id');
+ try{
+ if(empty($id) || !is_numeric($id))
+ {
+ $data = array("error"=>"参数错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $changelog = $this->_request->getParam('changelog');
+ if(empty($changelog))
+ {
+ $data = array("error"=>'请输入变更信息');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ // 1. 权限认定:当前用户必须和其owner相同
+ // 数据应当没有评审状态,没有作者信息
+ $sql="select uuid,data from geonetworkmetadata where id=?";
+ $sth=$this->db->prepare($sql);
+ $sth->execute(array($id));
+ $row=$sth->fetch();
+ if (empty($row))
+ {
+ $data = array("error"=>'无权限修改数据');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ // 保存数据作者信息
+
+ // 2. 保存变化记录 save changelog & userid for the latest version
+ $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select v.id from mdversion v left join geonetworkmetadata g on v.uuid=g.uuid where g.id=? order by v.ts_created desc limit 1)";
+ $this->db->query($sql,array($changelog,$u_id,$id));
+
+ // 3. 保存数据评审状态
+ //导入元数据
+ $iso=new ISO19115();
+ @$iso->saveDB($this->db,$row['data']);
+ //进入评审库
+ $sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from geonetworkmetadata where id=?";
+ $this->db->query($sql,array($u_id,$id));
+ //email to admin
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"metadata-new-admin",array(
+ 'user' => $user->username,
+ 'uuid' => $iso->uuid,
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $iso->resTitle,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ $mail->send();
+
+ $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!');
+ $this->jsonexit($data);
+ return true;
+ }catch(Exception $e) {
+ $sql="delete from mdstatus where uuid in (select uuid from geonetworkmetadata where id=?)";
+ $this->db->query($sql,array($id));
+ $msg = "提交失败,请确认权限后重试";
+ if($this->debug>0)
+ {$msg .= $e->getMessage();}
+ $data = array("error"=>$msg);
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ }// newdataAction() 新建元数据
+
+ /*
+ * projectsAction() 数据汇交计划
+ *
+ *
+ *
+ *
+ */
+ function projectAction()
+ {
+ include_once("Heihe.php");
+ $heihe = new Heihe($this->db);
+
+ $this->view->input_NameDefaultVal = "专家姓名";
+ $this->view->input_EmailDefaultVal = "专家email";
+
+ $projectTable = $heihe->tbl_heiheproject;
+
+ $ac = $this->_getParam('ac');
+
+ if(empty($ac) || $ac == "index")
+ {
+ $this->_helper->viewRenderer('project');
+
+ //Search Link
+ $this->view->searchLink = "/admin/heihe/project/ac/index/";
+
+ $q = $this->_getParam('q');
+
+ $wheresql = array();
+
+ if(!empty($q))
+ {
+ $wheresql[] = " (title LIKE '%$q%' OR
+ code LIKE '%$q%' OR
+ name LIKE '%$q%' OR
+ email LIKE '%$q%')";
+ $this->view->searchKeyword = $q;
+ }
+
+ if(count($wheresql)>0)
+ {
+ $wheresql = join(" AND ",$wheresql);
+ }else{
+ $wheresql = "";
+ }
+
+ if(!empty($wheresql))
+ {
+ $wheresql = " WHERE ".$wheresql;
+ }
+
+ $sql = "SELECT * FROM $projectTable $wheresql
+ ORDER BY id ASC";
+ $sth = $this->db->query($sql);
+ $rows = $sth->fetchAll();
+
+ foreach ($rows as $k=>$v)
+ {
+ $rows[$k]['status_alias'] = $heihe->getStatus($v['status']);
+ }
+
+ $this->view->Count = count($rows);
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+
+ $this->view->project_status = $heihe->project_status;
+
+ return true;
+ }//ac == index
+
+ //邀请专家
+ if($ac == "invite")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $pid = $this->_getParam('id');
+ $name = $this->_getParam('name');
+ $email = $this->_getParam('email');
+
+ if(!is_numeric($pid))
+ {
+ $this->jsonexit(array("error"=>"参数错误"));
+ return true;
+ }
+
+ if(empty($name) || $name == $this->view->input_NameDefaultVal)
+ {
+ $this->jsonexit(array("error"=>"请输入专家姓名"));
+ return true;
+ }
+
+ if(empty($email) || $email == $this->view->input_EmailDefaultVal)
+ {
+ $this->jsonexit(array("error"=>"请输入专家Email"));
+ return true;
+ }
+
+ $code = $heihe->makeValidation($email);
+
+ $expert_data = array(
+ "name"=>$name, //专家姓名
+ "email"=>$email, //专家email
+ "created"=>date("Y-m-d H:i:s",time()), //邀请时间
+ "validation"=>$code, //验证码
+ );
+
+ $rs = $heihe->expertAdd($pid,$expert_data);
+
+ if($rs > 0)
+ {
+ $this->sendMailToExpert($pid,$name,$email,$code);// 最后再加入一个非0的数字型参数即可使用调试邮箱发送
+ $this->jsonexit(array("msg"=>"专家邀请成功!","invited"=>1));
+ return true;
+ }else if($rs==-1){
+ $this->jsonexit(array("error"=>"该专家已经邀请过"));
+ return true;
+ }else{
+ $this->jsonexit(array("error"=>"邀请失败,请重试"));
+ return true;
+ }
+
+ return true;
+ }// 邀请专家
+
+ if($ac == "showexpert")
+ {
+
+ $this->_helper->layout->setLayout('layout-iframe');
+ $this->_helper->viewRenderer('project-showexpert');
+
+ $pid = $this->_getParam('id');
+
+ if(empty($pid) || !is_numeric($pid))
+ {
+ $this->view->error = "参数错误";
+ return true;
+ }
+
+ $this->view->pid = $pid;
+
+ $experts = $heihe->expertRead($pid);
+
+ if(!is_array($experts))
+ {
+ $this->view->error = "此项目还没有邀请专家";
+ return true;
+ }
+
+ foreach($experts as $k=>$v)
+ {
+ $experts[$k]['url'] = $heihe->makeInviteLink($pid,$v['validation']);
+ }
+
+ $this->view->experts = $experts;
+
+ return true;
+ }//ac == showexpert 查看跟踪专家
+
+ if($ac == "remove")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $pid = $this->_getParam('id');
+ $del = $this->_getParam('del');
+
+ if(!empty($del) && !empty($pid))
+ {
+
+ $rs = $heihe->expertRemove($pid,$del);
+
+ if($rs)
+ {
+ $this->jsonexit(array("deleted"=>1));
+ return true;
+ }else{
+ $this->jsonexit(array("error"=>"删除失败,请重试"));
+ return true;
+ }
+
+ }else{
+ $this->jsonexit(array("error"=>"参数错误,请刷新"));
+ return true;
+ }
+
+ }//ac == remove 删除专家
+
+ if($ac == "upload")
+ {
+ $this->_helper->layout->setLayout('layout-iframe');
+ $this->_helper->viewRenderer('project-upload');
+
+ $submit = $this->_getParam('submit');
+
+ $pid = $this->_getParam('pid');
+
+ if(empty($pid) || !is_numeric($pid))
+ {
+ $this->view->error = "参数错误";
+ return true;
+ }
+
+ $this->view->pid = $pid;
+
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $uid = $user->id;
+ }
+
+ if(!empty($submit) && empty($this->view->error))
+ {
+
+ $files=new files();
+ $msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'heihe');
+
+ if(empty($msg['error']))
+ {
+ $msg['error']="";
+ $filename = $msg['db_path'];
+ $filesize = $msg['file_size'];
+ $filedesc = $this->_request->getParam('filedesc');
+ $filetype = $msg['file_type'];
+ $realname = $msg['realname'];
+
+ if(!empty($row['attachid']))
+ {
+ $sql = "SELECT * FROM attachments WHERE id={$row['attachid']}";
+ $sth = $this->db->query($sql);
+ $attach = $sth->fetch();
+ $this->db->exec("DELETE FROM attachments WHERE id={$row['attachid']} AND filetype='heihe'");
+ @unlink($this->view->config->upload.$attach['filename']);
+ }
+
+ $sql = " INSERT INTO attachments (filename,filetype,filedesc,userid,filesize,realname) values
+ ('$filename','heihe','$filedesc','$uid','$filesize','$realname') RETURNING id";
+ $sth = $this->db->prepare($sql);
+ $sth->execute();
+ $att = $sth->fetch(PDO::FETCH_ASSOC);
+ $msg['attid'] = $attid = $att['id'];
+
+ $sql = "UPDATE heiheproject SET attachid=$attid WHERE id=$pid";
+ $sth = $this->db->exec($sql);
+
+ if($sth)
+ {
+ $this->view->message = "上传成功";
+ }else{
+ @unlink($filename);
+ $this->view->error = '附件上传失败:写入附件表出错';
+ return true;
+ }
+ }else{
+ @unlink($filename);
+ $this->view->error = "附件上传失败".$msg['error'];
+ return true;
+ }
+ }
+
+ $sql = "SELECT * FROM heiheproject WHERE id=$pid";
+ $sth = $this->db->query($sql);
+ $row = $sth->fetch();
+
+ if(!empty($row['attachid']))
+ {
+ $sql = "SELECT * FROM attachments WHERE id = {$row['attachid']}";
+ $sth = $this->db->query($sql);
+ $this->view->att = $sth->fetch();
+ }
+
+ return true;
+ }//ac == upload
+
+ //改变状态
+ if($ac == "changestatus")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $project = $this->_getParam('p');
+ $status = $this->_getParam('s');
+
+ if(!is_numeric($status))
+ {
+ $this->jsonexit(array('error'=>'参数错误'));
+ return true;
+ }
+
+ $code = $heihe->ChangeStatus($project,$status);
+
+ if($code > 0)
+ {
+ $this->jsonexit(
+ array(
+ 'msg'=>'修改成功!',
+ 'status'=>$heihe->getStatus($status)
+ )
+ );
+ return true;
+ }else{
+ $this->jsonexit(array('error'=>'参数错误'));
+ return true;
+ }
+
+ }//ac == "changestatus"
+
+ }//projectsAction()
+
+ public function fundAction()
+ {
+ $this->_helper->layout->setLayout('administry');
+ $ac = $this->_getParam('ac');
+ $submit = $this->_getParam('submit');
+ $this->view->q = $keyword = $this->_getParam('q');
+
+ include_once("helper/view.php");
+ include_once("data/Fund.php");
+ $fund = new Fund($this->db);
+
+ $auth = Zend_Auth::getInstance();
+ if($auth->hasIdentity())
+ {
+ $user = $auth->getIdentity();
+ $uid = $user->id;
+ }
+
+ if($ac=='index' || empty($ac))
+ {
+ $uuid = $this->_getParam('uuid');
+ if(empty($uuid))
+ {
+ $rows = $fund->fetch(NULL,true,0,$keyword);
+ view::addPaginator($rows,$this,10);
+ }else{
+ include('data/Metadata.php');
+ $md = new Metadata($this->db);
+ $this->view->md = $md->view($uuid);
+ $rows = $fund->fetch($uuid);
+ view::addPaginator($rows,$this,10);
+ }
+ return true;
+ }
+
+ if($ac == 'datalist')
+ {
+ $this->_helper->viewRenderer('fund-data-list');
+ $this->view->q = $q = $this->_getParam('q');
+ $rows = $fund->fetchFromData(true,0,$q);
+ view::addPaginator($rows,$this,10);
+ return true;
+ }
+
+ if($ac == 'dataview')
+ {
+ $this->_helper->viewRenderer('fund-data-view');
+ $this->view->q = $q = $this->_getParam('q');
+ $id = $this->_getParam('id');
+ $this->view->fund = $fund->view($id);
+ $rows = $fund->fetchFromData($id,0,$q);
+ view::addPaginator($rows,$this,10);
+ return true;
+ }
+
+ if($ac == "add")
+ {
+ $this->_helper->viewRenderer('fund-add');
+ if(!empty($submit))
+ {
+ $data = $fund->_getParams($this->_request);
+ $data['userid'] = $uid;
+
+ if($fund->add($data) == true)
+ {
+ $this->view->AlertType = "alert-success";
+ $this->view->msg = "添加成功!";
+ $this->view->jump_url = "/admin/data/fund/";
+ return true;
+ }else{
+ $this->view->data = $data;
+ $this->view->error = "添加失败,请重试";
+ return true;
+ }
+ }
+ return true;
+ }//add
+
+ if($ac == "edit")
+ {
+ $this->_helper->viewRenderer('fund-add');
+ $id = $this->_getParam('id');
+
+ if(empty($id))
+ {
+ $this->view->AlertType = "alert-error";
+ $this->view->msg = "参数错误";
+ $this->view->jump_url = "/admin/data/fund/";
+ }
+
+ if(!empty($submit))
+ {
+ $data = $fund->_getParams($this->_request);
+ $data['userid'] = $uid;
+ if($fund->update($data,$id) == true)
+ {
+ $this->view->AlertType = "alert-success";
+ $this->view->msg = "修改成功!";
+ $this->view->jump_url = "/admin/data/fund/";
+ return true;
+ }else{
+ $this->view->data = $data;
+ $this->view->error = "修改失败,请重试";
+ return true;
+ }
+ }else{
+ $this->view->data = $fund->view($id);
+ }
+ return true;
+ }//edit
+
+ if($ac == "del")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('id');
+
+ if(empty($id))
+ {
+ $this->jsonexit(array('error'=>'参数错误'));
+ return true;
+ }
+
+ if($fund->delete($id) == true)
+ {
+ $this->jsonexit(array('success'=>$id));
+ return true;
+ }else{
+ $this->jsonexit(array('error'=>'删除失败'));
+ return true;
+ }
+
+ }//del
+
+ if($ac == "formd")
+ {
+ $uuid = $this->_getParam('uuid');
+
+ if(empty($uuid))
+ {
+ $this->view->AlertType = "alert-error";
+ $this->view->msg = "参数错误";
+ $this->view->jump_url = "/admin/data/fund/";
+ }
+
+ $id = $this->_getParam('id');
+ $order = $this->_getParam('order');
+
+ if(!empty($id))
+ {
+ if($fund->addToMdfund($uuid,$id,$order))
+ {
+ $this->view->AlertType = "alert-success";
+ $this->view->error = "添加成功!可以继续选择并添加";
+ }else{
+ $this->view->AlertType = "alert-error";
+ $this->view->error = "添加失败!该数据可能已被添加";
+ }
+ }
+
+ $mfid = $this->_getParam('mfid');
+
+ if(!empty($mfid))
+ {
+ if($fund->changeorder($mfid,$order))
+ {
+ $this->view->AlertType = "alert-success";
+ $this->view->error = "排序修改成功!";
+ }else{
+ $this->view->AlertType = "alert-error";
+ $this->view->error = "排序修改失败!";
+ }
+ $rows = $fund->fetch($uuid);
+ }else{
+ $this->view->ct = "ct";
+ $rows = $fund->fetch($uuid,false,0,$this->_getParam('q'));
+ }
+
+ include('data/Metadata.php');
+ $md = new Metadata($this->db);
+ $this->view->md = $md->view($uuid);
+
+ view::addPaginator($rows,$this,10);
+
+ return true;
+ }//formd
+
+ if($ac == "mdfunddel")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('id');
+
+ if(empty($id))
+ {
+ $this->jsonexit(array('error'=>'参数错误'));
+ return true;
+ }
+
+ if($fund->mfdelete($id) == true)
+ {
+ $this->jsonexit(array('success'=>$id));
+ return true;
+ }else{
+ $this->jsonexit(array('error'=>'删除失败'));
+ return true;
+ }
+ }//mdfunddel
+
+ if($ac == "data")
+ {
+ $this->_helper->viewRenderer('fund-data');
+
+ $id = $this->_getParam('id');
+ $del = $this->_getParam('del');
+ $this->view->info = $fund->view($id);
+
+ if(!empty($del))
+ {
+ $s = $fund->dataRelationDelete($del);
+ if($s)
+ {
+ $this->view->error = view::Error("删除成功!","alert-sccuess");
+ }else{
+ $this->view->error = view::Error("删除失败!","alert-error");
+ }
+ }
+
+ $rows = $fund->getData($id,$keyword);
+ view::addPaginator($rows,$this,10);
+ }
+
+ }//fund
+
+ public function visualAction()
+ {
+ $uuid = $this->_getParam('uuid');
+ $submit = $this->_getParam('submit');
+
+ if(!empty($uuid))
+ {
+ $this->_helper->viewRenderer('visual-add');
+ $this->view->data = ['uuid' => $uuid];
+ if(empty($submit))
+ return true;
+
+
+ }
+ }
+
+ public function doiAction()
+ {
+ $ac = $this->_getParam('ac');
+ $submit = $this->_getParam('submit');
+ $uuid = $this->_getParam('uuid');
+ $q=$this->_getParam('q');
+
+ include_once("data/Doi.php");
+ $doi = new Doi($this->db);
+ include_once("helper/view.php");
+
+ if( empty($ac) || $ac == "index")
+ {
+ if(empty($uuid))
+ {
+ $rows = $doi->fetch(0,$q);
+ view::addPaginator($rows,$this,10);
+ }else{
+ $this->_redirect('/admin/data/doi/ac/edit/?uuid='.$uuid);
+ return true;
+ }
+ return true;
+ }//index
+
+ else if($ac == "add")
+ {
+ $this->_helper->viewRenderer('doi-add');
+
+ }//add
+
+ else if($ac == "edit")
+ {
+ $this->_helper->viewRenderer('doi-add');
+ $id = $this->_getParam('id');
+ if(empty($uuid) && empty($id))
+ {
+ view::Msg('alert-error',"参数错误",-1);
+ return false;
+ }
+
+ if(empty($submit)){
+ if(!empty($uuid))
+ {
+ $this->view->uuid = $uuid;
+ $this->view->data = $doi->view($uuid);
+ include('data/Metadata.php');
+ $md = new Metadata($this->db);
+ $metadata = $md->view($uuid);
+ if(empty($this->view->data))
+ {
+ $this->view->data = array(
+ 'uuid'=>$uuid,
+ 'title'=>$metadata['title'],
+ 'doi'=>$metadata['doi'],
+ 'url'=>"http://" . $_SERVER['HTTP_HOST'].'/data/'.$uuid,
+ 'publisher'=>'寒区旱区科学数据中心',
+ 'title_en'=>$metadata['title_en'],
+ 'publisher_en'=>'Cold and Arid Regions Science Data Center at Lanzhou',
+ );
+ }else{
+ $this->view->data['doi'] = $metadata['doi'];
+ $this->view->data['info'] = $doi->data_process_out($this->view->data);
+ if(empty($this->view->data['ts_published']))
+ {
+ $this->view->data['title'] = $metadata['title'];
+ $this->view->data['title_en'] = $metadata['title_en'];
+ }
+ }
+ }else{
+ $this->view->data = $doi->view($uuid);
+ $this->view->data['info'] = $doi->data_process_out($this->view->data);
+ }
+ }else{
+ $data = $doi->_getParams($this->_request);
+ $this->view->data = $data;
+ $info = $doi->checkinfo($data['info']);
+ if(!is_array($info)){
+ $this->view->error = view::Error($info);
+ return true;
+ }else{
+ $data['info'] = $info;
+ $data['info'] = $doi->sksort($data['info'],"order",SORT_ASC);
+ }
+ $state = $doi->update($data,$uuid);
+ if($state)
+ {
+ $this->view->msg = view::Msg('alert-success',"修改成功!",'/admin/data/doi/uuid/'.$uuid);
+ return false;
+ }else{
+ $this->view->error = view::Error("修改失败");
+ return false;
+ }
+ }
+ }//edit
+
+ else if($ac == "del")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $id = $this->_getParam('id');
+
+ if(empty($id))
+ {
+ $this->jsonexit(array('error'=>'参数错误'));
+ return true;
+ }
+
+ if($doi->delete($id) == true)
+ {
+ $this->jsonexit(array('success'=>$id));
+ return true;
+ }else{
+ $this->jsonexit(array('error'=>'删除失败'));
+ return true;
+ }
+
+ }//del
+ else if ($ac=="convert") //转换为chinadoi所需元数据格式
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+ $sql="select d.*,m.description from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid='$uuid'";
+ $row=$this->db->fetchRow($sql);
+ $timestamp=date('YmdHis');
+ $authors=explode(',',substr($row['authors'],1,-1));
+ $orgs=explode(',',substr($row['organization'],1,-1));
+ $doi='
+
+ '.$timestamp.'
+ '.$timestamp.'
+
+ ISTIC
+ tuy@istic.ac.cn
+
+ ISTIC
+
+
+
+
+ ';
+ foreach($authors as $k=>$v)
+ {
+ $doi.=''.$v.' ';
+ $doi.=''.$orgs[$k].' ';
+ }
+ $doi.='
+
+
+
+ ';
+ $doi.=' ';
+ $doi.=''.$row['publisher'].' ';
+ $doi.='
+ '.$row['doi'].'
+ '.$timestamp.'
+
+ ';
+ $doi.='
+
+
+ ';
+ $this->getResponse()->setHeader('Content-Type', 'text/xml')->setHeader('Content-Disposition','attachment; filename="'.$row['uuid'].'.xml"')
+ ->setHeader('Content-Type','application/force-download')->setBody($doi);
+ $this->db->query('update datadoi set ts_submitted=now() where uuid=?',array($uuid));
+ }
+ else if ($ac=="verified") //成功申请
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+ $row=$this->db->fetchRow("select * from datadoi where uuid='$uuid'");
+ $content=@file_get_contents("http://dx.doi.org/".$row['doi']);
+ if (strpos($content,$row['doi'])!==false) //成功申请
+ {
+ $sql="update datadoi set ts_published=now() where uuid=? and ts_published is null";
+ $this->db->query($sql,array($uuid));
+ $this->jsonexit(array('success'=>'成功申请'));
+ } else
+ $this->jsonexit(array('success'=>'该DOI验证失败,请检查!'));
+ return true;
+ }
+ }//doi
+
+ //发送邀请专家的邮件
+ public function sendMailToExpert($pid,$name,$email,$code,$test=0)
+ {
+ include_once("Heihe.php");
+ $heihe = new Heihe($this->db);
+ $url = $heihe->makeInviteLink($pid,$code);
+
+ include_once("EmailText.php");
+ $mailtp=new EmailText($this->db,"expert-invite",array(
+ 'name' => $name,
+ 'url' => $url,
+ ));
+
+ echo $mailtp->getBody();
+ echo $mailtp->getSubject();
+ if($test == 0)
+ {
+ include_once("WestdcMailer.php");
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ $mail->addTo($email);
+ $mail->send();
+ }else{
+ $mail_config = array(
+ 'ssl' => 'ssl',
+ 'port' => 465,
+ 'auth' => 'login',
+ 'username' => 'la5c@qq.com',
+ 'password' => ''
+ );
+ $transport = new Zend_Mail_Transport_Smtp('smtp.qq.com', $mail_config);
+ Zend_Mail::setDefaultTransport($transport);
+
+ $mail=new Zend_Mail();
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setFrom('la5c@qq.com','Jack');
+ $mail->addTo("la5c@qq.com");
+ $mail->setSubject($mailtp->getSubject());
+ $mail->send();
+ }
+ }//发送邀请邮件
+
+ /*
+ 获得单个文件的信息
+ return array row
+ */
+ public function getFileinfo($id){
+ $sql = "select * from attachments where id='$id'";
+ $re= $this->db->query($sql);
+ $row= $re->fetch();
+ return $row;
+ }
+
+ /*
+ * 保存XML数据到数据库
+ */
+ private function import($xml)
+ {
+ $iso=new ISO19115();
+ $iso->saveDB($this->db,$xml);
+ }
+
+ /*
+ * jsonexit() 退出并返回json数据
+ *
+ * param array $data 要返回的JSON数据,可以是任意数组
+ *
+ * return JSON-response
+ */
+ public function jsonexit($data){
+ $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
+ return true;
+ }//jsonexit() 退出并返回json数据
+}
diff --git a/application/admin/views/scripts/data/left.phtml b/application/admin/views/scripts/data/left.phtml
index c11dd3f4..c2e4447d 100644
--- a/application/admin/views/scripts/data/left.phtml
+++ b/application/admin/views/scripts/data/left.phtml
@@ -18,4 +18,5 @@
特色推荐 -->
专题管理
支持项目
+可视化数据
\ No newline at end of file
diff --git a/application/admin/views/scripts/data/md.phtml b/application/admin/views/scripts/data/md.phtml
index b44a4935..5a25f514 100644
--- a/application/admin/views/scripts/data/md.phtml
+++ b/application/admin/views/scripts/data/md.phtml
@@ -66,7 +66,8 @@
邮件通知 |
支持项目 |
- DOI
+ DOI |
+ 数据可视化
数据贡献者:= $item['author']; ?>
diff --git a/application/admin/views/scripts/data/visual-add.phtml b/application/admin/views/scripts/data/visual-add.phtml
new file mode 100644
index 00000000..02726a20
--- /dev/null
+++ b/application/admin/views/scripts/data/visual-add.phtml
@@ -0,0 +1,45 @@
+headTitle($this->config->title->site);
+ $this->headTitle('后台管理');
+ $this->headTitle()->setSeparator(' - ');
+ $this->breadcrumb('首页 ');
+ $this->breadcrumb('后台首页 ');
+ $this->breadcrumb('数据管理 ');
+ $this->breadcrumb('同步GEONETWORK元数据');
+ $this->breadcrumb()->setSeparator(' > ');
+?>
+
+
+ = $this->partial('data/left.phtml'); ?>
+
+
+
+
+
diff --git a/application/admin/views/scripts/data/visual.phtml b/application/admin/views/scripts/data/visual.phtml
new file mode 100644
index 00000000..ad30c23d
--- /dev/null
+++ b/application/admin/views/scripts/data/visual.phtml
@@ -0,0 +1,20 @@
+headTitle($this->config->title->site);
+ $this->headTitle('后台管理');
+ $this->headTitle()->setSeparator(' - ');
+ $this->headLink()->appendStylesheet('/css/admin.css');
+ $this->breadcrumb('首页 ');
+ $this->breadcrumb('后台首页 ');
+ $this->breadcrumb('数据管理 ');
+ $this->breadcrumb('同步GEONETWORK元数据');
+ $this->breadcrumb()->setSeparator(' > ');
+?>
+
+
+ = $this->partial('data/left.phtml'); ?>
+
+
+
+
+
+
diff --git a/application/module/Westdc/Visual/Handle/VisualHandle.php b/application/module/Westdc/Visual/Handle/VisualHandle.php
new file mode 100644
index 00000000..566e92e3
--- /dev/null
+++ b/application/module/Westdc/Visual/Handle/VisualHandle.php
@@ -0,0 +1,43 @@
+db = \Zend_Registry::get('db');
+
+
+ $this->config = \Zend_Registry::get('config');
+ $this->table = new Table();
+ }
+
+ public function deleteAuthor(\Zend_EventManager_Event $e)
+ {
+ $id = $e->getParam('id');
+
+ $ref = new Reference();
+
+ return $ref->deleteReferenceAuthor($id);
+ }
+
+ public function deleteTag(\Zend_EventManager_Event $e)
+ {
+ $id = $e->getParam('id');
+
+ $ref = new Reference();
+
+ return $ref->deleteReferenceTag($id);
+ }
+}
\ No newline at end of file
diff --git a/application/module/Westdc/Visual/Listener/VisualListener.php b/application/module/Westdc/Visual/Listener/VisualListener.php
new file mode 100644
index 00000000..b5bcf3f5
--- /dev/null
+++ b/application/module/Westdc/Visual/Listener/VisualListener.php
@@ -0,0 +1,27 @@
+event = new \Zend_EventManager_EventManager();
+ }
+
+ public function attach(\Zend_EventManager_EventCollection $events)
+ {
+ $Handler = new ReferenceHandler();
+ $events->attach('submit.checkParam', array($Handler, 'checkReferenceParam'), 100);
+ $events->attach('submit.processData', array($Handler, 'processReferenceData'), 100);
+ $events->attach('submit.recordPosted', array($Handler, 'recordPosted'), 100);
+ $events->attach('submit.recordChanged', array($Handler, 'recordChanged'), 100);
+ }
+
+ public function detach(\Zend_EventManager_EventCollection $events)
+ {
+
+ }
+
+}
diff --git a/application/module/Westdc/Visual/Visual.php b/application/module/Westdc/Visual/Visual.php
new file mode 100644
index 00000000..e97bfae8
--- /dev/null
+++ b/application/module/Westdc/Visual/Visual.php
@@ -0,0 +1,86 @@
+db = \Zend_Registry::get('db');
+ $Listener = new Listener();
+ @$this->getEventManager()->attachAggregate($Listener);
+
+ }
+
+ public function getEventManager(\Zend_EventManager_EventCollection $events = NULL)
+ {
+ if ($events !== NULL) {
+ $this->events = $events;
+ } elseif ($this->events === NULL) {
+ $this->events = new \Zend_EventManager_EventManager(__CLASS__);
+ }
+ return $this->events;
+ }
+
+ //添加
+ public function add($data,$id = 0)
+ {
+ $params = compact('data');
+ $results = $this->getEventManager()->trigger('submit.checkParam', $this, $params);
+ $cache_data = $results->last();
+
+ if($cache_data !== true)
+ {
+ return $cache_data;
+ }
+
+ $results = $this->getEventManager()->trigger('submit.processData', $this, $params);
+ $data = $results->last();
+
+ $dbh = new dbh();
+
+ if(empty($id))
+ {
+ $id = $dbh->insert($this->mainTable,$data,true);
+
+ if(!empty($id) && is_numeric($id))
+ {
+ $this->getEventManager()->trigger('submit.recordPosted', $this, $params);
+ return true;
+ }else{
+ if($id === false)
+ {
+ return '服务器开小差了,请稍后再试';
+ }else{
+ return '服务器处理中遇到错误,请联系管理员';
+ }
+ }
+ }//add
+
+ else{
+ if(!$dbh->update($this->mainTable,$data," id=$id ",true))
+ {
+ $this->getEventManager()->trigger('submit.recordChanged', $this, $params);
+ return "修改失败!请重试";
+ }else{
+ return true;
+ }
+ }//edit
+
+ }// add()
+
+ //删除
+ public function del($id)
+ {
+ if(!is_numeric($id) || empty($id) || $id< 0)
+ {
+ return false;
+ }
+
+ $sql = "DELETE FROM {$this->mainTable} WHERE id=$id";
+ return $this->db->exec($sql);
+ }
+}
\ No newline at end of file