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

631 lines
24 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
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');
} 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');
} 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");
}
}elseif ($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);
} 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');
}//查看单条记录
$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 用户匹配
}