273 lines
7.1 KiB
PHP
273 lines
7.1 KiB
PHP
<?php
|
|
class Review extends Zend_Controller_Plugin_Abstract
|
|
{
|
|
private $db; //传入PDO对象.
|
|
protected $events = NULL; //事件
|
|
|
|
//使用到的公共变量
|
|
public $tbl_reviewexp = "mdexpertreview";
|
|
public $tbl_mdreview = "mdreview";
|
|
public $tbl_user = "users";
|
|
|
|
function __construct($db)
|
|
{
|
|
$this->db = $db;
|
|
}
|
|
|
|
public function events(Zend_EventManager_EventCollection $events = NULL)
|
|
{
|
|
if ($events !== NULL) {
|
|
$this->events = $events;
|
|
} elseif ($this->events === NULL) {
|
|
$this->events = new Zend_EventManager_EventManager(__CLASS__);
|
|
}
|
|
return $this->events;
|
|
}
|
|
|
|
//接受或者拒绝评审
|
|
function invite($id,$uuid,$uid,$status)
|
|
{
|
|
if(empty($id) || empty($uuid) || !is_numeric($id) ||!preg_match("/^[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}$/",$uuid))
|
|
{
|
|
return"参数错误";
|
|
}
|
|
|
|
if($id != $uid)
|
|
{
|
|
return "您无权使用此通知";
|
|
}//非本人操作
|
|
|
|
try{
|
|
$sql = "update ".$this->tbl_reviewexp." set status=$status where id='$id' and uuid='$uuid'";
|
|
if($this->db->exec($sql))
|
|
{
|
|
return true;
|
|
}else{
|
|
return "您无权限进行此操作";
|
|
}
|
|
}catch(Exception $e){
|
|
return "处理中出现错误";
|
|
}
|
|
}
|
|
|
|
//根据UUID获得评审意见
|
|
function getReviews($uuid)
|
|
{
|
|
$sql = "SELECT mr.*,u.username,u.realname FROM ".$this->tbl_mdreview." mr
|
|
LEFT JOIN ".$this->tbl_user." u ON mr.userid = u.id
|
|
WHERE mr.uuid = '$uuid'";
|
|
|
|
$sth = $this->db->query($sql);
|
|
$reviews = $sth->fetchAll();
|
|
|
|
return $reviews;
|
|
}
|
|
|
|
//后台我负责的评审
|
|
function adminReviews($filter = "",$order="")
|
|
{
|
|
include_once('helper/view.php');
|
|
$uid = view::User('id');
|
|
|
|
$wheresql = array();
|
|
|
|
$wheresql[] = " m.status in (1,2,3,4) ";
|
|
$wheresql[] = " u.id=$uid ";
|
|
|
|
if(isset($filter['keyword']) && !empty($filter['keyword']))
|
|
{
|
|
$wheresql[] = " md.title like '%".$filter['keyword']."%' ";
|
|
}
|
|
if(isset($filter['code']) && !empty($filter['code']))
|
|
{
|
|
$wheresql[] = " s.sourceid=".$filter['code']." ";
|
|
}
|
|
|
|
if(count($wheresql)>0)
|
|
{
|
|
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
|
}else{
|
|
$wheresql = "";
|
|
}
|
|
|
|
$sql = "select m.id,g.id as gid, md.uuid,md.title,u.username,u.realname,m.status,md.id as mdid,md.author,m.ts_accepted
|
|
FROM mdstatus m
|
|
right join metadata md on md.uuid=m.uuid
|
|
left join geonetworkmetadata g on m.uuid=g.uuid
|
|
left join users u on u.id=m.userid
|
|
left join datasource s on s.uuid=md.uuid
|
|
$wheresql
|
|
order by m.status desc,m.ts_accepted desc";
|
|
|
|
$re = $this->db->query($sql);
|
|
$rows = $re->fetchAll();
|
|
|
|
return $rows;
|
|
}
|
|
|
|
//发布
|
|
function post($id,$emails)
|
|
{
|
|
if(is_numeric($id))
|
|
{
|
|
$cid = (int)$id;
|
|
}
|
|
|
|
if(is_array($id))
|
|
{
|
|
$cid = join(",",$id);
|
|
}
|
|
|
|
include_once("helper/view.php");
|
|
$userid = (int)view::User('id');
|
|
|
|
if($this->changestatus($cid,5))
|
|
{
|
|
$results = $this->events()->trigger('post.post', $this, compact('emails','id','userid'));
|
|
return $results->bottom();
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
}//发布
|
|
|
|
//检查管理员
|
|
function checkAdmin($id,$userid = 0)
|
|
{
|
|
$id = (int)$id;
|
|
if(empty($userid))
|
|
{
|
|
include_once("helper/view.php");
|
|
$userid = (int)view::User('id');
|
|
}
|
|
$sql = "select id from mdstatus where id=$id and userid=$userid";
|
|
$rs = $this->db->query($sql);
|
|
$row = $rs->fetch();
|
|
|
|
if(empty($row['id']))
|
|
{
|
|
return false;
|
|
}else{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* changestatus() 更改mdstatus中的status字段
|
|
*
|
|
* @param int $id //要更改状态的mdstatus记录的ID
|
|
* @param int $status //状态
|
|
*
|
|
* return bool
|
|
*/
|
|
function changestatus($id,$status){
|
|
$stvalues = array(
|
|
-1, //取消评审
|
|
0, //初始状态
|
|
1, //接受元数据评审,进入评审阶段
|
|
2, //开始邀请专家,送审阶段
|
|
3, //专家接受邀请,在审阶段
|
|
4, //专家反馈,在审
|
|
5, //评审结束,发布
|
|
6,7
|
|
);
|
|
if(empty($id) || !isset($status) || !in_array($status,$stvalues))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
if($status==1)
|
|
{$sql = "update mdstatus set status='$status',ts_accepted='now()' where id in ($id)"; }
|
|
else if($status==5)
|
|
{$sql = "update mdstatus set status='$status',ts_finished='now()' where id in ($id)";}
|
|
else
|
|
{$sql = "update mdstatus set status='$status' where id in ($id)";}
|
|
try{
|
|
if($this->db->exec($sql)>0)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
catch(Exception $e)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}//changestatus 更改状态
|
|
}
|
|
|
|
class ReviewListener implements Zend_EventManager_ListenerAggregate
|
|
{
|
|
private $db; //传入PDO对象.
|
|
|
|
function __construct($db = NULL)
|
|
{
|
|
if(empty($db))
|
|
{
|
|
$this->db = Zend_Registry::get('db');
|
|
}else{
|
|
$this->db = $db;
|
|
}
|
|
$this->config = Zend_Registry::get('config');
|
|
}
|
|
|
|
public function attach(Zend_EventManager_EventCollection $events)
|
|
{
|
|
$events->attach('post.post', array($this, 'posted'), 100);
|
|
}
|
|
|
|
public function detach(Zend_EventManager_EventCollection $events)
|
|
{
|
|
|
|
}
|
|
|
|
public function posted($e)
|
|
{
|
|
$id = $e->getParam('id');
|
|
$emails = $e->getParam('emails');
|
|
$userid = $e->getParam('userid');
|
|
|
|
if(is_numeric($id))
|
|
{
|
|
//发布正式版本
|
|
$sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid in (select uuid from mdstatus where id=?) order by ts_created desc limit 1)";
|
|
$this->db->query($sql,array('发布第一个正式版本 version 1.0',$userid,$id));
|
|
//删除所有的中间版本
|
|
$sql="delete from mdversion where changelog is null and uuid in (select uuid from mdstatus where id=?)";
|
|
$this->db->query($sql,array($id));
|
|
//email message
|
|
if(isset($emails) &&is_array($emails) && count($emails)>0)
|
|
{
|
|
$mail=new WestdcMailer($this->view->config->smtp);
|
|
$sql="select m.uuid,m.title from metadata m left join mdstatus s on m.uuid=s.uuid where s.id='$id'";
|
|
$rs=$this->db->query($sql);
|
|
$res=$rs->fetch();
|
|
$mailtp=new EmailText($this->db,'metadata-publish',array('uuid'=>$res['uuid'],'title'=>$res['title']));
|
|
$mail->setBodyText($mailtp->getBody());
|
|
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
|
foreach($emails as $email) $mail->addTo($email);
|
|
$mail->setSubject($mailtp->getSubject());
|
|
$mail->send();
|
|
}
|
|
}
|
|
|
|
if(is_array($id))
|
|
{
|
|
foreach($id as $v)
|
|
{
|
|
//发布正式版本
|
|
$sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid in (select uuid from mdstatus where id=?) order by ts_created desc limit 1)";
|
|
$this->db->query($sql,array('发布第一个正式版本 version 1.0',$userid,$v));
|
|
//删除所有的中间版本
|
|
$sql="delete from mdversion where changelog is null and uuid in (select uuid from mdstatus where id=?)";
|
|
$this->db->query($sql,array($v));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|