view->config = Zend_Registry::get('config'); $this->db=Zend_Registry::get('db'); $this->messenger=$this->_helper->getHelper('FlashMessenger'); $this->view->messages = $this->messenger->getMessages(); } function indexAction() { } /* * helpAction() 帮助文档 * */ function helpAction(){ }//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") { $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 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 == "searchonline") { $keywords = $this->_request->getParam('q'); if(!empty($keywords)) { $this->view->q = $keywords; } $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)) AND a.userid = ? AND (m.title like ? or m.description like ?) AND a.status=1 ORDER BY o.id desc"; $sth = $this->db->prepare($sql); $sth->execute(array($u_id,"%$keywords%","%$keywords%")); $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") { $pr = $this->_request->getParam('pr'); $oid = $this->_request->getParam('oid'); 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 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.uuid=? and a.userid=? and d.offlineappid=? 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(); } //同意用户下载 if($pr=="confrim") { $sql = "UPDATE dataorder SET authorpermitted=1 WHERE uuid=? AND offlineappid=?"; $sth = $this->db->prepare($sql); if($sth->execute(array($uuid,$oid))) { $btn = $this->createOfflineCtBtn($uuid,'c',$oid); echo ''.$btn.''; exit(); }else{ echo ""; exit(); } } //反对用户下载 if($pr == "objection") { $sql = "UPDATE dataorder SET authorpermitted=-1 WHERE uuid=? AND offlineappid=?"; $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 { $this->_helper->viewRenderer('inauthor-offline'); $select="select distinct(o.*),md.title,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 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['id']);} if($v['authorpermitted']>0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['id']);} if($v['authorpermitted']<0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['id']);} } $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 == "searchoffline") { $keywords = $this->_request->getParam('q'); if(!empty($keywords)) { $this->view->q = $keywords; } $this->_helper->viewRenderer('inauthor-offline'); $select="select distinct(o.*),md.title,md.description,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 (md.title like ? or md.description like ?) and a.userid=? AND a.status=1 order by o.ts_created desc"; $sth = $this->db->prepare($select); $sth->execute(array("%$keywords%","%$keywords%",$u_id)); $rows = $sth->fetchAll(); foreach ($rows as $k=>$v) { if($v['authorpermitted']==0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['id']);} if($v['authorpermitted']>0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['id']);} if($v['authorpermitted']<0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['id']);} } $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') { $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.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 ,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 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(); foreach ($rows as $k=>$v) { if($v['authorpermitted']==0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['offa_id']);} if($v['authorpermitted']>0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['offa_id']);} if($v['authorpermitted']<0) {$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['offa_id']);} } $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=? 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; } }//按数据显示 //按数据列表搜索 if($ac == "searchdata") { $keywords = $this->_request->getParam('q'); if(!empty($keywords)) { $this->view->q = $keywords; } $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=? AND (md.title like ? OR md.description like ?) GROUP BY md.title,d.uuid"; $sth = $this->db->prepare($sql); $sth->execute(array($u_id,"%$keywords%","%$keywords%")); $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 = "offline-ct-btns box-shadow"; $selectedStyle = "offline-select"; $confrimText = "同意"; $confrimFunc = 'onclick="confrim(\''.$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 FROM normalmetadata m LEFT JOIN mdauthor a ON m.uuid=a.uuid left join geonetworkmetadata g on m.uuid=g.uuid WHERE a.userid=? AND status>=0"; if ($ac=='search') { $key = trim($this->_request->getParam('q')); $this->view->q = $key; $search=new Search($key); $where=$search->sql_expr(array("m.title","m.description")); $sql.=' and '.$where; } $sql.="ORDER BY 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.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-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)); exit(); } //数据处理代码 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 Search($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"=>"您的身份符合申请条件,已经自动成为该元数据作者"); 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'); $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=? 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.author,c.email,c.url,c.ts_created,c.content FROM comments c LEFT JOIN mdauthor a ON a.uuid=c.uuid WHERE c.uuid=? AND a.userid=? ORDER BY ts_created DESC"; $sth = $this->db->prepare($sql); $sth->execute(array($uuid,$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-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=? 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'); } }// 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; } //新闻列表 if(empty($ac) || $ac=="list") { $keyword = $this->_request->getParam('q'); $wheresql = ""; if(!empty($keyword)) { $this->view->q = $keyword; $search = new Search($keyword); $wheresql = $search->sql_expr(array("arc.title","arc.description")); } if(!empty($wheresql)) { $wheresql = " WHERE ".$wheresql; } $sql = "SELECT arc.id,arc.title,arc.ts_publish,arc.description,u.realname FROM news_archives arc LEFT JOIN users u ON arc.userid=u.id $wheresql ORDER BY arc.ts_publish"; $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; } if($ac == "view") { $this->_helper->viewRenderer('news-view'); $aid = (int)$this->_request->getParam('aid'); if(empty($aid) || !is_numeric($aid)) { $this->_redirect('/error/error'); } else { $this->db->exec("UPDATE news_archives arc SET click=click+1 WHERE arc.id=$aid"); $sql = "SELECT arc.*,u.realname FROM news_archives arc LEFT JOIN users u ON u.id=arc.userid WHERE arc.id=?"; $sth = $this->db->prepare($sql); $sth -> execute(array($aid)); $row = $sth->fetch(); $this->view->info = $row; } } //新闻发布 if($ac == "add") { $this->_helper->viewRenderer('news-add'); }// $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 * FROM news_archives WHERE id=?"; $sth = $this->db->prepare($sql); $sth->execute(array($aid)); $row = $sth->fetch(); $this->view->info = $row; } //新闻发布的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')); //对参数进行预处理 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(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; } //获得描述 //删除段落及html标记 $data['description'] = mb_substr(preg_replace(array("/<(.*)>|<(.*) \/>/i","/\s/i"),array(""," "),$data['body']),0,450,"UTF-8"); //默认填充数据 $data['source'] = "西部数据中心"; $data['typeid'] = 0; $data['userid'] = $u_id; $data['keyword'] = str_replace(",",",",$data['keyword']); if(empty($aid)) { $sql = "INSERT INTO news_archives (userid,title,keywords,description,image,source,ts_publish,is_pub,body) VALUES (?,?,?,?,?,?,?,?,?) "; $sth = $this->db->prepare($sql); $ex = $sth -> execute(array($data['userid'],$data['title'],$data['keyword'],$data['description'],'',$data['source'],'now()',1,$data['body'])); } else { $sql = "UPDATE news_archives SET title=?,keywords=?,description=?,body=? WHERE id=? AND userid=?"; $sth = $this->db->prepare($sql); $ex = $sth -> execute(array($data['title'],$data['keyword'],$data['description'],$data['body'],$aid,$data['userid'])); } if($ex) { $msg['status'] = 1; if(empty($aid)) {$msg['outstring'] = "新闻添加成功";} else {$msg['outstring'] = "新闻编辑成功";} $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); return true; }else{ $msg['status'] = 0; if(empty($aid)) {$msg['error'] = "新闻添加失败,请重试";} else {$msg['outstring'] = "新闻编辑失败,请重试";} $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg)); return true; } }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; } } } }//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=? ORDER BY status DESC,a.id DESC"; $sth = $this->db->prepare($sql); $sth->execute(array($uuid)); $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; }else{ $this->view->error = "参数有误"; } } }