4229 lines
133 KiB
PHP
Executable File
4229 lines
133 KiB
PHP
Executable File
<?php
|
||
use Helpers\View as view;
|
||
use Reference\Reference;
|
||
use Reference\Ris;
|
||
use Reference\RisOutput;
|
||
use Helpers\dbh;
|
||
use \Files\Files;
|
||
use Fund\Fund;
|
||
|
||
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();
|
||
$this->_helper->layout->setLayout('administry');
|
||
}
|
||
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 en.metadata) as t1,(select count(uuid) as gncount from en.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 en.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 en.geonetworkmetadata where schemaid='iso19115'";
|
||
$rs=$this->db->fetchAll($sql);
|
||
foreach($rs as $gmd) {
|
||
$this->import($gmd->data);
|
||
$this->db->query("update en.metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
|
||
}
|
||
$this->view->msg='成功同步元数据!';
|
||
} elseif ($source=="watergn" && empty($uuid) ) {
|
||
//首先删除所有的黑河试验数据
|
||
//$sql="delete from en.metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'";
|
||
$sql="delete from en.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 en.metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
|
||
}
|
||
$this->view->msg='成功同步黑河遥感综合实验元数据!';
|
||
}elseif ($source=="glacier" && empty($uuid) ) {
|
||
//首先删除所有的对应专题数据
|
||
$sql="delete from en.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 en.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 en.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 en.metadata m left join xml x on m.id=x.id where m.uuid not in (select uuid from en.geonetworkmetadata)";
|
||
$rs=$this->db->fetchAll($sql);
|
||
foreach($rs as $gmd) {
|
||
$sql="insert into en.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 en.metadata m left join xml x on m.id=x.id where m.uuid in (select uuid from en.geonetworkmetadata)";
|
||
$rs=$this->db->fetchAll($sql);
|
||
foreach($rs as $gmd) {
|
||
$sql="update en.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 en.metadata m left join xml x on m.id=x.id left join en.geonetworkmetadata g on g.uuid=m.uuid where m.uuid=?",$uuid);
|
||
if ($gmd=$this->db->fetchRow($sql)) {
|
||
if (!empty($gmd->id)) {
|
||
$sql="update en.geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
|
||
} else {
|
||
$sql="insert into en.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 en.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 en.metadata where uuid not in (select uuid from en.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 en.geonetworkmetadata
|
||
where uuid not in (select uuid from en.metadata)";
|
||
$this->view->metadata=$this->db->query($sql);
|
||
} elseif ($delete=='westdc') {
|
||
$sql="delete from en.metadata where uuid not in (select uuid from en.geonetworkmetadata where schemaid='iso19115')";
|
||
$this->db->query($sql);
|
||
$this->view->msg='已删除WESTDC中多出的元数据!';
|
||
} elseif ($delete=='geonetwork') {
|
||
//dblink view中删除多条有问题,暂时用单条删除替代
|
||
//$sql="delete from en.geonetworkmetadata where uuid not in (select uuid from en.metadata)";
|
||
$sql="select uuid from en.geonetworkmetadata where uuid not in (select uuid from en.metadata)";
|
||
$rows=$this->db->fetchAll($sql);
|
||
foreach($rows as $row)
|
||
{
|
||
$this->db->exec($this->db->quoteInto("delete from en.geonetworkmetadata where uuid=?",$row->uuid));
|
||
}
|
||
$this->view->msg='已删除GEONETWORK中多出的元数据!';
|
||
} elseif ($delete=='water') {
|
||
$sql="delete from en.metadata where uuid not in (select uuid from watergn where schemaid='iso19115') and uuid not in (select uuid from en.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 en.metadata m on t.id=m.id left join en.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 en.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 en.geonetworkmetadata where uuid=?",$uuid);
|
||
if ($rs=$this->db->fetchRow($sql)) {
|
||
$this->import($rs->data);
|
||
$this->db->exec($this->db->quoteInto("update en.metadata set source=? where uuid='$uuid'",$rs->source));
|
||
$userid = Zend_Auth::getInstance()->getIdentity()->id;
|
||
$this->db->query("insert into en.mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
|
||
from en.geonetworkmetadata gn where uuid not in (select uuid from en.mdstatus) and uuid=?",array($userid,$uuid));
|
||
$this->view->msg='成功同步元数据:'.$uuid;
|
||
//update search document
|
||
$search=new Search();
|
||
$sql="select * from en.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');
|
||
$delete=(int)$this->_getParam('delete');
|
||
set_time_limit(0);
|
||
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 en.metadata where uuid=?";
|
||
try {
|
||
$this->db->query("delete from en.mdstatus where uuid=?",array($delete));
|
||
//$this->db->query("delete from en.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 en.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 en.metadata d on m.uuid=d.uuid where m.uuid='$uuid'";
|
||
$re = $this->db->query($sql);
|
||
|
||
$rows = $re->fetchAll();
|
||
|
||
$sql = "select title from en.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 en.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 en.metadata m
|
||
left join mdstat md on m.uuid=md.uuid
|
||
left join en.geonetworkmetadata g on g.uuid=m.uuid
|
||
left join dataset ds on m.uuid=ds.uuid
|
||
LEFT JOIN mdstatus st ON md.uuid=st.uuid
|
||
left join en.geonetworkmetadata gen on gen.uuid=md.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 en.metadata md
|
||
LEFT JOIN mdstat s ON md.uuid=s.uuid
|
||
LEFT JOIN en.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
|
||
left join en.geonetworkmetadata gen on gen.uuid=md.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()
|
||
* 数据路径:即数据的物理主目录
|
||
*
|
||
*/
|
||
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;
|
||
}
|
||
|
||
else if($ac == "update")
|
||
{
|
||
$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));
|
||
if ($host=='ftp1.westgis.ac.cn')
|
||
{
|
||
file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||
} else if ($host=='ftp2.westgis.ac.cn')
|
||
{
|
||
file_get_contents("http://ftp2.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||
}
|
||
|
||
if($ds)
|
||
{
|
||
$data = array("ok"=>1);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array("error"=>"处理中出现错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
else if($ac == "add")
|
||
{
|
||
$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));
|
||
if ($host=='ftp1.westgis.ac.cn')
|
||
{
|
||
file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||
} else if ($host=='ftp2.westgis.ac.cn')
|
||
{
|
||
file_get_contents("http://ftp2.westgis.ac.cn/proftp_upload.php?uuid=".$uuid."&filelist=1");
|
||
}
|
||
|
||
if($ds)
|
||
{
|
||
$data = array("ok"=>1);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array("error"=>"处理中出现错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
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>';
|
||
} 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>';
|
||
} else {
|
||
echo '<h1>数据目录未导入!</h1>';
|
||
}
|
||
}
|
||
|
||
}//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-en",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 en.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 en.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 en.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){
|
||
$sql = "select mr.id as mdid,mr.refid,r.reference,md.title,md.uuid,mr.place FROM mdref mr
|
||
left join en.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 en.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{
|
||
$sql="select m.title as mdtitle,m.uuid,mr.id as mdid,mr.refid,mr.place,r.reference
|
||
from mdref mr right join en.metadata m on mr.uuid=m.uuid
|
||
left join reference r on mr.refid=r.id
|
||
order by m.ts_created desc,mr.place";
|
||
$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.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
}//列表
|
||
}
|
||
|
||
//文献管理
|
||
public function refAction()
|
||
{
|
||
$this->view->ac = $ac = $this->_getParam('ac');
|
||
$submit = $this->_getParam('submit');
|
||
$keyword = $this->view->q = trim($this->_getParam('q'));
|
||
$order = $this->view->search_order = trim($this->_getParam('order'));
|
||
$sort = $this->view->search_sort = trim($this->_getParam('sort'));
|
||
$field = $this->view->search_field = $this->_getParam('field');
|
||
$this->view->uuid = $uuid = $this->_getParam('uuid');
|
||
|
||
$reference = new Reference();
|
||
|
||
if(!empty($keyword))
|
||
{
|
||
$reference->keyword = $keyword;
|
||
}
|
||
|
||
if(!empty($field))
|
||
{
|
||
$reference->field = $field;
|
||
}
|
||
|
||
if(!empty($order))
|
||
{
|
||
$reference->order = $order;
|
||
}
|
||
|
||
if(!empty($sort))
|
||
{
|
||
$reference->sort = $sort;
|
||
}
|
||
|
||
$this->view->reference = $reference;
|
||
$this->view->page = $this->_getParam('page');
|
||
$this->view->pagelimit = 12;
|
||
|
||
//文献首页
|
||
if(empty($ac) && empty($uuid))
|
||
{
|
||
$this->view->referenceType = $reference->referenceType();
|
||
view::addPaginator($reference->fetchReferences(),$this, $this->view->pagelimit);
|
||
$this->view->years = $reference->countByYear();
|
||
return true;
|
||
}
|
||
else if (empty($ac) && !empty($uuid))
|
||
{
|
||
$sql="select * from metadata where uuid='$uuid'";
|
||
$this->view->md=$this->db->fetchRow($sql);
|
||
$this->view->referenceType = $reference->referenceType();
|
||
if (empty($keyword))
|
||
{
|
||
$this->_helper->viewRenderer('ref-data-add');
|
||
unset($reference->keyword);
|
||
view::addPaginator($reference->fetchReferencesByUUID($uuid),$this, $this->view->pagelimit);
|
||
} else {
|
||
$this->_helper->viewRenderer('ref-data-search');
|
||
view::addPaginator($reference->fetchReferencesWithUUID($uuid),$this, $this->view->pagelimit);
|
||
}
|
||
return true;
|
||
}
|
||
else if ($ac == "water")
|
||
{
|
||
$this->view->referenceType = $reference->referenceType();
|
||
view::addPaginator($reference->fetchThemeReferences('water'),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
else if ($ac == "westdc")
|
||
{
|
||
$this->view->referenceType = $reference->referenceType();
|
||
view::addPaginator($reference->fetchWestdcReferences(),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
else if ($ac == "todo")
|
||
{
|
||
$this->view->referenceType = $reference->referenceType();
|
||
view::addPaginator($reference->fetchTodoReferences(),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
//数据作者文献(缺少RIS)
|
||
else if ($ac=="author")
|
||
{
|
||
$this->view->referenceType = $reference->referenceType();
|
||
view::addPaginator($reference->fetchAuthorReferences(),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
|
||
unset($this->view->reference);
|
||
unset($this->view->page);
|
||
unset($this->view->pagelimit);
|
||
|
||
//添加
|
||
if($ac == "add")
|
||
{
|
||
$this->_helper->viewRenderer('ref-add');
|
||
$id = $this->_getParam('id');
|
||
$attid = $this->_getParam('attid');
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$this->view->data = $reference->getReferenceParam();
|
||
$attid = $this->view->data['attid'];
|
||
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$status = $reference->reference();
|
||
}else{
|
||
$status = $reference->reference($id);
|
||
}
|
||
|
||
if($status !== true)
|
||
{
|
||
$this->view->error = view::Error($status);
|
||
}else{
|
||
if(!empty($id))
|
||
{
|
||
$msg = "文献修改成功!";
|
||
view::Post($this,$msg,-2);
|
||
return true;
|
||
}else{
|
||
$msg = "文献添加成功!";
|
||
view::Post($this,$msg,"/admin/data/ref/ac/add");
|
||
return true;
|
||
}
|
||
}
|
||
}else{
|
||
$this->view->data = array();
|
||
if(!empty($id) && is_numeric($id))
|
||
{
|
||
$this->view->data = $reference->getOneReferenceData($id);
|
||
}
|
||
}
|
||
|
||
if(!empty($attid))
|
||
{
|
||
$files = new Files();
|
||
$attfile = $files->getOne($attid);
|
||
$this->view->data['attid'] = $attid;
|
||
$this->view->data['file'] = $attfile;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
//上传pdf
|
||
if($ac == "pdfupload")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$autoread = false;
|
||
if($this->_getParam('multi'))
|
||
{
|
||
$autoread = true;
|
||
}
|
||
$statu = $reference->uploadReferencePdf($_FILES['Filedata'],$autoread);
|
||
$this->jsonexit($statu);
|
||
return true;
|
||
}
|
||
|
||
//删除已上传的文件
|
||
if($ac == "delete")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$statu = $reference->deleteReferenceAttchment($this->_getParam('attid'));
|
||
$this->jsonexit($statu);
|
||
return true;
|
||
}
|
||
|
||
//批量上传
|
||
if($ac == "multiupload")
|
||
{
|
||
$this->_helper->viewRenderer('ref-multiupload');
|
||
return true;
|
||
}
|
||
|
||
//文件管理
|
||
if($ac == "files")
|
||
{
|
||
$this->_helper->viewRenderer('ref-files');
|
||
view::addPaginator($reference->getReferenceFiles(),$this,10);
|
||
return true;
|
||
}
|
||
|
||
//删除文献
|
||
if($ac == "deleteref")
|
||
{
|
||
$refid = $this->_getParam('id');
|
||
if($reference->deleteReference($refid))
|
||
{
|
||
view::Post($this,"删除成功!",-1);
|
||
}else{
|
||
view::Post($this,"删除失败!",-1);
|
||
}
|
||
return true;
|
||
}
|
||
//删除文献数据对应关系
|
||
if($ac == "deletemdref")
|
||
{
|
||
if($reference->delMdref($this->_getParam('mrid')))
|
||
{
|
||
view::Post($this,"删除成功!",-1);
|
||
}else{
|
||
view::Post($this,"删除失败!",-1);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//相关数据
|
||
if($ac == "data")
|
||
{
|
||
$refid = $this->view->refid = $this->_getParam('id');
|
||
if(view::isXmlHttpRequest($this)){
|
||
$this->jsonexit($reference->getDataByReference($refid));
|
||
return true;
|
||
}else{
|
||
$this->_helper->viewRenderer('ref-en.metadatas');
|
||
$this->view->referenceType = $reference->referenceType();
|
||
view::addPaginator($reference->getDataByReference($refid),$this,10);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
//添加数据文献
|
||
if($ac == "mdref" && view::isXmlHttpRequest($this))
|
||
{
|
||
$mdrefid = $this->_getParam('id');
|
||
$status = $reference->makeMdref($mdrefid);
|
||
if($status !== true)
|
||
{
|
||
$this->jsonexit(array('error'=>$status));
|
||
}else{
|
||
$this->jsonexit(array('success' => 1));
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//移除数据文献
|
||
if($ac == "delmdref")
|
||
{
|
||
$mdrefid = $this->_getParam('id');
|
||
$status = $reference->delMdref($mdrefid);
|
||
if($status === true)
|
||
{
|
||
view::Post($this,"移除成功",-1);
|
||
}else{
|
||
view::Post($this,$status,-1);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//ris
|
||
if($ac == "ris")
|
||
{
|
||
$this->_helper->viewRenderer('ref-ris');
|
||
$submit = $this->_getParam('submit');
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$ris = new \Reference\Ris();
|
||
$this->view->data = $ris->loadout();
|
||
try{
|
||
$ris->pushToDataTable($this->view->data);
|
||
}catch(Exception $e)
|
||
{
|
||
view::Dump($e->getMessage(),false);
|
||
}
|
||
}
|
||
}
|
||
|
||
//ris更新单篇
|
||
if($ac == "singleris")
|
||
{
|
||
$this->_helper->viewRenderer('ref-singleris');
|
||
$id = (int)$this->_getParam('id');
|
||
$this->view->ristext = $this->_getParam('ristext');
|
||
|
||
if($id < 1)
|
||
{
|
||
view::Post($this,"参数错误!",-1);
|
||
return true;
|
||
}
|
||
|
||
$this->view->referenceData = $reference->getOneReferenceData($id);
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$ris = new Ris();
|
||
$data = $ris->loadout();
|
||
|
||
if(count($data) < 1)
|
||
{
|
||
view::Post($this,"输入的RIS信息有误".'<a href="/admin/data/ref/ac/add/id/'.$id.'">查看详细</a>',-1);
|
||
return true;
|
||
}
|
||
|
||
if($ris->updateWithRis($id,$data[0]) === true)
|
||
{
|
||
view::Post($this,"编辑成功!".'<a href="/admin/data/ref/ac/add/id/'.$id.'">查看详细</a>',-2);
|
||
return true;
|
||
}else{
|
||
view::Post($this,"编辑失败!".'<a href="/admin/data/ref/ac/add/id/'.$id.'">查看详细</a>',-1);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}//ris单篇更新
|
||
|
||
//ris导出
|
||
if($ac == "risoutput")
|
||
{
|
||
$this->_helper->viewRenderer('ref-risoutput');
|
||
$this->view->years = $reference->countByYear();
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$mode = $this->_getParam('mode');
|
||
|
||
$risOutput = new RisOutput();
|
||
$preData = $risOutput->preRead($mode);
|
||
|
||
$risData = $risOutput->processArrayDataToRisData($preData);
|
||
|
||
$risText = $risOutput->output($risData);
|
||
|
||
echo "<pre>";
|
||
echo $risText;
|
||
echo "</pre>";
|
||
}
|
||
}//ris output
|
||
|
||
if($ac == "ristest")
|
||
{
|
||
$this->_helper->viewRenderer('ref-ris');
|
||
$submit = $this->_getParam('submit');
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$ris = new \Reference\Ris();
|
||
view::Dump($ris->processRis(NULL,$this->_getParam('ristext')),false);
|
||
}
|
||
}
|
||
|
||
|
||
}//文献管理 refAction()
|
||
|
||
/*
|
||
* 删除元数据,删除前有确认
|
||
*/
|
||
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']) and $_POST['submit']==1)
|
||
{
|
||
try{
|
||
$title = $this->_request->getParam('title');
|
||
$uuid = $this->_request->getParam('uuid');
|
||
$code = $this->_request->getParam('code');
|
||
$admin_status = $this->_request->getparam('admin_status');
|
||
$admin_email = '{'.implode(",",$this->_request->getparam('admin_email')).'}';
|
||
$exclude_data = '{'.implode(",",$this->_request->getparam('exclude_data')).'}';
|
||
$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,
|
||
'admin_status' => $admin_status,
|
||
'admin_email' => $admin_email,
|
||
'exclude_data' => $exclude_data,
|
||
'description' => $description,
|
||
'has_pages' => $has_pages,
|
||
'has_agreement' => $has_agreement
|
||
);
|
||
# print_r($data);
|
||
# exit();
|
||
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']) and $_POST['submit']==1)
|
||
{
|
||
try{
|
||
$title = $this->_request->getParam('title');
|
||
$uuid = $this->_request->getParam('uuid');
|
||
$code = $this->_request->getParam('code');
|
||
$admin_status = $this->_request->getparam('admin_status');
|
||
$admin_email = '{'.implode(",",$this->_request->getparam('admin_email')).'}';
|
||
$exclude_data = '{'.implode(",",$this->_request->getparam('exclude_data')).'}';
|
||
$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,
|
||
'admin_status' => $admin_status,
|
||
'admin_email' => $admin_email,
|
||
'exclude_data' => $exclude_data,
|
||
'description' => $description,
|
||
'has_pages' => $has_pages,
|
||
'has_agreement' => $has_agreement
|
||
);
|
||
|
||
$sql = "update source set title='$title',uuid='$uuid',code='$code',admin_status='$admin_status',admin_email='$admin_email',exclude_data='$exclude_data',description='$description',has_pages='$has_pages',has_agreement='$has_agreement' where id='$id'";
|
||
# print_r($sql);
|
||
# exit();
|
||
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 en.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 en.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') { //同步数据来源到en.metadata表
|
||
$redirect = "/admin/data/source/";
|
||
$sql = "update en.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($_FILES['Filedata'],empty($uuid)?'file/':'md/',true);
|
||
|
||
if(empty($msg['error']))
|
||
{
|
||
$msg['error']="";
|
||
$filename = $msg['db_path'];
|
||
$filesize = $msg['file_size'];
|
||
$filedesc = $this->_request->getParam('filedesc');
|
||
$filetype = 'md';
|
||
$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($_FILES['Filedata'],empty($uuid)?'file/':'md/',true);
|
||
if(empty($msg['error']))
|
||
{
|
||
$msg['error']="";
|
||
$filename = $msg['db_path'];
|
||
$filesize = $msg['file_size'];
|
||
$filedesc = $this->_request->getParam('filedesc');
|
||
$filetype = 'md';
|
||
$realname = $msg['realname'];
|
||
$language = $this->_getParam('language');
|
||
|
||
$sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname,language) values ('$filename','$filetype','$filedesc','$userid','$filesize','$realname','$language') 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 en.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();
|
||
|
||
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
|
||
$sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname,g.id as gid FROM en.mdversion v
|
||
LEFT JOIN en.metadata md ON md.uuid=v.uuid
|
||
left join users u on v.userid=u.id
|
||
left join en.geonetworkmetadata g on md.uuid=g.uuid
|
||
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 en.mdversion v
|
||
LEFT JOIN en.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 en.mdversion v
|
||
LEFT JOIN en.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 en.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 en.mdversion v
|
||
WHERE v.id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth ->execute(array($id));
|
||
$row = $sth->fetch();
|
||
|
||
$sql = "SELECT data FROM en.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 en.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 en.mdversion SET changelog=?,userid=? WHERE id=?";
|
||
$this->db->query($sql,array($changelog,$u_id,$id));
|
||
|
||
// 3. 获取数据评审状态
|
||
$sql = "SELECT s.*,v.xml,m.title FROM en.mdstatus s left join en.mdversion v on s.uuid=v.uuid
|
||
left join en.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 en.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 en.metadata m left join en.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 en.mdstatus (uuid,status,userid) select uuid,0,? from en.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-en",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-en",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 en.mdversion where uuid in (select uuid from en.mdversion where id=?) and changelog is null";
|
||
$this->db->query($sql,array($id));
|
||
//修改评审状态为发布,且由其提交的用户进行管理
|
||
$sql="insert into en.mdstatus (uuid,status,userid) select uuid,6,? from en.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-en",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-en",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-en",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-en",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-en",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
|
||
$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=?";
|
||
$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-en",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
$filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/doc/uuid/'.$row['uuid']);
|
||
$mail->createAttachment($filecontent,'application/octet-stream',Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, $row['title'].'.doc');
|
||
$filecontent=file_get_contents("http://" . $_SERVER['HTTP_HOST'].'/service/pdf/uuid/'.$row['uuid']);
|
||
$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 en.mdversion where uuid in (select uuid from en.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-en",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;
|
||
}
|
||
}//发布到评审
|
||
|
||
//与前一个版本对比
|
||
else if($ac == "diff" || $ac=="diff1")
|
||
{
|
||
$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 en.mdversion v
|
||
LEFT JOIN en.metadata md ON v.uuid=md.uuid
|
||
WHERE v.id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth -> execute(array($id));
|
||
|
||
$row = $sth->fetch();
|
||
if ($ac=='diff')
|
||
{
|
||
$sql = "SELECT v.* FROM en.mdversion v
|
||
WHERE v.uuid=? and v.ts_created<=(select ts_created from en.mdversion where id=?)
|
||
ORDER BY v.ts_created DESC
|
||
LIMIT ?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth -> execute(array($row['uuid'],$id,2));
|
||
} else {
|
||
$sql = "SELECT v.* FROM en.mdversion v
|
||
WHERE v.uuid=? and (v.id=? or (v.ts_created<(select ts_created from en.mdversion where id=?) and changelog is not null))
|
||
ORDER BY v.ts_created DESC
|
||
LIMIT ?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth -> execute(array($row['uuid'],$id,$id,2));
|
||
}
|
||
|
||
$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 en.metadata md
|
||
right JOIN mdauthor a ON md.uuid=a.uuid
|
||
";
|
||
|
||
if(!empty($keywords))
|
||
{
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("md.title"));
|
||
$sql.=' and ('.$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;
|
||
|
||
}//列表
|
||
|
||
|
||
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=='delegate' && !empty($uuid))
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$sql="update mdstatus set status=7 where status in (5,6) and uuid='$uuid' and uuid in (select uuid from metadata m where datatype=1)";
|
||
if ($this->db->query($sql))
|
||
{
|
||
echo '<h1>成功将该离线数据委托给数据中心进行审核!</h1>';
|
||
} else {
|
||
echo '<h1>发生错误!请检查。</h1>';
|
||
}
|
||
return;
|
||
}
|
||
|
||
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 en.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 en.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 en.metadata md
|
||
left JOIN mdauthor a ON md.uuid=a.uuid
|
||
";
|
||
|
||
if(!empty($keywords))
|
||
{
|
||
$search=new SimpleSearch($keywords);
|
||
$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='en.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,t.count as version_count FROM en.geonetworkmetadata gn left join users u on gn.owner=u.id
|
||
left join (select count(*),uuid from en.mdversion group by uuid) t on t.uuid=gn.uuid
|
||
WHERE gn.uuid not in (select uuid from en.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 en.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 en.normalmetadata md
|
||
left join en.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 en.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 en.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 en.mdversion SET changelog=?,userid=? WHERE id in (select v.id from en.mdversion v left join en.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 en.mdstatus (uuid,status,userid) select uuid,0,? from en.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-en",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 en.mdstatus where uuid in (select uuid from en.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()
|
||
{
|
||
$fund = new Fund($this->db);
|
||
|
||
$this->view->ac = $ac = $this->_getParam('ac');
|
||
$submit = $this->_getParam('submit');
|
||
$keyword = $this->view->q = trim($this->_getParam('q'));
|
||
$order = $this->view->search_order = trim($this->_getParam('order'));
|
||
$sort = $this->view->search_sort = trim($this->_getParam('sort'));
|
||
$field = $this->view->search_field = $this->_getParam('field');
|
||
$this->view->uuid = $uuid = $this->_getParam('uuid');
|
||
|
||
if(!empty($keyword))
|
||
{
|
||
$fund->keyword = $keyword;
|
||
}
|
||
|
||
if(!empty($field))
|
||
{
|
||
$fund->field = $field;
|
||
}
|
||
|
||
if(!empty($order))
|
||
{
|
||
$fund->order = $order;
|
||
}
|
||
|
||
if(!empty($sort))
|
||
{
|
||
$fund->sort = $sort;
|
||
}
|
||
|
||
$this->view->fund = $fund;
|
||
$this->view->page = $this->_getParam('page');
|
||
$this->view->pagelimit = 10;
|
||
$ac = $this->_getParam('ac');
|
||
$submit = $this->_getParam('submit');
|
||
$this->view->q = $keyword = $this->_getParam('q');
|
||
|
||
//所有项目
|
||
if(empty($ac) && empty($uuid))
|
||
{
|
||
view::addPaginator($fund->fetchFunds(),$this, $this->view->pagelimit);
|
||
return true;
|
||
}
|
||
//单条数据
|
||
else if (empty($ac) && !empty($uuid))
|
||
{
|
||
$sql="select * from metadata where uuid='$uuid'";
|
||
$this->view->md=$this->db->fetchRow($sql);
|
||
if (empty($keyword))
|
||
{
|
||
$this->_helper->viewRenderer('fund-data-add');
|
||
unset($fund->keyword);
|
||
view::addPaginator($fund->fetchFundsByUUID($uuid),$this, $this->view->pagelimit);
|
||
} else {
|
||
$this->_helper->viewRenderer('fund-data-search');
|
||
view::addPaginator($fund->fetchFundsWithUUID($uuid),$this, $this->view->pagelimit);
|
||
}
|
||
return true;
|
||
}
|
||
//数据相关项目
|
||
else if ($ac == "datalist")
|
||
{
|
||
$this->_helper->viewRenderer('fund-data-list');
|
||
view::addPaginator($fund->fetchDataFunds(),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
//无数据的项目
|
||
else if ($ac == "nodata")
|
||
{
|
||
view::addPaginator($fund->fetchNoDataFunds(),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
//删除项目
|
||
else if($ac == "delete")
|
||
{
|
||
if($fund->delete($this->_getParam('id')))
|
||
{
|
||
view::Post($this,"删除项目信息成功!",-1);
|
||
}else{
|
||
view::Post($this,"删除项目信息失败!",-1);
|
||
}
|
||
return true;
|
||
}
|
||
//删除项目和数据对应关系
|
||
else if($ac == "remove")
|
||
{
|
||
if($fund->remove($this->_getParam('id')))
|
||
{
|
||
view::Post($this,"移除数据-项目信息成功!",-1);
|
||
}else{
|
||
view::Post($this,"移除数据-项目信息失败!",-1);
|
||
}
|
||
return true;
|
||
}
|
||
//添加数据项目对应
|
||
else if($ac == "mdfund" && view::isXmlHttpRequest($this))
|
||
{
|
||
$mdfundid = $this->_getParam('id');
|
||
$status = $fund->makeMdfund($mdfundid);
|
||
if($status !== true)
|
||
{
|
||
$this->jsonexit(array('error'=>$status));
|
||
}else{
|
||
$this->jsonexit(array('success' => 1));
|
||
}
|
||
return true;
|
||
}
|
||
//相关数据
|
||
else if($ac == "data")
|
||
{
|
||
$fid = $this->view->fid = $this->_getParam('id');
|
||
$this->view->info=$fund->getOneFund($fid);
|
||
if(view::isXmlHttpRequest($this)){
|
||
$this->jsonexit($fund->getDataByFund($fid));
|
||
return true;
|
||
}else{
|
||
$this->_helper->viewRenderer('fund-data');
|
||
view::addPaginator($fund->getDataByFund($fid),$this,$this->view->pagelimit);
|
||
return true;
|
||
}
|
||
}
|
||
//添加或编辑项目
|
||
else if($ac == "add")
|
||
{
|
||
$this->_helper->viewRenderer('fund-add');
|
||
$id = $this->_getParam('id');
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$this->view->data = $fund->getFundParam();
|
||
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$status = $fund->fund();
|
||
}else{
|
||
$status = $fund->fund($id);
|
||
}
|
||
|
||
if($status !== true)
|
||
{
|
||
$this->view->error = view::Error($status);
|
||
}else{
|
||
if(!empty($id))
|
||
{
|
||
$msg = "项目修改成功!";
|
||
view::Post($this,$msg,-2);
|
||
return true;
|
||
}else{
|
||
$msg = "项目添加成功!";
|
||
view::Post($this,$msg,"/admin/data/ref/ac/add");
|
||
return true;
|
||
}
|
||
}
|
||
}else{
|
||
$this->view->data = array();
|
||
if(!empty($id) && is_numeric($id))
|
||
{
|
||
$this->view->data = $fund->getOneFund($id);
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}//fund
|
||
|
||
public function doiAction()
|
||
{
|
||
$ac = $this->_getParam('ac');
|
||
$submit = $this->_getParam('submit');
|
||
$uuid = $this->_getParam('uuid');
|
||
$q=$this->_getParam('q');
|
||
|
||
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(0,$q);
|
||
view::addPaginator($rows,$this,10);
|
||
}else{
|
||
$this->_redirect('/admin/data/doi/ac/edit/?uuid='.$uuid);
|
||
return true;
|
||
}
|
||
return true;
|
||
}//index
|
||
|
||
else if($ac == "add")
|
||
{
|
||
$this->_helper->viewRenderer('doi-add');
|
||
|
||
}//add
|
||
|
||
else if($ac == "edit")
|
||
{
|
||
$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);
|
||
include('data/Metadata.php');
|
||
$md = new Metadata($this->db);
|
||
$metadata = $md->view($uuid);
|
||
if(empty($this->view->data))
|
||
{
|
||
$this->view->data = array(
|
||
'uuid'=>$uuid,
|
||
'title'=>$metadata['title'],
|
||
'doi'=>$metadata['doi'],
|
||
'url'=>"http://" . $_SERVER['HTTP_HOST'].'/data/'.$uuid,
|
||
'publisher'=>'Cold and Arid Regions Science Data Center at Lanzhou',
|
||
'title_en'=>$metadata['title_en'],
|
||
'publisher_en'=>'Cold and Arid Regions Science Data Center at Lanzhou',
|
||
);
|
||
}else{
|
||
$this->view->data['doi'] = $metadata['doi'];
|
||
$this->view->data['info'] = $doi->data_process_out($this->view->data);
|
||
if(empty($this->view->data['ts_published']))
|
||
{
|
||
$this->view->data['title'] = $metadata['title'];
|
||
$this->view->data['title_en'] = $metadata['title_en'];
|
||
}
|
||
}
|
||
}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)){
|
||
$this->view->error = view::Error($info);
|
||
return true;
|
||
}else{
|
||
$data['info'] = $info;
|
||
$data['info'] = $doi->sksort($data['info'],"order",SORT_ASC);
|
||
}
|
||
$state = $doi->update_en($data,$uuid);
|
||
if($state)
|
||
{
|
||
$this->view->msg = view::Msg('alert-success',"修改成功!",'/admin/data/doi/uuid/'.$uuid);
|
||
return false;
|
||
}else{
|
||
$this->view->error = view::Error("修改失败");
|
||
return false;
|
||
}
|
||
}
|
||
}//edit
|
||
|
||
else 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($doi->delete($id) == true)
|
||
{
|
||
$this->jsonexit(array('success'=>$id));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array('error'=>'删除失败'));
|
||
return true;
|
||
}
|
||
|
||
}//del
|
||
else if ($ac=="convert") //转换为chinadoi所需元数据格式
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$sql="select d.*,m.description from datadoi d left join en.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>CARD</name>
|
||
<email_address>westdc@lzb.ac.cn</email_address>
|
||
</depositor>
|
||
<registrant>ISTIC</registrant>
|
||
</head>
|
||
<body>
|
||
<science_data>
|
||
<database>
|
||
<contributors>';
|
||
foreach($authors as $k=>$v)
|
||
{
|
||
$doi.='<person_name sequence="first" contributor_role="author">'.$v.'</person_name>';
|
||
$doi.='<organization sequence="first" contributor_role="author">'.$orgs[$k].'</organization>';
|
||
}
|
||
$doi.='</contributors>
|
||
<titles>
|
||
<title><![CDATA['.$row['title_en'].']]></title>
|
||
<subtitle></subtitle>
|
||
</titles>';
|
||
$doi.='<description><![CDATA['.$row['description'].']]></description>';
|
||
$doi.='<publisher><publisher_name>'.$row['publisher_en'].'</publisher_name></publisher>';
|
||
$doi.='<doi_data>
|
||
<doi>'.$row['doi'].'</doi>
|
||
<timestamp>'.$timestamp.'</timestamp>
|
||
<resource><![CDATA[http://card.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));
|
||
}
|
||
else if ($ac=="verified") //成功申请
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
$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验证失败,请检查!'));
|
||
return true;
|
||
}
|
||
}//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-en",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();
|
||
}
|
||
}//发送邀请邮件
|
||
|
||
//导出元数据到英文版本
|
||
public function gnenexportAction()
|
||
{
|
||
$uuid = $this->_getParam('uuid');
|
||
$sql="select id,data,owner,source from geonetworkmetadata where uuid='$uuid'";
|
||
$rs=$this->db->fetchRow($sql);
|
||
$sql="insert into en.geonetworkmetadata (uuid,source,owner,data) values('".$uuid."','".$rs['source']."',".$rs['owner'].",".$this->db->quote($rs['data']).")";
|
||
$this->db->exec($sql);
|
||
$sql="select id from en.geonetworkmetadata where uuid='$uuid'";
|
||
$rs1=$this->db->fetchRow($sql);
|
||
$shell="#!/bin/bash\n";
|
||
$shell.='cp -r /var/www/westdc.westgis.ac.cn/geonetwork/data/';
|
||
$shell.=sprintf('%05d',floor(($rs['id']+0.1)/100)*100).'-'.sprintf('%05d',ceil(($rs['id']+0.1)/100)*100-1)."/".$rs['id'];
|
||
$shell.=' /var/www/card.westgis.ac.cn/geonetwork/data/'.sprintf('%05d',floor(($rs1['id']+0.1)/100)*100).'-'.sprintf('%05d',ceil(($rs1['id']+0.1)/100)*100-1)."/".$rs1['id'];
|
||
$shell.="\nchown -R tomcat7:www-data /var/www/card.westgis.ac.cn/geonetwork/data/".sprintf('%05d',floor(($rs1['id']+0.1)/100)*100).'-'.sprintf('%05d',ceil(($rs1['id']+0.1)/100)*100-1)."/".$rs1['id'];
|
||
$shell.="\n";
|
||
$filename='/var/www/westdc.westgis.ac.cn/tools/sync-gn-thumbnail.sh';
|
||
file_put_contents($filename, $shell);
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
echo '<h1>成功导入英文版!</h1>';
|
||
}
|
||
/*
|
||
获得单个文件的信息
|
||
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数据
|
||
}
|