westdc-zf1/application/admin/controllers/DownController.php

673 lines
25 KiB
PHP
Raw Normal View History

<?php
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();
}
function postDispatch()
{
$this->view->messages = $this->messenger->getMessages();
}
function indexAction()
{
//其他连接
}
//离线数据申请管理
function offlineappAction()
{
$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');
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) {
$sql="update dataorder set status=4 where offlineappid=?";
$this->db->query($sql,array($start));
$sql="select * from offlineapp where id=?";
$row=$this->db->fetchRow($sql,array($start));
//发送用户邮件进行信息提示和说明
$mail = new WestdcMailer($this->view->config->smtp);
$body=file_get_contents($this->view->config->offline->email->start_template);
$body=str_replace("[username]",$row['username'],$body);
$body=str_replace("[datalist]",str_replace(";","\n",$row['datalist']),$body);
$mail->setBodyText($body);
$mail->addTo($row['email']);
$mail->setSubject('西部数据中心已收到您的纸质离线申请');
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->send();
//提示信息
$this->messenger->addMessage('提示信息:该离线数据已经开始处理,请在处理完成后点击“完成”。');
$this->_redirect('/admin/down/offlineapp/'.$page);
} elseif ($finish) {
try {
$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";
$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;
foreach($rs as $data) {
if ($data['host']=='ftp1.westgis.ac.cn')
$has_ftp1=true;
// deal with ftp.westgis.ac.cn, use g6 to add path
// todo ...
}
//deal with ftp1 account
if ($has_ftp1) {
$user=(object)array("id"=>$row['userid'],
"username"=>"westdc_".$row['userid'],
"password"=>md5('westdc'.$row['userid'].rand(1000,9999)),
"time"=>date('Y-m-d H:i:s', strtotime('+2 week')),
//"path"=>$path,
"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);
$this->messenger->addMessage('提示信息:该用户申请的数据过多,请检查该用户之前已完成的申请。');
}
//发送用户邮件进行信息提示和说明
$mail = new WestdcMailer($this->view->config->smtp);
$body=file_get_contents($this->view->config->offline->email->finish_template);
$body=str_replace("[username]",$row['username'],$body);
$body=str_replace("[datalist]",str_replace(";","\n",$row['datalist']),$body);
$body=str_replace("[ftpuser]",$user->username,$body);
$body=str_replace("[ftppwd]",$proftp->pwd,$body);
$body=str_replace("[ftptime]",$proftp->time,$body);
$mail->setBodyText($body);
$mail->addTo($row['email']);
$mail->setSubject('西部数据中心已开通了您的离线申请');
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
$mail->send();
} //ftp1 deal
$this->messenger->addMessage('提示信息:该离线数据已经处理完成。');
} catch (Exception $e) {
//提示信息
$this->messenger->addMessage($e->getMessage());
$this->messenger->addMessage('提示信息:该数据有可能还没有收到纸质申请表。');
}
$this->_redirect('/admin/down/offlineapp/'.$page);
} elseif ($cancel) {
//取消=删除?
//用户提出申请的取消操作
//$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));
$this->messenger->addMessage('提示信息:已删除该用户离线申请。');
$this->_redirect('/admin/down/offlineapp/'.$page);
} elseif ($deny) {
$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));
$this->messenger->addMessage('提示信息:已拒绝该用户离线申请。');
$this->_redirect('/admin/down/offlineapp/'.$page);
} else if($reset){
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' and offlineappid='$reset'";
if($this->db->exec($sql)>0)
{
$this->messenger->addMessage('已经成功对该申请重置');
$this->_redirect('/admin/down/offlineapp/');
}
else {
$this->messenger->addMessage('没有找到对应数据,无法进行重置,可能是旧记录没有匹配数据造成的');
$this->_redirect('/admin/down/offlineapp/');
}
}//elseif
//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";
$rs=$this->db->query($select);
$rows=$rs->fetchAll();
$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.phtml');
$this->view->paginator=$paginator;
}
//离线数据服务记录
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');
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) values(?,?,?,?,?,?,?,?,?,?,now())";
$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']));
$this->messenger->addMessage('提示信息:您已经成功添加该离线服务记录。');
$this->_redirect('/admin/down/offline');
} else {
$form->populate($formdata);
}
}
$this->view->form=$form;
$this->_helper->viewRenderer('offlineadd');
2011-09-29 02:28:27 +00:00
} //添加服务记录
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=? 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[]=$edit;
$this->db->query($sql,$param);
$this->messenger->addMessage('提示信息:您已经编辑添加该记录。');
$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');
2011-09-29 02:28:27 +00:00
} //编辑
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");
}
2011-09-29 02:28:27 +00:00
}//删除服务记录
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['postcoe'].'","'.str_replace("\"","'",$row['project']).'","'.str_replace("\"","'",$row['datalist']).'","'.$row['email'].'",'.$row['ts_approved']."\n";
}
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
->setHeader('Content-Disposition','attachment; filename="offlineapp.csv"')
->setHeader('Content-Length', strlen($content))
->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($content);
2011-09-29 02:28:27 +00:00
} //下载离线服务记录
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');
}//同步用户账户与离线申请记录
2011-09-29 02:28:27 +00:00
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');
}//查看单条记录
2011-09-29 02:28:27 +00:00
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);
}//下载邮箱地址列表
2011-09-29 02:28:27 +00:00
$select=$this->db->select();
$select->from('offlineapp')->where('ts_approved is not null')->where('pdflink is not null')->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;
}
//在线数据下载情况仅针对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'))
->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($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)
{
$sql="delete from onlineapp where id=?";
try {
$this->db->query($sql,array($id));
$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'))
->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 数据下载情况
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 用户匹配
}