2013-05-02 09:54:38 +00:00
< ? php
class Admin_DataController extends Zend_Controller_Action
{
function preDispatch ()
{
$this -> db = Zend_Registry :: get ( 'db' );
$this -> view -> config = Zend_Registry :: get ( 'config' );
$this -> messenger = $this -> _helper -> getHelper ( 'FlashMessenger' );
$this -> view -> messages = $this -> messenger -> getMessages ();
$this -> debug = 0 ; //1:debug, 0:release
$this -> debug_email = 'wangliangxu@lzb.ac.cn' ;
$this -> view -> theme = new Theme ();
2013-05-17 00:41:46 +00:00
$this -> _helper -> layout -> setLayout ( 'administry' );
2013-05-02 09:54:38 +00:00
}
function postDispatch ()
{
$this -> view -> messages = $this -> messenger -> getMessages ();
}
function indexAction ()
{
//其他连接
}
//提供和GEONETWORK中的元数据的同步功能
//提供双向同步功能, 但只处理ISO 19115格式的元数据?
function syncAction ()
{
set_time_limit ( 0 );
$sql = " select * from (select count(*) as westdccount from metadata) as t1,(select count(uuid) as gncount from geonetworkmetadata where schemaid='iso19115') as t2 " ;
$this -> db -> setFetchMode ( Zend_Db :: FETCH_OBJ );
$this -> view -> mdcount = $this -> db -> fetchRow ( $sql );
$source = $this -> _request -> getParam ( 'source' );
$delete = $this -> _request -> getParam ( 'delete' );
$thumb = $this -> _request -> getParam ( 'thumb' );
$list = $this -> _request -> getParam ( 'list' );
$adminuser = $this -> _request -> getParam ( 'adminuser' );
$uuid = trim ( $this -> _request -> getParam ( 'uuid' ));
if ( $source == " geonetwork " && empty ( $uuid ) ) {
//从geonetwork向WESTDC同步
//对所有的新数据增加评审状态
$sql = " insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from geonetworkmetadata gn where uuid not in ( select uuid from mdstatus ) " ;
$userid = Zend_Auth :: getInstance () -> getIdentity () -> id ;
$this -> db -> query ( $sql , array ( $userid ));
$sql = " select uuid,data,source from geonetworkmetadata where schemaid='iso19115' " ;
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
$this -> import ( $gmd -> data );
$this -> db -> query ( " update metadata set source=? where uuid=? " , array ( $gmd -> source , $gmd -> uuid ));
}
$this -> view -> msg = '成功同步元数据!' ;
} elseif ( $source == " watergn " && empty ( $uuid ) ) {
//首先删除所有的黑河试验数据
//$sql="delete from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'";
$sql = " delete from metadata where uuid in (select uuid from watergn) " ;
$this -> db -> query ( $sql );
$sql = " delete from responsible where id not in (select distinct(resid) from role) " ;
$this -> db -> query ( $sql );
//对所有的新数据增加评审状态
$sql = " insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from watergn where uuid not in ( select uuid from mdstatus ) " ;
$userid = Zend_Auth :: getInstance () -> getIdentity () -> id ;
$this -> db -> query ( $sql , array ( $userid ));
//同步黑河遥感实验的元数据
$sql = " select uuid,data,source from watergn where schemaid='iso19115' " ;
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
$this -> import ( $gmd -> data );
$this -> db -> query ( " update metadata set source=? where uuid=? " , array ( $gmd -> source , $gmd -> uuid ));
}
$this -> view -> msg = '成功同步黑河遥感综合实验元数据!' ;
} elseif ( $source == " glacier " && empty ( $uuid ) ) {
//首先删除所有的对应专题数据
$sql = " delete from metadata where uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='glacier') " ;
$this -> db -> query ( $sql );
$sql = " delete from responsible where id not in (select distinct(resid) from role) " ;
$this -> db -> query ( $sql );
//对所有的新数据增加评审状态
/* $sql = " insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from watergn where uuid not in ( select uuid from mdstatus ) " ;
$userid = Zend_Auth :: getInstance () -> getIdentity () -> id ;
$this -> db -> query ( $sql , array ( $userid )); */
//同步专题元数据
$sql = " select uuid,data,source from geonetworkmetadata where schemaid='iso19115' and uuid in (select d.uuid from datasource d left join source s on d.sourceid=s.id where s.code='glacier') " ;
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
$this -> import ( $gmd -> data );
//source in unused now.
//$this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
}
$this -> view -> msg = '成功同步专题元数据!' ;
} elseif ( $source == " westdc " && empty ( $uuid ) ) {
//从westdc向geonetwork同步
$sql = " select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid not in (select uuid from geonetworkmetadata) " ;
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
$sql = " insert into geonetworkmetadata (uuid,source,data) values(' " . $gmd -> uuid . " ',' " . $gmd -> source . " ', " . $this -> db -> quote ( $gmd -> data ) . " ) " ;
$this -> db -> exec ( $sql );
}
$sql = " select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid in (select uuid from geonetworkmetadata) " ;
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
$sql = " update geonetworkmetadata set source=' " . $gmd -> source . " ',data= " . $this -> db -> quote ( $gmd -> data ) . " where uuid=' " . $gmd -> uuid . " ' " ;
$this -> db -> exec ( $sql );
}
$this -> view -> msg = '成功同步WESTDC元数据到GEONETWORK! ' ;
} elseif ( ! empty ( $uuid ) && isset ( $_POST [ 'gnsubmit' ])) {
//同步单条元数据到geonetwork
$sql = $this -> db -> quoteInto ( " select m.uuid,m.source,x.data,g.id from metadata m left join xml x on m.id=x.id left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=? " , $uuid );
if ( $gmd = $this -> db -> fetchRow ( $sql )) {
if ( ! empty ( $gmd -> id )) {
$sql = " update geonetworkmetadata set source=' " . $gmd -> source . " ',data= " . $this -> db -> quote ( $gmd -> data ) . " where uuid=' " . $gmd -> uuid . " ' " ;
} else {
$sql = " insert into geonetworkmetadata (uuid,source,data) values(' " . $gmd -> uuid . " ',' " . $gmd -> source . " ', " . $this -> db -> quote ( $gmd -> data ) . " ) " ;
}
$this -> db -> exec ( $sql );
$this -> view -> msg = '成功同步元数据:' . $uuid ;
} else $this -> view -> msg = '不存在此元数据:' . $uuid ;
} elseif ( ! empty ( $uuid ) && isset ( $_POST [ 'watersubmit' ])) {
//同步单条元数据
$sql = $this -> db -> quoteInto ( " select data,source from watergn where uuid=? " , $uuid );
if ( $rs = $this -> db -> fetchRow ( $sql )) {
$this -> import ( $rs -> data );
$this -> db -> query ( " update metadata set source=? where uuid=? " , array ( $rs -> source , $uuid ));
$this -> view -> msg = '成功同步元数据:' . $uuid ;
} else $this -> view -> msg = '不存在此元数据:' . $uuid ;
} elseif ( $list == 'westdc' ) {
$sql = " select uuid,title from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115') " ;
$this -> view -> metadata = $this -> db -> query ( $sql );
} elseif ( $list == 'geonetwork' ) {
$sql = " select id,uuid,(regexp_matches(data,'<resTitle>(.*)</resTitle>'))[1] as title from geonetworkmetadata
where uuid not in ( select uuid from metadata ) " ;
$this -> view -> metadata = $this -> db -> query ( $sql );
} elseif ( $delete == 'westdc' ) {
$sql = " delete from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115') " ;
$this -> db -> query ( $sql );
$this -> view -> msg = '已删除WESTDC中多出的元数据! ' ;
} elseif ( $delete == 'geonetwork' ) {
//dblink view中删除多条有问题, 暂时用单条删除替代
//$sql="delete from geonetworkmetadata where uuid not in (select uuid from metadata)";
$sql = " select uuid from geonetworkmetadata where uuid not in (select uuid from metadata) " ;
$rows = $this -> db -> fetchAll ( $sql );
foreach ( $rows as $row )
{
$this -> db -> exec ( $this -> db -> quoteInto ( " delete from geonetworkmetadata where uuid=? " , $row -> uuid ));
}
$this -> view -> msg = '已删除GEONETWORK中多出的元数据! ' ;
} elseif ( $delete == 'water' ) {
$sql = " delete from metadata where uuid not in (select uuid from watergn where schemaid='iso19115') and uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115') " ;
$this -> db -> query ( $sql );
$this -> view -> msg = '已删除WESTDC中多出的元数据! ' ;
} elseif ( $thumb == 'geonetwork' ) {
$sql = " select g.id as gid,m.uuid,t.* from thumbnail t left join metadata m on t.id=m.id left join geonetworkmetadata g on m.uuid=g.uuid where t.filetype is not null and t.filename is not null " ;
$rows = $this -> db -> fetchAll ( $sql );
foreach ( $rows as $row ) {
$data = file_get_contents ( $this -> view -> config -> geonetwork -> url . 'srv/cn/resources.get?access=public&id=' . $row -> gid . '&fname=' . urlencode ( $row -> filename ));
$sql = " update thumbnail set data=? where id=? " ;
$this -> db -> query ( $sql , array ( base64_encode ( $data ), $row -> id ));
}
$this -> view -> msg = '已成功同步缩略图!' ;
} elseif ( $thumb == 'water' ) {
$sql = " select g.id as gid,m.uuid,t.* from watergn g left join metadata m on m.uuid=g.uuid left join thumbnail t on t.id=m.id where t.filetype is not null and t.filename is not null " ;
$rows = $this -> db -> fetchAll ( $sql );
foreach ( $rows as $row ) {
$data = file_get_contents ( $this -> view -> config -> watergeonetwork -> url . 'srv/cn/resources.get?access=public&id=' . $row -> gid . '&fname=' . urlencode ( $row -> filename ));
$sql = " update thumbnail set data=? where id=? " ;
$this -> db -> query ( $sql , array ( base64_encode ( $data ), $row -> id ));
}
$this -> view -> msg = '已成功同步缩略图!' ;
} elseif ( $adminuser == 'geonetwork' ) {
$sql = " select id,username,password,email from users " ;
$rows = $this -> db -> fetchAll ( $sql );
foreach ( $rows as $row ) {
$sql = " select * from geonetworkusers where id=? " ;
$r = $this -> db -> fetchRow ( $sql , array ( $row -> id ));
if ( $r ) {
$sql = " update geonetworkusers set username=' $row->username ',password=encode(digest(md5(' $row->password '),'sha1'),'hex'),email=' $row->email ' where id= $row->id " ;
$this -> db -> query ( $sql );
} else {
$sql = " insert into geonetworkusers (id,username,password,email) values( $row->id ,' $row->username ',encode(digest(md5(' $row->password '),'sha1'),'hex'),' $row->email ') " ;
$this -> db -> query ( $sql );
}
}
$this -> view -> msg = '已成功同步帐号!' ;
} elseif ( ! empty ( $uuid ) && ( isset ( $_POST [ 'submit' ]) || ( ! isset ( $_POST [ 'gnsubmit' ]) && ! isset ( $_POST [ 'watersubmit' ])))) {
//同步单条元数据
$sql = $this -> db -> quoteInto ( " select data,source from geonetworkmetadata where uuid=? " , $uuid );
if ( $rs = $this -> db -> fetchRow ( $sql )) {
$this -> import ( $rs -> data );
$this -> db -> exec ( $this -> db -> quoteInto ( " update metadata set source=? where uuid=' $uuid ' " , $rs -> source ));
$userid = Zend_Auth :: getInstance () -> getIdentity () -> id ;
$this -> db -> query ( " insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from geonetworkmetadata gn where uuid not in ( select uuid from mdstatus ) and uuid = ? " ,array( $userid , $uuid ));
$this -> view -> msg = '成功同步元数据:' . $uuid ;
//update search document
$search = new Search ();
$sql = " select * from xunsearch where uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> setFetchMode ( Zend_Db :: FETCH_ASSOC );
$sth -> execute ( array ( $uuid ));
$data = $sth -> fetch ();
$search -> update ( $data );
} else $this -> view -> msg = '不存在此元数据:' . $uuid ;
}
}
function datasetcdAction ()
{
$add = ( int ) $this -> _getParam ( 'add' );
$edit = ( int ) $this -> _getParam ( 'edit' );
2013-05-31 03:17:56 +00:00
$delete = ( int ) $this -> _getParam ( 'delete' );
set_time_limit ( 0 );
2013-05-02 09:54:38 +00:00
if ( $add ) {
$form = new DatasetcdForm ();
$form -> img -> setRequired ( true );
$form -> document -> setRequired ( true );
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
$img = '/' . $form -> img -> getFileName ();
$document = '/' . $form -> document -> getFileName ();
$sql = " insert into datasetcd (title,size,uuid,img,document,descript) values(?,?,?,?,?,?) " ;
$this -> db -> query ( $sql , array ( $formdata [ 'title' ], $formdata [ 'size' ], $formdata [ 'uuid' ], $img , $document , $formdata [ 'descript' ]));
$this -> messenger -> addMessage ( '提示信息:您已经成功添加该特色数据集。' );
$this -> _redirect ( '/admin/data/datasetcd' );
} else {
$form -> populate ( $formdata );
}
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'datasetcdadd' );
} elseif ( $edit ){
$form = new DatasetcdForm ();
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
$img = '/' . $form -> img -> getFileName ();
$document = '/' . $form -> document -> getFileName ();
$sql = " update datasetcd set title=?,size=?,uuid=?, " ;
if ( $form -> img -> isUploaded ()) $sql .= " img=?, " ;
if ( $form -> document -> isUploaded ()) $sql .= " document=?, " ;
$sql .= " descript=? where id=? " ;
$param = array ( $formdata [ 'title' ], $formdata [ 'size' ], $formdata [ 'uuid' ]);
if ( $form -> img -> isUploaded ()) $param [] = $img ;
if ( $form -> document -> isUploaded ()) $param [] = $document ;
$param [] = $formdata [ 'descript' ];
$param [] = $edit ;
$this -> db -> query ( $sql , $param );
$this -> messenger -> addMessage ( '提示信息:您已经编辑添加该特色数据集。' );
$this -> _redirect ( '/admin/data/datasetcd' );
} else {
$form -> populate ( $formdata );
}
} else {
$sql = " select * from datasetcd where id=? " ;
$formdata = $this -> db -> fetchRow ( $sql , array ( $edit ));
$form -> populate ( $formdata );
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'datasetcdadd' );
} elseif ( $delete ) {
$sql = " delete from datasetcd where id=? " ;
try {
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该特色数据集。' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( " /admin/data/datasetcd " );
}
$select = $this -> db -> select ();
$select -> from ( 'datasetcd' ) -> order ( 'id desc' );
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
}
/*
*
* mdAction ()
* 元数据管理
*
*/
function mdAction ()
{
$delete = $this -> _getParam ( 'delete' );
$down = ( int ) $this -> _getParam ( 'down' );
$search = $this -> _getParam ( 'search' );
$keyword = $this -> _getParam ( 'keyword' );
$att = $this -> _getParam ( 'att' );
$attupdate = $this -> _getParam ( 'attupdate' );
if ( $delete )
{
$sql = " delete from metadata where uuid=? " ;
try {
$this -> db -> query ( " delete from mdstatus where uuid=? " , array ( $delete ));
$this -> db -> query ( " delete from mdauthor where uuid=? " , array ( $delete ));
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该数据。' );
$search = new Search ();
$search -> del ( $delete , 'uuid' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( " /admin/data/md " );
} //删除
elseif ( $att > 0 ){
$submit = $this -> _request -> getParam ( 'submit' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$atts = $this -> _request -> getParam ( 'ids' );
$addatts = $this -> _request -> getParam ( 'addatts' );
$this -> view -> id = $att ;
$this -> view -> uuid = $uuid ;
if ( ! empty ( $addatts ))
{
if ( empty ( $submit ))
{
$sql = " select title from metadata where uuid=' $uuid ' " ;
$re = $this -> db -> query ( $sql );
$rows = $re -> fetch ();
$this -> view -> id = $att ;
$this -> view -> uuid = $uuid ;
$this -> view -> mdtitle = $rows [ 'title' ];
$this -> view -> thisatt = $rows ;
$this -> _redirect ( " /admin/data/attachments/uuid/ $uuid /mdtitle/ { $rows [ 'title' ] } " );
}
else
{
if ( ! empty ( $uuid ))
{
foreach ( $atts as $v )
{
$sql = " insert into mdattach (uuid,id) values (' $uuid ',' $v ') " ;
try {
$this -> db -> exec ( $sql );
$this -> messenger -> addMessage ( '成功添加附件:' . $v );
} catch ( Exception $e )
{
$this -> messenger -> addMessage ( '添加附件失败:' . $v );
}
}
$this -> _redirect ( " /admin/data/md/att/1/uuid/ $uuid " );
}
}
} //empty($addatts)
else
{
if ( ! empty ( $uuid ))
{
$sql = " select m.*,a.*,d.title from mdattach m
left join attachments a on m . id = a . id
left join metadata d on m . uuid = d . uuid where m . uuid = '$uuid' " ;
$re = $this -> db -> query ( $sql );
$rows = $re -> fetchAll ();
$sql = " select title from metadata where uuid=' $uuid ' " ;
$re = $this -> db -> query ( $sql );
$title = $re -> fetch ();
$this -> view -> atts = $rows ;
$this -> view -> mdtitle = $title [ 'title' ];
$this -> _helper -> viewRenderer ( 'attmanager' );
}
}
} //编辑附件
/*
* 输出打包下载的xml文件
*
* 文件量大时可能出现超时,需要修改超时时间为无限
*/
elseif ( $down ) {
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
//临时zip文件名
$tmpname = " dataxml " ;
//xml文件存放的缓存目录
$dirName = '../data/import/' ;
//查询需要创建的文件
$sql = " SELECT md.title,md.uuid,x.* from xml x
LEFT JOIN normalmetadata md ON md . id = x . id " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll (); //将结果储存,但不使用
//创建zip文件, 创建成功后再使用查询结果
$zip = new ZipArchive ();
$url = tempnam ( $this -> config -> temp -> path , $tmpname ); //创建临时文件
if ( $zip -> open ( $url , ZIPARCHIVE :: CREATE | ZIPARCHIVE :: OVERWRITE ) !== true )
{
throw new Exception ( " cannot open { $url } for writing. " );
}
foreach ( $rows as $k => $v )
{
$filename = $dirName . $v [ 'uuid' ] . '.xml' ;
//创建xml文件
$handle = fopen ( $filename , " w " );
fwrite ( $handle , $v [ 'data' ]);
fclose ( $handle );
//添加到zip文件
//zip localname 直接使用UUID作为文件名
$zip -> addFile ( $filename , $v [ 'uuid' ] . " .xml " );
}
$zip -> close ();
//zip文件创建完成后删除服务器上的缓存文件, 防止发生冗余
foreach ( $rows as $k => $v )
{
$filename = $dirName . $v [ 'uuid' ] . '.xml' ;
unlink ( $filename );
}
//输出下载
$content = file_get_contents ( $url );
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/octet-stream' )
-> setHeader ( 'Content-Disposition' , 'attachment; filename="dataxml.zip"' )
-> setHeader ( 'Content-Length' , strlen ( $content ))
-> setHeader ( 'Content-Type' , 'application/force-download' )
-> setHeader ( 'Content-Type' , 'application/download' )
-> setHeader ( 'Content-Type' , 'application/zip' )
-> 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 );
} //down
else if ( $search ){
if ( ! empty ( $keyword ))
{
$sql = " select m.*,md.viewed,g.id as gid, ds.id as datasetid from metadata m
left join mdstat md on m . uuid = md . uuid
left join geonetworkmetadata g on g . uuid = m . uuid
left join dataset ds on m . uuid = ds . uuid
where m . title like '%$keyword%'
order by m . id desc
" ;
$re = $this -> db -> query ( $sql );
$row = $re -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $row );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> messenger -> addMessage ( $keyword . ' 的搜索结果' );
}
else
{
$this -> messenger -> addMessage ( '请输入搜索关键字' );
$this -> _redirect ( " /admin/data/md " );
}
} //search
else {
$sql = " SELECT md.*,s.viewed,g.id as gid,st.status as mdstatus,ds.id as datasetid FROM metadata md
LEFT JOIN mdstat s ON md . uuid = s . uuid
LEFT JOIN geonetworkmetadata g ON g . uuid = md . uuid
LEFT JOIN mdstatus st ON md . uuid = st . uuid
LEFT JOIN dataset ds ON md . uuid = ds . uuid
ORDER BY md . id DESC " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
}
} //mdAction 元数据管理
/*
* datasetAction ()
2013-05-08 02:02:34 +00:00
* 数据路径:即数据的物理主目录
2013-05-02 09:54:38 +00:00
*
*/
function datasetAction ()
{
$ac = $this -> _request -> getParam ( 'ac' );
if ( $ac == " getdataset " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer ( 'md-dataset' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$sql = " SELECT * FROM dataset WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
$this -> view -> dataset = $row ;
$this -> view -> uuid = $uuid ;
}
2013-05-08 02:02:34 +00:00
else if ( $ac == " update " )
2013-05-02 09:54:38 +00:00
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
$host = $this -> _getParam ( 'host' );
$path = $this -> _getParam ( 'path' );
$sql = " UPDATE dataset SET host=?,path=? WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $host , $path , $uuid ));
2013-05-08 02:02:34 +00:00
if ( $host == 'ftp1.westgis.ac.cn' )
{
file_get_contents ( " http://ftp1.westgis.ac.cn/proftp_upload.php?uuid= " . $uuid . " &filelist=1 " );
2013-05-26 01:48:14 +00:00
} else if ( $host == 'ftp2.westgis.ac.cn' )
{
file_get_contents ( " http://ftp2.westgis.ac.cn/proftp_upload.php?uuid= " . $uuid . " &filelist=1 " );
}
2013-05-02 09:54:38 +00:00
if ( $ds )
{
$data = array ( " ok " => 1 );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
}
}
2013-05-08 02:02:34 +00:00
else if ( $ac == " add " )
2013-05-02 09:54:38 +00:00
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
$host = $this -> _getParam ( 'host' );
$path = $this -> _getParam ( 'path' );
$sql = " SELECT * FROM dataset WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
if ( ! empty ( $row [ 'id' ]))
{
$data = array ( " error " => " 该数据已经有存档信息,不能重复添加 " );
$this -> jsonexit ( $data );
return true ;
}
$sql = " INSERT INTO dataset (uuid,host,path) VALUES (?,?,?) " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $uuid , $host , $path ));
2013-05-08 02:02:34 +00:00
if ( $host == 'ftp1.westgis.ac.cn' )
{
file_get_contents ( " http://ftp1.westgis.ac.cn/proftp_upload.php?uuid= " . $uuid . " &filelist=1 " );
2013-05-26 01:48:14 +00:00
} else if ( $host == 'ftp2.westgis.ac.cn' )
{
file_get_contents ( " http://ftp2.westgis.ac.cn/proftp_upload.php?uuid= " . $uuid . " &filelist=1 " );
2013-05-08 02:02:34 +00:00
}
2013-05-02 09:54:38 +00:00
if ( $ds )
{
$data = array ( " ok " => 1 );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
}
}
2013-05-08 02:02:34 +00:00
else if ( $ac == " import " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
$sql = " SELECT * FROM dataset WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
if ( $row [ 'host' ] == 'ftp1.westgis.ac.cn' )
{
file_get_contents ( " http://ftp1.westgis.ac.cn/proftp_upload.php?uuid= " . $uuid . " &filelist=1 " );
echo '<h1>数据目录成功导入!</h1>' ;
2013-05-26 01:37:37 +00:00
} else if ( $row [ 'host' ] == 'ftp2.westgis.ac.cn' )
{
file_get_contents ( " http://ftp2.westgis.ac.cn/proftp_upload.php?uuid= " . $uuid . " &filelist=1 " );
echo '<h1>数据目录成功导入!</h1>' ;
2013-05-08 02:02:34 +00:00
} else {
echo '<h1>数据目录未导入!</h1>' ;
}
}
2013-05-02 09:54:38 +00:00
} //datasetAction存档管理
/*
* commentAction ()
* 反馈管理
* ALTER TABLE comments ADD COLUMN reply integer NOT NULL DEFAULT 0 ;
*/
function commentAction ()
{
$delete = ( int ) $this -> _getParam ( 'delete' );
$uuid = $this -> _getParam ( 'uuid' );
$reply = $this -> _getParam ( 'reply' );
$replylist = $this -> _getParam ( 'replylist' );
$delreply = $this -> _getParam ( 'delreply' );
if ( $delete )
{
$sql = " delete from comments where id=? " ;
try {
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该评论。' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( " /admin/data/comment " );
}
if ( $reply )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$body = $this -> _getParam ( 'content' );
if ( empty ( $body ))
{
$data = array ( 'error' => " 请输入回复内容 " );
$this -> jsonexit ( $data );
return true ;
}
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
$email = $user -> email ;
}
$ipaddr = $_SERVER [ 'REMOTE_ADDR' ];
$sql = " INSERT INTO comments (uuid,author,reply,userid,content,email,ip) VALUES (?,?,?,?,?,?,?) " ;
$sth = $this -> db -> prepare ( $sql );
$rs = $sth -> execute ( array ( $uuid , $user -> username , $reply , $uid , $body , $email , $ipaddr ));
if ( $rs )
{
$sql = " select c.author,c.email,c.uuid from comments c where c.id=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $reply ));
$row = $sth -> fetch ();
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mailtp = new EmailText ( $this -> db , " comment-admin-reply " , array (
'user' => $row [ 'author' ],
'uuid' => $row [ 'uuid' ],
'email' => $row [ 'email' ]
));
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> addTo ( $row [ 'email' ]);
$mail -> addCc ( $this -> view -> config -> service -> email );
@ $mail -> send ();
$data = array ( 'status' => 1 , 'msg' => '回复成功!' );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( 'error' => " 回复失败,请重试 " );
$this -> jsonexit ( $data );
return true ;
}
return true ;
}
if ( $uuid )
{
$sql = " SELECT c.*,md.title,md.uuid FROM comments c
LEFT JOIN metadata md ON md . uuid = c . uuid
WHERE c . uuid = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
$sql = " SELECT title FROM metadata WHERE uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$row = $sth -> fetch ();
$this -> view -> title = $row [ 'title' ];
return true ;
}
if ( $replylist )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$sql = " SELECT cr.id,cr.content as body,cr.reply,u.username,cr.ts_created FROM comments cr
LEFT JOIN users u ON cr . userid = u . id WHERE cr . reply = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $replylist ));
$rows = $sth -> fetchAll ();
$this -> jsonexit ( $rows );
return true ;
}
if ( $delreply )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$sql = " DELETE FROM comments WHERE id=? " ;
$sth = $this -> db -> prepare ( $sql );
$rs = $sth -> execute ( array ( $delreply ));
if ( $rs )
{
$this -> jsonexit (
array ( 'deleted' => 1 )
);
return true ;
} else {
$this -> jsonexit (
array ( 'error' => '处理中出现错误,请重新尝试' )
);
return true ;
}
}
$sql = " SELECT cm.*,md.title,(SELECT count(id) as counts FROM comments cms WHERE cms.reply=cm.id AND cms.reply!=0) as reply_count FROM comments cm
LEFT JOIN metadata md ON md . uuid = cm . uuid
WHERE cm . reply = 0
ORDER BY cm . ts_created DESC , cm . id DESC " ;
$sth = $this -> db -> query ( $sql );
$rows = $sth -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
} //comment
function newsletterAction ()
{
$form = new Zend_Form ();
$form -> setName ( 'newsletter' );
$form -> setAttrib ( 'enctype' , 'multipart/form-data' );
$nlf = new Zend_Form_Element_File ( 'nlf' );
$nlf -> setLabel ( '数据通讯' )
-> setRequired ( true )
-> setDestination ( $this -> view -> config -> paths -> newsletter )
-> addValidator ( 'Count' , false , 1 ) // ensure only 1 file
-> addValidator ( 'Size' , false , 2048000 ) // limit to 2M
-> addValidator ( 'Extension' , false , 'pdf' ); // only JPEG, PNG, and GIFs
$submit = new Zend_Form_Element_Submit ( 'submit' );
$form -> addElements ( array ( $nlf , $submit ));
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
//自动生成JPG文件
$pdf = $form -> nlf -> getFileName ();
$img = new Imagick ( $pdf . '[0]' );
$img -> thumbnailImage ( 200 , 0 );
$img -> writeImage ( $this -> view -> config -> paths -> newsletter . basename ( $pdf , '.pdf' ) . '.jpg' );
$this -> messenger -> addMessage ( '提示信息:您已经成功添加该数据通讯。' );
$this -> _redirect ( '/admin/data/newsletter' );
}
}
$l = new mydir ( $this -> view -> config -> paths -> newsletter , " newsletter_*.pdf " );
$this -> view -> newsletters = $l -> toArray ();
$this -> view -> addHelperPath ( 'helper' , 'Zend_View_Helper_' );
rsort ( $this -> view -> newsletters );
$this -> view -> form = $form ;
}
function featureAction ()
{
$add = ( int ) $this -> _getParam ( 'add' );
$edit = ( int ) $this -> _getParam ( 'edit' );
$delete = ( int ) $this -> _getParam ( 'delete' );
if ( $add ) {
$form = new DatafeatureForm ();
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
if ( ! $form -> imgurl ) {
$imgurl = '/' . $form -> img -> getFileName ();
} else
$imgurl = $formdata [ 'imgurl' ];
$sql = " insert into datafeature (title,detailurl,imgurl,description) values(?,?,?,?) " ;
$this -> db -> query ( $sql , array ( $formdata [ 'title' ], $formdata [ 'detailurl' ], $imgurl , $formdata [ 'description' ]));
$this -> messenger -> addMessage ( '提示信息:您已经成功添加该特色推荐。' );
$this -> _redirect ( '/admin/data/feature' );
} else {
$form -> populate ( $formdata );
}
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'featureadd' );
} elseif ( $edit ){
$form = new DatafeatureForm ();
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
if ( ! $form -> imgurl ) {
$imgurl = '/' . $form -> img -> getFileName ();
} else
$imgurl = $form -> imgurl ;
$sql = " update datafeature set title=?,detailurl=?,imgurl=?,description=? where id=? " ;
$param = array ( $formdata [ 'title' ], $formdata [ 'detailurl' ], $formdata [ 'imgurl' ], $formdata [ 'description' ], $edit );
$this -> db -> query ( $sql , $param );
$this -> messenger -> addMessage ( '提示信息:您已经编辑该特色推荐。' );
$this -> _redirect ( '/admin/data/feature' );
} else {
$form -> populate ( $formdata );
}
} else {
$sql = " select * from datafeature where id=? " ;
$formdata = $this -> db -> fetchRow ( $sql , array ( $edit ));
$form -> populate ( $formdata );
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'featureadd' );
} elseif ( $delete ) {
$sql = " delete from datafeature where id=? " ;
try {
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该特色推荐。' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( " /admin/data/feature " );
}
$select = $this -> db -> select ();
$select -> from ( 'datafeature' ) -> order ( 'id desc' );
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
}
/*
* 数据文献管理
*/
function referenceAction ()
{
$add = ( int ) $this -> _getParam ( 'add' );
$edit = ( int ) $this -> _getParam ( 'edit' );
$delete = ( int ) $this -> _getParam ( 'delete' );
$uuid = $this -> _getParam ( 'uuid' );
$search = $this -> _getParam ( 'search' );
$keyword = $this -> _getParam ( 'keyword' );
$import = ( int ) $this -> _getParam ( 'import' );
$show = $this -> _getParam ( 'show' );
if ( $add ) {
$type = $this -> _getParam ( 'type' );
if ( $type == 'dc' )
{
$this -> _helper -> viewRenderer ( 'referenceadd' );
$this -> view -> type = " dc " ;
} else {
$form = new ReferenceForm ();
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$sql = " select id from reference where reference=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( trim ( $formdata [ 'reference' ])));
if ( ! $row )
{
$sql = " insert into reference (reference,link) values(?,?) " ;
$this -> db -> query ( $sql , array ( trim ( $formdata [ 'reference' ]), trim ( $formdata [ 'link' ])));
$sql = " select id from reference where reference=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( trim ( $formdata [ 'reference' ])));
}
$sql = " insert into mdref (uuid,refid,reftype) values(?,?,?) " ;
$this -> db -> query ( $sql , array ( trim ( $formdata [ 'uuid' ]), $row [ 'id' ], $formdata [ 'reftype' ]));
$this -> messenger -> addMessage ( '提示信息:您已经成功添加该数据文献。' );
$this -> _redirect ( '/admin/data/reference/show/' . $formdata [ 'uuid' ]);
} else {
$form -> populate ( $formdata );
}
} else {
if ( $uuid )
{
$formdata [ 'uuid' ] = $uuid ;
$form -> populate ( $formdata );
}
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'referenceadd' );
}
} //添加
else if ( $show ){
2013-05-24 01:40:14 +00:00
$sql = " select mr.id as mdid,mr.refid,r.reference,md.title,md.uuid,mr.place FROM mdref mr
2013-05-02 09:54:38 +00:00
left join metadata md on md . uuid = mr . uuid
left join reference r on r . id = mr . refid
where mr . uuid = '$show' ;
" ;
$rs = $this -> db -> query ( $sql );
$rows = $rs -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
} //按UUID查看
elseif ( $edit ){
$form = new ReferenceForm ();
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$sql = " select id from reference where reference=? order by id desc " ;
$rs = $this -> db -> query ( $sql , array ( $formdata [ 'reference' ]));
$row = $rs -> fetch ();
if ( $row [ 'id' ] != '' )
{
//更新文献信息
$sql = " update mdref set refid=?,reftype=? where uuid=? and id=? " ;
$td = $this -> db -> query ( $sql , array ( $row [ 'id' ], $formdata [ 'reftype' ], $formdata [ 'uuid' ], $edit ));
$sql = " update reference set reference=?,link=? where id=? " ;
$this -> db -> query ( $sql , array ( $formdata [ 'reference' ], $formdata [ 'link' ], $row [ 'id' ]));
if ( $td )
{
$this -> messenger -> addMessage ( '提示信息:您已经编辑该数据文献。' );
$this -> _redirect ( '/admin/data/reference/show/' . $formdata [ 'uuid' ]);
}
} else
{
$sql = " INSERT INTO reference (reference,link) VALUES (' " . $formdata [ 'reference' ] . " ',' " . $formdata [ 'link' ] . " ') RETURNING id " ;
$sth = $this -> db -> prepare ( $sql );
if ( $sth -> execute ())
{
$row = $sth -> fetch ( PDO :: FETCH_ASSOC );
$sql = " update mdref set refid=?,reftype=? where uuid=? and id=? " ;
$td = $this -> db -> query ( $sql , array ( $row [ 'id' ], $formdata [ 'reftype' ], $formdata [ 'uuid' ], $edit ));
$this -> messenger -> addMessage ( '提示信息:您已经编辑该数据文献。' );
$this -> _redirect ( '/admin/data/reference/show/' . $formdata [ 'uuid' ]);
} else
{
$this -> messenger -> addMessage ( '提示信息:文献创建失败,请重试' );
$this -> _redirect ( '/admin/data/reference/edit/' . $edit );
}
}
} else {
$form -> populate ( $formdata );
}
} else {
$sql = " select m.uuid,r.reference,r.link,m.reftype from reference r left join mdref m on r.id=m.refid where m.id=? " ;
$formdata = $this -> db -> fetchRow ( $sql , array ( $edit ));
$form -> populate ( $formdata );
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'referenceadd' );
} //编辑相关文献
elseif ( $delete ) {
$sql = " select uuid from mdref where id= $delete " ;
$rs = $this -> db -> query ( $sql );
$row = $rs -> fetch ();
$sql = " delete from mdref where id=? " ;
try {
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该数据文献。' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( '/admin/data/reference/show/' . $row [ 'uuid' ]);
} //删除相关文献
elseif ( $import ) {
if ( $this -> _request -> isPost ()) {
if ( $_FILES [ " ref " ][ " error " ] == UPLOAD_ERR_OK ) {
$tmp_name = $_FILES [ " ref " ][ " tmp_name " ];
$fp = fopen ( $tmp_name , " rb " );
$ref = fread ( $fp , filesize ( $tmp_name ));
fclose ( $fp );
$lines = explode ( " \n " , $ref );
foreach ( $lines as $line )
{
$data = explode ( " ; " , $line );
if ( count ( $data ) == 2 )
$link = '' ;
else
$link = $data [ 2 ];
$link = $this -> db -> quote ( $link );
$sql = " insert into reference (reference,link) values(?, " . $link . " ) " ;
try {
$this -> db -> exec ( $this -> db -> quoteInto ( $sql , trim ( $data [ 1 ])));
} catch ( Exception $e ) {}
$sql = " select id from reference where reference=? " ;
$row = $this -> db -> fetchRow ( $this -> db -> quoteInto ( $sql , trim ( $data [ 1 ])));
$sql = " insert into mdref (uuid,refid) values(?, " . $row [ 'id' ] . " ) " ;
try {
$this -> db -> exec ( $this -> db -> quoteInto ( $sql , trim ( $data [ 0 ])));
} catch ( Exception $e ) {}
}
} //end if
}
$this -> _helper -> viewRenderer ( 'referenceimport' );
} //引用
else if ( $search ){
if ( ! empty ( $keyword ))
{
$sql = " select rf.id as mdid,rf.refid,m.*,r.* from mdref rf
left join metadata m on m . uuid = rf . uuid
left join reference r on r . id = rf . refid
where m . title like '%$keyword%'
order by m . title " ;
$re = $this -> db -> query ( $sql );
$row = $re -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $row );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> messenger -> addMessage ( $keyword . ' 的搜索结果' );
}
else
{
$this -> messenger -> addMessage ( '请输入搜索关键字' );
$this -> _redirect ( " /admin/data/reference " );
}
} //搜索
else {
$select = $this -> db -> select ();
2013-05-08 02:33:48 +00:00
$select -> from ( 'mdref' , array ( 'id as mdid' , 'refid' , 'place' ))
2013-05-02 09:54:38 +00:00
-> join ( 'metadata' , 'metadata.uuid=mdref.uuid' )
-> join ( 'reference' , 'reference.id=mdref.refid' )
2013-05-17 00:41:46 +00:00
-> order ( 'metadata.ts_created desc' )
2013-05-08 02:33:48 +00:00
-> order ( 'mdref.place' );
2013-05-02 09:54:38 +00:00
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
} //列表
}
/*
* 删除元数据,删除前有确认
*/
function deleteAction ()
{
if ( $this -> _request -> isPost ()) {
$id = ( int ) $this -> _request -> getPost ( 'id' );
$del = $this -> _request -> getPost ( 'del' );
if ( $del == 'Yes' && $id > 0 ) {
$md = new MetadataTable ();
$where = 'id = ' . $id ;
$md -> delete ( $where );
}
$this -> _redirect ( '/data' );
} else {
$id = ( int ) $this -> _request -> getParam ( 'id' );
if ( $id > 0 ) {
$mdt = new MetadataTable ();
$this -> view -> md = $mdt -> fetchRow ( 'id=' . $id );
}
}
}
/*
* 导入本地元数据
*/
function importAction ()
{
$md = new MetadataTable ();
$thumb = new ThumbnailTable ();
$xmlt = new XmlTable ();
$cgt = new CategoryTable ();
$cgct = new CategoryCodeTable ();
$keyt = new KeywordTable ();
$dst = new DatasetSeriesTable ();
$seriestable = new SeriesTable ();
if ( $this -> _request -> isPost ()) {
foreach ( $_FILES [ " xmlfile " ][ " error " ] as $key => $error ) {
if ( $error == UPLOAD_ERR_OK ) {
$tmp_name = $_FILES [ " xmlfile " ][ " tmp_name " ][ $key ];
$name = $_FILES [ " xmlfile " ][ " name " ][ $key ];
$fp = fopen ( $tmp_name , " rb " );
$xml = fread ( $fp , filesize ( $tmp_name ));
fclose ( $fp );
$this -> import ( $xml );
//采用UUID为文件名?
//move_uploaded_file($tmp_name, "../data/import/$name");
} //end if
} //foreach
$this -> _redirect ( '/data' );
} else {
//do nothing now.
}
}
/*
* 批量处理元数据(元数据保存在服务器的一个目录上)
*/
function batchimportAction ()
{
if ( $this -> _request -> isPost ()) {
$dir = $this -> _request -> getPost ( 'directory' );
$subdir = $this -> _request -> getPost ( 'subdir' );
$l = new mydir ( $dir , " *.xml " );
$xmlfiles = $l -> toArray ();
foreach ( $xmlfiles as $xmlfile )
{
$fp = fopen ( $dir . '/' . $xmlfile , 'rb' );
$xml = fread ( $fp , filesize ( $dir . '/' . $xmlfile ));
fclose ( $fp );
$this -> import ( $xml );
}
$this -> _redirect ( '/data' );
}
}
function datafileimportAction ()
{
if ( $this -> _request -> isPost ()) {
set_time_limit ( 0 );
$dir = $this -> _request -> getPost ( 'directory' );
if ( file_exists ( $dir . '/dataset.txt' ))
{
$fp = fopen ( $dir . '/dataset.txt' , 'rb' );
$ds = fread ( $fp , filesize ( $dir . '/dataset.txt' ));
fclose ( $fp );
$ds1 = explode ( " \n " , $ds );
for ( $i = 0 ; $i < floor ( count ( $ds1 ) / 2 ); $i ++ )
{
$dpath = trim ( $ds1 [ $i * 2 ]);
$duuid = trim ( $ds1 [ $i * 2 + 1 ]);
if ( file_exists ( $dir . '/' . $duuid . '.txt' ))
{
$sql = " delete from dataset where uuid=' " . $duuid . " ' " ;
//datafile table will auto-delete
$this -> db -> query ( $sql );
//$sql="insert into dataset (path,uuid) values('".$dpath."','".$duuid."')";
$sql = " insert into dataset (path,uuid) values(?,?) " ;
$this -> db -> query ( $sql , array ( $dpath , $duuid ));
$sql = " select id from dataset where uuid=' " . $duuid . " ' " ;
$rs = $this -> db -> fetchRow ( $sql );
$dsid = $rs [ " id " ];
$fp = fopen ( $dir . '/' . $duuid . '.txt' , 'rb' );
$filep = fread ( $fp , filesize ( $dir . '/' . $duuid . '.txt' ));
fclose ( $fp );
$filep1 = explode ( " \n " , $filep );
//print $duuid."<br/>";
//print $dpath." ".count($dpatch)."<br/>";
for ( $j = 0 ; $j < floor ( count ( $filep1 ) / 2 ); $j ++ )
{
$fpath1 = explode ( " \t " , $filep1 [ $j * 2 ]);
$fsize = $fpath1 [ 0 ];
$fpath = mb_substr ( $fpath1 [ 1 ], mb_strlen ( $dpath ));
$fdir = ( $filep1 [ $j * 2 + 1 ] == " directory " ) ? 1 : 0 ;
if ( $fdir == 1 ) $fsize = 0 ;
if ( $fpath != " " )
{
$fdepth = substr_count ( $fpath , " / " ) + 1 ;
if ( $fdir == 1 ) $fpath .= " / " ;
//print $fsize." ".$fpath." ".$fdir."<br/>";
//$sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(".$dsid.",'".$this->db->escape($fpath)."',".$fsize.",".$fdir.",".$fdepth.")";
$sql = " insert into datafile (dsid,filename,filesize,isdir,depth) values(?,?,?,?,?) " ;
$this -> db -> query ( $sql , array ( $dsid , $fpath , $fsize , $fdir , $fdepth ));
}
}
}
}
}
$this -> view -> msg = '已成功处理数据目录信息!' ;
}
} //datafileimportAction
function sourceAction ()
{
$do = $this -> _request -> getParam ( 'do' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$id = $this -> _request -> getParam ( 'id' );
$q = $this -> _request -> getParam ( 'q' );
$search = $this -> _request -> getParam ( 'search' );
if ( $do == 'add' ) {
$redirect = " /admin/data/source/ " ;
if ( ! empty ( $_POST [ 'submit' ]))
{
try {
$title = $this -> _request -> getParam ( 'title' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$code = $this -> _request -> getParam ( 'code' );
$description = $this -> _request -> getParam ( 'description' );
$has_pages = $this -> _request -> getParam ( 'has_pages' );
$has_agreement = $this -> _request -> getParam ( 'has_agreement' );
$data = array (
'title' => $title ,
'uuid' => $uuid ,
'code' => $code ,
'description' => $description ,
'has_pages' => $has_pages ,
'has_agreement' => $has_agreement
);
if ( $this -> db -> insert ( 'source' , $data ))
{
$this -> messenger -> addMessage ( '添加来源信息成功' );
$this -> _redirect ( $redirect );
}
} catch ( Exception $e ){
$this -> messenger -> addMessage ( '添加来源信息失败:' . $e -> getMessage ());
$this -> _redirect ( '/admin/data/source/do/add' );
}
}
$this -> _helper -> viewRenderer ( 'sourceadd' );
} // 添加项目来源
else if ( $do == 'edit' && ! empty ( $id ))
{
if ( ! empty ( $_POST [ 'submit' ]))
{
try {
$title = $this -> _request -> getParam ( 'title' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$code = $this -> _request -> getParam ( 'code' );
$description = $this -> _request -> getParam ( 'description' );
$has_pages = $this -> _request -> getParam ( 'has_pages' );
$has_agreement = $this -> _request -> getParam ( 'has_agreement' );
$sql = " update source set title=' $title ',uuid=' $uuid ',code=' $code ',description=' $description ',has_pages=' $has_pages ',has_agreement=' $has_agreement ' where id=' $id ' " ;
if ( $this -> db -> exec ( $sql ))
{
$this -> messenger -> addMessage ( '修改来源信息成功' );
$this -> _redirect ( " /admin/data/source/do/edit/id/ $id " );
}
} catch ( Exception $e ){
$this -> messenger -> addMessage ( '修改来源信息失败:' . $e -> getMessage ());
$this -> _redirect ( " /admin/data/source/do/edit/id/ $id " );
}
}
$sql = " select * from source where id=' $id ' " ;
$rs = $this -> db -> query ( $sql );
$row = $rs -> fetch ();
$this -> view -> info = $row ;
$this -> _helper -> viewRenderer ( 'sourceadd' );
} // 编辑单条信息
else if ( $do == 'datasource' && ! empty ( $uuid ))
{
$redirect = " /admin/data/source/do/datasource/uuid/ $uuid " ;
$this -> view -> uuid = $uuid ;
$sql = " select md.title,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
left join datasource ds on ds . uuid = md . uuid
left join source s on s . id = ds . sourceid
where md . uuid = '$uuid' " ;
$rs = $this -> db -> query ( $sql );
$row = $rs -> fetch ();
$this -> view -> info = $row ;
if ( ! empty ( $_POST [ 'submit' ]))
{
$sourceid = $this -> _request -> getParam ( 'sourceid' );
if ( empty ( $sourceid ))
{
$this -> messenger -> addMessage ( '请选择项目来源' );
$this -> _redirect ( $redirect );
}
$sql = " " ;
if ( empty ( $row [ 'id' ]))
{
$sql = " insert into datasource (uuid,sourceid) values (' $uuid ',' $sourceid ') " ;
} else
{
$sql = " update datasource set uuid=' $uuid ',sourceid=' $sourceid ' where id=' { $row [ 'id' ] } ' " ;
}
try {
if ( $this -> db -> exec ( $sql ))
{
$this -> messenger -> addMessage ( '修改项目来源成功' );
$this -> _redirect ( $redirect );
}
else
{
$this -> messenger -> addMessage ( '修改项目来源失败' );
$this -> _redirect ( $redirect );
}
} catch ( Exception $e ){
$this -> messenger -> addMessage ( '修改项目来源失败:' . $e -> getMessage ());
$this -> _redirect ( $redirect );
}
}
$wheresql = array ();
if ( ! empty ( $q ) && ! empty ( $search ))
{
$this -> view -> q = $q ;
$wheresql [] = " title like '% $q %' " ;
}
if ( count ( $wheresql > 0 )) $wheresql = join ( ' and ' , $wheresql );
else $wheresql = '' ;
if ( $wheresql != '' )
{
$wheresql = 'where ' . $wheresql ;
}
$sql = " select * from source $wheresql order by id desc " ;
$rs = $this -> db -> query ( $sql );
$rows = $rs -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'sourceselect' );
} // 为元数据选择项目来源
else if ( $do == 'del' && ! empty ( $id ))
{
$redirect = " /admin/data/source/ " ;
$sql = " delete from source where id=' $id ' " ;
try {
if ( $this -> db -> exec ( $sql ))
{
$this -> messenger -> addMessage ( '删除成功' );
$this -> _redirect ( $redirect );
} else {
$this -> messenger -> addMessage ( '删除失败,可能该数据已不存在' );
$this -> _redirect ( $redirect );
}
} catch ( Exception $e ){
$this -> messenger -> addMessage ( '删除失败:' . $e -> getMessage ());
$this -> _redirect ( $redirect );
}
} // 删除项目来源
else if ( $do == 'fetch' && ! empty ( $id ))
{
$wheresql = array ();
$wheresql [] = " ds.sourceid=' $id ' " ;
if ( ! empty ( $q ) && ! empty ( $search ))
{
$this -> view -> q = $q ;
$wheresql [] = " title like '% $q %' " ;
}
if ( count ( $wheresql > 0 )) $wheresql = join ( ' and ' , $wheresql );
else $wheresql = '' ;
if ( $wheresql != '' )
{
$wheresql = 'where ' . $wheresql ;
}
$sql = " select md.title,md.uuid,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
left join datasource ds on ds . uuid = md . uuid
left join source s on s . id = ds . sourceid
$wheresql
order by id desc " ;
$rs = $this -> db -> query ( $sql );
$rows = $rs -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
$this -> _helper -> viewRenderer ( 'sourcefetchone' );
} //查看某项目来源中的所有元数据
else if ( $do == 'delsource' && ! empty ( $id ))
{
$redirect = " /admin/data/source/do/datasource/uuid/ $uuid " ;
$sql = " delete from datasource where id=' $id ' " ;
try {
if ( $this -> db -> exec ( $sql ))
{
$this -> messenger -> addMessage ( '删除成功' );
$this -> _redirect ( $redirect );
} else {
$this -> messenger -> addMessage ( '删除失败,可能该数据已不存在' );
$this -> _redirect ( $redirect );
}
} catch ( Exception $e ){
$this -> messenger -> addMessage ( '删除失败:' . $e -> getMessage ());
$this -> _redirect ( $redirect );
}
} // 清除元数据来源记录
elseif ( $do == 'sync' ) { //同步数据来源到metadata表
$redirect = " /admin/data/source/ " ;
$sql = " update metadata m set source=s.uuid from source s right join datasource d on s.id=d.sourceid where m.uuid=d.uuid " ;
if ( $this -> db -> exec ( $sql ))
{
$this -> messenger -> addMessage ( '成功同步数据来源' );
$this -> _redirect ( $redirect );
} else {
$this -> messenger -> addMessage ( '同步数据来源失败' );
$this -> _redirect ( $redirect );
}
}
else
{
$wheresql = array ();
if ( ! empty ( $q ) && ! empty ( $search ))
{
$this -> view -> q = $q ;
$wheresql [] = " title like '% $q %' " ;
}
if ( count ( $wheresql > 0 )) $wheresql = join ( ' and ' , $wheresql );
else $wheresql = '' ;
if ( $wheresql != '' )
{
$wheresql = 'where ' . $wheresql ;
}
$sql = " select * from source $wheresql order by id desc " ;
$rs = $this -> db -> query ( $sql );
$rows = $rs -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
} // 项目来源管理
} //function sourceAction
function attachmentsAction ()
{
$submit = $this -> _request -> getParam ( 'submit' );
$add = $this -> _request -> getParam ( 'add' );
$search = $this -> _request -> getParam ( 'search' );
$delete = $this -> _request -> getParam ( 'delete' );
$edit = $this -> _request -> getParam ( 'edit' );
$down = $this -> _request -> getParam ( 'down' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$mdtitle = $this -> _request -> getParam ( 'mdtitle' );
$mdattdel = $this -> _request -> getParam ( 'mdattdel' );
$attupdate = $this -> _getParam ( 'attupdate' );
if ( ! empty ( $uuid ) &&! empty ( $mdtitle ))
{
$this -> view -> uuid = $uuid ;
$this -> view -> mdtitle = $mdtitle ;
}
if ( $add )
{
$this -> _helper -> viewRenderer ( 'attachmentsadd' );
if ( ! empty ( $uuid ))
{
$this -> view -> uuid = $uuid ;
}
} //附件添加
elseif ( $attupdate )
{
$submit = $this -> _getParam ( 'submit' );
if ( ! empty ( $submit ))
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'attupdate' );
$files = new files ();
$msg = $files -> upload ( $this -> view -> config -> upload , $_FILES [ 'Filedata' ], empty ( $uuid ) ? 'file' : 'md' );
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 = " UPDATE attachments SET filename=?,filetype=?,filesize=?,realname=? WHERE id=? " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $filename , $filetype , $filesize , $realname , $id ));
if ( $ds )
{
$msg [ 'html' ] = $realname . '[' . round ( $filesize / 1024 , 2 ) . ' kb]' ;
$msg [ 'ok' ] = 1 ;
echo Zend_Json :: encode ( $msg );
exit ();
} else {
@ unlink ( $filename );
$data = array ( " error " => '附件上传失败:写入附件表出错' );
$this -> jsonexit ( $data );
return true ;
}
} else {
@ unlink ( $filename );
$data = array ( " error " => '附件上传失败:' . $msg [ 'error' ]);
$this -> jsonexit ( $data );
return true ;
}
$data = array ( " error " => " 处理中出现错误 " . $id );
$this -> jsonexit ( $data );
return true ;
} else {
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer ( 'attachments-update' );
$id = $this -> _getParam ( 'attupdate' );
$this -> view -> id = $id ;
}
} //附件文件更新
else if ( $mdattdel )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$sql = " delete from mdattach where uuid=? AND id=? " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $uuid , $mdattdel ));
if ( $ds )
{
$data = array ( " status " => 1 ); //操作状态代码 : 1=>成功 2=>失败
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
}
}
else if ( $delete )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
//需要删除文件, 通过Zend_Registry::get('upload')获得上传文件的根目录
$basepath = $this -> view -> config -> upload ;
//从数据库获取文件路径
$info = $this -> getFileinfo ( $delete );
$filepath = $basepath . $info [ 'filename' ];
$sql = " SELECT * FROM mdattach WHERE id=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $delete ));
$rows = $sth -> fetchAll ();
if ( count ( $rows ) > 0 )
{
$data = array ( " error " => '删除失败!该文件有元数据附件信息,不能直接删除' , " status " => 0 );
$this -> jsonexit ( $data );
return true ;
}
$sql = " SELECT * FROM mdreviewattach WHERE attachid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $delete ));
$rows = $sth -> fetchAll ();
if ( count ( $rows ) > 0 )
{
$data = array ( " error " => '删除失败!该文件有对应评审附件信息,不能直接删除' , " status " => 0 );
$this -> jsonexit ( $data );
return true ;
}
$sql = " SELECT link FROM reference WHERE link!='' " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$rows = $sth -> fetchAll ();
$ids = array ();
foreach ( $rows as $k => $v )
{
if ( preg_match ( " /service/i " , $v [ 'link' ]))
{
$ids [] = str_replace ( " /service/attach/id/ " , " " , $v [ 'link' ]);
}
unset ( $rows [ $k ]);
}
unset ( $rows );
if ( in_array ( $delete , $ids ))
{
$data = array ( " error " => '删除失败!该文件有对应文献附件信息,不能直接删除' , " status " => 0 );
$this -> jsonexit ( $data );
return true ;
}
if ( unlink ( $filepath ))
{
$sql = " delete from attachments where id=' $delete ' " ;
if ( $this -> db -> exec ( $sql ) > 0 )
{
$data = array ( " status " => 1 );
$this -> jsonexit ( $data );
return true ;
}
}
else
{
$sql = " delete from attachments where id=' $delete ' " ;
if ( $this -> db -> exec ( $sql ) > 0 )
{
$data = array ( " error " => '文件删除失败,仅删除数据库记录,请手动删除文件:' . $info [ 'filename' ], " status " => 0 );
$this -> jsonexit ( $data );
return true ;
}
}
} //删除
else if ( $edit > 0 )
{
if ( empty ( $submit ))
{
$this -> view -> info = $this -> getFileinfo ( $edit );
$this -> _helper -> viewRenderer ( 'attachmentsadd' );
}
else
{
$filedesc = $this -> _request -> getParam ( 'filedesc' );
$sql = " update attachments set filedesc=' $filedesc ' where id=' $edit ' " ;
if ( $this -> db -> exec ( $sql ) > 0 )
{
$this -> messenger -> addMessage ( '编辑成功' );
$this -> _redirect ( " /admin/data/attachments/edit/ $edit " );
}
}
} //编辑
else if ( $search && $search != 'my' )
{
$keyword = $this -> _request -> getParam ( 'keyword' );
if ( empty ( $keyword ))
{
$this -> messenger -> addMessage ( '请输入关键词' );
$this -> _redirect ( " /admin/data/attachments/search/1 " );
}
else
{
$sql = " select * from attachments where filedesc like '% $keyword %' " ;
$re = $this -> db -> query ( $sql );
$rows = $re -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
} //搜索
else if ( $search && $search == 'my' )
{
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$userid = $user -> id ;
$sql = " select * from attachments where userid=' $userid ' " ;
$re = $this -> db -> query ( $sql );
$rows = $re -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
}
} //我的附件列表
else if ( $down > 0 )
{
$sql = " select * from attachments where id=' $down ' " ;
$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' )
-> setHeader ( 'Content-Disposition' , 'attachment; filename="' . basename ( $fullPath ) . '"' )
-> 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 );
//$sql = "update attachments set downtimes=downtimes+1 where id='$down'";
//$this->db->exec($sql);
} //附件下载
else
{
$sql = " select * from attachments order by id desc " ;
$re = $this -> db -> query ( $sql );
$rows = $re -> fetchAll ();
$paginator = Zend_Paginator :: factory ( $rows );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( 30 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
} //所有附件
} //attachments 附件
function uploadAction (){
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _getParam ( 'uuid' );
try {
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$userid = $user -> id ;
}
if ( empty ( $userid ) ||! is_numeric ( $userid )){
$msg [ 'error' ] = " 请先登录 " ;
echo Zend_Json :: encode ( $msg );
exit ();
}
if ( $user -> usertype != 'administrator' )
{
$msg [ 'error' ] = " 您无权使用此功能 " ;
echo Zend_Json :: encode ( $msg );
exit ();
}
$files = new files ();
$msg = $files -> upload ( $this -> view -> config -> upload , $_FILES [ 'Filedata' ], empty ( $uuid ) ? 'file' : 'md' );
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 ',' $userid ',' $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 ( empty ( $uuid ) || $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 ();
}
} // uploadAction ajax上传附件
function getattsAction (){
$this -> _helper -> layout () -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( $uuid != '' )
{
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$userid = $user -> id ;
$sql = " select m.*,a.*,d.title from mdattach m
left join attachments a on m . id = a . id
left join metadata d on m . uuid = d . uuid where m . uuid = '$uuid'
ORDER BY a . ts_created ASC " ;
$rs = $this -> db -> query ( $sql );
$atts = $rs -> fetchAll ();
foreach ( $atts as $k => $v )
{
$atts [ $k ][ 'html' ] = $v [ 'realname' ] . '[' . round ( $v [ 'filesize' ] / 1024 , 2 ) . ' kb]<input type="hidden" name="atts[]" value="' . $v [ 'id' ] . '" /><div class="cancel"><a href="javascript:;" id="deletebtn_' . $v [ 'id' ] . '"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>' ;
}
echo Zend_Json :: encode ( $atts );
exit ();
} else
{
exit ();
}
} else {
exit ();
}
//不输出错误
} //获取附件
/*
versionAction 版本管理
*/
public function versionAction (){
$ac = $this -> _request -> getParam ( 'ac' );
$uuid = $this -> _request -> getParam ( 'uuid' );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$u_id = $user -> id ;
}
//查看单条数据的所有版本
if ( ! empty ( $uuid ) && empty ( $ac ))
{
//view the versions of the data
2013-05-16 01:19:12 +00:00
$sql = " SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname,g.id as gid FROM mdversion v
2013-05-02 09:54:38 +00:00
LEFT JOIN metadata md ON md . uuid = v . uuid
left join users u on v . userid = u . id
2013-05-16 01:19:12 +00:00
left join geonetworkmetadata g on md . uuid = g . uuid
2013-05-02 09:54:38 +00:00
WHERE md . title IS NOT NULL AND v . uuid = ?
order by v . ts_created desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $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 ;
}
//查看所有版本列表
else if (( empty ( $ac ) && empty ( $uuid )) || $ac == 'list' )
{
$sql = " SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v
LEFT JOIN metadata md ON md . uuid = v . uuid
left join users u on v . userid = u . id
WHERE md . title IS NOT NULL
order by v . 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 ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
//按数据浏览
else if ( $ac == " bydata " )
{
$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
WHERE md . title IS NOT NULL " ;
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 ();
$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' );
}
//删除某个版本
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 " => " 参数错误 " );
$this -> jsonexit ( $data );
return true ;
}
$sql = " DELETE FROM mdversion WHERE id=? " ;
$sth = $this -> db -> prepare ( $sql );
$ex = $sth -> execute ( array ( $id ));
if ( $ex )
{
$data = array ( " deleted " => $id , " error " => " 删除成功 " );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => '删除失败,请确认权限后重试' );
$this -> jsonexit ( $data );
return true ;
}
} catch ( Exception $e ) {
$msg = " 删除失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $msg );
$this -> jsonexit ( $data );
return true ;
}
}
//恢复到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 " => " 参数错误 " );
$this -> jsonexit ( $data );
return true ;
}
$this -> wdb = Zend_Db :: factory ( $this -> view -> config -> geonetwork );
$sql = " SELECT v.xml,v.uuid FROM mdversion v
WHERE v . id = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$row = $sth -> fetch ();
$sql = " SELECT data FROM metadata WHERE uuid=? " ;
$sth = $this -> wdb -> prepare ( $sql );
$sth -> execute ( array ( $row [ 'uuid' ]));
$row_geo = $sth -> fetch ();
if ( $row [ 'xml' ] == $row_geo [ 'data' ])
{
$data = array ( " error " => '无须恢复,元数据相同' );
$this -> jsonexit ( $data );
return true ;
}
$sql = " UPDATE metadata SET data=? WHERE uuid=? " ;
$sth = $this -> wdb -> prepare ( $sql );
$ex = $sth -> execute ( array ( $row [ 'xml' ], $row [ 'uuid' ]));
if ( $ex )
{
$data = array ( " error " => '恢复成功' );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => '恢复失败,请确认权限后重试' );
$this -> jsonexit ( $data );
return true ;
}
} catch ( Exception $e ) {
$msg = " 恢复失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $msg );
$this -> jsonexit ( $data );
return true ;
}
}
//发布到评审
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 -> jsonexit ( $data );
return true ;
}
// 1. 权限认定 --skip
// 2. 保存变化记录 save changelog & userid
$sql = " UPDATE mdversion SET changelog=?,userid=? WHERE id=? " ;
$this -> db -> query ( $sql , array ( $changelog , $u_id , $id ));
// 3. 获取数据评审状态
$sql = " SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid
left join metadata m on s . uuid = m . uuid WHERE v . id = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$row = $sth -> fetch ();
$sql = " select * from xunsearch where uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $row [ 'uuid' ]));
$data_search = $sth -> fetch ();
$search = new Search ();
$search -> update ( $data_search );
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 ();
$iso -> saveDB ( $this -> db , $row [ 'xml' ]);
//进入评审库
$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 -> jsonexit ( $data );
return true ;
} else { //说明是已发布的数据且数据不存在评审信息
//同步元数据
$iso = new ISO19115 ();
$iso -> saveDB ( $this -> db , $row [ 'xml' ]);
//移除中间版本
$sql = " delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null " ;
$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 );
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => '该版本已经成功发布!' );
$this -> jsonexit ( $data );
return true ;
}
}
else if ( $row [ 'status' ] ==- 1 || $row [ 'status' ] == 0 || $row [ 'status' ] == 1 ) //取消发布的数据,初始状态,已接收
{
//同步元数据
$iso = new ISO19115 ();
$iso -> saveDB ( $this -> db , $row [ 'xml' ]);
//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 -> jsonexit ( $data );
return true ;
}
else if ( $row [ 'status' ] == 2 || $row [ 'status' ] == 3 || $row [ 'status' ] == 4 ) //已发送过外审邮件,需由编辑告知变化信息
{
//同步元数据
$iso = new ISO19115 ();
$iso -> saveDB ( $this -> db , $row [ 'xml' ]);
//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
2013-05-31 02:54:15 +00:00
$sql = " select u.username,u.email,u.id from mdexpertreview e left join users u on e.id=u.id where e.status in (0,1) and e.uuid=? " ;
2013-05-02 09:54:38 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $row [ 'uuid' ]));
$experts = $sth -> fetchAll ();
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 ());
2013-06-11 07:04:51 +00:00
$filecontent = file_get_contents ( " http:// " . $_SERVER [ 'HTTP_HOST' ] . '/service/doc/uuid/' . $row [ 'uuid' ]);
2013-05-02 09:54:38 +00:00
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , $row [ 'title' ] . '.doc' );
2013-06-11 07:04:51 +00:00
$filecontent = file_get_contents ( " http:// " . $_SERVER [ 'HTTP_HOST' ] . '/service/pdf/uuid/' . $row [ 'uuid' ]);
2013-05-02 09:54:38 +00:00
$mail -> createAttachment ( $filecontent , 'application/octet-stream' , Zend_Mime :: DISPOSITION_ATTACHMENT , Zend_Mime :: ENCODING_BASE64 , $row [ 'title' ] . '.pdf' );
if ( $this -> debug == 0 )
{
foreach ( $experts as $expert ) $mail -> addTo ( $expert [ 'email' ]);
$mail -> addCc ( $this -> view -> config -> service -> email );
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => '该版本已经成功提交,请等待数据中心进一步处理!' );
$this -> jsonexit ( $data );
return true ;
}
else if ( $row [ 'status' ] >= 5 ) //数据已经发布,再次修改后将只通知管理员,保留发布状态
{
//同步元数据
$iso = new ISO19115 ();
$iso -> saveDB ( $this -> db , $row [ 'xml' ]);
//移除中间版本
$sql = " delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null " ;
$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 );
//$mail->addCc($this->view->config->service->email);
} else {
$mail -> addTo ( $this -> debug_email );
}
@ $mail -> send ();
$data = array ( " commited " => 1 , " error " => '该版本已经成功发布!' );
$this -> jsonexit ( $data );
return true ;
}
} catch ( Exception $e ) {
$msg = " 提交失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $msg );
$this -> jsonexit ( $data );
return true ;
}
} //发布到评审
//与前一个版本对比
2013-05-16 01:38:54 +00:00
else if ( $ac == " diff " || $ac == " diff1 " )
2013-05-02 09:54:38 +00:00
{
$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 metadata md ON v . uuid = md . uuid
WHERE v . id = ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$row = $sth -> fetch ();
2013-05-16 01:38:54 +00:00
if ( $ac == 'diff' )
{
$sql = " SELECT v.* FROM mdversion v
WHERE v . uuid = ? and v . ts_created <= ( select ts_created from mdversion where id = ? )
2013-05-02 09:54:38 +00:00
ORDER BY v . ts_created DESC
LIMIT ? " ;
2013-05-16 01:38:54 +00:00
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $row [ 'uuid' ], $id , 2 ));
} else {
$sql = " SELECT v.* FROM mdversion v
2013-05-16 01:45:16 +00:00
WHERE v . uuid = ? and ( v . id = ? or ( v . ts_created < ( select ts_created from mdversion where id = ? ) and changelog is not null ))
2013-05-16 01:38:54 +00:00
ORDER BY v . ts_created DESC
LIMIT ? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $row [ 'uuid' ], $id , $id , 2 ));
}
2013-05-02 09:54:38 +00:00
$rows = $sth -> fetchAll ();
if ( count ( $rows ) < 2 )
{
$this -> view -> error = " 对比失败:之前没有版本可以对比 " ;
return true ;
}
$this -> view -> info = $row ;
$this -> view -> data = $rows ;
}
} //versionAction 版本控制
/*
* authorAction () 数据作者
*
* param string $ac //动作
= add 添加
= edit 编辑
= update 更新
= del 删除
= list 列出所有数据作者
* param string $uuid //UUID
*
* return view | application - json
*/
public function authorAction (){
$ac = $this -> _getParam ( 'ac' );
$uuid = $this -> _getParam ( 'uuid' );
if ( empty ( $ac ) && empty ( $uuid ))
{
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
$sql = " select md.id,md.title,md.uuid,count(a.userid) as c from metadata md
right JOIN mdauthor a ON md . uuid = a . uuid
" ;
if ( ! empty ( $keywords ))
{
2013-05-10 08:53:24 +00:00
$search = new SimpleSearch ( $keywords );
2013-05-02 09:54:38 +00:00
$where = $search -> sql_expr ( array ( " md.title " ));
2013-05-10 08:53:24 +00:00
$sql .= ' and (' . $where . " ) " ;
2013-05-02 09:54:38 +00:00
}
$sql .= " GROUP by md.id,md.title,md.uuid,md.ts_created
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 ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
} //列表
else if ( $ac == 'add' )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$username = $this -> _getParam ( 'username' );
$uuid = $this -> _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 ))
{
$data = array ( " error " => " uuid参数错误 " );
$this -> jsonexit ( $data );
return true ;
}
if ( empty ( $username ))
{
$data = array ( " error " => '请输入要添加为该数据作者的用户名' );
$this -> jsonexit ( $data );
return true ;
}
$sql = " SELECT * FROM users WHERE username=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $username ));
$row = $sth -> fetch ();
if ( empty ( $row [ 'id' ]) || ! isset ( $row [ 'id' ]))
{
$data = array ( " error " => '您输入的用户名无任何对应用户' );
$this -> jsonexit ( $data );
return true ;
}
$uid = $row [ 'id' ];
$sql = " SELECT * FROM mdauthor WHERE userid=? AND uuid=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $row [ 'id' ], $uuid ));
$row = $sth -> fetch ();
if ( ! empty ( $row [ 'id' ]) && $row [ 'status' ] == 1 )
{
$data = array ( " error " => '该用户已经是此数据的作者' );
$this -> jsonexit ( $data );
return true ;
}
if ( ! empty ( $row [ 'id' ]) && in_array ( $row [ 'status' ], array ( 0 , - 1 )) )
{
$sql = " UPDATE mdauthor SET status=1 WHERE uuid=? AND userid=? " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $uuid , $uid ));
if ( $ds )
{
$data = array ( " msg " => '该用户已被提升为数据作者' , 'added' => 1 );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => '处理中出现错误' );
$this -> jsonexit ( $data );
return true ;
}
}
if ( empty ( $row [ 'id' ]))
{
$sql = " INSERT INTO mdauthor (uuid,userid,status) VALUES (?,?,?) " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $uuid , $uid , 1 ));
if ( $ds )
{
$data = array ( " msg " => '该用户已被添加为数据作者' , 'added' => 1 );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
}
}
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
} //ajax 添加作者
else if (( $ac == " edit " || $ac == " " ) && ! empty ( $uuid ))
{
$window = $this -> _getParam ( 'window' );
if ( $window == " iframe " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer ( 'author-edit-iframe' );
} else {
$this -> _helper -> viewRenderer ( 'author-edit' );
}
$sql = " SELECT a.*,md.title,u.realname,u.username FROM mdauthor a
LEFT JOIN metadata md ON a . uuid = md . uuid
LEFT JOIN users u ON a . userid = u . id
WHERE md . uuid = ?
ORDER BY a . id DESC
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $uuid ));
$rows = $sth -> fetchAll ();
$this -> view -> authors = $rows ;
} // 作者管理弹窗
else if ( $ac == " del " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'id' );
$sql = " DELETE FROM mdauthor WHERE id=? " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $id ));
if ( $ds )
{
$data = array ( " deleted " => $id );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
}
} //移除作者
else if ( $ac == 'update' )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'id' );
$sql = " UPDATE mdauthor SET status=1 WHERE id=? " ;
$sth = $this -> db -> prepare ( $sql );
$ds = $sth -> execute ( array ( $id ));
if ( $ds )
{
$data = array ( " updated " => $id , 'msg' => '认证成功!' );
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 处理中出现错误 " );
$this -> jsonexit ( $data );
return true ;
}
} //认证作者
else if ( $ac == " list " )
{
$this -> _helper -> viewRenderer ( 'author-list' );
$sql = " SELECT u.id,u.realname,u.email,count(a.id) as d FROM mdauthor a
LEFT JOIN users u ON a . userid = u . id
WHERE a . status > 0
GROUP BY u . id , u . realname , u . email
ORDER BY u . id DESC " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$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 == " userdatas " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'id' );
$sql = " SELECT md.title,md.uuid FROM mdauthor a
LEFT JOIN metadata md ON a . uuid = md . uuid
WHERE a . userid = ? AND a . status > 0
ORDER BY a . ts_created " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$rows = $sth -> fetchAll ();
$data = array ( " datas " => $rows );
$this -> jsonexit ( $data );
return true ;
} //用户数据
else if ( $ac == " datas " )
{
$this -> _helper -> viewRenderer ( 'author-datas' );
$keywords = $this -> _request -> getParam ( 'q' );
if ( ! empty ( $keywords ))
$this -> view -> q = $keywords ;
$sql = " select md.id,md.title,md.uuid,count(a.userid) as c from metadata md
left JOIN mdauthor a ON md . uuid = a . uuid
" ;
if ( ! empty ( $keywords ))
{
2013-05-10 08:53:24 +00:00
$search = new SimpleSearch ( $keywords );
2013-05-02 09:54:38 +00:00
$where = $search -> sql_expr ( array ( " md.title " ));
$sql .= ' WHERE ' . $where ;
}
$sql .= " GROUP by md.id,md.title,md.uuid,md.ts_created
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 ( 15 );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination_param.phtml' );
$this -> view -> paginator = $paginator ;
}
} //authorAction() 数据作者管理
//newdataAction() 新建元数据
public function newdataAction (){
$ac = $this -> _request -> getParam ( 'ac' );
$id = $this -> _request -> getParam ( 'id' );
$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 ))
{
$this -> view -> url = 'metadata.show?id=' . $id ;
$this -> _helper -> viewRenderer ( 'newdata-view' );
}
//查看所有的未提交数据列表
else if (( empty ( $ac ) && empty ( $uuid )) || $ac == 'list' )
{
$sql = " SELECT (regexp_matches(gn.data,'<resTitle>(.*)</resTitle>'))[1] as title,gn.id,gn.uuid,u.username,u.realname FROM geonetworkmetadata gn left join users u on gn.owner=u.id
WHERE gn . uuid not in ( select uuid from metadata )
order by gn . id desc
" ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$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 == " import " )
{
$this -> _helper -> viewRenderer ( 'newdata-import' );
}
//从模板新建元数据
else if ( $ac == " add-by-template " )
{
$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 ;
$this -> _helper -> viewRenderer ( 'newdata-add' );
}
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 == " validate " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
$id = $this -> _request -> getParam ( 'id' );
$sql = " select uuid,data from geonetworkmetadata where id=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$row = $sth -> fetch ();
$iso = new ISO19115 ();
@ $iso -> loadXML ( $row [ 'data' ]);
if ( $iso -> validate ())
{
$data = array ( " error " => " 元数据中发现错误。<br /> " . implode ( " <br /> " , $iso -> error ));
$this -> jsonexit ( $data );
return true ;
} else {
$data = array ( " error " => " 元数据中没有发现错误。<br /> " );
$this -> jsonexit ( $data );
return true ;
}
}
//提交数据
else if ( $ac == " commit " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$data = " " ;
$id = $this -> _request -> getParam ( 'id' );
try {
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 -> jsonexit ( $data );
return true ;
}
// 1. 权限认定: 当前用户必须和其owner相同
// 数据应当没有评审状态,没有作者信息
$sql = " select uuid,data from geonetworkmetadata where id=? " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ( array ( $id ));
$row = $sth -> fetch ();
if ( empty ( $row ))
{
$data = array ( " error " => '无权限修改数据' );
$this -> jsonexit ( $data );
return true ;
}
// 保存数据作者信息
// 2. 保存变化记录 save changelog & userid for the latest version
$sql = " UPDATE mdversion SET changelog=?,userid=? WHERE id in (select v.id from mdversion v left join geonetworkmetadata g on v.uuid=g.uuid where g.id=? order by v.ts_created desc limit 1) " ;
$this -> db -> query ( $sql , array ( $changelog , $u_id , $id ));
// 3. 保存数据评审状态
//导入元数据
$iso = new ISO19115 ();
@ $iso -> saveDB ( $this -> db , $row [ 'data' ]);
//进入评审库
$sql = " insert into mdstatus (uuid,status,userid) select uuid,0,? from geonetworkmetadata 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 ();
$data = array ( " commited " => 1 , " error " => '该版本已经成功提交,请等待数据中心进一步处理!' );
$this -> jsonexit ( $data );
return true ;
} catch ( Exception $e ) {
$sql = " delete from mdstatus where uuid in (select uuid from geonetworkmetadata where id=?) " ;
$this -> db -> query ( $sql , array ( $id ));
$msg = " 提交失败,请确认权限后重试 " ;
if ( $this -> debug > 0 )
{ $msg .= $e -> getMessage ();}
$data = array ( " error " => $msg );
$this -> jsonexit ( $data );
return true ;
}
}
} // newdataAction() 新建元数据
/*
* projectsAction () 数据汇交计划
*
*
*
*
*/
function projectAction ()
{
include_once ( " Heihe.php " );
$heihe = new Heihe ( $this -> db );
$this -> view -> input_NameDefaultVal = " 专家姓名 " ;
$this -> view -> input_EmailDefaultVal = " 专家email " ;
$projectTable = $heihe -> tbl_heiheproject ;
$ac = $this -> _getParam ( 'ac' );
if ( empty ( $ac ) || $ac == " index " )
{
$this -> _helper -> viewRenderer ( 'project' );
//Search Link
$this -> view -> searchLink = " /admin/heihe/project/ac/index/ " ;
$q = $this -> _getParam ( 'q' );
$wheresql = array ();
if ( ! empty ( $q ))
{
$wheresql [] = " (title LIKE '% $q %' OR
code LIKE '%$q%' OR
name LIKE '%$q%' OR
email LIKE '%$q%' ) " ;
$this -> view -> searchKeyword = $q ;
}
if ( count ( $wheresql ) > 0 )
{
$wheresql = join ( " AND " , $wheresql );
} else {
$wheresql = " " ;
}
if ( ! empty ( $wheresql ))
{
$wheresql = " WHERE " . $wheresql ;
}
$sql = " SELECT * FROM $projectTable $wheresql
ORDER BY id ASC " ;
$sth = $this -> db -> query ( $sql );
$rows = $sth -> fetchAll ();
foreach ( $rows as $k => $v )
{
$rows [ $k ][ 'status_alias' ] = $heihe -> getStatus ( $v [ 'status' ]);
}
$this -> view -> Count = count ( $rows );
$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 -> view -> project_status = $heihe -> project_status ;
return true ;
} //ac == index
//邀请专家
if ( $ac == " invite " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$pid = $this -> _getParam ( 'id' );
$name = $this -> _getParam ( 'name' );
$email = $this -> _getParam ( 'email' );
if ( ! is_numeric ( $pid ))
{
$this -> jsonexit ( array ( " error " => " 参数错误 " ));
return true ;
}
if ( empty ( $name ) || $name == $this -> view -> input_NameDefaultVal )
{
$this -> jsonexit ( array ( " error " => " 请输入专家姓名 " ));
return true ;
}
if ( empty ( $email ) || $email == $this -> view -> input_EmailDefaultVal )
{
$this -> jsonexit ( array ( " error " => " 请输入专家Email " ));
return true ;
}
$code = $heihe -> makeValidation ( $email );
$expert_data = array (
" name " => $name , //专家姓名
" email " => $email , //专家email
" created " => date ( " Y-m-d H:i:s " , time ()), //邀请时间
" validation " => $code , //验证码
);
$rs = $heihe -> expertAdd ( $pid , $expert_data );
if ( $rs > 0 )
{
$this -> sendMailToExpert ( $pid , $name , $email , $code ); // 最后再加入一个非0的数字型参数即可使用调试邮箱发送
$this -> jsonexit ( array ( " msg " => " 专家邀请成功! " , " invited " => 1 ));
return true ;
} else if ( $rs ==- 1 ){
$this -> jsonexit ( array ( " error " => " 该专家已经邀请过 " ));
return true ;
} else {
$this -> jsonexit ( array ( " error " => " 邀请失败,请重试 " ));
return true ;
}
return true ;
} // 邀请专家
if ( $ac == " showexpert " )
{
$this -> _helper -> layout -> setLayout ( 'layout-iframe' );
$this -> _helper -> viewRenderer ( 'project-showexpert' );
$pid = $this -> _getParam ( 'id' );
if ( empty ( $pid ) || ! is_numeric ( $pid ))
{
$this -> view -> error = " 参数错误 " ;
return true ;
}
$this -> view -> pid = $pid ;
$experts = $heihe -> expertRead ( $pid );
if ( ! is_array ( $experts ))
{
$this -> view -> error = " 此项目还没有邀请专家 " ;
return true ;
}
foreach ( $experts as $k => $v )
{
$experts [ $k ][ 'url' ] = $heihe -> makeInviteLink ( $pid , $v [ 'validation' ]);
}
$this -> view -> experts = $experts ;
return true ;
} //ac == showexpert 查看跟踪专家
if ( $ac == " remove " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$pid = $this -> _getParam ( 'id' );
$del = $this -> _getParam ( 'del' );
if ( ! empty ( $del ) && ! empty ( $pid ))
{
$rs = $heihe -> expertRemove ( $pid , $del );
if ( $rs )
{
$this -> jsonexit ( array ( " deleted " => 1 ));
return true ;
} else {
$this -> jsonexit ( array ( " error " => " 删除失败,请重试 " ));
return true ;
}
} else {
$this -> jsonexit ( array ( " error " => " 参数错误,请刷新 " ));
return true ;
}
} //ac == remove 删除专家
if ( $ac == " upload " )
{
$this -> _helper -> layout -> setLayout ( 'layout-iframe' );
$this -> _helper -> viewRenderer ( 'project-upload' );
$submit = $this -> _getParam ( 'submit' );
$pid = $this -> _getParam ( 'pid' );
if ( empty ( $pid ) || ! is_numeric ( $pid ))
{
$this -> view -> error = " 参数错误 " ;
return true ;
}
$this -> view -> pid = $pid ;
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
}
if ( ! empty ( $submit ) && empty ( $this -> view -> error ))
{
$files = new files ();
$msg = $files -> upload ( $this -> view -> config -> upload , $_FILES [ 'Filedata' ], 'heihe' );
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' ];
if ( ! empty ( $row [ 'attachid' ]))
{
$sql = " SELECT * FROM attachments WHERE id= { $row [ 'attachid' ] } " ;
$sth = $this -> db -> query ( $sql );
$attach = $sth -> fetch ();
$this -> db -> exec ( " DELETE FROM attachments WHERE id= { $row [ 'attachid' ] } AND filetype='heihe' " );
@ unlink ( $this -> view -> config -> upload . $attach [ 'filename' ]);
}
$sql = " INSERT INTO attachments (filename,filetype,filedesc,userid,filesize,realname) values
( '$filename' , 'heihe' , '$filedesc' , '$uid' , '$filesize' , '$realname' ) RETURNING id " ;
$sth = $this -> db -> prepare ( $sql );
$sth -> execute ();
$att = $sth -> fetch ( PDO :: FETCH_ASSOC );
$msg [ 'attid' ] = $attid = $att [ 'id' ];
$sql = " UPDATE heiheproject SET attachid= $attid WHERE id= $pid " ;
$sth = $this -> db -> exec ( $sql );
if ( $sth )
{
$this -> view -> message = " 上传成功 " ;
} else {
@ unlink ( $filename );
$this -> view -> error = '附件上传失败:写入附件表出错' ;
return true ;
}
} else {
@ unlink ( $filename );
$this -> view -> error = " 附件上传失败 " . $msg [ 'error' ];
return true ;
}
}
$sql = " SELECT * FROM heiheproject WHERE id= $pid " ;
$sth = $this -> db -> query ( $sql );
$row = $sth -> fetch ();
if ( ! empty ( $row [ 'attachid' ]))
{
$sql = " SELECT * FROM attachments WHERE id = { $row [ 'attachid' ] } " ;
$sth = $this -> db -> query ( $sql );
$this -> view -> att = $sth -> fetch ();
}
return true ;
} //ac == upload
//改变状态
if ( $ac == " changestatus " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$project = $this -> _getParam ( 'p' );
$status = $this -> _getParam ( 's' );
if ( ! is_numeric ( $status ))
{
$this -> jsonexit ( array ( 'error' => '参数错误' ));
return true ;
}
$code = $heihe -> ChangeStatus ( $project , $status );
if ( $code > 0 )
{
$this -> jsonexit (
array (
'msg' => '修改成功!' ,
'status' => $heihe -> getStatus ( $status )
)
);
return true ;
} else {
$this -> jsonexit ( array ( 'error' => '参数错误' ));
return true ;
}
} //ac == "changestatus"
} //projectsAction()
public function fundAction ()
{
$this -> _helper -> layout -> setLayout ( 'administry' );
$ac = $this -> _getParam ( 'ac' );
$submit = $this -> _getParam ( 'submit' );
2013-05-16 08:47:29 +00:00
$this -> view -> q = $keyword = $this -> _getParam ( 'q' );
2013-05-02 09:54:38 +00:00
2013-05-16 08:47:29 +00:00
include_once ( " helper/view.php " );
2013-05-02 09:54:38 +00:00
include_once ( " data/Fund.php " );
$fund = new Fund ( $this -> db );
$auth = Zend_Auth :: getInstance ();
if ( $auth -> hasIdentity ())
{
$user = $auth -> getIdentity ();
$uid = $user -> id ;
}
if ( $ac == 'index' || empty ( $ac ))
{
$uuid = $this -> _getParam ( 'uuid' );
if ( empty ( $uuid ))
{
2013-05-30 01:53:30 +00:00
$rows = $fund -> fetch ( NULL , true , 0 , $keyword );
2013-05-16 08:47:29 +00:00
view :: addPaginator ( $rows , $this -> view , $this -> _request );
2013-05-02 09:54:38 +00:00
} else {
include ( 'data/Metadata.php' );
$md = new Metadata ( $this -> db );
$this -> view -> md = $md -> view ( $uuid );
$rows = $fund -> fetch ( $uuid );
2013-05-16 08:47:29 +00:00
view :: addPaginator ( $rows , $this -> view , $this -> _request );
2013-05-02 09:54:38 +00:00
}
return true ;
}
2013-05-23 08:56:59 +00:00
if ( $ac == 'datalist' )
{
$this -> _helper -> viewRenderer ( 'fund-data-list' );
$this -> view -> q = $q = $this -> _getParam ( 'q' );
2013-05-28 05:36:26 +00:00
$rows = $fund -> fetchFromData ( true , 0 , $q );
2013-05-23 08:56:59 +00:00
view :: addPaginator ( $rows , $this -> view , $this -> _request );
return true ;
}
if ( $ac == 'dataview' )
{
$this -> _helper -> viewRenderer ( 'fund-data-view' );
$this -> view -> q = $q = $this -> _getParam ( 'q' );
$id = $this -> _getParam ( 'id' );
$this -> view -> fund = $fund -> view ( $id );
2013-05-28 05:36:26 +00:00
$rows = $fund -> fetchFromData ( $id , 0 , $q );
2013-05-23 08:56:59 +00:00
view :: addPaginator ( $rows , $this -> view , $this -> _request );
return true ;
}
2013-05-02 09:54:38 +00:00
if ( $ac == " add " )
{
$this -> _helper -> viewRenderer ( 'fund-add' );
if ( ! empty ( $submit ))
{
$data = $fund -> _getParams ( $this -> _request );
$data [ 'userid' ] = $uid ;
if ( $fund -> add ( $data ) == true )
{
$this -> view -> AlertType = " alert-success " ;
$this -> view -> msg = " 添加成功! " ;
$this -> view -> jump_url = " /admin/data/fund/ " ;
return true ;
} else {
$this -> view -> data = $data ;
$this -> view -> error = " 添加失败,请重试 " ;
return true ;
}
}
return true ;
} //add
if ( $ac == " edit " )
{
$this -> _helper -> viewRenderer ( 'fund-add' );
$id = $this -> _getParam ( 'id' );
if ( empty ( $id ))
{
$this -> view -> AlertType = " alert-error " ;
$this -> view -> msg = " 参数错误 " ;
$this -> view -> jump_url = " /admin/data/fund/ " ;
}
if ( ! empty ( $submit ))
{
$data = $fund -> _getParams ( $this -> _request );
$data [ 'userid' ] = $uid ;
if ( $fund -> update ( $data , $id ) == true )
{
$this -> view -> AlertType = " alert-success " ;
$this -> view -> msg = " 修改成功! " ;
$this -> view -> jump_url = " /admin/data/fund/ " ;
return true ;
} else {
$this -> view -> data = $data ;
$this -> view -> error = " 修改失败,请重试 " ;
return true ;
}
} else {
$this -> view -> data = $fund -> view ( $id );
}
return true ;
} //edit
if ( $ac == " del " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'id' );
if ( empty ( $id ))
{
$this -> jsonexit ( array ( 'error' => '参数错误' ));
return true ;
}
if ( $fund -> delete ( $id ) == true )
{
$this -> jsonexit ( array ( 'success' => $id ));
return true ;
} else {
$this -> jsonexit ( array ( 'error' => '删除失败' ));
return true ;
}
} //del
if ( $ac == " formd " )
{
$uuid = $this -> _getParam ( 'uuid' );
if ( empty ( $uuid ))
{
$this -> view -> AlertType = " alert-error " ;
$this -> view -> msg = " 参数错误 " ;
$this -> view -> jump_url = " /admin/data/fund/ " ;
}
$id = $this -> _getParam ( 'id' );
$order = $this -> _getParam ( 'order' );
if ( ! empty ( $id ))
{
if ( $fund -> addToMdfund ( $uuid , $id , $order ))
{
$this -> view -> AlertType = " alert-success " ;
$this -> view -> error = " 添加成功!可以继续选择并添加 " ;
} else {
$this -> view -> AlertType = " alert-error " ;
$this -> view -> error = " 添加失败!该数据可能已被添加 " ;
}
}
$mfid = $this -> _getParam ( 'mfid' );
if ( ! empty ( $mfid ))
{
if ( $fund -> changeorder ( $mfid , $order ))
{
$this -> view -> AlertType = " alert-success " ;
$this -> view -> error = " 排序修改成功! " ;
} else {
$this -> view -> AlertType = " alert-error " ;
$this -> view -> error = " 排序修改失败! " ;
}
$rows = $fund -> fetch ( $uuid );
} else {
$this -> view -> ct = " ct " ;
2013-05-31 02:54:15 +00:00
$rows = $fund -> fetch ( $uuid , false , 0 , $this -> _getParam ( 'q' ));
2013-05-02 09:54:38 +00:00
}
include ( 'data/Metadata.php' );
$md = new Metadata ( $this -> db );
$this -> view -> md = $md -> view ( $uuid );
2013-05-16 08:47:29 +00:00
view :: addPaginator ( $rows , $this -> view , $this -> _request );
2013-05-02 09:54:38 +00:00
return true ;
} //formd
if ( $ac == " mdfunddel " )
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'id' );
if ( empty ( $id ))
{
$this -> jsonexit ( array ( 'error' => '参数错误' ));
return true ;
}
if ( $fund -> mfdelete ( $id ) == true )
{
$this -> jsonexit ( array ( 'success' => $id ));
return true ;
} else {
$this -> jsonexit ( array ( 'error' => '删除失败' ));
return true ;
}
} //mdfunddel
2013-05-16 08:47:29 +00:00
if ( $ac == " data " )
{
$this -> _helper -> viewRenderer ( 'fund-data' );
$id = $this -> _getParam ( 'id' );
$del = $this -> _getParam ( 'del' );
$this -> view -> info = $fund -> view ( $id );
if ( ! empty ( $del ))
{
$s = $fund -> dataRelationDelete ( $del );
if ( $s )
{
$this -> view -> error = view :: Error ( " 删除成功! " , " alert-sccuess " );
} else {
$this -> view -> error = view :: Error ( " 删除失败! " , " alert-error " );
}
}
$rows = $fund -> getData ( $id , $keyword );
view :: addPaginator ( $rows , $this -> view , $this -> _request );
}
2013-05-02 09:54:38 +00:00
} //fund
public function doiAction ()
{
$ac = $this -> _getParam ( 'ac' );
$submit = $this -> _getParam ( 'submit' );
$uuid = $this -> _getParam ( 'uuid' );
include_once ( " data/Doi.php " );
$doi = new Doi ( $this -> db );
include_once ( " helper/view.php " );
if ( empty ( $ac ) || $ac == " index " )
{
if ( empty ( $uuid ))
{
$rows = $doi -> fetch ();
view :: addPaginator ( $rows , $this -> view , $this -> _request );
} else {
$this -> _redirect ( '/admin/data/doi/ac/edit/?uuid=' . $uuid );
return true ;
}
return true ;
} //index
2013-05-13 06:33:35 +00:00
else if ( $ac == " add " )
2013-05-02 09:54:38 +00:00
{
$this -> _helper -> viewRenderer ( 'doi-add' );
} //add
2013-05-13 06:33:35 +00:00
else if ( $ac == " edit " )
2013-05-02 09:54:38 +00:00
{
$this -> _helper -> viewRenderer ( 'doi-add' );
$id = $this -> _getParam ( 'id' );
if ( empty ( $uuid ) && empty ( $id ))
{
view :: Msg ( 'alert-error' , " 参数错误 " , - 1 );
return false ;
}
if ( empty ( $submit )){
if ( ! empty ( $uuid ))
{
$this -> view -> uuid = $uuid ;
$this -> view -> data = $doi -> view ( $uuid );
if ( empty ( $this -> view -> data ))
{
include ( 'data/Metadata.php' );
$md = new Metadata ( $this -> db );
$metadata = $md -> view ( $uuid );
$this -> view -> data = array (
'uuid' => $uuid ,
'title' => $metadata [ 'title' ],
'doi' => $metadata [ 'doi' ],
'url' => " http:// " . $_SERVER [ 'HTTP_HOST' ] . '/data/' . $uuid ,
2013-05-06 03:37:22 +00:00
'publisher' => '寒区旱区科学数据中心' ,
2013-05-02 09:54:38 +00:00
'title_en' => $metadata [ 'title_en' ],
2013-05-06 03:55:37 +00:00
'publisher_en' => 'Cold and Arid Regions Science Data Center at Lanzhou' ,
2013-05-02 09:54:38 +00:00
);
} else {
$this -> view -> data [ 'info' ] = $doi -> data_process_out ( $this -> view -> data );
}
} else {
$this -> view -> data = $doi -> view ( $uuid );
$this -> view -> data [ 'info' ] = $doi -> data_process_out ( $this -> view -> data );
}
} else {
$data = $doi -> _getParams ( $this -> _request );
$this -> view -> data = $data ;
$info = $doi -> checkinfo ( $data [ 'info' ]);
if ( ! is_array ( $info )){
2013-05-09 08:20:44 +00:00
$this -> view -> error = view :: Error ( $info );
2013-05-02 09:54:38 +00:00
return true ;
} else {
$data [ 'info' ] = $info ;
2013-05-09 07:12:56 +00:00
$data [ 'info' ] = $doi -> sksort ( $data [ 'info' ], " order " , SORT_ASC );
2013-05-02 09:54:38 +00:00
}
$state = $doi -> update ( $data , $uuid );
if ( $state )
{
$this -> view -> msg = view :: Msg ( 'alert-success' , " 修改成功! " , '/admin/data/doi/uuid/' . $uuid );
return false ;
} else {
2013-05-09 08:20:44 +00:00
$this -> view -> error = view :: Error ( " 修改失败 " );
2013-05-02 09:54:38 +00:00
return false ;
}
}
} //edit
2013-05-13 06:33:35 +00:00
else if ( $ac == " del " )
2013-05-02 09:54:38 +00:00
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$id = $this -> _getParam ( 'id' );
if ( empty ( $id ))
{
$this -> jsonexit ( array ( 'error' => '参数错误' ));
return true ;
}
if ( $doi -> delete ( $id ) == true )
{
$this -> jsonexit ( array ( 'success' => $id ));
return true ;
} else {
$this -> jsonexit ( array ( 'error' => '删除失败' ));
return true ;
}
} //del
2013-05-13 06:33:35 +00:00
else if ( $ac == " convert " ) //转换为chinadoi所需元数据格式
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$sql = " select d.*,m.description from datadoi d left join metadata m on d.uuid=m.uuid where d.uuid=' $uuid ' " ;
$row = $this -> db -> fetchRow ( $sql );
$timestamp = date ( 'YmdHis' );
$authors = explode ( ',' , substr ( $row [ 'authors' ], 1 , - 1 ));
$orgs = explode ( ',' , substr ( $row [ 'organization' ], 1 , - 1 ));
$doi = ' < doi_batch version = " 1.0.0 " >
< head >
< doi_batch_id > '.$timestamp.' </ doi_batch_id >
< timestamp > '.$timestamp.' </ timestamp >
< depositor >
< name > ISTIC </ name >
< email_address > tuy @ istic . ac . cn </ email_address >
</ depositor >
< registrant > ISTIC </ registrant >
</ head >
< body >
< science_data >
< database >
< contributors > ' ;
foreach ( $authors as $k => $v )
{
2013-05-13 07:15:59 +00:00
$doi .= '<person_name sequence="first" contributor_role="author">' . $v . '</person_name>' ;
$doi .= '<organization sequence="first" contributor_role="author">' . $orgs [ $k ] . '</organization>' ;
2013-05-13 06:33:35 +00:00
}
$doi .= ' </ contributors >
< titles >
2013-05-22 02:32:20 +00:00
< title ><! [ CDATA [ '.$row[' title '].' ]] ></ title >
2013-05-13 06:33:35 +00:00
< subtitle ></ subtitle >
</ titles > ' ;
2013-05-22 02:32:20 +00:00
$doi .= '<description><![CDATA[' . $row [ 'description' ] . ']]></description>' ;
2013-05-13 06:33:35 +00:00
$doi .= '<publisher><publisher_name>' . $row [ 'publisher' ] . '</publisher_name></publisher>' ;
$doi .= ' < doi_data >
< doi > '.$row[' doi '].' </ doi >
< timestamp > '.$timestamp.' </ timestamp >
< resource ><! [ CDATA [ http :// westdc . westgis . ac . cn / data / '.$row[' uuid '].' ]] ></ resource >
</ doi_data > ' ;
$doi .= ' </ database >
</ science_data >
</ body >
</ doi_batch > ' ;
$this -> getResponse () -> setHeader ( 'Content-Type' , 'text/xml' ) -> setHeader ( 'Content-Disposition' , 'attachment; filename="' . $row [ 'uuid' ] . '.xml"' )
-> setHeader ( 'Content-Type' , 'application/force-download' ) -> setBody ( $doi );
$this -> db -> query ( 'update datadoi set ts_submitted=now() where uuid=?' , array ( $uuid ));
}
2013-05-13 07:00:30 +00:00
else if ( $ac == " verified " ) //成功申请
{
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
2013-05-15 14:02:14 +00:00
$row = $this -> db -> fetchRow ( " select * from datadoi where uuid=' $uuid ' " );
$content =@ file_get_contents ( " http://dx.doi.org/ " . $row [ 'doi' ]);
if ( strpos ( $content , $row [ 'doi' ]) !== false ) //成功申请
{
$sql = " update datadoi set ts_published=now() where uuid=? and ts_published is null " ;
$this -> db -> query ( $sql , array ( $uuid ));
$this -> jsonexit ( array ( 'success' => '成功申请' ));
} else
$this -> jsonexit ( array ( 'success' => '该DOI验证失败, 请检查! ' ));
2013-05-13 09:58:02 +00:00
return true ;
2013-05-13 07:00:30 +00:00
}
2013-05-02 09:54:38 +00:00
} //doi
//发送邀请专家的邮件
public function sendMailToExpert ( $pid , $name , $email , $code , $test = 0 )
{
include_once ( " Heihe.php " );
$heihe = new Heihe ( $this -> db );
$url = $heihe -> makeInviteLink ( $pid , $code );
include_once ( " EmailText.php " );
$mailtp = new EmailText ( $this -> db , " expert-invite " , array (
'name' => $name ,
'url' => $url ,
));
echo $mailtp -> getBody ();
echo $mailtp -> getSubject ();
if ( $test == 0 )
{
include_once ( " WestdcMailer.php " );
$mail = new WestdcMailer ( $this -> view -> config -> smtp );
$mail -> setFrom ( $this -> view -> config -> service -> email , '西部数据中心服务组' );
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> addTo ( $email );
$mail -> send ();
} else {
$mail_config = array (
'ssl' => 'ssl' ,
'port' => 465 ,
'auth' => 'login' ,
'username' => 'la5c@qq.com' ,
'password' => ''
);
$transport = new Zend_Mail_Transport_Smtp ( 'smtp.qq.com' , $mail_config );
Zend_Mail :: setDefaultTransport ( $transport );
$mail = new Zend_Mail ();
$mail -> setBodyText ( $mailtp -> getBody ());
$mail -> setFrom ( 'la5c@qq.com' , 'Jack' );
$mail -> addTo ( " la5c@qq.com " );
$mail -> setSubject ( $mailtp -> getSubject ());
$mail -> send ();
}
} //发送邀请邮件
/*
获得单个文件的信息
return array row
*/
public function getFileinfo ( $id ){
$sql = " select * from attachments where id=' $id ' " ;
$re = $this -> db -> query ( $sql );
$row = $re -> fetch ();
return $row ;
}
/*
* 保存XML数据到数据库
*/
private function import ( $xml )
{
$iso = new ISO19115 ();
$iso -> saveDB ( $this -> db , $xml );
}
/*
* jsonexit () 退出并返回json数据
*
* param array $data 要返回的JSON数据, 可以是任意数组
*
* return JSON - response
*/
public function jsonexit ( $data ){
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/json' ) -> appendBody ( json_encode ( $data , JSON_NUMERIC_CHECK ));
return true ;
} //jsonexit() 退出并返回json数据
}