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

1019 lines
36 KiB
PHP
Raw Permalink 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
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 offlineappAction()
{
set_time_limit(0);
include_once("Dataorder.php");
$DO = new Dataorder($this->db);
$finish =(int)$this->_getParam('finish');
$deny =(int)$this->_getParam('deny');
$page =(int)$this->_getParam('page');
$ac = $this->_getParam('ac');
$q = $this->_getParam('q');
$submd=$this->view->config->sub->metadata;
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 ($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']=='ftp.sanjiangyuan.org.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"=>"sjy_".$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"=>"sjy_".$row['userid'],
"password"=>$password,
"time"=>date('Y-m-d H:i:s', strtotime('+2 week')),
//"path"=>$path,
"param"=>"offlineappid=".$finish,
"host"=>'ftp.sanjiangyuan.org.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://ftp.sanjiangyuan.org.cn';
} else if ($has_ftp1 && $has_ftp2)
{
$ftphost='ftp://ftp1.westgis.ac.cn 以及 ftp://ftp.sanjiangyuan.org.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 ($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));
$data = array(
'msg' => '已删除该用户离线申请',
'finish' => $deny
);
$this->jsonexit($data);
return true;
//$this->messenger->addMessage('提示信息:已拒绝该用户离线申请。');
//$this->_redirect('/admin/down/offlineapp/'.$page);
}//拒绝
$keyword = "";
if(!empty($q))
{
$keyword = $q;
}
$application = new \Order\Manager\Application;
$rows = $application->fetchByData($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');
$submd=$this->view->config->sub->metadata;
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) and d.uuid in (select uuid from $submd)
union
select o.email from offlineapp o where o.userid is null and o.email is not null and o.id in (select offlineappid from dataorder where uuid in (select uuid from $submd))
) 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('离线服务记录');
if (date('m')==1)
{
$ym=(date('Y')-1).'-12-1';
} else {
$ym=date('Y-').(date('m')-1).'-1';
}
$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>='".$ym."' 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>='".$ym."' 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');
$submd=$this->view->config->sub->metadata;
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($submd.' 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 $submd 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');
$submd=$this->view->config->sub->metadata;
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.uuid in (select uuid from $submd)")
->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($submd.' 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');
$submd=$this->view->config->sub->metadata;
if(empty($show))
{
$select=$this->db->select();
$select->from('dataorder as o','count(o.id) as num')
->join($submd.' 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($submd.' 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 $submd 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.status in (0,5) and d.ts_approved 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;
}
}