1556 lines
56 KiB
PHP
1556 lines
56 KiB
PHP
<?php
|
||
use Helpers\View as view;
|
||
use Files\Files;
|
||
use Files\Output;
|
||
use Files\Listener\FileListener;
|
||
use Order\Manager\Offlineapp;
|
||
use Order\Manager\Application;
|
||
use data\DataService;
|
||
use Mail\Mail;
|
||
|
||
class Admin_DownController extends Zend_Controller_Action
|
||
{
|
||
function preDispatch()
|
||
{
|
||
$this->db=Zend_Registry::get('db');
|
||
$this->view->config = Zend_Registry::get('config');
|
||
$this->messenger=$this->_helper->getHelper('FlashMessenger');
|
||
$this->view->messages = $this->messenger->getMessages();
|
||
$this->_helper->layout->setLayout('administry');
|
||
$this->view->Theme = new Theme();
|
||
}
|
||
function postDispatch()
|
||
{
|
||
$this->view->messages = $this->messenger->getMessages();
|
||
}
|
||
function indexAction()
|
||
{
|
||
//其他连接
|
||
}
|
||
|
||
//新离线数据申请管理
|
||
function offlineappsAction()
|
||
{
|
||
$this->view->navIn = $ac = $this->_getParam('ac');
|
||
$this->view->offlineAppId = $offlineappid = $this->_getParam('offlineappid');
|
||
$submit = $this->_getParam('submit');
|
||
$search = $this->_getParam('search');
|
||
|
||
if(empty($ac))
|
||
{
|
||
$this->view->navIn = $ac = "notreceived";
|
||
}
|
||
|
||
if($ac == "view")
|
||
{
|
||
if(empty($offlineappid))
|
||
{
|
||
view::Post($this,"参数错误",-1);
|
||
return true;
|
||
}
|
||
|
||
$offlineapp = new Offlineapp();
|
||
|
||
if(view::isXmlHttpRequest() !== true)
|
||
{
|
||
$this->_helper->viewRenderer('offlineapps-view');
|
||
$this->view->data = $offlineapp->getOneAppInfo($offlineappid);
|
||
}else{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$this->jsonexit($offlineapp->getOneAppInfo($offlineappid));
|
||
}
|
||
return true;
|
||
}
|
||
|
||
if($ac == "notreceived")
|
||
{
|
||
$this->_helper->viewRenderer('offlineapps-notreceived');
|
||
$offlineapp = new Offlineapp();
|
||
$data = $offlineapp->fetchNotReceived();
|
||
view::addPaginator($data,$this,20);
|
||
return true;
|
||
}//未接收的
|
||
|
||
if($ac == "nopdf")
|
||
{
|
||
$this->_helper->viewRenderer('offlineapps-nopdf');
|
||
$offlineapp = new Offlineapp();
|
||
$data = $offlineapp->fetchNoPdf();
|
||
view::addPaginator($data,$this,20);
|
||
return true;
|
||
}//没有上传申请表的
|
||
|
||
if($ac == "notpassed")
|
||
{
|
||
$this->_helper->viewRenderer('offlineapps-notpassed');
|
||
$offlineapp = new Offlineapp();
|
||
$data = $offlineapp->fetchNotApprove();
|
||
view::addPaginator($data,$this,20);
|
||
return true;
|
||
}
|
||
|
||
//接收
|
||
if($ac == "receive")
|
||
{
|
||
$offlineapp = new Offlineapp();
|
||
$statue = $offlineapp->receive($offlineappid);
|
||
if($statue !== true)
|
||
{
|
||
view::Post($this,$statue);
|
||
}else{
|
||
view::Post($this,"接收成功",-1);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//发送给作者
|
||
if($ac == "toauthor")
|
||
{
|
||
$this->_helper->viewRenderer('offlineapps-toauthor');
|
||
if(empty($submit))
|
||
{
|
||
|
||
}else{
|
||
$offlineapp = new Offlineapp();
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//拒绝
|
||
if($ac == "deny")
|
||
{
|
||
$this->_helper->viewRenderer('offlineapps-deny');
|
||
|
||
if(empty($offlineappid))
|
||
{
|
||
view::Post($this,"参数错误",-1);
|
||
return true;
|
||
}
|
||
|
||
if(empty($submit))
|
||
{
|
||
$offlineapp = new Offlineapp();
|
||
$this->view->data = $offlineapp->getOneAppInfo($offlineappid);
|
||
$mail = new Mail();
|
||
$data = array(
|
||
'user' => $this->view->data[0]['username'],
|
||
'datalist' => $this->view->data[0]['datalist'],
|
||
);
|
||
$mail->loadTemplate("offline-deny",$data);
|
||
$this->view->mail_body = $mail->body;
|
||
$this->view->mail_subject = $mail->subject;
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
//重置申请表
|
||
if($ac == "resetappform")
|
||
{
|
||
if(empty($offlineappid))
|
||
{
|
||
view::Post($this,"参数错误",-1);
|
||
return true;
|
||
}
|
||
|
||
$offlineapp = new Offlineapp();
|
||
$statue = $offlineapp->resetAppForm($offlineappid);
|
||
if($statue !== true)
|
||
{
|
||
view::Post($this,$statue);
|
||
}else{
|
||
view::Post($this,"重置成功",-1);
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
}
|
||
|
||
//离线数据申请管理
|
||
function offlineappAction()
|
||
{
|
||
set_time_limit(0);
|
||
include_once("Dataorder.php");
|
||
$DO = new Dataorder($this->db);
|
||
|
||
$view =(int)$this->_getParam('view');
|
||
$start =(int)$this->_getParam('start');
|
||
$finish =(int)$this->_getParam('finish');
|
||
$cancel =(int)$this->_getParam('cancel');
|
||
$deny =(int)$this->_getParam('deny');
|
||
$page =(int)$this->_getParam('page');
|
||
$reset =(int)$this->_getParam('reset');
|
||
$status =(int)$this->_getParam('status');
|
||
$ac = $this->_getParam('ac');
|
||
$q = $this->_getParam('q');
|
||
|
||
if($ac == "pending")
|
||
{
|
||
$keyword = "";
|
||
if(!empty($q))
|
||
{
|
||
$keyword = $q;
|
||
}
|
||
|
||
$rows = $DO->fetchAllOfflineApp(3,$keyword);
|
||
|
||
view::addPaginator($rows,$this,10);
|
||
return true;
|
||
}
|
||
|
||
if (!$page) $page=1;
|
||
if ($view) {
|
||
//查看此次申请的pdf
|
||
$sql="select * from offlineapp where id=?";
|
||
$row=$this->db->fetchRow($sql,array($view));
|
||
$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
|
||
} elseif ($start) {
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$page = $this->_request->getParam('page');
|
||
$sql="update dataorder set status=4,ts_received=now() where offlineappid=?";
|
||
$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'=>$username,'datalist'=>$datalist));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
$mail->addTo($row['email']);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mail->send();
|
||
|
||
//如果是wsn数据则生成数据
|
||
$dataservice = new DataService();
|
||
$offlineapp = new Offlineapp();
|
||
if ($offlineapp->hasWsnData($start))
|
||
{
|
||
@$dataservice->makeWsnData(array('uid'=>$row['userid'],'action'=>'prepare'));
|
||
}
|
||
|
||
$sql="select applicationform as pdflink from offlineapp where id=?";
|
||
$row=$this->db->fetchRow($sql,array($start));
|
||
$filecontent=file_get_contents($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));
|
||
$tmp_email='';
|
||
$data='';
|
||
$source='';
|
||
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-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();
|
||
if ($rows)
|
||
{
|
||
foreach($rows as $row)
|
||
{
|
||
if ($tmp_title!=$row['title'])
|
||
{
|
||
if (count($role) && !empty($tmp_title))
|
||
{
|
||
$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();
|
||
}
|
||
}
|
||
//提示信息
|
||
|
||
$data = array(
|
||
'started' => $start,
|
||
'msg' => "该离线数据已经开始处理,并发送邮件给申请人以及数据管理委员会,请在处理完成后点击“完成”。"
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
|
||
//$this->messenger->addMessage('提示信息:该离线数据已经开始处理,并发送邮件给申请人以及数据管理委员会,请在处理完成后点击“完成”。');
|
||
//$this->_redirect('/admin/down/offlineapp/'.$page);
|
||
} elseif ($finish) {
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
try {
|
||
|
||
$sql = "SELECT authorpermitted FROM dataorder WHERE offlineappid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($finish));
|
||
$row = $sth->fetch();
|
||
if($row['authorpermitted'] <0)
|
||
{
|
||
$data = array(
|
||
'error' => "数据作者明确反对该下载申请,所以不能进行进一步通过",
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
//$this->messenger->addMessage('提示信息:数据作者明确反对该下载申请,所以不能进行进一步通过');
|
||
//$this->_redirect('/admin/down/offlineapp/'.$page);
|
||
}
|
||
|
||
//如果是wsn数据则生成数据
|
||
//wsn数据在ftp服务器端进行处理
|
||
/*$dataservice = new DataService();
|
||
@$dataservice->makeWsnData();*/
|
||
|
||
$sql="update dataorder set status=5,ts_approved=now() where offlineappid=?";
|
||
$this->db->query($sql,array($finish));
|
||
$sql="update offlineapp set ts_approved=now(),status=5 where id=? and ts_approved is null";
|
||
$this->db->query($sql,array($finish));
|
||
$sql="select * from offlineapp where id=?";
|
||
$row=$this->db->fetchRow($sql,array($finish));
|
||
$sql="select * from dataorder left join dataset on dataset.uuid=dataorder.uuid where dataorder.offlineappid=?";
|
||
$rs=$this->db->fetchAll($sql,array($finish));
|
||
$has_ftp1=false;
|
||
$has_ftp2=false;
|
||
foreach($rs as $data) {
|
||
if ($data['host']=='ftp1.westgis.ac.cn')
|
||
$has_ftp1=true;
|
||
if ($data['host']=='ftp2.westgis.ac.cn')
|
||
$has_ftp2=true;
|
||
|
||
// deal with ftp.westgis.ac.cn, use g6 to add path
|
||
// todo ...
|
||
}
|
||
|
||
//deal with ftp1&ftp2 account, for offline data
|
||
if ($has_ftp1 || $has_ftp2) {
|
||
$password=md5('westdc'.$row['userid'].rand(1000,9999));
|
||
if ($has_ftp1)
|
||
{
|
||
$user=(object)array("id"=>$row['userid'],
|
||
"username"=>"westdc_".$row['userid'],
|
||
"password"=>$password,
|
||
"time"=>date('Y-m-d H:i:s', strtotime('+2 week')),
|
||
//"path"=>$path,
|
||
"param"=>"offlineappid=".$finish,
|
||
"host"=>'ftp1.westgis.ac.cn',
|
||
"maxdata"=>$this->view->config->download->max,
|
||
"datacount"=>1 //represent one offline application
|
||
);
|
||
$proftp=new Proftp();
|
||
$proftp->db=$this->db;
|
||
if (!$proftp->createuser($user))
|
||
{
|
||
$user->datacount=0; //force this offline to be true
|
||
$proftp->createuser($user);
|
||
$data = array(
|
||
'error' => "该用户申请的数据过多,请检查该用户之前已完成的申请",
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
//$this->messenger->addMessage('提示信息:该用户申请的数据过多,请检查该用户之前已完成的申请。');
|
||
}
|
||
}
|
||
if ($has_ftp2)
|
||
{
|
||
$user=(object)array("id"=>$row['userid'],
|
||
"username"=>"westdc_".$row['userid'],
|
||
"password"=>$password,
|
||
"time"=>date('Y-m-d H:i:s', strtotime('+2 week')),
|
||
//"path"=>$path,
|
||
"param"=>"offlineappid=".$finish,
|
||
"host"=>'ftp2.westgis.ac.cn',
|
||
"maxdata"=>$this->view->config->download->max,
|
||
"datacount"=>1 //represent one offline application
|
||
);
|
||
$proftp=new Pureftp();
|
||
$proftp->db=$this->db;
|
||
if (!$proftp->createuser($user))
|
||
{
|
||
$user->datacount=0; //force this offline to be true
|
||
$proftp->createuser($user);
|
||
$data = array(
|
||
'error' => "该用户申请的数据过多,请检查该用户之前已完成的申请",
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
if ($has_ftp1 && !$has_ftp2)
|
||
{
|
||
$ftphost='ftp://ftp1.westgis.ac.cn';
|
||
} else if (!$has_ftp1 && $has_ftp2)
|
||
{
|
||
$ftphost='ftp://ftp2.westgis.ac.cn';
|
||
} else if ($has_ftp1 && $has_ftp2)
|
||
{
|
||
$ftphost='ftp://ftp1.westgis.ac.cn 以及 ftp://ftp2.westgis.ac.cn';
|
||
}
|
||
//发送用户邮件进行信息提示和说明
|
||
$mail = new WestdcMailer($this->view->config->smtp);
|
||
//实例化EmailText
|
||
$mailtp=new EmailText($this->db,'offline-finish',
|
||
array('user'=>$row['username'],'datalist'=>str_replace(";","\n",$row['datalist']),
|
||
'ftpuser'=>$user->username,'ftppwd'=>$proftp->pwd,'ftptime'=>$proftp->time,'ftphost'=>$ftphost));
|
||
$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();
|
||
} //offline deal
|
||
|
||
//$this->messenger->addMessage('提示信息:该离线数据已经处理完成。');
|
||
$data = array(
|
||
'msg' => "该离线数据已经处理完成",
|
||
'finish'=>$finish
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
} catch (Exception $e) {
|
||
//提示信息
|
||
//$this->messenger->addMessage($e->getMessage());
|
||
//$this->messenger->addMessage('提示信息:该数据有可能还没有收到纸质申请表。');
|
||
$data = array(
|
||
'error' => $e->getMessage(),
|
||
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
//$this->_redirect('/admin/down/offlineapp/'.$page);
|
||
} elseif ($cancel) {
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
//取消=删除?
|
||
//用户提出申请的取消操作
|
||
//$sql="update dataorder set status=-1 where (status=3 or status=4) and userid=?";
|
||
$sql="delete from dataorder where offlineappid=? and (status=3 or status=4)";
|
||
$this->db->query($sql,array($cancel));
|
||
$sql="delete from offlineapp where id=?";
|
||
$this->db->query($sql,array($cancel));
|
||
$data = array(
|
||
'msg' => '已删除该用户离线申请',
|
||
'finish' =>$cancel
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
//$this->messenger->addMessage('提示信息:已删除该用户离线申请。');
|
||
//$this->_redirect('/admin/down/offlineapp/'.$page);
|
||
} elseif ($deny) {
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$sql="update dataorder set status=-1 where offlineappid=? and (status=3 or status=4)";
|
||
$this->db->query($sql,array($deny));
|
||
$sql="update offlineapp set ts_approved=now(),status=-1 where id=? and ts_approved is null";
|
||
$this->db->query($sql,array($deny));
|
||
|
||
$data = array(
|
||
'msg' => '已删除该用户离线申请',
|
||
'finish' =>$cancel
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
//$this->messenger->addMessage('提示信息:已拒绝该用户离线申请。');
|
||
//$this->_redirect('/admin/down/offlineapp/'.$page);
|
||
} else if($reset){
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
if($reset < 0)
|
||
{
|
||
|
||
$fortime = date('Y-m-d',(time()-24*3600*365));
|
||
$sql="update dataorder set status=1 where status=3 and ts_created < '$fortime'";
|
||
if($this->db->exec($sql)>0)
|
||
{
|
||
$this->messenger->addMessage('已经成功重置了 '.$fortime.' 前的所有申请');
|
||
$this->_redirect('/admin/down/offlineapp/');
|
||
}
|
||
|
||
}
|
||
else if($reset > 0)
|
||
{
|
||
$sql="update dataorder set status='1' where (status='3' or status='4') and offlineappid='$reset'";
|
||
if($this->db->exec($sql)>0)
|
||
{
|
||
$data = array(
|
||
'msg' => '已经成功对该申请重置',
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
//$this->messenger->addMessage('已经成功对该申请重置');
|
||
//$this->_redirect('/admin/down/offlineapp/');
|
||
}
|
||
else {
|
||
$data = array(
|
||
'error' => '没有找到对应数据,无法进行重置,可能是旧记录没有匹配数据造成的',
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
//$this->messenger->addMessage('没有找到对应数据,无法进行重置,可能是旧记录没有匹配数据造成的');
|
||
//$this->_redirect('/admin/down/offlineapp/');
|
||
}
|
||
}//elseif
|
||
//if
|
||
}//reset
|
||
|
||
$keyword = "";
|
||
if(!empty($q))
|
||
{
|
||
$keyword = $q;
|
||
}
|
||
|
||
$sta_def = 0;
|
||
if(!empty($status))
|
||
{
|
||
$sta_def = $status;
|
||
}
|
||
|
||
$rows = $DO->fetchAllOfflineApp($sta_def,$keyword);
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($page);
|
||
$paginator->setItemCountPerPage($this->view->config->page->max);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
}
|
||
|
||
//上传申请表
|
||
function uploadapplicationformAction()
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$id = $this->_getParam('orderid');
|
||
|
||
if(empty($id))
|
||
{
|
||
$this->jsonexit(array('error'=>"参数错误"));
|
||
return true;
|
||
}
|
||
|
||
$files = new Files();
|
||
$FileListener = new FileListener();
|
||
@$files->events()->attachAggregate($FileListener);
|
||
|
||
$statu = $files->uploadApplicationForm($_FILES['Filedata'],$id);
|
||
|
||
if(isset($statu['error']))
|
||
{
|
||
$this->jsonexit($statu);
|
||
return true;
|
||
}else{
|
||
$sql = "UPDATE offlineapp SET applicationform='{$statu['file']}' WHERE id=$id";
|
||
if($this->db->exec($sql))
|
||
{
|
||
$this->jsonexit(array("success"=>1));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array('error'=>"数据库记录更新失败".$sql));
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
public function applicationformAction()
|
||
{
|
||
$ac = $this->_getParam('ac');
|
||
if($ac == "view")
|
||
{
|
||
$link = $this->_getParam('link');
|
||
$content=file_get_contents($link);
|
||
header("Content-Disposition: inline; filename=applicationform.pdf");
|
||
header("Content-Type:application/pdf");
|
||
echo $content;
|
||
exit();
|
||
}
|
||
|
||
if($ac == "download")
|
||
{
|
||
$link = $this->_getParam('link');
|
||
$content=file_get_contents($link);
|
||
|
||
$output = new Output();
|
||
$output->pushDownload($content,"申请表.pdf",'pdf');
|
||
exit();
|
||
}
|
||
}
|
||
|
||
//离线数据服务记录
|
||
function offlineAction()
|
||
{
|
||
$add=(int)$this->_getParam('add');
|
||
$edit=(int)$this->_getParam('edit');
|
||
$delete=(int)$this->_getParam('delete');
|
||
$down=(int)$this->_getParam('down');
|
||
$update=$this->_getParam('update');
|
||
$show=$this->_getParam('show');
|
||
$undelete=$this->_getParam('undelete');
|
||
$emaillist=$this->_getParam('emaillist');
|
||
$monthreport=$this->_getParam('monthreport');
|
||
|
||
if ($add) {
|
||
$form=new OfflinelogForm();
|
||
$form->pdf->setDestination($this->view->config->offline->savepath);
|
||
if ($this->_request->isPost()) {
|
||
$formdata=$this->_request->getPost();
|
||
if ($form->isValid($formdata)) {
|
||
$uploadedData = $form->getValues();
|
||
$pdf = basename($form->pdf->getFileName());
|
||
$sql="insert into offlineapp (username,email,unit,phone,address,postcode,project,pdflink,datalist,ts_created,ts_approved,project_id,project_title,project_type) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
||
$this->db->query($sql,array($formdata['username'],$formdata['email'],$formdata['unit'],$formdata['phone'],$formdata['address'],$formdata['postcode'],
|
||
$formdata['project'],$pdf,$formdata['datalist'],$formdata['ts_approved']),$formdata['ts_approved'],
|
||
$formdata['project_id'],$formdata['project_title'],$formdata['project_type']);
|
||
$this->messenger->addMessage('提示信息:您已经成功添加该离线服务记录。');
|
||
$this->_redirect('/admin/down/offline');
|
||
} else {
|
||
$form->populate($formdata);
|
||
}
|
||
}
|
||
$this->view->form=$form;
|
||
$this->_helper->viewRenderer('offlineadd');
|
||
} //添加服务记录
|
||
|
||
elseif ($edit){
|
||
$form=new OfflinelogForm();
|
||
$form->pdf->setRequired(false);
|
||
if ($this->_request->isPost()) {
|
||
$formdata=$this->_request->getPost();
|
||
if ($form->isValid($formdata)) {
|
||
$uploadedData = $form->getValues();
|
||
$pdf = basename($form->pdf->getFileName());
|
||
$sql="update offlineapp set username=?,email=?,unit=?,phone=?,address=?,postcode=?,project=?,";
|
||
if ($form->pdf->isUploaded()) $sql.="pdflink=?,";
|
||
$sql.="datalist=?,ts_approved=?,project_id=?,project_title=?,project_type=? where id=?";
|
||
$param=array($formdata['username'],$formdata['email'],$formdata['unit'],$formdata['phone'],$formdata['address'],$formdata['postcode'],$formdata['project']);
|
||
if ($form->pdf->isUploaded()) $param[]=$pdf;
|
||
$param[]=$formdata['datalist'];
|
||
$param[]=$formdata['ts_approved'];
|
||
$param[]=$formdata['project_id'];
|
||
$param[]=$formdata['project_title'];
|
||
$param[]=$formdata['project_type'];
|
||
$param[]=$edit;
|
||
$this->db->query($sql,$param);
|
||
$this->messenger->addMessage('提示信息:您已经编辑添加该记录。');
|
||
$page = $this->_getParam('page');
|
||
if(!empty($page))
|
||
$this->_redirect('/admin/down/offline/page/'.$page);
|
||
else
|
||
$this->_redirect('/admin/down/offline/');
|
||
} else {
|
||
$form->populate($formdata);
|
||
}
|
||
} else {
|
||
$sql="select * from offlineapp where id=?";
|
||
$formdata=$this->db->fetchRow($sql,array($edit));
|
||
$form->submit->setLabel('保存');
|
||
$form->populate($formdata);
|
||
}
|
||
$this->view->form=$form;
|
||
$this->_helper->viewRenderer('offlineadd');
|
||
|
||
} //编辑
|
||
|
||
elseif ($delete) {
|
||
$sql="delete from offlineapp where id='$delete'";
|
||
$sql2="delete from dataorder where offlineappid='$delete'";
|
||
|
||
if($this->db->exec($sql)>0)
|
||
{
|
||
if($this->db->exec($sql2)>0)
|
||
{
|
||
$this->messenger->addMessage('成功删除了数据服务记录,并且删除了关联的申请记录');
|
||
$this->_redirect("/admin/down/offline");
|
||
}
|
||
else
|
||
{
|
||
$this->messenger->addMessage('成功删除了数据服务记录,但并未找到关联的申请记录');
|
||
$this->_redirect("/admin/down/offline");
|
||
}
|
||
}
|
||
else {
|
||
$this->messenger->addMessage('删除失败');
|
||
$this->_redirect("/admin/down/offline");
|
||
}
|
||
}//删除服务记录
|
||
|
||
else if ($down) {
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$sql="select * from offlineapp where ts_approved is not null and pdflink is not null order by ts_created desc";
|
||
$rows=$this->db->fetchAll($sql);
|
||
|
||
foreach($rows as $row){
|
||
$content.='"'.$row['username'].'","'.$row['unit'].'","'.$row['phone'].'","'.$row['address'].'","'.$row['postcode'].'","'.str_replace("\"","'",$row['project']).'","'.str_replace("\"","'",$row['datalist']).'","'.$row['email'].'",'.$row['ts_created']."\r\n";
|
||
}
|
||
|
||
$output = new Output($this->db);
|
||
$output->Download("offlineapp.csv",$content,"string");
|
||
} //下载离线服务记录
|
||
|
||
else if ($update) {
|
||
|
||
$sql = 'select o.id as oid,o.userid,o.username as un,u.email as uemail,o.email,u.realname as rn,u.id as uid from offlineapp o
|
||
right join users u on o.email=u.email
|
||
where o.userid is null and o.ts_approved is not null and o.email is not null';
|
||
$re = $this->db->query($sql);
|
||
$row = $re->fetchAll();
|
||
$s=0;
|
||
foreach ($row as $k=>$v)
|
||
{
|
||
if (empty($v['userid']))
|
||
{
|
||
$sql="update offlineapp set userid='{$v['uid']}' where id='{$v['oid']}'";
|
||
if ($this->db->exec($sql)) $s++;
|
||
}
|
||
}
|
||
$this->messenger->addMessage('提示信息:已有 '.$s.' 条记录被更改');
|
||
|
||
$this->_redirect('/admin/down/offline');
|
||
|
||
}//同步用户账户与离线申请记录
|
||
|
||
else if($show){
|
||
|
||
$sql="select * from offlineapp where id='$show'";
|
||
|
||
$rs = $this->db->query($sql);
|
||
|
||
$row= $rs->fetch();
|
||
|
||
$this->view->infos=$row;
|
||
|
||
$this->_helper->viewRenderer('offlineshow');
|
||
|
||
}//查看单条记录
|
||
|
||
else if($emaillist)
|
||
{
|
||
$sql = "select distinct(t.*) from
|
||
(
|
||
select u.email from dataorder d left join users u on d.userid=u.id where (d.status=0 or d.status=5)
|
||
union
|
||
select o.email from offlineapp o where o.userid is null and o.email is not null
|
||
) as t";
|
||
$re = $this->db->query($sql);
|
||
$rows = $re->fetchAll();
|
||
$filecontent = "";
|
||
foreach($rows as $row){
|
||
$filecontent.=$row['email']."\r\n";
|
||
}
|
||
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
|
||
->setHeader('Content-Disposition','attachment; filename="emails.txt"')
|
||
->setHeader('Content-Length', strlen($filecontent))
|
||
->setHeader('Content-Type','application/force-download')
|
||
->setHeader('Content-Type','application/download')
|
||
->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($filecontent);
|
||
|
||
}//下载邮箱地址列表
|
||
|
||
else if ($monthreport) { //月份上报服务记录,输出格式为excel
|
||
require_once 'PHPExcel.php';
|
||
$objExcel = new PHPExcel();
|
||
$objWriter = new PHPExcel_Writer_Excel5($objExcel);
|
||
//设置文档基本属性
|
||
$objProps = $objExcel->getProperties();
|
||
$objProps->setCreator("westdc");
|
||
$objProps->setLastModifiedBy("westdc");
|
||
$objProps->setTitle("Office XLS Test Document");
|
||
$objProps->setSubject("Office XLS Test Document, Demo");
|
||
$objProps->setDescription("Test document, generated by PHPExcel.");
|
||
$objProps->setKeywords("office excel PHPExcel");
|
||
$objProps->setCategory("Test");
|
||
//设置当前的sheet索引,用于后续的内容操作。
|
||
//一般只有在使用多个sheet的时候才需要显示调用。
|
||
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
|
||
$objExcel->setActiveSheetIndex(0);
|
||
|
||
$objActSheet = $objExcel->getActiveSheet();
|
||
|
||
//设置当前活动sheet的名称
|
||
$objActSheet->setTitle('离线服务记录');
|
||
$sql="select o.username,o.unit,o.phone,o.address,o.postcode,o.project,regexp_replace(o.datalist,'\(.+?MB\)','','g') as datalist,date(o.ts_approved) as date,o.email,o.project_id,o.project_type,o.project_title,sum(m.filesize) as filesize
|
||
from offlineapp o left join dataorder d on o.id=d.offlineappid left join metadata m on d.uuid=m.uuid
|
||
where o.ts_approved>='".date('Y-').(date('m')-1)."-1' and o.ts_approved<'".date('Y-m')."-1' and o.pdflink is not null and o.ts_approved is not null and d.status=5 group by o.id order by o. ts_approved
|
||
";
|
||
$re = $this->db->query($sql);
|
||
$rows = $re->fetchAll();
|
||
foreach ($rows as $i=>$row)
|
||
{
|
||
$k=$i+1;
|
||
$objActSheet->setCellValue('A'.$k, $row['username']);
|
||
$objActSheet->setCellValue('B'.$k, $row['unit']);
|
||
$objActSheet->setCellValue('C'.$k, $row['phone']);
|
||
$objActSheet->setCellValue('D'.$k, $row['address']);
|
||
$objActSheet->setCellValue('E'.$k, $row['postcode']);
|
||
$objActSheet->setCellValue('F'.$k, $row['project']);
|
||
$objActSheet->setCellValue('G'.$k, $row['datalist']);
|
||
$objActSheet->setCellValue('H'.$k, $row['date']);
|
||
$objActSheet->setCellValue('I'.$k, $row['email']);
|
||
$objActSheet->setCellValue('J'.$k, $row['project_id']);
|
||
$objActSheet->setCellValue('K'.$k, $row['project_type']);
|
||
$objActSheet->setCellValue('L'.$k, $row['project_title']);
|
||
$objActSheet->setCellValue('M'.$k, $row['filesize']);
|
||
}
|
||
|
||
//添加一个新的worksheet
|
||
$objExcel->createSheet();
|
||
$objExcel->setActiveSheetIndex(1);
|
||
$objActSheet = $objExcel->getActiveSheet();
|
||
$objActSheet->setTitle('在线服务记录');
|
||
$sql="select o.username,o.unit,o.phone,o.address,o.postcode,o.project,date(o.ts_created) as date,o.email,o.project_id,o.project_type,o.project_title,m.filesize,m.title
|
||
from onlineapp o left join dataorder d on o.id=d.onlineappid left join metadata m on d.uuid=m.uuid
|
||
where o.ts_created>='".date('Y-').(date('m')-1)."-1' and o.ts_created<'".date('Y-m')."-1' and d.status=0 order by o. ts_created
|
||
";
|
||
$re = $this->db->query($sql);
|
||
$rows = $re->fetchAll();
|
||
foreach ($rows as $i=>$row)
|
||
{
|
||
$k=$i+1;
|
||
$objActSheet->setCellValue('A'.$k, $row['username']);
|
||
$objActSheet->setCellValue('B'.$k, $row['unit']);
|
||
$objActSheet->setCellValue('C'.$k, $row['phone']);
|
||
$objActSheet->setCellValue('D'.$k, $row['address']);
|
||
$objActSheet->setCellValue('E'.$k, $row['postcode']);
|
||
$objActSheet->setCellValue('F'.$k, $row['project']);
|
||
$objActSheet->setCellValue('G'.$k, $row['title']);
|
||
$objActSheet->setCellValue('H'.$k, $row['date']);
|
||
$objActSheet->setCellValue('I'.$k, $row['email']);
|
||
$objActSheet->setCellValue('J'.$k, $row['project_id']);
|
||
$objActSheet->setCellValue('K'.$k, $row['project_type']);
|
||
$objActSheet->setCellValue('L'.$k, $row['project_title']);
|
||
$objActSheet->setCellValue('M'.$k, $row['filesize']);
|
||
}
|
||
|
||
/*$objExcel->createSheet();
|
||
$objExcel->setActiveSheetIndex(2);
|
||
$objActSheet = $objExcel->getActiveSheet();
|
||
$objActSheet->setTitle('服务总量');
|
||
$sql="select sum(m.filesize)/1024 from dataorder o left join metadata m on o.uuid=m.uuid
|
||
where o.ts_created>='2012-07-01' and o.ts_created<'2012-8-1' and o.status=0";
|
||
$re = $this->db->query($sql);
|
||
$rows = $re->fetchAll(); */
|
||
//输出内容
|
||
$outputFileName = "westdc-".date('Ym').".xls";
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
//到浏览器
|
||
header("Content-Type: application/force-download");
|
||
header("Content-Type: application/octet-stream");
|
||
header("Content-Type: application/download");
|
||
header('Content-Disposition:inline;filename="'.$outputFileName.'"');
|
||
header("Content-Transfer-Encoding: binary");
|
||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
||
header("Pragma: no-cache");
|
||
$objWriter->save('php://output');
|
||
/*$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
|
||
->setHeader('Content-Disposition','attachment; filename="westdc.xls"')
|
||
//->setHeader('Content-Length', strlen($filecontent))
|
||
->setHeader('Content-Type','application/force-download')
|
||
->setHeader('Content-Type','application/download')
|
||
->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($objWriter->save('php://output'));*/
|
||
}
|
||
|
||
$this->view->page = $this->_getParam('page');
|
||
|
||
$application = new Application();
|
||
|
||
$this->view->q = $application->keyword = $this->_getParam('q');
|
||
$application->filter = $this->_getParam('filter');
|
||
view::addPaginator($application->passed(),$this,20);
|
||
|
||
return true;
|
||
}
|
||
//在线数据下载情况,仅针对onlineapp表,自2011-9-8开始记录。
|
||
function onlineAction()
|
||
{
|
||
$show=(int)$this->_getParam('show');
|
||
$delete=(int)$this->_getParam('delete');
|
||
|
||
if(empty($show) && empty($delete))
|
||
{
|
||
$select=$this->db->select();
|
||
$select->from('onlineapp as o',array('id','userid','unit','username','ts_created','project','project_id','project_type','project_title'))
|
||
->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'));
|
||
$paginator->setItemCountPerPage($this->view->config->page->max);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$count = count($this->db->fetchAll($select));
|
||
$this->view->count=$count;
|
||
}//列表
|
||
|
||
elseif($delete)
|
||
{
|
||
try {
|
||
$sql="delete from onlineapp where id=?";
|
||
$this->db->query($sql,array($delete));
|
||
$sql="delete from dataorder where onlineappid=?";
|
||
$this->db->query($sql,array($delete));
|
||
$this->messenger->addMessage('该记录已删除');
|
||
} catch (Exception $e) {
|
||
$this->messenger->addMessage($e->getMessage());
|
||
}
|
||
$this->_redirect("/admin/down/online/");
|
||
}//删除
|
||
|
||
elseif($show)
|
||
{
|
||
$sql ="select o.*,u.username as uname,u.id as uid,m.title,m.uuid
|
||
from onlineapp as o
|
||
left join users as u on u.id = o.userid
|
||
left join metadata as m on o.uuid = m.uuid
|
||
where o.id=?";
|
||
$result =$this->db->query($sql,$show);
|
||
$rows = $result->fetch();
|
||
$this->view->infos=$rows;
|
||
|
||
$this->_helper->viewRenderer('onlineshow');
|
||
}//查看详细
|
||
}//onlineAction
|
||
|
||
function userAction()
|
||
{
|
||
$show =(int)$this->_getParam('show');
|
||
$search = $this->_getParam('search');
|
||
$keyword = $this->view->keyword = $this->_getParam('keyword');
|
||
|
||
if(empty($show))
|
||
{
|
||
$select=$this->db->select();
|
||
$select->from('dataorder as o','count(o.id) as num')
|
||
->join('users as u', 'u.id = o.userid', array('realname','id as uid','unit'))
|
||
->where('o.status=0 or o.status=5')
|
||
->where('o.userid = u.id');
|
||
if(!empty($search) && !empty($keyword))
|
||
{
|
||
$select ->Where('u.realname like ? or u.unit like ? ','%'.$keyword.'%');
|
||
$this->view->title='“'.$keyword.'”的搜索结果 :';
|
||
}
|
||
$select ->group('uid')
|
||
->group('realname')
|
||
->group('unit')
|
||
->order('num 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_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$count = count($this->db->fetchAll($select));
|
||
$this->view->count=$count;
|
||
}//列表
|
||
|
||
elseif($show)
|
||
{
|
||
$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','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')
|
||
->order('o.id 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;
|
||
|
||
$sql="select username,realname from users where id='$show'";
|
||
$re=$this->db->query($sql);
|
||
$t=$re->fetch();
|
||
$this->view->infos=$t;
|
||
|
||
$this->_helper->viewRenderer('showuser');
|
||
}//查看单个用户的下载记录
|
||
|
||
}//userAction 用户下载情况
|
||
|
||
function dataAction()
|
||
{
|
||
$show = $this->_getParam('show');
|
||
$search = $this->_getParam('search');
|
||
$keyword = $this->view->keyword = $this->_getParam('keyword');
|
||
|
||
if(empty($show))
|
||
{
|
||
$select=$this->db->select();
|
||
$select->from('dataorder as o','count(o.id) as num')
|
||
->join('metadata as m', 'o.uuid = m.uuid', array('title','uuid'))
|
||
->where('o.uuid = m.uuid and (o.status=0 or o.status=5)');
|
||
if(!empty($search) && !empty($keyword))
|
||
{
|
||
$select ->Where('m.title like ? or m.title_en like ?','%'.$keyword.'%');
|
||
$this->view->title='“'.$keyword.'”的搜索结果 :';
|
||
}
|
||
$select ->group('m.title')
|
||
->group('m.uuid')
|
||
->order('num desc');
|
||
$paginator = Zend_Paginator::factory($select);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(20);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$count = count($this->db->fetchAll($select));
|
||
$this->view->count=$count;
|
||
|
||
}//数据下载情况列表
|
||
|
||
elseif($show)
|
||
{
|
||
$select=$this->db->select();
|
||
$select->from('dataorder as o',array('ts_created','ts_created','offlineappid','onlineappid'))
|
||
->join('metadata as m', 'o.uuid = m.uuid', array('title','uuid'))
|
||
->join('users as u', 'o.userid=u.id',array('id as userid','username','realname'))
|
||
->where('m.uuid = ? and (o.status=0 or o.status=5)', $show)
|
||
->order('o.id 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;
|
||
|
||
$sql="select title,uuid from metadata where uuid='$show'";
|
||
$re=$this->db->query($sql);
|
||
$t=$re->fetch();
|
||
$this->view->infos=$t;
|
||
|
||
$this->_helper->viewRenderer('showdata');
|
||
}//查看单个数据下载情况
|
||
|
||
}//dataAction 数据下载情况
|
||
|
||
|
||
/*
|
||
* 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 m.title,m.description,g.id as gid,mds.status as mdstatus,m.uuid FROM normalmetadata m
|
||
LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid
|
||
LEFT JOIN mdstatus mds ON m.uuid=mds.uuid
|
||
WHERE m.uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid));
|
||
$metadata = $sth->fetch();
|
||
|
||
if(empty($metadata['uuid']))
|
||
{
|
||
$this->view->error = "数据不存在或者您可能没有该数据的管理权限";
|
||
return true;
|
||
}
|
||
|
||
$this->view->metadata = $metadata;
|
||
|
||
$sql = "select distinct 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);
|
||
$mail->addTo($v['email']);
|
||
//$mail->addTo("Jack@sookon.com");
|
||
if($mail->send())
|
||
{
|
||
echo $v['email']."...发送成功!<br />";
|
||
}else{
|
||
echo $v['email']."...发送失败!<br />";
|
||
}
|
||
}
|
||
}
|
||
}//sendmailAction() 为下载过某数据的用户发送邮件
|
||
|
||
function searchAction()
|
||
{
|
||
$search = $this->_getParam('search');
|
||
$keyword = $this->view->keyword = $this->_getParam('keyword');
|
||
|
||
$select=$this->db->select();
|
||
|
||
if(!empty($search) && !empty($keyword))
|
||
{
|
||
|
||
$select ->from('onlineapp as o',array('id','userid','unit','username','ts_created','project'))
|
||
->Where('o.username like ? ','%'.$keyword.'%')
|
||
->orWhere('o.unit like ? ','%'.$keyword.'%')
|
||
->orWhere('o.project like ? ','%'.$keyword.'%')
|
||
->orWhere('m.title like ? ','%'.$keyword.'%')
|
||
->join('metadata as m', 'o.uuid = m.uuid', array('title','uuid'))
|
||
->order('o.id desc');
|
||
|
||
$paginator = Zend_Paginator::factory($select);
|
||
$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('online');
|
||
|
||
$count = count($this->db->fetchAll($select));
|
||
$this->view->count=$count;
|
||
$this->view->title='搜索结果 :';
|
||
}
|
||
else {
|
||
$this->_redirect("/admin/down/online");
|
||
}
|
||
|
||
}//searchAction 搜索
|
||
|
||
function updateAction(){
|
||
|
||
/*$select=$this->db->select();
|
||
$select ->from('offlineapp as o',array('username as un','email'))
|
||
->join('users as u','u.email=o.email')
|
||
->where('o.userid is null and o.ts_approved is not null and o.email is not null');*/
|
||
|
||
$sql = 'select o.id as oid,o.userid,o.username as un,u.email as uemail,o.email,u.realname as rn,u.id as uid from offlineapp o
|
||
right join users u on o.email=u.email
|
||
where o.userid is null and o.ts_approved is not null and o.email is not null';
|
||
$re = $this->db->query($sql);
|
||
$row = $re->fetchAll();
|
||
|
||
foreach ($row as $k=>$v)
|
||
{
|
||
if (empty($v['userid']))
|
||
{
|
||
$sql="update offlineapp set userid='{$v['uid']}' where id='{$v['oid']}'";
|
||
$row[$k]['sql']=$sql;
|
||
//$re=$this->db-exec($sql);
|
||
}
|
||
}
|
||
|
||
$paginator = Zend_Paginator::factory($row);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(20);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$count = count($row);
|
||
$this->view->count=$count;
|
||
|
||
$this->_helper->viewRenderer('update');
|
||
|
||
}
|
||
function fixofflineAction(){
|
||
|
||
$fix = $this->_getParam('fix');
|
||
$orders = $this->_getParam('orders');
|
||
$nouserid= $this->_getParam('nouserid');
|
||
|
||
if($fix)
|
||
{
|
||
if(!empty($orders))
|
||
{
|
||
$num=0;
|
||
foreach ($orders as $k=>$v)
|
||
{
|
||
$ex=split(',',$v);
|
||
$sql="update offlineapp set userid='{$ex[0]}' where id='{$ex[1]}'";
|
||
if($this->db->exec($sql))
|
||
$num++;
|
||
}
|
||
$this->messenger->addMessage('已经匹配了'.$num.'条记录');
|
||
$this->_redirect("/admin/down/fixoffline");
|
||
}
|
||
else {
|
||
$this->messenger->addMessage('请选择要匹配的条目');
|
||
$this->_redirect("/admin/down/fixoffline");
|
||
}
|
||
}
|
||
|
||
|
||
if($nouserid)
|
||
{
|
||
$sql = "select * from offlineapp where userid is null";
|
||
$re = $this->db->query($sql);
|
||
$row = $re->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($row);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(20);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$count = count($row);
|
||
$this->view->count=$count;
|
||
|
||
$this->_helper->viewRenderer('nouserid');
|
||
}
|
||
else{
|
||
$sql = "select o.id as oid,o.username as un,o.unit as uu,u.username,u.realname rn,u.unit,u.id as uid
|
||
from offlineapp o right join users u on trim(o.username)=trim(u.realname)
|
||
where o.userid is null and o.id>0
|
||
order by o.id";
|
||
|
||
$re = $this->db->query($sql);
|
||
$row = $re->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($row);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(20);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$count = count($row);
|
||
$this->view->count=$count;
|
||
}
|
||
|
||
|
||
}//fixofflineAction 用户匹配
|
||
|
||
|
||
public function jsonexit($data){
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
|
||
return true;
|
||
}
|
||
}
|
||
|