diff --git a/application/admin/controllers/DataController.php b/application/admin/controllers/DataController.php index 2b292abd..7a80637b 100755 --- a/application/admin/controllers/DataController.php +++ b/application/admin/controllers/DataController.php @@ -1,2677 +1,2707 @@ -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() - { - //其他连接 - } - - /* - * - * 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'); - - $submd=$this->view->config->sub->metadata; - - if ($delete) - { - $sql="delete from metadata where uuid=? and uuid in (select uuid from ".$this->view->config->sub->meatadata.")"; - try { - $this->db->query("delete from mdstatus where uuid=? and uuid in (select uuid from ".$this->view->config->sub->meatadata.")",array($delete)); - $this->db->query("delete from mdauthor where uuid=? and uuid in (select uuid from ".$this->view->config->sub->meatadata.")",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 $submd 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 $submd 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 $submd md - LEFT JOIN mdstat s ON md.uuid=s.uuid - LEFT JOIN geonetworkmetadata g ON g.uuid=md.uuid - LEFT JOIN mdstatus st ON md.uuid=st.uuid - LEFT JOIN dataset ds ON md.uuid=ds.uuid - ORDER BY md.id DESC"; - $sth = $this->db->prepare($sql); - $sth->execute(); - $rows = $sth->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage($this->view->config->page->max); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); - $this->view->paginator=$paginator; - } - - }//mdAction 元数据管理 - - /* - * datasetAction() - * 数据路径:即数据的物理主目录 - * - */ - function datasetAction() - { - - $ac = $this->_request->getParam('ac'); - - if($ac == "getdataset") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer('md-dataset'); - - $uuid = $this->_request->getParam('uuid'); - $sql = "SELECT * FROM dataset WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($uuid)); - $row = $sth->fetch(); - - $this->view->dataset = $row; - $this->view->uuid = $uuid; - } - - else if($ac == "update") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_request->getParam('uuid'); - $host = $this->_getParam('host'); - $path = $this->_getParam('path'); - - $sql = "UPDATE dataset SET host=?,path=? WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $ds = $sth ->execute(array($host,$path,$uuid)); - if ($host=='ftp1.westgis.ac.cn') - { - file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); - } else if ($host=='ftp.sanjiangyuan.org.cn') - { - file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); - } - - if($ds) - { - $data = array("ok"=>1); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>"处理中出现错误"); - $this->jsonexit($data); - return true; - } - } - - else if($ac == "add") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_request->getParam('uuid'); - $host = $this->_getParam('host'); - $path = $this->_getParam('path'); - - $sql = "SELECT * FROM dataset WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($uuid)); - $row = $sth->fetch(); - if(!empty($row['id'])) - { - $data = array("error"=>"该数据已经有存档信息,不能重复添加"); - $this->jsonexit($data); - return true; - } - - $sql = "INSERT INTO dataset (uuid,host,path) VALUES (?,?,?)"; - $sth = $this->db->prepare($sql); - $ds = $sth ->execute(array($uuid,$host,$path)); - if ($host=='ftp1.westgis.ac.cn') - { - file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); - } else if ($host=='ftp.sanjiangyuan.org.cn') - { - file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); - } - - if($ds) - { - $data = array("ok"=>1); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>"处理中出现错误"); - $this->jsonexit($data); - return true; - } - } - else if ($ac=="import") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_request->getParam('uuid'); - $sql = "SELECT * FROM dataset WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($uuid)); - $row = $sth->fetch(); - - if ($row['host']=='ftp1.westgis.ac.cn') - { - file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); - echo '

数据目录成功导入!

'; - } else if ($row['host']=='ftp.sanjiangyuan.org.cn') - { - file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); - echo '

数据目录成功导入!

'; - } else { - echo '

数据目录未导入!

'; - } - } - - }//datasetAction存档管理 - - /* - * commentAction() - * 反馈管理 - * ALTER TABLE comments ADD COLUMN reply integer NOT NULL DEFAULT 0; - */ - function commentAction() - { - $delete=(int)$this->_getParam('delete'); - $uuid = $this->_getParam('uuid'); - $reply = $this->_getParam('reply'); - $replylist = $this->_getParam('replylist'); - $delreply = $this->_getParam('delreply'); - $submd=$this->view->config->sub->metadata; - - if ($delete) - { - $sql="delete from comments where id=? and uuid in (select uuid from $submd)"; - 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 $submd 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 - right JOIN $submd 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 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 sourceAction() - { - $do = $this->_request->getParam('do'); - $uuid = $this->_request->getParam('uuid'); - $id = $this->_request->getParam('id'); - $q = $this->_request->getParam('q'); - $search = $this->_request->getParam('search'); - - if ($do == 'add') { - - $redirect = "/admin/data/source/"; - - if(!empty($_POST['submit'])) - { - try{ - $title = $this->_request->getParam('title'); - $uuid = $this->_request->getParam('uuid'); - $code = $this->_request->getParam('code'); - $description = $this->_request->getParam('description'); - $has_pages = $this->_request->getParam('has_pages'); - $has_agreement = $this->_request->getParam('has_agreement'); - - $data = array( - 'title' => $title, - 'uuid' => $uuid, - 'code' => $code, - 'description' => $description, - 'has_pages' => $has_pages, - 'has_agreement' => $has_agreement - ); - - if($this->db->insert('source',$data)) - { - $this->messenger->addMessage('添加来源信息成功'); - $this->_redirect($redirect); - } - }catch(Exception $e){ - $this->messenger->addMessage('添加来源信息失败:'.$e->getMessage()); - $this->_redirect('/admin/data/source/do/add'); - } - - } - - $this->_helper->viewRenderer('sourceadd'); - }// 添加项目来源 - - else if($do == 'edit' && !empty($id)) - { - - if(!empty($_POST['submit'])) - { - try{ - $title = $this->_request->getParam('title'); - $uuid = $this->_request->getParam('uuid'); - $code = $this->_request->getParam('code'); - $description = $this->_request->getParam('description'); - $has_pages = $this->_request->getParam('has_pages'); - $has_agreement = $this->_request->getParam('has_agreement'); - - $sql = "update source set title='$title',uuid='$uuid',code='$code',description='$description',has_pages='$has_pages',has_agreement='$has_agreement' where id='$id'"; - - if($this->db->exec($sql)) - { - $this->messenger->addMessage('修改来源信息成功'); - $this->_redirect("/admin/data/source/do/edit/id/$id"); - } - }catch(Exception $e){ - $this->messenger->addMessage('修改来源信息失败:'.$e->getMessage()); - $this->_redirect("/admin/data/source/do/edit/id/$id"); - } - - } - - $sql = "select * from source where id='$id'"; - $rs = $this->db->query($sql); - $row = $rs->fetch(); - - $this->view->info = $row; - - $this->_helper->viewRenderer('sourceadd'); - - }// 编辑单条信息 - - else if($do == 'datasource' && !empty($uuid)) - { - $redirect = "/admin/data/source/do/datasource/uuid/$uuid"; - - $this->view->uuid = $uuid; - $sql = "select md.title,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md - left join datasource ds on ds.uuid=md.uuid - left join source s on s.id=ds.sourceid - where md.uuid='$uuid'"; - $rs = $this->db->query($sql); - $row = $rs->fetch(); - - $this->view->info = $row; - - if(!empty($_POST['submit'])) - { - $sourceid = $this->_request->getParam('sourceid'); - if(empty($sourceid)) - { - $this->messenger->addMessage('请选择项目来源'); - $this->_redirect($redirect); - } - - $sql=""; - if(empty($row['id'])) - { - $sql = "insert into datasource (uuid,sourceid) values ('$uuid','$sourceid')"; - }else - { - $sql = "update datasource set uuid='$uuid',sourceid='$sourceid' where id='{$row['id']}'"; - } - try{ - if($this->db->exec($sql)) - { - $this->messenger->addMessage('修改项目来源成功'); - $this->_redirect($redirect); - } - else - { - $this->messenger->addMessage('修改项目来源失败'); - $this->_redirect($redirect); - } - }catch (Exception $e){ - $this->messenger->addMessage('修改项目来源失败:'.$e->getMessage()); - $this->_redirect($redirect); - } - - } - - - $wheresql = array(); - - if(!empty($q) && !empty($search)) - { - $this->view->q = $q; - $wheresql[] = " title like '%$q%' "; - } - - if(count($wheresql>0))$wheresql = join(' and ',$wheresql); - else $wheresql=''; - - if($wheresql!='') - { - $wheresql = 'where '.$wheresql; - } - - $sql = "select * from source $wheresql order by id desc"; - $rs = $this->db->query($sql); - $rows = $rs->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(30); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - - $this->_helper->viewRenderer('sourceselect'); - }// 为元数据选择项目来源 - - else if($do == 'del' && !empty($id)) - { - $redirect = "/admin/data/source/"; - $sql = "delete from source where id='$id'"; - try{ - if($this->db->exec($sql)) - { - $this->messenger->addMessage('删除成功'); - $this->_redirect($redirect); - }else{ - $this->messenger->addMessage('删除失败,可能该数据已不存在'); - $this->_redirect($redirect); - } - }catch (Exception $e){ - $this->messenger->addMessage('删除失败:'.$e->getMessage()); - $this->_redirect($redirect); - } - }// 删除项目来源 - - else if($do == 'fetch' && !empty($id)) - { - - $wheresql = array(); - - $wheresql[] = " ds.sourceid='$id' "; - - if(!empty($q) && !empty($search)) - { - $this->view->q = $q; - $wheresql[] = " title like '%$q%' "; - } - - if(count($wheresql>0))$wheresql = join(' and ',$wheresql); - else $wheresql=''; - - if($wheresql!='') - { - $wheresql = 'where '.$wheresql; - } - - $sql = "select md.title,md.uuid,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md - left join datasource ds on ds.uuid=md.uuid - left join source s on s.id=ds.sourceid - $wheresql - order by id desc"; - $rs = $this->db->query($sql); - $rows = $rs->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(30); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - - $this->_helper->viewRenderer('sourcefetchone'); - - }//查看某项目来源中的所有元数据 - - else if($do == 'delsource' && !empty($id)) - { - $redirect = "/admin/data/source/do/datasource/uuid/$uuid"; - - $sql = "delete from datasource where id='$id'"; - - try{ - if($this->db->exec($sql)) - { - $this->messenger->addMessage('删除成功'); - $this->_redirect($redirect); - }else{ - $this->messenger->addMessage('删除失败,可能该数据已不存在'); - $this->_redirect($redirect); - } - }catch (Exception $e){ - $this->messenger->addMessage('删除失败:'.$e->getMessage()); - $this->_redirect($redirect); - } - - - }// 清除元数据来源记录 - elseif ($do=='sync') { //同步数据来源到metadata表 - $redirect = "/admin/data/source/"; - $sql = "update metadata m set source=s.uuid from source s right join datasource d on s.id=d.sourceid where m.uuid=d.uuid"; - if($this->db->exec($sql)) - { - $this->messenger->addMessage('成功同步数据来源'); - $this->_redirect($redirect); - }else{ - $this->messenger->addMessage('同步数据来源失败'); - $this->_redirect($redirect); - } - } - - else - { - $wheresql = array(); - - if(!empty($q) && !empty($search)) - { - $this->view->q = $q; - $wheresql[] = " title like '%$q%' "; - } - - if(count($wheresql>0))$wheresql = join(' and ',$wheresql); - else $wheresql=''; - - if($wheresql!='') - { - $wheresql = 'where '.$wheresql; - } - - $sql = "select * from source $wheresql order by id desc"; - $rs = $this->db->query($sql); - $rows = $rs->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(30); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - }// 项目来源管理 - - - }//function sourceAction - - - function attachmentsAction() - { - $submit = $this->_request->getParam('submit'); - $add = $this->_request->getParam('add'); - $search = $this->_request->getParam('search'); - $delete = $this->_request->getParam('delete'); - $edit = $this->_request->getParam('edit'); - $down = $this->_request->getParam('down'); - $uuid = $this->_request->getParam('uuid'); - $mdtitle = $this->_request->getParam('mdtitle'); - $mdattdel = $this->_request->getParam('mdattdel'); - $attupdate = $this->_getParam('attupdate'); - - if(!empty($uuid)&&!empty($mdtitle)) - { - $this->view->uuid= $uuid; - $this->view->mdtitle=$mdtitle; - } - - if($add) - { - $this->_helper->viewRenderer('attachmentsadd'); - if(!empty($uuid)) - { - $this->view->uuid = $uuid; - } - }//附件添加 - - elseif($attupdate) - { - $submit = $this->_getParam('submit'); - if(!empty($submit)) - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $id = $this->_getParam('attupdate'); - - $files=new Files(); - $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true); - - if(empty($msg['error'])) - { - $msg['error']=""; - $filename = $msg['db_path']; - $filesize = $msg['file_size']; - $filedesc = $this->_request->getParam('filedesc'); - $filetype = 'md'; - $realname = $msg['realname']; - - - $sql = "UPDATE attachments SET filename=?,filetype=?,filesize=?,realname=? WHERE id=?"; - $sth = $this->db->prepare($sql); - $ds = $sth->execute(array($filename,$filetype,$filesize,$realname,$id)); - - if($ds) - { - $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]'; - $msg['ok']= 1; - echo Zend_Json::encode($msg); - exit(); - }else{ - @unlink($filename); - $data = array("error"=>'附件上传失败:写入附件表出错'); - $this->jsonexit($data); - return true; - } - }else{ - @unlink($filename); - $data = array("error"=>'附件上传失败:'.$msg['error']); - $this->jsonexit($data); - return true; - } - - - $data = array("error"=>"处理中出现错误".$id); - $this->jsonexit($data); - return true; - }else{ - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer('attachments-update'); - $id = $this->_getParam('attupdate'); - $this->view->id = $id; - } - - }//附件文件更新 - - else if($mdattdel) - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - - $sql = "delete from mdattach where uuid=? AND id=?"; - $sth = $this->db->prepare($sql); - $ds = $sth->execute(array($uuid,$mdattdel)); - if($ds) - { - $data = array("status"=>1); //操作状态代码 : 1=>成功 2=>失败 - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>"处理中出现错误"); - $this->jsonexit($data); - return true; - } - } - - else if($delete) - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - - //需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录 - - $basepath = $this->view->config->upload; - - //从数据库获取文件路径 - - $info = $this->getFileinfo($delete); - - $filepath = $basepath.$info['filename']; - - $sql = "SELECT * FROM mdattach WHERE id=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($delete)); - $rows = $sth->fetchAll(); - - if(count($rows)>0) - { - $data = array("error"=>'删除失败!该文件有元数据附件信息,不能直接删除',"status"=>0); - $this->jsonexit($data); - return true; - } - - $sql = "SELECT * FROM mdreviewattach WHERE attachid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($delete)); - $rows = $sth->fetchAll(); - - if(count($rows)>0) - { - $data = array("error"=>'删除失败!该文件有对应评审附件信息,不能直接删除',"status"=>0); - $this->jsonexit($data); - return true; - } - - $sql = "SELECT link FROM reference WHERE link!=''"; - $sth = $this->db->prepare($sql); - $sth->execute(); - $rows = $sth->fetchAll(); - - $ids = array(); - foreach($rows as $k=>$v) - { - if(preg_match("/service/i",$v['link'])) - { - $ids[] = str_replace("/service/attach/id/","",$v['link']); - } - unset($rows[$k]); - } - unset($rows); - - if(in_array($delete,$ids)) - { - $data = array("error"=>'删除失败!该文件有对应文献附件信息,不能直接删除',"status"=>0); - $this->jsonexit($data); - return true; - } - - if(unlink($filepath)) - { - $sql = "delete from attachments where id='$delete'"; - if($this->db->exec($sql)>0) - { - $data = array("status"=>1); - $this->jsonexit($data); - return true; - } - } - else - { - $sql = "delete from attachments where id='$delete'"; - if($this->db->exec($sql)>0) - { - $data = array("error"=>'文件删除失败,仅删除数据库记录,请手动删除文件:'.$info['filename'],"status"=>0); - $this->jsonexit($data); - return true; - } - } - - }//删除 - - else if($edit>0) - { - - if(empty($submit)) - { - - $this->view->info = $this->getFileinfo($edit); - - $this->_helper->viewRenderer('attachmentsadd'); - - } - else - { - $filedesc = $this->_request->getParam('filedesc'); - - $sql="update attachments set filedesc='$filedesc' where id='$edit'"; - - if($this->db->exec($sql)>0) - { - $this->messenger->addMessage('编辑成功'); - $this->_redirect("/admin/data/attachments/edit/$edit"); - } - } - - }//编辑 - - else if($search && $search!='my') - { - $keyword = $this->_request->getParam('keyword'); - if(empty($keyword)) - { - $this->messenger->addMessage('请输入关键词'); - $this->_redirect("/admin/data/attachments/search/1"); - } - else - { - $sql="select * from attachments where filedesc like '%$keyword%'"; - $re = $this->db->query($sql); - $rows=$re->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(30); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - } - - }//搜索 - - else if($search && $search=='my') - { - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $userid = $user->id; - $sql="select * from attachments where userid='$userid'"; - $re= $this->db->query($sql); - $rows = $re->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(30); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); - $this->view->paginator=$paginator; - } - }//我的附件列表 - - else if ($down>0) - { - - $sql = "select * from attachments where id='$down'"; - - $re = $this->db->query($sql); - - $row = $re->fetch(); - - $file = new files(); - - $fullPath = $this->view->config->upload.$row['filename']; - - - // Parse Info / Get Extension - $fsize = filesize($fullPath); - $path_parts = pathinfo($fullPath); - $ext = strtolower($path_parts["extension"]); - - // Determine Content Type - switch ($ext) { - case "pdf": $ctype="application/pdf"; break; - case "exe": $ctype="application/octet-stream"; break; - case "zip": $ctype="application/zip"; break; - case "doc": $ctype="application/msword"; break; - case "xls": $ctype="application/vnd.ms-excel"; break; - case "ppt": $ctype="application/vnd.ms-powerpoint"; break; - case "gif": $ctype="image/gif"; break; - case "png": $ctype="image/png"; break; - case "jpeg": - case "jpg": $ctype="image/jpg"; break; - default: $ctype="application/force-download"; - } - - $content=file_get_contents($fullPath); - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - $this->getResponse()->setHeader('Content-Type', 'application/octet-stream') - ->setHeader('Content-Disposition','attachment; filename="'.basename($fullPath).'"') - ->setHeader('Content-Length', $fsize) - ->setHeader('Content-Type','application/force-download') - ->setHeader('Content-Type','application/download') - ->setHeader('Content-Type',$ctype) - ->setHeader('Content-Description','File Transfer') - ->setHeader('Content-Transfer-Encoding','binary') - ->setHeader('Expires',0) - ->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0') - ->setHeader('Pragma','public') - ->setBody($content); - - //$sql = "update attachments set downtimes=downtimes+1 where id='$down'"; - //$this->db->exec($sql); - - }//附件下载 - - else - { - $submd=$this->view->config->sub->metadata; - $sql="select * from attachments where id in (select id from mdattach where uuid in (select uuid from $submd)) order by id desc"; - $re= $this->db->query($sql); - $rows = $re->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(30); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); - $this->view->paginator=$paginator; - }//所有附件 - }//attachments 附件 - - function uploadAction(){ - $this->_helper->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_getParam('uuid'); - - try{ - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $userid = $user->id; - } - - if(empty($userid)||!is_numeric($userid)){ - $msg['error'] = "请先登录"; - echo Zend_Json::encode($msg); - exit(); - } - - if($user->usertype!='administrator') - { - $msg['error'] = "您无权使用此功能"; - echo Zend_Json::encode($msg); - exit(); - } - - $files=new Files(); - $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true); - - if(empty($msg['error'])) - { - $msg['error']=""; - $filename = $msg['db_path']; - $filesize = $msg['file_size']; - $filedesc = $this->_request->getParam('filedesc'); - $filetype = 'md'; - $realname = $msg['realname']; - - - $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$userid','$filesize','$realname') RETURNING id"; - $sth = $this->db->prepare($sql); - $sth->execute(); - $att = $sth->fetch(PDO::FETCH_ASSOC); - $msg['attid'] = $attid = $att['id']; - - $sql = "insert into mdattach (uuid,id) values ('$uuid','$attid')"; - if(empty($uuid) || $this->db->exec($sql)) - { - $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]
'; - echo Zend_Json::encode($msg); - exit(); - }else{ - $msg['error'] = '附件上传失败:写入附件表出错'; - @unlink($filename); - echo Zend_Json::encode($msg); - exit(); - } - - - }else{ - $msg['error'] = '附件上传失败:'.$msg['error']; - @unlink($filename); - echo Zend_Json::encode($msg); - exit(); - } - - }catch(Exception $e){ - $msg['error'] = "错误:".$e->getMessage(); - echo Zend_Json::encode($msg); - exit(); - } - }// uploadAction ajax上传附件 - - function getattsAction(){ - - $this->_helper->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_request->getParam('uuid'); - - if($uuid!='') - { - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $userid = $user->id; - $sql = "select m.*,a.*,d.title from mdattach m - left join attachments a on m.id = a.id - left join metadata d on m.uuid=d.uuid where m.uuid='$uuid' - ORDER BY a.ts_created ASC"; - $rs = $this->db->query($sql); - $atts = $rs->fetchAll(); - - echo Zend_Json::encode($atts); - exit(); - }else - { - exit(); - } - }else{ - exit(); - } - //不输出错误 - }//获取附件 - - - /* - versionAction 版本管理 - */ - - public function versionAction(){ - - $ac = $this->_request->getParam('ac'); - $uuid = $this->_request->getParam('uuid'); - $submd=$this->view->config->sub->metadata; - set_time_limit(0); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - } - - //查看单条数据的所有版本 - if (!empty($uuid) && empty($ac)) - { - //view the versions of the data - $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname,g.id as gid FROM mdversion v - LEFT JOIN $submd 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 $submd 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 $submd md ON md.uuid=v.uuid - WHERE md.title IS NOT NULL"; - if(!empty($keywords)) - { - $search=new Search($keywords); - $where=$search->sql_expr(array("md.title","md.description")); - $sql.=' and '.$where; - } - $sql.=" group by md.uuid,md.title"; - - $sth = $this->db->prepare($sql); - $sth->execute(); - $rows = $sth->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(10); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - - $this->_helper->viewRenderer('version-bydata'); - } - - - //删除某个版本 - else if($ac=="delete") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = ""; - - try{ - $id = $this->_request->getParam('id'); - if(empty($id) || !is_numeric($id)) - { - $data = array("error"=>"参数错误"); - $this->jsonexit($data); - return true; - } - - $sql = "DELETE FROM mdversion WHERE id=?"; - $sth = $this->db->prepare($sql); - $ex = $sth -> execute(array($id)); - - if($ex) - { - $data = array("deleted"=>$id, "error"=>"删除成功"); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>'删除失败,请确认权限后重试'); - $this->jsonexit($data); - return true; - } - }catch(Exception $e) { - $msg = "删除失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$msg); - $this->jsonexit($data); - return true; - } - } - - //恢复到geonetwork - else if($ac == "restore") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = ""; - try{ - $id = $this->_request->getParam('id'); - if(empty($id) || !is_numeric($id)) - { - $data = array("error"=>"参数错误"); - $this->jsonexit($data); - return true; - } - - $this->wdb=Zend_Db::factory($this->view->config->geonetwork); - $sql = "SELECT v.xml,v.uuid FROM mdversion v - WHERE v.id=?"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($id)); - $row = $sth->fetch(); - - $sql = "SELECT data FROM metadata WHERE uuid=?"; - $sth = $this->wdb->prepare($sql); - $sth ->execute(array($row['uuid'])); - $row_geo = $sth->fetch(); - - if($row['xml']==$row_geo['data']) - { - $data = array("error"=>'无须恢复,元数据相同'); - $this->jsonexit($data); - return true; - } - - $sql = "UPDATE metadata SET data=? WHERE uuid=?"; - $sth = $this->wdb->prepare($sql); - $ex = $sth ->execute(array($row['xml'],$row['uuid'])); - - if($ex) - { - $data = array("error"=>'恢复成功'); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>'恢复失败,请确认权限后重试'); - $this->jsonexit($data); - return true; - } - }catch(Exception $e) { - $msg = "恢复失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$msg); - $this->jsonexit($data); - return true; - } - } - - //发布到评审 - else if($ac == "commit") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = ""; - try{ - $id = $this->_request->getParam('id'); - if(empty($id) || !is_numeric($id)) - { - $data = array("error"=>"参数错误"); - $this->jsonexit($data); - return true; - } - - $changelog = $this->_request->getParam('changelog'); - if(empty($changelog)) - { - $data = array("error"=>'请输入变更信息'); - $this->jsonexit($data); - return true; - } - - // 1. 权限认定 --skip - // 2. 保存变化记录 save changelog & userid - $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id=?"; - $this->db->query($sql,array($changelog,$u_id,$id)); - - // 3. 获取数据评审状态 - $sql = "SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid - left join metadata m on s.uuid=m.uuid WHERE v.id=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($id)); - $row = $sth->fetch(); - - $sql="select * from xunsearch where uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($row['uuid'])); - $data_search = $sth->fetch(); - $search=new Search(); - $search->update($data_search); - - if (empty($row)) //无对应记录 - { - $sql="select m.id from metadata m left join mdversion v on m.uuid=v.uuid where v.id=?"; - $sth=$this->db->prepare($sql); - $sth->execute(array($id)); - $mrow=$sth->fetch(); - if (empty($mrow)) //说明是新数据 - { - //导入元数据 - $iso=new ISO19115(); - $iso->saveDB($this->db,$row['xml']); - //进入评审库 - $sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from mdversion where id=?"; - $this->db->query($sql,array($u_id,$id)); - - //email to admin - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"metadata-new-admin",array( - 'user' => $user->username, - 'uuid' => $iso->uuid, - 'email'=> $user->email, - //元数据标题 - 'title'=> $iso->resTitle, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - - unset($mail); - unset($mailtp); - //email to author - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"metadata-new-author",array( - 'user' => $user->username, - 'uuid' => $iso->uuid, - 'email'=> $user->email, - //元数据标题 - 'title'=> $iso->resTitle, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($user->email); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!'); - $this->jsonexit($data); - return true; - } else { //说明是已发布的数据且数据不存在评审信息 - //同步元数据 - $iso=new ISO19115(); - $iso->saveDB($this->db,$row['xml']); - //移除中间版本 - $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null"; - $this->db->query($sql,array($id)); - //修改评审状态为发布,且由其提交的用户进行管理 - $sql="insert into mdstatus (uuid,status,userid) select uuid,6,? from mdversion where id=?"; - $this->db->query($sql,array($u_id,$id)); - - //email to admin & author - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"metadata-release",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - 'changelog'=>$changelog, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($this->view->config->service->email); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - $data = array("commited"=>1,"error"=>'该版本已经成功发布!'); - $this->jsonexit($data); - return true; - } - } - else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收 - { - //同步元数据 - $iso=new ISO19115(); - $iso->saveDB($this->db,$row['xml']); - //email to admin - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"version-commit-admin",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - 'changelog'=>$changelog, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - - unset($mail); - unset($mailtp); - //email to author - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'数据服务组'); - $mailtp=new EmailText($this->db,"version-commit-author",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($user->email); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - $data = array("commited"=>1,"error"=>'该版本已经成功提交并同步,请等待数据中心进一步处理!'); - $this->jsonexit($data); - return true; - } - else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息 - { - //同步元数据 - $iso=new ISO19115(); - $iso->saveDB($this->db,$row['xml']); - - //email to admin - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"version-commit-admin",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - 'changelog'=>$changelog, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - - unset($mail); - unset($mailtp); - //email to author - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'数据服务组'); - $mailtp=new EmailText($this->db,"version-commit-author",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($user->email); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - //email to experts - $sql="select u.username,u.email,u.id from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($row['uuid'])); - $experts = $sth->fetchAll(); - - unset($mail); - unset($mailtp); - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"version-commit-expert",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/doc/uuid/'.$row['uuid']); - $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc'); - $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$row['uuid']); - $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.pdf'); - if($this->debug==0) - { - foreach ($experts as $expert) $mail->addTo($expert['email']); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!'); - $this->jsonexit($data); - return true; - } - else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态 - { - //同步元数据 - $iso=new ISO19115(); - $iso->saveDB($this->db,$row['xml']); - //移除中间版本 - $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null"; - $this->db->query($sql,array($id)); - - //email to admin & author - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'数据服务组'); - $mailtp=new EmailText($this->db,"metadata-release",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - 'changelog'=>$changelog, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($this->view->config->service->email); - //$mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - //@$mail->send(); - - $data = array("commited"=>1,"error"=>'该版本已经成功发布!'); - $this->jsonexit($data); - return true; - } - - }catch(Exception $e) { - $msg = "提交失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$msg); - $this->jsonexit($data); - return true; - } - }//发布到评审 - - //与前一个版本对比 - else if($ac == "diff" || $ac=="diff1") - { - $this->_helper->viewRenderer('version-diff'); - $id = $this->_request->getParam('id'); - if(empty($id) || !is_numeric($id)) - { - $this->view->error = "参数错误"; - return true; - } - - $sql = "SELECT v.uuid,md.title FROM mdversion v - LEFT JOIN metadata md ON v.uuid=md.uuid - WHERE v.id=?"; - $sth = $this->db->prepare($sql); - $sth -> execute(array($id)); - - $row = $sth->fetch(); - if ($ac=='diff') - { - $sql = "SELECT v.* FROM mdversion v - WHERE v.uuid=? and v.ts_created<=(select ts_created from mdversion where id=?) - ORDER BY v.ts_created DESC - LIMIT ?"; - $sth = $this->db->prepare($sql); - $sth -> execute(array($row['uuid'],$id,2)); - } else { - $sql = "SELECT v.* FROM mdversion v - WHERE v.uuid=? and (v.id=? or (v.ts_created<(select ts_created from mdversion where id=?) and changelog is not null)) - ORDER BY v.ts_created DESC - LIMIT ?"; - $sth = $this->db->prepare($sql); - $sth -> execute(array($row['uuid'],$id,$id,2)); - } - - $rows = $sth->fetchAll(); - - if(count($rows)<2) - { - $this->view->error = "对比失败:之前没有版本可以对比"; - return true; - } - - $this->view->info = $row; - $this->view->data = $rows; - - } - - - }//versionAction 版本控制 - - - /* - * authorAction() 数据作者 - * - * param string $ac //动作 - =add 添加 - =edit 编辑 - =update 更新 - =del 删除 - =list 列出所有数据作者 - - * param string $uuid //UUID - * - * return view|application-json - */ - public function authorAction(){ - - $ac = $this->_getParam('ac'); - $uuid = $this->_getParam('uuid'); - $submd=$this->view->config->sub->metadata; - - 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 $submd 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 $submd 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 and uuid in (select uuid from $submd) - 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 $submd 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 $submd 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() 新建元数据 - - - public function fundAction() - { - $this->_helper->layout->setLayout('administry'); - $ac = $this->_getParam('ac'); - $submit = $this->_getParam('submit'); - $this->view->q = $keyword = $this->_getParam('q'); - - include_once("helper/view.php"); - include_once("data/Fund.php"); - $fund = new Fund($this->db); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - if($ac=='index' || empty($ac)) - { - $uuid = $this->_getParam('uuid'); - if(empty($uuid)) - { - $rows = $fund->fetch(NULL,true,0,$keyword); - view::addPaginator($rows,$this,10); - }else{ - include('data/Metadata.php'); - $md = new Metadata($this->db); - $this->view->md = $md->view($uuid); - $rows = $fund->fetch($uuid); - view::addPaginator($rows,$this,10); - } - return true; - } - - if($ac == 'datalist') - { - $this->_helper->viewRenderer('fund-data-list'); - $this->view->q = $q = $this->_getParam('q'); - $rows = $fund->fetchFromData(true,0,$q); - view::addPaginator($rows,$this,10); - return true; - } - - if($ac == 'dataview') - { - $this->_helper->viewRenderer('fund-data-view'); - $this->view->q = $q = $this->_getParam('q'); - $id = $this->_getParam('id'); - $this->view->fund = $fund->view($id); - $rows = $fund->fetchFromData($id,0,$q); - view::addPaginator($rows,$this,10); - return true; - } - - if($ac == "add") - { - $this->_helper->viewRenderer('fund-add'); - if(!empty($submit)) - { - $data = $fund->_getParams($this->_request); - $data['userid'] = $uid; - - if($fund->add($data) == true) - { - $this->view->AlertType = "alert-success"; - $this->view->msg = "添加成功!"; - $this->view->jump_url = "/admin/data/fund/"; - return true; - }else{ - $this->view->data = $data; - $this->view->error = "添加失败,请重试"; - return true; - } - } - return true; - }//add - - if($ac == "edit") - { - $this->_helper->viewRenderer('fund-add'); - $id = $this->_getParam('id'); - - if(empty($id)) - { - $this->view->AlertType = "alert-error"; - $this->view->msg = "参数错误"; - $this->view->jump_url = "/admin/data/fund/"; - } - - if(!empty($submit)) - { - $data = $fund->_getParams($this->_request); - $data['userid'] = $uid; - if($fund->update($data,$id) == true) - { - $this->view->AlertType = "alert-success"; - $this->view->msg = "修改成功!"; - $this->view->jump_url = "/admin/data/fund/"; - return true; - }else{ - $this->view->data = $data; - $this->view->error = "修改失败,请重试"; - return true; - } - }else{ - $this->view->data = $fund->view($id); - } - return true; - }//edit - - if($ac == "del") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $id = $this->_getParam('id'); - - if(empty($id)) - { - $this->jsonexit(array('error'=>'参数错误')); - return true; - } - - if($fund->delete($id) == true) - { - $this->jsonexit(array('success'=>$id)); - return true; - }else{ - $this->jsonexit(array('error'=>'删除失败')); - return true; - } - - }//del - - if($ac == "formd") - { - $uuid = $this->_getParam('uuid'); - - if(empty($uuid)) - { - $this->view->AlertType = "alert-error"; - $this->view->msg = "参数错误"; - $this->view->jump_url = "/admin/data/fund/"; - } - - $id = $this->_getParam('id'); - $order = $this->_getParam('order'); - - if(!empty($id)) - { - if($fund->addToMdfund($uuid,$id,$order)) - { - $this->view->AlertType = "alert-success"; - $this->view->error = "添加成功!可以继续选择并添加"; - }else{ - $this->view->AlertType = "alert-error"; - $this->view->error = "添加失败!该数据可能已被添加"; - } - } - - $mfid = $this->_getParam('mfid'); - - if(!empty($mfid)) - { - if($fund->changeorder($mfid,$order)) - { - $this->view->AlertType = "alert-success"; - $this->view->error = "排序修改成功!"; - }else{ - $this->view->AlertType = "alert-error"; - $this->view->error = "排序修改失败!"; - } - $rows = $fund->fetch($uuid); - }else{ - $this->view->ct = "ct"; - $rows = $fund->fetch($uuid,false,0,$this->_getParam('q')); - } - - include('data/Metadata.php'); - $md = new Metadata($this->db); - $this->view->md = $md->view($uuid); - - view::addPaginator($rows,$this,10); - - return true; - }//formd - - if($ac == "mdfunddel") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $id = $this->_getParam('id'); - - if(empty($id)) - { - $this->jsonexit(array('error'=>'参数错误')); - return true; - } - - if($fund->mfdelete($id) == true) - { - $this->jsonexit(array('success'=>$id)); - return true; - }else{ - $this->jsonexit(array('error'=>'删除失败')); - return true; - } - }//mdfunddel - - if($ac == "data") - { - $this->_helper->viewRenderer('fund-data'); - - $id = $this->_getParam('id'); - $del = $this->_getParam('del'); - $this->view->info = $fund->view($id); - - if(!empty($del)) - { - $s = $fund->dataRelationDelete($del); - if($s) - { - $this->view->error = view::Error("删除成功!","alert-sccuess"); - }else{ - $this->view->error = view::Error("删除失败!","alert-error"); - } - } - - $rows = $fund->getData($id,$keyword); - view::addPaginator($rows,$this,10); - } - - }//fund - - public function visualAction() - { - $uuid = $this->_getParam('uuid'); - $submit = $this->_getParam('submit'); - - if(!empty($uuid)) - { - $this->_helper->viewRenderer('visual-add'); - $this->view->data = ['uuid' => $uuid]; - if(empty($submit)) - return true; - - - } - } - - - - /* - 获得单个文件的信息 - return array row - */ - public function getFileinfo($id){ - $sql = "select * from attachments where id='$id'"; - $re= $this->db->query($sql); - $row= $re->fetch(); - return $row; - } - - - /* - * jsonexit() 退出并返回json数据 - * - * param array $data 要返回的JSON数据,可以是任意数组 - * - * return JSON-response - */ - public function jsonexit($data){ - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK)); - return true; - }//jsonexit() 退出并返回json数据 -} +db=Zend_Registry::get('db'); + $this->view->config = Zend_Registry::get('config'); + $this->messenger=$this->_helper->getHelper('FlashMessenger'); + $this->view->messages = $this->messenger->getMessages(); + $this->debug = 0; //1:debug, 0:release + $this->debug_email='wangliangxu@lzb.ac.cn'; + $this->view->theme = new Theme(); + $this->_helper->layout->setLayout('administry'); + } + function postDispatch() + { + $this->view->messages = $this->messenger->getMessages(); + } + function indexAction() + { + //其他连接 + } + + /* + * + * 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'); + + $submd=$this->view->config->sub->metadata; + + if ($delete) + { + $sql="delete from metadata where uuid=? and uuid in (select uuid from ".$this->view->config->sub->meatadata.")"; + try { + $this->db->query("delete from mdstatus where uuid=? and uuid in (select uuid from ".$this->view->config->sub->meatadata.")",array($delete)); + $this->db->query("delete from mdauthor where uuid=? and uuid in (select uuid from ".$this->view->config->sub->meatadata.")",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 $submd 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 $submd 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 $submd md + LEFT JOIN mdstat s ON md.uuid=s.uuid + LEFT JOIN geonetworkmetadata g ON g.uuid=md.uuid + LEFT JOIN mdstatus st ON md.uuid=st.uuid + LEFT JOIN dataset ds ON md.uuid=ds.uuid + ORDER BY md.id DESC"; + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage($this->view->config->page->max); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); + $this->view->paginator=$paginator; + } + + }//mdAction 元数据管理 + + /* + * datasetAction() + * 数据路径:即数据的物理主目录 + * + */ + function datasetAction() + { + + $ac = $this->_request->getParam('ac'); + + if($ac == "getdataset") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer('md-dataset'); + + $uuid = $this->_request->getParam('uuid'); + $sql = "SELECT * FROM dataset WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + + $this->view->dataset = $row; + $this->view->uuid = $uuid; + } + + else if($ac == "update") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->getParam('uuid'); + $host = $this->_getParam('host'); + $path = $this->_getParam('path'); + + $sql = "UPDATE dataset SET host=?,path=? WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $ds = $sth ->execute(array($host,$path,$uuid)); + if ($host=='ftp1.westgis.ac.cn') + { + file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); + } else if ($host=='ftp.sanjiangyuan.org.cn') + { + file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); + } + + if($ds) + { + $data = array("ok"=>1); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>"处理中出现错误"); + $this->jsonexit($data); + return true; + } + } + + else if($ac == "add") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->getParam('uuid'); + $host = $this->_getParam('host'); + $path = $this->_getParam('path'); + + $sql = "SELECT * FROM dataset WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + if(!empty($row['id'])) + { + $data = array("error"=>"该数据已经有存档信息,不能重复添加"); + $this->jsonexit($data); + return true; + } + + $sql = "INSERT INTO dataset (uuid,host,path) VALUES (?,?,?)"; + $sth = $this->db->prepare($sql); + $ds = $sth ->execute(array($uuid,$host,$path)); + if ($host=='ftp1.westgis.ac.cn') + { + file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); + } else if ($host=='ftp.sanjiangyuan.org.cn') + { + file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); + } + + if($ds) + { + $data = array("ok"=>1); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>"处理中出现错误"); + $this->jsonexit($data); + return true; + } + } + else if ($ac=="import") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->getParam('uuid'); + $sql = "SELECT * FROM dataset WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + + if ($row['host']=='ftp1.westgis.ac.cn') + { + file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); + echo '

数据目录成功导入!

'; + } else if ($row['host']=='ftp.sanjiangyuan.org.cn') + { + file_get_contents("http://ftp.sanjiangyuan.org.cn/proftp_upload.php?uuid=".$uuid."&filelist=1"); + echo '

数据目录成功导入!

'; + } else { + echo '

数据目录未导入!

'; + } + } + + }//datasetAction存档管理 + + /* + * commentAction() + * 反馈管理 + * ALTER TABLE comments ADD COLUMN reply integer NOT NULL DEFAULT 0; + */ + function commentAction() + { + $delete=(int)$this->_getParam('delete'); + $uuid = $this->_getParam('uuid'); + $reply = $this->_getParam('reply'); + $replylist = $this->_getParam('replylist'); + $delreply = $this->_getParam('delreply'); + $submd=$this->view->config->sub->metadata; + + if ($delete) + { + $sql="delete from comments where id=? and uuid in (select uuid from $submd)"; + 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 $submd 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 + right JOIN $submd 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 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 sourceAction() + { + $do = $this->_request->getParam('do'); + $uuid = $this->_request->getParam('uuid'); + $id = $this->_request->getParam('id'); + $q = $this->_request->getParam('q'); + $search = $this->_request->getParam('search'); + + if ($do == 'add') { + + $redirect = "/admin/data/source/"; + + if(!empty($_POST['submit'])) + { + try{ + $title = $this->_request->getParam('title'); + $uuid = $this->_request->getParam('uuid'); + $code = $this->_request->getParam('code'); + $description = $this->_request->getParam('description'); + $has_pages = $this->_request->getParam('has_pages'); + $has_agreement = $this->_request->getParam('has_agreement'); + + $data = array( + 'title' => $title, + 'uuid' => $uuid, + 'code' => $code, + 'description' => $description, + 'has_pages' => $has_pages, + 'has_agreement' => $has_agreement + ); + + if($this->db->insert('source',$data)) + { + $this->messenger->addMessage('添加来源信息成功'); + $this->_redirect($redirect); + } + }catch(Exception $e){ + $this->messenger->addMessage('添加来源信息失败:'.$e->getMessage()); + $this->_redirect('/admin/data/source/do/add'); + } + + } + + $this->_helper->viewRenderer('sourceadd'); + }// 添加项目来源 + + else if($do == 'edit' && !empty($id)) + { + + if(!empty($_POST['submit'])) + { + try{ + $title = $this->_request->getParam('title'); + $uuid = $this->_request->getParam('uuid'); + $code = $this->_request->getParam('code'); + $description = $this->_request->getParam('description'); + $has_pages = $this->_request->getParam('has_pages'); + $has_agreement = $this->_request->getParam('has_agreement'); + + $sql = "update source set title='$title',uuid='$uuid',code='$code',description='$description',has_pages='$has_pages',has_agreement='$has_agreement' where id='$id'"; + + if($this->db->exec($sql)) + { + $this->messenger->addMessage('修改来源信息成功'); + $this->_redirect("/admin/data/source/do/edit/id/$id"); + } + }catch(Exception $e){ + $this->messenger->addMessage('修改来源信息失败:'.$e->getMessage()); + $this->_redirect("/admin/data/source/do/edit/id/$id"); + } + + } + + $sql = "select * from source where id='$id'"; + $rs = $this->db->query($sql); + $row = $rs->fetch(); + + $this->view->info = $row; + + $this->_helper->viewRenderer('sourceadd'); + + }// 编辑单条信息 + + else if($do == 'datasource' && !empty($uuid)) + { + $redirect = "/admin/data/source/do/datasource/uuid/$uuid"; + + $this->view->uuid = $uuid; + $sql = "select md.title,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md + left join datasource ds on ds.uuid=md.uuid + left join source s on s.id=ds.sourceid + where md.uuid='$uuid'"; + $rs = $this->db->query($sql); + $row = $rs->fetch(); + + $this->view->info = $row; + + if(!empty($_POST['submit'])) + { + $sourceid = $this->_request->getParam('sourceid'); + if(empty($sourceid)) + { + $this->messenger->addMessage('请选择项目来源'); + $this->_redirect($redirect); + } + + $sql=""; + if(empty($row['id'])) + { + $sql = "insert into datasource (uuid,sourceid) values ('$uuid','$sourceid')"; + }else + { + $sql = "update datasource set uuid='$uuid',sourceid='$sourceid' where id='{$row['id']}'"; + } + try{ + if($this->db->exec($sql)) + { + $this->messenger->addMessage('修改项目来源成功'); + $this->_redirect($redirect); + } + else + { + $this->messenger->addMessage('修改项目来源失败'); + $this->_redirect($redirect); + } + }catch (Exception $e){ + $this->messenger->addMessage('修改项目来源失败:'.$e->getMessage()); + $this->_redirect($redirect); + } + + } + + + $wheresql = array(); + + if(!empty($q) && !empty($search)) + { + $this->view->q = $q; + $wheresql[] = " title like '%$q%' "; + } + + if(count($wheresql>0))$wheresql = join(' and ',$wheresql); + else $wheresql=''; + + if($wheresql!='') + { + $wheresql = 'where '.$wheresql; + } + + $sql = "select * from source $wheresql order by id desc"; + $rs = $this->db->query($sql); + $rows = $rs->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(30); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + + $this->_helper->viewRenderer('sourceselect'); + }// 为元数据选择项目来源 + + else if($do == 'del' && !empty($id)) + { + $redirect = "/admin/data/source/"; + $sql = "delete from source where id='$id'"; + try{ + if($this->db->exec($sql)) + { + $this->messenger->addMessage('删除成功'); + $this->_redirect($redirect); + }else{ + $this->messenger->addMessage('删除失败,可能该数据已不存在'); + $this->_redirect($redirect); + } + }catch (Exception $e){ + $this->messenger->addMessage('删除失败:'.$e->getMessage()); + $this->_redirect($redirect); + } + }// 删除项目来源 + + else if($do == 'fetch' && !empty($id)) + { + + $wheresql = array(); + + $wheresql[] = " ds.sourceid='$id' "; + + if(!empty($q) && !empty($search)) + { + $this->view->q = $q; + $wheresql[] = " title like '%$q%' "; + } + + if(count($wheresql>0))$wheresql = join(' and ',$wheresql); + else $wheresql=''; + + if($wheresql!='') + { + $wheresql = 'where '.$wheresql; + } + + $sql = "select md.title,md.uuid,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md + left join datasource ds on ds.uuid=md.uuid + left join source s on s.id=ds.sourceid + $wheresql + order by id desc"; + $rs = $this->db->query($sql); + $rows = $rs->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(30); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + + $this->_helper->viewRenderer('sourcefetchone'); + + }//查看某项目来源中的所有元数据 + + else if($do == 'delsource' && !empty($id)) + { + $redirect = "/admin/data/source/do/datasource/uuid/$uuid"; + + $sql = "delete from datasource where id='$id'"; + + try{ + if($this->db->exec($sql)) + { + $this->messenger->addMessage('删除成功'); + $this->_redirect($redirect); + }else{ + $this->messenger->addMessage('删除失败,可能该数据已不存在'); + $this->_redirect($redirect); + } + }catch (Exception $e){ + $this->messenger->addMessage('删除失败:'.$e->getMessage()); + $this->_redirect($redirect); + } + + + }// 清除元数据来源记录 + elseif ($do=='sync') { //同步数据来源到metadata表 + $redirect = "/admin/data/source/"; + $sql = "update metadata m set source=s.uuid from source s right join datasource d on s.id=d.sourceid where m.uuid=d.uuid"; + if($this->db->exec($sql)) + { + $this->messenger->addMessage('成功同步数据来源'); + $this->_redirect($redirect); + }else{ + $this->messenger->addMessage('同步数据来源失败'); + $this->_redirect($redirect); + } + } + + else + { + $wheresql = array(); + + if(!empty($q) && !empty($search)) + { + $this->view->q = $q; + $wheresql[] = " title like '%$q%' "; + } + + if(count($wheresql>0))$wheresql = join(' and ',$wheresql); + else $wheresql=''; + + if($wheresql!='') + { + $wheresql = 'where '.$wheresql; + } + + $sql = "select * from source $wheresql order by id desc"; + $rs = $this->db->query($sql); + $rows = $rs->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(30); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + }// 项目来源管理 + + + }//function sourceAction + + + function attachmentsAction() + { + $submit = $this->_request->getParam('submit'); + $add = $this->_request->getParam('add'); + $search = $this->_request->getParam('search'); + $delete = $this->_request->getParam('delete'); + $edit = $this->_request->getParam('edit'); + $down = $this->_request->getParam('down'); + $uuid = $this->_request->getParam('uuid'); + $mdtitle = $this->_request->getParam('mdtitle'); + $mdattdel = $this->_request->getParam('mdattdel'); + $attupdate = $this->_getParam('attupdate'); + + if(!empty($uuid)&&!empty($mdtitle)) + { + $this->view->uuid= $uuid; + $this->view->mdtitle=$mdtitle; + } + + if($add) + { + $this->_helper->viewRenderer('attachmentsadd'); + if(!empty($uuid)) + { + $this->view->uuid = $uuid; + } + }//附件添加 + + elseif($attupdate) + { + $submit = $this->_getParam('submit'); + if(!empty($submit)) + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $id = $this->_getParam('attupdate'); + + $files=new Files(); + $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true); + + if(empty($msg['error'])) + { + $msg['error']=""; + $filename = $msg['db_path']; + $filesize = $msg['file_size']; + $filedesc = $this->_request->getParam('filedesc'); + $filetype = 'md'; + $realname = $msg['realname']; + + + $sql = "UPDATE attachments SET filename=?,filetype=?,filesize=?,realname=? WHERE id=?"; + $sth = $this->db->prepare($sql); + $ds = $sth->execute(array($filename,$filetype,$filesize,$realname,$id)); + + if($ds) + { + $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]'; + $msg['ok']= 1; + echo Zend_Json::encode($msg); + exit(); + }else{ + @unlink($filename); + $data = array("error"=>'附件上传失败:写入附件表出错'); + $this->jsonexit($data); + return true; + } + }else{ + @unlink($filename); + $data = array("error"=>'附件上传失败:'.$msg['error']); + $this->jsonexit($data); + return true; + } + + + $data = array("error"=>"处理中出现错误".$id); + $this->jsonexit($data); + return true; + }else{ + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer('attachments-update'); + $id = $this->_getParam('attupdate'); + $this->view->id = $id; + } + + }//附件文件更新 + + else if($mdattdel) + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + + $sql = "delete from mdattach where uuid=? AND id=?"; + $sth = $this->db->prepare($sql); + $ds = $sth->execute(array($uuid,$mdattdel)); + if($ds) + { + $data = array("status"=>1); //操作状态代码 : 1=>成功 2=>失败 + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>"处理中出现错误"); + $this->jsonexit($data); + return true; + } + } + + else if($delete) + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + + //需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录 + + $basepath = $this->view->config->upload; + + //从数据库获取文件路径 + + $info = $this->getFileinfo($delete); + + $filepath = $basepath.$info['filename']; + + $sql = "SELECT * FROM mdattach WHERE id=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($delete)); + $rows = $sth->fetchAll(); + + if(count($rows)>0) + { + $data = array("error"=>'删除失败!该文件有元数据附件信息,不能直接删除',"status"=>0); + $this->jsonexit($data); + return true; + } + + $sql = "SELECT * FROM mdreviewattach WHERE attachid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($delete)); + $rows = $sth->fetchAll(); + + if(count($rows)>0) + { + $data = array("error"=>'删除失败!该文件有对应评审附件信息,不能直接删除',"status"=>0); + $this->jsonexit($data); + return true; + } + + $sql = "SELECT link FROM reference WHERE link!=''"; + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + $ids = array(); + foreach($rows as $k=>$v) + { + if(preg_match("/service/i",$v['link'])) + { + $ids[] = str_replace("/service/attach/id/","",$v['link']); + } + unset($rows[$k]); + } + unset($rows); + + if(in_array($delete,$ids)) + { + $data = array("error"=>'删除失败!该文件有对应文献附件信息,不能直接删除',"status"=>0); + $this->jsonexit($data); + return true; + } + + if(unlink($filepath)) + { + $sql = "delete from attachments where id='$delete'"; + if($this->db->exec($sql)>0) + { + $data = array("status"=>1); + $this->jsonexit($data); + return true; + } + } + else + { + $sql = "delete from attachments where id='$delete'"; + if($this->db->exec($sql)>0) + { + $data = array("error"=>'文件删除失败,仅删除数据库记录,请手动删除文件:'.$info['filename'],"status"=>0); + $this->jsonexit($data); + return true; + } + } + + }//删除 + + else if($edit>0) + { + + if(empty($submit)) + { + + $this->view->info = $this->getFileinfo($edit); + + $this->_helper->viewRenderer('attachmentsadd'); + + } + else + { + $filedesc = $this->_request->getParam('filedesc'); + + $sql="update attachments set filedesc='$filedesc' where id='$edit'"; + + if($this->db->exec($sql)>0) + { + $this->messenger->addMessage('编辑成功'); + $this->_redirect("/admin/data/attachments/edit/$edit"); + } + } + + }//编辑 + + else if($search && $search!='my') + { + $keyword = $this->_request->getParam('keyword'); + if(empty($keyword)) + { + $this->messenger->addMessage('请输入关键词'); + $this->_redirect("/admin/data/attachments/search/1"); + } + else + { + $sql="select * from attachments where filedesc like '%$keyword%'"; + $re = $this->db->query($sql); + $rows=$re->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(30); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + } + + }//搜索 + + else if($search && $search=='my') + { + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $userid = $user->id; + $sql="select * from attachments where userid='$userid'"; + $re= $this->db->query($sql); + $rows = $re->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(30); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); + $this->view->paginator=$paginator; + } + }//我的附件列表 + + else if ($down>0) + { + + $sql = "select * from attachments where id='$down'"; + + $re = $this->db->query($sql); + + $row = $re->fetch(); + + $file = new files(); + + $fullPath = $this->view->config->upload.$row['filename']; + + + // Parse Info / Get Extension + $fsize = filesize($fullPath); + $path_parts = pathinfo($fullPath); + $ext = strtolower($path_parts["extension"]); + + // Determine Content Type + switch ($ext) { + case "pdf": $ctype="application/pdf"; break; + case "exe": $ctype="application/octet-stream"; break; + case "zip": $ctype="application/zip"; break; + case "doc": $ctype="application/msword"; break; + case "xls": $ctype="application/vnd.ms-excel"; break; + case "ppt": $ctype="application/vnd.ms-powerpoint"; break; + case "gif": $ctype="image/gif"; break; + case "png": $ctype="image/png"; break; + case "jpeg": + case "jpg": $ctype="image/jpg"; break; + default: $ctype="application/force-download"; + } + + $content=file_get_contents($fullPath); + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + $this->getResponse()->setHeader('Content-Type', 'application/octet-stream') + ->setHeader('Content-Disposition','attachment; filename="'.basename($fullPath).'"') + ->setHeader('Content-Length', $fsize) + ->setHeader('Content-Type','application/force-download') + ->setHeader('Content-Type','application/download') + ->setHeader('Content-Type',$ctype) + ->setHeader('Content-Description','File Transfer') + ->setHeader('Content-Transfer-Encoding','binary') + ->setHeader('Expires',0) + ->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0') + ->setHeader('Pragma','public') + ->setBody($content); + + //$sql = "update attachments set downtimes=downtimes+1 where id='$down'"; + //$this->db->exec($sql); + + }//附件下载 + + else + { + $submd=$this->view->config->sub->metadata; + $sql="select * from attachments where id in (select id from mdattach where uuid in (select uuid from $submd)) order by id desc"; + $re= $this->db->query($sql); + $rows = $re->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(30); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); + $this->view->paginator=$paginator; + }//所有附件 + }//attachments 附件 + + function uploadAction(){ + $this->_helper->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_getParam('uuid'); + + try{ + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $userid = $user->id; + } + + if(empty($userid)||!is_numeric($userid)){ + $msg['error'] = "请先登录"; + echo Zend_Json::encode($msg); + exit(); + } + + if($user->usertype!='administrator') + { + $msg['error'] = "您无权使用此功能"; + echo Zend_Json::encode($msg); + exit(); + } + + $files=new Files(); + $msg = $files -> upload($_FILES['Filedata'],empty($uuid)?'file/':'md/',true); + + if(empty($msg['error'])) + { + $msg['error']=""; + $filename = $msg['db_path']; + $filesize = $msg['file_size']; + $filedesc = $this->_request->getParam('filedesc'); + $filetype = 'md'; + $realname = $msg['realname']; + + + $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$userid','$filesize','$realname') RETURNING id"; + $sth = $this->db->prepare($sql); + $sth->execute(); + $att = $sth->fetch(PDO::FETCH_ASSOC); + $msg['attid'] = $attid = $att['id']; + + $sql = "insert into mdattach (uuid,id) values ('$uuid','$attid')"; + if(empty($uuid) || $this->db->exec($sql)) + { + $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]
'; + echo Zend_Json::encode($msg); + exit(); + }else{ + $msg['error'] = '附件上传失败:写入附件表出错'; + @unlink($filename); + echo Zend_Json::encode($msg); + exit(); + } + + + }else{ + $msg['error'] = '附件上传失败:'.$msg['error']; + @unlink($filename); + echo Zend_Json::encode($msg); + exit(); + } + + }catch(Exception $e){ + $msg['error'] = "错误:".$e->getMessage(); + echo Zend_Json::encode($msg); + exit(); + } + }// uploadAction ajax上传附件 + + function getattsAction(){ + + $this->_helper->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->getParam('uuid'); + + if($uuid!='') + { + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $userid = $user->id; + $sql = "select m.*,a.*,d.title from mdattach m + left join attachments a on m.id = a.id + left join metadata d on m.uuid=d.uuid where m.uuid='$uuid' + ORDER BY a.ts_created ASC"; + $rs = $this->db->query($sql); + $atts = $rs->fetchAll(); + + echo Zend_Json::encode($atts); + exit(); + }else + { + exit(); + } + }else{ + exit(); + } + //不输出错误 + }//获取附件 + + + /* + versionAction 版本管理 + */ + + public function versionAction(){ + + $ac = $this->_request->getParam('ac'); + $uuid = $this->_request->getParam('uuid'); + $submd=$this->view->config->sub->metadata; + set_time_limit(0); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + } + + //查看单条数据的所有版本 + if (!empty($uuid) && empty($ac)) + { + //view the versions of the data + $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname,g.id as gid FROM mdversion v + LEFT JOIN $submd 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 $submd 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 $submd md ON md.uuid=v.uuid + WHERE md.title IS NOT NULL"; + if(!empty($keywords)) + { + $search=new Search($keywords); + $where=$search->sql_expr(array("md.title","md.description")); + $sql.=' and '.$where; + } + $sql.=" group by md.uuid,md.title"; + + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(10); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + + $this->_helper->viewRenderer('version-bydata'); + } + + + //删除某个版本 + else if($ac=="delete") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = ""; + + try{ + $id = $this->_request->getParam('id'); + if(empty($id) || !is_numeric($id)) + { + $data = array("error"=>"参数错误"); + $this->jsonexit($data); + return true; + } + + $sql = "DELETE FROM mdversion WHERE id=?"; + $sth = $this->db->prepare($sql); + $ex = $sth -> execute(array($id)); + + if($ex) + { + $data = array("deleted"=>$id, "error"=>"删除成功"); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>'删除失败,请确认权限后重试'); + $this->jsonexit($data); + return true; + } + }catch(Exception $e) { + $msg = "删除失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$msg); + $this->jsonexit($data); + return true; + } + } + + //恢复到geonetwork + else if($ac == "restore") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = ""; + try{ + $id = $this->_request->getParam('id'); + if(empty($id) || !is_numeric($id)) + { + $data = array("error"=>"参数错误"); + $this->jsonexit($data); + return true; + } + + $this->wdb=Zend_Db::factory($this->view->config->geonetwork); + $sql = "SELECT v.xml,v.uuid FROM mdversion v + WHERE v.id=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($id)); + $row = $sth->fetch(); + + $sql = "SELECT data FROM metadata WHERE uuid=?"; + $sth = $this->wdb->prepare($sql); + $sth ->execute(array($row['uuid'])); + $row_geo = $sth->fetch(); + + if($row['xml']==$row_geo['data']) + { + $data = array("error"=>'无须恢复,元数据相同'); + $this->jsonexit($data); + return true; + } + + $sql = "UPDATE metadata SET data=? WHERE uuid=?"; + $sth = $this->wdb->prepare($sql); + $ex = $sth ->execute(array($row['xml'],$row['uuid'])); + + if($ex) + { + $data = array("error"=>'恢复成功'); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>'恢复失败,请确认权限后重试'); + $this->jsonexit($data); + return true; + } + }catch(Exception $e) { + $msg = "恢复失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$msg); + $this->jsonexit($data); + return true; + } + } + + //发布到评审 + else if($ac == "commit") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = ""; + try{ + $id = $this->_request->getParam('id'); + if(empty($id) || !is_numeric($id)) + { + $data = array("error"=>"参数错误"); + $this->jsonexit($data); + return true; + } + + $changelog = $this->_request->getParam('changelog'); + if(empty($changelog)) + { + $data = array("error"=>'请输入变更信息'); + $this->jsonexit($data); + return true; + } + + // 1. 权限认定 --skip + // 2. 保存变化记录 save changelog & userid + $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id=?"; + $this->db->query($sql,array($changelog,$u_id,$id)); + + // 3. 获取数据评审状态 + $sql = "SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid + left join metadata m on s.uuid=m.uuid WHERE v.id=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($id)); + $row = $sth->fetch(); + + $sql="select * from xunsearch where uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($row['uuid'])); + $data_search = $sth->fetch(); + $search=new Search(); + $search->update($data_search); + + if (empty($row)) //无对应记录 + { + $sql="select m.id from metadata m left join mdversion v on m.uuid=v.uuid where v.id=?"; + $sth=$this->db->prepare($sql); + $sth->execute(array($id)); + $mrow=$sth->fetch(); + if (empty($mrow)) //说明是新数据 + { + //导入元数据 + $iso=new ISO19115(); + $iso->saveDB($this->db,$row['xml']); + //进入评审库 + $sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from mdversion where id=?"; + $this->db->query($sql,array($u_id,$id)); + + //email to admin + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"metadata-new-admin",array( + 'user' => $user->username, + 'uuid' => $iso->uuid, + 'email'=> $user->email, + //元数据标题 + 'title'=> $iso->resTitle, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + + unset($mail); + unset($mailtp); + //email to author + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"metadata-new-author",array( + 'user' => $user->username, + 'uuid' => $iso->uuid, + 'email'=> $user->email, + //元数据标题 + 'title'=> $iso->resTitle, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($user->email); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!'); + $this->jsonexit($data); + return true; + } else { //说明是已发布的数据且数据不存在评审信息 + //同步元数据 + $iso=new ISO19115(); + $iso->saveDB($this->db,$row['xml']); + //移除中间版本 + $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null"; + $this->db->query($sql,array($id)); + //修改评审状态为发布,且由其提交的用户进行管理 + $sql="insert into mdstatus (uuid,status,userid) select uuid,6,? from mdversion where id=?"; + $this->db->query($sql,array($u_id,$id)); + + //email to admin & author + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"metadata-release",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + 'changelog'=>$changelog, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($this->view->config->service->email); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + $data = array("commited"=>1,"error"=>'该版本已经成功发布!'); + $this->jsonexit($data); + return true; + } + } + else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收 + { + //同步元数据 + $iso=new ISO19115(); + $iso->saveDB($this->db,$row['xml']); + //email to admin + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"version-commit-admin",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + 'changelog'=>$changelog, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + + unset($mail); + unset($mailtp); + //email to author + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'数据服务组'); + $mailtp=new EmailText($this->db,"version-commit-author",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($user->email); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + $data = array("commited"=>1,"error"=>'该版本已经成功提交并同步,请等待数据中心进一步处理!'); + $this->jsonexit($data); + return true; + } + else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息 + { + //同步元数据 + $iso=new ISO19115(); + $iso->saveDB($this->db,$row['xml']); + + //email to admin + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"version-commit-admin",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + 'changelog'=>$changelog, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + + unset($mail); + unset($mailtp); + //email to author + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'数据服务组'); + $mailtp=new EmailText($this->db,"version-commit-author",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($user->email); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + //email to experts + $sql="select u.username,u.email,u.id from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($row['uuid'])); + $experts = $sth->fetchAll(); + + unset($mail); + unset($mailtp); + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"version-commit-expert",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/doc/uuid/'.$row['uuid']); + $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc'); + $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$row['uuid']); + $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.pdf'); + if($this->debug==0) + { + foreach ($experts as $expert) $mail->addTo($expert['email']); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + $data = array("commited"=>1,"error"=>'该版本已经成功提交,请等待数据中心进一步处理!'); + $this->jsonexit($data); + return true; + } + else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态 + { + //同步元数据 + $iso=new ISO19115(); + $iso->saveDB($this->db,$row['xml']); + //移除中间版本 + $sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null"; + $this->db->query($sql,array($id)); + + //email to admin & author + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'数据服务组'); + $mailtp=new EmailText($this->db,"metadata-release",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + 'changelog'=>$changelog, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($this->view->config->service->email); + //$mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + //@$mail->send(); + + $data = array("commited"=>1,"error"=>'该版本已经成功发布!'); + $this->jsonexit($data); + return true; + } + + }catch(Exception $e) { + $msg = "提交失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$msg); + $this->jsonexit($data); + return true; + } + }//发布到评审 + + //与前一个版本对比 + else if($ac == "diff" || $ac=="diff1") + { + $this->_helper->viewRenderer('version-diff'); + $id = $this->_request->getParam('id'); + if(empty($id) || !is_numeric($id)) + { + $this->view->error = "参数错误"; + return true; + } + + $sql = "SELECT v.uuid,md.title FROM mdversion v + LEFT JOIN metadata md ON v.uuid=md.uuid + WHERE v.id=?"; + $sth = $this->db->prepare($sql); + $sth -> execute(array($id)); + + $row = $sth->fetch(); + if ($ac=='diff') + { + $sql = "SELECT v.* FROM mdversion v + WHERE v.uuid=? and v.ts_created<=(select ts_created from mdversion where id=?) + ORDER BY v.ts_created DESC + LIMIT ?"; + $sth = $this->db->prepare($sql); + $sth -> execute(array($row['uuid'],$id,2)); + } else { + $sql = "SELECT v.* FROM mdversion v + WHERE v.uuid=? and (v.id=? or (v.ts_created<(select ts_created from mdversion where id=?) and changelog is not null)) + ORDER BY v.ts_created DESC + LIMIT ?"; + $sth = $this->db->prepare($sql); + $sth -> execute(array($row['uuid'],$id,$id,2)); + } + + $rows = $sth->fetchAll(); + + if(count($rows)<2) + { + $this->view->error = "对比失败:之前没有版本可以对比"; + return true; + } + + $this->view->info = $row; + $this->view->data = $rows; + + } + + + }//versionAction 版本控制 + + + /* + * authorAction() 数据作者 + * + * param string $ac //动作 + =add 添加 + =edit 编辑 + =update 更新 + =del 删除 + =list 列出所有数据作者 + + * param string $uuid //UUID + * + * return view|application-json + */ + public function authorAction(){ + + $ac = $this->_getParam('ac'); + $uuid = $this->_getParam('uuid'); + $submd=$this->view->config->sub->metadata; + + 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 $submd 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 $submd 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 and uuid in (select uuid from $submd) + 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 $submd 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 $submd 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() 新建元数据 + + + public function fundAction() + { + $this->_helper->layout->setLayout('administry'); + $ac = $this->_getParam('ac'); + $submit = $this->_getParam('submit'); + $this->view->q = $keyword = $this->_getParam('q'); + + include_once("helper/view.php"); + include_once("data/Fund.php"); + $fund = new Fund($this->db); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + if($ac=='index' || empty($ac)) + { + $uuid = $this->_getParam('uuid'); + if(empty($uuid)) + { + $rows = $fund->fetch(NULL,true,0,$keyword); + view::addPaginator($rows,$this,10); + }else{ + include('data/Metadata.php'); + $md = new Metadata($this->db); + $this->view->md = $md->view($uuid); + $rows = $fund->fetch($uuid); + view::addPaginator($rows,$this,10); + } + return true; + } + + if($ac == 'datalist') + { + $this->_helper->viewRenderer('fund-data-list'); + $this->view->q = $q = $this->_getParam('q'); + $rows = $fund->fetchFromData(true,0,$q); + view::addPaginator($rows,$this,10); + return true; + } + + if($ac == 'dataview') + { + $this->_helper->viewRenderer('fund-data-view'); + $this->view->q = $q = $this->_getParam('q'); + $id = $this->_getParam('id'); + $this->view->fund = $fund->view($id); + $rows = $fund->fetchFromData($id,0,$q); + view::addPaginator($rows,$this,10); + return true; + } + + if($ac == "add") + { + $this->_helper->viewRenderer('fund-add'); + if(!empty($submit)) + { + $data = $fund->_getParams($this->_request); + $data['userid'] = $uid; + + if($fund->add($data) == true) + { + $this->view->AlertType = "alert-success"; + $this->view->msg = "添加成功!"; + $this->view->jump_url = "/admin/data/fund/"; + return true; + }else{ + $this->view->data = $data; + $this->view->error = "添加失败,请重试"; + return true; + } + } + return true; + }//add + + if($ac == "edit") + { + $this->_helper->viewRenderer('fund-add'); + $id = $this->_getParam('id'); + + if(empty($id)) + { + $this->view->AlertType = "alert-error"; + $this->view->msg = "参数错误"; + $this->view->jump_url = "/admin/data/fund/"; + } + + if(!empty($submit)) + { + $data = $fund->_getParams($this->_request); + $data['userid'] = $uid; + if($fund->update($data,$id) == true) + { + $this->view->AlertType = "alert-success"; + $this->view->msg = "修改成功!"; + $this->view->jump_url = "/admin/data/fund/"; + return true; + }else{ + $this->view->data = $data; + $this->view->error = "修改失败,请重试"; + return true; + } + }else{ + $this->view->data = $fund->view($id); + } + return true; + }//edit + + if($ac == "del") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $id = $this->_getParam('id'); + + if(empty($id)) + { + $this->jsonexit(array('error'=>'参数错误')); + return true; + } + + if($fund->delete($id) == true) + { + $this->jsonexit(array('success'=>$id)); + return true; + }else{ + $this->jsonexit(array('error'=>'删除失败')); + return true; + } + + }//del + + if($ac == "formd") + { + $uuid = $this->_getParam('uuid'); + + if(empty($uuid)) + { + $this->view->AlertType = "alert-error"; + $this->view->msg = "参数错误"; + $this->view->jump_url = "/admin/data/fund/"; + } + + $id = $this->_getParam('id'); + $order = $this->_getParam('order'); + + if(!empty($id)) + { + if($fund->addToMdfund($uuid,$id,$order)) + { + $this->view->AlertType = "alert-success"; + $this->view->error = "添加成功!可以继续选择并添加"; + }else{ + $this->view->AlertType = "alert-error"; + $this->view->error = "添加失败!该数据可能已被添加"; + } + } + + $mfid = $this->_getParam('mfid'); + + if(!empty($mfid)) + { + if($fund->changeorder($mfid,$order)) + { + $this->view->AlertType = "alert-success"; + $this->view->error = "排序修改成功!"; + }else{ + $this->view->AlertType = "alert-error"; + $this->view->error = "排序修改失败!"; + } + $rows = $fund->fetch($uuid); + }else{ + $this->view->ct = "ct"; + $rows = $fund->fetch($uuid,false,0,$this->_getParam('q')); + } + + include('data/Metadata.php'); + $md = new Metadata($this->db); + $this->view->md = $md->view($uuid); + + view::addPaginator($rows,$this,10); + + return true; + }//formd + + if($ac == "mdfunddel") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $id = $this->_getParam('id'); + + if(empty($id)) + { + $this->jsonexit(array('error'=>'参数错误')); + return true; + } + + if($fund->mfdelete($id) == true) + { + $this->jsonexit(array('success'=>$id)); + return true; + }else{ + $this->jsonexit(array('error'=>'删除失败')); + return true; + } + }//mdfunddel + + if($ac == "data") + { + $this->_helper->viewRenderer('fund-data'); + + $id = $this->_getParam('id'); + $del = $this->_getParam('del'); + $this->view->info = $fund->view($id); + + if(!empty($del)) + { + $s = $fund->dataRelationDelete($del); + if($s) + { + $this->view->error = view::Error("删除成功!","alert-sccuess"); + }else{ + $this->view->error = view::Error("删除失败!","alert-error"); + } + } + + $rows = $fund->getData($id,$keyword); + view::addPaginator($rows,$this,10); + } + + }//fund + + //数据可是化管理 + public function visualAction() + { + $uuid = $this->_getParam('uuid'); + $submit = $this->_getParam('submit'); + + if(!empty($uuid)) + { + $visual = new Visual\Visual; + + $this->_helper->viewRenderer('visual-add'); + $this->view->data = ['uuid' => $uuid]; + + if(empty($submit)) + { + $data = $visual->getVisualVars($uuid); + + if(!empty($data)) + { + $this->view->info = $data; + } + + return true; + } + + $data = array( + 'uuid' => $this->_getParam('uuid'), + 'vars' => $this->_getParam('var'), + 'data' => $this->_getParam('data'), + 'status' => $this->_getParam('status') + ); + + $status = $visual->add($data); + + if($status === true) + { + view::Post($this,"添加成功!",-2); + return true; + }else{ + $this->view->error = $status; + return true; + } + } + } + + + + /* + 获得单个文件的信息 + return array row + */ + public function getFileinfo($id){ + $sql = "select * from attachments where id='$id'"; + $re= $this->db->query($sql); + $row= $re->fetch(); + return $row; + } + + + /* + * jsonexit() 退出并返回json数据 + * + * param array $data 要返回的JSON数据,可以是任意数组 + * + * return JSON-response + */ + public function jsonexit($data){ + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK)); + return true; + }//jsonexit() 退出并返回json数据 +} diff --git a/application/admin/views/scripts/data/visual-add.phtml b/application/admin/views/scripts/data/visual-add.phtml index f2d2f890..2699cdd8 100644 --- a/application/admin/views/scripts/data/visual-add.phtml +++ b/application/admin/views/scripts/data/visual-add.phtml @@ -16,21 +16,72 @@

添加可视化要素


-
+ error)) {?> +
+ error ?> +
+ +
- +
- +
- + +
+
+ +
+ +
+
+ info['vars'])) { ?> +
+ +
+ +
+
+ + + + decode($this->info['vars']);?> + $v) { ?> +
+ +
+ +
+
+ +
+
@@ -40,12 +91,15 @@
diff --git a/application/default/controllers/DataController.php b/application/default/controllers/DataController.php index 7187f372..954e958b 100755 --- a/application/default/controllers/DataController.php +++ b/application/default/controllers/DataController.php @@ -598,6 +598,9 @@ class DataController extends Zend_Controller_Action $fund = new Fund($this->db); $this->view->fund = $fund->fetch($uuid); + $visual = new \Westdc\Visual\Visual; + $this->view->visual = $visual->getVisualVars($uuid); + //判断特殊数据服务 $this->view->dataService= $this->checkDataService($uuid); @@ -2227,5 +2230,13 @@ order by m.title"; $this->view->westee=$this->db->fetchAll($sql); } + + //可视化数据 + public function visualAction() + { + $visual = new \Westdc\Visual\Visual; + view::addPaginator($visual->getVisualMetadata(),$this,10); + return true; + } } diff --git a/application/default/controllers/VisualController.php b/application/default/controllers/VisualController.php index cb3a0e11..608d852b 100644 --- a/application/default/controllers/VisualController.php +++ b/application/default/controllers/VisualController.php @@ -1,5 +1,7 @@ _helper->viewRenderer->setNoRender(); $this->_helper->layout->disableLayout(); + $uuid = $this->_getParam("uuid"); $record_type = $this->_getParam("dataset"); $record_subset = $this->_getParam("subdataset"); if(empty($record_type)) return true; - $record = Factory::Bootstrap($record_type); + $record = new Visual\Record($uuid,$record_subset); + //$record = Visual\Factory::Bootstrap($record_type); if(!empty($record_subset)) { $record->subset = $record_subset; } - $data = $record->outPut(); + + $data = $record(); $this->jsonexit($data); return true; }//dataAction() Ajax获取数据 + //viewAction + public function viewAction() + { + $uuid = $this->_getParam('uuid'); + + if(empty($uuid) || \Helpers\Uuid::test($uuid) == false) + { + view::Post($this,"参数错误",-1); + return; + } + + $visual = new Visual\Visual; + + $this->view->data = $visual->getVisualVars($uuid); + + if(empty($this->view->data)) + { + view::Post($this,"此数据不支持可视化",-1); + return; + } + + $metadata = new Metadata\Metadata; + + $this->view->info = $metadata->view($uuid); + + + } + /* * jsonexit() 退出并返回json数据 diff --git a/application/default/views/scripts/data/view.phtml b/application/default/views/scripts/data/view.phtml index 69356f20..7c2b3d01 100755 --- a/application/default/views/scripts/data/view.phtml +++ b/application/default/views/scripts/data/view.phtml @@ -1,576 +1,590 @@ -headTitle($this->config->title->site); - $this->headTitle($this->config->title->data); - $this->headTitle($this->metadata->title); - $this->headTitle()->setSeparator(' - '); - $this->breadcrumb('首页'); - $this->breadcrumb(''.$this->config->title->data.''); - $this->breadcrumb('查看元数据'); - $this->breadcrumb()->setSeparator(' > '); - $this->theme->AppendPlus($this,'google_map_v3'); - $this->theme->AppendPlus($this,'colorbox'); - if(!empty($this->dataService)) { - $this->theme->AppendModel($this,"dataservice"); - } -?> - -metadata;if ($md):?> -

escape($md->title); -if ($md->title_en) echo '
'.$this->escape($md->title_en);?> -

-
-
-
-
- -

-

',$md->description);?> -

-
-
- mcitation) : ?> -
-

本数据要求的多篇文献引用

-
    - mcitation as $ref) : - echo '
  1. '.$ref->reference; - echo '查看'; - if (empty($ref->link)) - { - if(!empty($ref->attid)) - echo '下载'; - }else{ - echo '下载'; - } - echo "
  2. "; - endforeach; - ?> -
- - citation) : ?> -
-

本数据引用方式数据引用帮助

-

datadoi) || !strpos($md->citation,$md->datadoi)) : ?>文章的引用 - escape($md->citation);if (strpos($md->citation,$md->datadoi)) : ?> - (下载引用:RIS格式 | RIS英文格式 | Bibtex格式 | Bibtex英文格式) - -

- datadoi) && !strpos($md->citation,$md->datadoi)) : ?> -

数据的引用authors,1,-1).'. '.$md->title.'. '.$md->publisher.', '.(empty($md->ts_published)?$md->publish_year:date('Y',strtotime($md->ts_published))).'. doi:'.$md->doi; - echo ' ['.str_replace('"','',substr($md->author_en,1,-1)).'. '.$md->title_en.'. '.$md->publisher_en.', '.(empty($md->ts_published)?$md->publish_year:date('Y',strtotime($md->ts_published))).'. doi:'.$md->doi.']'; - ?> (下载引用:RIS格式 | RIS英文格式 | Bibtex格式 | Bibtex英文格式)

- ref) : ?> -
-

相关文献(作者推荐)

-
    - ref as $ref) : - echo '
  1. '.$ref->reference; - echo '查看'; - if (empty($ref->link)) - { - if(!empty($ref->attid)) - echo '下载'; - }else{ - echo '下载'; - } - echo "
  2. "; - endforeach; - ?> -
- themeref) :?> - -
-

专题文献

-
    - themeref as $ref) : - echo '
  1. '.$ref->reference; - echo '查看'; - if (empty($ref->link)) - { - if(!empty($ref->attid)) - echo ' | 下载'; - }else{ - echo ' | 下载'; - } - echo "
  2. "; - endforeach; - ?> -
- userref) : ?> -
-

数据施引文献

-
    - userref as $ref) : - echo '
  1. '.$ref->reference; - echo '查看'; - if (empty($ref->link)) - { - if(!empty($ref->attid)) - echo '下载'; - }else{ - echo '下载'; - } - echo "
  2. "; - endforeach; - if (count($this->userref)==15) - { - echo '更多施引文献'; - } - ?> -
- -
-

数据使用声明

- uselimits) : - foreach($this->uselimits as $uselimit) : - echo '

'.str_replace(array("\r\n", "\n", "\r"),'

',$this->escape($uselimit->uselimit)).'

'; - endforeach; - ?> - -

为尊重知识产权、保障数据作者的权益、扩展数据中心的服务、评估数据的应用潜力,请数据使用者在使用数据所产生的研究成果中(包括公开发表的论文、论著、数据产品和未公开发表的研究报告、数据产品等成果),明确注明数据来源和数据作者。对于转载(二次或多次发布)的数据,作者还须注明原始数据来源。

-

中文发表的成果参考以下规范注明: 数据来源于黑河计划数据管理中心、寒区旱区科学数据中心(http://westdc.westgis.ac.cn)

-

英文发表的成果依据以下规范注明: The data set is provided by Cold and Arid Regions Sciences Data Center at Lanzhou (http://westdc.westgis.ac.cn)

-

- - data_archives){ ?> -

数据相关新闻

-
    - data_archives as $v){?> -
  • - -
-
- - suppinfo || $this->fund) : ?> -

资助项目

- fund)) : ?> -
    - fund as $k=>$v) : ?> -
  • (项目编号:) [(No. )]
  • - -
- suppinfo)) : ?> - '.str_replace(array("\r\n", "\n", "\r"),'

',$this->escape($md->suppinfo)).'

';?> - -
- - resources) : ?> -

相关资源

- -
- -
-
- keys as $cg){ - if($cg['keytype']=="theme") - $keywords[]=$cg['keyword']; - } - $ev = join(" ",$keywords); - ?> -
- -
- - -
-
    -
    -
    - downhistory) : ?> -

    最近10条服务记录如下:

    -
      - downhistory as $v){ - echo '
    1. '.date("Y-m-d",strtotime($v->ts_created))." ".$v->unit." ".$v->realname; - if (!empty($v->offlineproject)) - echo ' 用途:'.$v->offlineproject; - elseif (!empty($v->onlineproject)) - echo ' 用途:'.$v->onlineproject; - echo '
    2. '; - } - ?> -
    - - 暂时没有服务记录,欢迎您下载使用! - -
    -
    - -
    -
    -
    -
    -
    - status>0 and $md->status<5) : ?> -

    此数据还在评审过程中,我们真切地邀请您参加此数据的评审,以便我们能尽快发布此数据!评审

    - -

    数据评论

    -
    -
    评论加载中
    -
    - hasIdentity()) - { - $user = $auth->getIdentity(); - $name = $user->realname; - $email = $user->email; - }else - { - $name = ""; - $email = ""; - } - ?> - -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - e.g. http://westdc.westgis.ac.cn/ -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - - - 提交 -
    -
    - -
    - -
    -
    -
    -
    - - '学科','place'=>'地点','theme'=>'主题','temporal'=>'时间词','stratum'=>'地层'); -$kt=''; -$i=0; -foreach($this->keys as $cg) : - if ($kt==$cg['keytype']) : - $i+=1; - else : - if (!empty($kt)) echo ''; - $kt=$cg['keytype']; - $i=0; - endif; - if ($i==0) { - ?> - - doi) : ?> -
    • 数据DOI:doi; ?>
    - -
    -
    -

    数据细节文件列表

    -
      - fileformat) : ?> -
    • 格式:fileformat; ?>
    • - -
    • 大小:filesize; ?>MB
    • - downloaded>9) :?> -
    • 下载:downloaded; ?>次
    • - -
    • 浏览:viewed; ?>次
    • - - timebegin)) : ?> -
    • 数据时间范围:timebegin));if (!empty($md->timeend)) echo " 至 ".date('Y-m-d',strtotime($md->timeend)); ?>
    • - - doc)) : ?> - - - attachments) : ?> -
    • 相关文档: - attachments as $k=>$a) : ?> - - - -
    • - -
    • 数据共享方式:datatype) print "离线"; else print "在线(可直接下载)";?>
    • -
    -
    - status>0 and $md->status<5) : ?> - 数据评审 - datatype) : ?> - - 在线下载 - - - dataService)) { ?> - theme->AppendPlus($this,'datepicker'); ?> - - - - - 放入数据篮 - - - - 收藏此数据 - -
    -
    -
    -

    空间位置

    -
    -
    -

    联系信息

    -
    -
      - '资源提供者','custodian'=>'维护者','owner'=>'拥有者','user'=>'用户','distributor'=>'数据服务联系人','originator'=>'创建者','pointOfContact'=>'联系人','principalInvestigator'=>'数据调查与处理者','processor'=>'处理者','publisher'=>'元数据发布者','author'=>'元数据作者'); - $r=''; - $i=0; - foreach($this->authors as $k=>$author) : - if ($author->role!=$r) - { - $r=$author->role; - $i=0; - if ($k>0) echo ''; - echo '
    • '.$party_zh[$author->role].':'; - } - if ($i>0) echo ','; - $i+=1; - if (!empty($author->email) && $r!='principalInvestigator') - echo ''; - echo ''; - if (!empty($author->individual)) - echo $author->individual; - else - echo $author->organisation; - echo ''; - if (!empty($author->email)) echo ''; - if ($k+1==count($this->authors)) echo '
    • '; - endforeach; - ?> -
    -
    -
      -
    • 元数据更新时间:ts_created)); ?>
    • -
    • 下载元数据: - Adobe PDF格式 - OpenOffice odt格式 - Word doc格式 - 查看XML源文件 -
    • - - version->c>0):?> -
    • 版本历史:version->c ?> 个
    • - -
    -
    - -
    -
    -
    分享到
    - -
    - - - - - - - - - -
    - -
    -
    -
    - - - -

    Cannot find the metadata.

    -

    没有找到对应的元数据。

    - - - +headTitle($this->config->title->site); + $this->headTitle($this->config->title->data); + $this->headTitle($this->metadata->title); + $this->headTitle()->setSeparator(' - '); + $this->breadcrumb('首页'); + $this->breadcrumb(''.$this->config->title->data.''); + $this->breadcrumb('查看元数据'); + $this->breadcrumb()->setSeparator(' > '); + //$this->theme->AppendPlus($this,'google_map_v3'); + $this->theme->AppendPlus($this,'colorbox'); + if(!empty($this->dataService)) { + $this->theme->AppendModel($this,"dataservice"); + } +?> + +metadata;if ($md):?> +

    escape($md->title); +if ($md->title_en) echo '
    '.$this->escape($md->title_en);?> +

    +
    +
    +
    +
    + +

    +

    ',$md->description);?> +

    +
    +
    + mcitation) : ?> +
    +

    本数据要求的多篇文献引用

    +
      + mcitation as $ref) : + echo '
    1. '.$ref->reference; + echo '查看'; + if (empty($ref->link)) + { + if(!empty($ref->attid)) + echo '下载'; + }else{ + echo '下载'; + } + echo "
    2. "; + endforeach; + ?> +
    + + citation) : ?> +
    +

    本数据引用方式数据引用帮助

    +

    datadoi) || !strpos($md->citation,$md->datadoi)) : ?>文章的引用 + escape($md->citation);if (strpos($md->citation,$md->datadoi)) : ?> + (下载引用:RIS格式 | RIS英文格式 | Bibtex格式 | Bibtex英文格式) + +

    + datadoi) && !strpos($md->citation,$md->datadoi)) : ?> +

    数据的引用authors,1,-1).'. '.$md->title.'. '.$md->publisher.', '.(empty($md->ts_published)?$md->publish_year:date('Y',strtotime($md->ts_published))).'. doi:'.$md->doi; + echo ' ['.str_replace('"','',substr($md->author_en,1,-1)).'. '.$md->title_en.'. '.$md->publisher_en.', '.(empty($md->ts_published)?$md->publish_year:date('Y',strtotime($md->ts_published))).'. doi:'.$md->doi.']'; + ?> (下载引用:RIS格式 | RIS英文格式 | Bibtex格式 | Bibtex英文格式)

    + ref) : ?> +
    +

    相关文献(作者推荐)

    +
      + ref as $ref) : + echo '
    1. '.$ref->reference; + echo '查看'; + if (empty($ref->link)) + { + if(!empty($ref->attid)) + echo '下载'; + }else{ + echo '下载'; + } + echo "
    2. "; + endforeach; + ?> +
    + themeref) :?> + +
    +

    专题文献

    +
      + themeref as $ref) : + echo '
    1. '.$ref->reference; + echo '查看'; + if (empty($ref->link)) + { + if(!empty($ref->attid)) + echo ' | 下载'; + }else{ + echo ' | 下载'; + } + echo "
    2. "; + endforeach; + ?> +
    + userref) : ?> +
    +

    数据施引文献

    +
      + userref as $ref) : + echo '
    1. '.$ref->reference; + echo '查看'; + if (empty($ref->link)) + { + if(!empty($ref->attid)) + echo '下载'; + }else{ + echo '下载'; + } + echo "
    2. "; + endforeach; + if (count($this->userref)==15) + { + echo '更多施引文献'; + } + ?> +
    + +
    +

    数据使用声明

    + uselimits) : + foreach($this->uselimits as $uselimit) : + echo '

    '.str_replace(array("\r\n", "\n", "\r"),'

    ',$this->escape($uselimit->uselimit)).'

    '; + endforeach; + ?> + +

    为尊重知识产权、保障数据作者的权益、扩展数据中心的服务、评估数据的应用潜力,请数据使用者在使用数据所产生的研究成果中(包括公开发表的论文、论著、数据产品和未公开发表的研究报告、数据产品等成果),明确注明数据来源和数据作者。对于转载(二次或多次发布)的数据,作者还须注明原始数据来源。

    +

    中文发表的成果参考以下规范注明: 数据来源于黑河计划数据管理中心、寒区旱区科学数据中心(http://westdc.westgis.ac.cn)

    +

    英文发表的成果依据以下规范注明: The data set is provided by Cold and Arid Regions Sciences Data Center at Lanzhou (http://westdc.westgis.ac.cn)

    +

    + + data_archives){ ?> +

    数据相关新闻

    +
      + data_archives as $v){?> +
    • + +
    +
    + + suppinfo || $this->fund) : ?> +

    资助项目

    + fund)) : ?> +
      + fund as $k=>$v) : ?> +
    • (项目编号:) [(No. )]
    • + +
    + suppinfo)) : ?> + '.str_replace(array("\r\n", "\n", "\r"),'

    ',$this->escape($md->suppinfo)).'

    ';?> + +
    + + resources) : ?> +

    相关资源

    + +
    + +
    +
    + keys as $cg){ + if($cg['keytype']=="theme") + $keywords[]=$cg['keyword']; + } + $ev = join(" ",$keywords); + ?> +
    + +
    + + +
    +
      +
      +
      + downhistory) : ?> +

      最近10条服务记录如下:

      +
        + downhistory as $v){ + echo '
      1. '.date("Y-m-d",strtotime($v->ts_created))." ".$v->unit." ".$v->realname; + if (!empty($v->offlineproject)) + echo ' 用途:'.$v->offlineproject; + elseif (!empty($v->onlineproject)) + echo ' 用途:'.$v->onlineproject; + echo '
      2. '; + } + ?> +
      + + 暂时没有服务记录,欢迎您下载使用! + +
      +
      + +
      +
      +
      +
      +
      + status>0 and $md->status<5) : ?> +

      此数据还在评审过程中,我们真切地邀请您参加此数据的评审,以便我们能尽快发布此数据!评审

      + +

      数据评论

      +
      +
      评论加载中
      +
      + hasIdentity()) + { + $user = $auth->getIdentity(); + $name = $user->realname; + $email = $user->email; + }else + { + $name = ""; + $email = ""; + } + ?> +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      + e.g. http://westdc.westgis.ac.cn/ +
      +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      +
      + + + 提交 +
      +
      +
      +
      + +
      +
      +
      +
      + + '学科','place'=>'地点','theme'=>'主题','temporal'=>'时间词','stratum'=>'地层'); +$kt=''; +$i=0; +foreach($this->keys as $cg) : + if ($kt==$cg['keytype']) : + $i+=1; + else : + if (!empty($kt)) echo ''; + $kt=$cg['keytype']; + $i=0; + endif; + if ($i==0) { + ?> + + doi) : ?> +
      • 数据DOI:doi; ?>
      + +
      +
      +

      数据细节文件列表

      +
        + fileformat) : ?> +
      • 格式:fileformat; ?>
      • + +
      • 大小:filesize; ?>MB
      • + downloaded>9) :?> +
      • 下载:downloaded; ?>次
      • + +
      • 浏览:viewed; ?>次
      • + + timebegin)) : ?> +
      • 数据时间范围:timebegin));if (!empty($md->timeend)) echo " 至 ".date('Y-m-d',strtotime($md->timeend)); ?>
      • + + doc)) : ?> + + + attachments) : ?> +
      • 相关文档: + attachments as $k=>$a) : ?> + + + +
      • + +
      • 数据共享方式:datatype) print "离线"; else print "在线(可直接下载)";?>
      • +
      +
      + status>0 and $md->status<5) : ?> + 数据评审 + datatype) : ?> + + 在线下载 + + + dataService)) { ?> + theme->AppendPlus($this,'datepicker'); ?> + + + + + 放入数据篮 + + + visual['vars'])) { ?> + + 可视化查看 + + + +
      +
      +
      +

      空间位置

      +
      +
      +

      联系信息

      +
      +
        + '资源提供者','custodian'=>'维护者','owner'=>'拥有者','user'=>'用户','distributor'=>'数据服务联系人','originator'=>'创建者','pointOfContact'=>'联系人','principalInvestigator'=>'数据调查与处理者','processor'=>'处理者','publisher'=>'元数据发布者','author'=>'元数据作者'); + $r=''; + $i=0; + foreach($this->authors as $k=>$author) : + if ($author->role!=$r) + { + $r=$author->role; + $i=0; + if ($k>0) echo ''; + echo '
      • '.$party_zh[$author->role].':'; + } + if ($i>0) echo ','; + $i+=1; + if (!empty($author->email) && $r!='principalInvestigator') + echo ''; + echo ''; + if (!empty($author->individual)) + echo $author->individual; + else + echo $author->organisation; + echo ''; + if (!empty($author->email)) echo ''; + if ($k+1==count($this->authors)) echo '
      • '; + endforeach; + ?> +
      +
      +
        +
      • 元数据更新时间:ts_created)); ?>
      • +
      • 下载元数据: + Adobe PDF格式 + OpenOffice odt格式 + Word doc格式 + 查看XML源文件 +
      • + + version->c>0):?> +
      • 版本历史:version->c ?> 个
      • + +
      +
      + +
      +
      +
      分享到
      + +
      + + + + + + + + + +
      + +
      +
      +
      + + + +

      Cannot find the metadata.

      +

      没有找到对应的元数据。

      + + + diff --git a/application/default/views/scripts/data/visual.phtml b/application/default/views/scripts/data/visual.phtml new file mode 100644 index 00000000..b7ae86f0 --- /dev/null +++ b/application/default/views/scripts/data/visual.phtml @@ -0,0 +1,37 @@ +headTitle($this->config->title->site); +$this->headTitle($this->config->title->data); +if (!empty($this->codename)) $this->headTitle($this->codename); +$this->headTitle()->setSeparator(' - '); +$this->headLink()->appendStylesheet('/css/metadata.css'); +$this->nav[] = array('link'=>"/data/visual",'title'=>'可视化数据列表'); +$this->theme->AppendPlus($this,'colorbox'); +?> +
      + render('breadcrumbs.phtml') ?> + partial('data/tools.phtml'); ?> +
      +paginator)) : ?> +
      +paginator; ?> +
      +paginator as $md) : ?> +
      +
      + + + +
      +

      escape($md['title']);?>

      + 400?$this->escape(mb_substr($md['description'],0,400,'UTF-8').'...'):$this->escape($md['description']);?> +
      + +paginator; ?> +
      + + diff --git a/application/default/views/scripts/header.phtml b/application/default/views/scripts/header.phtml index 44f9bbc2..c2f7169b 100755 --- a/application/default/views/scripts/header.phtml +++ b/application/default/views/scripts/header.phtml @@ -1,46 +1,51 @@ - - - - -
      -
      -
      -
      -
      - -
      -
      -

      - hasIdentity()) - { - $user = $auth->getIdentity(); - echo ' '.$user->username.' '; - if ($user->usertype=="administrator") echo ' 后台 数据篮 退出 '; - } else { - echo '登 录  |  注 册'; - } ?> - -

      - -

      -

      -

      -
      -
      -
      -
      -
      - -
      - render('breadcrumbs.phtml'); ?> + + + + +
      +
      +
      +
      +
      + +
      +
      +

      + hasIdentity()) + { + $user = $auth->getIdentity(); + echo ' '.$user->username.' '; + if ($user->usertype=="administrator") + { + echo ' 后台 '; + } + echo ' 数据篮 '; + echo '退出'; + } else { + echo '登 录  |  注 册'; + } ?> + +

      + +

      +

      +

      +
      +
      +
      +
      +
      + +
      + render('breadcrumbs.phtml'); ?> diff --git a/application/default/views/scripts/visual/view.phtml b/application/default/views/scripts/visual/view.phtml new file mode 100644 index 00000000..88700d7c --- /dev/null +++ b/application/default/views/scripts/visual/view.phtml @@ -0,0 +1,106 @@ +headTitle($this->config->title->site); +$this->headTitle($this->config->title->data); +$this->headTitle()->setSeparator(' - '); +$theme = new Theme; +$theme->appendPlus($this,'highstock'); +$this->breadcrumb('首页'); +$this->breadcrumb('数据与服务'); +$this->breadcrumb('数据可视化'); +$this->breadcrumb()->setSeparator(' > '); +?> +
      +
      +

      info['title'] ?> 数据可视化查看

      +

      请在需要查看的可视化要素上点击以描绘图表,再次点击可取消显示

      +
      + + normaldecode($this->data['vars']);?> + $v) { ?> + + + + + +
      + + + + +
      + \ No newline at end of file diff --git a/application/module/Helpers/Uuid.php b/application/module/Helpers/Uuid.php new file mode 100755 index 00000000..44bc0ea4 --- /dev/null +++ b/application/module/Helpers/Uuid.php @@ -0,0 +1,48 @@ +getLocalHost(); + $this->valueBeforeMD5 = $address.':'.$this->currentTimeMillis().':'.$this->nextLong(); + $this->valueAfterMD5 = md5($this->valueBeforeMD5); + } + function toString() + { + $raw = strtoupper($this->valueAfterMD5); + return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20); + } + + private function nextLong() + { + $tmp = rand(0,1)?'-':''; + return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999); + } + private function currentTimeMillis() + { + list($usec, $sec) = explode(" ",microtime()); + return $sec.substr($usec, 2, 3); + } + private function getLocalHost() + { + $address = isset($_ENV["COMPUTERNAME"]) ? $_ENV["COMPUTERNAME"]."/":"".'/'; + $address.= $_SERVER["SERVER_ADDR"]; + return strtolower($address); + } + + static function test($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)) + { + return false; + }else{ + return true; + } + } +} \ No newline at end of file diff --git a/application/module/Westdc/Metadata/Metadata.php b/application/module/Westdc/Metadata/Metadata.php new file mode 100755 index 00000000..38b64a13 --- /dev/null +++ b/application/module/Westdc/Metadata/Metadata.php @@ -0,0 +1,28 @@ +db = \Zend_Registry::get('db'); + } + + function view($uuid) + { + if(\Helpers\Uuid::test($uuid) !== true) + { + return "参数错误"; + } + + $sql = "SELECT * FROM ".$this->tbl_metadata." WHERE uuid='$uuid'"; + $rs = $this->db->query($sql); + return $rs->fetch(); + } + +}