2010-11-08 02:15:39 +00:00
< ? 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' );
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
2010-11-30 06:12:12 +00:00
if ( $has_ftp1 ) {
2010-11-08 02:15:39 +00:00
$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 ) {
2011-04-19 08:47:20 +00:00
$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 );
2010-11-08 02:15:39 +00:00
}
$select = $this -> db -> select ();
2011-04-19 08:47:20 +00:00
$select -> from ( 'offlineapp' ) -> where ( 'ts_approved is null' ) -> where ( 'pdflink is not null and status>=0' ) -> order ( 'ts_created desc' );
2010-11-08 02:15:39 +00:00
$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 ){
2011-09-06 08:27:57 +00:00
$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 " ;
2010-11-08 02:15:39 +00:00
}
$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 ();
2011-04-19 08:47:20 +00:00
$select -> from ( 'offlineapp' ) -> where ( 'ts_approved is not null' ) -> where ( 'pdflink is not null and status>=0' ) -> order ( 'ts_created desc' );
2010-11-08 02:15:39 +00:00
$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 ;
}
2011-09-10 15:09:13 +00:00
//在线数据下载情况, 仅针对onlineapp表, 自2011-9-8开始记录。
function onlineAction ()
{
2011-09-14 05:07:25 +00:00
$show = ( int ) $this -> _getParam ( 'show' );
$delete = ( int ) $this -> _getParam ( 'delete' );
if ( empty ( $show ) && empty ( $delete ))
2011-09-13 02:51:34 +00:00
{
$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 ;
2011-09-14 09:50:39 +00:00
$count = count ( $this -> db -> fetchAll ( $select ));
$this -> view -> count = $count ;
2011-09-13 02:51:34 +00:00
} //列表
2011-09-10 15:09:13 +00:00
2011-09-14 05:07:25 +00:00
elseif ( $delete )
2011-09-13 02:51:34 +00:00
{
$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/ " );
} //删除
2011-09-14 05:07:25 +00:00
elseif ( $show )
2011-09-13 02:51:34 +00:00
{
$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 = ? " ;
2011-09-14 05:07:25 +00:00
$result = $this -> db -> query ( $sql , $show );
2011-09-13 02:51:34 +00:00
$rows = $result -> fetch ();
$this -> view -> infos = $rows ;
$this -> _helper -> viewRenderer ( 'onlineshow' );
} //查看详细
} //onlineAction
function userAction ()
{
2011-09-15 02:14:06 +00:00
$show = ( int ) $this -> _getParam ( 'show' );
$search = $this -> _getParam ( 'search' );
$keyword = $this -> view -> keyword = $this -> _getParam ( 'keyword' );
2011-09-13 02:51:34 +00:00
2011-09-14 05:07:25 +00:00
if ( empty ( $show ))
2011-09-13 02:51:34 +00:00
{
$select = $this -> db -> select ();
$select -> from ( 'onlineapp as o' , 'count(o.id) as num' )
-> join ( 'users as u' , 'u.id = o.userid' , array ( 'realname' , 'id as uid' ))
2011-09-15 02:14:06 +00:00
-> where ( 'o.userid = u.id' );
if ( ! empty ( $search ) && ! empty ( $keyword ))
{
$select -> Where ( 'u.realname like ? ' , '%' . $keyword . '%' );
$this -> view -> title = '“' . $keyword . '”的搜索结果 :' ;
}
$select -> group ( 'uid' )
2011-09-13 02:51:34 +00:00
-> group ( 'realname' )
-> order ( 'num desc' );
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
2011-09-14 05:07:25 +00:00
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
2011-09-13 02:51:34 +00:00
$paginator -> setView ( $this -> view );
2011-09-15 02:17:39 +00:00
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
2011-09-13 02:51:34 +00:00
$this -> view -> paginator = $paginator ;
2011-09-15 02:14:06 +00:00
$count = count ( $this -> db -> fetchAll ( $select ));
$this -> view -> count = $count ;
2011-09-13 02:51:34 +00:00
} //列表
2011-09-14 05:07:25 +00:00
elseif ( $show )
2011-09-13 02:51:34 +00:00
{
$select = $this -> db -> select ();
2011-09-14 05:07:25 +00:00
$select -> from ( 'onlineapp as o' , array ( 'id' , 'username' , 'ts_created' , 'userid' ))
2011-09-13 02:51:34 +00:00
-> join ( 'metadata as m' , 'o.uuid = m.uuid' , array ( 'title' , 'uuid' ))
2011-09-14 05:07:25 +00:00
-> where ( 'o.userid = ?' , $show )
2011-09-13 02:51:34 +00:00
-> order ( 'o.id desc' );
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
2011-09-14 05:07:25 +00:00
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
2011-09-13 02:51:34 +00:00
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
2011-09-14 05:07:25 +00:00
$sql = " select username,realname from users where id=' $show ' " ;
2011-09-13 02:51:34 +00:00
$re = $this -> db -> query ( $sql );
$t = $re -> fetch ();
$this -> view -> infos = $t ;
$this -> _helper -> viewRenderer ( 'showuser' );
} //查看单个用户的下载记录
} //userAction 用户下载情况
function dataAction ()
{
2011-09-15 02:14:06 +00:00
$show = $this -> _getParam ( 'show' );
$search = $this -> _getParam ( 'search' );
$keyword = $this -> view -> keyword = $this -> _getParam ( 'keyword' );
2011-09-14 05:07:25 +00:00
if ( empty ( $show ))
2011-09-13 02:51:34 +00:00
{
$select = $this -> db -> select ();
2011-09-14 08:23:26 +00:00
$select -> from ( 'dataorder as o' , 'count(o.id) as num' )
2011-09-13 02:51:34 +00:00
-> join ( 'metadata as m' , 'o.uuid = m.uuid' , array ( 'title' , 'uuid' ))
2011-09-15 02:14:06 +00:00
-> where ( 'o.uuid = m.uuid and (o.status=0 or o.status=5)' );
if ( ! empty ( $search ) && ! empty ( $keyword ))
{
$select -> Where ( 'm.title like ? ' , '%' . $keyword . '%' );
$this -> view -> title = '“' . $keyword . '”的搜索结果 :' ;
}
$select -> group ( 'm.title' )
2011-09-13 02:51:34 +00:00
-> group ( 'm.uuid' )
-> order ( 'num desc' );
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
2011-09-15 02:14:06 +00:00
$paginator -> setItemCountPerPage ( 20 );
2011-09-13 02:51:34 +00:00
$paginator -> setView ( $this -> view );
2011-09-15 02:14:06 +00:00
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
2011-09-13 02:51:34 +00:00
$this -> view -> paginator = $paginator ;
2011-09-15 02:14:06 +00:00
$count = count ( $this -> db -> fetchAll ( $select ));
$this -> view -> count = $count ;
2011-09-13 02:51:34 +00:00
} //数据下载情况列表
2011-09-14 05:07:25 +00:00
elseif ( $show )
2011-09-13 02:51:34 +00:00
{
$select = $this -> db -> select ();
2011-09-14 08:23:26 +00:00
$select -> from ( 'dataorder as o' , array ( 'ts_created' ))
2011-09-13 02:51:34 +00:00
-> join ( 'metadata as m' , 'o.uuid = m.uuid' , array ( 'title' , 'uuid' ))
2011-09-14 08:23:26 +00:00
-> 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 )
2011-09-13 02:51:34 +00:00
-> order ( 'o.id desc' );
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
2011-09-14 08:23:26 +00:00
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
2011-09-13 02:51:34 +00:00
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
2011-09-14 08:23:26 +00:00
$sql = " select title,uuid from metadata where uuid=' $show ' " ;
2011-09-13 02:51:34 +00:00
$re = $this -> db -> query ( $sql );
$t = $re -> fetch ();
$this -> view -> infos = $t ;
$this -> _helper -> viewRenderer ( 'showdata' );
} //查看单个数据下载情况
} //dataAction 数据下载情况
2011-09-14 09:50:39 +00:00
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 搜索
2010-11-08 02:15:39 +00:00
}