From f3e7deaf021f9f3eb2efda4aea409cb11cd38572 Mon Sep 17 00:00:00 2001 From: Li Jianxuan Date: Mon, 6 May 2013 09:01:14 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=96=87=E7=8C=AE?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=8A=9F=E8=83=BD=E5=92=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=96=87=E7=8C=AE=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/controllers/AuthorController.php | 8295 +++++++++-------- .../scripts/author/literature-viewdata.phtml | 10 +- .../views/scripts/author/literature.phtml | 2 +- application/models/Theme.php | 10 +- application/models/data/Author.php | 166 +- .../js/lib/custom/models/author-literature.js | 167 + 6 files changed, 4472 insertions(+), 4178 deletions(-) create mode 100644 htdocs/js/lib/custom/models/author-literature.js diff --git a/application/default/controllers/AuthorController.php b/application/default/controllers/AuthorController.php index a4a515b4..0efdd945 100644 --- a/application/default/controllers/AuthorController.php +++ b/application/default/controllers/AuthorController.php @@ -1,4128 +1,4167 @@ -view->config = Zend_Registry::get('config'); - $this->db=Zend_Registry::get('db'); - $this->messenger=$this->_helper->getHelper('FlashMessenger'); - $this->view->messages = $this->messenger->getMessages(); - $this->view->theme = new Theme(); - - $this->view->pageID = "author-".$this->_request->getActionName(); - - } - function indexAction() - { - $this->view->pageID = "author-index"; - } - - - /* - * helpAction() 帮助文档 - * - */ - function helpAction(){ - $this->view->pageID = "author-help"; - }//helpAction()帮助文档 - - /* - * inauthorAction() 数据申请管理 - * - * param string $ac - * param string $keywords - * param string $pr //对离线数据申请的操作 - * param string $uuid - * - * return view|ajax-responds - */ - function inauthorAction() - { - $ac = $this->_request->getParam("ac"); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - $u_email = $user->email; - } - - if(empty($ac) || $ac=="online" || $ac == "searchonline") - { - $sql = "SELECT o.id,o.userid,o.unit,o.username,o.ts_created,o.project,m.title,m.uuid FROM onlineapp as o - LEFT JOIN metadata as m ON o.uuid=m.uuid - LEFT JOIN mdauthor as a ON a.uuid=o.uuid - WHERE (o.id in (SELECT distinct(onlineappid) from dataorder where status>=0)) AND a.userid = ? AND a.status=1"; - if ($ac=="searchonline") - { - $keywords = $this->_request->getParam('q'); - if(!empty($keywords)) - $this->view->q = $keywords; - $search=new SimpleSearch($keywords); - $where=$search->sql_expr(array("m.title","m.description")); - $sql.=' and '.$where; - } - $sql.=" ORDER BY o.id desc"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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; - }//在线申请记录 - - if($ac == "offline" || $ac=="searchoffline") - { - $pr = $this->_request->getParam('pr'); - $oid = $this->_request->getParam('oid'); - $pdf = $this->_request->getParam('pdf'); - - if(!empty($pr)) - { - try{ - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_request->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)) - { - echo "参数有误!";exit(); - } - - //如果用户已经下载过了,就无法在更改对数据申请的意见 - $sql = "select md.title,d.uuid,d.status as datastatus,d.authorpermitted from dataorder d - left join offlineapp o on o.id=d.offlineappid - left join metadata md on md.uuid=d.uuid - left join mdauthor a on a.uuid=d.uuid - where o.ts_approved is null and o.pdflink is not null - and d.uuid=? and a.userid=? and d.id=? AND a.status=1 - order by o.ts_created desc"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$u_id,$oid)); - $row = $sth->fetch(); - - if($row['datastatus']>4) - { - echo "该申请已经通过并且发放数据"; - exit(); - } - else if (empty($row) || $row['datastatus']!=4) - { - echo "该数据申请存在问题,请联系数据中心!"; - exit(); - } - - //同意用户下载 - if($pr=="confirm") - { - $sql = "UPDATE dataorder SET authorpermitted=1 WHERE uuid=? and id=?"; - $sth = $this->db->prepare($sql); - if($sth->execute(array($uuid,$oid))) - { - //发送相关邮件给数据中心服务人员 - $sql="select m.title,a.username from dataorder o left join metadata m on o.uuid=m.uuid left join offlineapp a on o.offlineappid=a.id where o.id=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($oid)); - $row = $sth->fetch(); - $mail = new WestdcMailer($this->view->config->smtp); - $mailtp=new EmailText($this->db,'offline-author-yes',array('user'=>$row['username'],'data'=>$row['title'],'email'=>$u_email)); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - $mail->addTo($this->view->config->service->email,'西部数据中心服务组'); - $mail->send(); - - $btn = $this->createOfflineCtBtn($uuid,'c',$oid); - echo ''.$btn.''; - exit(); - }else{ - echo ""; - exit(); - } - } - - //反对用户下载 - if($pr == "objection") - { - $sql = "UPDATE dataorder SET authorpermitted=-1 WHERE uuid=? AND id=?"; - $sth = $this->db->prepare($sql); - if($sth->execute(array($uuid,$oid))) - { - $btn = $this->createOfflineCtBtn($uuid,'o',$oid); - echo ''.$btn.''; - exit(); - }else{ - echo ""; - exit(); - } - } - }catch(Exception $e) - { - echo "处理中遇到错误,请刷新页面后重试"; - exit(); - } - } - else if (!empty($pdf)) - { - $sql="select o.pdflink from dataorder d left join offlineapp o on d.offlineappid=o.id - left join mdauthor m on d.uuid=m.uuid - where d.id=? and m.userid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($pdf,$u_id)); - $row = $sth->fetch(); - $content=file_get_contents($this->view->config->offline->savepath."/".$row['pdflink']); - header("Content-Disposition: inline; filename=".$row['pdflink']); - header("Content-Type:application/pdf"); - echo $content; - die(); // do not change current html output - } - else - { - $this->_helper->viewRenderer('inauthor-offline'); - - $select="select distinct(o.*),md.title,d.id as doid,d.uuid,d.status as datastatus,d.authorpermitted from offlineapp o - left join dataorder d on o.id=d.offlineappid - left join metadata md on md.uuid=d.uuid - left join mdauthor a on a.uuid=d.uuid - where o.ts_approved is null and o.pdflink is not null and d.status=4 and a.userid=? AND a.status=1 "; - if($ac == "searchoffline") - { - $keywords = $this->_request->getParam('q'); - if(!empty($keywords)) - $this->view->q = $keywords; - $search=new SimpleSearch($keywords); - $where=$search->sql_expr(array("md.title","md.description")); - $select.=' and '.$where; - } - $select.=" order by o.ts_created desc"; - - $sth = $this->db->prepare($select); - $sth->execute(array($u_id)); - $rows = $sth->fetchAll(); - - foreach ($rows as $k=>$v) - { - if($v['authorpermitted']==0) - {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['doid']);} - if($v['authorpermitted']>0) - {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['doid']);} - if($v['authorpermitted']<0) - {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['doid']);} - } - - $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; - } - }//离线申请 - - - //按数据显示 - if($ac == 'datalist' || $ac == "searchdata") - { - $uuid = $this->_request->getParam('uuid'); - if(!empty($uuid)) - { - $this->_helper->viewRenderer('view-dataoreder'); - - 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)) - { - $sql = "select md.title,d.id as doid,d.uuid,d.authorpermitted,d.status - ,offa.id as offa_id,offa.username as offa_name,offa.unit as offa_unit,offa.email as offa_email,offa.project as offa_project,date(offa.ts_created) as offa_tscreated - ,ona.id as ona_id,ona.username as ona_name,ona.unit as ona_unit,ona.email as ona_email,ona.project as ona_project, date(ona.ts_created) as ona_tscreated - from dataorder d - left join metadata md on md.uuid=d.uuid - left join mdauthor a on a.uuid=d.uuid - LEFT JOIN offlineapp offa on offa.id=d.offlineappid - LEFT JOIN onlineapp ona on ona.id=d.onlineappid - WHERE (offa.id IS NOT NULL OR ona.id IS NOT NULL) AND a.status=1 and d.status>=0 - AND d.uuid=? AND a.userid=? - ORDER BY d.ts_created DESC"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$u_id)); - $rows = $sth->fetchAll(); - @$this->view->mdtitle=$rows[0]['title']; - - foreach ($rows as $k=>$v) - { - if($v['authorpermitted']==0) - {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['doid']);} - if($v['authorpermitted']>0) - {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['doid']);} - if($v['authorpermitted']<0) - {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['doid']);} - } - - $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; - }else{ - $this->view->error = "参数有误"; - } - }else{ - $this->_helper->viewRenderer('inauthor-datalist'); - $sql = "select md.title,d.uuid,count(md.id) as c from dataorder d - left join metadata md on md.uuid=d.uuid - left join mdauthor a on a.uuid=d.uuid - where a.status=1 AND a.userid=? "; - if($ac == "searchdata") - { - $keywords = $this->_request->getParam('q'); - if(!empty($keywords)) - $this->view->q = $keywords; - $search=new SimpleSearch($keywords); - $where=$search->sql_expr(array("md.title","md.description")); - $sql.=' and '.$where; - } - $sql.=" GROUP BY md.title,d.uuid"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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; - } - - }//按数据显示 - - } // inauthorAction() 数据申请管理 - - - /* - * createOfflineCtBtn() 创建离线申请记录的操作按钮 - * - */ - function createOfflineCtBtn($uuid, $type="",$oid){ - $urlHref = 'href="javascript:;"'; - $baseStyle = "btn box-shadow"; - $selectedStyle = "disabled"; - - $confrimText = "同意"; - $confrimFunc = 'onclick="confirm(\''.$uuid.'\',\''.$oid.'\')"'; - - $objectionText = "反对"; - $objectionFunc = 'onclick="objection(\''.$uuid.'\',\''.$oid.'\')"'; - - $btns=''; - if(empty($type)) - { - $confrimBtn = "$confrimText"; - $objectionBtn = "$objectionText"; - $btns = $confrimBtn.$objectionBtn; - } - if($type=='c') - { - $confrimBtn = "$confrimText"; - $objectionBtn = "$objectionText"; - $btns = $confrimBtn.$objectionBtn; - } - if($type=='o') - { - $confrimBtn = "$confrimText"; - $objectionBtn = "$objectionText"; - $btns = $confrimBtn.$objectionBtn; - } - - return $btns; - - } //createOfflineCtBtn() - - - - /* - * acceptAction() 我的数据 - * - * param string $ac // list|search - * param string $keyword - * - * return view - */ - function acceptAction() - { - $ac = $this->_request->getParam("ac"); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - $u_email = $user->email; - } - - //列表 - if(empty($ac) || $ac=='list' || $ac=='search'){ - - $sql = "SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus FROM normalmetadata m - LEFT JOIN mdauthor a ON m.uuid=a.uuid - LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid - LEFT JOIN mdstatus mds ON m.uuid=mds.uuid - WHERE a.userid=? AND a.status>=0 "; - if ($ac=='search') - { - $key = trim($this->_request->getParam('q')); - $this->view->q = $key; - $search=new SimpleSearch($key); - $where=$search->sql_expr(array("m.title","m.description")); - $sql.=' and '.$where; - } - $sql.=" ORDER BY a.status DESC,a.id DESC"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $rows = $sth->fetchAll(); - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(5); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - - }//list - - //激活数据作者 - if($ac == "active") - { - $this->_helper->viewRenderer('accept-active'); - $vdcode = $this->_request->getParam('v'); - $this->view->v = $vdcode; - - try{ - $sql = "SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.id as userid,u.realname,u.email FROM mdauthor a - LEFT JOIN metadata md ON a.uuid=md.uuid - LEFT JOIN users u ON a.userid=u.id - WHERE a.activation=?"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($vdcode)); - $row = $sth->fetch(); - - if(empty($row['id'])) - { - $this->view->info='此激活码无效'; - }else{ - if(empty($row['ts_activated'])) - { - $sql = "UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=?"; - - $sth = $this->db->prepare($sql); - $ex = $sth->execute(array('now()',1,$vdcode)); - - if($ex) - { - include_once("EmailText.php"); - $this->author_first($row['uuid'],$row['userid']); - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"author-new",array( - 'user' => $row['realname'], - 'uuid' => $row['uuid'], - 'title'=> $row['title'], - 'email'=> $row['email'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - //获得元数据作者email - /* 不需要给这些人发通知邮件 - $info = $this->getEmail($uuid,1); - - $address = $info['addrs']; - foreach($address as $v) - { - $mail->addTo($v); - }*/ - $mail->addTo($row['email']); - $mail->addCc($this->view->config->service->email); //管理员 - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - $this->view->info = '激活成功
点击这里进入我的数据页面查看'; - }else - { - $this->view->info = "激活中遇到问题,请重试"; - } - }else - { - $this->view->info='此激活码已经失效'; - } - - } - - }catch(Exception $e){ - if($this->debug==0) - { - $this->view->info = "处理中遇到错误,请重新尝试"; - }else{ - $this->view->info = $e->getMessage(); - } - } - - }//激活数据作者 - - //拒绝激活 - if($ac == "lock") - { - $this->_helper->viewRenderer('accept-active'); - $vdcode = $this->_request->getParam('v'); - $this->view->v = $vdcode; - - try{ - $sql = "SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.realname,u.email FROM mdauthor a - LEFT JOIN metadata md ON a.uuid=md.uuid - LEFT JOIN users u ON a.userid=u.id - WHERE a.activation=?"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($vdcode)); - $row = $sth->fetch(); - - if(empty($row['id'])) - { - $this->view->info='此激活码无效'; - }else{ - if(empty($row['ts_activated'])) - { - $sql = "UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=?"; - - $sth = $this->db->prepare($sql); - $ex = $sth->execute(array('now()',-1,$vdcode)); - - if($ex) - { - include_once("EmailText.php"); - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"author-deny",array( - 'user' => $row['realname'], - 'uuid' => $row['uuid'], - 'title'=> $row['title'], - 'email'=> $row['email'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($row['email']); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - $this->view->info = '该申请已被拒绝,点击这里进入我的数据页面查看'; - }else - { - $this->view->info = "激活中遇到问题,请重试"; - } - }else - { - $this->view->info='此激活码已经失效'; - } - - } - - }catch(Exception $e){ - if($this->debug==0) - { - $this->view->info = "处理中遇到错误,请重新尝试"; - }else{ - $this->view->info = $e->getMessage(); - } - } - - }//否认激活 - - }//acceptAction() 我的数据 - - - /* - * - * getEmail() 获取数据所有者电子邮箱地址 - * - * param string $uuid //UUID - * param int $level //输出信息等级 - * 0 => 输出所有Email地址 - * 1 => 输出数据权限等级最高的Email地址 (def) - * - * return array() - */ - function getEmail($uuid,$level=1) - { - //需要定义角色,防止程序流程出错 - $addrs = array(); - $addrs['resourceProvider'] = array(); - $addrs['owner'] = array(); - $addrs['pointOfContact'] = array(); - $addrs['author'] = array(); - $addrs["publisher"] = array(); - - $sql = 'select r.uuid,p.email,md.title,r.role from normalmetadata md - LEFT JOIN role r ON md.uuid=r.uuid - left join responsible p on r.resid=p.id - WHERE r.uuid=? AND p.email IS NOT NULL AND p.email!=? - GROUP BY r.uuid,p.email,md.title,r.role'; - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,'')); - $rows = $sth->fetchAll(); - - $addrs['title'] = $rows[0]['title']; - - foreach($rows as $k=>$v) - { - //数据资源提供者resourceProvider - if($v['role']=='resourceProvider') - { - $addrs['resourceProvider'][]=$v['email']; - } - - //数据资源所有者owner - if($v['role']=='owner') - { - $addrs['owner'][]=$v['email']; - } - - //数据联系人pointOfContact - if($v['role']=='pointOfContact') - { - $addrs['pointOfContact'][]=$v['email']; - } - - //元数据作者author - if($v['role']== 'author' ) - { - $addrs['author'][] = $v['email']; - } - - if($v["role"] =="") - { - $addrs["publisher"][] = $v['email']; - } - } - - //输出所有email (多维数组) - /* - $addrs['resourceProvider'] - $addrs['owner'] - $addrs['pointOfContact'] - $addrs['author'] - */ - if($level == 0) - { - return $addrs; - } - - - //输出最高优先级的Email - //$addrs['addrs'] - if($level == 1) - { - //如果有 数据资源提供者 resourceProvider 就输出他的地址 以此类推 - if(count($addrs['resourceProvider'])>0) - { - $addrs['addrs'][] = $addrs['resourceProvider']; - return $addrs; - } - - if(count($addrs['owner'])>0) - { - $addrs['addrs'][] = $addrs['owner']; - return $addrs; - } - - if(count($addrs['pointOfContact'])>0) - { - $addrs['addrs'][] = $addrs['pointOfContact']; - return $addrs; - } - - if(count($addrs['author'])>0) - { - $addrs['addrs'][] = $addrs['author']; - return $addrs; - } - - if(count($addrs["publisher"])>0) - { - $addrs['addrs'][] = $addrs["publisher"]; - return $addrs; - } - } - - }//getEmail 获取数据作者email地址 - - - - /* - * applyAction() 申请成为元数据作者 - * - * param string $ac //动作 search|apply - * param string $q //搜索关键词 - * param string $uuid //数据的UUID - * - * return view|ajax|json - * - * 调试搜索结果: - * /author/apply?ac=apply&uuid=816ecd28-ba88-464b-a83a-341440f536ef - */ - function applyAction() - { - $ac = $this->_request->getParam('ac'); - - //搜索动作 - if($ac == "search") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - //要输出的Json对象 - //过程中如果没有处理,则不包含任何返回信息,由前台定义提示信息,如: - /* - $.ajax({ - 'type':"POST", - 'url':'/author/apply', - 'data':'ac=search&q='+$('#keyword').val(), - 'success':function(data){ - if (typeof(data)=='object') //如果服务器端的响应为Json对象 - { - if(typeof(data.error)!='undefined') //服务器端响应的错误消息 - { - alert(data.error); - }else{ //服务器端无错误消息则为成功的响应 - alert(data.length); - } - }else{ //服务器端响应了非JSON对象或者为空 - alert('无搜索结果'); - } - }, - 'beforeSend':function(){ - //请求发送前 - } - }); - - 错误消息的键名必须为error,不包含JS脚本,如: - $data['error'] = '服务器忙!'; - */ - $data = ""; - - //防止通过其它方式访问,先判断是否是登录用户,如果不是,抛出消息后强制用户退出 - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - }else{ - $data = array("error"=>"请先登录"); - $this ->getResponse() - ->setHeader('Content-Type', 'application/json') - ->appendBody(Zend_Json::encode($data)); - return true; - } - - - //数据处理代码 EOH<<<<<<<<<<<<<<<< - try{ - - $keyword = trim($this->_request->getParam('q')); - if (strlen(trim($keyword))<3) - $data = array('error'=>'搜索关键字过短'); - else if (!preg_match_all("/^[\x{4e00}-\x{9fa5}A-Za-z0-9\s_]+$/u",$keyword,$matchs)) - { - $data = array('error'=>'搜索关键字中只能包含汉字、英文、数字'); - } - else - { - //搜索标题和描述两个字段 - $sql = "SELECT m.uuid,m.title,m.description,a.status,a.userid FROM normalmetadata m - LEFT JOIN mdauthor a ON m.uuid=a.uuid - WHERE "; - $search=new SimpleSearch($keyword); - $where=$search->sql_expr(array("m.title","m.description")); - $sql.=$where; - $sth = $this->db->prepare($sql); - $sth->execute(); - $rows = $sth->fetchAll(); - - if(is_array($rows) && count($rows)>0) - $data = $rows; - else - $data = ""; - } - - }catch(Exception $e){ - //如果上面的程序已经发送出提示,就不发送抛出的错误 - if(empty($data['error'])) - { - if($this->debug==0) - { - $data = array("error"=>"处理过程中遇到错误,请重新尝试"); - }else{ - $data = array("error"=>$e->getMessage()); - } - } - } - // >>>>>>>>>>> F - - //截获响应对象,并修改头部和内容 - //不管有没有数据存在,都将返回Json数据,前台有判断机制来分析数据 - - $this ->getResponse() - ->setHeader('Content-Type', 'application/json') - ->appendBody(Zend_Json::encode($data)); - }// search - - - /**************** - 申请动作 - ****************/ - if($ac == "apply") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = ""; - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - $u_email = $user->email; - } - - //处理部分<<<<<<<<<< - try{ - - $uuid = $this->_request->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)) - { - - //判断该用户是否已经申请过或者是否已经是该元数据作者 - $sql="SELECT id,status FROM mdauthor WHERE uuid=? AND userid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$u_id)); - $row = $sth->fetch(); - - //如果已经是元数据作者,从流程中直接退出程序 - if(!empty($row['id']) && $row['status']==1) - { - $data = array("error"=>"您目前已经是该数据作者,不需要再申请"); - } - - //如果已经遭到明确拒绝,则不允许用户再次申请 - if(!empty($row['id']) && $row['status']==-1) - { - $data = array("error"=>"您的申请已经遭到拒绝,不能再申请,有疑问请联系数据中心"); - } - - - //如果已经存在申请,但是没有激活的,返回激活信息 - if($row['status']==0){ - if(!empty($row['id']) && empty($m)) - { - $data = array( - "error"=>'您已经申请过了,如果长时间没有收到回应请联系数据中心', - "post"=>"activa", - "uid"=>$u_id, - "uemail"=>$u_email, - "uuid"=>$uuid, - ); - }//if - - else{ - - $info = $this->getEmail($uuid,1); - - $address = $info['addrs']; - - $mdtitle = $info['title']; - - //如果当前用户的email包含在元数据作者email列表中,则直接使其成为元数据作者 - if(in_array($u_email,$address)) - { - $sql = "INSERT INTO mdauthor (uuid,userid,activation,ts_activated,status) VALUES (?,?,?,?,?)"; - $sth = $this->db->prepare($sql); - $ex = $sth->execute(array($uuid,$u_id,'','now()',1)); - if($ex) - { - $data = array("error"=>"您的身份符合申请条件,已经自动成为该元数据作者"); - $this->author_first($uuid,$u_id); - include_once("EmailText.php"); - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"author-new",array( - 'user' => $user->realname, - 'uuid' => $uuid, - 'title'=> $mdtitle, - 'email'=> $u_email, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - - if($this->debug==0) - { - foreach ($address as $dist) - {$mail->addTo($dist);} //元数据作者 - $mail->addTo($u_email); - $mail->addCc($this->view->config->service->email); //管理员 - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - } - else - { - $data = array("error"=>"处理中出现错误,请重新尝试"); - } - } - - //如果不包含在当前元数据作者的email列表中 - //给数据拥有者发送邮件,使其决定是否同意新加入作者 - else - { - //生成激活码 - $ssid = session_id(); - $vdcode = md5($uuid.$ssid.$u_id.time()); - - //激活链接 - // /author/accept/?ac=active&vdcode=$vdcode - $sql = "INSERT INTO mdauthor (uuid,userid,activation) VALUES (?,?,?)"; - $sth = $this->db->prepare($sql); - $ex = $sth->execute(array($uuid,$u_id,$vdcode)); - - if($ex) - { - //给申请者发送邮件 - include_once("EmailText.php"); - @$mail=new WestdcMailer($this->view->config->smtp); - @$mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - @$mailtp=new EmailText($this->db,"author-apply",array( - 'user' => $user->username, - 'uuid' => $uuid, - 'email'=> $user->email, - //元数据标题 - 'title'=> $mdtitle, - )); - @$mail->setBodyText($mailtp->getBody()); - @$mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - @$mail->addTo($user->email); - }else{ - @$mail->addTo($this->debug_email); - } - - @$mail->send(); - - unset($mail); - unset($mailtp); - //给元数据作者以及管理员发送邮件 - @$mail=new WestdcMailer($this->view->config->smtp); - @$mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - @$mailtp=new EmailText($this->db,"author-apply-confirm",array( - 'user' => $user->username, - 'uuid' => $uuid, - 'email'=> $u_email, - 'title'=> $mdtitle, - 'link'=>"http://".$_SERVER['SERVER_NAME']."/data/$uuid", - - //验证码 - 'vdcode' => $vdcode, - - //激活链接 - 'active'=>"http://".$_SERVER['SERVER_NAME']."/author/accept/?ac=active&v=$vdcode", - - //不同意激活的链接 - 'lock'=>"http://".$_SERVER['SERVER_NAME']."/author/accept/?ac=lock&v=$vdcode", - )); - @$mail->setBodyText($mailtp->getBody()); - @$mail->setSubject($mailtp->getSubject()); - - if($this->debug==0) - { - $sql = "SELECT u.email FROM mdauthor a - LEFT JOIN users u ON u.id=a.userid - WHERE a.uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid)); - $mlist = $sth->fetchAll(); - - if(count($mlist)>0) - { - foreach($mlist as $v) - { - $mail->addTo($v['email']); - } - }//mdauthor中已经注册的用户 - - else{ - foreach ($address as $dist) - { - $mail->addTo($dist); - } - }//元数据作者 - $mail->addCc($this->view->config->service->email); //管理员 - }else{ - @$mail->addTo($this->debug_email); - } - - @$mail->send(); - - $data = array("error"=>"您的申请已收到,请耐心等待回应"); - - }else{ - $data = array("error"=>"服务器可能在忙,请重试。"); - }//激活码记录 - }//不是确认的元数据作者 - }//empty($row['id']) - }// status == 0 - - //调试输出结果 - //$data = array('addr'=>$address,'uemail'=>$u_email); - } - else - { - $data = array('error'=>'参数出错,请按照正确的访问方式申请'); - } - }catch(Exception $e){ - if(empty($data['error'])) - { - if($this->debug==0) - { - $data = array("error"=>"处理过程中遇到错误,请重新尝试"); - }else{ - $data = array("error"=>$e->getMessage()); - } - - } - } - - // >>>>>>>>>>>> - - $this ->getResponse() - ->setHeader('Content-Type', 'application/json') - ->appendBody(Zend_Json::encode($data)); - - }// ac = apply 申请处理 - - }//applyAction() 申请成为元数据作者 - - - - /* - * commentAction() 数据反馈 - * - * param string $ac 动作 - * param string $uuid 元数据UUID - * param int $page 页数 - * - * return view - */ - function commentAction() - { - $ac = $this->_request->getParam('ac'); - $uuid = $this->_getParam('uuid'); - $reply = $this->_getParam('reply'); - $replylist = $this->_getParam('replylist'); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - } - - if(empty($ac)|| $ac=='list') - { - $sql = "SELECT md.title,md.uuid,count(c.id) as c FROM comments c - LEFT JOIN metadata md ON md.uuid=c.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1 AND c.reply=0 - GROUP BY md.title,md.uuid - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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; - - } - - if($ac=="view") - { - - $uuid = $this->_request->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)) - { - $sql = "SELECT c.id,c.author,c.email,c.url,c.ts_created,c.content,m.title,c.uuid FROM comments c - LEFT JOIN mdauthor a ON a.uuid=c.uuid - left join metadata m on m.uuid=c.uuid - WHERE c.uuid=? AND a.userid=? AND a.status=1 AND c.reply=0 - ORDER BY ts_created DESC"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$u_id)); - $rows = $sth->fetchAll(); - @$this->view->mdtitle=$rows[0]['title']; - - $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('comment-list'); - } - - if($ac == "listall") - { - $sql = "SELECT md.title,c.author,c.email,c.url,c.ts_created,c.content FROM comments c - LEFT JOIN mdauthor a ON a.uuid=c.uuid - LEFT JOIN normalmetadata md ON md.uuid=c.uuid - WHERE a.userid=? AND a.status=1 AND c.reply=0 - ORDER BY ts_created DESC"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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('comment-listall'); - } - - 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; - } - - $sql = "SELECT md.title,c.id,c.author,c.email,c.url,c.ts_created,c.content FROM comments c - LEFT JOIN mdauthor a ON a.uuid=c.uuid - LEFT JOIN normalmetadata md ON md.uuid=c.uuid - WHERE a.userid=? AND a.status=1 AND c.reply=0 AND c.id=? - ORDER BY ts_created DESC"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id,$reply)); - $row = $sth->fetch(); - if(empty($row['id'])) - { - $data = array('error'=>"回复失败,您没有权限进行此操作"); - $this->jsonexit($data); - return true; - } - - $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) - { - $data = array('status'=>1,'msg'=>'回复成功!'); - $this->jsonexit($data); - return true; - }else{ - $data = array('error'=>"回复失败,请重试"); - $this->jsonexit($data); - return true; - } - 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; - } - }// commentAction() 数据反馈 - - - /* - * newsAction() 数据新闻 - * - * param string $ac - * - * - */ - function newsAction(){ - - $ac = $this->_request->getParam('ac'); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - } - - $News = new Archive($this->db); - $category = new ArchiveCategory($this->db); - - //新闻列表 - if(empty($ac) || $ac=="list") - { - $keyword = $this->_request->getParam('q'); - $uuid = $this->_request->getParam('uuid'); - - $wheresql = array(); - $join = ""; - - if(!empty($keyword)) - { - $this->view->q = $keyword; - $search = new SimpleSearch($keyword); - $wheresql[] = $search->sql_expr(array("arc.title","arc.description")); - } - - if(!empty($uuid) && 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)) - { - $wheresql[] = " ct.uuid='$uuid' "; - } - - $wheresql[] = " c.code='".$category->DataNewsCode."' "; - $wheresql[] = " ct.uuid IS NOT NULL "; - $wheresql[] = " arc.userid=$u_id"; - - if(count($wheresql)>0) - { - $wheresql = " WHERE ".join(" AND ",$wheresql); - } - - $sql = "SELECT arc.id,arc.title,arc.description,arc.ts_published - ,c.id as cid,u.realname - ,count(arc.id) as datacount - FROM ".$News->tbl_archives." arc - LEFT JOIN ".$News->tbl_catalog." ct ON arc.id=ct.aid - LEFT JOIN ".$News->tbl_categorys." c ON ct.cid=c.id - LEFT JOIN users u ON arc.userid=u.id - $wheresql - GROUP BY arc.id,c.id,u.realname - ORDER BY arc.ts_published DESC"; - - - $sth = $this->db->prepare($sql); - $sth->execute(); - $rows = $sth->fetchAll(); - - foreach($rows as $k=>$v) - { - $arcinfo = $News->getArchiveUrlByCid($v['id'],$v['cid']); - $rows[$k]['url'] = $arcinfo['archive_url']; - } - - $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; - - } - - //新闻发布 - if($ac == "add") - { - $this->_helper->viewRenderer('news-add'); - - $sql = "SELECT md.title,md.uuid FROM metadata md - LEFT JOIN mdauthor a ON a.uuid = md.uuid - WHERE a.userid=? AND a.status=1 - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $rows = $sth->fetchAll(); - - $this->view->md = $rows; - }// $ac == add - - //新闻编辑 - if($ac == "edit") - { - $this->_helper->viewRenderer('news-edit'); - - $aid = (int)$this->_request->getParam('aid'); - - if(empty($aid) || !is_numeric($aid)) - { - $this->_redirect('/error/error'); - } - - $sql = "SELECT arc.* FROM ".$News->tbl_archives." arc - WHERE id=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($aid)); - $row = $sth->fetch(); - - $keywords = $News->GetTags($aid); - $row['keywords'] = join(",",$keywords); - - $this->view->info = $row; - - $sql = "SELECT md.title,md.uuid FROM metadata md - LEFT JOIN mdauthor a ON a.uuid = md.uuid - WHERE a.userid=? AND a.status=1 - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $rows = $sth->fetchAll(); - - $this->view->md = $rows; - - $sql = "SELECT md.uuid,md.title FROM ar_catalog ct - LEFT JOIN metadata md ON ct.uuid=md.uuid - WHERE ct.aid=$aid"; - $sth = $this->db->query($sql); - $rows = $sth->fetchAll(); - - $this->view->thismd = $rows; - - }//$ac == "edit" - - //新闻发布的ajax动作 - if($ac =="addnews") - { - try{ - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = array(); - - $aid = $this->_request->getParam('aid'); - $data['title'] = trim($this->_request->getParam('title')); - $data['keyword'] = trim($this->_request->getParam('keyword')); - $data['body'] = trim($this->_request->getParam('body')); - $uuid = $this->_request->getParam('uuid'); - - //对参数进行预处理 - foreach($data as $k=>$v) - { - $data[$k]=preg_replace("#]*)>(.*)#i","",$v); - $data[$k]=preg_replace("#]*)>(.*)#i","",$v); - $data[$k]=preg_replace("#]*)>(.*)#i","",$v); - $data[$k]=str_replace("\"","“",$v); - $data[$k]=str_replace("\'","‘",$v); - } - - $msg = array(); - - // 合法性判断 - if(mb_strlen($data['title'],"utf-8")<3) - { - $msg['status'] = 0; - $msg['error'] = '标题太短,请重新填写'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - if(mb_strlen($data['title'],"utf-8")>60) - { - $msg['status'] = 0; - $msg['error'] = '标题太长,请重新填写'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - if(empty($uuid)) - { - $msg['status'] = 0; - $msg['error'] = '请选择对应数据'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - if(mb_strlen($data['keyword'],"utf-8")<4) - { - $msg['status'] = 0; - $msg['error'] = '关键词太短,请重新填写'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - if(mb_strlen($data['keyword'],"utf-8")>40) - { - $msg['status'] = 0; - $msg['error'] = '关键词太长,请重新填写'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - if(mb_strlen($data['body'],"utf-8")<40) - { - $msg['status'] = 0; - $msg['error'] = '新闻内容太短,请重新填写'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - if(is_array($uuid)) - { - if(count($uuid)<1) - { - $msg['status'] = 0; - $msg['error'] = '参数错误,请重试'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - foreach($uuid as $v) - { - 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}$/",$v)) - { - $msg['status'] = 0; - $msg['error'] = '参数错误,请重试'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - } - } - - else 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)) - { - $msg['status'] = 0; - $msg['error'] = '参数错误,请重试'; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - //获得描述 - //删除段落及html标记 - $data['description'] = mb_substr(preg_replace(array("/<(.*)>|<(.*) \/>/i","/\s/i"),array(""," "),$data['body']),0,450,"UTF-8"); - - //默认填充数据 - $data['source'] = "西部数据中心"; - $data['userid'] = $u_id; - $keyword = str_replace(",",",",$data['keyword']); - $data['ts_published'] = date("Y-m-d H:i:s",time()); - $data['is_pub'] = true; - $data['image'] = ""; - - unset($data['keyword']); - - $dataNewsCategory = $category->GetOne('datanews'); - $dataNewsCategoryID = $dataNewsCategory['id']; - - //新闻添加 - if(empty($aid)) - { - $newAid = $News->addArchive($data,$dataNewsCategoryID,$keyword,$uuid); - //添加成功 - if($newAid>0) - { - $msg['status'] = 1; - $msg['outstring'] = "新闻添加成功"; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - //添加失败 - }else{ - $msg['status'] = 0; - $msg['error'] = "新闻添加失败,请重试"; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - }//新闻添加 end --> - - //新闻修改 - else - { - if($u_id != $News->getArchiveField($aid,"userid")) - { - $msg['status'] = 0; - $msg['outstring'] = "新闻编辑失败,您没有权限"; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - - $updated = $News->updateArchive($aid,$data,$dataNewsCategoryID,$keyword,$uuid); - if($updated) - { - $msg['status'] = 1; - $msg['outstring'] = "新闻编辑成功"; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - }else{ - $msg['status'] = 0; - $msg['outstring'] = "新闻编辑失败,请重试"; - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - }//新闻修改 end --> - - }catch(Exception $e){ - if($this->debug==0) - { - $msg['status'] = 0; - if(empty($aid)) - {$msg['error'] = "新闻添加失败,请重试";} - else - {$msg['error'] = "新闻编辑失败,请重试";} - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - }else{ - $msg['status'] = 0; - $msg['error'] = "新闻添加/编辑失败,请重试:".$e->getMessage(); - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); - return true; - } - }//catch end - }//$ac = 'newsadd' endif; - - if($ac == "del") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $aid = $this->_getParam('aid'); - if(!is_numeric($aid)) - { - $this->jsonexit(array("error"=>"参数错误")); - return true; - } - - $News = new Archive($this->db); - - if($u_id != $News->getArchiveField($aid,"userid")) - { - $this->jsonexit(array("error"=>"您没有权限")); - return true; - } - - if($News->DeleteArchives($aid)) - { - $this->jsonexit(array("deleted"=>$aid)); - return true; - }else{ - $this->jsonexit(array("error"=>"删除失败",'aid'=>$aid)); - return true; - } - } - }//newsAction() 数据新闻 - - function viewauthorsAction(){ - - $this->_helper->viewRenderer('view-authors'); - - $uuid = $this->_request->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)) - { - $sql = "SELECT u.realname,u.unit,u.email,m.title,m.description FROM normalmetadata m - LEFT JOIN mdauthor a ON m.uuid=a.uuid - LEFT JOIN users u ON u.id=a.userid - WHERE status>=0 AND m.uuid=? AND a.status=1 - ORDER BY status DESC,a.id DESC"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid)); - $rows = $sth->fetchAll(PDO::FETCH_BOTH); - - include_once("helper/view.php"); - view::addPaginator($rows,$this->view,$this->_request); - $this->view->datas = $rows; - }else{ - $this->view->error = "参数有误"; - } - } - - /* - * versionAction() 版本控制 - * - * - */ - function versionAction() - { - $ac = $this->_request->getParam('ac'); - $uuid = $this->_request->getParam('uuid'); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - } - - //查看单条数据的所有版本 - if (!empty($uuid) && empty($ac)) - { - //view the versions of the data - $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v - LEFT JOIN metadata md ON md.uuid=v.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - left join users u on v.userid=u.id - WHERE md.title IS NOT NULL AND a.userid=? and v.uuid=? AND a.status=1 - order by v.ts_created desc - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id,$uuid)); - $rows = $sth->fetchAll(); - @$this->view->mdtitle=$rows[0]['title']; - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(15); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - } - - //查看所有版本列表 - else if((empty($ac) && empty($uuid))|| $ac=='list') - { - $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v - LEFT JOIN metadata md ON md.uuid=v.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - left join users u on v.userid=u.id - WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1 - order by v.ts_created desc - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $rows = $sth->fetchAll(); - - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(15); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - } - - //按数据浏览 - else if($ac=="bydata") - { - $keywords = $this->_request->getParam('q'); - if(!empty($keywords)) - $this->view->q = $keywords; - $sql = "SELECT md.title,md.uuid,count(v.id) as c FROM mdversion v - LEFT JOIN metadata md ON md.uuid=v.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; - if(!empty($keywords)) - { - $search=new SimpleSearch($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(array($u_id)); - $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 v - USING mdauthor a - WHERE v.uuid=a.uuid and v.id=? AND a.userid=? AND a.status=1"; - $sth = $this->db->prepare($sql); - $ex = $sth -> execute(array($id,$u_id)); - - if($ex) - { - $data = array("deleted"=>$id,"error"=>$this->alertbox('ok','删除成功')); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>$this->alertbox('error','删除失败,请确认权限后重试')); - $this->jsonexit($data); - return true; - } - }catch(Exception $e) { - $msg = "删除失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$this->alertbox('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 - LEFT JOIN mdauthor a ON a.uuid=v.uuid - WHERE v.id=? AND a.userid=? AND a.status=1"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($id,$u_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->alertbox('warning','无须恢复,元数据相同')); - $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->alertbox('ok','恢复成功')); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>$this->alertbox('error','恢复失败,请确认权限后重试')); - $this->jsonexit($data); - return true; - } - }catch(Exception $e) { - $msg = "恢复失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$this->alertbox('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->alertbox('warning','请输入变更信息')); - $this->jsonexit($data); - return true; - } - - // 1. 权限认定 - $sql="select a.* from mdauthor a left join mdversion v on a.uuid=v.uuid - where a.status=1 and a.userid=? and v.id=?"; - $sth=$this->db->prepare($sql); - $sth->execute(array($u_id,$id)); - $row=$sth->fetch(); - if (empty($row)) - { - $data = array("error"=>'无权限修改数据'); - $this->jsonexit($data); - return true; - } - // 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(); - - //update search document - $search=new Search(); - //create search view in xunsearch - //$sql="select m.uuid,m.title,m.description,x.data,array_to_string(ARRAY( SELECT keyword.keyword FROM keyword WHERE keyword.id = m.id), ', '::text) AS keyword from normalmetadata m left join xml x on m.id=x.id where m.uuid=?"; - $sql="select * from xunsearch where uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($row['uuid'])); - $data = $sth->fetch(); - $search->update($data); - - 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->loadXML($row['xml']); - if ($iso->validate()) - { - $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); - $this->jsonexit($data); - return true; - } - @$iso->saveDB($this->db); - //进入评审库 - $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->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!')); - $this->jsonexit($data); - return true; - } else { //说明是已发布的数据且数据不存在评审信息 - //同步元数据 - $iso=new ISO19115(); - @$iso->loadXML($row['xml']); - if ($iso->validate()) - { - $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); - $this->jsonexit($data); - return true; - } - @$iso->saveDB($this->db); - - //移除中间版本 - $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->alertbox('ok','该版本已经成功发布!')); - $this->jsonexit($data); - return true; - } - } - else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收 - { - //同步元数据 - $iso=new ISO19115(); - @$iso->loadXML($row['xml']); - if ($iso->validate()) - { - $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); - $this->jsonexit($data); - return true; - } - @$iso->saveDB($this->db); - - //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->alertbox('ok','该版本已经成功提交并同步,请等待数据中心进一步处理!')); - $this->jsonexit($data); - return true; - } - else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息 - { - //同步元数据 - $iso=new ISO19115(); - @$iso->loadXML($row['xml']); - //email to admin - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"version-commit-admin",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - 'changelog'=>$changelog, - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - $mail->send(); - - unset($mail); - unset($mailtp); - //email to author - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"version-commit-author",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - if($this->debug==0) - { - $mail->addTo($user->email); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - //email to experts - $sql="select u.username,u.email from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($row['uuid'])); - $experts = $sth->fetchAll(); - - unset($mail); - unset($mailtp); - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mailtp=new EmailText($this->db,"version-commit-expert",array( - 'user' => $user->username, - 'uuid' => $row['uuid'], - 'email'=> $user->email, - //元数据标题 - 'title'=> $row['title'], - )); - $mail->setBodyText($mailtp->getBody()); - $mail->setSubject($mailtp->getSubject()); - $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/data/doc/review/1/uuid/'.$uuid); - $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc'); - $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$uuid); - $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.pdf'); - if($this->debug==0) - { - foreach ($experts as $expert) $mail->addTo($expert['email']); - $mail->addCc($this->view->config->service->email); - }else{ - $mail->addTo($this->debug_email); - } - @$mail->send(); - - $data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!')); - $this->jsonexit($data); - return true; - } - else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态 - { - //同步元数据 - $iso=new ISO19115(); - @$iso->loadXML($row['xml']); - if ($iso->validate()) - { - $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); - $this->jsonexit($data); - return true; - } - @$iso->saveDB($this->db); - - //移除中间版本 - $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->alertbox('ok','该版本已经成功发布!')); - $this->jsonexit($data); - return true; - } - - }catch(Exception $e) { - $msg = "提交失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$this->alertbox('error',$msg)); - $this->jsonexit($data); - return true; - } - }//发布到评审 - - //与前一个版本对比 - else if($ac == "diff") - { - $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 mdauthor a ON a.uuid=v.uuid - LEFT JOIN metadata md ON v.uuid=md.uuid - WHERE v.id=? AND a.userid=? AND a.status=1"; - $sth = $this->db->prepare($sql); - $sth -> execute(array($id,$u_id)); - - $row = $sth->fetch(); - - $sql = "SELECT v.* FROM mdversion v - WHERE v.uuid=? AND v.id<=? - ORDER BY v.ts_created DESC - LIMIT ?"; - $sth = $this->db->prepare($sql); - $sth -> execute(array($row['uuid'],$id,2)); - - $rows = $sth->fetchAll(); - - if(count($rows)<2) - { - $this->view->error = "对比失败:之前没有版本可以对比"; - return true; - } - - $this->view->info = $row; - $this->view->data = $rows; - - } - - - }// versionAction() 数据版本管理 - - //新建元数据 - 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 FROM geonetworkmetadata gn - WHERE gn.uuid not in (select uuid from metadata) and gn.owner=? - order by gn.id desc - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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 SimpleSearch($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 SimpleSearch($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=="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->alertbox('warning','请输入变更信息')); - $this->jsonexit($data); - return true; - } - - // 1. 权限认定:当前用户必须和其owner相同 - // 数据应当没有评审状态,没有作者信息 - $sql="select gn.id from geonetworkmetadata gn - left join mdstatus s on gn.uuid=s.uuid - left join mdauthor a on s.uuid=a.uuid - where s.id is not null and a.id is not null and gn.id=?"; - $sth=$this->db->prepare($sql); - $sth->execute(array($id)); - $row=$sth->fetch(); - if (!empty($row)) - { - $data = array("error"=>'错误的入口'); - $this->jsonexit($data); - return true; - } - - $sql="select uuid,data from metadata where id=? and owner=?"; - $sth=$this->wdb->prepare($sql); - $sth->execute(array($id,$u_id)); - $row=$sth->fetch(); - if (empty($row)) - { - $data = array("error"=>'无权限修改数据'); - $this->jsonexit($data); - return true; - } - //首先检查元数据错误 - $iso=new ISO19115(); - @$iso->loadXML($row['data']); - if ($iso->validate()) - { - $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); - $this->jsonexit($data); - return true; - } - - // 保存数据作者信息 - $sql="insert into mdauthor (uuid,userid,ts_activated,status) values(?,?,now(),1)"; - $this->db->query($sql,array($row['uuid'],$u_id)); - - // 2. 保存变化记录 save changelog & userid for the latest version - $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid=? order by ts_created desc limit 1)"; - $this->db->query($sql,array($changelog,$u_id,$row['uuid'])); - file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$row['uuid']."&filelist=1"); - // 3. 保存数据评审状态 - //导入元数据 - @$iso->saveDB($this->db); - //进入评审库 - $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(); - - 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->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!')); - $this->jsonexit($data); - return true; - }catch(Exception $e) { - $msg = "提交失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$this->alertbox('error',$msg)); - $this->jsonexit($data); - return true; - } - } - //FTP - else if($ac == "ftp") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_getParam('uuid'); - - $this->view->uuid = $uuid; - - if(empty($uuid) || !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'=>"参数错误" - ); - $this->jsonexit($data); - return true; - } - //安全检查: uuid必须是当前用户且为新建数据 - $sql="select * from geonetworkmetadata where uuid=? and uuid not in (select uuid from metadata) and owner=?"; - $sth=$this->db->prepare($sql); - $sth->execute(array($uuid,$u_id)); - $row=$sth->fetch(); - if (empty($row)) - { - $data = array( - 'error'=>"参数错误" - ); - $this->jsonexit($data); - return true; - } - - //ftp 用户名 - $uname = 'westdc'.$u_id.'upload'; - - //ftp路径 - $homedir = "/disk1/WestDC/upload/".$uuid."/"; - - $sql = "SELECT * FROM proftpusers WHERE userid='$uname' ORDER BY pkid DESC"; - $sth = $this->db->prepare($sql); - $sth->execute(); - $row = $sth->fetch(); - - //create directory for upload - //server is not localhost, so we need a trick - //$old=umask(0); - //@mkdir($homedir,0777); - //umask($old); - $page=file_get_contents('http://ftp1.westgis.ac.cn/proftp_upload.php?uuid='.$uuid); - if (!empty($page)) die($page);//there are errors in visit ftp page - - - if(!empty($row['pkid'])) - { - if(preg_match("/.*".$uuid.".*/",$row['homedir'])) - { - $data = array( - 'statu'=>1, - 'user'=>$row['userid'], - 'passwd'=>$row['passwd'] - ); - - $this->jsonexit($data); - return true; - - }else{ - $uid = 109; - $gid = 1002; - - $passwd = $this->genRandomString(16); - //$sql = "UPDATE proftpusers SET passwd=?,uid=?,gid=?,homedir=? WHERE userid=?"; - //$sth = $this->db->prepare($sql); - //$rs = $sth->execute(array($passwd,$uid,$gid,$homedir,$uname)); - $sql="update proftpusers SET passwd='".$passwd."',uid=".$uid.",gid=".$gid.",homedir='".$homedir."' WHERE userid='".$uname."'"; - $rs=$this->db->query($sql); - if($rs) - { - $data = array( - 'statu'=>1, - 'user'=>$uname, - 'passwd'=>$passwd - ); - $this->jsonexit($data); - return true; - }else{ - $data = array( - 'error'=>"FTP信息更新失败,请重试" - ); - $this->jsonexit($data); - return true; - } - } - } - - else{ - $uid = 109; - $gid = 1002; - $passwd = $this->genRandomString(16); - - //$sql = "INSERT INTO proftpusers (userid,passwd,uid,gid,homedir) VALUES (?,?,?,?,?)"; - //$sth = $this->db->prepare($sql); - //$rs = $sth->execute(array($uname,$passwd,$uid,$gid,$homedir)); - $sql="insert into proftpusers (userid,passwd,uid,gid,homedir) values('".$uname."','".$passwd."',109,1002,'".$homedir."')"; - $rs=$this->db->query($sql); - if($rs) - { - $data = array( - 'statu'=>1, - 'user'=>$uname, - 'passwd'=>$passwd - ); - $this->jsonexit($data); - return true; - }else{ - $data = array( - 'error'=>"FTP信息更新失败,请重试" - ); - $this->jsonexit($data); - return true; - } - }//end if - - }//ftp - } - //新建元数据 - - //文献管理 - function literatureAction() - { - $ac = $this->_request->getParam('ac'); - $uuid = $this->_request->getParam('uuid'); - $id = $this->_request->getParam('id'); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - } - - //查看单条数据的所有文献 - if (!empty($uuid) && empty($ac)) - { - $sql = "SELECT md.title,md.uuid,r.id,r.reference,r.link FROM mdref mr - LEFT JOIN metadata md ON md.uuid=mr.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - left join reference r on mr.refid=r.id - WHERE md.title IS NOT NULL AND a.userid=? and mr.uuid=? AND a.status=1 - order by md.ts_created desc - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id,$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; - $this->_helper->viewRenderer('literature-viewdata'); - } - - //查看单条文献的所有数据 - if (!empty($id) && empty($ac)) - { - $sql = "SELECT md.title,md.uuid,r.id,r.reference,r.link,(a.userid-?) as isauthor FROM mdref mr - LEFT JOIN metadata md ON md.uuid=mr.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - left join reference r on mr.refid=r.id - WHERE md.title IS NOT NULL AND mr.refid=? AND a.status=1 - order by md.ts_created desc - "; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id,$id)); - $rows = $sth->fetchAll(); - @$this->view->mdtitle=$rows[0]['reference']; - - $paginator = Zend_Paginator::factory($rows); - $paginator->setCurrentPageNumber($this->_getParam('page')); - $paginator->setItemCountPerPage(15); - $paginator->setView($this->view); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); - $this->view->paginator=$paginator; - $this->_helper->viewRenderer('literature-viewliter'); - } - - //查看所有文献列表 - else if((empty($ac) && empty($uuid)) && empty($id)) - { - $keywords = $this->_request->getParam('q'); - $sql = "SELECT md.title,md.uuid,r.reference,r.id,mr.id as mrid FROM mdref mr - LEFT JOIN metadata md ON md.uuid=mr.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - left join reference r on mr.refid=r.id - WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; - if(!empty($keywords)) - $this->view->q = $keywords; - if(!empty($keywords)) - { - $search=new SimpleSearch($keywords); - $where=$search->sql_expr(array("r.reference","md.title","md.description")); - $sql.=' and '.$where; - } - $sql.=" order by md.ts_created desc"; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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=="byliter") - { - $keywords = $this->_request->getParam('q'); - if(!empty($keywords)) - $this->view->q = $keywords; - $sql = "SELECT count(md.uuid) as c,r.reference,r.id FROM reference r - left join mdref mr on r.id=mr.refid - LEFT JOIN metadata md ON md.uuid=mr.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - - WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; - if(!empty($keywords)) - { - $search=new SimpleSearch($keywords); - $where=$search->sql_expr(array("r.reference")); - $sql.=' and '.$where; - } - $sql.=" group by r.reference,r.id"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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('literature-byliter'); - } - - //按数据浏览 - else if($ac=="bydata") - { - $keywords = $this->_request->getParam('q'); - if(!empty($keywords)) - $this->view->q = $keywords; - $sql = "SELECT md.title,md.uuid,count(mr.id) as c FROM metadata md - LEFT JOIN mdref mr ON md.uuid=mr.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - left join reference r on mr.refid=r.id - WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; - if(!empty($keywords)) - { - $search=new SimpleSearch($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(array($u_id)); - $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('literature-bydata'); - } - - //添加文献信息 - else if($ac == "add") - { - $submit = $this->_request->getParam('submit'); - if(!empty($submit)) - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = ""; - try{ - $uuid = $this->_request->getParam('uuid'); - $ref=$this->_request->getParam('ref'); - $reftype=$this->_request->getParam('reftype'); - $url = $this->_request->getParam('url'); - if(empty($uuid) || empty($ref) || !is_numeric($reftype)) - { - $data = array("error"=>"参数错误"); - $this->jsonexit($data); - return true; - } - - $sql="select * from mdauthor where userid=? and uuid=? and status=1"; - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id,$uuid)); - $row = $sth->fetch(); - if (empty($row)) - { - $data = array("error"=>$this->alertbox('warning','您不是该数据作者,无法添加对应文献信息。')); - $this->jsonexit($data); - return true; - } - - $sql="select id from reference where reference=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($ref)); - $row = $sth->fetch(); - if (!$row) - { - $sql="insert into reference (reference,link) values(?,?)"; - $sth = $this->db->prepare($sql); - $sth->execute(array(trim($ref),$url)); - $sql="select id from reference where reference=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array(trim($ref))); - $row = $sth->fetch(); - } - $sql="insert into mdref (uuid,refid,reftype) values(?,?,?)"; - $sth = $this->db->prepare($sql); - $ex=$sth->execute(array($uuid,$row['id'],$reftype)); - - if($ex) - { - $data = array("commited"=>1,"error"=>$this->alertbox('ok','成功添加文献!')); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>$this->alertbox('error','提交失败,请确认权限后重试')); - $this->jsonexit($data); - return true; - } - }catch(Exception $e) { - $msg = "提交失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$this->alertbox('error',$msg)); - $this->jsonexit($data); - return true; - } - }else{ - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer('literature-add'); - $this->view->uuid = $this->_request->getParam('uuid'); - } - }//添加文献 - - //删除某个文献 - else if($ac=="delete") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $data = ""; - - $id = $this->_request->getParam('id'); - $uuid = $this->_request->getParam('uuid'); - if(empty($uuid) || !is_numeric($id)) - { - $data = array("error"=>"参数错误"); - $this->jsonexit($data); - return true; - } - try{ - $sql = "DELETE FROM mdref r - USING mdauthor a - WHERE r.uuid=a.uuid and r.refid=? and r.uuid=? AND a.userid=? AND a.status=1"; - $sth = $this->db->prepare($sql); - $ex = $sth -> execute(array($id,$uuid,$u_id)); - - if($ex) - { - $data = array("deleted"=>$id.$uuid,"error"=>$this->alertbox('ok','删除成功')); - $this->jsonexit($data); - return true; - }else{ - $data = array("error"=>$this->alertbox('error','删除失败,请确认权限后重试')); - $this->jsonexit($data); - return true; - } - }catch(Exception $e) { - $msg = "删除失败,请确认权限后重试"; - if($this->debug>0) - {$msg .= $e->getMessage();} - $data = array("error"=>$this->alertbox('error',$msg)); - $this->jsonexit($data); - return true; - } - } - - //文献附件上传 - else if($ac=='upload') - { - - $this->_helper->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_getParam('uuid'); - - try{ - - $files=new files(); - $msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'literature'); - - if(empty($msg['error'])) - { - $msg['error']=""; - $filename = $msg['db_path']; - $filesize = $msg['file_size']; - $filedesc = $this->_request->getParam('filedesc'); - $filetype = $msg['file_type']; - $realname = $msg['realname']; - - - $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$u_id','$filesize','$realname') RETURNING id"; - $sth = $this->db->prepare($sql); - $sth->execute(); - $att = $sth->fetch(PDO::FETCH_ASSOC); - $msg['attid'] = $attid = $att['id']; - - $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]
'; - echo Zend_Json::encode($msg); - exit(); - - - - }else{ - $msg['error'] = '附件上传失败:'.$msg['error']; - @unlink($filename); - echo Zend_Json::encode($msg); - exit(); - } - - }catch(Exception $e){ - $msg['error'] = "错误:".$e->getMessage(); - echo Zend_Json::encode($msg); - exit(); - } - }//文件上传 - - }//文献管理 - - //文档管理 - function documentAction(){ - - $ac = $this->_request->getParam('ac'); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $u_id = $user->id; - } - - if(empty($ac) || $ac == 'list' || $ac=='search') - { - - $wheresql = ""; - - $keyword = $this->_request->getParam('q'); - - if($ac=='search' && !empty($keyword)) - { - $this->view->q = $keyword; - $search = new SimpleSearch($keyword); - $wheresql = $search->sql_expr(array("md.title")); - } - if(!empty($wheresql)) - { - $wheresql = " AND ".$wheresql; - } - - - $sql = "select count(att.id) as aid,md.title,md.uuid from metadata md - LEFT JOIN mdauthor a ON a.uuid=md.uuid - LEFT JOIN mdattach att ON att.uuid=md.uuid - WHERE a.status>=1 AND a.userid=? $wheresql - GROUP BY md.title,md.uuid"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($u_id)); - $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; - } - - if($ac=='view') - { - $uuid = $this->_request->getParam('uuid'); - - if(empty($uuid) || !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)) - { - $this->view->error = "参数有误!"; - return true; - } - - $sql = "SELECT title FROM metadata WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid)); - $row = $sth->fetch(); - - $this->view->title = $row['title']; - - $sql = "SELECT att.*,md.title,md.uuid FROM mdattach mda - LEFT JOIN attachments att ON mda.id=att.id - LEFT JOIN metadata md ON mda.uuid=md.uuid - LEFT JOIN users u ON att.userid=u.id - WHERE md.uuid=? - "; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid)); - $rows = $sth->fetchAll(); - - $this->view->info=$rows; - - $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('document-view'); - } - - if($ac == 'del') - { - - $this->_helper->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - (int)$id = $this->_request->getParam('id'); - $uuid = $this->_request->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)) - { - exit(); - } - - $info = $this->getFileinfo($id); - $filepath = $dataFilePath.$info['filename']; - try{ - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $userid = $user->id; - $sql_mdattach = "delete from mdattach where uuid='$uuid' and id='$id'"; - $sql = "delete from attachments where id='$id' and userid='$userid'"; - if($this->db->exec($sql_mdattach)>0 && $this->db->exec($sql)>0) - { - @unlink($filepath); - echo "ok"; - } - } - - }catch(Exception $e){} - //不输出任何错误 - - }//删除 - - if($ac=='upload') - { - $submit = $this->_request->getParam('submit'); - if(empty($submit)) - { - $uuid = $this->_request->getParam('uuid'); - $this->view->uuid=$uuid; - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer('document-upload'); - return true; - } - else - { - $this->_helper->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_getParam('uuid'); - - try{ - - $files=new files(); - $msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'document'); - - if(empty($msg['error'])) - { - $msg['error']=""; - $filename = $msg['db_path']; - $filesize = $msg['file_size']; - $filedesc = $this->_request->getParam('filedesc'); - $filetype = $msg['file_type']; - $realname = $msg['realname']; - - - $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$u_id','$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($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(); - } - } - }//文件上传 - - if($ac == 'download') - { - (int)$id = $this->_request->getParam('id'); - - $sql = "select * from attachments where id='$id'"; - - $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="'.$row['realname'].'"') - ->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); - }//文件下载 - - }//文档管理 - - /* - * delegateAction() 委托 - * - * - */ - public function delegateAction(){ - - $ac = $this->_request->getParam('ac'); - $uuid = $this->_request->getParam('uuid'); - - if($ac == '' && !empty($uuid)) - { - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - 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)) - { - $this->view->info = "参数错误"; - return true; - } - - $sql = "SELECT * FROM metadata WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($uuid)); - $row = $sth->fetch(); - - $this->view->metadata = $row; - - //确认一下用户有权限,如果直接使用update语句无法得到已更改过的状态 - //只要是认证后的数据作者,都可以修改数据的委托状态 - $sql = "SELECT * FROM mdstatus - WHERE uuid=? AND userid in (select userid from mdauthor where status=1 and uuid=?) AND status=?"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$uuid,6)); - $mds = $sth->fetch(); - - if(!empty($mds['id'])) - { - $sql = "UPDATE mdstatus SET status=7,ts_changed='now()',userid=$uid WHERE uuid='$uuid'"; - if($this->db->exec($sql)) - { - $this->view->info = "委托成功!"; - return true; - } - else - { - $this->view->info = "委托失败!"; - return true; - } - }else{ - $this->view->info = "该数据无法委托,请确定数据状态已经可以进行委托,或数据尚未进行委托"; - } - } - - if($ac == 'cancel') - { - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - 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)) - { - $this->view->info = "参数错误"; - return true; - } - - $sql = "SELECT * FROM metadata WHERE uuid=?"; - $sth = $this->db->prepare($sql); - $sth ->execute(array($uuid)); - $row = $sth->fetch(); - - $this->view->metadata = $row; - - $sql = "SELECT * FROM mdstatus - WHERE uuid=? AND userid in (select userid from mdauthor where status=1 and uuid=?) AND status=?"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$uuid,7)); - $mds = $sth->fetch(); - - if(!empty($mds['id'])) - { - $sql = "UPDATE mdstatus SET status=6,ts_changed='now()',userid=$uid WHERE uuid='$uuid'"; - if($this->db->exec($sql)) - { - $this->view->info = "取消委托成功!"; - return true; - } - else - { - $this->view->info = "取消委托失败!"; - return true; - } - }else{ - $this->view->info = "操作失败!该数据尚未进行委托"; - } - - - } - - - }//委托 - - /* - * sendmailAction() 邮件通知 - * - * Param uuid $uuid //元数据UUID - * - * return Ajax-response - * - * 传入元数据UUID,判断是否为当前用户的数据,如果是,即可向已经下载过该数据的所有用户发送电子邮件 - */ - public function sendmailAction() - { - $uuid = $this->_getParam('uuid'); - $ac = $this->_getParam('ac'); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - if(empty($uuid) || empty($uid)) - { - $this->view->error = "参数错误"; - return true; - } - - $sql = "SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus,m.uuid FROM normalmetadata m - LEFT JOIN mdauthor a ON m.uuid=a.uuid - LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid - LEFT JOIN mdstatus mds ON m.uuid=mds.uuid - WHERE a.userid=? AND a.status>=0 AND m.uuid=?"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uid,$uuid)); - $metadata = $sth->fetch(); - - if(empty($metadata['uuid'])) - { - $this->view->error = "数据不存在或者您可能没有该数据的管理权限"; - return true; - } - - $this->view->metadata = $metadata; - - $sql = "select u.email - from dataorder d - LEFT JOIN users u on d.userid = u.id - WHERE u.email IS NOT NULL - AND d.uuid=? - GROUP BY u.email"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid)); - $mails = $sth->fetchAll(); - - $this->view->mailinfo = count($mails); - - if($ac == "send") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $title = $this->_getParam('title'); - $body = $this->_getParam('body'); - - foreach($mails as $k=>$v) - { - $mail=new WestdcMailer($this->view->config->smtp); - $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); - $mail->setBodyText($body); - $mail->setSubject($title); - if($this->debug==0) - { - $mail->addTo($v['email']); - }else{ - $mail->addTo($debug_email); - } - if($mail->send()) - { - echo $v['email']."...发送成功!
"; - }else{ - echo $v['email']."...发送失败!
"; - } - } - } - } - - /* - * staticsAction() 数据统计 - * - * - */ - public function staticsAction(){ - - $ac = $this->_getParam('ac'); - - if(empty($ac)) - { - $this->view->alldata = $this->getClick(); - } - - if($ac=="md") - { - $this->_helper->viewRenderer('statics-md'); - $this->view->allorder = $this->getStatic("allorder"); - $this->view->offlineorder = $this->getStatic("offline"); - $this->view->onlineorder = $this->getStatic("online"); - } - - if($ac == "time") - { - $this->_helper->viewRenderer('statics-time'); - $this->view->datas = $this->getStaticByYear(); - - } - - }//staticsAction() 数据统计 - - public function getClick(){ - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - $sql = "SELECT md.title,md.uuid,s.viewed,count(o.id) as down FROM metadata md - LEFT JOIN mdstat s ON md.uuid=s.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - LEFT JOIN dataorder o ON md.uuid=o.uuid - WHERE a.userid=? and a.status=1 and (o.status=0 or o.status=5) - GROUP BY md.title,md.uuid,s.viewed"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uid)); - $rows = $sth->fetchAll(); - - return $rows; - } - - /* - * getStaticByYear按月份获取统计数据 - */ - public function getStaticByYear($year=0) - { - $uid=Zend_Auth::getInstance()->getIdentity()->id; - - $sql = "select to_char(o.ts_created, 'YYYY-MM') as d , count(o.id) as c from dataorder o - where o.status in (0,5) and o.uuid in (select uuid from mdauthor where status=1 and userid=".$uid.")"; - if ($year>0) - $sql.=" and o.ts_created between '$year-01-01' and '$year-12-31' "; - $sql.=" group by d order by d desc"; - - $sth = $this->db->prepare($sql); - $sth->execute(); - $rows = $sth->fetchAll(); - - return $rows; - } - - public function getStatic($ac){ - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - if(empty($uid)){ - return false; - } - - if($ac == "allorder"){ - $sql = " SELECT count(o.id) as c FROM metadata md - LEFT JOIN dataorder o ON md.uuid=o.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - WHERE a.userid=? AND a.status>0"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uid)); - $row = $sth->fetch(); - return $row['c']; - } - - if($ac == "offline"){ - $sql = " SELECT count(o.id) as c FROM metadata md - LEFT JOIN dataorder o ON md.uuid=o.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - WHERE o.offlineappid > 0 AND a.userid=? AND a.status>0"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uid)); - $row = $sth->fetch(); - return $row['c']; - } - - if($ac == "online"){ - $sql = " SELECT count(o.id) as c FROM metadata md - LEFT JOIN dataorder o ON md.uuid=o.uuid - LEFT JOIN mdauthor a ON md.uuid=a.uuid - WHERE o.onlineappid > 0 AND a.userid=? AND a.status>0"; - $sth = $this->db->prepare($sql); - $sth->execute(array($uid)); - $row = $sth->fetch(); - return $row['c']; - } - - } - - - public function getFileinfo($id){ - $sql = "select * from attachments where id='$id'"; - $re= $this->db->query($sql); - $row= $re->fetch(); - return $row; - } - - //成为作者后的后继处理工作 - private function author_first($uuid,$author) - { - $sql="insert into mdversion (xml,ts_created,uuid,changelog,userid) - select x.data,m.ts_created,?,?,? from metadata m left join xml x on m.id=x.id - left join mdversion v on m.uuid=v.uuid - where m.uuid=? and v.changelog is null and m.uuid not in (select uuid from mdversion where changelog is not null) - order by v.ts_created ASC LIMIT 1"; - $sth=$this->db->prepare($sql); - try - { - $sth->execute(array($uuid,'初始版本 version 1.0',$author,$uuid)); - } catch(Exception $e){ - // do nothing here. - // 说明之前已经有对应数据 - } - $this->wdb=Zend_Db::factory($this->view->config->geonetwork); - $sql="update metadata set owner=? where uuid=?"; - $sth=$this->wdb->prepare($sql); - $sth->execute(array($author,$uuid)); - } - - - /* - * metadata() 新建元数据 - * - * - * - */ - public function metadataAction() - { - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - } - - $ac = $this->_getParam('ac'); - - if(empty($ac)) - { - - include_once("MetaData.php"); - $md = new Metadata($this->db); - $this->view->Field = $md->MetadataFields; - - $MDList = $md->getRecord($uid); - - if(!empty($MDList)) - { - foreach($MDList as $k=>$v) - { - $MDList[$k]['content'] = json_decode($v['content']); - } - $this->view->MDList = $MDList; - } - } - - if($ac=="new") - { - $this->_helper->viewRenderer('metadata-new'); - - include_once("MetaData.php"); - $md = new Metadata($this->db); - $this->view->Field = $md->MetadataFields; - - $uuid = $this->_getParam('uuid'); - - if(!empty($uuid) && !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)) - { - $this->view->error = "参数错误"; - return true; - } - - else{ - $this->view->uuid = $uuid; - if(!empty($uuid)){ - - $datas = $md->getRecord($uid,$uuid); - $data = json_decode($datas['content']); - $this->view->data = $data; - return true; - } - } - - }//创建元数据页面 - - if($ac == "del") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $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)) - { - $this->jsonexit(array('error'=>"参数错误")); - return true; - } - - $sql = "DELETE FROM metadata_temp WHERE userid=? AND uuid=?"; - - $sth = $this->db->prepare($sql); - $rs = $sth->execute(array($uid,$uuid)); - - if($rs>0) - { - $this->jsonexit(array('msg'=>"删除成功",'deleted'=>1)); - return true; - }else{ - $this->jsonexit(array('error'=>"删除失败,请刷新页面后查看")); - return true; - } - - return true; - - }//删除 - - if($ac == "save") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - include_once("MetaData.php"); - $md = new Metadata($this->db); - - $uuid = $this->_getParam('uuid'); - $commit = $this->_getParam('commit'); - - $data = array(); - - foreach($md->MetadataFields as $k=>$v) - { - $data[$v['FieldName_temp']] = $this->_getParam($v['FieldName']); - - if(!empty($commit)) - { - if(isset($v['Required']) && $v['Required'] == true) - { - if($v['Type'] == 'varchar' || $v['Type'] == 'text') - { - if(empty($data[$v['FieldName_temp']])) - { - $this->jsonexit(array("error"=>$v['Title']." 必须填写")); - return true; - } - } // 文本数据 - - if($v['Type'] == 'array') - { - if(!is_array($data[$v['FieldName_temp']]) || count($data[$v['FieldName_temp']]) < 1 ) - { - $this->jsonexit(array("error"=>$v['Title']." 信息不完整")); - return true; - }//数组没有值 - - foreach($data[$v['FieldName_temp']] as $sk=>$sv) - { - if(empty($sv)) - { - unset($data[$v['FieldName_temp']][$sk]); - } - - if(is_array($sv)) - { - $error_cu = 0; - foreach($sv as $sub_val) - { - if(empty($sub_val)) - { - $error_cu ++ ; - } - } - - if($error_cu >= count($sv)) - { - unset($data[$v['FieldName_temp']][$sk]); - $error_cu = 0; - } - - if($error_cu > 0 && $error_cu < count($sv)){ - $this->jsonexit(array("error"=>$v['Title']." 信息不完整")); - return true; - } - } - } - - if(count($data[$v['FieldName_temp']]) < 1) - { - $this->jsonexit(array("error"=>$v['Title']." 必须填写")); - return true; - } - - } // 数组数据 - - } // 是否必填 - }// empty($commit) - }// end foreach - - if(empty($data['title'])) - { - $this->jsonexit(array("error"=>"元数据标题必须填写")); - return true; - } - - if(!empty($commit)) - { - $status = 1; - }else{ - $status = 0; - } - - if(!empty($uuid)) - { - $rs = $md->Record($uid,$data,$status,$uuid); - }else{ - $rs = $md->Record($uid,$data,$status); - } - - if($rs !== false) - { - if(!empty($commit)) - { - $data = array("uuid"=>$rs,"complete"=>$commit); - }else{ - $data = array("uuid"=>$rs,'saved'=>1); - } - $this->jsonexit($data); - return true; - }else{ - $this->jsonexit(array("error"=>'保存失败')); - return false; - } - }// 新元数据保存 - - if($ac == "autoinput") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $name = $this->_getParam('k'); - - $name = strip_tags(trim($name)); - - if(!empty($name)) - { - $sql = "SELECT realname,email FROM users WHERE realname LIKE ? OR email LIKE ?"; - $sth = $this->db->prepare($sql); - $sth->execute(array('%'.$name.'%','%'.$name.'%')); - $rows = $sth->fetchAll(); - $this->jsonexit($rows); - } - } - - if($ac == "process") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $uuid = $this->_getParam('uuid'); - - $sql = "SELECT * FROM metadata_temp WHERE uuid=? AND userid=?"; - - $sth = $this->db->prepare($sql); - $sth->execute(array($uuid,$uid)); - - $row = $sth->fetch(); - - $body = json_decode($row['content']); - echo "
";
-			print_r($body);
-			echo "
"; - - return true; - }// 元数据处理 - - }//metadata() - - public function fundAction() - { - //$this->_helper->layout->setLayout('administry'); - $ac = $this->_getParam('ac'); - $submit = $this->_getParam('submit'); - - include_once("data/Fund.php"); - $fund = new Fund($this->db); - - $auth = Zend_Auth::getInstance(); - if($auth->hasIdentity()) - { - $user = $auth->getIdentity(); - $uid = $user->id; - }else{ - exit("请重新登录"); - } - - if($ac=='index' || empty($ac)) - { - $uuid = $this->_getParam('uuid'); - if(empty($uuid)) - { - $rows = $fund->fetch(0,true,$uid); - $fund->addPaginator($rows,$this->view,$this->_request); - }else{ - include('data/Metadata.php'); - $md = new Metadata($this->db); - $this->view->md = $md->view($uuid); - $rows = $fund->fetch($uuid); - $fund->addPaginator($rows,$this->view,$this->_request); - } - return true; - } - - if($ac == "add") - { - $this->_helper->viewRenderer('fund-add'); - if(!empty($submit)) - { - $data = $fund->_getParams($this->_request); - $data['userid'] = $uid; - - if($fund->add($data) == true) - { - $this->view->AlertType = "alert-success"; - $this->view->msg = "添加成功!"; - $this->view->jump_url = "/author/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 = "/author/fund/"; - } - - if(!empty($submit)) - { - $data = $fund->_getParams($this->_request); - $data['userid'] = $uid; - $state = $fund->update($data,$id,$uid); - if( $state == true) - { - $this->view->AlertType = "alert-success"; - $this->view->msg = "修改成功!"; - $this->view->jump_url = "/author/fund/"; - return true; - }else{ - $this->view->data = $data; - if(is_string($state)) - { - $this->view->error = $state; - }else{ - $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,$uid) == 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,true,$uid); - }else{ - $this->view->ct = "ct"; - $rows = $fund->fetch($uuid,false,$uid); - } - - include('data/Metadata.php'); - $md = new Metadata($this->db); - $this->view->md = $md->view($uuid); - - $fund->addPaginator($rows,$this->view,$this->_request); - - return true; - }//formd - - if($ac == "mdfunddel") - { - $this->_helper->layout->disableLayout(); - $this->_helper->viewRenderer->setNoRender(); - - $id = $this->_getParam('id'); - - if(empty($id)) - { - $this->jsonexit(array('error'=>'参数错误')); - return true; - } - - if($fund->mfdelete($id) == true) - { - $this->jsonexit(array('success'=>$id)); - return true; - }else{ - $this->jsonexit(array('error'=>'删除失败')); - return true; - } - }//mdfunddel - - }//fund - - public function doiAction() - { - //$this->_helper->layout->setLayout('administry'); - $ac = $this->_getParam('ac'); - $submit = $this->_getParam('submit'); - $uuid = $this->_getParam('uuid'); - - include_once("data/Doi.php"); - $doi = new Doi($this->db); - include_once("helper/view.php"); - - if( empty($ac) || $ac == "index") - { - $uid = view::User('id'); - if(empty($uuid)) - { - $rows = $doi->fetch($uid); - view::addPaginator($rows,$this->view,$this->_request); - }else{ - $this->_redirect('/author/doi/ac/edit/?uuid='.$uuid); - return true; - } - return true; - }//index - - if($ac == "edit") - { - $this->_helper->viewRenderer('doi-add'); - $id = $this->_getParam('id'); - if(empty($uuid) && empty($id)) - { - view::Msg('alert-error',"参数错误",-1); - return false; - } - - if(empty($submit)){ - if(!empty($uuid)) - { - $this->view->uuid = $uuid; - $this->view->data = $doi->view($uuid); - if(empty($this->view->data)) - { - include('data/Metadata.php'); - $md = new Metadata($this->db); - $metadata = $md->view($uuid); - $this->view->data = array( - 'uuid'=>$uuid, - 'title'=>$metadata['title'], - 'doi'=>$metadata['doi'], - 'url'=>"http://" . $_SERVER['HTTP_HOST'].'/data/'.$uuid, - 'publisher'=>view::User('realname'), - ); - }else{ - $this->view->data['info'] = $doi->data_process_out($this->view->data); - } - }else{ - $this->view->data = $doi->view($uuid); - $this->view->data['info'] = $doi->data_process_out($this->view->data); - } - }else{ - $data = $doi->_getParams($this->_request); - $this->view->data = $data; - $info = $doi->checkinfo($data['info']); - if(!is_array($info)){ - $this->view->error = view::Error('alert-error',$info,-1); - return true; - }else{ - $data['info'] = $info; - $data['info'] = $doi->sksort($data['info'],"order",SORT_DESC); - } - $uid = view::User('id'); - $state = $doi->update($data,$uuid,$uid); - if($state) - { - $this->view->msg = view::Msg('alert-success',"修改成功!",'/author/doi/uuid/'.$uuid); - return false; - }else{ - $this->view->error = view::Error('alert-error',"修改失败",-1); - return false; - } - } - }//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($doi->delete($id) == true) - { - $this->jsonexit(array('success'=>$id)); - return true; - }else{ - $this->jsonexit(array('error'=>'删除失败')); - return true; - } - - }//del - - }//doi - - /* - * jsonexit() 退出并返回json数据 - * - * param array $data 要返回的JSON数据,可以是任意数组 - * - * return JSON-response - */ - public function jsonexit($data){ - $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($data)); - return true; - }//jsonexit() 退出并返回json数据 - - private function genRandomString($len) - { - $chars = array( - "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", - "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", - "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", - "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", - "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", - "3", "4", "5", "6", "7", "8", "9" - ); - $charsLen = count($chars) - 1; - - shuffle($chars); // 将数组打乱 - - $output = ""; - for ($i=0; $i<$len; $i++) - { - $output .= $chars[mt_rand(0, $charsLen)]; - } - return $output; - } - - //ajax 提示框 - public function alertbox($type='',$body){ - if($type == "error") - { - $img = ''; - $text = '

'.$body.'

'; - return $img.$text; - } - if($type == "ok") - { - $img = ''; - $text = '

'.$body.'

'; - return $img.$text; - } - if($type == "warning") - { - $img = ''; - $text = '

'.$body.'

'; - return $img.$text; - } - if(empty($type)) - { - $text = '

'.$body.'

'; - return $text; - } - } -} - +view->config = Zend_Registry::get('config'); + $this->db=Zend_Registry::get('db'); + $this->messenger=$this->_helper->getHelper('FlashMessenger'); + $this->view->messages = $this->messenger->getMessages(); + $this->view->theme = new Theme(); + + $this->view->pageID = "author-".$this->_request->getActionName(); + + } + function indexAction() + { + $this->view->pageID = "author-index"; + } + + + /* + * helpAction() 帮助文档 + * + */ + function helpAction(){ + $this->view->pageID = "author-help"; + }//helpAction()帮助文档 + + /* + * inauthorAction() 数据申请管理 + * + * param string $ac + * param string $keywords + * param string $pr //对离线数据申请的操作 + * param string $uuid + * + * return view|ajax-responds + */ + function inauthorAction() + { + $ac = $this->_request->getParam("ac"); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + $u_email = $user->email; + } + + if(empty($ac) || $ac=="online" || $ac == "searchonline") + { + $sql = "SELECT o.id,o.userid,o.unit,o.username,o.ts_created,o.project,m.title,m.uuid FROM onlineapp as o + LEFT JOIN metadata as m ON o.uuid=m.uuid + LEFT JOIN mdauthor as a ON a.uuid=o.uuid + WHERE (o.id in (SELECT distinct(onlineappid) from dataorder where status>=0)) AND a.userid = ? AND a.status=1"; + if ($ac=="searchonline") + { + $keywords = $this->_request->getParam('q'); + if(!empty($keywords)) + $this->view->q = $keywords; + $search=new SimpleSearch($keywords); + $where=$search->sql_expr(array("m.title","m.description")); + $sql.=' and '.$where; + } + $sql.=" ORDER BY o.id desc"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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; + }//在线申请记录 + + if($ac == "offline" || $ac=="searchoffline") + { + $pr = $this->_request->getParam('pr'); + $oid = $this->_request->getParam('oid'); + $pdf = $this->_request->getParam('pdf'); + + if(!empty($pr)) + { + try{ + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->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)) + { + echo "参数有误!";exit(); + } + + //如果用户已经下载过了,就无法在更改对数据申请的意见 + $sql = "select md.title,d.uuid,d.status as datastatus,d.authorpermitted from dataorder d + left join offlineapp o on o.id=d.offlineappid + left join metadata md on md.uuid=d.uuid + left join mdauthor a on a.uuid=d.uuid + where o.ts_approved is null and o.pdflink is not null + and d.uuid=? and a.userid=? and d.id=? AND a.status=1 + order by o.ts_created desc"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$u_id,$oid)); + $row = $sth->fetch(); + + if($row['datastatus']>4) + { + echo "该申请已经通过并且发放数据"; + exit(); + } + else if (empty($row) || $row['datastatus']!=4) + { + echo "该数据申请存在问题,请联系数据中心!"; + exit(); + } + + //同意用户下载 + if($pr=="confirm") + { + $sql = "UPDATE dataorder SET authorpermitted=1 WHERE uuid=? and id=?"; + $sth = $this->db->prepare($sql); + if($sth->execute(array($uuid,$oid))) + { + //发送相关邮件给数据中心服务人员 + $sql="select m.title,a.username from dataorder o left join metadata m on o.uuid=m.uuid left join offlineapp a on o.offlineappid=a.id where o.id=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($oid)); + $row = $sth->fetch(); + $mail = new WestdcMailer($this->view->config->smtp); + $mailtp=new EmailText($this->db,'offline-author-yes',array('user'=>$row['username'],'data'=>$row['title'],'email'=>$u_email)); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + $mail->addTo($this->view->config->service->email,'西部数据中心服务组'); + $mail->send(); + + $btn = $this->createOfflineCtBtn($uuid,'c',$oid); + echo ''.$btn.''; + exit(); + }else{ + echo ""; + exit(); + } + } + + //反对用户下载 + if($pr == "objection") + { + $sql = "UPDATE dataorder SET authorpermitted=-1 WHERE uuid=? AND id=?"; + $sth = $this->db->prepare($sql); + if($sth->execute(array($uuid,$oid))) + { + $btn = $this->createOfflineCtBtn($uuid,'o',$oid); + echo ''.$btn.''; + exit(); + }else{ + echo ""; + exit(); + } + } + }catch(Exception $e) + { + echo "处理中遇到错误,请刷新页面后重试"; + exit(); + } + } + else if (!empty($pdf)) + { + $sql="select o.pdflink from dataorder d left join offlineapp o on d.offlineappid=o.id + left join mdauthor m on d.uuid=m.uuid + where d.id=? and m.userid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($pdf,$u_id)); + $row = $sth->fetch(); + $content=file_get_contents($this->view->config->offline->savepath."/".$row['pdflink']); + header("Content-Disposition: inline; filename=".$row['pdflink']); + header("Content-Type:application/pdf"); + echo $content; + die(); // do not change current html output + } + else + { + $this->_helper->viewRenderer('inauthor-offline'); + + $select="select distinct(o.*),md.title,d.id as doid,d.uuid,d.status as datastatus,d.authorpermitted from offlineapp o + left join dataorder d on o.id=d.offlineappid + left join metadata md on md.uuid=d.uuid + left join mdauthor a on a.uuid=d.uuid + where o.ts_approved is null and o.pdflink is not null and d.status=4 and a.userid=? AND a.status=1 "; + if($ac == "searchoffline") + { + $keywords = $this->_request->getParam('q'); + if(!empty($keywords)) + $this->view->q = $keywords; + $search=new SimpleSearch($keywords); + $where=$search->sql_expr(array("md.title","md.description")); + $select.=' and '.$where; + } + $select.=" order by o.ts_created desc"; + + $sth = $this->db->prepare($select); + $sth->execute(array($u_id)); + $rows = $sth->fetchAll(); + + foreach ($rows as $k=>$v) + { + if($v['authorpermitted']==0) + {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['doid']);} + if($v['authorpermitted']>0) + {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['doid']);} + if($v['authorpermitted']<0) + {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['doid']);} + } + + $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; + } + }//离线申请 + + + //按数据显示 + if($ac == 'datalist' || $ac == "searchdata") + { + $uuid = $this->_request->getParam('uuid'); + if(!empty($uuid)) + { + $this->_helper->viewRenderer('view-dataoreder'); + + 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)) + { + $sql = "select md.title,d.id as doid,d.uuid,d.authorpermitted,d.status + ,offa.id as offa_id,offa.username as offa_name,offa.unit as offa_unit,offa.email as offa_email,offa.project as offa_project,date(offa.ts_created) as offa_tscreated + ,ona.id as ona_id,ona.username as ona_name,ona.unit as ona_unit,ona.email as ona_email,ona.project as ona_project, date(ona.ts_created) as ona_tscreated + from dataorder d + left join metadata md on md.uuid=d.uuid + left join mdauthor a on a.uuid=d.uuid + LEFT JOIN offlineapp offa on offa.id=d.offlineappid + LEFT JOIN onlineapp ona on ona.id=d.onlineappid + WHERE (offa.id IS NOT NULL OR ona.id IS NOT NULL) AND a.status=1 and d.status>=0 + AND d.uuid=? AND a.userid=? + ORDER BY d.ts_created DESC"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$u_id)); + $rows = $sth->fetchAll(); + @$this->view->mdtitle=$rows[0]['title']; + + foreach ($rows as $k=>$v) + { + if($v['authorpermitted']==0) + {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['doid']);} + if($v['authorpermitted']>0) + {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['doid']);} + if($v['authorpermitted']<0) + {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['doid']);} + } + + $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; + }else{ + $this->view->error = "参数有误"; + } + }else{ + $this->_helper->viewRenderer('inauthor-datalist'); + $sql = "select md.title,d.uuid,count(md.id) as c from dataorder d + left join metadata md on md.uuid=d.uuid + left join mdauthor a on a.uuid=d.uuid + where a.status=1 AND a.userid=? "; + if($ac == "searchdata") + { + $keywords = $this->_request->getParam('q'); + if(!empty($keywords)) + $this->view->q = $keywords; + $search=new SimpleSearch($keywords); + $where=$search->sql_expr(array("md.title","md.description")); + $sql.=' and '.$where; + } + $sql.=" GROUP BY md.title,d.uuid"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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; + } + + }//按数据显示 + + } // inauthorAction() 数据申请管理 + + + /* + * createOfflineCtBtn() 创建离线申请记录的操作按钮 + * + */ + function createOfflineCtBtn($uuid, $type="",$oid){ + $urlHref = 'href="javascript:;"'; + $baseStyle = "btn box-shadow"; + $selectedStyle = "disabled"; + + $confrimText = "同意"; + $confrimFunc = 'onclick="confirm(\''.$uuid.'\',\''.$oid.'\')"'; + + $objectionText = "反对"; + $objectionFunc = 'onclick="objection(\''.$uuid.'\',\''.$oid.'\')"'; + + $btns=''; + if(empty($type)) + { + $confrimBtn = "$confrimText"; + $objectionBtn = "$objectionText"; + $btns = $confrimBtn.$objectionBtn; + } + if($type=='c') + { + $confrimBtn = "$confrimText"; + $objectionBtn = "$objectionText"; + $btns = $confrimBtn.$objectionBtn; + } + if($type=='o') + { + $confrimBtn = "$confrimText"; + $objectionBtn = "$objectionText"; + $btns = $confrimBtn.$objectionBtn; + } + + return $btns; + + } //createOfflineCtBtn() + + + + /* + * acceptAction() 我的数据 + * + * param string $ac // list|search + * param string $keyword + * + * return view + */ + function acceptAction() + { + $ac = $this->_request->getParam("ac"); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + $u_email = $user->email; + } + + //列表 + if(empty($ac) || $ac=='list' || $ac=='search'){ + + $sql = "SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus FROM normalmetadata m + LEFT JOIN mdauthor a ON m.uuid=a.uuid + LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid + LEFT JOIN mdstatus mds ON m.uuid=mds.uuid + WHERE a.userid=? AND a.status>=0 "; + if ($ac=='search') + { + $key = trim($this->_request->getParam('q')); + $this->view->q = $key; + $search=new SimpleSearch($key); + $where=$search->sql_expr(array("m.title","m.description")); + $sql.=' and '.$where; + } + $sql.=" ORDER BY a.status DESC,a.id DESC"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $rows = $sth->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(5); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + + }//list + + //激活数据作者 + if($ac == "active") + { + $this->_helper->viewRenderer('accept-active'); + $vdcode = $this->_request->getParam('v'); + $this->view->v = $vdcode; + + try{ + $sql = "SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.id as userid,u.realname,u.email FROM mdauthor a + LEFT JOIN metadata md ON a.uuid=md.uuid + LEFT JOIN users u ON a.userid=u.id + WHERE a.activation=?"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($vdcode)); + $row = $sth->fetch(); + + if(empty($row['id'])) + { + $this->view->info='此激活码无效'; + }else{ + if(empty($row['ts_activated'])) + { + $sql = "UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=?"; + + $sth = $this->db->prepare($sql); + $ex = $sth->execute(array('now()',1,$vdcode)); + + if($ex) + { + include_once("EmailText.php"); + $this->author_first($row['uuid'],$row['userid']); + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"author-new",array( + 'user' => $row['realname'], + 'uuid' => $row['uuid'], + 'title'=> $row['title'], + 'email'=> $row['email'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + //获得元数据作者email + /* 不需要给这些人发通知邮件 + $info = $this->getEmail($uuid,1); + + $address = $info['addrs']; + foreach($address as $v) + { + $mail->addTo($v); + }*/ + $mail->addTo($row['email']); + $mail->addCc($this->view->config->service->email); //管理员 + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + $this->view->info = '激活成功
点击这里进入我的数据页面查看'; + }else + { + $this->view->info = "激活中遇到问题,请重试"; + } + }else + { + $this->view->info='此激活码已经失效'; + } + + } + + }catch(Exception $e){ + if($this->debug==0) + { + $this->view->info = "处理中遇到错误,请重新尝试"; + }else{ + $this->view->info = $e->getMessage(); + } + } + + }//激活数据作者 + + //拒绝激活 + if($ac == "lock") + { + $this->_helper->viewRenderer('accept-active'); + $vdcode = $this->_request->getParam('v'); + $this->view->v = $vdcode; + + try{ + $sql = "SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.realname,u.email FROM mdauthor a + LEFT JOIN metadata md ON a.uuid=md.uuid + LEFT JOIN users u ON a.userid=u.id + WHERE a.activation=?"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($vdcode)); + $row = $sth->fetch(); + + if(empty($row['id'])) + { + $this->view->info='此激活码无效'; + }else{ + if(empty($row['ts_activated'])) + { + $sql = "UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=?"; + + $sth = $this->db->prepare($sql); + $ex = $sth->execute(array('now()',-1,$vdcode)); + + if($ex) + { + include_once("EmailText.php"); + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"author-deny",array( + 'user' => $row['realname'], + 'uuid' => $row['uuid'], + 'title'=> $row['title'], + 'email'=> $row['email'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($row['email']); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + $this->view->info = '该申请已被拒绝,点击这里进入我的数据页面查看'; + }else + { + $this->view->info = "激活中遇到问题,请重试"; + } + }else + { + $this->view->info='此激活码已经失效'; + } + + } + + }catch(Exception $e){ + if($this->debug==0) + { + $this->view->info = "处理中遇到错误,请重新尝试"; + }else{ + $this->view->info = $e->getMessage(); + } + } + + }//否认激活 + + }//acceptAction() 我的数据 + + + /* + * + * getEmail() 获取数据所有者电子邮箱地址 + * + * param string $uuid //UUID + * param int $level //输出信息等级 + * 0 => 输出所有Email地址 + * 1 => 输出数据权限等级最高的Email地址 (def) + * + * return array() + */ + function getEmail($uuid,$level=1) + { + //需要定义角色,防止程序流程出错 + $addrs = array(); + $addrs['resourceProvider'] = array(); + $addrs['owner'] = array(); + $addrs['pointOfContact'] = array(); + $addrs['author'] = array(); + $addrs["publisher"] = array(); + + $sql = 'select r.uuid,p.email,md.title,r.role from normalmetadata md + LEFT JOIN role r ON md.uuid=r.uuid + left join responsible p on r.resid=p.id + WHERE r.uuid=? AND p.email IS NOT NULL AND p.email!=? + GROUP BY r.uuid,p.email,md.title,r.role'; + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,'')); + $rows = $sth->fetchAll(); + + $addrs['title'] = $rows[0]['title']; + + foreach($rows as $k=>$v) + { + //数据资源提供者resourceProvider + if($v['role']=='resourceProvider') + { + $addrs['resourceProvider'][]=$v['email']; + } + + //数据资源所有者owner + if($v['role']=='owner') + { + $addrs['owner'][]=$v['email']; + } + + //数据联系人pointOfContact + if($v['role']=='pointOfContact') + { + $addrs['pointOfContact'][]=$v['email']; + } + + //元数据作者author + if($v['role']== 'author' ) + { + $addrs['author'][] = $v['email']; + } + + if($v["role"] =="") + { + $addrs["publisher"][] = $v['email']; + } + } + + //输出所有email (多维数组) + /* + $addrs['resourceProvider'] + $addrs['owner'] + $addrs['pointOfContact'] + $addrs['author'] + */ + if($level == 0) + { + return $addrs; + } + + + //输出最高优先级的Email + //$addrs['addrs'] + if($level == 1) + { + //如果有 数据资源提供者 resourceProvider 就输出他的地址 以此类推 + if(count($addrs['resourceProvider'])>0) + { + $addrs['addrs'][] = $addrs['resourceProvider']; + return $addrs; + } + + if(count($addrs['owner'])>0) + { + $addrs['addrs'][] = $addrs['owner']; + return $addrs; + } + + if(count($addrs['pointOfContact'])>0) + { + $addrs['addrs'][] = $addrs['pointOfContact']; + return $addrs; + } + + if(count($addrs['author'])>0) + { + $addrs['addrs'][] = $addrs['author']; + return $addrs; + } + + if(count($addrs["publisher"])>0) + { + $addrs['addrs'][] = $addrs["publisher"]; + return $addrs; + } + } + + }//getEmail 获取数据作者email地址 + + + + /* + * applyAction() 申请成为元数据作者 + * + * param string $ac //动作 search|apply + * param string $q //搜索关键词 + * param string $uuid //数据的UUID + * + * return view|ajax|json + * + * 调试搜索结果: + * /author/apply?ac=apply&uuid=816ecd28-ba88-464b-a83a-341440f536ef + */ + function applyAction() + { + $ac = $this->_request->getParam('ac'); + + //搜索动作 + if($ac == "search") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + //要输出的Json对象 + //过程中如果没有处理,则不包含任何返回信息,由前台定义提示信息,如: + /* + $.ajax({ + 'type':"POST", + 'url':'/author/apply', + 'data':'ac=search&q='+$('#keyword').val(), + 'success':function(data){ + if (typeof(data)=='object') //如果服务器端的响应为Json对象 + { + if(typeof(data.error)!='undefined') //服务器端响应的错误消息 + { + alert(data.error); + }else{ //服务器端无错误消息则为成功的响应 + alert(data.length); + } + }else{ //服务器端响应了非JSON对象或者为空 + alert('无搜索结果'); + } + }, + 'beforeSend':function(){ + //请求发送前 + } + }); + + 错误消息的键名必须为error,不包含JS脚本,如: + $data['error'] = '服务器忙!'; + */ + $data = ""; + + //防止通过其它方式访问,先判断是否是登录用户,如果不是,抛出消息后强制用户退出 + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + }else{ + $data = array("error"=>"请先登录"); + $this ->getResponse() + ->setHeader('Content-Type', 'application/json') + ->appendBody(Zend_Json::encode($data)); + return true; + } + + + //数据处理代码 EOH<<<<<<<<<<<<<<<< + try{ + + $keyword = trim($this->_request->getParam('q')); + if (strlen(trim($keyword))<3) + $data = array('error'=>'搜索关键字过短'); + else if (!preg_match_all("/^[\x{4e00}-\x{9fa5}A-Za-z0-9\s_]+$/u",$keyword,$matchs)) + { + $data = array('error'=>'搜索关键字中只能包含汉字、英文、数字'); + } + else + { + //搜索标题和描述两个字段 + $sql = "SELECT m.uuid,m.title,m.description,a.status,a.userid FROM normalmetadata m + LEFT JOIN mdauthor a ON m.uuid=a.uuid + WHERE "; + $search=new SimpleSearch($keyword); + $where=$search->sql_expr(array("m.title","m.description")); + $sql.=$where; + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + if(is_array($rows) && count($rows)>0) + $data = $rows; + else + $data = ""; + } + + }catch(Exception $e){ + //如果上面的程序已经发送出提示,就不发送抛出的错误 + if(empty($data['error'])) + { + if($this->debug==0) + { + $data = array("error"=>"处理过程中遇到错误,请重新尝试"); + }else{ + $data = array("error"=>$e->getMessage()); + } + } + } + // >>>>>>>>>>> F + + //截获响应对象,并修改头部和内容 + //不管有没有数据存在,都将返回Json数据,前台有判断机制来分析数据 + + $this ->getResponse() + ->setHeader('Content-Type', 'application/json') + ->appendBody(Zend_Json::encode($data)); + }// search + + + /**************** + 申请动作 + ****************/ + if($ac == "apply") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = ""; + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + $u_email = $user->email; + } + + //处理部分<<<<<<<<<< + try{ + + $uuid = $this->_request->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)) + { + + //判断该用户是否已经申请过或者是否已经是该元数据作者 + $sql="SELECT id,status FROM mdauthor WHERE uuid=? AND userid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$u_id)); + $row = $sth->fetch(); + + //如果已经是元数据作者,从流程中直接退出程序 + if(!empty($row['id']) && $row['status']==1) + { + $data = array("error"=>"您目前已经是该数据作者,不需要再申请"); + } + + //如果已经遭到明确拒绝,则不允许用户再次申请 + if(!empty($row['id']) && $row['status']==-1) + { + $data = array("error"=>"您的申请已经遭到拒绝,不能再申请,有疑问请联系数据中心"); + } + + + //如果已经存在申请,但是没有激活的,返回激活信息 + if($row['status']==0){ + if(!empty($row['id']) && empty($m)) + { + $data = array( + "error"=>'您已经申请过了,如果长时间没有收到回应请联系数据中心', + "post"=>"activa", + "uid"=>$u_id, + "uemail"=>$u_email, + "uuid"=>$uuid, + ); + }//if + + else{ + + $info = $this->getEmail($uuid,1); + + $address = $info['addrs']; + + $mdtitle = $info['title']; + + //如果当前用户的email包含在元数据作者email列表中,则直接使其成为元数据作者 + if(in_array($u_email,$address)) + { + $sql = "INSERT INTO mdauthor (uuid,userid,activation,ts_activated,status) VALUES (?,?,?,?,?)"; + $sth = $this->db->prepare($sql); + $ex = $sth->execute(array($uuid,$u_id,'','now()',1)); + if($ex) + { + $data = array("error"=>"您的身份符合申请条件,已经自动成为该元数据作者"); + $this->author_first($uuid,$u_id); + include_once("EmailText.php"); + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"author-new",array( + 'user' => $user->realname, + 'uuid' => $uuid, + 'title'=> $mdtitle, + 'email'=> $u_email, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + + if($this->debug==0) + { + foreach ($address as $dist) + {$mail->addTo($dist);} //元数据作者 + $mail->addTo($u_email); + $mail->addCc($this->view->config->service->email); //管理员 + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + } + else + { + $data = array("error"=>"处理中出现错误,请重新尝试"); + } + } + + //如果不包含在当前元数据作者的email列表中 + //给数据拥有者发送邮件,使其决定是否同意新加入作者 + else + { + //生成激活码 + $ssid = session_id(); + $vdcode = md5($uuid.$ssid.$u_id.time()); + + //激活链接 + // /author/accept/?ac=active&vdcode=$vdcode + $sql = "INSERT INTO mdauthor (uuid,userid,activation) VALUES (?,?,?)"; + $sth = $this->db->prepare($sql); + $ex = $sth->execute(array($uuid,$u_id,$vdcode)); + + if($ex) + { + //给申请者发送邮件 + include_once("EmailText.php"); + @$mail=new WestdcMailer($this->view->config->smtp); + @$mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + @$mailtp=new EmailText($this->db,"author-apply",array( + 'user' => $user->username, + 'uuid' => $uuid, + 'email'=> $user->email, + //元数据标题 + 'title'=> $mdtitle, + )); + @$mail->setBodyText($mailtp->getBody()); + @$mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + @$mail->addTo($user->email); + }else{ + @$mail->addTo($this->debug_email); + } + + @$mail->send(); + + unset($mail); + unset($mailtp); + //给元数据作者以及管理员发送邮件 + @$mail=new WestdcMailer($this->view->config->smtp); + @$mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + @$mailtp=new EmailText($this->db,"author-apply-confirm",array( + 'user' => $user->username, + 'uuid' => $uuid, + 'email'=> $u_email, + 'title'=> $mdtitle, + 'link'=>"http://".$_SERVER['SERVER_NAME']."/data/$uuid", + + //验证码 + 'vdcode' => $vdcode, + + //激活链接 + 'active'=>"http://".$_SERVER['SERVER_NAME']."/author/accept/?ac=active&v=$vdcode", + + //不同意激活的链接 + 'lock'=>"http://".$_SERVER['SERVER_NAME']."/author/accept/?ac=lock&v=$vdcode", + )); + @$mail->setBodyText($mailtp->getBody()); + @$mail->setSubject($mailtp->getSubject()); + + if($this->debug==0) + { + $sql = "SELECT u.email FROM mdauthor a + LEFT JOIN users u ON u.id=a.userid + WHERE a.uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid)); + $mlist = $sth->fetchAll(); + + if(count($mlist)>0) + { + foreach($mlist as $v) + { + $mail->addTo($v['email']); + } + }//mdauthor中已经注册的用户 + + else{ + foreach ($address as $dist) + { + $mail->addTo($dist); + } + }//元数据作者 + $mail->addCc($this->view->config->service->email); //管理员 + }else{ + @$mail->addTo($this->debug_email); + } + + @$mail->send(); + + $data = array("error"=>"您的申请已收到,请耐心等待回应"); + + }else{ + $data = array("error"=>"服务器可能在忙,请重试。"); + }//激活码记录 + }//不是确认的元数据作者 + }//empty($row['id']) + }// status == 0 + + //调试输出结果 + //$data = array('addr'=>$address,'uemail'=>$u_email); + } + else + { + $data = array('error'=>'参数出错,请按照正确的访问方式申请'); + } + }catch(Exception $e){ + if(empty($data['error'])) + { + if($this->debug==0) + { + $data = array("error"=>"处理过程中遇到错误,请重新尝试"); + }else{ + $data = array("error"=>$e->getMessage()); + } + + } + } + + // >>>>>>>>>>>> + + $this ->getResponse() + ->setHeader('Content-Type', 'application/json') + ->appendBody(Zend_Json::encode($data)); + + }// ac = apply 申请处理 + + }//applyAction() 申请成为元数据作者 + + + + /* + * commentAction() 数据反馈 + * + * param string $ac 动作 + * param string $uuid 元数据UUID + * param int $page 页数 + * + * return view + */ + function commentAction() + { + $ac = $this->_request->getParam('ac'); + $uuid = $this->_getParam('uuid'); + $reply = $this->_getParam('reply'); + $replylist = $this->_getParam('replylist'); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + } + + if(empty($ac)|| $ac=='list') + { + $sql = "SELECT md.title,md.uuid,count(c.id) as c FROM comments c + LEFT JOIN metadata md ON md.uuid=c.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1 AND c.reply=0 + GROUP BY md.title,md.uuid + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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; + + } + + if($ac=="view") + { + + $uuid = $this->_request->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)) + { + $sql = "SELECT c.id,c.author,c.email,c.url,c.ts_created,c.content,m.title,c.uuid FROM comments c + LEFT JOIN mdauthor a ON a.uuid=c.uuid + left join metadata m on m.uuid=c.uuid + WHERE c.uuid=? AND a.userid=? AND a.status=1 AND c.reply=0 + ORDER BY ts_created DESC"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$u_id)); + $rows = $sth->fetchAll(); + @$this->view->mdtitle=$rows[0]['title']; + + $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('comment-list'); + } + + if($ac == "listall") + { + $sql = "SELECT md.title,c.author,c.email,c.url,c.ts_created,c.content FROM comments c + LEFT JOIN mdauthor a ON a.uuid=c.uuid + LEFT JOIN normalmetadata md ON md.uuid=c.uuid + WHERE a.userid=? AND a.status=1 AND c.reply=0 + ORDER BY ts_created DESC"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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('comment-listall'); + } + + 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; + } + + $sql = "SELECT md.title,c.id,c.author,c.email,c.url,c.ts_created,c.content FROM comments c + LEFT JOIN mdauthor a ON a.uuid=c.uuid + LEFT JOIN normalmetadata md ON md.uuid=c.uuid + WHERE a.userid=? AND a.status=1 AND c.reply=0 AND c.id=? + ORDER BY ts_created DESC"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id,$reply)); + $row = $sth->fetch(); + if(empty($row['id'])) + { + $data = array('error'=>"回复失败,您没有权限进行此操作"); + $this->jsonexit($data); + return true; + } + + $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) + { + $data = array('status'=>1,'msg'=>'回复成功!'); + $this->jsonexit($data); + return true; + }else{ + $data = array('error'=>"回复失败,请重试"); + $this->jsonexit($data); + return true; + } + 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; + } + }// commentAction() 数据反馈 + + + /* + * newsAction() 数据新闻 + * + * param string $ac + * + * + */ + function newsAction(){ + + $ac = $this->_request->getParam('ac'); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + } + + $News = new Archive($this->db); + $category = new ArchiveCategory($this->db); + + //新闻列表 + if(empty($ac) || $ac=="list") + { + $keyword = $this->_request->getParam('q'); + $uuid = $this->_request->getParam('uuid'); + + $wheresql = array(); + $join = ""; + + if(!empty($keyword)) + { + $this->view->q = $keyword; + $search = new SimpleSearch($keyword); + $wheresql[] = $search->sql_expr(array("arc.title","arc.description")); + } + + if(!empty($uuid) && 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)) + { + $wheresql[] = " ct.uuid='$uuid' "; + } + + $wheresql[] = " c.code='".$category->DataNewsCode."' "; + $wheresql[] = " ct.uuid IS NOT NULL "; + $wheresql[] = " arc.userid=$u_id"; + + if(count($wheresql)>0) + { + $wheresql = " WHERE ".join(" AND ",$wheresql); + } + + $sql = "SELECT arc.id,arc.title,arc.description,arc.ts_published + ,c.id as cid,u.realname + ,count(arc.id) as datacount + FROM ".$News->tbl_archives." arc + LEFT JOIN ".$News->tbl_catalog." ct ON arc.id=ct.aid + LEFT JOIN ".$News->tbl_categorys." c ON ct.cid=c.id + LEFT JOIN users u ON arc.userid=u.id + $wheresql + GROUP BY arc.id,c.id,u.realname + ORDER BY arc.ts_published DESC"; + + + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + foreach($rows as $k=>$v) + { + $arcinfo = $News->getArchiveUrlByCid($v['id'],$v['cid']); + $rows[$k]['url'] = $arcinfo['archive_url']; + } + + $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; + + } + + //新闻发布 + if($ac == "add") + { + $this->_helper->viewRenderer('news-add'); + + $sql = "SELECT md.title,md.uuid FROM metadata md + LEFT JOIN mdauthor a ON a.uuid = md.uuid + WHERE a.userid=? AND a.status=1 + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $rows = $sth->fetchAll(); + + $this->view->md = $rows; + }// $ac == add + + //新闻编辑 + if($ac == "edit") + { + $this->_helper->viewRenderer('news-edit'); + + $aid = (int)$this->_request->getParam('aid'); + + if(empty($aid) || !is_numeric($aid)) + { + $this->_redirect('/error/error'); + } + + $sql = "SELECT arc.* FROM ".$News->tbl_archives." arc + WHERE id=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($aid)); + $row = $sth->fetch(); + + $keywords = $News->GetTags($aid); + $row['keywords'] = join(",",$keywords); + + $this->view->info = $row; + + $sql = "SELECT md.title,md.uuid FROM metadata md + LEFT JOIN mdauthor a ON a.uuid = md.uuid + WHERE a.userid=? AND a.status=1 + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $rows = $sth->fetchAll(); + + $this->view->md = $rows; + + $sql = "SELECT md.uuid,md.title FROM ar_catalog ct + LEFT JOIN metadata md ON ct.uuid=md.uuid + WHERE ct.aid=$aid"; + $sth = $this->db->query($sql); + $rows = $sth->fetchAll(); + + $this->view->thismd = $rows; + + }//$ac == "edit" + + //新闻发布的ajax动作 + if($ac =="addnews") + { + try{ + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = array(); + + $aid = $this->_request->getParam('aid'); + $data['title'] = trim($this->_request->getParam('title')); + $data['keyword'] = trim($this->_request->getParam('keyword')); + $data['body'] = trim($this->_request->getParam('body')); + $uuid = $this->_request->getParam('uuid'); + + //对参数进行预处理 + foreach($data as $k=>$v) + { + $data[$k]=preg_replace("#]*)>(.*)#i","",$v); + $data[$k]=preg_replace("#]*)>(.*)#i","",$v); + $data[$k]=preg_replace("#]*)>(.*)#i","",$v); + $data[$k]=str_replace("\"","“",$v); + $data[$k]=str_replace("\'","‘",$v); + } + + $msg = array(); + + // 合法性判断 + if(mb_strlen($data['title'],"utf-8")<3) + { + $msg['status'] = 0; + $msg['error'] = '标题太短,请重新填写'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + if(mb_strlen($data['title'],"utf-8")>60) + { + $msg['status'] = 0; + $msg['error'] = '标题太长,请重新填写'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + if(empty($uuid)) + { + $msg['status'] = 0; + $msg['error'] = '请选择对应数据'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + if(mb_strlen($data['keyword'],"utf-8")<4) + { + $msg['status'] = 0; + $msg['error'] = '关键词太短,请重新填写'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + if(mb_strlen($data['keyword'],"utf-8")>40) + { + $msg['status'] = 0; + $msg['error'] = '关键词太长,请重新填写'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + if(mb_strlen($data['body'],"utf-8")<40) + { + $msg['status'] = 0; + $msg['error'] = '新闻内容太短,请重新填写'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + if(is_array($uuid)) + { + if(count($uuid)<1) + { + $msg['status'] = 0; + $msg['error'] = '参数错误,请重试'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + foreach($uuid as $v) + { + 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}$/",$v)) + { + $msg['status'] = 0; + $msg['error'] = '参数错误,请重试'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + } + } + + else 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)) + { + $msg['status'] = 0; + $msg['error'] = '参数错误,请重试'; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + //获得描述 + //删除段落及html标记 + $data['description'] = mb_substr(preg_replace(array("/<(.*)>|<(.*) \/>/i","/\s/i"),array(""," "),$data['body']),0,450,"UTF-8"); + + //默认填充数据 + $data['source'] = "西部数据中心"; + $data['userid'] = $u_id; + $keyword = str_replace(",",",",$data['keyword']); + $data['ts_published'] = date("Y-m-d H:i:s",time()); + $data['is_pub'] = true; + $data['image'] = ""; + + unset($data['keyword']); + + $dataNewsCategory = $category->GetOne('datanews'); + $dataNewsCategoryID = $dataNewsCategory['id']; + + //新闻添加 + if(empty($aid)) + { + $newAid = $News->addArchive($data,$dataNewsCategoryID,$keyword,$uuid); + //添加成功 + if($newAid>0) + { + $msg['status'] = 1; + $msg['outstring'] = "新闻添加成功"; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + //添加失败 + }else{ + $msg['status'] = 0; + $msg['error'] = "新闻添加失败,请重试"; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + }//新闻添加 end --> + + //新闻修改 + else + { + if($u_id != $News->getArchiveField($aid,"userid")) + { + $msg['status'] = 0; + $msg['outstring'] = "新闻编辑失败,您没有权限"; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + + $updated = $News->updateArchive($aid,$data,$dataNewsCategoryID,$keyword,$uuid); + if($updated) + { + $msg['status'] = 1; + $msg['outstring'] = "新闻编辑成功"; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + }else{ + $msg['status'] = 0; + $msg['outstring'] = "新闻编辑失败,请重试"; + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + }//新闻修改 end --> + + }catch(Exception $e){ + if($this->debug==0) + { + $msg['status'] = 0; + if(empty($aid)) + {$msg['error'] = "新闻添加失败,请重试";} + else + {$msg['error'] = "新闻编辑失败,请重试";} + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + }else{ + $msg['status'] = 0; + $msg['error'] = "新闻添加/编辑失败,请重试:".$e->getMessage(); + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); + return true; + } + }//catch end + }//$ac = 'newsadd' endif; + + if($ac == "del") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $aid = $this->_getParam('aid'); + if(!is_numeric($aid)) + { + $this->jsonexit(array("error"=>"参数错误")); + return true; + } + + $News = new Archive($this->db); + + if($u_id != $News->getArchiveField($aid,"userid")) + { + $this->jsonexit(array("error"=>"您没有权限")); + return true; + } + + if($News->DeleteArchives($aid)) + { + $this->jsonexit(array("deleted"=>$aid)); + return true; + }else{ + $this->jsonexit(array("error"=>"删除失败",'aid'=>$aid)); + return true; + } + } + }//newsAction() 数据新闻 + + function viewauthorsAction(){ + + $this->_helper->viewRenderer('view-authors'); + + $uuid = $this->_request->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)) + { + $sql = "SELECT u.realname,u.unit,u.email,m.title,m.description FROM normalmetadata m + LEFT JOIN mdauthor a ON m.uuid=a.uuid + LEFT JOIN users u ON u.id=a.userid + WHERE status>=0 AND m.uuid=? AND a.status=1 + ORDER BY status DESC,a.id DESC"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid)); + $rows = $sth->fetchAll(PDO::FETCH_BOTH); + + include_once("helper/view.php"); + view::addPaginator($rows,$this->view,$this->_request); + $this->view->datas = $rows; + }else{ + $this->view->error = "参数有误"; + } + } + + /* + * versionAction() 版本控制 + * + * + */ + function versionAction() + { + $ac = $this->_request->getParam('ac'); + $uuid = $this->_request->getParam('uuid'); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + } + + //查看单条数据的所有版本 + if (!empty($uuid) && empty($ac)) + { + //view the versions of the data + $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v + LEFT JOIN metadata md ON md.uuid=v.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + left join users u on v.userid=u.id + WHERE md.title IS NOT NULL AND a.userid=? and v.uuid=? AND a.status=1 + order by v.ts_created desc + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id,$uuid)); + $rows = $sth->fetchAll(); + @$this->view->mdtitle=$rows[0]['title']; + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(15); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + } + + //查看所有版本列表 + else if((empty($ac) && empty($uuid))|| $ac=='list') + { + $sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v + LEFT JOIN metadata md ON md.uuid=v.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + left join users u on v.userid=u.id + WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1 + order by v.ts_created desc + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $rows = $sth->fetchAll(); + + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(15); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + } + + //按数据浏览 + else if($ac=="bydata") + { + $keywords = $this->_request->getParam('q'); + if(!empty($keywords)) + $this->view->q = $keywords; + $sql = "SELECT md.title,md.uuid,count(v.id) as c FROM mdversion v + LEFT JOIN metadata md ON md.uuid=v.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; + if(!empty($keywords)) + { + $search=new SimpleSearch($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(array($u_id)); + $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 v + USING mdauthor a + WHERE v.uuid=a.uuid and v.id=? AND a.userid=? AND a.status=1"; + $sth = $this->db->prepare($sql); + $ex = $sth -> execute(array($id,$u_id)); + + if($ex) + { + $data = array("deleted"=>$id,"error"=>$this->alertbox('ok','删除成功')); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>$this->alertbox('error','删除失败,请确认权限后重试')); + $this->jsonexit($data); + return true; + } + }catch(Exception $e) { + $msg = "删除失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$this->alertbox('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 + LEFT JOIN mdauthor a ON a.uuid=v.uuid + WHERE v.id=? AND a.userid=? AND a.status=1"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($id,$u_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->alertbox('warning','无须恢复,元数据相同')); + $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->alertbox('ok','恢复成功')); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>$this->alertbox('error','恢复失败,请确认权限后重试')); + $this->jsonexit($data); + return true; + } + }catch(Exception $e) { + $msg = "恢复失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$this->alertbox('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->alertbox('warning','请输入变更信息')); + $this->jsonexit($data); + return true; + } + + // 1. 权限认定 + $sql="select a.* from mdauthor a left join mdversion v on a.uuid=v.uuid + where a.status=1 and a.userid=? and v.id=?"; + $sth=$this->db->prepare($sql); + $sth->execute(array($u_id,$id)); + $row=$sth->fetch(); + if (empty($row)) + { + $data = array("error"=>'无权限修改数据'); + $this->jsonexit($data); + return true; + } + // 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(); + + //update search document + $search=new Search(); + //create search view in xunsearch + //$sql="select m.uuid,m.title,m.description,x.data,array_to_string(ARRAY( SELECT keyword.keyword FROM keyword WHERE keyword.id = m.id), ', '::text) AS keyword from normalmetadata m left join xml x on m.id=x.id where m.uuid=?"; + $sql="select * from xunsearch where uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($row['uuid'])); + $data = $sth->fetch(); + $search->update($data); + + 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->loadXML($row['xml']); + if ($iso->validate()) + { + $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); + $this->jsonexit($data); + return true; + } + @$iso->saveDB($this->db); + //进入评审库 + $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->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!')); + $this->jsonexit($data); + return true; + } else { //说明是已发布的数据且数据不存在评审信息 + //同步元数据 + $iso=new ISO19115(); + @$iso->loadXML($row['xml']); + if ($iso->validate()) + { + $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); + $this->jsonexit($data); + return true; + } + @$iso->saveDB($this->db); + + //移除中间版本 + $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->alertbox('ok','该版本已经成功发布!')); + $this->jsonexit($data); + return true; + } + } + else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收 + { + //同步元数据 + $iso=new ISO19115(); + @$iso->loadXML($row['xml']); + if ($iso->validate()) + { + $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); + $this->jsonexit($data); + return true; + } + @$iso->saveDB($this->db); + + //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->alertbox('ok','该版本已经成功提交并同步,请等待数据中心进一步处理!')); + $this->jsonexit($data); + return true; + } + else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息 + { + //同步元数据 + $iso=new ISO19115(); + @$iso->loadXML($row['xml']); + //email to admin + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"version-commit-admin",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + 'changelog'=>$changelog, + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + $mail->send(); + + unset($mail); + unset($mailtp); + //email to author + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"version-commit-author",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + if($this->debug==0) + { + $mail->addTo($user->email); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + //email to experts + $sql="select u.username,u.email from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($row['uuid'])); + $experts = $sth->fetchAll(); + + unset($mail); + unset($mailtp); + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mailtp=new EmailText($this->db,"version-commit-expert",array( + 'user' => $user->username, + 'uuid' => $row['uuid'], + 'email'=> $user->email, + //元数据标题 + 'title'=> $row['title'], + )); + $mail->setBodyText($mailtp->getBody()); + $mail->setSubject($mailtp->getSubject()); + $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/data/doc/review/1/uuid/'.$uuid); + $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc'); + $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$uuid); + $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.pdf'); + if($this->debug==0) + { + foreach ($experts as $expert) $mail->addTo($expert['email']); + $mail->addCc($this->view->config->service->email); + }else{ + $mail->addTo($this->debug_email); + } + @$mail->send(); + + $data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!')); + $this->jsonexit($data); + return true; + } + else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态 + { + //同步元数据 + $iso=new ISO19115(); + @$iso->loadXML($row['xml']); + if ($iso->validate()) + { + $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); + $this->jsonexit($data); + return true; + } + @$iso->saveDB($this->db); + + //移除中间版本 + $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->alertbox('ok','该版本已经成功发布!')); + $this->jsonexit($data); + return true; + } + + }catch(Exception $e) { + $msg = "提交失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$this->alertbox('error',$msg)); + $this->jsonexit($data); + return true; + } + }//发布到评审 + + //与前一个版本对比 + else if($ac == "diff") + { + $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 mdauthor a ON a.uuid=v.uuid + LEFT JOIN metadata md ON v.uuid=md.uuid + WHERE v.id=? AND a.userid=? AND a.status=1"; + $sth = $this->db->prepare($sql); + $sth -> execute(array($id,$u_id)); + + $row = $sth->fetch(); + + $sql = "SELECT v.* FROM mdversion v + WHERE v.uuid=? AND v.id<=? + ORDER BY v.ts_created DESC + LIMIT ?"; + $sth = $this->db->prepare($sql); + $sth -> execute(array($row['uuid'],$id,2)); + + $rows = $sth->fetchAll(); + + if(count($rows)<2) + { + $this->view->error = "对比失败:之前没有版本可以对比"; + return true; + } + + $this->view->info = $row; + $this->view->data = $rows; + + } + + + }// versionAction() 数据版本管理 + + //新建元数据 + 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 FROM geonetworkmetadata gn + WHERE gn.uuid not in (select uuid from metadata) and gn.owner=? + order by gn.id desc + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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 SimpleSearch($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 SimpleSearch($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=="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->alertbox('warning','请输入变更信息')); + $this->jsonexit($data); + return true; + } + + // 1. 权限认定:当前用户必须和其owner相同 + // 数据应当没有评审状态,没有作者信息 + $sql="select gn.id from geonetworkmetadata gn + left join mdstatus s on gn.uuid=s.uuid + left join mdauthor a on s.uuid=a.uuid + where s.id is not null and a.id is not null and gn.id=?"; + $sth=$this->db->prepare($sql); + $sth->execute(array($id)); + $row=$sth->fetch(); + if (!empty($row)) + { + $data = array("error"=>'错误的入口'); + $this->jsonexit($data); + return true; + } + + $sql="select uuid,data from metadata where id=? and owner=?"; + $sth=$this->wdb->prepare($sql); + $sth->execute(array($id,$u_id)); + $row=$sth->fetch(); + if (empty($row)) + { + $data = array("error"=>'无权限修改数据'); + $this->jsonexit($data); + return true; + } + //首先检查元数据错误 + $iso=new ISO19115(); + @$iso->loadXML($row['data']); + if ($iso->validate()) + { + $data=array("error"=>"元数据导入过程中发现错误。
".implode("
",$iso->error)); + $this->jsonexit($data); + return true; + } + + // 保存数据作者信息 + $sql="insert into mdauthor (uuid,userid,ts_activated,status) values(?,?,now(),1)"; + $this->db->query($sql,array($row['uuid'],$u_id)); + + // 2. 保存变化记录 save changelog & userid for the latest version + $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid=? order by ts_created desc limit 1)"; + $this->db->query($sql,array($changelog,$u_id,$row['uuid'])); + file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$row['uuid']."&filelist=1"); + // 3. 保存数据评审状态 + //导入元数据 + @$iso->saveDB($this->db); + //进入评审库 + $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(); + + 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->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!')); + $this->jsonexit($data); + return true; + }catch(Exception $e) { + $msg = "提交失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$this->alertbox('error',$msg)); + $this->jsonexit($data); + return true; + } + } + //FTP + else if($ac == "ftp") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_getParam('uuid'); + + $this->view->uuid = $uuid; + + if(empty($uuid) || !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'=>"参数错误" + ); + $this->jsonexit($data); + return true; + } + //安全检查: uuid必须是当前用户且为新建数据 + $sql="select * from geonetworkmetadata where uuid=? and uuid not in (select uuid from metadata) and owner=?"; + $sth=$this->db->prepare($sql); + $sth->execute(array($uuid,$u_id)); + $row=$sth->fetch(); + if (empty($row)) + { + $data = array( + 'error'=>"参数错误" + ); + $this->jsonexit($data); + return true; + } + + //ftp 用户名 + $uname = 'westdc'.$u_id.'upload'; + + //ftp路径 + $homedir = "/disk1/WestDC/upload/".$uuid."/"; + + $sql = "SELECT * FROM proftpusers WHERE userid='$uname' ORDER BY pkid DESC"; + $sth = $this->db->prepare($sql); + $sth->execute(); + $row = $sth->fetch(); + + //create directory for upload + //server is not localhost, so we need a trick + //$old=umask(0); + //@mkdir($homedir,0777); + //umask($old); + $page=file_get_contents('http://ftp1.westgis.ac.cn/proftp_upload.php?uuid='.$uuid); + if (!empty($page)) die($page);//there are errors in visit ftp page + + + if(!empty($row['pkid'])) + { + if(preg_match("/.*".$uuid.".*/",$row['homedir'])) + { + $data = array( + 'statu'=>1, + 'user'=>$row['userid'], + 'passwd'=>$row['passwd'] + ); + + $this->jsonexit($data); + return true; + + }else{ + $uid = 109; + $gid = 1002; + + $passwd = $this->genRandomString(16); + //$sql = "UPDATE proftpusers SET passwd=?,uid=?,gid=?,homedir=? WHERE userid=?"; + //$sth = $this->db->prepare($sql); + //$rs = $sth->execute(array($passwd,$uid,$gid,$homedir,$uname)); + $sql="update proftpusers SET passwd='".$passwd."',uid=".$uid.",gid=".$gid.",homedir='".$homedir."' WHERE userid='".$uname."'"; + $rs=$this->db->query($sql); + if($rs) + { + $data = array( + 'statu'=>1, + 'user'=>$uname, + 'passwd'=>$passwd + ); + $this->jsonexit($data); + return true; + }else{ + $data = array( + 'error'=>"FTP信息更新失败,请重试" + ); + $this->jsonexit($data); + return true; + } + } + } + + else{ + $uid = 109; + $gid = 1002; + $passwd = $this->genRandomString(16); + + //$sql = "INSERT INTO proftpusers (userid,passwd,uid,gid,homedir) VALUES (?,?,?,?,?)"; + //$sth = $this->db->prepare($sql); + //$rs = $sth->execute(array($uname,$passwd,$uid,$gid,$homedir)); + $sql="insert into proftpusers (userid,passwd,uid,gid,homedir) values('".$uname."','".$passwd."',109,1002,'".$homedir."')"; + $rs=$this->db->query($sql); + if($rs) + { + $data = array( + 'statu'=>1, + 'user'=>$uname, + 'passwd'=>$passwd + ); + $this->jsonexit($data); + return true; + }else{ + $data = array( + 'error'=>"FTP信息更新失败,请重试" + ); + $this->jsonexit($data); + return true; + } + }//end if + + }//ftp + } + //新建元数据 + + //文献管理 + function literatureAction() + { + $ac = $this->_request->getParam('ac'); + $uuid = $this->_request->getParam('uuid'); + $id = $this->_request->getParam('id'); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + } + + include_once("helper/view.php"); + include_once("data/Author.php"); + $author = new Author($this->db); + $author->Literature = new Literature($this->db); + + //查看单条数据的所有文献 + if (!empty($uuid) && empty($ac)) + { + $rows = $author->Literature->byuuid($uuid); + @$this->view->mdtitle=$rows[0]['title']; + view::addPaginator($rows,$this->view,$this->_request); + $this->_helper->viewRenderer('literature-viewdata'); + } + + //编辑单条文献 + if($ac == "edit") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $id = $this->_getParam('id'); + $content = $this->_getParam('content'); + + if(empty($id)) + { + $this->jsonexit(array('error'=>'参数错误')); + return true; + } + + if(empty($content)) + { + $this->jsonexit(array('error'=>'请输入内容')); + return true; + } + + $s = $author->Literature->edit($id,$content); + if($s !== true) + { + $this->jsonexit(array('error'=>'出现错误')); + return true; + }else{ + $this->jsonexit(array('success'=>'修改成功!')); + return true; + } + + } + + //修改排序 + if($ac == "order") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $id = $this->_getParam('id'); + $order = (int)$this->_getParam('order'); + + if(empty($id)) + { + $this->jsonexit(array('error'=>'参数错误')); + return true; + } + + if(empty($order)) + { + $this->jsonexit(array('error'=>'请输入排序数字,除0以外')); + return true; + } + + $s = $author->Literature->order($id,$order); + if($s !== true) + { + $this->jsonexit(array('error'=>'出现错误')); + return true; + }else{ + $this->jsonexit(array('success'=>'修改成功!')); + return true; + } + + } + + //查看单条文献的所有数据 + if (!empty($id) && empty($ac)) + { + $sql = "SELECT md.title,md.uuid,r.id,r.reference,r.link,(a.userid-?) as isauthor FROM mdref mr + LEFT JOIN metadata md ON md.uuid=mr.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + left join reference r on mr.refid=r.id + WHERE md.title IS NOT NULL AND mr.refid=? AND a.status=1 + order by md.ts_created desc + "; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id,$id)); + $rows = $sth->fetchAll(); + @$this->view->mdtitle=$rows[0]['reference']; + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage(15); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml'); + $this->view->paginator=$paginator; + $this->_helper->viewRenderer('literature-viewliter'); + } + + //查看所有文献列表 + else if((empty($ac) && empty($uuid)) && empty($id)) + { + $keywords = $this->_request->getParam('q'); + $sql = "SELECT md.title,md.uuid,r.reference,r.id,mr.id as mrid FROM mdref mr + LEFT JOIN metadata md ON md.uuid=mr.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + left join reference r on mr.refid=r.id + WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; + if(!empty($keywords)) + $this->view->q = $keywords; + if(!empty($keywords)) + { + $search=new SimpleSearch($keywords); + $where=$search->sql_expr(array("r.reference","md.title","md.description")); + $sql.=' and '.$where; + } + $sql.=" order by md.ts_created desc"; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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=="byliter") + { + $keywords = $this->_request->getParam('q'); + if(!empty($keywords)) + $this->view->q = $keywords; + $sql = "SELECT count(md.uuid) as c,r.reference,r.id FROM reference r + left join mdref mr on r.id=mr.refid + LEFT JOIN metadata md ON md.uuid=mr.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + + WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1"; + if(!empty($keywords)) + { + $search=new SimpleSearch($keywords); + $where=$search->sql_expr(array("r.reference")); + $sql.=' and '.$where; + } + $sql.=" group by r.reference,r.id"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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('literature-byliter'); + } + + //按数据浏览 + else if($ac=="bydata") + { + $keywords = $this->_request->getParam('q'); + if(!empty($keywords)) + { + $lit = $author->Literature->bydata($keywords); + $this->view->q = $keywords; + }else{ + $lit = $author->Literature->bydata(); + } + + view::addPaginator($lit,$this->view,$this->_request); + $this->_helper->viewRenderer('literature-bydata'); + } + + //添加文献信息 + else if($ac == "add") + { + $submit = $this->_request->getParam('submit'); + if(!empty($submit)) + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = ""; + try{ + $uuid = $this->_request->getParam('uuid'); + $ref=$this->_request->getParam('ref'); + $reftype=$this->_request->getParam('reftype'); + $url = $this->_request->getParam('url'); + if(empty($uuid) || empty($ref) || !is_numeric($reftype)) + { + $data = array("error"=>"参数错误"); + $this->jsonexit($data); + return true; + } + + $sql="select * from mdauthor where userid=? and uuid=? and status=1"; + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id,$uuid)); + $row = $sth->fetch(); + if (empty($row)) + { + $data = array("error"=>$this->alertbox('warning','您不是该数据作者,无法添加对应文献信息。')); + $this->jsonexit($data); + return true; + } + + $sql="select id from reference where reference=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($ref)); + $row = $sth->fetch(); + if (!$row) + { + $sql="insert into reference (reference,link) values(?,?)"; + $sth = $this->db->prepare($sql); + $sth->execute(array(trim($ref),$url)); + $sql="select id from reference where reference=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array(trim($ref))); + $row = $sth->fetch(); + } + $sql="insert into mdref (uuid,refid,reftype) values(?,?,?)"; + $sth = $this->db->prepare($sql); + $ex=$sth->execute(array($uuid,$row['id'],$reftype)); + + if($ex) + { + $data = array("commited"=>1,"error"=>$this->alertbox('ok','成功添加文献!')); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>$this->alertbox('error','提交失败,请确认权限后重试')); + $this->jsonexit($data); + return true; + } + }catch(Exception $e) { + $msg = "提交失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$this->alertbox('error',$msg)); + $this->jsonexit($data); + return true; + } + }else{ + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer('literature-add'); + $this->view->uuid = $this->_request->getParam('uuid'); + } + }//添加文献 + + //删除某个文献 + else if($ac=="delete") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $data = ""; + + $id = $this->_request->getParam('id'); + $uuid = $this->_request->getParam('uuid'); + if(empty($uuid) || !is_numeric($id)) + { + $data = array("error"=>"参数错误"); + $this->jsonexit($data); + return true; + } + try{ + $sql = "DELETE FROM mdref r + USING mdauthor a + WHERE r.uuid=a.uuid and r.refid=? and r.uuid=? AND a.userid=? AND a.status=1"; + $sth = $this->db->prepare($sql); + $ex = $sth -> execute(array($id,$uuid,$u_id)); + + if($ex) + { + $data = array("deleted"=>$id.$uuid,"error"=>$this->alertbox('ok','删除成功')); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>$this->alertbox('error','删除失败,请确认权限后重试')); + $this->jsonexit($data); + return true; + } + }catch(Exception $e) { + $msg = "删除失败,请确认权限后重试"; + if($this->debug>0) + {$msg .= $e->getMessage();} + $data = array("error"=>$this->alertbox('error',$msg)); + $this->jsonexit($data); + return true; + } + } + + //文献附件上传 + else if($ac=='upload') + { + + $this->_helper->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_getParam('uuid'); + + try{ + + $files=new files(); + $msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'literature'); + + if(empty($msg['error'])) + { + $msg['error']=""; + $filename = $msg['db_path']; + $filesize = $msg['file_size']; + $filedesc = $this->_request->getParam('filedesc'); + $filetype = $msg['file_type']; + $realname = $msg['realname']; + + + $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$u_id','$filesize','$realname') RETURNING id"; + $sth = $this->db->prepare($sql); + $sth->execute(); + $att = $sth->fetch(PDO::FETCH_ASSOC); + $msg['attid'] = $attid = $att['id']; + + $msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]
'; + echo Zend_Json::encode($msg); + exit(); + + + + }else{ + $msg['error'] = '附件上传失败:'.$msg['error']; + @unlink($filename); + echo Zend_Json::encode($msg); + exit(); + } + + }catch(Exception $e){ + $msg['error'] = "错误:".$e->getMessage(); + echo Zend_Json::encode($msg); + exit(); + } + }//文件上传 + + }//文献管理 + + //文档管理 + function documentAction(){ + + $ac = $this->_request->getParam('ac'); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $u_id = $user->id; + } + + if(empty($ac) || $ac == 'list' || $ac=='search') + { + + $wheresql = ""; + + $keyword = $this->_request->getParam('q'); + + if($ac=='search' && !empty($keyword)) + { + $this->view->q = $keyword; + $search = new SimpleSearch($keyword); + $wheresql = $search->sql_expr(array("md.title")); + } + if(!empty($wheresql)) + { + $wheresql = " AND ".$wheresql; + } + + + $sql = "select count(att.id) as aid,md.title,md.uuid from metadata md + LEFT JOIN mdauthor a ON a.uuid=md.uuid + LEFT JOIN mdattach att ON att.uuid=md.uuid + WHERE a.status>=1 AND a.userid=? $wheresql + GROUP BY md.title,md.uuid"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($u_id)); + $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; + } + + if($ac=='view') + { + $uuid = $this->_request->getParam('uuid'); + + if(empty($uuid) || !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)) + { + $this->view->error = "参数有误!"; + return true; + } + + $sql = "SELECT title FROM metadata WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid)); + $row = $sth->fetch(); + + $this->view->title = $row['title']; + + $sql = "SELECT att.*,md.title,md.uuid FROM mdattach mda + LEFT JOIN attachments att ON mda.id=att.id + LEFT JOIN metadata md ON mda.uuid=md.uuid + LEFT JOIN users u ON att.userid=u.id + WHERE md.uuid=? + "; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid)); + $rows = $sth->fetchAll(); + + $this->view->info=$rows; + + $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('document-view'); + } + + if($ac == 'del') + { + + $this->_helper->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + (int)$id = $this->_request->getParam('id'); + $uuid = $this->_request->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)) + { + exit(); + } + + $info = $this->getFileinfo($id); + $filepath = $dataFilePath.$info['filename']; + try{ + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $userid = $user->id; + $sql_mdattach = "delete from mdattach where uuid='$uuid' and id='$id'"; + $sql = "delete from attachments where id='$id' and userid='$userid'"; + if($this->db->exec($sql_mdattach)>0 && $this->db->exec($sql)>0) + { + @unlink($filepath); + echo "ok"; + } + } + + }catch(Exception $e){} + //不输出任何错误 + + }//删除 + + if($ac=='upload') + { + $submit = $this->_request->getParam('submit'); + if(empty($submit)) + { + $uuid = $this->_request->getParam('uuid'); + $this->view->uuid=$uuid; + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer('document-upload'); + return true; + } + else + { + $this->_helper->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_getParam('uuid'); + + try{ + + $files=new files(); + $msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'document'); + + if(empty($msg['error'])) + { + $msg['error']=""; + $filename = $msg['db_path']; + $filesize = $msg['file_size']; + $filedesc = $this->_request->getParam('filedesc'); + $filetype = $msg['file_type']; + $realname = $msg['realname']; + + + $sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$u_id','$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($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(); + } + } + }//文件上传 + + if($ac == 'download') + { + (int)$id = $this->_request->getParam('id'); + + $sql = "select * from attachments where id='$id'"; + + $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="'.$row['realname'].'"') + ->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); + }//文件下载 + + }//文档管理 + + /* + * delegateAction() 委托 + * + * + */ + public function delegateAction(){ + + $ac = $this->_request->getParam('ac'); + $uuid = $this->_request->getParam('uuid'); + + if($ac == '' && !empty($uuid)) + { + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + 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)) + { + $this->view->info = "参数错误"; + return true; + } + + $sql = "SELECT * FROM metadata WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + + $this->view->metadata = $row; + + //确认一下用户有权限,如果直接使用update语句无法得到已更改过的状态 + //只要是认证后的数据作者,都可以修改数据的委托状态 + $sql = "SELECT * FROM mdstatus + WHERE uuid=? AND userid in (select userid from mdauthor where status=1 and uuid=?) AND status=?"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$uuid,6)); + $mds = $sth->fetch(); + + if(!empty($mds['id'])) + { + $sql = "UPDATE mdstatus SET status=7,ts_changed='now()',userid=$uid WHERE uuid='$uuid'"; + if($this->db->exec($sql)) + { + $this->view->info = "委托成功!"; + return true; + } + else + { + $this->view->info = "委托失败!"; + return true; + } + }else{ + $this->view->info = "该数据无法委托,请确定数据状态已经可以进行委托,或数据尚未进行委托"; + } + } + + if($ac == 'cancel') + { + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + 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)) + { + $this->view->info = "参数错误"; + return true; + } + + $sql = "SELECT * FROM metadata WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + + $this->view->metadata = $row; + + $sql = "SELECT * FROM mdstatus + WHERE uuid=? AND userid in (select userid from mdauthor where status=1 and uuid=?) AND status=?"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$uuid,7)); + $mds = $sth->fetch(); + + if(!empty($mds['id'])) + { + $sql = "UPDATE mdstatus SET status=6,ts_changed='now()',userid=$uid WHERE uuid='$uuid'"; + if($this->db->exec($sql)) + { + $this->view->info = "取消委托成功!"; + return true; + } + else + { + $this->view->info = "取消委托失败!"; + return true; + } + }else{ + $this->view->info = "操作失败!该数据尚未进行委托"; + } + + + } + + + }//委托 + + /* + * sendmailAction() 邮件通知 + * + * Param uuid $uuid //元数据UUID + * + * return Ajax-response + * + * 传入元数据UUID,判断是否为当前用户的数据,如果是,即可向已经下载过该数据的所有用户发送电子邮件 + */ + public function sendmailAction() + { + $uuid = $this->_getParam('uuid'); + $ac = $this->_getParam('ac'); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + if(empty($uuid) || empty($uid)) + { + $this->view->error = "参数错误"; + return true; + } + + $sql = "SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus,m.uuid FROM normalmetadata m + LEFT JOIN mdauthor a ON m.uuid=a.uuid + LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid + LEFT JOIN mdstatus mds ON m.uuid=mds.uuid + WHERE a.userid=? AND a.status>=0 AND m.uuid=?"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uid,$uuid)); + $metadata = $sth->fetch(); + + if(empty($metadata['uuid'])) + { + $this->view->error = "数据不存在或者您可能没有该数据的管理权限"; + return true; + } + + $this->view->metadata = $metadata; + + $sql = "select u.email + from dataorder d + LEFT JOIN users u on d.userid = u.id + WHERE u.email IS NOT NULL + AND d.uuid=? + GROUP BY u.email"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid)); + $mails = $sth->fetchAll(); + + $this->view->mailinfo = count($mails); + + if($ac == "send") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $title = $this->_getParam('title'); + $body = $this->_getParam('body'); + + foreach($mails as $k=>$v) + { + $mail=new WestdcMailer($this->view->config->smtp); + $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); + $mail->setBodyText($body); + $mail->setSubject($title); + if($this->debug==0) + { + $mail->addTo($v['email']); + }else{ + $mail->addTo($debug_email); + } + if($mail->send()) + { + echo $v['email']."...发送成功!
"; + }else{ + echo $v['email']."...发送失败!
"; + } + } + } + } + + /* + * staticsAction() 数据统计 + * + * + */ + public function staticsAction(){ + + $ac = $this->_getParam('ac'); + + if(empty($ac)) + { + $this->view->alldata = $this->getClick(); + } + + if($ac=="md") + { + $this->_helper->viewRenderer('statics-md'); + $this->view->allorder = $this->getStatic("allorder"); + $this->view->offlineorder = $this->getStatic("offline"); + $this->view->onlineorder = $this->getStatic("online"); + } + + if($ac == "time") + { + $this->_helper->viewRenderer('statics-time'); + $this->view->datas = $this->getStaticByYear(); + + } + + }//staticsAction() 数据统计 + + public function getClick(){ + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + $sql = "SELECT md.title,md.uuid,s.viewed,count(o.id) as down FROM metadata md + LEFT JOIN mdstat s ON md.uuid=s.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + LEFT JOIN dataorder o ON md.uuid=o.uuid + WHERE a.userid=? and a.status=1 and (o.status=0 or o.status=5) + GROUP BY md.title,md.uuid,s.viewed"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uid)); + $rows = $sth->fetchAll(); + + return $rows; + } + + /* + * getStaticByYear按月份获取统计数据 + */ + public function getStaticByYear($year=0) + { + $uid=Zend_Auth::getInstance()->getIdentity()->id; + + $sql = "select to_char(o.ts_created, 'YYYY-MM') as d , count(o.id) as c from dataorder o + where o.status in (0,5) and o.uuid in (select uuid from mdauthor where status=1 and userid=".$uid.")"; + if ($year>0) + $sql.=" and o.ts_created between '$year-01-01' and '$year-12-31' "; + $sql.=" group by d order by d desc"; + + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + return $rows; + } + + public function getStatic($ac){ + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + if(empty($uid)){ + return false; + } + + if($ac == "allorder"){ + $sql = " SELECT count(o.id) as c FROM metadata md + LEFT JOIN dataorder o ON md.uuid=o.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + WHERE a.userid=? AND a.status>0"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uid)); + $row = $sth->fetch(); + return $row['c']; + } + + if($ac == "offline"){ + $sql = " SELECT count(o.id) as c FROM metadata md + LEFT JOIN dataorder o ON md.uuid=o.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + WHERE o.offlineappid > 0 AND a.userid=? AND a.status>0"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uid)); + $row = $sth->fetch(); + return $row['c']; + } + + if($ac == "online"){ + $sql = " SELECT count(o.id) as c FROM metadata md + LEFT JOIN dataorder o ON md.uuid=o.uuid + LEFT JOIN mdauthor a ON md.uuid=a.uuid + WHERE o.onlineappid > 0 AND a.userid=? AND a.status>0"; + $sth = $this->db->prepare($sql); + $sth->execute(array($uid)); + $row = $sth->fetch(); + return $row['c']; + } + + } + + + public function getFileinfo($id){ + $sql = "select * from attachments where id='$id'"; + $re= $this->db->query($sql); + $row= $re->fetch(); + return $row; + } + + //成为作者后的后继处理工作 + private function author_first($uuid,$author) + { + $sql="insert into mdversion (xml,ts_created,uuid,changelog,userid) + select x.data,m.ts_created,?,?,? from metadata m left join xml x on m.id=x.id + left join mdversion v on m.uuid=v.uuid + where m.uuid=? and v.changelog is null and m.uuid not in (select uuid from mdversion where changelog is not null) + order by v.ts_created ASC LIMIT 1"; + $sth=$this->db->prepare($sql); + try + { + $sth->execute(array($uuid,'初始版本 version 1.0',$author,$uuid)); + } catch(Exception $e){ + // do nothing here. + // 说明之前已经有对应数据 + } + $this->wdb=Zend_Db::factory($this->view->config->geonetwork); + $sql="update metadata set owner=? where uuid=?"; + $sth=$this->wdb->prepare($sql); + $sth->execute(array($author,$uuid)); + } + + + /* + * metadata() 新建元数据 + * + * + * + */ + public function metadataAction() + { + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + } + + $ac = $this->_getParam('ac'); + + if(empty($ac)) + { + + include_once("MetaData.php"); + $md = new Metadata($this->db); + $this->view->Field = $md->MetadataFields; + + $MDList = $md->getRecord($uid); + + if(!empty($MDList)) + { + foreach($MDList as $k=>$v) + { + $MDList[$k]['content'] = json_decode($v['content']); + } + $this->view->MDList = $MDList; + } + } + + if($ac=="new") + { + $this->_helper->viewRenderer('metadata-new'); + + include_once("MetaData.php"); + $md = new Metadata($this->db); + $this->view->Field = $md->MetadataFields; + + $uuid = $this->_getParam('uuid'); + + if(!empty($uuid) && !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)) + { + $this->view->error = "参数错误"; + return true; + } + + else{ + $this->view->uuid = $uuid; + if(!empty($uuid)){ + + $datas = $md->getRecord($uid,$uuid); + $data = json_decode($datas['content']); + $this->view->data = $data; + return true; + } + } + + }//创建元数据页面 + + if($ac == "del") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $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)) + { + $this->jsonexit(array('error'=>"参数错误")); + return true; + } + + $sql = "DELETE FROM metadata_temp WHERE userid=? AND uuid=?"; + + $sth = $this->db->prepare($sql); + $rs = $sth->execute(array($uid,$uuid)); + + if($rs>0) + { + $this->jsonexit(array('msg'=>"删除成功",'deleted'=>1)); + return true; + }else{ + $this->jsonexit(array('error'=>"删除失败,请刷新页面后查看")); + return true; + } + + return true; + + }//删除 + + if($ac == "save") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + include_once("MetaData.php"); + $md = new Metadata($this->db); + + $uuid = $this->_getParam('uuid'); + $commit = $this->_getParam('commit'); + + $data = array(); + + foreach($md->MetadataFields as $k=>$v) + { + $data[$v['FieldName_temp']] = $this->_getParam($v['FieldName']); + + if(!empty($commit)) + { + if(isset($v['Required']) && $v['Required'] == true) + { + if($v['Type'] == 'varchar' || $v['Type'] == 'text') + { + if(empty($data[$v['FieldName_temp']])) + { + $this->jsonexit(array("error"=>$v['Title']." 必须填写")); + return true; + } + } // 文本数据 + + if($v['Type'] == 'array') + { + if(!is_array($data[$v['FieldName_temp']]) || count($data[$v['FieldName_temp']]) < 1 ) + { + $this->jsonexit(array("error"=>$v['Title']." 信息不完整")); + return true; + }//数组没有值 + + foreach($data[$v['FieldName_temp']] as $sk=>$sv) + { + if(empty($sv)) + { + unset($data[$v['FieldName_temp']][$sk]); + } + + if(is_array($sv)) + { + $error_cu = 0; + foreach($sv as $sub_val) + { + if(empty($sub_val)) + { + $error_cu ++ ; + } + } + + if($error_cu >= count($sv)) + { + unset($data[$v['FieldName_temp']][$sk]); + $error_cu = 0; + } + + if($error_cu > 0 && $error_cu < count($sv)){ + $this->jsonexit(array("error"=>$v['Title']." 信息不完整")); + return true; + } + } + } + + if(count($data[$v['FieldName_temp']]) < 1) + { + $this->jsonexit(array("error"=>$v['Title']." 必须填写")); + return true; + } + + } // 数组数据 + + } // 是否必填 + }// empty($commit) + }// end foreach + + if(empty($data['title'])) + { + $this->jsonexit(array("error"=>"元数据标题必须填写")); + return true; + } + + if(!empty($commit)) + { + $status = 1; + }else{ + $status = 0; + } + + if(!empty($uuid)) + { + $rs = $md->Record($uid,$data,$status,$uuid); + }else{ + $rs = $md->Record($uid,$data,$status); + } + + if($rs !== false) + { + if(!empty($commit)) + { + $data = array("uuid"=>$rs,"complete"=>$commit); + }else{ + $data = array("uuid"=>$rs,'saved'=>1); + } + $this->jsonexit($data); + return true; + }else{ + $this->jsonexit(array("error"=>'保存失败')); + return false; + } + }// 新元数据保存 + + if($ac == "autoinput") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $name = $this->_getParam('k'); + + $name = strip_tags(trim($name)); + + if(!empty($name)) + { + $sql = "SELECT realname,email FROM users WHERE realname LIKE ? OR email LIKE ?"; + $sth = $this->db->prepare($sql); + $sth->execute(array('%'.$name.'%','%'.$name.'%')); + $rows = $sth->fetchAll(); + $this->jsonexit($rows); + } + } + + if($ac == "process") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_getParam('uuid'); + + $sql = "SELECT * FROM metadata_temp WHERE uuid=? AND userid=?"; + + $sth = $this->db->prepare($sql); + $sth->execute(array($uuid,$uid)); + + $row = $sth->fetch(); + + $body = json_decode($row['content']); + echo "
";
+			print_r($body);
+			echo "
"; + + return true; + }// 元数据处理 + + }//metadata() + + public function fundAction() + { + //$this->_helper->layout->setLayout('administry'); + $ac = $this->_getParam('ac'); + $submit = $this->_getParam('submit'); + + include_once("data/Fund.php"); + $fund = new Fund($this->db); + + $auth = Zend_Auth::getInstance(); + if($auth->hasIdentity()) + { + $user = $auth->getIdentity(); + $uid = $user->id; + }else{ + exit("请重新登录"); + } + + if($ac=='index' || empty($ac)) + { + $uuid = $this->_getParam('uuid'); + if(empty($uuid)) + { + $rows = $fund->fetch(0,true,$uid); + $fund->addPaginator($rows,$this->view,$this->_request); + }else{ + include('data/Metadata.php'); + $md = new Metadata($this->db); + $this->view->md = $md->view($uuid); + $rows = $fund->fetch($uuid); + $fund->addPaginator($rows,$this->view,$this->_request); + } + return true; + } + + if($ac == "add") + { + $this->_helper->viewRenderer('fund-add'); + if(!empty($submit)) + { + $data = $fund->_getParams($this->_request); + $data['userid'] = $uid; + + if($fund->add($data) == true) + { + $this->view->AlertType = "alert-success"; + $this->view->msg = "添加成功!"; + $this->view->jump_url = "/author/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 = "/author/fund/"; + } + + if(!empty($submit)) + { + $data = $fund->_getParams($this->_request); + $data['userid'] = $uid; + $state = $fund->update($data,$id,$uid); + if( $state == true) + { + $this->view->AlertType = "alert-success"; + $this->view->msg = "修改成功!"; + $this->view->jump_url = "/author/fund/"; + return true; + }else{ + $this->view->data = $data; + if(is_string($state)) + { + $this->view->error = $state; + }else{ + $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,$uid) == 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,true,$uid); + }else{ + $this->view->ct = "ct"; + $rows = $fund->fetch($uuid,false,$uid); + } + + include('data/Metadata.php'); + $md = new Metadata($this->db); + $this->view->md = $md->view($uuid); + + $fund->addPaginator($rows,$this->view,$this->_request); + + return true; + }//formd + + if($ac == "mdfunddel") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $id = $this->_getParam('id'); + + if(empty($id)) + { + $this->jsonexit(array('error'=>'参数错误')); + return true; + } + + if($fund->mfdelete($id) == true) + { + $this->jsonexit(array('success'=>$id)); + return true; + }else{ + $this->jsonexit(array('error'=>'删除失败')); + return true; + } + }//mdfunddel + + }//fund + + public function doiAction() + { + //$this->_helper->layout->setLayout('administry'); + $ac = $this->_getParam('ac'); + $submit = $this->_getParam('submit'); + $uuid = $this->_getParam('uuid'); + + include_once("data/Doi.php"); + $doi = new Doi($this->db); + include_once("helper/view.php"); + + if( empty($ac) || $ac == "index") + { + $uid = view::User('id'); + if(empty($uuid)) + { + $rows = $doi->fetch($uid); + view::addPaginator($rows,$this->view,$this->_request); + }else{ + $this->_redirect('/author/doi/ac/edit/?uuid='.$uuid); + return true; + } + return true; + }//index + + if($ac == "edit") + { + $this->_helper->viewRenderer('doi-add'); + $id = $this->_getParam('id'); + if(empty($uuid) && empty($id)) + { + view::Msg('alert-error',"参数错误",-1); + return false; + } + + if(empty($submit)){ + if(!empty($uuid)) + { + $this->view->uuid = $uuid; + $this->view->data = $doi->view($uuid); + if(empty($this->view->data)) + { + include('data/Metadata.php'); + $md = new Metadata($this->db); + $metadata = $md->view($uuid); + $this->view->data = array( + 'uuid'=>$uuid, + 'title'=>$metadata['title'], + 'doi'=>$metadata['doi'], + 'url'=>"http://" . $_SERVER['HTTP_HOST'].'/data/'.$uuid, + 'publisher'=>'寒区旱区科学数据中心', + ); + }else{ + $this->view->data['info'] = $doi->data_process_out($this->view->data); + } + }else{ + $this->view->data = $doi->view($uuid); + $this->view->data['info'] = $doi->data_process_out($this->view->data); + } + }else{ + $data = $doi->_getParams($this->_request); + $this->view->data = $data; + $info = $doi->checkinfo($data['info']); + if(!is_array($info)){ + $this->view->error = view::Error('alert-error',$info,-1); + return true; + }else{ + $data['info'] = $info; + $data['info'] = $doi->sksort($data['info'],"order",SORT_DESC); + } + $uid = view::User('id'); + $state = $doi->update($data,$uuid,$uid); + if($state) + { + $this->view->msg = view::Msg('alert-success',"修改成功!",'/author/doi/uuid/'.$uuid); + return false; + }else{ + $this->view->error = view::Error('alert-error',"修改失败",-1); + return false; + } + } + }//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($doi->delete($id) == true) + { + $this->jsonexit(array('success'=>$id)); + return true; + }else{ + $this->jsonexit(array('error'=>'删除失败')); + return true; + } + + }//del + + }//doi + + /* + * jsonexit() 退出并返回json数据 + * + * param array $data 要返回的JSON数据,可以是任意数组 + * + * return JSON-response + */ + public function jsonexit($data){ + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($data)); + return true; + }//jsonexit() 退出并返回json数据 + + private function genRandomString($len) + { + $chars = array( + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", + "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", + "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", + "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", + "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", + "3", "4", "5", "6", "7", "8", "9" + ); + $charsLen = count($chars) - 1; + + shuffle($chars); // 将数组打乱 + + $output = ""; + for ($i=0; $i<$len; $i++) + { + $output .= $chars[mt_rand(0, $charsLen)]; + } + return $output; + } + + //ajax 提示框 + public function alertbox($type='',$body){ + if($type == "error") + { + $img = ''; + $text = '

'.$body.'

'; + return $img.$text; + } + if($type == "ok") + { + $img = ''; + $text = '

'.$body.'

'; + return $img.$text; + } + if($type == "warning") + { + $img = ''; + $text = '

'.$body.'

'; + return $img.$text; + } + if(empty($type)) + { + $text = '

'.$body.'

'; + return $text; + } + } +} + diff --git a/application/default/views/scripts/author/literature-viewdata.phtml b/application/default/views/scripts/author/literature-viewdata.phtml index ea1507d3..a1ae7aa6 100644 --- a/application/default/views/scripts/author/literature-viewdata.phtml +++ b/application/default/views/scripts/author/literature-viewdata.phtml @@ -3,6 +3,7 @@ $this->headTitle($this->config->title->site); $this->headTitle($this->config->title->author); $this->headTitle()->setSeparator(' - '); $this->theme->AppendPlus($this,'colorbox'); +$this->theme->AppendModel($this,"author-literature"); $this->headLink()->appendStylesheet('/css/author.css'); $this->headScript()->appendFile('/static/js/uploadify/swfobject.js'); $this->headScript()->appendFile('/static/js/uploadify/jquery.uploadify.v2.1.4.min.js'); @@ -34,9 +35,12 @@ $this->breadcrumb()->setSeparator(' > '); foreach ($this->paginator as $item): $autoindex++;?>
  • -

    +

    +

    查看详细 - | 删除 + | 编辑 + | 排序 + | 删除 | 添加文献

  • @@ -45,8 +49,6 @@ $this->breadcrumb()->setSeparator(' > '); endif; ?> - -