2012-02-22 12:21:22 +00:00
< ? php
2012-03-06 08:06:54 +00:00
/*
@ version $Id : AuthorController . php 2012 - 2 - 29 15 : 01 Z
@ package author
@ copyright Copyright ( c ) 2012 , CAREERI .
@ license http ://
@ link http ://
*/
2012-02-22 12:21:22 +00:00
class AuthorController extends Zend_Controller_Action
{
private $limit = 10 ;
2012-03-12 08:44:20 +00:00
//调试模式
// 调试模式中将显示全部错误细节,电子邮件将发往调试邮箱
// 1 为开启
// 0 为关闭
2012-05-04 08:59:02 +00:00
public $debug = 0 ;
2012-03-12 08:44:20 +00:00
//调试模式邮箱地址
2012-05-04 08:59:02 +00:00
public $debug_email = " wangliangxu@lzb.ac.cn " ;
2012-03-12 08:44:20 +00:00
2012-02-22 12:21:22 +00:00
function preDispatch ()
{
$this -> view -> config = Zend_Registry :: get ( 'config' );
$this -> db = Zend_Registry :: get ( 'db' );
$this -> messenger = $this -> _helper -> getHelper ( 'FlashMessenger' );
$this -> view -> messages = $this -> messenger -> getMessages ();
}
function indexAction ()
{
}
2012-03-09 09:03:50 +00:00
/*
* helpAction () 帮助文档
*
*/
function helpAction (){
} //helpAction()帮助文档
/*
* inauthorAction () 数据申请管理
*
* param string $ac
* param string $keywords
* param string $pr //对离线数据申请的操作
* param string $uuid
*
* return view | ajax - responds
*/
function inauthorAction ()
2012-02-22 12:21:22 +00:00
{
2012-03-09 09:03:50 +00:00
$ac = $this -> _request -> getParam ( " ac " );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
$u_email = $user -> email ;
}
2012-03-23 14:23:21 +00:00
if ( empty ( $ac ) || $ac == " online " || $ac == " searchonline " )
2012-03-09 09:03:50 +00:00
{
$sql = " SELECT o.id,o.userid,o.unit,o.username,o.ts_created,o.project,m.title,m.uuid FROM onlineapp as o
LEFT JOIN metadata as m ON o . uuid = m . uuid
LEFT JOIN mdauthor as a ON a . uuid = o . uuid
2012-03-28 08:29:07 +00:00
WHERE ( o . id in ( SELECT distinct ( onlineappid ) from dataorder where status >= 0 )) AND a . userid = ? AND a . status = 1 " ;
2012-03-26 07:53:08 +00:00
if ( $ac == " searchonline " )
2012-03-23 14:23:21 +00:00
{
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
2012-03-26 07:53:08 +00:00
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " m.title " , " m.description " ));
$sql .= ' and ' . $where ;
}
2012-03-23 14:23:21 +00:00
$sql .= " ORDER BY o.id desc " ;
2012-03-09 09:03:50 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
} //在线申请记录
2012-03-23 14:23:21 +00:00
if ( $ac == " offline " || $ac == " searchoffline " )
2012-03-09 09:03:50 +00:00
{
$pr = $this -> _request -> getParam ( 'pr' );
2012-03-26 07:53:08 +00:00
$oid = $this -> _request -> getParam ( 'oid' );
2012-03-23 14:23:21 +00:00
$pdf = $this -> _request -> getParam ( 'pdf' );
2012-03-09 09:03:50 +00:00
if ( ! empty ( $pr ))
{
try {
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
2012-03-12 03:14:50 +00:00
2012-03-09 09:03:50 +00:00
if ( ! preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
echo " 参数有误! " ; exit ();
}
2012-03-12 03:14:50 +00:00
//如果用户已经下载过了,就无法在更改对数据申请的意见
2012-03-23 14:23:21 +00:00
$sql = " select md.title,d.uuid,d.status as datastatus,d.authorpermitted from dataorder d
left join offlineapp o on o . id = d . offlineappid
2012-03-09 09:03:50 +00:00
left join metadata md on md . uuid = d . uuid
2012-03-09 09:29:26 +00:00
left join mdauthor a on a . uuid = d . uuid
2012-03-26 07:53:08 +00:00
where o . ts_approved is null and o . pdflink is not null
2012-03-23 14:23:21 +00:00
and d . uuid = ? and a . userid = ? and d . id = ? AND a . status = 1
2012-03-09 09:03:50 +00:00
order by o . ts_created desc " ;
$sth = $this -> db -> prepare ( $sql );
2012-03-12 03:14:50 +00:00
$sth -> execute ( array ( $uuid , $u_id , $oid ));
2012-03-09 09:03:50 +00:00
$row = $sth -> fetch ();
if ( $row [ 'datastatus' ] > 4 )
{
echo " 该申请已经通过并且发放数据 " ;
exit ();
2012-03-26 07:53:08 +00:00
}
else if ( empty ( $row ) || $row [ 'datastatus' ] != 4 )
{
echo " 该数据申请存在问题,请联系数据中心! " ;
exit ();
2012-03-23 14:23:21 +00:00
}
2012-03-09 09:03:50 +00:00
2012-03-12 03:14:50 +00:00
//同意用户下载
2012-03-23 14:23:21 +00:00
if ( $pr == " confirm " )
2012-03-09 09:03:50 +00:00
{
2012-03-23 14:23:21 +00:00
$sql = " UPDATE dataorder SET authorpermitted=1 WHERE uuid=? and id=? " ;
2012-03-09 09:03:50 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-03-12 03:14:50 +00:00
if ( $sth -> execute ( array ( $uuid , $oid )))
2012-03-09 09:03:50 +00:00
{
2012-03-12 03:14:50 +00:00
$btn = $this -> createOfflineCtBtn ( $uuid , 'c' , $oid );
2012-03-09 09:03:50 +00:00
echo '' . $btn . '<script>alert("您已经同意用户的离线数据申请");</script>' ;
exit ();
} else {
echo " <script>alert('处理过程中遇到错误,请刷新页面');</script> " ;
exit ();
}
}
2012-03-12 03:14:50 +00:00
//反对用户下载
2012-03-09 09:03:50 +00:00
if ( $pr == " objection " )
{
2012-03-23 14:23:21 +00:00
$sql = " UPDATE dataorder SET authorpermitted=-1 WHERE uuid=? AND id=? " ;
2012-03-09 09:03:50 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-03-12 03:14:50 +00:00
if ( $sth -> execute ( array ( $uuid , $oid )))
2012-03-09 09:03:50 +00:00
{
2012-03-12 03:14:50 +00:00
$btn = $this -> createOfflineCtBtn ( $uuid , 'o' , $oid );
2012-03-23 14:23:21 +00:00
echo '' . $btn . '<script>alert("您已经拒绝该用户的此次离线数据申请");</script>' ;
2012-03-09 09:03:50 +00:00
exit ();
} else {
echo " <script>alert('处理过程中遇到错误,请刷新页面');</script> " ;
exit ();
}
}
} catch ( Exception $e )
{
echo " 处理中遇到错误,请刷新页面后重试 " ;
exit ();
}
2012-03-26 07:53:08 +00:00
}
else if ( ! empty ( $pdf ))
{
$sql = " select o.pdflink from dataorder d left join offlineapp o on d.offlineappid=o.id
left join mdauthor m on d . uuid = m . uuid
where d . id = ? and m . userid = ? " ;
2012-03-23 14:23:21 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $pdf , $u_id ));
$row = $sth -> fetch ();
$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
2012-03-09 09:03:50 +00:00
}
else
{
$this -> _helper -> viewRenderer ( 'inauthor-offline' );
2012-03-23 14:23:21 +00:00
$select = " select distinct(o.*),md.title,d.id as doid,d.uuid,d.status as datastatus,d.authorpermitted from offlineapp o
2012-03-09 09:03:50 +00:00
left join dataorder d on o . id = d . offlineappid
left join metadata md on md . uuid = d . uuid
2012-03-09 09:29:26 +00:00
left join mdauthor a on a . uuid = d . uuid
2012-03-26 07:53:08 +00:00
where o . ts_approved is null and o . pdflink is not null and d . status = 4 and a . userid = ? AND a . status = 1 " ;
if ( $ac == " searchoffline " )
{
2012-03-23 14:23:21 +00:00
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
2012-03-26 07:53:08 +00:00
$this -> view -> q = $keywords ;
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " md.title " , " md.description " ));
$select .= ' and ' . $where ;
2012-03-23 14:23:21 +00:00
}
$select .= " order by o.ts_created desc " ;
2012-03-09 09:03:50 +00:00
$sth = $this -> db -> prepare ( $select );
2012-03-09 09:29:26 +00:00
$sth -> execute ( array ( $u_id ));
2012-03-09 09:03:50 +00:00
$rows = $sth -> fetchAll ();
foreach ( $rows as $k => $v )
{
if ( $v [ 'authorpermitted' ] == 0 )
2012-03-23 14:23:21 +00:00
{ $rows [ $k ][ 'btns' ] = $this -> createOfflineCtBtn ( $v [ 'uuid' ], '' , $v [ 'doid' ]);}
2012-03-09 09:03:50 +00:00
if ( $v [ 'authorpermitted' ] > 0 )
2012-03-23 14:23:21 +00:00
{ $rows [ $k ][ 'btns' ] = $this -> createOfflineCtBtn ( $v [ 'uuid' ], 'c' , $v [ 'doid' ]);}
2012-03-09 09:03:50 +00:00
if ( $v [ 'authorpermitted' ] < 0 )
2012-03-23 14:23:21 +00:00
{ $rows [ $k ][ 'btns' ] = $this -> createOfflineCtBtn ( $v [ 'uuid' ], 'o' , $v [ 'doid' ]);}
2012-03-09 09:03:50 +00:00
}
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
} //离线申请
2012-03-22 09:53:35 +00:00
//按数据显示
2012-03-23 14:23:21 +00:00
if ( $ac == 'datalist' || $ac == " searchdata " )
2012-03-22 09:53:35 +00:00
{
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( ! empty ( $uuid ))
{
$this -> _helper -> viewRenderer ( 'view-dataoreder' );
if ( preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
2012-03-23 14:23:21 +00:00
$sql = " select md.title,d.id as doid,d.uuid,d.authorpermitted,d.status
2012-06-07 11:21:53 +00:00
, offa . id as offa_id , offa . username as offa_name , offa . unit as offa_unit , offa . email as offa_email , offa . project as offa_project , date ( offa . ts_created ) as offa_tscreated
, ona . id as ona_id , ona . username as ona_name , ona . unit as ona_unit , ona . email as ona_email , ona . project as ona_project , date ( ona . ts_created ) as ona_tscreated
2012-03-22 09:53:35 +00:00
from dataorder d
left join metadata md on md . uuid = d . uuid
left join mdauthor a on a . uuid = d . uuid
LEFT JOIN offlineapp offa on offa . id = d . offlineappid
LEFT JOIN onlineapp ona on ona . id = d . onlineappid
2012-03-22 11:23:34 +00:00
WHERE ( offa . id IS NOT NULL OR ona . id IS NOT NULL ) AND a . status = 1 and d . status >= 0
2012-03-22 09:53:35 +00:00
AND d . uuid = ? AND a . userid = ?
ORDER BY d . ts_created DESC " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid , $u_id ));
2012-03-26 07:53:08 +00:00
$rows = $sth -> fetchAll ();
2012-03-23 14:23:21 +00:00
@ $this -> view -> mdtitle = $rows [ 0 ][ 'title' ];
2012-03-22 09:53:35 +00:00
foreach ( $rows as $k => $v )
{
if ( $v [ 'authorpermitted' ] == 0 )
2012-03-23 14:23:21 +00:00
{ $rows [ $k ][ 'btns' ] = $this -> createOfflineCtBtn ( $v [ 'uuid' ], '' , $v [ 'doid' ]);}
2012-03-22 09:53:35 +00:00
if ( $v [ 'authorpermitted' ] > 0 )
2012-03-23 14:23:21 +00:00
{ $rows [ $k ][ 'btns' ] = $this -> createOfflineCtBtn ( $v [ 'uuid' ], 'c' , $v [ 'doid' ]);}
2012-03-22 09:53:35 +00:00
if ( $v [ 'authorpermitted' ] < 0 )
2012-03-23 14:23:21 +00:00
{ $rows [ $k ][ 'btns' ] = $this -> createOfflineCtBtn ( $v [ 'uuid' ], 'o' , $v [ 'doid' ]);}
2012-03-22 09:53:35 +00:00
}
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
} else {
$this -> view -> error = " 参数有误 " ;
}
} else {
$this -> _helper -> viewRenderer ( 'inauthor-datalist' );
$sql = " select md.title,d.uuid,count(md.id) as c from dataorder d
left join metadata md on md . uuid = d . uuid
left join mdauthor a on a . uuid = d . uuid
2012-03-23 14:23:21 +00:00
where a . status = 1 AND a . userid = ? " ;
if ( $ac == " searchdata " )
{
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
2012-03-26 07:53:08 +00:00
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " md.title " , " md.description " ));
$sql .= ' and ' . $where ;
2012-03-23 14:23:21 +00:00
}
$sql .= " GROUP BY md.title,d.uuid " ;
2012-03-22 09:53:35 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
} //按数据显示
2012-03-09 09:03:50 +00:00
} // inauthorAction() 数据申请管理
/*
* createOfflineCtBtn () 创建离线申请记录的操作按钮
*
*/
2012-03-12 03:14:50 +00:00
function createOfflineCtBtn ( $uuid , $type = " " , $oid ){
2012-03-09 09:03:50 +00:00
$urlHref = 'href="javascript:;"' ;
$baseStyle = " offline-ct-btns box-shadow " ;
$selectedStyle = " offline-select " ;
$confrimText = " 同意 " ;
2012-03-23 14:23:21 +00:00
$confrimFunc = 'onclick="confirm(\'' . $uuid . '\',\'' . $oid . '\')"' ;
2012-03-09 09:03:50 +00:00
$objectionText = " 反对 " ;
2012-03-12 03:14:50 +00:00
$objectionFunc = 'onclick="objection(\'' . $uuid . '\',\'' . $oid . '\')"' ;
2012-03-09 09:03:50 +00:00
$btns = '' ;
if ( empty ( $type ))
{
$confrimBtn = " <a $urlHref class= \" $baseStyle\ " $confrimFunc > $confrimText </ a > " ;
$objectionBtn = " <a $urlHref class= \" $baseStyle\ " $objectionFunc > $objectionText </ a > " ;
$btns = $confrimBtn . $objectionBtn ;
}
if ( $type == 'c' )
{
$confrimBtn = " <a class= \" $baseStyle $selectedStyle\ " > $confrimText </ a > " ;
$objectionBtn = " <a $urlHref class= \" $baseStyle\ " $objectionFunc > $objectionText </ a > " ;
$btns = $confrimBtn . $objectionBtn ;
}
if ( $type == 'o' )
{
$confrimBtn = " <a $urlHref class= \" $baseStyle\ " $confrimFunc > $confrimText </ a > " ;
$objectionBtn = " <a class= \" $baseStyle $selectedStyle\ " > $objectionText </ a > " ;
$btns = $confrimBtn . $objectionBtn ;
}
return $btns ;
} //createOfflineCtBtn()
2012-02-22 12:21:22 +00:00
2012-03-06 08:06:54 +00:00
/*
* acceptAction () 我的数据
*
2012-03-07 07:43:37 +00:00
* param string $ac // list|search
* param string $keyword
2012-03-06 08:06:54 +00:00
*
2012-03-07 07:43:37 +00:00
* return view
2012-03-06 08:06:54 +00:00
*/
function acceptAction ()
{
2012-03-07 03:48:40 +00:00
$ac = $this -> _request -> getParam ( " ac " );
2012-03-06 08:06:54 +00:00
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
2012-03-07 03:48:40 +00:00
$u_email = $user -> email ;
2012-03-06 08:06:54 +00:00
}
2012-03-07 03:48:40 +00:00
//列表
2012-03-23 07:36:32 +00:00
if ( empty ( $ac ) || $ac == 'list' || $ac == 'search' ){
2012-03-07 03:48:40 +00:00
2012-05-10 10:12:14 +00:00
$sql = " SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus FROM normalmetadata m
2012-03-23 07:39:52 +00:00
LEFT JOIN mdauthor a ON m . uuid = a . uuid
2012-05-10 10:12:14 +00:00
LEFT JOIN geonetworkmetadata g on m . uuid = g . uuid
LEFT JOIN mdstatus mds ON m . uuid = mds . uuid
2012-07-12 04:08:28 +00:00
WHERE a . userid = ? AND a . status >= 0 " ;
2012-03-23 09:53:07 +00:00
if ( $ac == 'search' )
{
2012-03-23 07:36:32 +00:00
$key = trim ( $this -> _request -> getParam ( 'q' ));
$this -> view -> q = $key ;
$search = new Search ( $key );
2012-03-23 09:53:07 +00:00
$where = $search -> sql_expr ( array ( " m.title " , " m.description " ));
2012-03-23 07:36:32 +00:00
$sql .= ' and ' . $where ;
}
2012-07-12 04:08:28 +00:00
$sql .= " ORDER BY a.status DESC,a.id DESC " ;
2012-03-07 03:48:40 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 5 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
} //list
2012-03-20 09:34:44 +00:00
//激活数据作者
2012-03-12 08:44:20 +00:00
if ( $ac == " active " )
{
$this -> _helper -> viewRenderer ( 'accept-active' );
$vdcode = $this -> _request -> getParam ( 'v' );
$this -> view -> v = $vdcode ;
try {
2012-03-27 03:53:13 +00:00
$sql = " SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.id as userid,u.realname,u.email FROM mdauthor a
2012-03-12 08:44:20 +00:00
LEFT JOIN metadata md ON a . uuid = md . uuid
LEFT JOIN users u ON a . userid = u . id
2012-03-20 09:34:44 +00:00
WHERE a . activation = ? " ;
2012-03-12 08:44:20 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-03-20 09:34:44 +00:00
$sth -> execute ( array ( $vdcode ));
2012-03-12 08:44:20 +00:00
$row = $sth -> fetch ();
2012-03-20 09:34:44 +00:00
if ( empty ( $row [ 'id' ]))
2012-03-12 08:44:20 +00:00
{
2012-03-20 09:34:44 +00:00
$this -> view -> info = '此激活码无效' ;
2012-03-12 08:44:20 +00:00
} else {
if ( empty ( $row [ 'ts_activated' ]))
{
$sql = " UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=? " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( 'now()' , 1 , $vdcode ));
if ( $ex )
{
2012-03-27 10:17:51 +00:00
include_once ( " EmailText.php " );
2012-03-27 03:53:13 +00:00
$this -> author_first ( $row [ 'uuid' ], $row [ 'userid' ]);
2012-03-12 08:44:20 +00:00
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-03-21 02:56:50 +00:00
$mailtp = new EmailText ( $this -> db , " author-new " , array (
2012-03-12 08:44:20 +00:00
'user' => $row [ 'realname' ],
'uuid' => $row [ 'uuid' ],
'title' => $row [ 'title' ],
'email' => $row [ 'email' ],
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
//获得元数据作者email
2012-03-21 02:56:50 +00:00
/* 不需要给这些人发通知邮件
2012-03-20 09:34:44 +00:00
$info = $this -> getEmail ( $uuid , 1 );
$address = $info [ 'addrs' ];
foreach ( $address as $v )
2012-03-12 08:44:20 +00:00
{
2012-03-20 09:34:44 +00:00
$mail -> addTo ( $v );
2012-03-21 02:56:50 +00:00
} */
2012-03-12 08:44:20 +00:00
$mail -> addTo ( $row [ 'email' ]);
$mail -> addCc ( $this -> view -> config -> service -> email ); //管理员
} else {
$mail -> addTo ( $this -> debug_email );
}
$mail -> send ();
$this -> view -> info = '激活成功<br /><a href="/author/accept">点击这里</a>进入我的数据页面查看' ;
} else
{
$this -> view -> info = " 激活中遇到问题,请重试 " ;
}
} else
{
2012-03-20 09:34:44 +00:00
$this -> view -> info = '此激活码已经失效' ;
2012-03-12 08:44:20 +00:00
}
}
} catch ( Exception $e ){
if ( $this -> debug == 0 )
{
$this -> view -> info = " 处理中遇到错误,请重新尝试 " ;
} else {
$this -> view -> info = $e -> getMessage ();
}
}
2012-03-20 09:34:44 +00:00
} //激活数据作者
2012-03-23 07:36:32 +00:00
//拒绝激活
2012-03-20 09:34:44 +00:00
if ( $ac == " lock " )
{
$this -> _helper -> viewRenderer ( 'accept-active' );
$vdcode = $this -> _request -> getParam ( 'v' );
$this -> view -> v = $vdcode ;
try {
$sql = " SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.realname,u.email FROM mdauthor a
LEFT JOIN metadata md ON a . uuid = md . uuid
LEFT JOIN users u ON a . userid = u . id
WHERE a . activation = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $vdcode ));
$row = $sth -> fetch ();
if ( empty ( $row [ 'id' ]))
{
$this -> view -> info = '此激活码无效' ;
} else {
if ( empty ( $row [ 'ts_activated' ]))
{
$sql = " UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=? " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( 'now()' , - 1 , $vdcode ));
if ( $ex )
{
include_once ( " EmailText.php " );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " author-deny " , array (
'user' => $row [ 'realname' ],
'uuid' => $row [ 'uuid' ],
'title' => $row [ 'title' ],
'email' => $row [ 'email' ],
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
2012-03-21 03:28:12 +00:00
$mail -> addTo ( $row [ 'email' ]);
2012-03-21 02:56:50 +00:00
$mail -> addCc ( $this -> view -> config -> service -> email );
2012-03-20 09:34:44 +00:00
} else {
$mail -> addTo ( $this -> debug_email );
}
$mail -> send ();
$this -> view -> info = '该申请已被拒绝,<a href="/author/accept">点击这里</a>进入我的数据页面查看' ;
} else
{
$this -> view -> info = " 激活中遇到问题,请重试 " ;
}
} else
{
$this -> view -> info = '此激活码已经失效' ;
}
}
} catch ( Exception $e ){
if ( $this -> debug == 0 )
{
$this -> view -> info = " 处理中遇到错误,请重新尝试 " ;
} else {
$this -> view -> info = $e -> getMessage ();
}
}
} //否认激活
2012-03-07 03:48:40 +00:00
2012-03-06 08:06:54 +00:00
} //acceptAction() 我的数据
2012-03-20 09:34:44 +00:00
/*
*
* getEmail () 获取数据所有者电子邮箱地址
*
* param string $uuid //UUID
* param int $level //输出信息等级
* 0 => 输出所有Email地址
* 1 => 输出数据权限等级最高的Email地址 ( def )
*
* return array ()
*/
function getEmail ( $uuid , $level = 1 )
{
//需要定义角色,防止程序流程出错
$addrs = array ();
$addrs [ 'resourceProvider' ] = array ();
$addrs [ 'owner' ] = array ();
$addrs [ 'pointOfContact' ] = array ();
$addrs [ 'author' ] = array ();
$addrs [ " publisher " ] = array ();
2012-03-21 02:56:50 +00:00
$sql = ' select r . uuid , p . email , md . title , r . role from normalmetadata md
2012-03-20 09:34:44 +00:00
LEFT JOIN role r ON md . uuid = r . uuid
left join responsible p on r . resid = p . id
WHERE r . uuid = ? AND p . email IS NOT NULL AND p . email != ?
GROUP BY r . uuid , p . email , md . title , r . role ' ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid , '' ));
$rows = $sth -> fetchAll ();
$addrs [ 'title' ] = $rows [ 0 ][ 'title' ];
foreach ( $rows as $k => $v )
{
//数据资源提供者resourceProvider
if ( $v [ 'role' ] == 'resourceProvider' )
{
$addrs [ 'resourceProvider' ][] = $v [ 'email' ];
}
//数据资源所有者owner
if ( $v [ 'role' ] == 'owner' )
{
$addrs [ 'owner' ][] = $v [ 'email' ];
}
//数据联系人pointOfContact
if ( $v [ 'role' ] == 'pointOfContact' )
{
$addrs [ 'pointOfContact' ][] = $v [ 'email' ];
}
//元数据作者author
if ( $v [ 'role' ] == 'author' )
{
$addrs [ 'author' ][] = $v [ 'email' ];
}
if ( $v [ " role " ] == " " )
{
$addrs [ " publisher " ][] = $v [ 'email' ];
}
}
2012-03-21 02:56:50 +00:00
//输出所有email (多维数组)
2012-03-20 09:34:44 +00:00
/*
$addrs [ 'resourceProvider' ]
$addrs [ 'owner' ]
$addrs [ 'pointOfContact' ]
$addrs [ 'author' ]
*/
if ( $level == 0 )
{
return $addrs ;
}
//输出最高优先级的Email
//$addrs['addrs']
if ( $level == 1 )
{
//如果有 数据资源提供者 resourceProvider 就输出他的地址 以此类推
if ( count ( $addrs [ 'resourceProvider' ]) > 0 )
{
$addrs [ 'addrs' ][] = $addrs [ 'resourceProvider' ];
return $addrs ;
}
if ( count ( $addrs [ 'owner' ]) > 0 )
{
$addrs [ 'addrs' ][] = $addrs [ 'owner' ];
return $addrs ;
}
if ( count ( $addrs [ 'pointOfContact' ]) > 0 )
{
$addrs [ 'addrs' ][] = $addrs [ 'pointOfContact' ];
return $addrs ;
}
if ( count ( $addrs [ 'author' ]) > 0 )
{
$addrs [ 'addrs' ][] = $addrs [ 'author' ];
return $addrs ;
}
if ( count ( $addrs [ " publisher " ]) > 0 )
{
$addrs [ 'addrs' ][] = $addrs [ " publisher " ];
return $addrs ;
}
}
} //getEmail 获取数据作者email地址
2012-03-07 03:48:40 +00:00
2012-03-06 08:06:54 +00:00
/*
* applyAction () 申请成为元数据作者
*
* param string $ac //动作 search|apply
* param string $q //搜索关键词
* param string $uuid //数据的UUID
*
* return view | ajax | json
*
* 调试搜索结果 :
* / author / apply ? ac = apply & uuid = 816 ecd28 - ba88 - 464 b - a83a - 341440 f536ef
*/
function applyAction ()
{
$ac = $this -> _request -> getParam ( 'ac' );
//搜索动作
if ( $ac == " search " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
//要输出的Json对象
//过程中如果没有处理,则不包含任何返回信息,由前台定义提示信息,如:
/*
$ . ajax ({
'type' : " POST " ,
'url' : '/author/apply' ,
'data' : 'ac=search&q=' + $ ( '#keyword' ) . val (),
'success' : function ( data ){
if ( typeof ( data ) == 'object' ) //如果服务器端的响应为Json对象
{
if ( typeof ( data . error ) != 'undefined' ) //服务器端响应的错误消息
{
alert ( data . error );
} else { //服务器端无错误消息则为成功的响应
alert ( data . length );
}
} else { //服务器端响应了非JSON对象或者为空
alert ( '无搜索结果' );
}
},
'beforeSend' : function (){
//请求发送前
}
});
错误消息的键名必须为error, 不包含JS脚本 , 如:
$data [ 'error' ] = '服务器忙!' ;
*/
$data = " " ;
//防止通过其它方式访问,先判断是否是登录用户,如果不是,抛出消息后强制用户退出
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
} else {
$data = array ( " error " => " 请先登录 " );
$this -> getResponse ()
-> setHeader ( 'Content-Type' , 'application/json' )
-> appendBody ( Zend_Json :: encode ( $data ));
2012-03-27 10:17:51 +00:00
return true ;
2012-03-06 08:06:54 +00:00
}
//数据处理代码 EOH<<<<<<<<<<<<<<<<
try {
2012-03-23 09:53:07 +00:00
$keyword = trim ( $this -> _request -> getParam ( 'q' ));
if ( strlen ( trim ( $keyword )) < 3 )
2012-03-23 09:16:06 +00:00
$data = array ( 'error' => '搜索关键字过短' );
else if ( ! preg_match_all ( " /^[ \ x { 4e00}- \ x { 9fa5}A-Za-z0-9 \ s_]+ $ /u " , $keyword , $matchs ))
2012-03-06 08:06:54 +00:00
{
$data = array ( 'error' => '搜索关键字中只能包含汉字、英文、数字' );
}
else
{
//搜索标题和描述两个字段
2012-03-19 09:06:00 +00:00
$sql = " SELECT m.uuid,m.title,m.description,a.status,a.userid FROM normalmetadata m
2012-03-06 08:06:54 +00:00
LEFT JOIN mdauthor a ON m . uuid = a . uuid
2012-03-23 09:53:07 +00:00
WHERE " ;
2012-03-23 09:16:06 +00:00
$search = new Search ( $keyword );
2012-03-23 09:53:07 +00:00
$where = $search -> sql_expr ( array ( " m.title " , " m.description " ));
2012-03-23 09:16:06 +00:00
$sql .= $where ;
2012-03-06 08:06:54 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-03-23 09:16:06 +00:00
$sth -> execute ();
2012-03-06 08:06:54 +00:00
$rows = $sth -> fetchAll ();
if ( is_array ( $rows ) && count ( $rows ) > 0 )
$data = $rows ;
else
$data = " " ;
}
} catch ( Exception $e ){
//如果上面的程序已经发送出提示,就不发送抛出的错误
if ( empty ( $data [ 'error' ]))
{
2012-03-12 08:44:20 +00:00
if ( $this -> debug == 0 )
{
$data = array ( " error " => " 处理过程中遇到错误,请重新尝试 " );
} else {
$data = array ( " error " => $e -> getMessage ());
}
2012-03-06 08:06:54 +00:00
}
}
// >>>>>>>>>>> F
//截获响应对象,并修改头部和内容
//不管有没有数据存在, 都将返回Json数据, 前台有判断机制来分析数据
$this -> getResponse ()
-> setHeader ( 'Content-Type' , 'application/json' )
-> appendBody ( Zend_Json :: encode ( $data ));
} // search
/****************
申请动作
****************/
if ( $ac == " apply " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
$u_email = $user -> email ;
}
//处理部分<<<<<<<<<<
try {
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
//判断该用户是否已经申请过或者是否已经是该元数据作者
$sql = " SELECT id,status FROM mdauthor WHERE uuid=? AND userid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid , $u_id ));
$row = $sth -> fetch ();
2012-03-07 03:48:40 +00:00
//如果已经是元数据作者,从流程中直接退出程序
if ( ! empty ( $row [ 'id' ]) && $row [ 'status' ] == 1 )
{
$data = array ( " error " => " 您目前已经是该数据作者,不需要再申请 " );
2012-03-06 08:06:54 +00:00
}
2012-03-20 09:34:44 +00:00
//如果已经遭到明确拒绝,则不允许用户再次申请
if ( ! empty ( $row [ 'id' ]) && $row [ 'status' ] ==- 1 )
{
$data = array ( " error " => " 您的申请已经遭到拒绝,不能再申请,有疑问请联系数据中心 " );
}
2012-03-07 03:48:40 +00:00
//如果已经存在申请,但是没有激活的,返回激活信息
if ( $row [ 'status' ] == 0 ){
if ( ! empty ( $row [ 'id' ]) && empty ( $m ))
{
$data = array (
2012-03-20 09:34:44 +00:00
" error " => '您已经申请过了,如果长时间没有收到回应请联系数据中心' ,
2012-03-07 03:48:40 +00:00
" post " => " activa " ,
" uid " => $u_id ,
" uemail " => $u_email ,
" uuid " => $uuid ,
);
} //if
2012-03-06 08:06:54 +00:00
else {
2012-03-20 09:34:44 +00:00
$info = $this -> getEmail ( $uuid , 1 );
$address = $info [ 'addrs' ];
$mdtitle = $info [ 'title' ];
2012-03-06 08:06:54 +00:00
//如果当前用户的email包含在元数据作者email列表中, 则直接使其成为元数据作者
if ( in_array ( $u_email , $address ))
{
$sql = " INSERT INTO mdauthor (uuid,userid,activation,ts_activated,status) VALUES (?,?,?,?,?) " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $uuid , $u_id , '' , 'now()' , 1 ));
if ( $ex )
{
2012-03-27 10:17:51 +00:00
$data = array ( " error " => " 您的身份符合申请条件,已经自动成为该元数据作者 " );
2012-03-27 03:53:13 +00:00
$this -> author_first ( $uuid , $u_id );
2012-03-06 08:06:54 +00:00
include_once ( " EmailText.php " );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-03-21 02:56:50 +00:00
$mailtp = new EmailText ( $this -> db , " author-new " , array (
2012-03-06 08:06:54 +00:00
'user' => $user -> realname ,
'uuid' => $uuid ,
'title' => $mdtitle ,
'email' => $u_email ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
2012-03-21 02:56:50 +00:00
2012-03-12 08:44:20 +00:00
if ( $this -> debug == 0 )
{
foreach ( $address as $dist )
{ $mail -> addTo ( $dist );} //元数据作者
$mail -> addTo ( $u_email );
$mail -> addCc ( $this -> view -> config -> service -> email ); //管理员
} else {
$mail -> addTo ( $this -> debug_email );
}
2012-03-06 08:06:54 +00:00
$mail -> send ();
}
else
{
$data = array ( " error " => " 处理中出现错误,请重新尝试 " );
}
}
//如果不包含在当前元数据作者的email列表中
2012-03-20 09:34:44 +00:00
//给数据拥有者发送邮件,使其决定是否同意新加入作者
2012-03-06 08:06:54 +00:00
else
{
//生成激活码
$ssid = session_id ();
$vdcode = md5 ( $uuid . $ssid . $u_id . time ());
//激活链接
// /author/accept/?ac=active&vdcode=$vdcode
2012-03-21 03:55:18 +00:00
$sql = " INSERT INTO mdauthor (uuid,userid,activation) VALUES (?,?,?) " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $uuid , $u_id , $vdcode ));
2012-03-07 03:48:40 +00:00
2012-03-06 08:06:54 +00:00
if ( $ex )
{
2012-03-21 02:56:50 +00:00
//给申请者发送邮件
2012-03-06 08:06:54 +00:00
include_once ( " EmailText.php " );
@ $mail = new WestdcMailer ( $this -> view -> config -> smtp );
@ $mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-03-19 09:06:00 +00:00
@ $mailtp = new EmailText ( $this -> db , " author-apply " , array (
2012-03-06 08:06:54 +00:00
'user' => $user -> username ,
2012-03-21 03:28:12 +00:00
'uuid' => $uuid ,
'email' => $user -> email ,
2012-03-20 09:34:44 +00:00
//元数据标题
2012-03-06 08:06:54 +00:00
'title' => $mdtitle ,
));
@ $mail -> setBodyText ( $mailtp -> getBody ());
@ $mail -> setSubject ( $mailtp -> getSubject ());
2012-03-12 08:44:20 +00:00
if ( $this -> debug == 0 )
{
2012-03-20 09:34:44 +00:00
@ $mail -> addTo ( $user -> email );
2012-03-12 08:44:20 +00:00
} else {
@ $mail -> addTo ( $this -> debug_email );
}
2012-03-06 08:06:54 +00:00
@ $mail -> send ();
unset ( $mail );
unset ( $mailtp );
2012-03-21 02:56:50 +00:00
//给元数据作者以及管理员发送邮件
2012-03-06 08:06:54 +00:00
@ $mail = new WestdcMailer ( $this -> view -> config -> smtp );
@ $mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
2012-03-19 09:06:00 +00:00
@ $mailtp = new EmailText ( $this -> db , " author-apply-confirm " , array (
2012-03-06 08:06:54 +00:00
'user' => $user -> username ,
'uuid' => $uuid ,
'email' => $u_email ,
'title' => $mdtitle ,
'link' => " http:// " . $_SERVER [ 'SERVER_NAME' ] . " /data/ $uuid " ,
2012-03-20 09:34:44 +00:00
//验证码
'vdcode' => $vdcode ,
//激活链接
'active' => " http:// " . $_SERVER [ 'SERVER_NAME' ] . " /author/accept/?ac=active&v= $vdcode " ,
//不同意激活的链接
'lock' => " http:// " . $_SERVER [ 'SERVER_NAME' ] . " /author/accept/?ac=lock&v= $vdcode " ,
2012-03-06 08:06:54 +00:00
));
@ $mail -> setBodyText ( $mailtp -> getBody ());
@ $mail -> setSubject ( $mailtp -> getSubject ());
2012-03-21 02:56:50 +00:00
2012-03-12 08:44:20 +00:00
if ( $this -> debug == 0 )
2012-03-21 03:28:12 +00:00
{
$sql = " SELECT u.email FROM mdauthor a
LEFT JOIN users u ON u . id = a . userid
WHERE a . uuid = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$mlist = $sth -> fetchAll ();
if ( count ( $mlist ) > 0 )
{
foreach ( $mlist as $v )
{
$mail -> addTo ( $v [ 'email' ]);
}
} //mdauthor中已经注册的用户
else {
foreach ( $address as $dist )
{
$mail -> addTo ( $dist );
}
} //元数据作者
2012-03-21 02:56:50 +00:00
$mail -> addCc ( $this -> view -> config -> service -> email ); //管理员
2012-03-12 08:44:20 +00:00
} else {
@ $mail -> addTo ( $this -> debug_email );
}
2012-03-20 09:34:44 +00:00
2012-03-06 08:06:54 +00:00
@ $mail -> send ();
2012-03-20 09:34:44 +00:00
$data = array ( " error " => " 您的申请已收到,请耐心等待回应 " );
2012-03-06 08:06:54 +00:00
} else {
$data = array ( " error " => " 服务器可能在忙,请重试。 " );
} //激活码记录
} //不是确认的元数据作者
} //empty($row['id'])
2012-03-07 03:48:40 +00:00
} // status == 0
2012-03-06 08:06:54 +00:00
//调试输出结果
//$data = array('addr'=>$address,'uemail'=>$u_email);
}
else
{
$data = array ( 'error' => '参数出错,请按照正确的访问方式申请' );
}
} catch ( Exception $e ){
if ( empty ( $data [ 'error' ]))
{
2012-03-12 08:44:20 +00:00
if ( $this -> debug == 0 )
{
$data = array ( " error " => " 处理过程中遇到错误,请重新尝试 " );
} else {
$data = array ( " error " => $e -> getMessage ());
}
2012-03-06 08:06:54 +00:00
}
}
// >>>>>>>>>>>>
$this -> getResponse ()
-> setHeader ( 'Content-Type' , 'application/json' )
-> appendBody ( Zend_Json :: encode ( $data ));
} // ac = apply 申请处理
} //applyAction() 申请成为元数据作者
2012-03-14 09:16:25 +00:00
/*
2012-03-21 03:55:18 +00:00
* commentAction () 数据反馈
2012-03-14 09:16:25 +00:00
*
2012-03-20 09:34:44 +00:00
* param string $ac 动作
2012-03-14 09:16:25 +00:00
* param string $uuid 元数据UUID
* param int $page 页数
*
2012-03-20 09:34:44 +00:00
* return view
2012-03-14 09:16:25 +00:00
*/
2012-03-21 03:55:18 +00:00
function commentAction ()
2012-03-14 09:16:25 +00:00
{
$ac = $this -> _request -> getParam ( 'ac' );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
if ( empty ( $ac ) || $ac == 'list' )
{
$sql = " SELECT md.title,md.uuid,count(c.id) as c FROM comments c
LEFT JOIN metadata md ON md . uuid = c . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
2012-03-28 08:29:07 +00:00
WHERE md . title IS NOT NULL AND a . userid = ? AND a . status = 1
2012-03-14 09:16:25 +00:00
GROUP BY md . title , md . uuid
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
if ( $ac == " view " )
{
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
2012-03-23 14:41:51 +00:00
$sql = " SELECT c.author,c.email,c.url,c.ts_created,c.content,m.title FROM comments c
2012-03-26 07:53:08 +00:00
LEFT JOIN mdauthor a ON a . uuid = c . uuid
2012-03-23 14:41:51 +00:00
left join metadata m on m . uuid = c . uuid
2012-03-28 08:29:07 +00:00
WHERE c . uuid = ? AND a . userid = ? AND a . status = 1
2012-03-14 09:16:25 +00:00
ORDER BY ts_created DESC " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid , $u_id ));
2012-03-26 07:53:08 +00:00
$rows = $sth -> fetchAll ();
2012-03-23 14:41:51 +00:00
@ $this -> view -> mdtitle = $rows [ 0 ][ 'title' ];
2012-03-14 09:16:25 +00:00
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
2012-03-21 03:55:18 +00:00
$this -> _helper -> viewRenderer ( 'comment-list' );
2012-03-14 09:16:25 +00:00
}
if ( $ac == " listall " )
{
$sql = " SELECT md.title,c.author,c.email,c.url,c.ts_created,c.content FROM comments c
LEFT JOIN mdauthor a ON a . uuid = c . uuid
2012-03-22 11:23:34 +00:00
LEFT JOIN normalmetadata md ON md . uuid = c . uuid
2012-03-28 08:29:07 +00:00
WHERE a . userid = ? AND a . status = 1
2012-03-14 09:16:25 +00:00
ORDER BY ts_created DESC " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
2012-03-21 03:55:18 +00:00
$this -> _helper -> viewRenderer ( 'comment-listall' );
2012-03-14 09:16:25 +00:00
}
2012-03-21 03:55:18 +00:00
} // commentAction() 数据反馈
2012-03-20 09:34:44 +00:00
/*
* newsAction () 数据新闻
*
* param string $ac
*
*
*/
function newsAction (){
$ac = $this -> _request -> getParam ( 'ac' );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
2012-03-23 07:39:52 +00:00
//新闻列表
if ( empty ( $ac ) || $ac == " list " )
{
2012-03-23 09:53:07 +00:00
$keyword = $this -> _request -> getParam ( 'q' );
2012-03-26 07:53:08 +00:00
$uuid = $this -> _request -> getParam ( 'uuid' );
2012-03-23 09:53:07 +00:00
$wheresql = " " ;
2012-03-26 07:53:08 +00:00
$join = " " ;
2012-03-23 09:53:07 +00:00
if ( ! empty ( $keyword ))
{
$this -> view -> q = $keyword ;
$search = new Search ( $keyword );
$wheresql = $search -> sql_expr ( array ( " arc.title " , " arc.description " ));
}
if ( ! empty ( $wheresql ))
{
2012-03-26 07:53:08 +00:00
$wheresql = " AND " . $wheresql ;
}
if ( ! empty ( $uuid ) && preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
$join = " LEFT JOIN news_mdnews mdnews ON mdnews.aid=arc.id " ;
$wheresql .= " AND mdnews.uuid=' $uuid ' " ;
2012-03-23 09:53:07 +00:00
}
2012-03-28 02:55:03 +00:00
$sql = " SELECT arc.id,arc.title,arc.ts_published,arc.description,u.realname FROM news_archives arc
2012-03-23 09:53:07 +00:00
LEFT JOIN users u ON arc . userid = u . id
2012-03-26 07:53:08 +00:00
$join
2012-03-28 02:55:03 +00:00
WHERE arc . is_pub > 0 AND arc . ts_published < 'now()' $wheresql
ORDER BY arc . ts_published " ;
2012-03-23 09:53:07 +00:00
2012-03-26 07:53:08 +00:00
2012-03-23 09:53:07 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
if ( $ac == " view " )
{
$this -> _helper -> viewRenderer ( 'news-view' );
$aid = ( int ) $this -> _request -> getParam ( 'aid' );
if ( empty ( $aid ) || ! is_numeric ( $aid ))
{
$this -> _redirect ( '/error/error' );
}
else
{
$this -> db -> exec ( " UPDATE news_archives arc SET click=click+1 WHERE arc.id= $aid " );
$sql = " SELECT arc.*,u.realname FROM news_archives arc
LEFT JOIN users u ON u . id = arc . userid
WHERE arc . id = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $aid ));
$row = $sth -> fetch ();
$this -> view -> info = $row ;
}
2012-03-23 07:39:52 +00:00
}
2012-03-20 09:34:44 +00:00
//新闻发布
if ( $ac == " add " )
{
$this -> _helper -> viewRenderer ( 'news-add' );
2012-03-26 07:53:08 +00:00
$sql = " SELECT md.title,md.uuid FROM metadata md
LEFT JOIN mdauthor a ON a . uuid = md . uuid
2012-03-28 08:29:07 +00:00
WHERE a . userid = ? AND a . status = 1
2012-03-26 07:53:08 +00:00
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$this -> view -> md = $rows ;
2012-03-20 09:34:44 +00:00
} // $ac == add
2012-03-23 09:53:07 +00:00
//新闻编辑
if ( $ac == " edit " )
{
$this -> _helper -> viewRenderer ( 'news-edit' );
$aid = ( int ) $this -> _request -> getParam ( 'aid' );
if ( empty ( $aid ) || ! is_numeric ( $aid ))
{
$this -> _redirect ( '/error/error' );
}
2012-03-26 07:53:08 +00:00
$sql = " SELECT arc.*,mdarc.uuid FROM news_archives arc
LEFT JOIN news_mdnews mdarc ON mdarc . aid = arc . id
WHERE id = ? " ;
2012-03-23 09:53:07 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $aid ));
$row = $sth -> fetch ();
$this -> view -> info = $row ;
2012-03-26 07:53:08 +00:00
} //$ac == "edit"
2012-03-23 09:53:07 +00:00
2012-03-20 09:34:44 +00:00
//新闻发布的ajax动作
if ( $ac == " addnews " )
{
2012-03-23 07:39:52 +00:00
try {
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = array ();
2012-03-23 09:53:07 +00:00
$aid = $this -> _request -> getParam ( 'aid' );
$data [ 'title' ] = trim ( $this -> _request -> getParam ( 'title' ));
$data [ 'keyword' ] = trim ( $this -> _request -> getParam ( 'keyword' ));
$data [ 'body' ] = trim ( $this -> _request -> getParam ( 'body' ));
2012-03-26 07:53:08 +00:00
$uuid = trim ( $this -> _request -> getParam ( 'uuid' ));
2012-03-23 07:39:52 +00:00
//对参数进行预处理
foreach ( $data as $k => $v )
{
$data [ $k ] = preg_replace ( " #<a([^>]*)>(.*)</a>#i " , " " , $v );
$data [ $k ] = preg_replace ( " #<script([^>]*)>(.*)</script>#i " , " " , $v );
$data [ $k ] = preg_replace ( " #<iframe([^>]*)>(.*)</iframe>#i " , " " , $v );
$data [ $k ] = str_replace ( " \" " , " “ " , $v );
$data [ $k ] = str_replace ( " \ ' " , " ‘ " , $v );
}
$msg = array ();
// 合法性判断
if ( mb_strlen ( $data [ 'title' ], " utf-8 " ) < 3 )
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '标题太短,请重新填写' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
if ( mb_strlen ( $data [ 'title' ], " utf-8 " ) > 60 )
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '标题太长,请重新填写' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
2012-03-26 07:53:08 +00:00
if ( empty ( $uuid ))
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '请选择对应数据' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
2012-03-23 07:39:52 +00:00
if ( mb_strlen ( $data [ 'keyword' ], " utf-8 " ) < 4 )
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '关键词太短,请重新填写' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
if ( mb_strlen ( $data [ 'keyword' ], " utf-8 " ) > 40 )
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '关键词太长,请重新填写' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
if ( mb_strlen ( $data [ 'body' ], " utf-8 " ) < 40 )
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '新闻内容太短,请重新填写' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
2012-03-26 07:53:08 +00:00
if ( ! preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = '参数错误,请重试' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
2012-03-23 07:39:52 +00:00
//获得描述
//删除段落及html标记
$data [ 'description' ] = mb_substr ( preg_replace ( array ( " /<(.*)>|<(.*) \ />/i " , " / \ s/i " ), array ( " " , " " ), $data [ 'body' ]), 0 , 450 , " UTF-8 " );
//默认填充数据
$data [ 'source' ] = " 西部数据中心 " ;
$data [ 'typeid' ] = 0 ;
$data [ 'userid' ] = $u_id ;
2012-03-23 09:53:07 +00:00
$data [ 'keyword' ] = str_replace ( " , " , " , " , $data [ 'keyword' ]);
2012-03-26 07:53:08 +00:00
//新闻添加
2012-03-23 09:53:07 +00:00
if ( empty ( $aid ))
{
$sql = " INSERT INTO news_archives
2012-03-28 02:55:03 +00:00
( userid , title , keywords , description , image , source , ts_published , is_pub , body )
2012-03-23 09:53:07 +00:00
VALUES
( ? , ? , ? , ? , ? , ? , ? , ? , ? )
2012-03-26 07:53:08 +00:00
RETURNING id
2012-03-23 09:53:07 +00:00
" ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $data [ 'userid' ], $data [ 'title' ], $data [ 'keyword' ], $data [ 'description' ], '' , $data [ 'source' ], 'now()' , 1 , $data [ 'body' ]));
2012-03-26 07:53:08 +00:00
//添加成功
if ( $ex )
{
//写入文章ID对应UUID的表
$archive = $sth -> fetch ( PDO :: FETCH_ASSOC );
$aid = $archive [ 'id' ];
$sql = " INSERT INTO news_mdnews (aid,uuid) VALUES (?,?) " ;
$sth = $this -> db -> prepare ( $sql );
$uuidex = $sth -> execute ( array ( $aid , $uuid ));
if ( $uuidex )
{
$msg [ 'status' ] = 1 ;
$msg [ 'outstring' ] = " 新闻添加成功 " ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
} else {
$sql = " DELETE FROM news_archives WHERE id= $aid " ;
@ $this -> db -> exec ( $sql ); //如果新闻添加失败就删除原新闻,否则产生重复错误
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = " 新闻添加失败,请重试 " ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
//添加失败
} else {
$msg [ 'status' ] = 0 ;
$msg [ 'error' ] = " 新闻添加失败,请重试 " ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
} //新闻添加 end -->
//新闻修改
2012-03-23 09:53:07 +00:00
else
{
$sql = " UPDATE news_archives SET title=?,keywords=?,description=?,body=? WHERE id=? AND userid=? " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $data [ 'title' ], $data [ 'keyword' ], $data [ 'description' ], $data [ 'body' ], $aid , $data [ 'userid' ]));
2012-03-26 07:53:08 +00:00
if ( $ex )
{
$msg [ 'status' ] = 1 ;
$msg [ 'outstring' ] = " 新闻编辑成功 " ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
} else {
$msg [ 'status' ] = 0 ;
$msg [ 'outstring' ] = " 新闻编辑失败,请重试 " ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
} //新闻修改 end -->
2012-03-23 07:39:52 +00:00
} catch ( Exception $e ){
if ( $this -> debug == 0 )
{
$msg [ 'status' ] = 0 ;
2012-03-23 09:53:07 +00:00
if ( empty ( $aid ))
{ $msg [ 'error' ] = " 新闻添加失败,请重试 " ;}
else
{ $msg [ 'error' ] = " 新闻编辑失败,请重试 " ;}
2012-03-23 07:39:52 +00:00
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
} else {
$msg [ 'status' ] = 0 ;
2012-03-23 09:53:07 +00:00
$msg [ 'error' ] = " 新闻添加/编辑失败,请重试: " . $e -> getMessage ();
2012-03-23 07:39:52 +00:00
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $msg ));
return true ;
}
2012-03-26 07:53:08 +00:00
} //catch end
} //$ac = 'newsadd' endif;
2012-03-20 09:34:44 +00:00
} //newsAction() 数据新闻
2012-03-21 07:57:13 +00:00
function viewauthorsAction (){
$this -> _helper -> viewRenderer ( 'view-authors' );
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
$sql = " SELECT u.realname,u.unit,u.email,m.title,m.description FROM normalmetadata m
LEFT JOIN mdauthor a ON m . uuid = a . uuid
LEFT JOIN users u ON u . id = a . userid
2012-03-28 08:29:07 +00:00
WHERE status >= 0 AND m . uuid = ? AND a . status = 1
2012-03-21 07:57:13 +00:00
ORDER BY status DESC , a . id DESC " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
} else {
$this -> view -> error = " 参数有误 " ;
}
}
2012-03-09 09:03:50 +00:00
2012-05-10 10:12:14 +00:00
/*
* versionAction () 版本控制
*
*
*/
2012-03-26 04:16:36 +00:00
function versionAction ()
{
2012-03-27 10:17:51 +00:00
$ac = $this -> _request -> getParam ( 'ac' );
2012-03-26 04:16:36 +00:00
$uuid = $this -> _request -> getParam ( 'uuid' );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
2012-03-27 10:17:51 +00:00
//查看单条数据的所有版本
if ( ! empty ( $uuid ) && empty ( $ac ))
{
//view the versions of the data
2012-03-27 03:53:13 +00:00
$sql = " SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v
2012-03-26 04:16:36 +00:00
LEFT JOIN metadata md ON md . uuid = v . uuid
2012-03-27 10:17:51 +00:00
LEFT JOIN mdauthor a ON md . uuid = a . uuid
2012-03-27 03:53:13 +00:00
left join users u on v . userid = u . id
2012-03-28 08:29:07 +00:00
WHERE md . title IS NOT NULL AND a . userid = ? and v . uuid = ? AND a . status = 1
2012-03-26 04:16:36 +00:00
order by v . ts_created desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id , $uuid ));
2012-03-27 10:17:51 +00:00
$rows = $sth -> fetchAll ();
2012-03-26 04:16:36 +00:00
@ $this -> view -> mdtitle = $rows [ 0 ][ 'title' ];
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
2012-03-27 10:17:51 +00:00
$this -> view -> paginator = $paginator ;
2012-03-26 04:16:36 +00:00
}
2012-03-27 10:17:51 +00:00
//查看所有版本列表
2012-03-26 04:16:36 +00:00
else if (( empty ( $ac ) && empty ( $uuid )) || $ac == 'list' )
{
2012-03-27 03:53:13 +00:00
$sql = " SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v
2012-03-26 04:16:36 +00:00
LEFT JOIN metadata md ON md . uuid = v . uuid
2012-03-27 10:17:51 +00:00
LEFT JOIN mdauthor a ON md . uuid = a . uuid
2012-03-27 03:53:13 +00:00
left join users u on v . userid = u . id
2012-03-28 08:29:07 +00:00
WHERE md . title IS NOT NULL AND a . userid = ? AND a . status = 1
2012-03-26 04:16:36 +00:00
order by v . ts_created desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
2012-03-27 10:17:51 +00:00
//按数据浏览
2012-03-26 04:16:36 +00:00
else if ( $ac == " bydata " )
2012-03-27 10:17:51 +00:00
{
2012-03-26 04:16:36 +00:00
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
$sql = " SELECT md.title,md.uuid,count(v.id) as c FROM mdversion v
LEFT JOIN metadata md ON md . uuid = v . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
2012-03-28 08:29:07 +00:00
WHERE md . title IS NOT NULL AND a . userid = ? AND a . status = 1 " ;
2012-03-26 04:16:36 +00:00
if ( ! empty ( $keywords ))
{
2012-03-27 10:17:51 +00:00
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " md.title " , " md.description " ));
$sql .= ' and ' . $where ;
}
2012-03-26 04:16:36 +00:00
$sql .= " group by md.uuid,md.title " ;
2012-03-27 10:17:51 +00:00
2012-03-26 04:16:36 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'version-bydata' );
}
2012-03-27 10:17:51 +00:00
//删除某个版本
else if ( $ac == " delete " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
try {
$id = $this -> _request -> getParam ( 'id' );
if ( empty ( $id ) || ! is_numeric ( $id ))
{
$data = array ( " error " => " 参数错误 " );
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
2012-03-27 10:17:51 +00:00
return true ;
}
$sql = " DELETE FROM mdversion v
USING mdauthor a
2012-03-29 15:12:37 +00:00
WHERE v . uuid = a . uuid and v . id = ? AND a . userid = ? AND a . status = 1 " ;
2012-03-27 10:17:51 +00:00
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $id , $u_id ));
if ( $ex )
{
$data = array ( " deleted " => $id , " error " => $this -> alertbox ( 'ok' , '删除成功' ));
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
return true ;
2012-03-27 10:17:51 +00:00
} else {
$data = array ( " error " => $this -> alertbox ( 'error' , '删除失败,请确认权限后重试' ));
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
return true ;
2012-03-27 10:17:51 +00:00
}
} catch ( Exception $e ) {
$msg = " 删除失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $this -> alertbox ( 'error' , $msg ));
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
return true ;
2012-03-27 10:17:51 +00:00
}
}
//恢复到geonetwork
else if ( $ac == " restore " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
try {
$id = $this -> _request -> getParam ( 'id' );
if ( empty ( $id ) || ! is_numeric ( $id ))
{
$data = array ( " error " => " 参数错误 " );
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
2012-03-27 10:17:51 +00:00
return true ;
2012-05-10 10:12:14 +00:00
}
2012-03-29 15:12:37 +00:00
$this -> wdb = Zend_Db :: factory ( $this -> view -> config -> geonetwork );
2012-03-27 10:17:51 +00:00
$sql = " SELECT v.xml,v.uuid FROM mdversion v
LEFT JOIN mdauthor a ON a . uuid = v . uuid
2012-03-28 08:29:07 +00:00
WHERE v . id = ? AND a . userid = ? AND a . status = 1 " ;
2012-03-27 10:17:51 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id , $u_id ));
$row = $sth -> fetch ();
$sql = " SELECT data FROM metadata WHERE uuid=? " ;
2012-03-29 15:12:37 +00:00
$sth = $this -> wdb -> prepare ( $sql );
2012-03-27 10:17:51 +00:00
$sth -> execute ( array ( $row [ 'uuid' ]));
$row_geo = $sth -> fetch ();
if ( $row [ 'xml' ] == $row_geo [ 'data' ])
{
2012-05-10 10:12:14 +00:00
$data = array ( " error " => $this -> alertbox ( 'warning' , '无须恢复,元数据相同' ));
2012-03-29 15:12:37 +00:00
$this -> jsonexit ( $data );
2012-03-28 03:38:22 +00:00
return true ;
2012-03-27 10:17:51 +00:00
}
$sql = " UPDATE metadata SET data=? WHERE uuid=? " ;
2012-03-29 15:12:37 +00:00
$sth = $this -> wdb -> prepare ( $sql );
2012-03-27 10:17:51 +00:00
$ex = $sth -> execute ( array ( $row [ 'xml' ], $row [ 'uuid' ]));
if ( $ex )
2012-03-29 15:12:37 +00:00
{
$data = array ( " error " => $this -> alertbox ( 'ok' , '恢复成功' ));
$this -> jsonexit ( $data );
2012-03-28 03:38:22 +00:00
return true ;
2012-03-29 15:12:37 +00:00
} else {
$data = array ( " error " => $this -> alertbox ( 'error' , '恢复失败,请确认权限后重试' ));
$this -> jsonexit ( $data );
2012-03-28 03:38:22 +00:00
return true ;
2012-03-29 15:12:37 +00:00
}
2012-03-27 10:17:51 +00:00
} catch ( Exception $e ) {
$msg = " 恢复失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $this -> alertbox ( 'error' , $msg ));
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
return true ;
2012-03-27 10:17:51 +00:00
}
}
//发布到评审
else if ( $ac == " commit " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
try {
$id = $this -> _request -> getParam ( 'id' );
if ( empty ( $id ) || ! is_numeric ( $id ))
{
$data = array ( " error " => " 参数错误 " );
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
2012-03-27 10:17:51 +00:00
return true ;
2012-05-10 10:12:14 +00:00
}
2012-03-29 15:12:37 +00:00
$changelog = $this -> _request -> getParam ( 'changelog' );
if ( empty ( $changelog ))
{
$data = array ( " error " => $this -> alertbox ( 'warning' , '请输入变更信息' ));
$this -> jsonexit ( $data );
return true ;
2012-05-10 10:12:14 +00:00
}
// 1. 权限认定
$sql = " select a.* from mdauthor a left join mdversion v on a.uuid=v.uuid
where a . status = 1 and a . userid = ? and v . id = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id , $id ));
$row = $sth -> fetch ();
if ( empty ( $row ))
{
2012-03-29 15:12:37 +00:00
$data = array ( " error " => '无权限修改数据' );
$this -> jsonexit ( $data );
2012-05-10 10:12:14 +00:00
return true ;
}
// 2. 保存变化记录 save changelog & userid
$sql = " UPDATE mdversion SET changelog=?,userid=? WHERE id=? " ;
$this -> db -> query ( $sql , array ( $changelog , $u_id , $id ));
2012-04-01 15:07:40 +00:00
// 3. 获取数据评审状态
2012-05-10 10:12:14 +00:00
$sql = " SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid
2012-04-01 15:07:40 +00:00
left join metadata m on s . uuid = m . uuid WHERE v . id = ? " ;
2012-03-27 10:17:51 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-03-29 15:12:37 +00:00
$sth -> execute ( array ( $id ));
2012-05-10 10:12:14 +00:00
$row = $sth -> fetch ();
if ( empty ( $row )) //无对应记录
{
$sql = " select m.id from metadata m left join mdversion v on m.uuid=v.uuid where v.id=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$mrow = $sth -> fetch ();
if ( empty ( $mrow )) //说明是新数据
{
//导入元数据
$iso = new ISO19115 ();
2012-07-12 04:08:28 +00:00
@ $iso -> saveDB ( $this -> db , $row [ 'xml' ]);
2012-05-10 10:12:14 +00:00
//进入评审库
$sql = " insert into mdstatus (uuid,status,userid) select uuid,0,? from mdversion where id=? " ;
$this -> db -> query ( $sql , array ( $u_id , $id ));
//email to admin
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " metadata-new-admin " , array (
'user' => $user -> username ,
'uuid' => $iso -> uuid ,
'email' => $user -> email ,
//元数据标题
'title' => $iso -> resTitle ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
$mail -> send ();
unset ( $mail );
unset ( $mailtp );
//email to author
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " metadata-new-author " , array (
'user' => $user -> username ,
'uuid' => $iso -> uuid ,
'email' => $user -> email ,
//元数据标题
'title' => $iso -> resTitle ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $user -> email );
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '该版本已经成功提交,请等待数据中心进一步处理!' ));
$this -> jsonexit ( $data );
return true ;
} else { //说明是已发布的数据且数据不存在评审信息
//同步元数据
$iso = new ISO19115 ();
2012-07-12 04:08:28 +00:00
@ $iso -> saveDB ( $this -> db , $row [ 'xml' ]);
2012-05-10 10:12:14 +00:00
//移除中间版本
2012-06-12 11:41:04 +00:00
$sql = " delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null " ;
2012-05-10 10:12:14 +00:00
$this -> db -> query ( $sql , array ( $id ));
//修改评审状态为发布,且由其提交的用户进行管理
$sql = " insert into mdstatus (uuid,status,userid) select uuid,6,? from mdversion where id=? " ;
$this -> db -> query ( $sql , array ( $u_id , $id ));
//email to admin & author
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " metadata-release " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
'changelog' => $changelog ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $this -> view -> config -> service -> email );
2012-06-12 11:41:04 +00:00
//$mail->addCc($this->view->config->service->email);
2012-05-10 10:12:14 +00:00
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '该版本已经成功发布!' ));
$this -> jsonexit ( $data );
return true ;
}
}
2012-06-12 11:41:04 +00:00
else if ( $row [ 'status' ] ==- 1 || $row [ 'status' ] == 0 || $row [ 'status' ] == 1 ) //取消发布的数据,初始状态,已接收
2012-05-10 10:12:14 +00:00
{
//同步元数据
$iso = new ISO19115 ();
2012-07-12 04:08:28 +00:00
@ $iso -> saveDB ( $this -> db , $row [ 'xml' ]);
2012-05-10 10:12:14 +00:00
//email to admin
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " version-commit-admin " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
'changelog' => $changelog ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
$mail -> send ();
unset ( $mail );
unset ( $mailtp );
//email to author
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " version-commit-author " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $user -> email );
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '该版本已经成功提交并同步,请等待数据中心进一步处理!' ));
$this -> jsonexit ( $data );
return true ;
}
2012-06-12 11:41:04 +00:00
else if ( $row [ 'status' ] == 2 || $row [ 'status' ] == 3 || $row [ 'status' ] == 4 ) //已发送过外审邮件,需由编辑告知变化信息
2012-05-10 10:12:14 +00:00
{
//email to admin
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " version-commit-admin " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
'changelog' => $changelog ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
$mail -> send ();
unset ( $mail );
unset ( $mailtp );
//email to author
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " version-commit-author " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $user -> email );
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
//email to experts, sync to database?
//todo!!!
//should generate new pdf? or user could not commit a new version when it is in the reviewing process?
/*
unset ( $mail );
unset ( $mailtp );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " version-commit-expert " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $user -> email );
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
*/
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '该版本已经成功提交,请等待数据中心进一步处理!' ));
$this -> jsonexit ( $data );
return true ;
}
2012-06-12 11:41:04 +00:00
else if ( $row [ 'status' ] >= 5 ) //数据已经发布,再次修改后将只通知管理员,保留发布状态
2012-05-10 10:12:14 +00:00
{
//同步元数据
$iso = new ISO19115 ();
2012-07-12 04:08:28 +00:00
@ $iso -> saveDB ( $this -> db , $row [ 'xml' ]);
2012-05-10 10:12:14 +00:00
//移除中间版本
2012-06-12 11:41:04 +00:00
$sql = " delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null " ;
2012-05-10 10:12:14 +00:00
$this -> db -> query ( $sql , array ( $id ));
//email to admin & author
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " metadata-release " , array (
'user' => $user -> username ,
'uuid' => $row [ 'uuid' ],
'email' => $user -> email ,
//元数据标题
'title' => $row [ 'title' ],
'changelog' => $changelog ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $this -> view -> config -> service -> email );
2012-06-12 11:41:04 +00:00
//$mail->addCc($this->view->config->service->email);
2012-05-10 10:12:14 +00:00
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '该版本已经成功发布!' ));
$this -> jsonexit ( $data );
return true ;
2012-03-29 15:12:37 +00:00
}
2012-04-01 15:07:40 +00:00
} catch ( Exception $e ) {
2012-03-27 10:17:51 +00:00
$msg = " 提交失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $this -> alertbox ( 'error' , $msg ));
2012-03-28 03:38:22 +00:00
$this -> jsonexit ( $data );
return true ;
2012-04-01 15:07:40 +00:00
}
2012-03-28 03:38:22 +00:00
} //发布到评审
2012-03-27 10:17:51 +00:00
2012-03-28 03:38:22 +00:00
//与前一个版本对比
else if ( $ac == " diff " )
{
$this -> _helper -> viewRenderer ( 'version-diff' );
$id = $this -> _request -> getParam ( 'id' );
if ( empty ( $id ) || ! is_numeric ( $id ))
{
$this -> view -> error = " 参数错误 " ;
return true ;
}
$sql = " SELECT v.uuid,md.title FROM mdversion v
LEFT JOIN mdauthor a ON a . uuid = v . uuid
LEFT JOIN metadata md ON v . uuid = md . uuid
2012-03-28 08:29:07 +00:00
WHERE v . id = ? AND a . userid = ? AND a . status = 1 " ;
2012-03-28 03:38:22 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id , $u_id ));
$row = $sth -> fetch ();
$sql = " SELECT v.* FROM mdversion v
2012-03-28 08:29:07 +00:00
WHERE v . uuid = ? AND v . id <= ?
2012-03-28 03:38:22 +00:00
ORDER BY v . ts_created DESC
LIMIT ? " ;
$sth = $this -> db -> prepare ( $sql );
2012-03-28 08:29:07 +00:00
$sth -> execute ( array ( $row [ 'uuid' ], $id , 2 ));
2012-03-28 03:38:22 +00:00
$rows = $sth -> fetchAll ();
if ( count ( $rows ) < 2 )
{
$this -> view -> error = " 对比失败:之前没有版本可以对比 " ;
return true ;
}
$this -> view -> info = $row ;
$this -> view -> data = $rows ;
}
2012-03-28 10:23:32 +00:00
2012-05-10 10:12:14 +00:00
} // versionAction() 数据版本管理
//新建元数据
function newdataAction ()
{
2012-03-28 10:23:32 +00:00
$ac = $this -> _request -> getParam ( 'ac' );
2012-05-10 10:12:14 +00:00
$id = $this -> _request -> getParam ( 'id' );
2012-03-28 10:23:32 +00:00
$this -> wdb = Zend_Db :: factory ( $this -> view -> config -> geonetwork );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
//在geonetwork中查看单条数据
if ( ! empty ( $id ) && empty ( $ac ))
2012-05-10 10:12:14 +00:00
{
2012-03-28 10:23:32 +00:00
$this -> view -> url = 'metadata.show?id=' . $id ;
$this -> _helper -> viewRenderer ( 'newdata-view' );
2012-05-10 10:12:14 +00:00
}
2012-03-28 10:23:32 +00:00
//查看属于自己的所有的未提交数据列表
else if (( empty ( $ac ) && empty ( $uuid )) || $ac == 'list' )
{
$sql = " SELECT (regexp_matches(gn.data,'<resTitle>(.*)</resTitle>'))[1] as title,gn.id,gn.uuid FROM geonetworkmetadata gn
WHERE gn . uuid not in ( select uuid from metadata ) and gn . owner = ?
order by gn . id desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
2012-05-10 10:12:14 +00:00
}
2012-03-28 10:23:32 +00:00
//元数据导入
else if ( $ac == " import " )
{
$this -> _helper -> viewRenderer ( 'newdata-import' );
2012-05-10 10:12:14 +00:00
}
2012-05-04 16:26:03 +00:00
//从模板新建元数据
else if ( $ac == " add-by-template " )
2012-05-10 10:12:14 +00:00
{
$keywords = $this -> _request -> getParam ( 'q' );
$sql = " select id,(regexp_matches(data,'<resTitle>(.*)</resTitle>'))[1] as title,(owner- $u_id ) as isowner from metadata where istemplate='y' and schemaid='iso19115' " ;
if ( ! empty ( $keywords ))
{
$this -> view -> q = $keywords ;
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " data " ));
$sql .= ' and ' . $where ;
}
$sql .= " order by changedate desc " ;
$sth = $this -> wdb -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
2012-03-28 10:23:32 +00:00
$this -> _helper -> viewRenderer ( 'newdata-add' );
2012-05-10 10:12:14 +00:00
}
else if ( $ac == " add-by-data " )
{
$keywords = $this -> _request -> getParam ( 'q' );
$sql = " SELECT md.title,md.uuid,md.description,gn.id as gid FROM normalmetadata md
left join geonetworkmetadata gn on md . uuid = gn . uuid
WHERE gn . id is not null " ;
if ( ! empty ( $keywords ))
{
$this -> view -> q = $keywords ;
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " md.title " , " md.description " ));
$sql .= ' and ' . $where ;
}
$sql .= " order by md.ts_created desc " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'newdata-add-bydata' );
}
//提交数据
else if ( $ac == " commit " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
try {
$id = $this -> _request -> getParam ( 'id' );
if ( empty ( $id ) || ! is_numeric ( $id ))
{
$data = array ( " error " => " 参数错误 " );
$this -> jsonexit ( $data );
return true ;
}
$changelog = $this -> _request -> getParam ( 'changelog' );
if ( empty ( $changelog ))
{
$data = array ( " error " => $this -> alertbox ( 'warning' , '请输入变更信息' ));
$this -> jsonexit ( $data );
return true ;
}
// 1. 权限认定: 当前用户必须和其owner相同
// 数据应当没有评审状态,没有作者信息
$sql = " select gn.id from geonetworkmetadata gn
left join mdstatus s on gn . uuid = s . uuid
left join mdauthor a on s . uuid = a . uuid
where s . id is not null and a . id is not null and gn . id = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$row = $sth -> fetch ();
2012-05-21 09:34:04 +00:00
if ( ! empty ( $row ))
2012-05-10 10:12:14 +00:00
{
$data = array ( " error " => '错误的入口' );
$this -> jsonexit ( $data );
return true ;
}
2012-05-21 09:34:04 +00:00
$sql = " select uuid,data from metadata where id=? and owner=? " ;
2012-05-10 10:12:14 +00:00
$sth = $this -> wdb -> prepare ( $sql );
$sth -> execute ( array ( $id , $u_id ));
$row = $sth -> fetch ();
if ( empty ( $row ))
{
$data = array ( " error " => '无权限修改数据' );
$this -> jsonexit ( $data );
return true ;
}
// 保存数据作者信息
$sql = " insert into mdauthor (uuid,userid,ts_activated,status) values(?,?,now(),1) " ;
2012-05-21 09:34:04 +00:00
$this -> db -> query ( $sql , array ( $row [ 'uuid' ], $u_id ));
2012-05-10 10:12:14 +00:00
// 2. 保存变化记录 save changelog & userid for the latest version
$sql = " UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid=? order by ts_created desc limit 1) " ;
$this -> db -> query ( $sql , array ( $changelog , $u_id , $row [ 'uuid' ]));
// 3. 保存数据评审状态
//导入元数据
$iso = new ISO19115 ();
2012-05-21 09:34:04 +00:00
@ $iso -> saveDB ( $this -> db , $row [ 'data' ]);
2012-05-10 10:12:14 +00:00
//进入评审库
2012-05-21 09:47:22 +00:00
$sql = " insert into mdstatus (uuid,status,userid) select uuid,0,? from geonetworkmetadata where id=? " ;
2012-05-10 10:12:14 +00:00
$this -> db -> query ( $sql , array ( $u_id , $id ));
//email to admin
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " metadata-new-admin " , array (
'user' => $user -> username ,
'uuid' => $iso -> uuid ,
'email' => $user -> email ,
//元数据标题
'title' => $iso -> resTitle ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
$mail -> send ();
unset ( $mail );
unset ( $mailtp );
//email to author
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " metadata-new-author " , array (
'user' => $user -> username ,
'uuid' => $iso -> uuid ,
'email' => $user -> email ,
//元数据标题
'title' => $iso -> resTitle ,
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
if ( $this -> debug == 0 )
{
$mail -> addTo ( $user -> email );
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '该版本已经成功提交,请等待数据中心进一步处理!' ));
$this -> jsonexit ( $data );
return true ;
} catch ( Exception $e ) {
$msg = " 提交失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $this -> alertbox ( 'error' , $msg ));
$this -> jsonexit ( $data );
return true ;
}
}
2012-03-28 10:23:32 +00:00
}
2012-05-10 10:12:14 +00:00
//新建元数据
2012-03-29 09:12:47 +00:00
//文献管理
2012-05-10 10:12:14 +00:00
function literatureAction ()
{
2012-03-29 09:12:47 +00:00
$ac = $this -> _request -> getParam ( 'ac' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$id = $this -> _request -> getParam ( 'id' );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
//查看单条数据的所有文献
if ( ! empty ( $uuid ) && empty ( $ac ))
{
$sql = " SELECT md.title,md.uuid,r.id,r.reference,r.link FROM mdref mr
LEFT JOIN metadata md ON md . uuid = mr . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
left join reference r on mr . refid = r . id
WHERE md . title IS NOT NULL AND a . userid = ? and mr . uuid = ? AND a . status = 1
order by md . ts_created desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id , $uuid ));
$rows = $sth -> fetchAll ();
@ $this -> view -> mdtitle = $rows [ 0 ][ 'title' ];
$paginator = Zend_Paginator :: factory ( $rows );
$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 ( 'literature-viewdata' );
}
2012-05-10 10:12:14 +00:00
2012-03-29 09:12:47 +00:00
//查看单条文献的所有数据
if ( ! empty ( $id ) && empty ( $ac ))
{
$sql = " SELECT md.title,md.uuid,r.id,r.reference,r.link,(a.userid-?) as isauthor FROM mdref mr
LEFT JOIN metadata md ON md . uuid = mr . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
left join reference r on mr . refid = r . id
WHERE md . title IS NOT NULL AND mr . refid = ? AND a . status = 1
order by md . ts_created desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id , $id ));
$rows = $sth -> fetchAll ();
@ $this -> view -> mdtitle = $rows [ 0 ][ 'reference' ];
$paginator = Zend_Paginator :: factory ( $rows );
$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 ( 'literature-viewliter' );
2012-05-10 10:12:14 +00:00
}
2012-03-29 09:12:47 +00:00
//查看所有文献列表
else if (( empty ( $ac ) && empty ( $uuid )) && empty ( $id ))
{
$keywords = $this -> _request -> getParam ( 'q' );
$sql = " SELECT md.title,md.uuid,r.reference,r.id,mr.id as mrid FROM mdref mr
LEFT JOIN metadata md ON md . uuid = mr . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
left join reference r on mr . refid = r . id
WHERE md . title IS NOT NULL AND a . userid = ? AND a . status = 1 " ;
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
if ( ! empty ( $keywords ))
{
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " r.reference " , " md.title " , " md.description " ));
$sql .= ' and ' . $where ;
}
$sql .= " order by md.ts_created desc " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
//按文献浏览
else if ( $ac == " byliter " )
{
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
$sql = " SELECT count(md.uuid) as c,r.reference,r.id FROM reference r
left join mdref mr on r . id = mr . refid
LEFT JOIN metadata md ON md . uuid = mr . uuid
2012-05-10 10:12:14 +00:00
LEFT JOIN mdauthor a ON md . uuid = a . uuid
2012-03-29 09:12:47 +00:00
WHERE md . title IS NOT NULL AND a . userid = ? AND a . status = 1 " ;
if ( ! empty ( $keywords ))
{
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " r.reference " ));
$sql .= ' and ' . $where ;
}
$sql .= " group by r.reference,r.id " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'literature-byliter' );
}
//按数据浏览
else if ( $ac == " bydata " )
{
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
$sql = " SELECT md.title,md.uuid,count(mr.id) as c FROM metadata md
LEFT JOIN mdref mr ON md . uuid = mr . uuid
2012-05-10 10:12:14 +00:00
LEFT JOIN mdauthor a ON md . uuid = a . uuid
2012-03-29 09:12:47 +00:00
left join reference r on mr . refid = r . id
WHERE md . title IS NOT NULL AND a . userid = ? AND a . status = 1 " ;
if ( ! empty ( $keywords ))
{
$search = new Search ( $keywords );
$where = $search -> sql_expr ( array ( " md.title " , " md.description " ));
$sql .= ' and ' . $where ;
}
$sql .= " group by md.uuid,md.title " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'literature-bydata' );
2012-05-10 10:12:14 +00:00
}
//添加文献信息
2012-03-29 09:12:47 +00:00
else if ( $ac == " add " )
{
2012-05-17 10:00:27 +00:00
$submit = $this -> _request -> getParam ( 'submit' );
if ( ! empty ( $submit ))
{
2012-03-29 09:12:47 +00:00
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
try {
2012-05-10 10:12:14 +00:00
$uuid = $this -> _request -> getParam ( 'uuid' );
$ref = $this -> _request -> getParam ( 'ref' );
2012-03-29 09:12:47 +00:00
$reftype = $this -> _request -> getParam ( 'reftype' );
2012-05-17 10:00:27 +00:00
$url = $this -> _request -> getParam ( 'url' );
2012-03-29 09:12:47 +00:00
if ( empty ( $uuid ) || empty ( $ref ) || ! is_numeric ( $reftype ))
{
$data = array ( " error " => " 参数错误 " );
$this -> jsonexit ( $data );
return true ;
2012-05-10 10:12:14 +00:00
}
$sql = " select * from mdauthor where userid=? and uuid=? and status=1 " ;
2012-03-29 09:12:47 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id , $uuid ));
$row = $sth -> fetch ();
2012-05-10 10:12:14 +00:00
if ( empty ( $row ))
2012-03-29 09:12:47 +00:00
{
$data = array ( " error " => $this -> alertbox ( 'warning' , '您不是该数据作者,无法添加对应文献信息。' ));
$this -> jsonexit ( $data );
return true ;
}
2012-05-10 10:12:14 +00:00
$sql = " select id from reference where reference=? " ;
2012-03-29 09:12:47 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $ref ));
$row = $sth -> fetch ();
if ( ! $row )
{
2012-05-10 10:12:14 +00:00
$sql = " insert into reference (reference,link) values(?,?) " ;
$sth = $this -> db -> prepare ( $sql );
2012-05-17 10:00:27 +00:00
$sth -> execute ( array ( trim ( $ref ), $url ));
2012-05-10 10:12:14 +00:00
$sql = " select id from reference where reference=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( trim ( $ref )));
2012-03-29 09:12:47 +00:00
$row = $sth -> fetch ();
}
2012-05-10 10:12:14 +00:00
$sql = " insert into mdref (uuid,refid,reftype) values(?,?,?) " ;
$sth = $this -> db -> prepare ( $sql );
2012-03-29 09:12:47 +00:00
$ex = $sth -> execute ( array ( $uuid , $row [ 'id' ], $reftype ));
if ( $ex )
{
$data = array ( " commited " => 1 , " error " => $this -> alertbox ( 'ok' , '成功添加文献!' ));
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => $this -> alertbox ( 'error' , '提交失败,请确认权限后重试' ));
$this -> jsonexit ( $data );
return true ;
}
} catch ( Exception $e ) {
$msg = " 提交失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $this -> alertbox ( 'error' , $msg ));
$this -> jsonexit ( $data );
return true ;
}
2012-05-17 10:00:27 +00:00
} else {
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer ( 'literature-add' );
$this -> view -> uuid = $this -> _request -> getParam ( 'uuid' );
}
2012-05-10 10:12:14 +00:00
} //添加文献
2012-03-29 09:12:47 +00:00
//删除某个文献
else if ( $ac == " delete " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
2012-05-10 10:12:14 +00:00
$id = $this -> _request -> getParam ( 'id' );
2012-03-29 09:12:47 +00:00
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( empty ( $uuid ) || ! is_numeric ( $id ))
{
$data = array ( " error " => " 参数错误 " );
$this -> jsonexit ( $data );
return true ;
}
try {
$sql = " DELETE FROM mdref r
USING mdauthor a
WHERE r . uuid = a . uuid and r . refid = ? and r . uuid = ? AND a . userid = ? AND a . status = 1 " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $id , $uuid , $u_id ));
if ( $ex )
{
$data = array ( " deleted " => $id . $uuid , " error " => $this -> alertbox ( 'ok' , '删除成功' ));
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => $this -> alertbox ( 'error' , '删除失败,请确认权限后重试' ));
$this -> jsonexit ( $data );
return true ;
}
} catch ( Exception $e ) {
$msg = " 删除失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $this -> alertbox ( 'error' , $msg ));
$this -> jsonexit ( $data );
return true ;
}
2012-05-17 10:00:27 +00:00
}
//文献附件上传
else if ( $ac == 'upload' )
{
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _getParam ( 'uuid' );
try {
$files = new files ();
2012-05-18 13:14:52 +00:00
$msg = $files -> upload ( $this -> view -> config -> upload , $_FILES [ 'Filedata' ], 'literature' );
2012-05-17 10:00:27 +00:00
if ( empty ( $msg [ 'error' ]))
{
$msg [ 'error' ] = " " ;
$filename = $msg [ 'db_path' ];
$filesize = $msg [ 'file_size' ];
$filedesc = $this -> _request -> getParam ( 'filedesc' );
$filetype = $msg [ 'file_type' ];
$realname = $msg [ 'realname' ];
$sql = " insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values (' $filename ',' $filetype ',' $filedesc ',' $u_id ',' $filesize ',' $realname ') RETURNING id " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$att = $sth -> fetch ( PDO :: FETCH_ASSOC );
$msg [ 'attid' ] = $attid = $att [ 'id' ];
2012-05-18 01:45:40 +00:00
$msg [ 'html' ] = $realname . '[' . round ( $filesize / 1024 , 2 ) . ' kb]<input type="hidden" name="url" value="/service/attach/id/' . $attid . '" /><div class="cancel"><a href="javascript:;" id="deletebtn_' . $attid . '" title="删除该文件"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>' ;
2012-05-17 10:00:27 +00:00
echo Zend_Json :: encode ( $msg );
exit ();
} else {
$msg [ 'error' ] = '附件上传失败:' . $msg [ 'error' ];
@ unlink ( $filename );
echo Zend_Json :: encode ( $msg );
exit ();
}
} catch ( Exception $e ){
$msg [ 'error' ] = " 错误: " . $e -> getMessage ();
echo Zend_Json :: encode ( $msg );
exit ();
}
} //文件上传
} //文献管理
2012-05-10 10:12:14 +00:00
//文档管理
function documentAction (){
$ac = $this -> _request -> getParam ( 'ac' );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
if ( empty ( $ac ) || $ac == 'list' || $ac == 'search' )
{
$wheresql = " " ;
$keyword = $this -> _request -> getParam ( 'q' );
if ( $ac == 'search' && ! empty ( $keyword ))
{
$this -> view -> q = $keyword ;
$search = new Search ( $keyword );
$wheresql = $search -> sql_expr ( array ( " md.title " ));
}
if ( ! empty ( $wheresql ))
{
$wheresql = " AND " . $wheresql ;
}
$sql = " select count(att.id) as aid,md.title,md.uuid from metadata md
LEFT JOIN mdauthor a ON a . uuid = md . uuid
LEFT JOIN mdattach att ON att . uuid = md . uuid
WHERE a . status >= 1 AND a . userid = ? $wheresql
GROUP BY md . title , md . uuid " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $u_id ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
if ( $ac == 'view' )
{
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( empty ( $uuid ) || ! preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
$this -> view -> error = " 参数有误! " ;
return true ;
}
2012-05-18 01:45:40 +00:00
$sql = " SELECT title FROM metadata WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
$this -> view -> title = $row [ 'title' ];
2012-05-10 10:12:14 +00:00
$sql = " SELECT att.*,md.title,md.uuid FROM mdattach mda
LEFT JOIN attachments att ON mda . id = att . id
LEFT JOIN metadata md ON mda . uuid = md . uuid
2012-05-18 01:45:40 +00:00
LEFT JOIN users u ON att . userid = u . id
WHERE md . uuid = ?
" ;
2012-05-10 10:12:14 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-05-18 01:45:40 +00:00
$sth -> execute ( array ( $uuid ));
2012-05-10 10:12:14 +00:00
$rows = $sth -> fetchAll ();
$this -> view -> info = $rows ;
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 10 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'document-view' );
}
if ( $ac == 'del' )
{
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
( int ) $id = $this -> _request -> getParam ( 'id' );
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( ! preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
exit ();
}
$info = $this -> getFileinfo ( $id );
$filepath = $dataFilePath . $info [ 'filename' ];
try {
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$userid = $user -> id ;
$sql_mdattach = " delete from mdattach where uuid=' $uuid ' and id=' $id ' " ;
$sql = " delete from attachments where id=' $id ' and userid=' $userid ' " ;
if ( $this -> db -> exec ( $sql_mdattach ) > 0 && $this -> db -> exec ( $sql ) > 0 )
{
@ unlink ( $filepath );
echo " ok " ;
}
}
} catch ( Exception $e ){}
//不输出任何错误
} //删除
if ( $ac == 'upload' )
{
$submit = $this -> _request -> getParam ( 'submit' );
if ( empty ( $submit ))
{
$uuid = $this -> _request -> getParam ( 'uuid' );
$this -> view -> uuid = $uuid ;
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer ( 'document-upload' );
return true ;
}
else
{
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _getParam ( 'uuid' );
try {
$files = new files ();
2012-05-18 13:14:52 +00:00
$msg = $files -> upload ( $this -> view -> config -> upload , $_FILES [ 'Filedata' ], 'document' );
2012-05-10 10:12:14 +00:00
if ( empty ( $msg [ 'error' ]))
{
$msg [ 'error' ] = " " ;
$filename = $msg [ 'db_path' ];
$filesize = $msg [ 'file_size' ];
$filedesc = $this -> _request -> getParam ( 'filedesc' );
$filetype = $msg [ 'file_type' ];
$realname = $msg [ 'realname' ];
$sql = " insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values (' $filename ',' $filetype ',' $filedesc ',' $u_id ',' $filesize ',' $realname ') RETURNING id " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$att = $sth -> fetch ( PDO :: FETCH_ASSOC );
$msg [ 'attid' ] = $attid = $att [ 'id' ];
$sql = " insert into mdattach (uuid,id) values (' $uuid ',' $attid ') " ;
if ( $this -> db -> exec ( $sql ))
{
$msg [ 'html' ] = $realname . '[' . round ( $filesize / 1024 , 2 ) . ' kb]<input type="hidden" name="atts[]" value="' . $attid . '" /><div class="cancel"><a href="javascript:;" id="deletebtn_' . $attid . '"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>' ;
echo Zend_Json :: encode ( $msg );
exit ();
} else {
$msg [ 'error' ] = '附件上传失败:写入附件表出错' ;
@ unlink ( $filename );
echo Zend_Json :: encode ( $msg );
exit ();
}
} else {
$msg [ 'error' ] = '附件上传失败:' . $msg [ 'error' ];
@ unlink ( $filename );
echo Zend_Json :: encode ( $msg );
exit ();
}
} catch ( Exception $e ){
$msg [ 'error' ] = " 错误: " . $e -> getMessage ();
echo Zend_Json :: encode ( $msg );
exit ();
}
}
} //文件上传
if ( $ac == 'download' )
{
( int ) $id = $this -> _request -> getParam ( 'id' );
$sql = " select * from attachments where id=' $id ' " ;
$re = $this -> db -> query ( $sql );
$row = $re -> fetch ();
$file = new files ();
$fullPath = $this -> view -> config -> upload . $row [ 'filename' ];
// Parse Info / Get Extension
$fsize = filesize ( $fullPath );
$path_parts = pathinfo ( $fullPath );
$ext = strtolower ( $path_parts [ " extension " ]);
// Determine Content Type
switch ( $ext ) {
case " pdf " : $ctype = " application/pdf " ; break ;
case " exe " : $ctype = " application/octet-stream " ; break ;
case " zip " : $ctype = " application/zip " ; break ;
case " doc " : $ctype = " application/msword " ; break ;
case " xls " : $ctype = " application/vnd.ms-excel " ; break ;
case " ppt " : $ctype = " application/vnd.ms-powerpoint " ; break ;
case " gif " : $ctype = " image/gif " ; break ;
case " png " : $ctype = " image/png " ; break ;
case " jpeg " :
case " jpg " : $ctype = " image/jpg " ; break ;
default : $ctype = " application/force-download " ;
}
$content = file_get_contents ( $fullPath );
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/octet-stream' )
2012-05-18 01:45:40 +00:00
-> setHeader ( 'Content-Disposition' , 'attachment; filename="' . $row [ 'realname' ] . '"' )
2012-05-10 10:12:14 +00:00
-> setHeader ( 'Content-Length' , $fsize )
-> setHeader ( 'Content-Type' , 'application/force-download' )
-> setHeader ( 'Content-Type' , 'application/download' )
-> setHeader ( 'Content-Type' , $ctype )
-> 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 );
} //文件下载
} //文档管理
/*
* delegateAction () 委托
*
*
*/
public function delegateAction (){
$ac = $this -> _request -> getParam ( 'ac' );
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( $ac == '' && ! empty ( $uuid ))
{
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
}
if ( ! preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
$this -> view -> info = " 参数错误 " ;
return true ;
}
$sql = " SELECT * FROM metadata WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
$this -> view -> metadata = $row ;
//确认一下用户有权限, 如果直接使用update语句无法得到已更改过的状态
2012-05-10 13:10:22 +00:00
//只要是认证后的数据作者,都可以修改数据的委托状态
2012-05-10 10:12:14 +00:00
$sql = " SELECT * FROM mdstatus
2012-05-10 13:10:22 +00:00
WHERE uuid = ? AND userid in ( select userid from mdauthor where status = 1 and uuid = ? ) AND status = ? " ;
2012-05-10 10:12:14 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-05-10 13:10:22 +00:00
$sth -> execute ( array ( $uuid , $uuid , 6 ));
2012-05-10 10:12:14 +00:00
$mds = $sth -> fetch ();
if ( ! empty ( $mds [ 'id' ]))
{
2012-05-10 13:10:22 +00:00
$sql = " UPDATE mdstatus SET status=7,ts_changed='now()',userid= $uid WHERE uuid=' $uuid ' " ;
2012-05-10 10:12:14 +00:00
if ( $this -> db -> exec ( $sql ))
{
$this -> view -> info = " 委托成功! " ;
return true ;
}
else
{
$this -> view -> info = " 委托失败! " ;
return true ;
}
} else {
$this -> view -> info = " 该数据无法委托,请确定数据状态已经可以进行委托,或数据尚未进行委托 " ;
}
}
if ( $ac == 'cancel' )
{
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
}
if ( ! preg_match ( " /^[0-9A-Za-z] { 8}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 4}-[0-9A-Za-z] { 12} $ / " , $uuid ))
{
$this -> view -> info = " 参数错误 " ;
return true ;
}
$sql = " SELECT * FROM metadata WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
$this -> view -> metadata = $row ;
$sql = " SELECT * FROM mdstatus
2012-05-10 13:10:22 +00:00
WHERE uuid = ? AND userid in ( select userid from mdauthor where status = 1 and uuid = ? ) AND status = ? " ;
2012-05-10 10:12:14 +00:00
$sth = $this -> db -> prepare ( $sql );
2012-05-10 13:10:22 +00:00
$sth -> execute ( array ( $uuid , $uuid , 7 ));
2012-05-10 10:12:14 +00:00
$mds = $sth -> fetch ();
if ( ! empty ( $mds [ 'id' ]))
{
2012-05-10 13:10:22 +00:00
$sql = " UPDATE mdstatus SET status=6,ts_changed='now()',userid= $uid WHERE uuid=' $uuid ' " ;
2012-05-10 10:12:14 +00:00
if ( $this -> db -> exec ( $sql ))
{
$this -> view -> info = " 取消委托成功! " ;
return true ;
}
else
{
$this -> view -> info = " 取消委托失败! " ;
return true ;
}
} else {
$this -> view -> info = " 操作失败!该数据尚未进行委托 " ;
}
}
} //委托
2012-09-06 02:12:17 +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 a.*,m.title,m.description,g.id as gid,mds.status as mdstatus,m.uuid FROM normalmetadata m
LEFT JOIN mdauthor a ON m . uuid = a . uuid
LEFT JOIN geonetworkmetadata g on m . uuid = g . uuid
LEFT JOIN mdstatus mds ON m . uuid = mds . uuid
WHERE a . userid = ? AND a . status >= 0 AND m . uuid = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uid , $uuid ));
$metadata = $sth -> fetch ();
if ( empty ( $metadata [ 'uuid' ]))
{
$this -> view -> error = " 数据不存在或者您可能没有该数据的管理权限 " ;
return true ;
}
$this -> view -> metadata = $metadata ;
$sql = " select u.email
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 );
if ( $this -> debug == 0 )
{
$mail -> addTo ( $v [ 'email' ]);
} else {
$mail -> addTo ( $debug_email );
}
if ( $mail -> send ())
{
echo $v [ 'email' ] . " ...发送成功!<br /> " ;
} else {
echo $v [ 'email' ] . " ...发送失败!<br /> " ;
}
}
}
}
2012-05-10 10:12:14 +00:00
2012-05-25 09:23:46 +00:00
/*
* staticsAction () 数据统计
*
*
*/
public function staticsAction (){
$ac = $this -> _getParam ( 'ac' );
if ( empty ( $ac ))
{
$this -> view -> alldata = $this -> getClick ();
}
if ( $ac == " md " )
{
$this -> _helper -> viewRenderer ( 'statics-md' );
$this -> view -> allorder = $this -> getStatic ( " allorder " );
$this -> view -> offlineorder = $this -> getStatic ( " offline " );
$this -> view -> onlineorder = $this -> getStatic ( " online " );
}
if ( $ac == " time " )
{
2012-06-07 11:21:53 +00:00
$this -> _helper -> viewRenderer ( 'statics-time' );
$this -> view -> datas = $this -> getStaticByYear ();
2012-05-25 09:23:46 +00:00
}
} //staticsAction() 数据统计
public function getClick (){
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
}
$sql = " SELECT md.title,md.uuid,s.viewed,count(o.id) as down FROM metadata md
LEFT JOIN mdstat s ON md . uuid = s . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
LEFT JOIN dataorder o ON md . uuid = o . uuid
2012-06-07 11:21:53 +00:00
WHERE a . userid = ? and a . status = 1 and ( o . status = 0 or o . status = 5 )
2012-05-25 09:23:46 +00:00
GROUP BY md . title , md . uuid , s . viewed " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uid ));
$rows = $sth -> fetchAll ();
return $rows ;
}
/*
* getStaticByYear按月份获取统计数据
*/
2012-06-11 09:34:57 +00:00
public function getStaticByYear ( $year = 0 )
2012-06-07 11:21:53 +00:00
{
$uid = Zend_Auth :: getInstance () -> getIdentity () -> id ;
2012-05-25 09:23:46 +00:00
2012-06-07 11:21:53 +00:00
$sql = " select to_char(o.ts_created, 'YYYY-MM') as d , count(o.id) as c from dataorder o
2012-06-11 09:34:57 +00:00
where o . status in ( 0 , 5 ) and o . uuid in ( select uuid from mdauthor where status = 1 and userid = " . $uid . " ) " ;
if ( $year > 0 )
$sql .= " and o.ts_created between ' $year -01-01' and ' $year -12-31' " ;
2012-06-07 11:21:53 +00:00
$sql .= " group by d order by d desc " ;
2012-05-25 09:23:46 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll ();
return $rows ;
}
public function getStatic ( $ac ){
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
}
if ( empty ( $uid )){
return false ;
}
if ( $ac == " allorder " ){
$sql = " SELECT count(o.id) as c FROM metadata md
LEFT JOIN dataorder o ON md . uuid = o . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
WHERE a . userid = ? AND a . status > 0 " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uid ));
$row = $sth -> fetch ();
return $row [ 'c' ];
}
if ( $ac == " offline " ){
$sql = " SELECT count(o.id) as c FROM metadata md
LEFT JOIN dataorder o ON md . uuid = o . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
WHERE o . offlineappid > 0 AND a . userid = ? AND a . status > 0 " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uid ));
$row = $sth -> fetch ();
return $row [ 'c' ];
}
if ( $ac == " online " ){
$sql = " SELECT count(o.id) as c FROM metadata md
LEFT JOIN dataorder o ON md . uuid = o . uuid
LEFT JOIN mdauthor a ON md . uuid = a . uuid
WHERE o . onlineappid > 0 AND a . userid = ? AND a . status > 0 " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uid ));
$row = $sth -> fetch ();
return $row [ 'c' ];
}
}
2012-05-10 10:12:14 +00:00
public function getFileinfo ( $id ){
$sql = " select * from attachments where id=' $id ' " ;
$re = $this -> db -> query ( $sql );
$row = $re -> fetch ();
return $row ;
}
2012-05-04 16:37:28 +00:00
2012-03-27 10:17:51 +00:00
//成为作者后的后继处理工作
private function author_first ( $uuid , $author )
{
$sql = " insert into mdversion (xml,ts_created,uuid,changelog,userid)
select x . data , m . ts_created , ? , ? , ? from metadata m left join xml x on m . id = x . id
left join mdversion v on m . uuid = v . uuid
2012-06-11 10:44:42 +00:00
where m . uuid = ? and v . changelog is null and m . uuid not in ( select uuid from mdversion where changelog is not null )
order by v . ts_created ASC LIMIT 1 " ;
2012-03-27 10:17:51 +00:00
$sth = $this -> db -> prepare ( $sql );
try
{
$sth -> execute ( array ( $uuid , '初始版本 version 1.0' , $author , $uuid ));
} catch ( Exception $e ){
// do nothing here.
// 说明之前已经有对应数据
}
$this -> wdb = Zend_Db :: factory ( $this -> view -> config -> geonetwork );
$sql = " update metadata set owner=? where uuid=? " ;
$sth = $this -> wdb -> prepare ( $sql );
$sth -> execute ( array ( $author , $uuid ));
2012-03-27 03:53:13 +00:00
}
2012-03-27 10:17:51 +00:00
2012-03-28 03:38:22 +00:00
/*
* jsonexit () 退出并返回json数据
*
* param array $data 要返回的JSON数据, 可以是任意数组
*
* return JSON - response
*/
public function jsonexit ( $data ){
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( Zend_Json :: encode ( $data ));
return true ;
} //jsonexit() 退出并返回json数据
//ajax 提示框
2012-03-27 10:17:51 +00:00
public function alertbox ( $type = '' , $body ){
if ( $type == " error " )
{
$img = '<img src="/images/alert_big_error.png" />' ;
$text = '<h4>' . $body . '</h4>' ;
return $img . $text ;
}
if ( $type == " ok " )
{
$img = '<img src="/images/alert_big_ok.png" />' ;
$text = '<h4>' . $body . '</h4>' ;
return $img . $text ;
}
if ( $type == " warning " )
{
$img = '<img src="/images/alert_big_warning.png" />' ;
$text = '<h4>' . $body . '</h4>' ;
return $img . $text ;
}
if ( empty ( $type ))
{
$text = '<h4>' . $body . '</h4>' ;
return $text ;
}
}
2012-02-22 12:21:22 +00:00
}