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); $datalist=str_replace(";","\n",$row['datalist']); $mailtp=new EmailText($this->db,'offline-start',array('user'=>$row['username'],'datalist'=>$datalist)); $mail->setBodyText($mailtp->getBody()); $mail->setSubject($mailtp->getSubject()); $mail->addTo($row['email']); $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); $mail->send(); $sql="select distinct(res.email) from dataorder d left join role on d.uuid=role.uuid left join responsible res on role.resid=res.id where d.offlineappid=? and role.role in ('pointOfContact','resourceProvider')"; $rows=$this->db->fetchAll($this->db->quoteInto($sql,$start)); $addrs=array(); foreach($rows as $row) { $addrs[]=$row['email']; } //收件人邮箱 $addrs[] = 'nztong@lzb.ac.cn'; $addrs[] = 'wjian@lzb.ac.cn'; $addrs[] = 'lixin@lzb.ac.cn'; $mailtp=new EmailText($this->db,'offline-start-admin',array('user'=>$row['username'],'datalist'=>$datalist)); $mail->setBodyText($mailtp->getBody()); $mail->setSubject($mailtp->getSubject()); $mail->addTo($addrs); $mail->addCc($this->view->config->service->email,'西部数据中心服务组'); $filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/admin/down/offlineapp/view/'.$start); $mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'offlineapp.pdf'); $mail->send(); //提示信息 $this->messenger->addMessage('提示信息:该离线数据已经开始处理,并发送邮件给申请人以及数据管理委员会,请在处理完成后点击“完成”。'); $this->_redirect('/admin/down/offlineapp/'.$page); } elseif ($finish) { try { $sql="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); //实例化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)); $mail->setBodyText($mailtp->getBody()); $mail->setFrom($this->view->config->service->email,'西部数据中心服务组'); $mail->addTo($row['email']); $mail->setSubject($mailtp->getSubject()); $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'); } //添加服务记录 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"); } }//删除服务记录 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_created']."\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'); }//查看单条记录 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); }//下载邮箱地址列表 $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 用户匹配 }