2011-09-20 03:57: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 ()
{
2012-08-27 01:54:38 +00:00
2011-09-20 03:57:39 +00:00
$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' );
2012-03-12 09:44:13 +00:00
$reset = ( int ) $this -> _getParam ( 'reset' );
2012-02-16 03:43:28 +00:00
$status = ( int ) $this -> _getParam ( 'status' );
2011-09-20 03:57:39 +00:00
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 ) {
2012-08-27 01:54:38 +00:00
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$page = $this -> _request -> getParam ( 'page' );
2012-11-02 14:35:13 +00:00
$sql = " update dataorder set status=4,ts_received=now() where offlineappid=? " ;
2011-09-20 03:57:39 +00:00
$this -> db -> query ( $sql , array ( $start ));
$sql = " select * from offlineapp where id=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( $start ));
2012-05-09 16:12:37 +00:00
$username = $row [ 'username' ];
2011-09-20 03:57:39 +00:00
//发送用户邮件进行信息提示和说明
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
2011-12-05 08:00:57 +00:00
$datalist = str_replace ( " ; " , " \n " , $row [ 'datalist' ]);
2012-05-09 16:12:37 +00:00
$mailtp = new EmailText ( $this -> db , 'offline-start' , array ( 'user' => $username , 'datalist' => $datalist ));
2011-12-05 08:00:57 +00:00
$mail -> setBodyText ( $mailtp -> getBody ());
2011-10-26 15:01:51 +00:00
$mail -> setSubject ( $mailtp -> getSubject ());
2011-12-08 09:22:54 +00:00
$mail -> addTo ( $row [ 'email' ]);
2011-09-20 03:57:39 +00:00
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-01-09 09:10:07 +00:00
$mail -> send ();
2012-05-09 16:12:37 +00:00
$sql = " select pdflink from offlineapp where id=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( $start ));
$filecontent = file_get_contents ( $this -> view -> config -> offline -> savepath . " / " . $row [ 'pdflink' ]);
//对每条数据的管理员用户发送相应的邮件通知,同一用户的邮件需要合并
//需要取出对应数据的标题、uuid, 以及对应的作者的email( 一条数据可能有多个作者, 一次申请可能有多条数据对应同一个作者)
2012-05-30 01:49:17 +00:00
//邮件中应提示用户可以选择是否委托给数据中心进行管理(这样以后就不接受相应的管理邮件,但用户仍然可以自主取消此选择)
2012-05-15 07:49:16 +00:00
$uuid_done = " " ;
2012-05-30 01:49:17 +00:00
// 0. 处理专题数据集
$sql = " select s.admin_email as email,m.title,d.uuid,s.title as sourcetitle from dataorder d left join datasource ds on d.uuid=ds.uuid
left join source s on ds . sourceid = s . id left join metadata m on d . uuid = m . uuid
where d . offlineappid = ? and s . admin_status = 1 and d . uuid <> all ( s . exclude_data )
order by s . admin_email , m . title " ;
$rows = $this -> db -> fetchAll ( $this -> db -> quoteInto ( $sql , $start ));
2012-05-15 07:49:16 +00:00
$tmp_email = '' ;
2012-05-30 01:49:17 +00:00
$data = '' ;
2012-05-15 07:49:16 +00:00
$source = '' ;
foreach ( $rows as $row )
{
if ( $tmp_email != $row [ 'email' ])
{
if ( ! empty ( $data ))
{
//发送之前的用户申请审核邮件
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-subject' , array ( 'user' => $username , 'datalist' => $data , 'source' => $source ));
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> setBodyText ( $mailtp -> getBody ());
2012-05-30 01:49:17 +00:00
$mail -> setSubject ( $mailtp -> getSubject ());
2012-05-15 07:49:16 +00:00
$mail_addrs = explode ( " , " , substr ( $tmp_email , 1 , - 1 ));
$mail -> addTo ( $mail_addrs );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
2012-05-30 01:49:17 +00:00
$data = " " ;
2012-05-15 07:49:16 +00:00
$source = " " ;
}
2012-05-30 01:49:17 +00:00
$tmp_email = $row [ 'email' ];
2012-05-15 07:49:16 +00:00
$source = $row [ 'sourcetitle' ];
}
$data .= " 数据名称: " . $row [ 'title' ] . " \n " ;
2012-05-30 01:49:17 +00:00
$data .= " \t 数据地址: http://westdc.westgis.ac.cn/data/ " . $row [ 'uuid' ] . " \n \n " ;
2012-05-15 07:56:46 +00:00
$uuid_done .= " ' " . $row [ 'uuid' ] . " ', " ;
2012-05-15 07:49:16 +00:00
}
//发送最后一封邮件
if ( ! empty ( $data ))
{
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-author' , array ( 'user' => $username , 'datalist' => $data , 'source' => $source ));
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> setBodyText ( $mailtp -> getBody ());
2012-05-30 01:49:17 +00:00
$mail -> setSubject ( $mailtp -> getSubject ());
2012-05-15 07:49:16 +00:00
$mail_addrs = explode ( " , " , substr ( $tmp_email , 1 , - 1 ));
$mail -> addTo ( $mail_addrs );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
2012-05-30 01:49:17 +00:00
}
2012-05-15 07:49:16 +00:00
// 1. 处理有数据作者且自行管理的数据并且未被0处理过的
2012-05-09 16:12:37 +00:00
$sql = " select u.email,m.title,d.uuid,a.activation from dataorder d left join mdstatus s on d.uuid=s.uuid left join users u on s.userid=u.id
2012-05-30 01:49:17 +00:00
left join metadata m on m . uuid = d . uuid left join mdauthor a on a . uuid = d . uuid
where d . offlineappid = ? and s . status = 6 and a . userid = s . userid " ;
if ( ! empty ( $uuid_done )) $sql .= " and d.uuid not in ( " . substr ( $uuid_done , 0 , - 1 ) . " ) " ;
2012-05-15 08:05:42 +00:00
$sql .= " order by u.email,m.title " ;
2012-01-09 09:10:07 +00:00
$rows = $this -> db -> fetchAll ( $this -> db -> quoteInto ( $sql , $start ));
2012-05-09 16:12:37 +00:00
$tmp_email = '' ;
$data = '' ;
2012-01-09 09:10:07 +00:00
foreach ( $rows as $row )
{
2012-05-09 16:12:37 +00:00
if ( $tmp_email != $row [ 'email' ])
{
if ( ! empty ( $data ))
{
//发送之前的用户申请审核邮件
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-author' , array ( 'user' => $username , 'datalist' => $data ));
2012-05-10 02:00:54 +00:00
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-05-09 16:12:37 +00:00
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> addTo ( $tmp_email );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
$data = " " ;
}
$tmp_email = $row [ 'email' ];
}
$data .= " 数据名称: " . $row [ 'title' ] . " \n " ;
$data .= " \t 数据地址: http://westdc.westgis.ac.cn/data/ " . $row [ 'uuid' ] . " \n " ;
$data .= " \t 如您不想收到此类数据申请审核的邮件,您可以将该数据委托给数据中心代为审核,委托后您也可以随时撤销此委托以便继续自行管理。 \n " ;
$data .= " \t 如想委托给数据中心, 请访问此网址: http://westdc.westgis.ac.cn/author/delegate/uuid/ " . $row [ 'uuid' ] . " \n " ;
2012-05-30 01:49:17 +00:00
$data .= " \t 撤销委托方法:进入数据中心->数据作者->我的数据,在该数据条上撤销委托。 \n \n " ;
2012-05-15 07:49:16 +00:00
$uuid_done .= " ' " . $row [ 'uuid' ] . " ', " ;
2012-05-09 16:12:37 +00:00
}
//发送最后一封邮件
if ( ! empty ( $data ))
{
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-author' , array ( 'user' => $username , 'datalist' => $data ));
2012-05-10 02:00:54 +00:00
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-05-09 16:12:37 +00:00
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> addTo ( $tmp_email );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
}
// 2. 处理委托数据中心进行管理的数据
2012-05-30 01:49:17 +00:00
$sql = " select m.title,d.uuid from dataorder d left join mdstatus s on d.uuid=s.uuid left join metadata m on m.uuid=d.uuid
2012-05-15 07:49:16 +00:00
left join datasource ds on ds . uuid = d . uuid left join source on ds . sourceid = source . id
2012-05-30 01:49:17 +00:00
where d . offlineappid = ? and ( s . status = 7 or source . admin_status = 2 ) " ;
if ( ! empty ( $uuid_done )) $sql .= " and d.uuid not in ( " . substr ( $uuid_done , 0 , - 1 ) . " ) " ;
2012-05-15 08:05:42 +00:00
$sql .= " order by m.title " ;
2012-05-09 16:12:37 +00:00
$rows = $this -> db -> fetchAll ( $this -> db -> quoteInto ( $sql , $start ));
$data = " " ;
foreach ( $rows as $row )
{
$data .= " 数据名称: " . $row [ 'title' ] . " \n " ;
2012-05-30 01:49:17 +00:00
$data .= " \t 数据地址: http://westdc.westgis.ac.cn/data/ " . $row [ 'uuid' ] . " \n \n " ;
2012-05-15 07:49:16 +00:00
$uuid_done .= " ' " . $row [ 'uuid' ] . " ', " ;
2012-05-09 16:12:37 +00:00
}
if ( ! empty ( $data ))
{
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-dcadmin' , array ( 'user' => $username , 'datalist' => $data ));
2012-05-10 02:00:54 +00:00
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-05-09 16:12:37 +00:00
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$addrs = array ();
$addrs [] = 'nztong@lzb.ac.cn' ;
$addrs [] = 'wjian@lzb.ac.cn' ;
$addrs [] = 'lixin@lzb.ac.cn' ;
$mail -> addTo ( $addrs );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
}
// 3. 未认证的数据, 即无明确的数据管理者, 从元数据提取对应管理者的email信息进行管理
//无数据作者的数据,根据元数据中的联系人信息发送相应的管理邮件,发送策略是多发还是少发?
//发送管理邮件同时建议用户认证为数据的作者,可以有更多的管理选择,同时邮件中应该有详细的说明为什么会收到此邮件
2012-05-14 05:50:25 +00:00
$sql = " select distinct res.email,d.uuid,m.title,role.role from dataorder d left join role on d.uuid=role.uuid left join responsible res on role.resid=res.id
2012-05-15 07:49:16 +00:00
left join metadata m on d . uuid = m . uuid where length ( res . email ) > 4 and d . offlineappid = ?
2012-05-30 01:49:17 +00:00
and role . role in ( 'pointOfContact' , 'custodian' , 'resourceProvider' , 'owner' , 'distributor' , 'publisher' , 'author' ) " ;
if ( ! empty ( $uuid_done )) $sql .= " and d.uuid not in ( " . substr ( $uuid_done , 0 , - 1 ) . " ) " ;
2012-05-15 08:05:42 +00:00
$sql .= " order by m.title,res.email " ;
2012-05-09 16:12:37 +00:00
$rows = $this -> db -> fetchAll ( $this -> db -> quoteInto ( $sql , $start ));
unset ( $addrs );
$md = array ();
$tmp_title = '' ;
$role = array ();
$role [ 'pointOfContact' ] = array ();
$role [ 'custodian' ] = array ();
$role [ 'resourceProvider' ] = array ();
$role [ 'owner' ] = array ();
$role [ 'distributor' ] = array ();
$role [ 'publisher' ] = array ();
$role [ 'author' ] = array ();
$single = array ();
foreach ( $rows as $row )
{
if ( $tmp_title != $row [ 'title' ])
{
if ( count ( $role ))
{
$single [ 'role' ] = $role ;
$md [] = $single ;
}
$single [ 'title' ] = $row [ 'title' ];
$single [ 'uuid' ] = $row [ 'uuid' ];
$tmp_title = $row [ 'title' ];
$role = array ();
$role [ 'pointOfContact' ] = array ();
$role [ 'custodian' ] = array ();
$role [ 'resourceProvider' ] = array ();
$role [ 'owner' ] = array ();
$role [ 'distributor' ] = array ();
$role [ 'publisher' ] = array ();
$role [ 'author' ] = array ();
}
if ( $row [ 'role' ] == 'resourceProvider' )
{
$role [ 'resourceProvider' ][] = $row [ 'email' ];
} elseif ( $row [ 'role' ] == 'custodian' ) {
$role [ 'custodian' ][] = $row [ 'email' ];
} elseif ( $row [ 'role' ] == 'pointOfContact' ) {
$role [ 'pointOfContact' ][] = $row [ 'email' ];
} elseif ( $row [ 'role' ] == 'owner' ) {
$role [ 'owner' ][] = $row [ 'email' ];
} elseif ( $row [ 'role' ] == 'distributor' ) {
$role [ 'distributor' ][] = $row [ 'email' ];
} elseif ( $row [ 'role' ] == 'publisher' ) {
$role [ 'publisher' ][] = $row [ 'email' ];
} elseif ( $row [ 'role' ] == 'author' ) {
$role [ 'author' ][] = $row [ 'email' ];
}
}
if ( count ( $role ))
{
$single [ 'role' ] = $role ;
$md [] = $single ;
}
//再循环一次, 提取最高权限email组, 并发送管理邮件
$newmd = array ();
$single = array ();
foreach ( $md as $row )
{
if ( count ( $row [ 'role' ]))
{
$addrs = array ();
if ( count ( $row [ 'role' ][ 'pointOfContact' ]))
{
$addrs = $row [ 'role' ][ 'pointOfContact' ];
} elseif ( count ( $row [ 'role' ][ 'custodian' ])) {
$addrs = $row [ 'role' ][ 'custodian' ];
} elseif ( count ( $row [ 'role' ][ 'resourceProvider' ])) {
$addrs = $row [ 'role' ][ 'resourceProvider' ];
} elseif ( count ( $row [ 'role' ][ 'owner' ])) {
$addrs = $row [ 'role' ][ 'owner' ];
} elseif ( count ( $row [ 'role' ][ 'distributor' ])) {
$addrs = $row [ 'role' ][ 'distributor' ];
} elseif ( count ( $row [ 'role' ][ 'publisher' ])) {
$addrs = $row [ 'role' ][ 'publisher' ];
} elseif ( count ( $row [ 'role' ][ 'author' ])) {
$addrs = $row [ 'role' ][ 'author' ];
}
$single [ 'uuid' ] = $row [ 'uuid' ];
$single [ 'title' ] = $row [ 'title' ];
foreach ( $addrs as $email )
{
$single [ 'email' ] = $email ;
//$newmd[]=$single;
$newmd [ 'uuid' ][] = $row [ 'uuid' ];
$newmd [ 'title' ][] = $row [ 'title' ];
$newmd [ 'email' ][] = $email ;
}
}
}
//按照email排序
array_multisort ( $newmd [ 'email' ], $newmd [ 'uuid' ], $newmd [ 'title' ]);
$tmp_email = '' ;
$data = '' ;
foreach ( $newmd [ 'email' ] as $k => $row )
{
if ( $tmp_email != $row )
{
if ( ! empty ( $data ))
{
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-mdadmin' , array ( 'user' => $username , 'datalist' => $data ));
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> addTo ( $tmp_email );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
$data = '' ;
}
$tmp_email = $row ;
}
2012-05-10 02:00:54 +00:00
$data .= " 数据名称: " . $newmd [ 'title' ][ $k ] . " \n " ;
$data .= " \t 数据地址: http://westdc.westgis.ac.cn/data/ " . $newmd [ 'uuid' ][ $k ] . " \n " ;
2012-05-09 16:12:37 +00:00
$data .= " \t 如您不想收到此类数据申请审核的邮件, 您可以在按如下操作办法进行处理: 1. 申请成为该数据作者; 2. 将该数据委托给数据中心代为审核,委托后您也可以随时撤销此委托以便继续自行管理。 \n " ;
$data .= " \t 如要申请成为该数据作者:进入数据中心->数据作者->数据认证,查找到对应的数据后,在其下方点击申请认证即可。 \n \n " ;
}
if ( ! empty ( $data ))
{
unset ( $mail );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mailtp = new EmailText ( $this -> db , 'offline-start-mdadmin' , array ( 'user' => $username , 'datalist' => $data ));
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> addTo ( $tmp_email );
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , 'offlineapp.pdf' );
$mail -> send ();
2011-12-08 09:22:54 +00:00
}
2011-09-20 03:57:39 +00:00
//提示信息
2012-08-27 01:54:38 +00:00
$data = array (
'started' => $start ,
'msg' => " 该离线数据已经开始处理,并发送邮件给申请人以及数据管理委员会,请在处理完成后点击“完成”。 "
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('提示信息:该离线数据已经开始处理,并发送邮件给申请人以及数据管理委员会,请在处理完成后点击“完成”。');
//$this->_redirect('/admin/down/offlineapp/'.$page);
2011-09-20 03:57:39 +00:00
} elseif ( $finish ) {
2012-08-27 01:54:38 +00:00
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
2011-09-20 03:57:39 +00:00
try {
2012-08-27 01:54:38 +00:00
2012-03-12 09:44:13 +00:00
$sql = " SELECT authorpermitted FROM dataorder WHERE offlineappid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $finish ));
$row = $sth -> fetch ();
if ( $row [ 'authorpermitted' ] < 0 )
{
2012-08-27 01:54:38 +00:00
$data = array (
'error' => " 数据作者明确反对该下载申请,所以不能进行进一步通过 " ,
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('提示信息:数据作者明确反对该下载申请,所以不能进行进一步通过');
//$this->_redirect('/admin/down/offlineapp/'.$page);
2012-03-12 09:44:13 +00:00
}
2011-09-20 03:57:39 +00:00
$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 ) {
2012-08-27 01:54:38 +00:00
if ( $data [ 'host' ] == 'ftp1.westgis.ac.cn' )
$has_ftp1 = true ;
2011-09-20 03:57:39 +00:00
// 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' )),
2012-08-27 01:54:38 +00:00
//"path"=>$path,
" param " => " offlineappid= " . $finish ,
2012-06-25 14:25:48 +00:00
" host " => 'ftp1.westgis.ac.cn' ,
2011-09-20 03:57:39 +00:00
" maxdata " => $this -> view -> config -> download -> max ,
" datacount " => 1 //represent one offline application
);
$proftp = new Proftp ();
$proftp -> db = $this -> db ;
2012-06-21 08:33:25 +00:00
if ( ! $proftp -> createuser ( $user ))
2011-09-20 03:57:39 +00:00
{
$user -> datacount = 0 ; //force this offline to be true
$proftp -> createuser ( $user );
2012-08-27 01:54:38 +00:00
$data = array (
'error' => " 该用户申请的数据过多,请检查该用户之前已完成的申请 " ,
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('提示信息:该用户申请的数据过多,请检查该用户之前已完成的申请。');
2011-09-20 03:57:39 +00:00
}
//发送用户邮件进行信息提示和说明
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
2011-11-27 08:51:13 +00:00
//实例化EmailText
2011-12-05 08:00:57 +00:00
$mailtp = new EmailText ( $this -> db , 'offline-finish' ,
array ( 'user' => $row [ 'username' ], 'datalist' => str_replace ( " ; " , " \n " , $row [ 'datalist' ]),
2011-11-27 08:51:13 +00:00
'ftpuser' => $user -> username , 'ftppwd' => $proftp -> pwd , 'ftptime' => $proftp -> time ));
$mail -> setBodyText ( $mailtp -> getBody ());
2011-12-05 08:00:57 +00:00
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2011-09-20 03:57:39 +00:00
$mail -> addTo ( $row [ 'email' ]);
2012-06-17 10:50:02 +00:00
$mail -> addCc ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2011-11-27 08:51:13 +00:00
$mail -> setSubject ( $mailtp -> getSubject ());
2011-09-20 03:57:39 +00:00
$mail -> send ();
} //ftp1 deal
2012-08-27 01:54:38 +00:00
//$this->messenger->addMessage('提示信息:该离线数据已经处理完成。');
$data = array (
'msg' => " 该离线数据已经处理完成 " ,
'finish' => $finish
);
$this -> jsonexit ( $data );
return true ;
2011-09-20 03:57:39 +00:00
} catch ( Exception $e ) {
//提示信息
2012-08-27 01:54:38 +00:00
//$this->messenger->addMessage($e->getMessage());
//$this->messenger->addMessage('提示信息:该数据有可能还没有收到纸质申请表。');
$data = array (
'error' => $e -> getMessage (),
);
$this -> jsonexit ( $data );
return true ;
2011-09-20 03:57:39 +00:00
}
2012-08-27 01:54:38 +00:00
//$this->_redirect('/admin/down/offlineapp/'.$page);
2011-09-20 03:57:39 +00:00
} elseif ( $cancel ) {
2012-08-27 01:54:38 +00:00
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
2011-09-20 03:57:39 +00:00
//取消=删除?
//用户提出申请的取消操作
//$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 ));
2012-08-27 01:54:38 +00:00
$data = array (
'msg' => '已删除该用户离线申请' ,
'finish' => $cancel
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('提示信息:已删除该用户离线申请。');
//$this->_redirect('/admin/down/offlineapp/'.$page);
2011-09-20 03:57:39 +00:00
} elseif ( $deny ) {
2012-08-27 01:54:38 +00:00
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
2011-09-20 03:57:39 +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 ));
2012-08-27 01:54:38 +00:00
$data = array (
'msg' => '已删除该用户离线申请' ,
'finish' => $cancel
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('提示信息:已拒绝该用户离线申请。');
//$this->_redirect('/admin/down/offlineapp/'.$page);
} else if ( $reset ){
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
2011-09-20 03:57:39 +00:00
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 )
{
2012-05-30 01:49:17 +00:00
$sql = " update dataorder set status='1' where (status='3' or status='4') and offlineappid=' $reset ' " ;
2011-09-20 03:57:39 +00:00
if ( $this -> db -> exec ( $sql ) > 0 )
{
2012-08-27 01:54:38 +00:00
$data = array (
'msg' => '已经成功对该申请重置' ,
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('已经成功对该申请重置');
//$this->_redirect('/admin/down/offlineapp/');
2011-09-20 03:57:39 +00:00
}
else {
2012-08-27 01:54:38 +00:00
$data = array (
'error' => '没有找到对应数据,无法进行重置,可能是旧记录没有匹配数据造成的' ,
);
$this -> jsonexit ( $data );
return true ;
//$this->messenger->addMessage('没有找到对应数据,无法进行重置,可能是旧记录没有匹配数据造成的');
//$this->_redirect('/admin/down/offlineapp/');
2011-09-20 03:57:39 +00:00
}
} //elseif
2012-08-27 01:54:38 +00:00
//if
2011-09-20 03:57:39 +00:00
} //reset
2012-02-16 04:04:32 +00:00
$select = " select distinct(o.*),d.status as datastatus from offlineapp o
2012-03-12 09:44:13 +00:00
left join dataorder d on o . id = d . offlineappid " ;
2012-02-16 03:43:28 +00:00
if ( $status == 4 )
2012-02-16 03:54:15 +00:00
$select .= " where o.ts_approved is null
2012-03-12 09:44:13 +00:00
and o . pdflink is not null and d . status = 4 " ;
elseif ( $status ==- 1 )
$select .= " where o.pdflink is not null and o.status=-1 " ;
else
2012-02-16 03:54:15 +00:00
$select .= " where o.ts_approved is null
and o . pdflink is not null and d . status in ( 3 , 4 ) " ;
2012-02-16 03:43:28 +00:00
$select .= " order by o.ts_created desc " ;
2011-09-20 03:57:39 +00:00
$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' );
2011-09-29 02:24:47 +00:00
$emaillist = $this -> _getParam ( 'emaillist' );
2012-12-08 14:41:10 +00:00
$monthreport = $this -> _getParam ( 'monthreport' );
2011-09-20 03:57:39 +00:00
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' );
2011-09-29 02:28:27 +00:00
} //添加服务记录
elseif ( $edit ){
2011-09-20 03:57:39 +00:00
$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 ( '提示信息:您已经编辑添加该记录。' );
2012-01-09 09:10:07 +00:00
$page = $this -> _getParam ( 'page' );
if ( ! empty ( $page ))
$this -> _redirect ( '/admin/down/offline/page/' . $page );
else
$this -> _redirect ( '/admin/down/offline/' );
2011-09-20 03:57:39 +00:00
} 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' );
2011-09-29 02:28:27 +00:00
} //编辑
elseif ( $delete ) {
2011-09-20 03:57:39 +00:00
$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 " );
}
2011-09-29 02:28:27 +00:00
} //删除服务记录
else if ( $down ) {
2011-09-20 03:57:39 +00:00
$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-10-24 06:47:19 +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_created' ] . " \n " ;
2011-09-20 03:57: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 );
2011-09-29 02:28:27 +00:00
} //下载离线服务记录
else if ( $update ) {
2011-09-20 03:57:39 +00:00
$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' );
} //同步用户账户与离线申请记录
2011-09-29 02:28:27 +00:00
2011-09-20 03:57:39 +00:00
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' );
} //查看单条记录
2011-09-29 02:28:27 +00:00
2011-09-29 02:24:47 +00:00
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 );
2012-12-08 14:41:10 +00:00
} //下载邮箱地址列表
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 ( '离线服务记录' );
$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_created >= '".date(' Y - ').(date(' m ')-1)."-1' and o . ts_created < '".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 >= '".date(' Y - ').(date(' m ')-1)."-1' 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' )); */
}
2011-09-29 02:28:27 +00:00
2011-09-20 03:57:39 +00:00
$select = $this -> db -> select ();
2012-02-16 03:25:49 +00:00
$select -> from ( 'offlineapp' ) -> where ( 'ts_approved is not null' ) -> where ( 'pdflink is not null' ) -> where ( 'status=0' ) -> order ( 'ts_created desc' );
2011-09-20 03:57: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 ;
2012-01-09 09:10:07 +00:00
$this -> view -> page = $this -> _getParam ( 'page' );
2011-09-20 03:57:39 +00:00
}
//在线数据下载情况, 仅针对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 ();
2012-06-06 09:45:19 +00:00
$select -> from ( 'onlineapp as o' , array ( 'id' , 'userid' , 'unit' , 'username' , 'ts_created' , 'project' , 'project_id' , 'project_type' , 'project_title' ))
2012-01-09 09:10:07 +00:00
-> join ( 'metadata as m' , 'o.uuid = m.uuid' , array ( 'title' , 'uuid' ))
2011-12-21 03:47:33 +00:00
-> where ( 'o.id in (select distinct(onlineappid) from dataorder)' )
2011-09-20 03:57:39 +00:00
-> 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 )
{
2012-01-09 09:10:07 +00:00
try {
2011-12-09 03:08:02 +00:00
$sql = " delete from onlineapp where id=? " ;
2012-01-09 09:10:07 +00:00
$this -> db -> query ( $sql , array ( $delete ));
$sql = " delete from dataorder where onlineappid=? " ;
2011-12-09 03:08:02 +00:00
$this -> db -> query ( $sql , array ( $delete ));
2011-09-20 03:57:39 +00:00
$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' ))
2012-01-07 10:07:53 +00:00
-> joinLeft ( 'metadata as m' , 'o.uuid = m.uuid' , array ( 'title' , 'uuid' , 'filesize' ))
2011-09-20 03:57:39 +00:00
-> 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 ();
2011-09-20 04:00:25 +00:00
$select -> from ( 'dataorder as o' , array ( 'ts_created' , 'ts_created' , 'offlineappid' , 'onlineappid' ))
2011-09-20 03:57:39 +00:00
-> 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 数据下载情况
2012-09-11 07:06:33 +00:00
/*
* 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 ;
2012-11-02 14:35:13 +00:00
$sql = " select distinct u.email
2012-09-11 07:06:33 +00:00
from dataorder d
LEFT JOIN users u on d . userid = u . id
WHERE u . email 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() 为下载过某数据的用户发送邮件
2011-09-20 03:57: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 搜索
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 ;
}
2012-08-27 01:54:38 +00:00
} //fixofflineAction 用户匹配
public function jsonexit ( $data ){
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( json_encode ( $data , JSON_NUMERIC_CHECK ));
return true ;
2012-12-08 14:41:10 +00:00
}
2011-09-20 03:57:39 +00:00
}