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'); 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"); } 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"); } 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 { 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 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{ $select=$this->db->select(); $select->from('mdref',array('id as mdid','refid','place')) ->join('metadata','metadata.uuid=mdref.uuid') ->join('reference','reference.id=mdref.refid') ->order('metadata.ts_created desc') ->order('mdref.place'); $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($this->_getParam('page')); $paginator->setItemCountPerPage(30); $paginator->setView($this->view); Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); $this->view->paginator=$paginator; }//列表 } /* * 删除元数据,删除前有确认 */ 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($this->view->config->upload,$_FILES['Filedata'],empty($uuid)?'file':'md'); 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']; $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($this->view->config->upload,$_FILES['Filedata'],empty($uuid)?'file':'md'); 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']; $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(); foreach($atts as $k=>$v) { $atts[$k]['html']= $v['realname'].'['. round($v['filesize']/1024,2) .' kb]
'; } echo Zend_Json::encode($atts); exit(); }else { exit(); } }else{ exit(); } //不输出错误 }//获取附件 /* versionAction 版本管理 */ public function versionAction(){ $ac = $this->_request->getParam('ac'); $uuid = $this->_request->getParam('uuid'); $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 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'].'/data/doc/review/1/uuid/'.$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/'.$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(); view::addPaginator($rows,$this->view,$this->_request); }else{ include('data/Metadata.php'); $md = new Metadata($this->db); $this->view->md = $md->view($uuid); $rows = $fund->fetch($uuid); view::addPaginator($rows,$this->view,$this->_request); } 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); } include('data/Metadata.php'); $md = new Metadata($this->db); $this->view->md = $md->view($uuid); view::addPaginator($rows,$this->view,$this->_request); 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->view,$this->_request); } }//fund public function doiAction() { $ac = $this->_getParam('ac'); $submit = $this->_getParam('submit'); $uuid = $this->_getParam('uuid'); 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(); view::addPaginator($rows,$this->view,$this->_request); }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); if(empty($this->view->data)) { include('data/Metadata.php'); $md = new Metadata($this->db); $metadata = $md->view($uuid); $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['info'] = $doi->data_process_out($this->view->data); } }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.=' '.$row['title'].' '; $doi.=''.$row['description'].''; $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数据 }