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.=' - - <![CDATA['.$row['title'].']]> - - '; - $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.=' + + <![CDATA['.$row['title'].']]> + + '; + $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 | + 数据可视化

    数据贡献者:

    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(' > '); +?> +
    +
    + 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(' > '); +?> +
    +
    + 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