westdc-zf1/application/admin/controllers/DataController.php

4229 lines
133 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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>ISTIC</name>
<email_address>tuy@istic.ac.cn</email_address>
</depositor>
<registrant>ISTIC</registrant>
</head>
<body>
<science_data>
<database>
<contributors>';
foreach($authors as $k=>$v)
{
$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'].']]></title>
<subtitle></subtitle>
</titles>';
$doi.='<description><![CDATA['.$row['description'].']]></description>';
$doi.='<publisher><publisher_name>'.$row['publisher'].'</publisher_name></publisher>';
$doi.='<doi_data>
<doi>'.$row['doi'].'</doi>
<timestamp>'.$timestamp.'</timestamp>
<resource><![CDATA[http://westdc.westgis.ac.cn/data/'.$row['uuid'].']]></resource>
</doi_data>';
$doi.='</database>
</science_data>
</body>
</doi_batch>';
$this->getResponse()->setHeader('Content-Type', 'text/xml')->setHeader('Content-Disposition','attachment; filename="'.$row['uuid'].'.xml"')
->setHeader('Content-Type','application/force-download')->setBody($doi);
$this->db->query('update datadoi set ts_submitted=now() where uuid=?',array($uuid));
}
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数据
}