diff --git a/application/admin/controllers/DataController.php b/application/admin/controllers/DataController.php
index 930dd962..a8f1883c 100755
--- a/application/admin/controllers/DataController.php
+++ b/application/admin/controllers/DataController.php
@@ -2159,6 +2159,7 @@ class Admin_DataController extends Zend_Controller_Action
public function authorAction(){
$ac = $this->_getParam('ac');
+ $uuid = $this->_getParam('uuid');
if(empty($ac))
@@ -2287,7 +2288,7 @@ class Admin_DataController extends Zend_Controller_Action
}//ajax 添加作者
- if($ac == "edit")
+ if($ac == "edit" || !empty($uuid))
{
$window = $this->_getParam('window');
@@ -2300,8 +2301,6 @@ class Admin_DataController extends Zend_Controller_Action
$this->_helper->viewRenderer('author-edit');
}
- $uuid = $this->_getParam('uuid');
-
$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
@@ -2369,6 +2368,218 @@ class Admin_DataController extends Zend_Controller_Action
}//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,'(.*)'))[1] as title,gn.id,gn.uuid FROM geonetworkmetadata gn
+ WHERE gn.uuid not in (select uuid from metadata) and gn.owner=?
+ order by gn.id desc
+ ";
+ $sth = $this->db->prepare($sql);
+ $sth->execute(array($u_id));
+ $rows = $sth->fetchAll();
+
+
+ $paginator = Zend_Paginator::factory($rows);
+ $paginator->setCurrentPageNumber($this->_getParam('page'));
+ $paginator->setItemCountPerPage(15);
+ $paginator->setView($this->view);
+ Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
+ $this->view->paginator=$paginator;
+ }
+ //元数据导入
+ 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,'(.*)'))[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=="commit")
+ {
+ $this->_helper->layout->disableLayout();
+ $this->_helper->viewRenderer->setNoRender();
+
+ $data = "";
+ try{
+ $id = $this->_request->getParam('id');
+ if(empty($id) || !is_numeric($id))
+ {
+ $data = array("error"=>"参数错误");
+ $this->jsonexit($data);
+ return true;
+ }
+
+ $changelog = $this->_request->getParam('changelog');
+ if(empty($changelog))
+ {
+ $data = array("error"=>$this->alertbox('warning','请输入变更信息'));
+ $this->jsonexit($data);
+ return true;
+ }
+
+ // 1. 权限认定:当前用户必须和其owner相同
+ // 数据应当没有评审状态,没有作者信息
+ $sql="select gn.id from geonetworkmetadata gn
+ left join mdstatus s on gn.uuid=s.uuid
+ left join mdauthor a on s.uuid=a.uuid
+ where s.id is not null and a.id is not null and gn.id=?";
+ $sth=$this->db->prepare($sql);
+ $sth->execute(array($id));
+ $row=$sth->fetch();
+ if (!empty($row))
+ {
+ $data = array("error"=>'错误的入口');
+ $this->jsonexit($data);
+ return true;
+ }
+
+ // 保存数据作者信息
+ $sql="insert into mdauthor (uuid,userid,ts_activated,status) values(?,?,now(),1)";
+ $this->db->query($sql,array($row['uuid'],$u_id));
+
+ // 2. 保存变化记录 save changelog & userid for the latest version
+ $sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid=? order by ts_created desc limit 1)";
+ $this->db->query($sql,array($changelog,$u_id,$row['uuid']));
+
+ // 3. 保存数据评审状态
+ //导入元数据
+ $iso=new ISO19115();
+ @$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();
+
+ unset($mail);
+ unset($mailtp);
+ //email to author
+ $mail=new WestdcMailer($this->view->config->smtp);
+ $mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
+ $mailtp=new EmailText($this->db,"metadata-new-author",array(
+ 'user' => $user->username,
+ 'uuid' => $iso->uuid,
+ 'email'=> $user->email,
+ //元数据标题
+ 'title'=> $iso->resTitle,
+ ));
+ $mail->setBodyText($mailtp->getBody());
+ $mail->setSubject($mailtp->getSubject());
+ if($this->debug==0)
+ {
+ $mail->addTo($user->email);
+ $mail->addCc($this->view->config->service->email);
+ }else{
+ $mail->addTo($this->debug_email);
+ }
+ @$mail->send();
+
+ $data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!'));
+ $this->jsonexit($data);
+ return true;
+ }catch(Exception $e) {
+ $msg = "提交失败,请确认权限后重试";
+ if($this->debug>0)
+ {$msg .= $e->getMessage();}
+ $data = array("error"=>$this->alertbox('error',$msg));
+ $this->jsonexit($data);
+ return true;
+ }
+ }
+
+ }// newdataAction() 新建元数据
+
+
/*
获得单个文件的信息
return array row