merge trunk admin DownController changes [1804]:[2452] into the branch

This commit is contained in:
wlx 2012-06-21 03:21:10 +00:00
parent dee58e75d7
commit 4ab158bd88
1 changed files with 322 additions and 27 deletions

View File

@ -27,6 +27,7 @@ class Admin_DownController extends Zend_Controller_Action
$deny =(int)$this->_getParam('deny');
$page =(int)$this->_getParam('page');
$reset =(int)$this->_getParam('reset');
$status =(int)$this->_getParam('status');
if (!$page) $page=1;
if ($view) {
@ -43,41 +44,322 @@ class Admin_DownController extends Zend_Controller_Action
$this->db->query($sql,array($start));
$sql="select * from offlineapp where id=?";
$row=$this->db->fetchRow($sql,array($start));
$username=$row['username'];
//发送用户邮件进行信息提示和说明
$mail = new WestdcMailer($this->view->config->smtp);
$datalist=str_replace(";","\n",$row['datalist']);
$mailtp=new EmailText($this->db,'offline-start',array('user'=>$row['username'],'datalist'=>$datalist));
$mailtp=new EmailText($this->db,'offline-start',array('user'=>$username,'datalist'=>$datalist));
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail->addTo($row['email']);
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->send();
$sql="select distinct(res.email) from dataorder d left join role on d.uuid=role.uuid left join responsible res on role.resid=res.id where d.offlineappid=? and role.role in ('pointOfContact','resourceProvider')";
$sql="select pdflink from offlineapp where id=?";
$row=$this->db->fetchRow($sql,array($start));
$filecontent=file_get_contents($this->view->config->offline->savepath."/".$row['pdflink']);
//对每条数据的管理员用户发送相应的邮件通知,同一用户的邮件需要合并
//需要取出对应数据的标题、uuid以及对应的作者的email一条数据可能有多个作者一次申请可能有多条数据对应同一个作者
//邮件中应提示用户可以选择是否委托给数据中心进行管理(这样以后就不接受相应的管理邮件,但用户仍然可以自主取消此选择)
$uuid_done="";
// 0. 处理专题数据集
$sql="select s.admin_email as email,m.title,d.uuid,s.title as sourcetitle from dataorder d left join datasource ds on d.uuid=ds.uuid
left join source s on ds.sourceid=s.id left join metadata m on d.uuid=m.uuid
where d.offlineappid=? and s.admin_status=1 and d.uuid<>all(s.exclude_data)
order by s.admin_email,m.title";
$rows=$this->db->fetchAll($this->db->quoteInto($sql,$start));
$addrs=array();
$tmp_email='';
$data='';
$source='';
foreach($rows as $row)
{
$addrs[]=$row['email'];
if ($tmp_email!=$row['email'])
{
if (!empty($data))
{
//发送之前的用户申请审核邮件
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-subject',array('user'=>$username,'datalist'=>$data,'source'=>$source));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail_addrs=explode(",",substr($tmp_email,1,-1));
$mail->addTo($mail_addrs);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
$data="";
$source="";
}
$tmp_email=$row['email'];
$source=$row['sourcetitle'];
}
$data.=" 数据名称:".$row['title']."\n";
$data.=" \t数据地址http://westdc.westgis.ac.cn/data/".$row['uuid']."\n\n";
$uuid_done.="'".$row['uuid']."',";
}
//发送最后一封邮件
if (!empty($data))
{
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-author',array('user'=>$username,'datalist'=>$data,'source'=>$source));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail_addrs=explode(",",substr($tmp_email,1,-1));
$mail->addTo($mail_addrs);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
}
// 1. 处理有数据作者且自行管理的数据并且未被0处理过的
$sql="select u.email,m.title,d.uuid,a.activation from dataorder d left join mdstatus s on d.uuid=s.uuid left join users u on s.userid=u.id
left join metadata m on m.uuid=d.uuid left join mdauthor a on a.uuid=d.uuid
where d.offlineappid=? and s.status=6 and a.userid=s.userid ";
if (!empty($uuid_done)) $sql.=" and d.uuid not in (".substr($uuid_done,0,-1).") ";
$sql.=" order by u.email,m.title";
$rows=$this->db->fetchAll($this->db->quoteInto($sql,$start));
$tmp_email='';
$data='';
foreach($rows as $row)
{
if ($tmp_email!=$row['email'])
{
if (!empty($data))
{
//发送之前的用户申请审核邮件
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-author',array('user'=>$username,'datalist'=>$data));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail->addTo($tmp_email);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
$data="";
}
$tmp_email=$row['email'];
}
$data.=" 数据名称:".$row['title']."\n";
$data.=" \t数据地址http://westdc.westgis.ac.cn/data/".$row['uuid']."\n";
$data.=" \t如您不想收到此类数据申请审核的邮件,您可以将该数据委托给数据中心代为审核,委托后您也可以随时撤销此委托以便继续自行管理。\n";
$data.=" \t如想委托给数据中心请访问此网址http://westdc.westgis.ac.cn/author/delegate/uuid/".$row['uuid']."\n";
$data.=" \t撤销委托方法:进入数据中心->数据作者->我的数据,在该数据条上撤销委托。\n\n";
$uuid_done.="'".$row['uuid']."',";
}
//发送最后一封邮件
if (!empty($data))
{
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-author',array('user'=>$username,'datalist'=>$data));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail->addTo($tmp_email);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
}
// 2. 处理委托数据中心进行管理的数据
$sql="select m.title,d.uuid from dataorder d left join mdstatus s on d.uuid=s.uuid left join metadata m on m.uuid=d.uuid
left join datasource ds on ds.uuid=d.uuid left join source on ds.sourceid=source.id
where d.offlineappid=? and (s.status=7 or source.admin_status=2) ";
if (!empty($uuid_done)) $sql.=" and d.uuid not in (".substr($uuid_done,0,-1).") ";
$sql.=" order by m.title";
$rows=$this->db->fetchAll($this->db->quoteInto($sql,$start));
$data="";
foreach($rows as $row)
{
$data.=" 数据名称:".$row['title']."\n";
$data.=" \t数据地址http://westdc.westgis.ac.cn/data/".$row['uuid']."\n\n";
$uuid_done.="'".$row['uuid']."',";
}
if (!empty($data))
{
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-dcadmin',array('user'=>$username,'datalist'=>$data));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$addrs=array();
$addrs[] = 'nztong@lzb.ac.cn';
$addrs[] = 'wjian@lzb.ac.cn';
$addrs[] = 'lixin@lzb.ac.cn';
$mail->addTo($addrs);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
}
// 3. 未认证的数据即无明确的数据管理者从元数据提取对应管理者的email信息进行管理
//无数据作者的数据,根据元数据中的联系人信息发送相应的管理邮件,发送策略是多发还是少发?
//发送管理邮件同时建议用户认证为数据的作者,可以有更多的管理选择,同时邮件中应该有详细的说明为什么会收到此邮件
$sql="select distinct res.email,d.uuid,m.title,role.role from dataorder d left join role on d.uuid=role.uuid left join responsible res on role.resid=res.id
left join metadata m on d.uuid=m.uuid where length(res.email)>4 and d.offlineappid=?
and role.role in ('pointOfContact','custodian','resourceProvider','owner','distributor','publisher','author')";
if (!empty($uuid_done)) $sql.=" and d.uuid not in (".substr($uuid_done,0,-1).") ";
$sql.=" order by m.title,res.email";
$rows=$this->db->fetchAll($this->db->quoteInto($sql,$start));
unset($addrs);
$md=array();
$tmp_title='';
$role=array();
$role['pointOfContact']=array();
$role['custodian']=array();
$role['resourceProvider']=array();
$role['owner']=array();
$role['distributor']=array();
$role['publisher']=array();
$role['author']=array();
$single=array();
foreach($rows as $row)
{
if ($tmp_title!=$row['title'])
{
if (count($role))
{
$single['role']=$role;
$md[]=$single;
}
$single['title']=$row['title'];
$single['uuid']=$row['uuid'];
$tmp_title=$row['title'];
$role=array();
$role['pointOfContact']=array();
$role['custodian']=array();
$role['resourceProvider']=array();
$role['owner']=array();
$role['distributor']=array();
$role['publisher']=array();
$role['author']=array();
}
if ($row['role']=='resourceProvider')
{
$role['resourceProvider'][]=$row['email'];
} elseif ($row['role']=='custodian') {
$role['custodian'][]=$row['email'];
} elseif ($row['role']=='pointOfContact') {
$role['pointOfContact'][]=$row['email'];
} elseif ($row['role']=='owner') {
$role['owner'][]=$row['email'];
} elseif ($row['role']=='distributor') {
$role['distributor'][]=$row['email'];
} elseif ($row['role']=='publisher') {
$role['publisher'][]=$row['email'];
} elseif ($row['role']=='author') {
$role['author'][]=$row['email'];
}
}
if (count($role))
{
$single['role']=$role;
$md[]=$single;
}
//再循环一次提取最高权限email组并发送管理邮件
$newmd=array();
$single=array();
foreach($md as $row)
{
if (count($row['role']))
{
$addrs=array();
if (count($row['role']['pointOfContact']))
{
$addrs=$row['role']['pointOfContact'];
} elseif (count($row['role']['custodian'])) {
$addrs=$row['role']['custodian'];
} elseif (count($row['role']['resourceProvider'])) {
$addrs=$row['role']['resourceProvider'];
} elseif (count($row['role']['owner'])) {
$addrs=$row['role']['owner'];
} elseif (count($row['role']['distributor'])) {
$addrs=$row['role']['distributor'];
} elseif (count($row['role']['publisher'])) {
$addrs=$row['role']['publisher'];
} elseif (count($row['role']['author'])) {
$addrs=$row['role']['author'];
}
$single['uuid']=$row['uuid'];
$single['title']=$row['title'];
foreach($addrs as $email)
{
$single['email']=$email;
//$newmd[]=$single;
$newmd['uuid'][]=$row['uuid'];
$newmd['title'][]=$row['title'];
$newmd['email'][]=$email;
}
}
}
//按照email排序
array_multisort($newmd['email'],$newmd['uuid'],$newmd['title']);
$tmp_email='';
$data='';
foreach($newmd['email'] as $k=>$row)
{
if ($tmp_email!=$row)
{
if (!empty($data))
{
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-mdadmin',array('user'=>$username,'datalist'=>$data));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail->addTo($tmp_email);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
$data='';
}
$tmp_email=$row;
}
$data.=" 数据名称:".$newmd['title'][$k]."\n";
$data.=" \t数据地址http://westdc.westgis.ac.cn/data/".$newmd['uuid'][$k]."\n";
$data.=" \t如您不想收到此类数据申请审核的邮件您可以在按如下操作办法进行处理1. 申请成为该数据作者2. 将该数据委托给数据中心代为审核,委托后您也可以随时撤销此委托以便继续自行管理。\n";
$data.=" \t如要申请成为该数据作者:进入数据中心->数据作者->数据认证,查找到对应的数据后,在其下方点击申请认证即可。\n\n";
}
if (!empty($data))
{
unset($mail);
$mail = new WestdcMailer($this->view->config->smtp);
$mailtp=new EmailText($this->db,'offline-start-mdadmin',array('user'=>$username,'datalist'=>$data));
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail->addTo($tmp_email);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
}
//收件人邮箱
$addrs[] = 'nztong@lzb.ac.cn';
$addrs[] = 'wjian@lzb.ac.cn';
$addrs[] = 'lixin@lzb.ac.cn';
$mailtp=new EmailText($this->db,'offline-start-admin',array('user'=>$row['username'],'datalist'=>$datalist));
$mail->setBodyText($mailtp->getBody());
$mail->setSubject($mailtp->getSubject());
$mail->addTo($addrs);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/admin/down/offlineapp/view/'.$start);
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf');
$mail->send();
//提示信息
$this->messenger->addMessage('提示信息:该离线数据已经开始处理,并发送邮件给申请人以及数据管理委员会,请在处理完成后点击“完成”。');
$this->_redirect('/admin/down/offlineapp/'.$page);
} elseif ($finish) {
try {
$sql = "SELECT authorpermitted FROM dataorder WHERE offlineappid=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($finish));
$row = $sth->fetch();
if($row['authorpermitted'] <0)
{
$this->messenger->addMessage('提示信息:数据作者明确反对该下载申请,所以不能进行进一步通过');
$this->_redirect('/admin/down/offlineapp/'.$page);
}
$sql="update dataorder set status=5,ts_approved=now() where offlineappid=?";
$this->db->query($sql,array($finish));
$sql="update offlineapp set ts_approved=now() where id=? and ts_approved is null";
@ -120,6 +402,7 @@ class Admin_DownController extends Zend_Controller_Action
$mail->setBodyText($mailtp->getBody());
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->addTo($row['email']);
$mail->addCc($this->view->config->service->email,'西部数据中心服务组');
$mail->setSubject($mailtp->getSubject());
$mail->send();
} //ftp1 deal
@ -163,7 +446,7 @@ class Admin_DownController extends Zend_Controller_Action
}
else if($reset > 0)
{
$sql="update dataorder set status='1' where status='3' and offlineappid='$reset'";
$sql="update dataorder set status='1' where (status='3' or status='4') and offlineappid='$reset'";
if($this->db->exec($sql)>0)
{
$this->messenger->addMessage('已经成功对该申请重置');
@ -177,12 +460,17 @@ class Admin_DownController extends Zend_Controller_Action
//if
}//reset
$select="select distinct(o.*) from offlineapp o
left join dataorder d on o.id=d.offlineappid
where o.ts_approved is null
and o.pdflink is not null
and d.status=3
order by o.ts_created desc";
$select="select distinct(o.*),d.status as datastatus from offlineapp o
left join dataorder d on o.id=d.offlineappid";
if ($status==4)
$select.=" where o.ts_approved is null
and o.pdflink is not null and d.status=4";
elseif ($status==-1)
$select.=" where o.pdflink is not null and o.status=-1";
else
$select.=" where o.ts_approved is null
and o.pdflink is not null and d.status in (3,4)";
$select.=" order by o.ts_created desc";
$rs=$this->db->query($select);
$rows=$rs->fetchAll();
$paginator = Zend_Paginator::factory($rows);
@ -242,7 +530,11 @@ class Admin_DownController extends Zend_Controller_Action
$param[]=$edit;
$this->db->query($sql,$param);
$this->messenger->addMessage('提示信息:您已经编辑添加该记录。');
$this->_redirect('/admin/down/offline');
$page = $this->_getParam('page');
if(!empty($page))
$this->_redirect('/admin/down/offline/page/'.$page);
else
$this->_redirect('/admin/down/offline/');
} else {
$form->populate($formdata);
}
@ -370,13 +662,15 @@ class Admin_DownController extends Zend_Controller_Action
}//下载邮箱地址列表
$select=$this->db->select();
$select->from('offlineapp')->where('ts_approved is not null')->where('pdflink is not null')->order('ts_created desc');
$select->from('offlineapp')->where('ts_approved is not null')->where('pdflink is not null')->where('status=0')->order('ts_created desc');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
$this->view->page = $this->_getParam('page');
}
//在线数据下载情况仅针对onlineapp表自2011-9-8开始记录。
function onlineAction()
@ -389,6 +683,7 @@ class Admin_DownController extends Zend_Controller_Action
$select=$this->db->select();
$select->from('onlineapp as o',array('id','userid','unit','username','ts_created','project','address','postcode'))
->join('metadata as m', 'o.uuid = m.uuid', array('title','uuid'))
->where('o.id in (select distinct(onlineappid) from dataorder)')
->order('o.id desc');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
@ -467,7 +762,7 @@ class Admin_DownController extends Zend_Controller_Action
{
$select=$this->db->select();
$select->from('dataorder as o',array('id','ts_created','userid','offlineappid','onlineappid'))
->joinLeft('metadata as m', 'o.uuid = m.uuid', array('title','uuid'))
->joinLeft('metadata as m', 'o.uuid = m.uuid', array('title','uuid','filesize'))
->joinLeft('users as u','u.id=o.userid',array('realname as username'))
->where('o.userid = ?', $show)
->where('o.status=0 or o.status=5')