2009-03-06 03:20:46 +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 ();
}
function postDispatch ()
{
2009-04-16 08:31:34 +00:00
$this -> view -> messages = $this -> messenger -> getMessages ();
2009-03-06 03:20:46 +00:00
}
function indexAction ()
{
//其他连接
}
//提供和GEONETWORK中的元数据的同步功能
//提供双向同步功能, 但只处理ISO 19115格式的元数据?
function syncAction ()
{
2010-07-01 09:55:10 +00:00
set_time_limit ( 0 );
2010-06-22 03:37:08 +00:00
$sql = " select * from (select count(*) as westdccount from metadata) as t1,(select count(uuid) as gncount from geonetworkmetadata where schemaid='iso19115') as t2,(select count(uuid) as watergncount from watergn where schemaid='iso19115') as t3 " ;
2009-03-06 03:20:46 +00:00
$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' );
2010-06-22 03:37:08 +00:00
$list = $this -> _request -> getParam ( 'list' );
2009-03-20 07:07:01 +00:00
$adminuser = $this -> _request -> getParam ( 'adminuser' );
2009-03-06 03:20:46 +00:00
$uuid = $this -> _request -> getParam ( 'uuid' );
if ( $this -> _request -> isPost ()) $uuid = $this -> _request -> getPost ( 'uuid' );
//$uuid=$this->_request->getParam('uuid');
if ( $source == " geonetwork " && empty ( $uuid ) ) {
//从geonetwork向WESTDC同步
$sql = " select uuid,data from geonetworkmetadata where schemaid='iso19115' " ;
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
$this -> import ( $gmd -> data );
2010-06-22 06:42:15 +00:00
$this -> db -> query ( " update metadata set source=? where uuid=? " , array ( $gmd -> source , $gmd -> uuid ));
2009-03-06 03:20:46 +00:00
}
$this -> view -> msg = '成功同步元数据!' ;
2009-06-26 08:35:39 +00:00
} elseif ( $source == " watergn " && empty ( $uuid ) ) {
2009-06-26 08:33:13 +00:00
//同步黑河遥感实验的元数据
2010-06-22 06:42:15 +00:00
$sql = " select uuid,data,source from watergn where schemaid='iso19115' " ;
2009-06-26 08:33:13 +00:00
$rs = $this -> db -> fetchAll ( $sql );
foreach ( $rs as $gmd ) {
2010-06-22 06:42:15 +00:00
$this -> import ( $gmd -> data );
$this -> db -> query ( " update metadata set source=? where uuid=? " , array ( $gmd -> source , $gmd -> uuid ));
2009-06-26 08:33:13 +00:00
}
$this -> view -> msg = '成功同步黑河遥感综合实验元数据!' ;
2009-03-06 03:20:46 +00:00
} elseif ( ! empty ( $uuid )) {
//同步单条元数据
$sql = $this -> db -> quoteInto ( " select data from geonetworkmetadata where uuid=? " , $uuid );
if ( $rs = $this -> db -> fetchRow ( $sql )) {
$this -> import ( $rs -> data );
$this -> view -> msg = '成功同步元数据:' . $uuid ;
} else $this -> view -> msg = '不存在此元数据:' . $uuid ;
2010-06-22 03:37:08 +00:00
} elseif ( $list == 'water' ) {
$sql = " select uuid,title 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 -> view -> metadata = $this -> db -> query ( $sql );
2009-03-06 03:20:46 +00:00
} 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中多出的元数据! ' ;
2010-06-22 03:37:08 +00:00
} 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中多出的元数据! ' ;
2009-03-06 03:20:46 +00:00
} 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 );
2009-12-22 11:13:31 +00:00
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' ) {
2010-01-06 02:48:25 +00:00
$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 " ;
2009-12-22 11:13:31 +00:00
$rows = $this -> db -> fetchAll ( $sql );
2009-03-06 03:20:46 +00:00
foreach ( $rows as $row ) {
2009-12-22 11:18:24 +00:00
$data = file_get_contents ( $this -> view -> config -> watergeonetwork -> url . 'srv/cn/resources.get?access=public&id=' . $row -> gid . '&fname=' . urlencode ( $row -> filename ));
2009-03-06 03:20:46 +00:00
$sql = " update thumbnail set data=? where id=? " ;
$this -> db -> query ( $sql , array ( base64_encode ( $data ), $row -> id ));
}
$this -> view -> msg = '已成功同步缩略图!' ;
2009-03-20 07:07:01 +00:00
} elseif ( $adminuser == 'geonetwork' ) {
$sql = " select id,username,password,email from users where usertype='administrator' " ;
$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 ) {
2009-03-20 07:42:52 +00:00
$sql = " update geonetworkusers set username=' $row->username ',password=' $row->password ',email=' $row->email ' where id= $row->id " ;
$this -> db -> query ( $sql );
2009-03-20 07:07:01 +00:00
} else {
2009-03-20 07:42:52 +00:00
$sql = " insert into geonetworkusers (id,username,password,email) values( $row->id ,' $row->username ',' $row->password ',' $row->email ') " ;
$this -> db -> query ( $sql );
2009-03-20 07:07:01 +00:00
}
}
$this -> view -> msg = '已成功同步管理员帐号!' ;
}
2009-03-06 03:20:46 +00:00
}
//离线数据申请管理
function offlineappAction ()
{
$view = ( int ) $this -> _getParam ( 'view' );
$start = ( int ) $this -> _getParam ( 'start' );
$finish = ( int ) $this -> _getParam ( 'finish' );
$cancel = ( int ) $this -> _getParam ( 'cancel' );
if ( $view ) {
//查看此次申请的具体内容,包括指向的地址
} elseif ( $start ) {
2009-04-16 08:34:21 +00:00
$sql = " update dataorder set status=4 where status=3 and userid=? " ;
2009-03-06 03:20:46 +00:00
$this -> db -> query ( $sql , array ( $start ));
//提示信息
$this -> messenger -> addMessage ( '提示信息:该离线数据已经开始处理,请在处理完成后点击“完成”。' );
2009-04-16 08:38:40 +00:00
$this -> _redirect ( '/admin/data/offlineapp' );
2009-03-06 03:20:46 +00:00
} elseif ( $finish ) {
try {
2009-10-12 08:44:46 +00:00
$sql = " update dataorder set status=5,ts_approved=now() where status=4 and userid=? " ;
2009-04-16 08:38:40 +00:00
$this -> db -> query ( $sql , array ( $finish ));
$sql = " update offlineapp set ts_approved=now() where userid=? and ts_approved is null " ;
$this -> db -> query ( $sql , array ( $finish ));
2009-04-16 08:41:14 +00:00
$this -> messenger -> addMessage ( '提示信息:该离线数据已经处理完成。' );
2009-03-06 03:20:46 +00:00
} catch ( Exception $e ) {
//提示信息
$this -> messenger -> addMessage ( $e -> getMessage ());
$this -> messenger -> addMessage ( '提示信息:该数据有可能还没有开始处理,请先开始。' );
}
2009-04-16 08:38:40 +00:00
$this -> _redirect ( '/admin/data/offlineapp' );
2009-03-06 03:20:46 +00:00
} elseif ( $cancel ) {
//取消=删除?
//需谨慎操作
2009-04-16 09:04:30 +00:00
$sql = " update dataorder set status=-1 where (status=3 or status=4) and userid=? " ;
$this -> db -> query ( $sql , array ( $cancel ));
$sql = " delete from offlineapp where id=? " ;
$this -> db -> query ( $sql , array ( $cancel ));
$this -> messenger -> addMessage ( '提示信息:已取消该用户离线申请。' );
$this -> _redirect ( '/admin/data/offlineapp' );
}
2009-03-06 03:20:46 +00:00
$select = $this -> db -> select ();
$select -> from ( 'offlineapp' ) -> where ( 'ts_approved is null' ) -> where ( 'pdflink is not null' ) -> 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 offlineAction ()
{
2009-03-10 08:31:01 +00:00
$add = ( int ) $this -> _getParam ( 'add' );
$edit = ( int ) $this -> _getParam ( 'edit' );
$delete = ( int ) $this -> _getParam ( 'delete' );
2009-12-18 03:13:09 +00:00
$down = ( int ) $this -> _getParam ( 'down' );
2009-03-10 08:31:01 +00:00
if ( $add ) {
$form = new OfflinelogForm ();
$form -> pdf -> setDestination ( $this -> view -> config -> offline -> savepath );
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
$pdf = basename ( $form -> pdf -> getFileName ());
2009-04-28 11:00:40 +00:00
$sql = " insert into offlineapp (username,email,unit,phone,address,postcode,project,pdflink,datalist,ts_created,ts_approved) values(?,?,?,?,?,?,?,?,?,?,now()) " ;
2009-03-10 08:31:01 +00:00
$this -> db -> query ( $sql , array ( $formdata [ 'username' ], $formdata [ 'email' ], $formdata [ 'unit' ], $formdata [ 'phone' ], $formdata [ 'address' ], $formdata [ 'postcode' ], $formdata [ 'project' ], $pdf , $formdata [ 'datalist' ], $formdata [ 'ts_approved' ]));
$this -> messenger -> addMessage ( '提示信息:您已经成功添加该离线服务记录。' );
$this -> _redirect ( '/admin/data/offline' );
} else {
$form -> populate ( $formdata );
}
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'offlineadd' );
} elseif ( $edit ){
$form = new OfflinelogForm ();
$form -> pdf -> setRequired ( false );
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$uploadedData = $form -> getValues ();
$pdf = basename ( $form -> pdf -> getFileName ());
$sql = " update offlineapp set username=?,email=?,unit=?,phone=?,address=?,postcode=?,project=?, " ;
if ( $form -> pdf -> isUploaded ()) $sql .= " pdflink=?, " ;
$sql .= " datalist=?,ts_approved=? where id=? " ;
$param = array ( $formdata [ 'username' ], $formdata [ 'email' ], $formdata [ 'unit' ], $formdata [ 'phone' ], $formdata [ 'address' ], $formdata [ 'postcode' ], $formdata [ 'project' ]);
if ( $form -> pdf -> isUploaded ()) $param [] = $pdf ;
$param [] = $formdata [ 'datalist' ];
$param [] = $formdata [ 'ts_approved' ];
$param [] = $edit ;
$this -> db -> query ( $sql , $param );
$this -> messenger -> addMessage ( '提示信息:您已经编辑添加该记录。' );
$this -> _redirect ( '/admin/data/offline' );
} else {
$form -> populate ( $formdata );
}
} else {
$sql = " select * from offlineapp where id=? " ;
$formdata = $this -> db -> fetchRow ( $sql , array ( $edit ));
$form -> submit -> setLabel ( '保存' );
$form -> populate ( $formdata );
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'offlineadd' );
} elseif ( $delete ) {
$sql = " delete from offlineapp where id=? " ;
try {
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该服务记录。' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( " /admin/data/offline " );
2009-12-18 03:13:09 +00:00
} elseif ( $down ) {
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$sql = " select * from offlineapp where ts_approved is not null and pdflink is not null order by ts_created desc " ;
$rows = $this -> db -> fetchAll ( $sql );
foreach ( $rows as $row ){
$content .= '"' . $row [ 'username' ] . '","' . $row [ 'unit' ] . '","' . $row [ 'phone' ] . '","' . $row [ 'address' ] . '","' . $row [ 'postcoe' ] . '","' . $row [ 'project' ] . '","' . $row [ 'datalist' ] . '","' . $row [ 'email' ] . '",' . $row [ 'ts_approved' ] . " \n " ;
}
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/octet-stream' )
-> setHeader ( 'Content-Disposition' , 'attachment; filename="offlineapp.csv"' )
-> setHeader ( 'Content-Length' , strlen ( $content ))
-> setHeader ( 'Content-Type' , 'application/force-download' )
-> setHeader ( 'Content-Type' , 'application/download' )
-> setHeader ( 'Content-Description' , 'File Transfer' )
-> setHeader ( 'Content-Transfer-Encoding' , 'binary' )
-> setHeader ( 'Expires' , 0 )
-> setHeader ( 'Cache-Control' , 'must-revalidate, post-check=0, pre-check=0' )
-> setHeader ( 'Pragma' , 'public' )
-> setBody ( $content );
2009-03-10 08:31:01 +00:00
}
2009-03-06 03:20:46 +00:00
$select = $this -> db -> select ();
2009-04-28 12:16:23 +00:00
$select -> from ( 'offlineapp' ) -> where ( 'ts_approved is not null' ) -> where ( 'pdflink is not null' ) -> order ( 'ts_created desc' );
2009-03-06 03:20:46 +00:00
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
}
function datasetcdAction ()
{
$add = ( int ) $this -> _getParam ( 'add' );
$edit = ( int ) $this -> _getParam ( 'edit' );
$delete = ( int ) $this -> _getParam ( 'delete' );
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 ();
2009-12-10 14:48:21 +00:00
$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' ]));
2009-03-06 03:20:46 +00:00
$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 ();
2009-12-10 14:48:21 +00:00
$sql = " update datasetcd set title=?,size=?,uuid=?, " ;
2009-03-06 03:20:46 +00:00
if ( $form -> img -> isUploaded ()) $sql .= " img=?, " ;
if ( $form -> document -> isUploaded ()) $sql .= " document=?, " ;
$sql .= " descript=? where id=? " ;
2009-12-10 14:48:21 +00:00
$param = array ( $formdata [ 'title' ], $formdata [ 'size' ], $formdata [ 'uuid' ]);
2009-03-06 03:20:46 +00:00
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 ;
}
function mdAction ()
{
$delete = ( int ) $this -> _getParam ( 'delete' );
2009-12-18 06:26:45 +00:00
$down = ( int ) $this -> _getParam ( 'down' );
2009-03-06 03:20:46 +00:00
if ( $delete )
{
$sql = " delete from metadata where id=? " ;
try {
$this -> db -> query ( $sql , array ( $delete ));
$this -> messenger -> addMessage ( '提示信息:您已经成功删除该数据。' );
} catch ( Exception $e ) {
$this -> messenger -> addMessage ( $e -> getMessage ());
}
$this -> _redirect ( " /admin/data/md " );
2009-12-18 06:26:45 +00:00
} elseif ( $down ) {
$zip = new ZipArchive ();
$url = " /tmp/xml.zip " ;
$opened = $zip -> open ( $url , ZIPARCHIVE :: CREATE | ZIPARCHIVE :: OVERWRITE );
if ( $opened !== true ){
die ( " cannot open { $url } for writing. " );
}
$dirName = '../data/import/' ;
$zip -> addEmptyDir ( " xml/ " );
$filesToAdd = array ();
$dir = dir ( $dirName );
while ( false !== ( $node = $dir -> read ())) {
if (( $node == '..' ) || ( $node == '.' )) {
continue ;
}
if ( is_file ( $dirName . $node )) {
$zip -> addFile ( $dirName . $node , " xml/ " . $node );
}
}
$zip -> close ();
$content = file_get_contents ( $url );
$this -> _helper -> layout -> disableLayout ();
$this -> _helper -> viewRenderer -> setNoRender ();
$this -> getResponse () -> setHeader ( 'Content-Type' , 'application/octet-stream' )
-> setHeader ( 'Content-Disposition' , 'attachment; filename="' . basename ( $url ) . '"' )
-> 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 );
2009-03-06 03:20:46 +00:00
}
$select = $this -> db -> select ();
$select -> from ( 'metadata' )
-> joinLeft ( 'mdstat' , 'metadata.uuid=mdstat.uuid' , 'viewed' )
-> joinLeft ( 'geonetworkmetadata' , 'geonetworkmetadata.uuid=metadata.uuid' , 'id as gid' )
-> order ( 'metadata.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 commentAction ()
{
$delete = ( int ) $this -> _getParam ( 'delete' );
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 " );
}
$select = $this -> db -> select ();
$select -> from ( 'comments' )
-> joinLeft ( 'metadata' , 'metadata.uuid=comments.uuid' , 'title' )
-> order ( 'comments.uuid desc' )
-> order ( 'comments.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 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
2009-12-24 14:29:32 +00:00
$imgurl = $formdata [ 'imgurl' ];
2009-03-06 03:20:46 +00:00
$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 ;
2009-12-24 14:29:32 +00:00
$sql = " update datafeature set title=?,detailurl=?,imgurl=?,description=? where id=? " ;
$param = array ( $formdata [ 'title' ], $formdata [ 'detailurl' ], $formdata [ 'imgurl' ], $formdata [ 'description' ], $edit );
2009-03-06 03:20:46 +00:00
$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 ;
2010-01-05 15:12:07 +00:00
}
/*
* 数据文献管理
*/
function referenceAction ()
{
$add = ( int ) $this -> _getParam ( 'add' );
$edit = ( int ) $this -> _getParam ( 'edit' );
$delete = ( int ) $this -> _getParam ( 'delete' );
$uuid = $this -> _getParam ( 'uuid' );
if ( $add ) {
$form = new ReferenceForm ();
if ( $this -> _request -> isPost ()) {
$formdata = $this -> _request -> getPost ();
if ( $form -> isValid ( $formdata )) {
$sql = " select id from reference where reference=? " ;
2010-01-06 06:42:47 +00:00
$row = $this -> db -> fetchRow ( $sql , array ( $formdata [ 'reference' ]));
2010-01-05 15:12:07 +00:00
if ( ! $row )
{
$sql = " insert into reference (reference,link) values(?,?) " ;
$this -> db -> query ( $sql , array ( $formdata [ 'reference' ], $formdata [ 'link' ]));
$sql = " select id from reference where reference=? " ;
2010-01-06 06:42:47 +00:00
$row = $this -> db -> fetchRow ( $sql , array ( $formdata [ 'reference' ]));
2010-01-05 15:12:07 +00:00
}
$sql = " insert into mdref (uuid,refid) values(?,?) " ;
2010-01-06 06:42:47 +00:00
$this -> db -> query ( $sql , array ( $formdata [ 'uuid' ], $row [ 'id' ]));
2010-01-05 15:12:07 +00:00
$this -> messenger -> addMessage ( '提示信息:您已经成功添加该数据文献。' );
$this -> _redirect ( '/admin/data/reference' );
} else {
$form -> populate ( $formdata );
}
} else {
if ( $uuid )
{
$formdata [ 'uuid' ] = $uuid ;
$form -> populate ( $formdata );
}
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'referenceadd' );
} elseif ( $edit ){
$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 -> query ( $sql , array ( $formdata [ 'reference' ]));
2010-06-30 14:04:58 +00:00
if ( $row )
2010-01-05 15:12:07 +00:00
{
//更新文献信息
$sql = " update reference set reference=?,link=? where id=? " ;
$param = array ( $formdata [ 'reference' ], $formdata [ 'link' ], $edit );
$this -> db -> query ( $sql , $param );
} else {
//更新文献链接表
$sql = " update mdref set refid=? where uuid=? and refid=? " ;
$this -> db -> query ( $sql , array ( $row [ 'id' ], $formdata [ 'uuid' ], $edit ));
}
$this -> messenger -> addMessage ( '提示信息:您已经编辑该数据文献。' );
$this -> _redirect ( '/admin/data/reference' );
} else {
$form -> populate ( $formdata );
}
} else {
$sql = " select * from reference r left join mdref m on r.id=m.refid where r.id=? " ;
$formdata = $this -> db -> fetchRow ( $sql , array ( $edit ));
$form -> populate ( $formdata );
}
$this -> view -> form = $form ;
$this -> _helper -> viewRenderer ( 'referenceadd' );
} elseif ( $delete ) {
$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 " );
}
$select = $this -> db -> select ();
$select -> from ( 'mdref' , array ( 'id as mdid' , 'refid' ))
-> join ( 'metadata' , 'metadata.uuid=mdref.uuid' )
-> join ( 'reference' , 'reference.id=mdref.refid' )
2010-06-27 07:04:56 +00:00
-> order ( 'metadata.title' );
2010-01-05 15:12:07 +00:00
$paginator = Zend_Paginator :: factory ( $select );
$paginator -> setCurrentPageNumber ( $this -> _getParam ( 'page' ));
$paginator -> setItemCountPerPage ( $this -> view -> config -> page -> max );
$paginator -> setView ( $this -> view );
Zend_View_Helper_PaginationControl :: setDefaultViewPartial ( 'pagination.phtml' );
$this -> view -> paginator = $paginator ;
}
2009-03-06 03:20:46 +00:00
/*
* 删除元数据,删除前有确认
*/
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 ( '/metadata' );
} 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' );
}
}
/*
* 保存XML数据到数据库
*/
private function import ( $xml )
{
$iso = new ISO19115 ();
$iso -> loadXML ( $xml );
$md = new MetadataTable ();
$thumb = new ThumbnailTable ();
$xmlt = new XmlTable ();
$cgt = new CategoryTable ();
$cgct = new CategoryCodeTable ();
$keyt = new KeywordTable ();
$dst = new DatasetSeriesTable ();
$seriestable = new SeriesTable ();
$db = $seriestable -> getAdapter ();
//save metadata
//先删除已有元数据,然后再插入新数据
$sql = " delete from metadata where uuid=? " ;
$this -> db -> query ( $sql , array ( $iso -> uuid ));
$row = $md -> createRow ();
$trow = $thumb -> createRow ();
$row -> uuid = $iso -> uuid ;
$row -> title = $iso -> resTitle ;
2010-01-06 02:09:46 +00:00
$row -> title_en = $iso -> resAltTitle ;
2009-03-06 03:20:46 +00:00
$row -> description = $iso -> idAbs ;
$row -> citation = $iso -> citation ;
2010-01-26 07:31:25 +00:00
$row -> suppinfo = $iso -> suppinfo ;
2009-03-06 03:20:46 +00:00
$row -> fileformat = $iso -> fileformat ;
$row -> projection = $iso -> projection ;
2010-01-01 13:05:50 +00:00
//$row->author=$iso->author;
2009-03-06 03:20:46 +00:00
$row -> datatype = $iso -> datatype ;
$row -> filesize = $iso -> filesize ;
$row -> ts_created = $iso -> mdDateSt ;
$row -> timebegin = $iso -> timebegin ;
$row -> timeend = $iso -> timeend ;
$row -> west = $iso -> geoBox [ 'w' ];
$row -> south = $iso -> geoBox [ 's' ];
$row -> north = $iso -> geoBox [ 'n' ];
$row -> east = $iso -> geoBox [ 'e' ];
//生成空白统计数据
$sql = $db -> quoteInto ( " select * from mdstat where uuid=? " , $iso -> uuid );
if ( ! $db -> fetchRow ( $sql ))
{
$sql = " insert into mdstat (uuid) values(?) " ;
$db -> query ( $sql , array ( $iso -> uuid ));
}
try {
$id = $row -> save ();
//处理在线资源
if ( $iso -> onlineresource ) foreach ( $iso -> onlineresource as $resource )
{
$sql = " insert into onlineresource (uuid,linkage,protocol,name,description) values(?,?,?,?,?) " ;
$db -> query ( $sql , array ( $iso -> uuid , $resource [ 'linkage' ], $resource [ 'protocol' ], $resource [ 'name' ], $resource [ 'description' ]));
}
//处理缩略图
if ( ! empty ( $iso -> thumbnail )) {
$trow -> id = $id ;
$trow -> data = $iso -> thumbnail ;
$trow -> filetype = 'jpg' ;
$trow -> save ();
} elseif ( $iso -> graph ) {
$trow -> id = $id ;
//$trow->data=$iso->graph['data'];
2010-01-06 02:48:25 +00:00
$sql = " select id as gid from geonetworkmetadata where uuid=? " ;
$r = $this -> db -> fetchRow ( $sql , array ( $iso -> uuid ));
if ( $r )
{
2010-01-07 10:24:23 +00:00
$trow -> data = base64_encode ( file_get_contents ( $this -> view -> config -> geonetwork -> url . 'srv/cn/resources.get?access=public&id=' . $r -> gid . '&fname=' . urlencode ( $iso -> graph [ 'filename' ])));
2010-01-06 02:48:25 +00:00
}
2009-03-06 03:20:46 +00:00
$trow -> filetype = $iso -> graph [ 'filetype' ];
$trow -> filedesc = $iso -> graph [ 'filedesc' ];
$trow -> filename = $iso -> graph [ 'filename' ];
$trow -> save ();
}
//todo:处理关键词
//1:N relation
foreach ( $iso -> keyword as $keytype => $keys )
{
foreach ( $keys as $key )
{
$row = $keyt -> createRow ();
$row -> id = $id ;
//统一转换为大写
2010-06-27 17:49:46 +00:00
//不再统一转换
$row -> keyword = $key ;
2009-03-06 03:20:46 +00:00
$row -> keytype = $keytype ;
$row -> save ();
}
}
//todo:处理数据集序列
//M:N relation
if ( $iso -> datasetSeries ) foreach ( $iso -> datasetSeries as $ds )
{
$where = $db -> quoteInto ( 'name = ?' , $ds [ 'seriesName' ]);
$trow = $seriestable -> fetchRow ( $where );
if ( $trow )
$sid = $trow -> id ;
else {
$trow = $seriestable -> createRow ();
$trow -> name = $ds [ 'seriesName' ];
$sid = $trow -> save ();
}
$row = $dst -> createRow ();
$row -> id = $id ;
$row -> sid = $sid ;
$row -> save ();
}
//处理XML入库
$row = $xmlt -> createRow ();
$row -> id = $id ;
$row -> data = $xml ;
$row -> save ();
//处理数据分类
foreach ( $iso -> tpCat as $cat ){
if ( is_numeric ( $cat )) {
$row = $cgt -> createRow ();
$row -> id = $id ;
$row -> code = ( int ) $cat ;
$row -> save ();
} else {
//是字符串, geonetwork会采用这种模式
//从categorycode表中查找其对应的code
$where = $db -> quoteInto ( 'name= ?' , trim ( $cat ));
$trow = $cgct -> fetchRow ( $where );
if ( $trow ) {
$row = $cgt -> createRow ();
$row -> id = $id ;
$row -> code = $trow -> code ;
$row -> save ();
}
//$db=$cgt->getAdapter();
//$sql="insert into category (id,code) values($id,(select code from categorycode where name='$cat'))";
//$db->query($sql);
}
}
2010-01-01 13:05:50 +00:00
//处理联系人信息
//先查询再进行处理
//若用户信息发生变化,则存在问题
//无法保证数据的更新状态
foreach ( $iso -> author as $au )
{
$inds = explode ( " , " , $au [ 'individual' ]);
foreach ( $inds as $ind )
{
$sql = " select id from responsible where individual=? and organisation=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( $ind , $au [ 'organisation' ]));
if ( ! $row )
{
$sql = " insert into responsible (individual,organisation,position,delivery,phone,email,city,country,administrative,postal) values(?,?,?,?,?,?,?,?,?,?) " ;
$this -> db -> query ( $sql , array ( $ind , $au [ 'organisation' ], $au [ 'position' ], $au [ 'delivery' ], $au [ 'phone' ], $au [ 'email' ], $au [ 'city' ], $au [ 'country' ], $au [ 'administrative' ], $au [ 'postal' ]));
2010-07-01 04:31:30 +00:00
} else {
//deal email address
if (( $au [ 'email' ]) && empty ( $row -> email ))
{
$sql = " update responsible set email=? where id=? " ;
$this -> db -> query ( $sql , array ( $au [ 'email' ], $row -> id ));
}
2010-01-01 13:05:50 +00:00
}
$sql = " select id from responsible where individual=? and organisation=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( $ind , $au [ 'organisation' ]));
if ( $row -> id > 0 )
{
$sql = " insert into role (resid,uuid,role) values(?,?,?) " ;
$this -> db -> query ( $sql , array ( $row -> id , $iso -> uuid , $au [ 'role' ]));
}
}
}
2010-01-05 02:11:06 +00:00
//处理数据限制信息
foreach ( $iso -> limits as $uselimit )
{
$sql = " select id from uselimit where uselimit=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( $uselimit ));
if ( ! $row )
{
$sql = " insert into uselimit (uselimit) values (?) " ;
$this -> db -> query ( $sql , array ( $uselimit ));
}
$sql = " select id from uselimit where uselimit=? " ;
$row = $this -> db -> fetchRow ( $sql , array ( $uselimit ));
if ( $row )
{
$sql = " insert into mdlimit (uuid,lid) values(?,?) " ;
$this -> db -> query ( $sql , array ( $iso -> uuid , $row -> id ));
}
}
2009-03-06 03:20:46 +00:00
$iso -> save ( " ../data/import/ $iso->uuid .xml " );
} catch ( Exception $e ) {
//数据重复插入,此处忽略所有错误
2010-01-07 10:24:23 +00:00
print $iso -> uuid . ' has error: ' . $e -> getMessage () . '<br />' ;
2009-03-06 03:20:46 +00:00
}
}
}