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'); 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) { //todo } $select=$this->db->select(); $select->from('offlineapp')->where('ts_approved is null')->where('pdflink is not null')->order('ts_created desc'); $paginator = Zend_Paginator::factory($select); $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'); 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=?"; try { $this->db->query($sql,array($delete)); $this->messenger->addMessage('提示信息:您已经成功删除该服务记录。'); } catch (Exception $e) { $this->messenger->addMessage($e->getMessage()); } $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'].'","'.$row['project'].'","'.$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); } $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; } }