4129 lines
120 KiB
PHP
4129 lines
120 KiB
PHP
<?php
|
||
/*
|
||
|
||
@version $Id: AuthorController.php 2012-2-29 15:01 Z
|
||
@package author
|
||
@copyright Copyright (c) 2012, CAREERI.
|
||
@license http://
|
||
@link http://
|
||
*/
|
||
class AuthorController extends Zend_Controller_Action
|
||
{
|
||
private $limit=10;
|
||
|
||
//调试模式
|
||
// 调试模式中将显示全部错误细节,电子邮件将发往调试邮箱
|
||
// 1 为开启
|
||
// 0 为关闭
|
||
public $debug = 0;
|
||
|
||
//调试模式邮箱地址
|
||
public $debug_email = "wangliangxu@lzb.ac.cn";
|
||
|
||
|
||
function preDispatch()
|
||
{
|
||
$this->view->config = Zend_Registry::get('config');
|
||
$this->db=Zend_Registry::get('db');
|
||
$this->messenger=$this->_helper->getHelper('FlashMessenger');
|
||
$this->view->messages = $this->messenger->getMessages();
|
||
$this->view->theme = new Theme();
|
||
|
||
$this->view->pageID = "author-".$this->_request->getActionName();
|
||
|
||
}
|
||
function indexAction()
|
||
{
|
||
$this->view->pageID = "author-index";
|
||
}
|
||
|
||
|
||
/*
|
||
* helpAction() 帮助文档
|
||
*
|
||
*/
|
||
function helpAction(){
|
||
$this->view->pageID = "author-help";
|
||
}//helpAction()帮助文档
|
||
|
||
/*
|
||
* inauthorAction() 数据申请管理
|
||
*
|
||
* param string $ac
|
||
* param string $keywords
|
||
* param string $pr //对离线数据申请的操作
|
||
* param string $uuid
|
||
*
|
||
* return view|ajax-responds
|
||
*/
|
||
function inauthorAction()
|
||
{
|
||
$ac = $this->_request->getParam("ac");
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
$u_email = $user->email;
|
||
}
|
||
|
||
if(empty($ac) || $ac=="online" || $ac == "searchonline")
|
||
{
|
||
$sql = "SELECT o.id,o.userid,o.unit,o.username,o.ts_created,o.project,m.title,m.uuid FROM onlineapp as o
|
||
LEFT JOIN metadata as m ON o.uuid=m.uuid
|
||
LEFT JOIN mdauthor as a ON a.uuid=o.uuid
|
||
WHERE (o.id in (SELECT distinct(onlineappid) from dataorder where status>=0)) AND a.userid = ? AND a.status=1";
|
||
if ($ac=="searchonline")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("m.title","m.description"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" ORDER BY o.id desc";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}//在线申请记录
|
||
|
||
if($ac == "offline" || $ac=="searchoffline")
|
||
{
|
||
$pr = $this->_request->getParam('pr');
|
||
$oid = $this->_request->getParam('oid');
|
||
$pdf = $this->_request->getParam('pdf');
|
||
|
||
if(!empty($pr))
|
||
{
|
||
try{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$uuid = $this->_request->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))
|
||
{
|
||
echo "参数有误!";exit();
|
||
}
|
||
|
||
//如果用户已经下载过了,就无法在更改对数据申请的意见
|
||
$sql = "select md.title,d.uuid,d.status as datastatus,d.authorpermitted from dataorder d
|
||
left join offlineapp o on o.id=d.offlineappid
|
||
left join metadata md on md.uuid=d.uuid
|
||
left join mdauthor a on a.uuid=d.uuid
|
||
where o.ts_approved is null and o.pdflink is not null
|
||
and d.uuid=? and a.userid=? and d.id=? AND a.status=1
|
||
order by o.ts_created desc";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$u_id,$oid));
|
||
$row = $sth->fetch();
|
||
|
||
if($row['datastatus']>4)
|
||
{
|
||
echo "该申请已经通过并且发放数据";
|
||
exit();
|
||
}
|
||
else if (empty($row) || $row['datastatus']!=4)
|
||
{
|
||
echo "该数据申请存在问题,请联系数据中心!";
|
||
exit();
|
||
}
|
||
|
||
//同意用户下载
|
||
if($pr=="confirm")
|
||
{
|
||
$sql = "UPDATE dataorder SET authorpermitted=1 WHERE uuid=? and id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
if($sth->execute(array($uuid,$oid)))
|
||
{
|
||
//发送相关邮件给数据中心服务人员
|
||
$sql="select m.title,a.username from dataorder o left join metadata m on o.uuid=m.uuid left join offlineapp a on o.offlineappid=a.id where o.id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($oid));
|
||
$row = $sth->fetch();
|
||
$mail = new WestdcMailer($this->view->config->smtp);
|
||
$mailtp=new EmailText($this->db,'offline-author-yes',array('user'=>$row['username'],'data'=>$row['title'],'email'=>$u_email));
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
$mail->addTo($this->view->config->service->email,'西部数据中心服务组');
|
||
$mail->send();
|
||
|
||
$btn = $this->createOfflineCtBtn($uuid,'c',$oid);
|
||
echo ''.$btn.'<script>alert("您已经同意用户的离线数据申请");</script>';
|
||
exit();
|
||
}else{
|
||
echo "<script>alert('处理过程中遇到错误,请刷新页面');</script>";
|
||
exit();
|
||
}
|
||
}
|
||
|
||
//反对用户下载
|
||
if($pr == "objection")
|
||
{
|
||
$sql = "UPDATE dataorder SET authorpermitted=-1 WHERE uuid=? AND id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
if($sth->execute(array($uuid,$oid)))
|
||
{
|
||
$btn = $this->createOfflineCtBtn($uuid,'o',$oid);
|
||
echo ''.$btn.'<script>alert("您已经拒绝该用户的此次离线数据申请");</script>';
|
||
exit();
|
||
}else{
|
||
echo "<script>alert('处理过程中遇到错误,请刷新页面');</script>";
|
||
exit();
|
||
}
|
||
}
|
||
}catch(Exception $e)
|
||
{
|
||
echo "处理中遇到错误,请刷新页面后重试";
|
||
exit();
|
||
}
|
||
}
|
||
else if (!empty($pdf))
|
||
{
|
||
$sql="select o.pdflink from dataorder d left join offlineapp o on d.offlineappid=o.id
|
||
left join mdauthor m on d.uuid=m.uuid
|
||
where d.id=? and m.userid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($pdf,$u_id));
|
||
$row = $sth->fetch();
|
||
$content=file_get_contents($this->view->config->offline->savepath."/".$row['pdflink']);
|
||
header("Content-Disposition: inline; filename=".$row['pdflink']);
|
||
header("Content-Type:application/pdf");
|
||
echo $content;
|
||
die(); // do not change current html output
|
||
}
|
||
else
|
||
{
|
||
$this->_helper->viewRenderer('inauthor-offline');
|
||
|
||
$select="select distinct(o.*),md.title,d.id as doid,d.uuid,d.status as datastatus,d.authorpermitted from offlineapp o
|
||
left join dataorder d on o.id=d.offlineappid
|
||
left join metadata md on md.uuid=d.uuid
|
||
left join mdauthor a on a.uuid=d.uuid
|
||
where o.ts_approved is null and o.pdflink is not null and d.status=4 and a.userid=? AND a.status=1 ";
|
||
if($ac == "searchoffline")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("md.title","md.description"));
|
||
$select.=' and '.$where;
|
||
}
|
||
$select.=" order by o.ts_created desc";
|
||
|
||
$sth = $this->db->prepare($select);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
foreach ($rows as $k=>$v)
|
||
{
|
||
if($v['authorpermitted']==0)
|
||
{$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['doid']);}
|
||
if($v['authorpermitted']>0)
|
||
{$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['doid']);}
|
||
if($v['authorpermitted']<0)
|
||
{$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['doid']);}
|
||
}
|
||
|
||
$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;
|
||
}
|
||
}//离线申请
|
||
|
||
|
||
//按数据显示
|
||
if($ac == 'datalist' || $ac == "searchdata")
|
||
{
|
||
$uuid = $this->_request->getParam('uuid');
|
||
if(!empty($uuid))
|
||
{
|
||
$this->_helper->viewRenderer('view-dataoreder');
|
||
|
||
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))
|
||
{
|
||
$sql = "select md.title,d.id as doid,d.uuid,d.authorpermitted,d.status
|
||
,offa.id as offa_id,offa.username as offa_name,offa.unit as offa_unit,offa.email as offa_email,offa.project as offa_project,date(offa.ts_created) as offa_tscreated
|
||
,ona.id as ona_id,ona.username as ona_name,ona.unit as ona_unit,ona.email as ona_email,ona.project as ona_project, date(ona.ts_created) as ona_tscreated
|
||
from dataorder d
|
||
left join metadata md on md.uuid=d.uuid
|
||
left join mdauthor a on a.uuid=d.uuid
|
||
LEFT JOIN offlineapp offa on offa.id=d.offlineappid
|
||
LEFT JOIN onlineapp ona on ona.id=d.onlineappid
|
||
WHERE (offa.id IS NOT NULL OR ona.id IS NOT NULL) AND a.status=1 and d.status>=0
|
||
AND d.uuid=? AND a.userid=?
|
||
ORDER BY d.ts_created DESC";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$u_id));
|
||
$rows = $sth->fetchAll();
|
||
@$this->view->mdtitle=$rows[0]['title'];
|
||
|
||
foreach ($rows as $k=>$v)
|
||
{
|
||
if($v['authorpermitted']==0)
|
||
{$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'',$v['doid']);}
|
||
if($v['authorpermitted']>0)
|
||
{$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'c',$v['doid']);}
|
||
if($v['authorpermitted']<0)
|
||
{$rows[$k]['btns']=$this->createOfflineCtBtn($v['uuid'],'o',$v['doid']);}
|
||
}
|
||
|
||
$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;
|
||
}else{
|
||
$this->view->error = "参数有误";
|
||
}
|
||
}else{
|
||
$this->_helper->viewRenderer('inauthor-datalist');
|
||
$sql = "select md.title,d.uuid,count(md.id) as c from dataorder d
|
||
left join metadata md on md.uuid=d.uuid
|
||
left join mdauthor a on a.uuid=d.uuid
|
||
where a.status=1 AND a.userid=? ";
|
||
if($ac == "searchdata")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("md.title","md.description"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" GROUP BY md.title,d.uuid";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}
|
||
|
||
}//按数据显示
|
||
|
||
} // inauthorAction() 数据申请管理
|
||
|
||
|
||
/*
|
||
* createOfflineCtBtn() 创建离线申请记录的操作按钮
|
||
*
|
||
*/
|
||
function createOfflineCtBtn($uuid, $type="",$oid){
|
||
$urlHref = 'href="javascript:;"';
|
||
$baseStyle = "btn box-shadow";
|
||
$selectedStyle = "disabled";
|
||
|
||
$confrimText = "同意";
|
||
$confrimFunc = 'onclick="confirm(\''.$uuid.'\',\''.$oid.'\')"';
|
||
|
||
$objectionText = "反对";
|
||
$objectionFunc = 'onclick="objection(\''.$uuid.'\',\''.$oid.'\')"';
|
||
|
||
$btns='';
|
||
if(empty($type))
|
||
{
|
||
$confrimBtn = "<a $urlHref class=\"$baseStyle\" $confrimFunc>$confrimText</a>";
|
||
$objectionBtn = "<a $urlHref class=\"$baseStyle\" $objectionFunc>$objectionText</a>";
|
||
$btns = $confrimBtn.$objectionBtn;
|
||
}
|
||
if($type=='c')
|
||
{
|
||
$confrimBtn = "<a class=\"$baseStyle $selectedStyle\">$confrimText</a>";
|
||
$objectionBtn = "<a $urlHref class=\"$baseStyle\" $objectionFunc>$objectionText</a>";
|
||
$btns = $confrimBtn.$objectionBtn;
|
||
}
|
||
if($type=='o')
|
||
{
|
||
$confrimBtn = "<a $urlHref class=\"$baseStyle\" $confrimFunc>$confrimText</a>";
|
||
$objectionBtn = "<a class=\"$baseStyle $selectedStyle\">$objectionText</a>";
|
||
$btns = $confrimBtn.$objectionBtn;
|
||
}
|
||
|
||
return $btns;
|
||
|
||
} //createOfflineCtBtn()
|
||
|
||
|
||
|
||
/*
|
||
* acceptAction() 我的数据
|
||
*
|
||
* param string $ac // list|search
|
||
* param string $keyword
|
||
*
|
||
* return view
|
||
*/
|
||
function acceptAction()
|
||
{
|
||
$ac = $this->_request->getParam("ac");
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
$u_email = $user->email;
|
||
}
|
||
|
||
//列表
|
||
if(empty($ac) || $ac=='list' || $ac=='search'){
|
||
|
||
$sql = "SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus FROM normalmetadata m
|
||
LEFT JOIN mdauthor a ON m.uuid=a.uuid
|
||
LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid
|
||
LEFT JOIN mdstatus mds ON m.uuid=mds.uuid
|
||
WHERE a.userid=? AND a.status>=0 ";
|
||
if ($ac=='search')
|
||
{
|
||
$key = trim($this->_request->getParam('q'));
|
||
$this->view->q = $key;
|
||
$search=new SimpleSearch($key);
|
||
$where=$search->sql_expr(array("m.title","m.description"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" ORDER BY a.status DESC,a.id DESC";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(5);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
}//list
|
||
|
||
//激活数据作者
|
||
if($ac == "active")
|
||
{
|
||
$this->_helper->viewRenderer('accept-active');
|
||
$vdcode = $this->_request->getParam('v');
|
||
$this->view->v = $vdcode;
|
||
|
||
try{
|
||
$sql = "SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.id as userid,u.realname,u.email FROM mdauthor a
|
||
LEFT JOIN metadata md ON a.uuid=md.uuid
|
||
LEFT JOIN users u ON a.userid=u.id
|
||
WHERE a.activation=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($vdcode));
|
||
$row = $sth->fetch();
|
||
|
||
if(empty($row['id']))
|
||
{
|
||
$this->view->info='此激活码无效';
|
||
}else{
|
||
if(empty($row['ts_activated']))
|
||
{
|
||
$sql = "UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$ex = $sth->execute(array('now()',1,$vdcode));
|
||
|
||
if($ex)
|
||
{
|
||
include_once("EmailText.php");
|
||
$this->author_first($row['uuid'],$row['userid']);
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"author-new",array(
|
||
'user' => $row['realname'],
|
||
'uuid' => $row['uuid'],
|
||
'title'=> $row['title'],
|
||
'email'=> $row['email'],
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
//获得元数据作者email
|
||
/* 不需要给这些人发通知邮件
|
||
$info = $this->getEmail($uuid,1);
|
||
|
||
$address = $info['addrs'];
|
||
foreach($address as $v)
|
||
{
|
||
$mail->addTo($v);
|
||
}*/
|
||
$mail->addTo($row['email']);
|
||
$mail->addCc($this->view->config->service->email); //管理员
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
$this->view->info = '激活成功<br /><a href="/author/accept">点击这里</a>进入我的数据页面查看';
|
||
}else
|
||
{
|
||
$this->view->info = "激活中遇到问题,请重试";
|
||
}
|
||
}else
|
||
{
|
||
$this->view->info='此激活码已经失效';
|
||
}
|
||
|
||
}
|
||
|
||
}catch(Exception $e){
|
||
if($this->debug==0)
|
||
{
|
||
$this->view->info = "处理中遇到错误,请重新尝试";
|
||
}else{
|
||
$this->view->info = $e->getMessage();
|
||
}
|
||
}
|
||
|
||
}//激活数据作者
|
||
|
||
//拒绝激活
|
||
if($ac == "lock")
|
||
{
|
||
$this->_helper->viewRenderer('accept-active');
|
||
$vdcode = $this->_request->getParam('v');
|
||
$this->view->v = $vdcode;
|
||
|
||
try{
|
||
$sql = "SELECT a.id,a.activation,a.ts_created,a.ts_activated,md.title,a.uuid,u.realname,u.email FROM mdauthor a
|
||
LEFT JOIN metadata md ON a.uuid=md.uuid
|
||
LEFT JOIN users u ON a.userid=u.id
|
||
WHERE a.activation=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($vdcode));
|
||
$row = $sth->fetch();
|
||
|
||
if(empty($row['id']))
|
||
{
|
||
$this->view->info='此激活码无效';
|
||
}else{
|
||
if(empty($row['ts_activated']))
|
||
{
|
||
$sql = "UPDATE mdauthor SET ts_activated=?,status=? WHERE activation=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$ex = $sth->execute(array('now()',-1,$vdcode));
|
||
|
||
if($ex)
|
||
{
|
||
include_once("EmailText.php");
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"author-deny",array(
|
||
'user' => $row['realname'],
|
||
'uuid' => $row['uuid'],
|
||
'title'=> $row['title'],
|
||
'email'=> $row['email'],
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($row['email']);
|
||
$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
$this->view->info = '该申请已被拒绝,<a href="/author/accept">点击这里</a>进入我的数据页面查看';
|
||
}else
|
||
{
|
||
$this->view->info = "激活中遇到问题,请重试";
|
||
}
|
||
}else
|
||
{
|
||
$this->view->info='此激活码已经失效';
|
||
}
|
||
|
||
}
|
||
|
||
}catch(Exception $e){
|
||
if($this->debug==0)
|
||
{
|
||
$this->view->info = "处理中遇到错误,请重新尝试";
|
||
}else{
|
||
$this->view->info = $e->getMessage();
|
||
}
|
||
}
|
||
|
||
}//否认激活
|
||
|
||
}//acceptAction() 我的数据
|
||
|
||
|
||
/*
|
||
*
|
||
* getEmail() 获取数据所有者电子邮箱地址
|
||
*
|
||
* param string $uuid //UUID
|
||
* param int $level //输出信息等级
|
||
* 0 => 输出所有Email地址
|
||
* 1 => 输出数据权限等级最高的Email地址 (def)
|
||
*
|
||
* return array()
|
||
*/
|
||
function getEmail($uuid,$level=1)
|
||
{
|
||
//需要定义角色,防止程序流程出错
|
||
$addrs = array();
|
||
$addrs['resourceProvider'] = array();
|
||
$addrs['owner'] = array();
|
||
$addrs['pointOfContact'] = array();
|
||
$addrs['author'] = array();
|
||
$addrs["publisher"] = array();
|
||
|
||
$sql = 'select r.uuid,p.email,md.title,r.role from normalmetadata md
|
||
LEFT JOIN role r ON md.uuid=r.uuid
|
||
left join responsible p on r.resid=p.id
|
||
WHERE r.uuid=? AND p.email IS NOT NULL AND p.email!=?
|
||
GROUP BY r.uuid,p.email,md.title,r.role';
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,''));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$addrs['title'] = $rows[0]['title'];
|
||
|
||
foreach($rows as $k=>$v)
|
||
{
|
||
//数据资源提供者resourceProvider
|
||
if($v['role']=='resourceProvider')
|
||
{
|
||
$addrs['resourceProvider'][]=$v['email'];
|
||
}
|
||
|
||
//数据资源所有者owner
|
||
if($v['role']=='owner')
|
||
{
|
||
$addrs['owner'][]=$v['email'];
|
||
}
|
||
|
||
//数据联系人pointOfContact
|
||
if($v['role']=='pointOfContact')
|
||
{
|
||
$addrs['pointOfContact'][]=$v['email'];
|
||
}
|
||
|
||
//元数据作者author
|
||
if($v['role']== 'author' )
|
||
{
|
||
$addrs['author'][] = $v['email'];
|
||
}
|
||
|
||
if($v["role"] =="")
|
||
{
|
||
$addrs["publisher"][] = $v['email'];
|
||
}
|
||
}
|
||
|
||
//输出所有email (多维数组)
|
||
/*
|
||
$addrs['resourceProvider']
|
||
$addrs['owner']
|
||
$addrs['pointOfContact']
|
||
$addrs['author']
|
||
*/
|
||
if($level == 0)
|
||
{
|
||
return $addrs;
|
||
}
|
||
|
||
|
||
//输出最高优先级的Email
|
||
//$addrs['addrs']
|
||
if($level == 1)
|
||
{
|
||
//如果有 数据资源提供者 resourceProvider 就输出他的地址 以此类推
|
||
if(count($addrs['resourceProvider'])>0)
|
||
{
|
||
$addrs['addrs'][] = $addrs['resourceProvider'];
|
||
return $addrs;
|
||
}
|
||
|
||
if(count($addrs['owner'])>0)
|
||
{
|
||
$addrs['addrs'][] = $addrs['owner'];
|
||
return $addrs;
|
||
}
|
||
|
||
if(count($addrs['pointOfContact'])>0)
|
||
{
|
||
$addrs['addrs'][] = $addrs['pointOfContact'];
|
||
return $addrs;
|
||
}
|
||
|
||
if(count($addrs['author'])>0)
|
||
{
|
||
$addrs['addrs'][] = $addrs['author'];
|
||
return $addrs;
|
||
}
|
||
|
||
if(count($addrs["publisher"])>0)
|
||
{
|
||
$addrs['addrs'][] = $addrs["publisher"];
|
||
return $addrs;
|
||
}
|
||
}
|
||
|
||
}//getEmail 获取数据作者email地址
|
||
|
||
|
||
|
||
/*
|
||
* applyAction() 申请成为元数据作者
|
||
*
|
||
* param string $ac //动作 search|apply
|
||
* param string $q //搜索关键词
|
||
* param string $uuid //数据的UUID
|
||
*
|
||
* return view|ajax|json
|
||
*
|
||
* 调试搜索结果:
|
||
* /author/apply?ac=apply&uuid=816ecd28-ba88-464b-a83a-341440f536ef
|
||
*/
|
||
function applyAction()
|
||
{
|
||
$ac = $this->_request->getParam('ac');
|
||
|
||
//搜索动作
|
||
if($ac == "search")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
//要输出的Json对象
|
||
//过程中如果没有处理,则不包含任何返回信息,由前台定义提示信息,如:
|
||
/*
|
||
$.ajax({
|
||
'type':"POST",
|
||
'url':'/author/apply',
|
||
'data':'ac=search&q='+$('#keyword').val(),
|
||
'success':function(data){
|
||
if (typeof(data)=='object') //如果服务器端的响应为Json对象
|
||
{
|
||
if(typeof(data.error)!='undefined') //服务器端响应的错误消息
|
||
{
|
||
alert(data.error);
|
||
}else{ //服务器端无错误消息则为成功的响应
|
||
alert(data.length);
|
||
}
|
||
}else{ //服务器端响应了非JSON对象或者为空
|
||
alert('无搜索结果');
|
||
}
|
||
},
|
||
'beforeSend':function(){
|
||
//请求发送前
|
||
}
|
||
});
|
||
|
||
错误消息的键名必须为error,不包含JS脚本,如:
|
||
$data['error'] = '服务器忙!';
|
||
*/
|
||
$data = "";
|
||
|
||
//防止通过其它方式访问,先判断是否是登录用户,如果不是,抛出消息后强制用户退出
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
}else{
|
||
$data = array("error"=>"请先登录");
|
||
$this ->getResponse()
|
||
->setHeader('Content-Type', 'application/json')
|
||
->appendBody(Zend_Json::encode($data));
|
||
return true;
|
||
}
|
||
|
||
|
||
//数据处理代码 EOH<<<<<<<<<<<<<<<<
|
||
try{
|
||
|
||
$keyword = trim($this->_request->getParam('q'));
|
||
if (strlen(trim($keyword))<3)
|
||
$data = array('error'=>'搜索关键字过短');
|
||
else if (!preg_match_all("/^[\x{4e00}-\x{9fa5}A-Za-z0-9\s_]+$/u",$keyword,$matchs))
|
||
{
|
||
$data = array('error'=>'搜索关键字中只能包含汉字、英文、数字');
|
||
}
|
||
else
|
||
{
|
||
//搜索标题和描述两个字段
|
||
$sql = "SELECT m.uuid,m.title,m.description,a.status,a.userid FROM normalmetadata m
|
||
LEFT JOIN mdauthor a ON m.uuid=a.uuid
|
||
WHERE ";
|
||
$search=new SimpleSearch($keyword);
|
||
$where=$search->sql_expr(array("m.title","m.description"));
|
||
$sql.=$where;
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$rows = $sth->fetchAll();
|
||
|
||
if(is_array($rows) && count($rows)>0)
|
||
$data = $rows;
|
||
else
|
||
$data = "";
|
||
}
|
||
|
||
}catch(Exception $e){
|
||
//如果上面的程序已经发送出提示,就不发送抛出的错误
|
||
if(empty($data['error']))
|
||
{
|
||
if($this->debug==0)
|
||
{
|
||
$data = array("error"=>"处理过程中遇到错误,请重新尝试");
|
||
}else{
|
||
$data = array("error"=>$e->getMessage());
|
||
}
|
||
}
|
||
}
|
||
// >>>>>>>>>>> F
|
||
|
||
//截获响应对象,并修改头部和内容
|
||
//不管有没有数据存在,都将返回Json数据,前台有判断机制来分析数据
|
||
|
||
$this ->getResponse()
|
||
->setHeader('Content-Type', 'application/json')
|
||
->appendBody(Zend_Json::encode($data));
|
||
}// search
|
||
|
||
|
||
/****************
|
||
申请动作
|
||
****************/
|
||
if($ac == "apply")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
$u_email = $user->email;
|
||
}
|
||
|
||
//处理部分<<<<<<<<<<
|
||
try{
|
||
|
||
$uuid = $this->_request->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))
|
||
{
|
||
|
||
//判断该用户是否已经申请过或者是否已经是该元数据作者
|
||
$sql="SELECT id,status FROM mdauthor WHERE uuid=? AND userid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$u_id));
|
||
$row = $sth->fetch();
|
||
|
||
//如果已经是元数据作者,从流程中直接退出程序
|
||
if(!empty($row['id']) && $row['status']==1)
|
||
{
|
||
$data = array("error"=>"您目前已经是该数据作者,不需要再申请");
|
||
}
|
||
|
||
//如果已经遭到明确拒绝,则不允许用户再次申请
|
||
if(!empty($row['id']) && $row['status']==-1)
|
||
{
|
||
$data = array("error"=>"您的申请已经遭到拒绝,不能再申请,有疑问请联系数据中心");
|
||
}
|
||
|
||
|
||
//如果已经存在申请,但是没有激活的,返回激活信息
|
||
if($row['status']==0){
|
||
if(!empty($row['id']) && empty($m))
|
||
{
|
||
$data = array(
|
||
"error"=>'您已经申请过了,如果长时间没有收到回应请联系数据中心',
|
||
"post"=>"activa",
|
||
"uid"=>$u_id,
|
||
"uemail"=>$u_email,
|
||
"uuid"=>$uuid,
|
||
);
|
||
}//if
|
||
|
||
else{
|
||
|
||
$info = $this->getEmail($uuid,1);
|
||
|
||
$address = $info['addrs'];
|
||
|
||
$mdtitle = $info['title'];
|
||
|
||
//如果当前用户的email包含在元数据作者email列表中,则直接使其成为元数据作者
|
||
if(in_array($u_email,$address))
|
||
{
|
||
$sql = "INSERT INTO mdauthor (uuid,userid,activation,ts_activated,status) VALUES (?,?,?,?,?)";
|
||
$sth = $this->db->prepare($sql);
|
||
$ex = $sth->execute(array($uuid,$u_id,'','now()',1));
|
||
if($ex)
|
||
{
|
||
$data = array("error"=>"您的身份符合申请条件,已经自动成为该元数据作者");
|
||
$this->author_first($uuid,$u_id);
|
||
include_once("EmailText.php");
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"author-new",array(
|
||
'user' => $user->realname,
|
||
'uuid' => $uuid,
|
||
'title'=> $mdtitle,
|
||
'email'=> $u_email,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
|
||
if($this->debug==0)
|
||
{
|
||
foreach ($address as $dist)
|
||
{$mail->addTo($dist);} //元数据作者
|
||
$mail->addTo($u_email);
|
||
$mail->addCc($this->view->config->service->email); //管理员
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
}
|
||
else
|
||
{
|
||
$data = array("error"=>"处理中出现错误,请重新尝试");
|
||
}
|
||
}
|
||
|
||
//如果不包含在当前元数据作者的email列表中
|
||
//给数据拥有者发送邮件,使其决定是否同意新加入作者
|
||
else
|
||
{
|
||
//生成激活码
|
||
$ssid = session_id();
|
||
$vdcode = md5($uuid.$ssid.$u_id.time());
|
||
|
||
//激活链接
|
||
// /author/accept/?ac=active&vdcode=$vdcode
|
||
$sql = "INSERT INTO mdauthor (uuid,userid,activation) VALUES (?,?,?)";
|
||
$sth = $this->db->prepare($sql);
|
||
$ex = $sth->execute(array($uuid,$u_id,$vdcode));
|
||
|
||
if($ex)
|
||
{
|
||
//给申请者发送邮件
|
||
include_once("EmailText.php");
|
||
@$mail=new WestdcMailer($this->view->config->smtp);
|
||
@$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
@$mailtp=new EmailText($this->db,"author-apply",array(
|
||
'user' => $user->username,
|
||
'uuid' => $uuid,
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $mdtitle,
|
||
));
|
||
@$mail->setBodyText($mailtp->getBody());
|
||
@$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
@$mail->addTo($user->email);
|
||
}else{
|
||
@$mail->addTo($this->debug_email);
|
||
}
|
||
|
||
@$mail->send();
|
||
|
||
unset($mail);
|
||
unset($mailtp);
|
||
//给元数据作者以及管理员发送邮件
|
||
@$mail=new WestdcMailer($this->view->config->smtp);
|
||
@$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
@$mailtp=new EmailText($this->db,"author-apply-confirm",array(
|
||
'user' => $user->username,
|
||
'uuid' => $uuid,
|
||
'email'=> $u_email,
|
||
'title'=> $mdtitle,
|
||
'link'=>"http://".$_SERVER['SERVER_NAME']."/data/$uuid",
|
||
|
||
//验证码
|
||
'vdcode' => $vdcode,
|
||
|
||
//激活链接
|
||
'active'=>"http://".$_SERVER['SERVER_NAME']."/author/accept/?ac=active&v=$vdcode",
|
||
|
||
//不同意激活的链接
|
||
'lock'=>"http://".$_SERVER['SERVER_NAME']."/author/accept/?ac=lock&v=$vdcode",
|
||
));
|
||
@$mail->setBodyText($mailtp->getBody());
|
||
@$mail->setSubject($mailtp->getSubject());
|
||
|
||
if($this->debug==0)
|
||
{
|
||
$sql = "SELECT u.email FROM mdauthor a
|
||
LEFT JOIN users u ON u.id=a.userid
|
||
WHERE a.uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid));
|
||
$mlist = $sth->fetchAll();
|
||
|
||
if(count($mlist)>0)
|
||
{
|
||
foreach($mlist as $v)
|
||
{
|
||
$mail->addTo($v['email']);
|
||
}
|
||
}//mdauthor中已经注册的用户
|
||
|
||
else{
|
||
foreach ($address as $dist)
|
||
{
|
||
$mail->addTo($dist);
|
||
}
|
||
}//元数据作者
|
||
$mail->addCc($this->view->config->service->email); //管理员
|
||
}else{
|
||
@$mail->addTo($this->debug_email);
|
||
}
|
||
|
||
@$mail->send();
|
||
|
||
$data = array("error"=>"您的申请已收到,请耐心等待回应");
|
||
|
||
}else{
|
||
$data = array("error"=>"服务器可能在忙,请重试。");
|
||
}//激活码记录
|
||
}//不是确认的元数据作者
|
||
}//empty($row['id'])
|
||
}// status == 0
|
||
|
||
//调试输出结果
|
||
//$data = array('addr'=>$address,'uemail'=>$u_email);
|
||
}
|
||
else
|
||
{
|
||
$data = array('error'=>'参数出错,请按照正确的访问方式申请');
|
||
}
|
||
}catch(Exception $e){
|
||
if(empty($data['error']))
|
||
{
|
||
if($this->debug==0)
|
||
{
|
||
$data = array("error"=>"处理过程中遇到错误,请重新尝试");
|
||
}else{
|
||
$data = array("error"=>$e->getMessage());
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
// >>>>>>>>>>>>
|
||
|
||
$this ->getResponse()
|
||
->setHeader('Content-Type', 'application/json')
|
||
->appendBody(Zend_Json::encode($data));
|
||
|
||
}// ac = apply 申请处理
|
||
|
||
}//applyAction() 申请成为元数据作者
|
||
|
||
|
||
|
||
/*
|
||
* commentAction() 数据反馈
|
||
*
|
||
* param string $ac 动作
|
||
* param string $uuid 元数据UUID
|
||
* param int $page 页数
|
||
*
|
||
* return view
|
||
*/
|
||
function commentAction()
|
||
{
|
||
$ac = $this->_request->getParam('ac');
|
||
$uuid = $this->_getParam('uuid');
|
||
$reply = $this->_getParam('reply');
|
||
$replylist = $this->_getParam('replylist');
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
}
|
||
|
||
if(empty($ac)|| $ac=='list')
|
||
{
|
||
$sql = "SELECT md.title,md.uuid,count(c.id) as c FROM comments c
|
||
LEFT JOIN metadata md ON md.uuid=c.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1 AND c.reply=0
|
||
GROUP BY md.title,md.uuid
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
}
|
||
|
||
if($ac=="view")
|
||
{
|
||
|
||
$uuid = $this->_request->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))
|
||
{
|
||
$sql = "SELECT c.id,c.author,c.email,c.url,c.ts_created,c.content,m.title,c.uuid FROM comments c
|
||
LEFT JOIN mdauthor a ON a.uuid=c.uuid
|
||
left join metadata m on m.uuid=c.uuid
|
||
WHERE c.uuid=? AND a.userid=? AND a.status=1 AND c.reply=0
|
||
ORDER BY ts_created DESC";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$u_id));
|
||
$rows = $sth->fetchAll();
|
||
@$this->view->mdtitle=$rows[0]['title'];
|
||
|
||
$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('comment-list');
|
||
}
|
||
|
||
if($ac == "listall")
|
||
{
|
||
$sql = "SELECT md.title,c.author,c.email,c.url,c.ts_created,c.content FROM comments c
|
||
LEFT JOIN mdauthor a ON a.uuid=c.uuid
|
||
LEFT JOIN normalmetadata md ON md.uuid=c.uuid
|
||
WHERE a.userid=? AND a.status=1 AND c.reply=0
|
||
ORDER BY ts_created DESC";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$this->_helper->viewRenderer('comment-listall');
|
||
}
|
||
|
||
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;
|
||
}
|
||
|
||
$sql = "SELECT md.title,c.id,c.author,c.email,c.url,c.ts_created,c.content FROM comments c
|
||
LEFT JOIN mdauthor a ON a.uuid=c.uuid
|
||
LEFT JOIN normalmetadata md ON md.uuid=c.uuid
|
||
WHERE a.userid=? AND a.status=1 AND c.reply=0 AND c.id=?
|
||
ORDER BY ts_created DESC";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id,$reply));
|
||
$row = $sth->fetch();
|
||
if(empty($row['id']))
|
||
{
|
||
$data = array('error'=>"回复失败,您没有权限进行此操作");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$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)
|
||
{
|
||
$data = array('status'=>1,'msg'=>'回复成功!');
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array('error'=>"回复失败,请重试");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
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;
|
||
}
|
||
}// commentAction() 数据反馈
|
||
|
||
|
||
/*
|
||
* newsAction() 数据新闻
|
||
*
|
||
* param string $ac
|
||
*
|
||
*
|
||
*/
|
||
function newsAction(){
|
||
|
||
$ac = $this->_request->getParam('ac');
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
}
|
||
|
||
$News = new Archive($this->db);
|
||
$category = new ArchiveCategory($this->db);
|
||
|
||
//新闻列表
|
||
if(empty($ac) || $ac=="list")
|
||
{
|
||
$keyword = $this->_request->getParam('q');
|
||
$uuid = $this->_request->getParam('uuid');
|
||
|
||
$wheresql = array();
|
||
$join = "";
|
||
|
||
if(!empty($keyword))
|
||
{
|
||
$this->view->q = $keyword;
|
||
$search = new SimpleSearch($keyword);
|
||
$wheresql[] = $search->sql_expr(array("arc.title","arc.description"));
|
||
}
|
||
|
||
if(!empty($uuid) && 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))
|
||
{
|
||
$wheresql[] = " ct.uuid='$uuid' ";
|
||
}
|
||
|
||
$wheresql[] = " c.code='".$category->DataNewsCode."' ";
|
||
$wheresql[] = " ct.uuid IS NOT NULL ";
|
||
$wheresql[] = " arc.userid=$u_id";
|
||
|
||
if(count($wheresql)>0)
|
||
{
|
||
$wheresql = " WHERE ".join(" AND ",$wheresql);
|
||
}
|
||
|
||
$sql = "SELECT arc.id,arc.title,arc.description,arc.ts_published
|
||
,c.id as cid,u.realname
|
||
,count(arc.id) as datacount
|
||
FROM ".$News->tbl_archives." arc
|
||
LEFT JOIN ".$News->tbl_catalog." ct ON arc.id=ct.aid
|
||
LEFT JOIN ".$News->tbl_categorys." c ON ct.cid=c.id
|
||
LEFT JOIN users u ON arc.userid=u.id
|
||
$wheresql
|
||
GROUP BY arc.id,c.id,u.realname
|
||
ORDER BY arc.ts_published DESC";
|
||
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$rows = $sth->fetchAll();
|
||
|
||
foreach($rows as $k=>$v)
|
||
{
|
||
$arcinfo = $News->getArchiveUrlByCid($v['id'],$v['cid']);
|
||
$rows[$k]['url'] = $arcinfo['archive_url'];
|
||
}
|
||
|
||
$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;
|
||
|
||
}
|
||
|
||
//新闻发布
|
||
if($ac == "add")
|
||
{
|
||
$this->_helper->viewRenderer('news-add');
|
||
|
||
$sql = "SELECT md.title,md.uuid FROM metadata md
|
||
LEFT JOIN mdauthor a ON a.uuid = md.uuid
|
||
WHERE a.userid=? AND a.status=1
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$this->view->md = $rows;
|
||
}// $ac == add
|
||
|
||
//新闻编辑
|
||
if($ac == "edit")
|
||
{
|
||
$this->_helper->viewRenderer('news-edit');
|
||
|
||
$aid = (int)$this->_request->getParam('aid');
|
||
|
||
if(empty($aid) || !is_numeric($aid))
|
||
{
|
||
$this->_redirect('/error/error');
|
||
}
|
||
|
||
$sql = "SELECT arc.* FROM ".$News->tbl_archives." arc
|
||
WHERE id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($aid));
|
||
$row = $sth->fetch();
|
||
|
||
$keywords = $News->GetTags($aid);
|
||
$row['keywords'] = join(",",$keywords);
|
||
|
||
$this->view->info = $row;
|
||
|
||
$sql = "SELECT md.title,md.uuid FROM metadata md
|
||
LEFT JOIN mdauthor a ON a.uuid = md.uuid
|
||
WHERE a.userid=? AND a.status=1
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$this->view->md = $rows;
|
||
|
||
$sql = "SELECT md.uuid,md.title FROM ar_catalog ct
|
||
LEFT JOIN metadata md ON ct.uuid=md.uuid
|
||
WHERE ct.aid=$aid";
|
||
$sth = $this->db->query($sql);
|
||
$rows = $sth->fetchAll();
|
||
|
||
$this->view->thismd = $rows;
|
||
|
||
}//$ac == "edit"
|
||
|
||
//新闻发布的ajax动作
|
||
if($ac =="addnews")
|
||
{
|
||
try{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = array();
|
||
|
||
$aid = $this->_request->getParam('aid');
|
||
$data['title'] = trim($this->_request->getParam('title'));
|
||
$data['keyword'] = trim($this->_request->getParam('keyword'));
|
||
$data['body'] = trim($this->_request->getParam('body'));
|
||
$uuid = $this->_request->getParam('uuid');
|
||
|
||
//对参数进行预处理
|
||
foreach($data as $k=>$v)
|
||
{
|
||
$data[$k]=preg_replace("#<a([^>]*)>(.*)</a>#i","",$v);
|
||
$data[$k]=preg_replace("#<script([^>]*)>(.*)</script>#i","",$v);
|
||
$data[$k]=preg_replace("#<iframe([^>]*)>(.*)</iframe>#i","",$v);
|
||
$data[$k]=str_replace("\"","“",$v);
|
||
$data[$k]=str_replace("\'","‘",$v);
|
||
}
|
||
|
||
$msg = array();
|
||
|
||
// 合法性判断
|
||
if(mb_strlen($data['title'],"utf-8")<3)
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '标题太短,请重新填写';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
if(mb_strlen($data['title'],"utf-8")>60)
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '标题太长,请重新填写';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
if(empty($uuid))
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '请选择对应数据';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
if(mb_strlen($data['keyword'],"utf-8")<4)
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '关键词太短,请重新填写';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
if(mb_strlen($data['keyword'],"utf-8")>40)
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '关键词太长,请重新填写';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
if(mb_strlen($data['body'],"utf-8")<40)
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '新闻内容太短,请重新填写';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
if(is_array($uuid))
|
||
{
|
||
if(count($uuid)<1)
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '参数错误,请重试';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
foreach($uuid as $v)
|
||
{
|
||
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}$/",$v))
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '参数错误,请重试';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
else 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))
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = '参数错误,请重试';
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
//获得描述
|
||
//删除段落及html标记
|
||
$data['description'] = mb_substr(preg_replace(array("/<(.*)>|<(.*) \/>/i","/\s/i"),array(""," "),$data['body']),0,450,"UTF-8");
|
||
|
||
//默认填充数据
|
||
$data['source'] = "西部数据中心";
|
||
$data['userid'] = $u_id;
|
||
$keyword = str_replace(",",",",$data['keyword']);
|
||
$data['ts_published'] = date("Y-m-d H:i:s",time());
|
||
$data['is_pub'] = true;
|
||
$data['image'] = "";
|
||
|
||
unset($data['keyword']);
|
||
|
||
$dataNewsCategory = $category->GetOne('datanews');
|
||
$dataNewsCategoryID = $dataNewsCategory['id'];
|
||
|
||
//新闻添加
|
||
if(empty($aid))
|
||
{
|
||
$newAid = $News->addArchive($data,$dataNewsCategoryID,$keyword,$uuid);
|
||
//添加成功
|
||
if($newAid>0)
|
||
{
|
||
$msg['status'] = 1;
|
||
$msg['outstring'] = "新闻添加成功";
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
//添加失败
|
||
}else{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = "新闻添加失败,请重试";
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
}//新闻添加 end -->
|
||
|
||
//新闻修改
|
||
else
|
||
{
|
||
if($u_id != $News->getArchiveField($aid,"userid"))
|
||
{
|
||
$msg['status'] = 0;
|
||
$msg['outstring'] = "新闻编辑失败,您没有权限";
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
|
||
$updated = $News->updateArchive($aid,$data,$dataNewsCategoryID,$keyword,$uuid);
|
||
if($updated)
|
||
{
|
||
$msg['status'] = 1;
|
||
$msg['outstring'] = "新闻编辑成功";
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}else{
|
||
$msg['status'] = 0;
|
||
$msg['outstring'] = "新闻编辑失败,请重试";
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
}//新闻修改 end -->
|
||
|
||
}catch(Exception $e){
|
||
if($this->debug==0)
|
||
{
|
||
$msg['status'] = 0;
|
||
if(empty($aid))
|
||
{$msg['error'] = "新闻添加失败,请重试";}
|
||
else
|
||
{$msg['error'] = "新闻编辑失败,请重试";}
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}else{
|
||
$msg['status'] = 0;
|
||
$msg['error'] = "新闻添加/编辑失败,请重试:".$e->getMessage();
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($msg));
|
||
return true;
|
||
}
|
||
}//catch end
|
||
}//$ac = 'newsadd' endif;
|
||
|
||
if($ac == "del")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$aid = $this->_getParam('aid');
|
||
if(!is_numeric($aid))
|
||
{
|
||
$this->jsonexit(array("error"=>"参数错误"));
|
||
return true;
|
||
}
|
||
|
||
$News = new Archive($this->db);
|
||
|
||
if($u_id != $News->getArchiveField($aid,"userid"))
|
||
{
|
||
$this->jsonexit(array("error"=>"您没有权限"));
|
||
return true;
|
||
}
|
||
|
||
if($News->DeleteArchives($aid))
|
||
{
|
||
$this->jsonexit(array("deleted"=>$aid));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array("error"=>"删除失败",'aid'=>$aid));
|
||
return true;
|
||
}
|
||
}
|
||
}//newsAction() 数据新闻
|
||
|
||
function viewauthorsAction(){
|
||
|
||
$this->_helper->viewRenderer('view-authors');
|
||
|
||
$uuid = $this->_request->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))
|
||
{
|
||
$sql = "SELECT u.realname,u.unit,u.email,m.title,m.description FROM normalmetadata m
|
||
LEFT JOIN mdauthor a ON m.uuid=a.uuid
|
||
LEFT JOIN users u ON u.id=a.userid
|
||
WHERE status>=0 AND m.uuid=? AND a.status=1
|
||
ORDER BY status DESC,a.id DESC";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid));
|
||
$rows = $sth->fetchAll(PDO::FETCH_BOTH);
|
||
|
||
include_once("helper/view.php");
|
||
view::addPaginator($rows,$this->view,$this->_request);
|
||
$this->view->datas = $rows;
|
||
}else{
|
||
$this->view->error = "参数有误";
|
||
}
|
||
}
|
||
|
||
/*
|
||
* versionAction() 版本控制
|
||
*
|
||
*
|
||
*/
|
||
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 FROM mdversion v
|
||
LEFT JOIN metadata md ON md.uuid=v.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
left join users u on v.userid=u.id
|
||
WHERE md.title IS NOT NULL AND a.userid=? and v.uuid=? AND a.status=1
|
||
order by v.ts_created desc
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id,$uuid));
|
||
$rows = $sth->fetchAll();
|
||
@$this->view->mdtitle=$rows[0]['title'];
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}
|
||
|
||
//查看所有版本列表
|
||
else if((empty($ac) && empty($uuid))|| $ac=='list')
|
||
{
|
||
$sql = "SELECT md.title,md.uuid,v.ts_created,v.changelog,v.userid,v.id,u.username,u.realname FROM mdversion v
|
||
LEFT JOIN metadata md ON md.uuid=v.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
left join users u on v.userid=u.id
|
||
WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1
|
||
order by v.ts_created desc
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}
|
||
|
||
//按数据浏览
|
||
else if($ac=="bydata")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
$sql = "SELECT md.title,md.uuid,count(v.id) as c FROM mdversion v
|
||
LEFT JOIN metadata md ON md.uuid=v.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1";
|
||
if(!empty($keywords))
|
||
{
|
||
$search=new SimpleSearch($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(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$this->_helper->viewRenderer('version-bydata');
|
||
}
|
||
|
||
|
||
//删除某个版本
|
||
else if($ac=="delete")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
|
||
try{
|
||
$id = $this->_request->getParam('id');
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$data = array("error"=>"参数错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$sql = "DELETE FROM mdversion v
|
||
USING mdauthor a
|
||
WHERE v.uuid=a.uuid and v.id=? AND a.userid=? AND a.status=1";
|
||
$sth = $this->db->prepare($sql);
|
||
$ex = $sth -> execute(array($id,$u_id));
|
||
|
||
if($ex)
|
||
{
|
||
$data = array("deleted"=>$id,"error"=>$this->alertbox('ok','删除成功'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array("error"=>$this->alertbox('error','删除失败,请确认权限后重试'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}catch(Exception $e) {
|
||
$msg = "删除失败,请确认权限后重试";
|
||
if($this->debug>0)
|
||
{$msg .= $e->getMessage();}
|
||
$data = array("error"=>$this->alertbox('error',$msg));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
//恢复到geonetwork
|
||
else if($ac == "restore")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
try{
|
||
$id = $this->_request->getParam('id');
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$data = array("error"=>"参数错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$this->wdb=Zend_Db::factory($this->view->config->geonetwork);
|
||
$sql = "SELECT v.xml,v.uuid FROM mdversion v
|
||
LEFT JOIN mdauthor a ON a.uuid=v.uuid
|
||
WHERE v.id=? AND a.userid=? AND a.status=1";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth ->execute(array($id,$u_id));
|
||
$row = $sth->fetch();
|
||
|
||
$sql = "SELECT data FROM metadata WHERE uuid=?";
|
||
$sth = $this->wdb->prepare($sql);
|
||
$sth ->execute(array($row['uuid']));
|
||
$row_geo = $sth->fetch();
|
||
|
||
if($row['xml']==$row_geo['data'])
|
||
{
|
||
$data = array("error"=>$this->alertbox('warning','无须恢复,元数据相同'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$sql = "UPDATE metadata SET data=? WHERE uuid=?";
|
||
$sth = $this->wdb->prepare($sql);
|
||
$ex = $sth ->execute(array($row['xml'],$row['uuid']));
|
||
|
||
if($ex)
|
||
{
|
||
$data = array("error"=>$this->alertbox('ok','恢复成功'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array("error"=>$this->alertbox('error','恢复失败,请确认权限后重试'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}catch(Exception $e) {
|
||
$msg = "恢复失败,请确认权限后重试";
|
||
if($this->debug>0)
|
||
{$msg .= $e->getMessage();}
|
||
$data = array("error"=>$this->alertbox('error',$msg));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
//发布到评审
|
||
else if($ac == "commit")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
try{
|
||
$id = $this->_request->getParam('id');
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$data = array("error"=>"参数错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$changelog = $this->_request->getParam('changelog');
|
||
if(empty($changelog))
|
||
{
|
||
$data = array("error"=>$this->alertbox('warning','请输入变更信息'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
// 1. 权限认定
|
||
$sql="select a.* from mdauthor a left join mdversion v on a.uuid=v.uuid
|
||
where a.status=1 and a.userid=? and v.id=?";
|
||
$sth=$this->db->prepare($sql);
|
||
$sth->execute(array($u_id,$id));
|
||
$row=$sth->fetch();
|
||
if (empty($row))
|
||
{
|
||
$data = array("error"=>'无权限修改数据');
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
// 2. 保存变化记录 save changelog & userid
|
||
$sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id=?";
|
||
$this->db->query($sql,array($changelog,$u_id,$id));
|
||
|
||
// 3. 获取数据评审状态
|
||
$sql = "SELECT s.*,v.xml,m.title FROM mdstatus s left join mdversion v on s.uuid=v.uuid
|
||
left join metadata m on s.uuid=m.uuid WHERE v.id=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($id));
|
||
$row = $sth->fetch();
|
||
|
||
//update search document
|
||
$search=new Search();
|
||
//create search view in xunsearch
|
||
//$sql="select m.uuid,m.title,m.description,x.data,array_to_string(ARRAY( SELECT keyword.keyword FROM keyword WHERE keyword.id = m.id), ', '::text) AS keyword from normalmetadata m left join xml x on m.id=x.id where m.uuid=?";
|
||
$sql="select * from xunsearch where uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($row['uuid']));
|
||
$data = $sth->fetch();
|
||
$search->update($data);
|
||
|
||
if (empty($row)) //无对应记录
|
||
{
|
||
$sql="select m.id from metadata m left join mdversion v on m.uuid=v.uuid where v.id=?";
|
||
$sth=$this->db->prepare($sql);
|
||
$sth->execute(array($id));
|
||
$mrow=$sth->fetch();
|
||
if (empty($mrow)) //说明是新数据
|
||
{
|
||
//导入元数据
|
||
$iso=new ISO19115();
|
||
@$iso->loadXML($row['xml']);
|
||
if ($iso->validate())
|
||
{
|
||
$data=array("error"=>"元数据导入过程中发现错误。<br />".implode("<br />",$iso->error));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
@$iso->saveDB($this->db);
|
||
//进入评审库
|
||
$sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from mdversion where id=?";
|
||
$this->db->query($sql,array($u_id,$id));
|
||
|
||
//email to admin
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"metadata-new-admin",array(
|
||
'user' => $user->username,
|
||
'uuid' => $iso->uuid,
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $iso->resTitle,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
|
||
unset($mail);
|
||
unset($mailtp);
|
||
//email to author
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"metadata-new-author",array(
|
||
'user' => $user->username,
|
||
'uuid' => $iso->uuid,
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $iso->resTitle,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($user->email);
|
||
$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
@$mail->send();
|
||
|
||
$data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
} else { //说明是已发布的数据且数据不存在评审信息
|
||
//同步元数据
|
||
$iso=new ISO19115();
|
||
@$iso->loadXML($row['xml']);
|
||
if ($iso->validate())
|
||
{
|
||
$data=array("error"=>"元数据导入过程中发现错误。<br />".implode("<br />",$iso->error));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
@$iso->saveDB($this->db);
|
||
|
||
//移除中间版本
|
||
$sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null";
|
||
$this->db->query($sql,array($id));
|
||
//修改评审状态为发布,且由其提交的用户进行管理
|
||
$sql="insert into mdstatus (uuid,status,userid) select uuid,6,? from mdversion where id=?";
|
||
$this->db->query($sql,array($u_id,$id));
|
||
|
||
//email to admin & author
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"metadata-release",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
'changelog'=>$changelog,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($this->view->config->service->email);
|
||
//$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
@$mail->send();
|
||
|
||
$data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功发布!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
else if ($row['status']==-1 || $row['status']==0 || $row['status']==1) //取消发布的数据,初始状态,已接收
|
||
{
|
||
//同步元数据
|
||
$iso=new ISO19115();
|
||
@$iso->loadXML($row['xml']);
|
||
if ($iso->validate())
|
||
{
|
||
$data=array("error"=>"元数据导入过程中发现错误。<br />".implode("<br />",$iso->error));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
@$iso->saveDB($this->db);
|
||
|
||
//email to admin
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"version-commit-admin",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
'changelog'=>$changelog,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
|
||
unset($mail);
|
||
unset($mailtp);
|
||
//email to author
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"version-commit-author",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($user->email);
|
||
$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
@$mail->send();
|
||
|
||
$data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功提交并同步,请等待数据中心进一步处理!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
else if ($row['status']==2 || $row['status']==3 || $row['status']==4)//已发送过外审邮件,需由编辑告知变化信息
|
||
{
|
||
//同步元数据
|
||
$iso=new ISO19115();
|
||
@$iso->loadXML($row['xml']);
|
||
//email to admin
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"version-commit-admin",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
'changelog'=>$changelog,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
|
||
unset($mail);
|
||
unset($mailtp);
|
||
//email to author
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"version-commit-author",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($user->email);
|
||
$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
@$mail->send();
|
||
|
||
//email to experts
|
||
$sql="select u.username,u.email 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",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'].'/data/doc/review/1/uuid/'.$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/'.$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->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
else if ($row['status']>=5)//数据已经发布,再次修改后将只通知管理员,保留发布状态
|
||
{
|
||
//同步元数据
|
||
$iso=new ISO19115();
|
||
@$iso->loadXML($row['xml']);
|
||
if ($iso->validate())
|
||
{
|
||
$data=array("error"=>"元数据导入过程中发现错误。<br />".implode("<br />",$iso->error));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
@$iso->saveDB($this->db);
|
||
|
||
//移除中间版本
|
||
$sql="delete from mdversion where uuid in (select uuid from mdversion where id=?) and changelog is null";
|
||
$this->db->query($sql,array($id));
|
||
|
||
//email to admin & author
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"metadata-release",array(
|
||
'user' => $user->username,
|
||
'uuid' => $row['uuid'],
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $row['title'],
|
||
'changelog'=>$changelog,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($this->view->config->service->email);
|
||
//$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
@$mail->send();
|
||
|
||
$data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功发布!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
}catch(Exception $e) {
|
||
$msg = "提交失败,请确认权限后重试";
|
||
if($this->debug>0)
|
||
{$msg .= $e->getMessage();}
|
||
$data = array("error"=>$this->alertbox('error',$msg));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}//发布到评审
|
||
|
||
//与前一个版本对比
|
||
else if($ac == "diff")
|
||
{
|
||
$this->_helper->viewRenderer('version-diff');
|
||
$id = $this->_request->getParam('id');
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$this->view->error = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT v.uuid,md.title FROM mdversion v
|
||
LEFT JOIN mdauthor a ON a.uuid=v.uuid
|
||
LEFT JOIN metadata md ON v.uuid=md.uuid
|
||
WHERE v.id=? AND a.userid=? AND a.status=1";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth -> execute(array($id,$u_id));
|
||
|
||
$row = $sth->fetch();
|
||
|
||
$sql = "SELECT v.* FROM mdversion v
|
||
WHERE v.uuid=? AND v.id<=?
|
||
ORDER BY v.ts_created DESC
|
||
LIMIT ?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth -> execute(array($row['uuid'],$id,2));
|
||
|
||
$rows = $sth->fetchAll();
|
||
|
||
if(count($rows)<2)
|
||
{
|
||
$this->view->error = "对比失败:之前没有版本可以对比";
|
||
return true;
|
||
}
|
||
|
||
$this->view->info = $row;
|
||
$this->view->data = $rows;
|
||
|
||
}
|
||
|
||
|
||
}// versionAction() 数据版本管理
|
||
|
||
//新建元数据
|
||
function newdataAction()
|
||
{
|
||
$ac = $this->_request->getParam('ac');
|
||
$id = $this->_request->getParam('id');
|
||
$this->wdb=Zend_Db::factory($this->view->config->geonetwork);
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
}
|
||
|
||
//在geonetwork中查看单条数据
|
||
if (!empty($id) && empty($ac))
|
||
{
|
||
$this->view->url='metadata.show?id='.$id;
|
||
$this->_helper->viewRenderer('newdata-view');
|
||
}
|
||
//查看属于自己的所有的未提交数据列表
|
||
else if((empty($ac) && empty($uuid))|| $ac=='list')
|
||
{
|
||
$sql = "SELECT (regexp_matches(gn.data,'<resTitle>(.*)</resTitle>'))[1] as title,gn.id,gn.uuid FROM geonetworkmetadata gn
|
||
WHERE gn.uuid not in (select uuid from metadata) and gn.owner=?
|
||
order by gn.id desc
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}
|
||
//元数据导入
|
||
else if($ac=="import")
|
||
{
|
||
$this->_helper->viewRenderer('newdata-import');
|
||
}
|
||
//从模板新建元数据
|
||
else if($ac=="add-by-template")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
$sql="select id,(regexp_matches(data,'<resTitle>(.*)</resTitle>'))[1] as title,(owner-$u_id) as isowner from metadata where istemplate='y' and schemaid='iso19115'";
|
||
if(!empty($keywords))
|
||
{
|
||
$this->view->q = $keywords;
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("data"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" order by changedate desc";
|
||
$sth = $this->wdb->prepare($sql);
|
||
$sth->execute();
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
$this->_helper->viewRenderer('newdata-add');
|
||
}
|
||
|
||
else if($ac=="add-by-data")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
$sql = "SELECT md.title,md.uuid,md.description,gn.id as gid FROM normalmetadata md
|
||
left join geonetworkmetadata gn on md.uuid=gn.uuid
|
||
WHERE gn.id is not null";
|
||
if(!empty($keywords))
|
||
{
|
||
$this->view->q = $keywords;
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("md.title","md.description"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" order by md.ts_created desc";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
$this->_helper->viewRenderer('newdata-add-bydata');
|
||
}
|
||
//提交数据
|
||
else if($ac=="commit")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
try{
|
||
$id = $this->_request->getParam('id');
|
||
if(empty($id) || !is_numeric($id))
|
||
{
|
||
$data = array("error"=>"参数错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$changelog = $this->_request->getParam('changelog');
|
||
if(empty($changelog))
|
||
{
|
||
$data = array("error"=>$this->alertbox('warning','请输入变更信息'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
// 1. 权限认定:当前用户必须和其owner相同
|
||
// 数据应当没有评审状态,没有作者信息
|
||
$sql="select gn.id from geonetworkmetadata gn
|
||
left join mdstatus s on gn.uuid=s.uuid
|
||
left join mdauthor a on s.uuid=a.uuid
|
||
where s.id is not null and a.id is not null and gn.id=?";
|
||
$sth=$this->db->prepare($sql);
|
||
$sth->execute(array($id));
|
||
$row=$sth->fetch();
|
||
if (!empty($row))
|
||
{
|
||
$data = array("error"=>'错误的入口');
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$sql="select uuid,data from metadata where id=? and owner=?";
|
||
$sth=$this->wdb->prepare($sql);
|
||
$sth->execute(array($id,$u_id));
|
||
$row=$sth->fetch();
|
||
if (empty($row))
|
||
{
|
||
$data = array("error"=>'无权限修改数据');
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
//首先检查元数据错误
|
||
$iso=new ISO19115();
|
||
@$iso->loadXML($row['data']);
|
||
if ($iso->validate())
|
||
{
|
||
$data=array("error"=>"元数据导入过程中发现错误。<br />".implode("<br />",$iso->error));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
// 保存数据作者信息
|
||
$sql="insert into mdauthor (uuid,userid,ts_activated,status) values(?,?,now(),1)";
|
||
$this->db->query($sql,array($row['uuid'],$u_id));
|
||
|
||
// 2. 保存变化记录 save changelog & userid for the latest version
|
||
$sql = "UPDATE mdversion SET changelog=?,userid=? WHERE id in (select id from mdversion where uuid=? order by ts_created desc limit 1)";
|
||
$this->db->query($sql,array($changelog,$u_id,$row['uuid']));
|
||
file_get_contents("http://ftp1.westgis.ac.cn/proftp_upload.php?uuid=".$row['uuid']."&filelist=1");
|
||
// 3. 保存数据评审状态
|
||
//导入元数据
|
||
@$iso->saveDB($this->db);
|
||
//进入评审库
|
||
$sql="insert into mdstatus (uuid,status,userid) select uuid,0,? from geonetworkmetadata where id=?";
|
||
$this->db->query($sql,array($u_id,$id));
|
||
|
||
//email to admin
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"metadata-new-admin",array(
|
||
'user' => $user->username,
|
||
'uuid' => $iso->uuid,
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $iso->resTitle,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
$mail->send();
|
||
|
||
unset($mail);
|
||
unset($mailtp);
|
||
//email to author
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mailtp=new EmailText($this->db,"metadata-new-author",array(
|
||
'user' => $user->username,
|
||
'uuid' => $iso->uuid,
|
||
'email'=> $user->email,
|
||
//元数据标题
|
||
'title'=> $iso->resTitle,
|
||
));
|
||
$mail->setBodyText($mailtp->getBody());
|
||
$mail->setSubject($mailtp->getSubject());
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($user->email);
|
||
$mail->addCc($this->view->config->service->email);
|
||
}else{
|
||
$mail->addTo($this->debug_email);
|
||
}
|
||
@$mail->send();
|
||
|
||
$data = array("commited"=>1,"error"=>$this->alertbox('ok','该版本已经成功提交,请等待数据中心进一步处理!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}catch(Exception $e) {
|
||
$msg = "提交失败,请确认权限后重试";
|
||
if($this->debug>0)
|
||
{$msg .= $e->getMessage();}
|
||
$data = array("error"=>$this->alertbox('error',$msg));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
//FTP
|
||
else if($ac == "ftp")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
$this->view->uuid = $uuid;
|
||
|
||
if(empty($uuid) || !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'=>"参数错误"
|
||
);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
//安全检查: uuid必须是当前用户且为新建数据
|
||
$sql="select * from geonetworkmetadata where uuid=? and uuid not in (select uuid from metadata) and owner=?";
|
||
$sth=$this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$u_id));
|
||
$row=$sth->fetch();
|
||
if (empty($row))
|
||
{
|
||
$data = array(
|
||
'error'=>"参数错误"
|
||
);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
//ftp 用户名
|
||
$uname = 'westdc'.$u_id.'upload';
|
||
|
||
//ftp路径
|
||
$homedir = "/disk1/WestDC/upload/".$uuid."/";
|
||
|
||
$sql = "SELECT * FROM proftpusers WHERE userid='$uname' ORDER BY pkid DESC";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$row = $sth->fetch();
|
||
|
||
//create directory for upload
|
||
//server is not localhost, so we need a trick
|
||
//$old=umask(0);
|
||
//@mkdir($homedir,0777);
|
||
//umask($old);
|
||
$page=file_get_contents('http://ftp1.westgis.ac.cn/proftp_upload.php?uuid='.$uuid);
|
||
if (!empty($page)) die($page);//there are errors in visit ftp page
|
||
|
||
|
||
if(!empty($row['pkid']))
|
||
{
|
||
if(preg_match("/.*".$uuid.".*/",$row['homedir']))
|
||
{
|
||
$data = array(
|
||
'statu'=>1,
|
||
'user'=>$row['userid'],
|
||
'passwd'=>$row['passwd']
|
||
);
|
||
|
||
$this->jsonexit($data);
|
||
return true;
|
||
|
||
}else{
|
||
$uid = 109;
|
||
$gid = 1002;
|
||
|
||
$passwd = $this->genRandomString(16);
|
||
//$sql = "UPDATE proftpusers SET passwd=?,uid=?,gid=?,homedir=? WHERE userid=?";
|
||
//$sth = $this->db->prepare($sql);
|
||
//$rs = $sth->execute(array($passwd,$uid,$gid,$homedir,$uname));
|
||
$sql="update proftpusers SET passwd='".$passwd."',uid=".$uid.",gid=".$gid.",homedir='".$homedir."' WHERE userid='".$uname."'";
|
||
$rs=$this->db->query($sql);
|
||
if($rs)
|
||
{
|
||
$data = array(
|
||
'statu'=>1,
|
||
'user'=>$uname,
|
||
'passwd'=>$passwd
|
||
);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array(
|
||
'error'=>"FTP信息更新失败,请重试"
|
||
);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
else{
|
||
$uid = 109;
|
||
$gid = 1002;
|
||
$passwd = $this->genRandomString(16);
|
||
|
||
//$sql = "INSERT INTO proftpusers (userid,passwd,uid,gid,homedir) VALUES (?,?,?,?,?)";
|
||
//$sth = $this->db->prepare($sql);
|
||
//$rs = $sth->execute(array($uname,$passwd,$uid,$gid,$homedir));
|
||
$sql="insert into proftpusers (userid,passwd,uid,gid,homedir) values('".$uname."','".$passwd."',109,1002,'".$homedir."')";
|
||
$rs=$this->db->query($sql);
|
||
if($rs)
|
||
{
|
||
$data = array(
|
||
'statu'=>1,
|
||
'user'=>$uname,
|
||
'passwd'=>$passwd
|
||
);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array(
|
||
'error'=>"FTP信息更新失败,请重试"
|
||
);
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}//end if
|
||
|
||
}//ftp
|
||
}
|
||
//新建元数据
|
||
|
||
//文献管理
|
||
function literatureAction()
|
||
{
|
||
$ac = $this->_request->getParam('ac');
|
||
$uuid = $this->_request->getParam('uuid');
|
||
$id = $this->_request->getParam('id');
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
}
|
||
|
||
//查看单条数据的所有文献
|
||
if (!empty($uuid) && empty($ac))
|
||
{
|
||
$sql = "SELECT md.title,md.uuid,r.id,r.reference,r.link FROM mdref mr
|
||
LEFT JOIN metadata md ON md.uuid=mr.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
left join reference r on mr.refid=r.id
|
||
WHERE md.title IS NOT NULL AND a.userid=? and mr.uuid=? AND a.status=1
|
||
order by md.ts_created desc
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id,$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;
|
||
$this->_helper->viewRenderer('literature-viewdata');
|
||
}
|
||
|
||
//查看单条文献的所有数据
|
||
if (!empty($id) && empty($ac))
|
||
{
|
||
$sql = "SELECT md.title,md.uuid,r.id,r.reference,r.link,(a.userid-?) as isauthor FROM mdref mr
|
||
LEFT JOIN metadata md ON md.uuid=mr.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
left join reference r on mr.refid=r.id
|
||
WHERE md.title IS NOT NULL AND mr.refid=? AND a.status=1
|
||
order by md.ts_created desc
|
||
";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id,$id));
|
||
$rows = $sth->fetchAll();
|
||
@$this->view->mdtitle=$rows[0]['reference'];
|
||
|
||
$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->_helper->viewRenderer('literature-viewliter');
|
||
}
|
||
|
||
//查看所有文献列表
|
||
else if((empty($ac) && empty($uuid)) && empty($id))
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
$sql = "SELECT md.title,md.uuid,r.reference,r.id,mr.id as mrid FROM mdref mr
|
||
LEFT JOIN metadata md ON md.uuid=mr.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
left join reference r on mr.refid=r.id
|
||
WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1";
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
if(!empty($keywords))
|
||
{
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("r.reference","md.title","md.description"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" order by md.ts_created desc";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(15);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}
|
||
|
||
//按文献浏览
|
||
else if($ac=="byliter")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
$sql = "SELECT count(md.uuid) as c,r.reference,r.id FROM reference r
|
||
left join mdref mr on r.id=mr.refid
|
||
LEFT JOIN metadata md ON md.uuid=mr.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
|
||
WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1";
|
||
if(!empty($keywords))
|
||
{
|
||
$search=new SimpleSearch($keywords);
|
||
$where=$search->sql_expr(array("r.reference"));
|
||
$sql.=' and '.$where;
|
||
}
|
||
$sql.=" group by r.reference,r.id";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
|
||
$this->_helper->viewRenderer('literature-byliter');
|
||
}
|
||
|
||
//按数据浏览
|
||
else if($ac=="bydata")
|
||
{
|
||
$keywords = $this->_request->getParam('q');
|
||
if(!empty($keywords))
|
||
$this->view->q = $keywords;
|
||
$sql = "SELECT md.title,md.uuid,count(mr.id) as c FROM metadata md
|
||
LEFT JOIN mdref mr ON md.uuid=mr.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
left join reference r on mr.refid=r.id
|
||
WHERE md.title IS NOT NULL AND a.userid=? AND a.status=1";
|
||
if(!empty($keywords))
|
||
{
|
||
$search=new SimpleSearch($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(array($u_id));
|
||
$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('literature-bydata');
|
||
}
|
||
|
||
//添加文献信息
|
||
else if($ac == "add")
|
||
{
|
||
$submit = $this->_request->getParam('submit');
|
||
if(!empty($submit))
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
try{
|
||
$uuid = $this->_request->getParam('uuid');
|
||
$ref=$this->_request->getParam('ref');
|
||
$reftype=$this->_request->getParam('reftype');
|
||
$url = $this->_request->getParam('url');
|
||
if(empty($uuid) || empty($ref) || !is_numeric($reftype))
|
||
{
|
||
$data = array("error"=>"参数错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$sql="select * from mdauthor where userid=? and uuid=? and status=1";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id,$uuid));
|
||
$row = $sth->fetch();
|
||
if (empty($row))
|
||
{
|
||
$data = array("error"=>$this->alertbox('warning','您不是该数据作者,无法添加对应文献信息。'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
|
||
$sql="select id from reference where reference=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($ref));
|
||
$row = $sth->fetch();
|
||
if (!$row)
|
||
{
|
||
$sql="insert into reference (reference,link) values(?,?)";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array(trim($ref),$url));
|
||
$sql="select id from reference where reference=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array(trim($ref)));
|
||
$row = $sth->fetch();
|
||
}
|
||
$sql="insert into mdref (uuid,refid,reftype) values(?,?,?)";
|
||
$sth = $this->db->prepare($sql);
|
||
$ex=$sth->execute(array($uuid,$row['id'],$reftype));
|
||
|
||
if($ex)
|
||
{
|
||
$data = array("commited"=>1,"error"=>$this->alertbox('ok','成功添加文献!'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array("error"=>$this->alertbox('error','提交失败,请确认权限后重试'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}catch(Exception $e) {
|
||
$msg = "提交失败,请确认权限后重试";
|
||
if($this->debug>0)
|
||
{$msg .= $e->getMessage();}
|
||
$data = array("error"=>$this->alertbox('error',$msg));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}else{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer('literature-add');
|
||
$this->view->uuid = $this->_request->getParam('uuid');
|
||
}
|
||
}//添加文献
|
||
|
||
//删除某个文献
|
||
else if($ac=="delete")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$data = "";
|
||
|
||
$id = $this->_request->getParam('id');
|
||
$uuid = $this->_request->getParam('uuid');
|
||
if(empty($uuid) || !is_numeric($id))
|
||
{
|
||
$data = array("error"=>"参数错误");
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
try{
|
||
$sql = "DELETE FROM mdref r
|
||
USING mdauthor a
|
||
WHERE r.uuid=a.uuid and r.refid=? and r.uuid=? AND a.userid=? AND a.status=1";
|
||
$sth = $this->db->prepare($sql);
|
||
$ex = $sth -> execute(array($id,$uuid,$u_id));
|
||
|
||
if($ex)
|
||
{
|
||
$data = array("deleted"=>$id.$uuid,"error"=>$this->alertbox('ok','删除成功'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$data = array("error"=>$this->alertbox('error','删除失败,请确认权限后重试'));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}catch(Exception $e) {
|
||
$msg = "删除失败,请确认权限后重试";
|
||
if($this->debug>0)
|
||
{$msg .= $e->getMessage();}
|
||
$data = array("error"=>$this->alertbox('error',$msg));
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}
|
||
}
|
||
|
||
//文献附件上传
|
||
else if($ac=='upload')
|
||
{
|
||
|
||
$this->_helper->layout()->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
try{
|
||
|
||
$files=new files();
|
||
$msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'literature');
|
||
|
||
if(empty($msg['error']))
|
||
{
|
||
$msg['error']="";
|
||
$filename = $msg['db_path'];
|
||
$filesize = $msg['file_size'];
|
||
$filedesc = $this->_request->getParam('filedesc');
|
||
$filetype = $msg['file_type'];
|
||
$realname = $msg['realname'];
|
||
|
||
|
||
$sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$u_id','$filesize','$realname') RETURNING id";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$att = $sth->fetch(PDO::FETCH_ASSOC);
|
||
$msg['attid'] = $attid = $att['id'];
|
||
|
||
$msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]<input type="hidden" name="url" value="/service/attach/id/'.$attid.'" /><div class="cancel"><a href="javascript:;" id="deletebtn_'.$attid.'" title="删除该文件"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>';
|
||
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();
|
||
}
|
||
}//文件上传
|
||
|
||
}//文献管理
|
||
|
||
//文档管理
|
||
function documentAction(){
|
||
|
||
$ac = $this->_request->getParam('ac');
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$u_id = $user->id;
|
||
}
|
||
|
||
if(empty($ac) || $ac == 'list' || $ac=='search')
|
||
{
|
||
|
||
$wheresql = "";
|
||
|
||
$keyword = $this->_request->getParam('q');
|
||
|
||
if($ac=='search' && !empty($keyword))
|
||
{
|
||
$this->view->q = $keyword;
|
||
$search = new SimpleSearch($keyword);
|
||
$wheresql = $search->sql_expr(array("md.title"));
|
||
}
|
||
if(!empty($wheresql))
|
||
{
|
||
$wheresql = " AND ".$wheresql;
|
||
}
|
||
|
||
|
||
$sql = "select count(att.id) as aid,md.title,md.uuid from metadata md
|
||
LEFT JOIN mdauthor a ON a.uuid=md.uuid
|
||
LEFT JOIN mdattach att ON att.uuid=md.uuid
|
||
WHERE a.status>=1 AND a.userid=? $wheresql
|
||
GROUP BY md.title,md.uuid";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($u_id));
|
||
$rows = $sth->fetchAll();
|
||
|
||
|
||
$paginator = Zend_Paginator::factory($rows);
|
||
$paginator->setCurrentPageNumber($this->_getParam('page'));
|
||
$paginator->setItemCountPerPage(10);
|
||
$paginator->setView($this->view);
|
||
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
||
$this->view->paginator=$paginator;
|
||
}
|
||
|
||
if($ac=='view')
|
||
{
|
||
$uuid = $this->_request->getParam('uuid');
|
||
|
||
if(empty($uuid) || !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))
|
||
{
|
||
$this->view->error = "参数有误!";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT title FROM metadata WHERE uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid));
|
||
$row = $sth->fetch();
|
||
|
||
$this->view->title = $row['title'];
|
||
|
||
$sql = "SELECT att.*,md.title,md.uuid FROM mdattach mda
|
||
LEFT JOIN attachments att ON mda.id=att.id
|
||
LEFT JOIN metadata md ON mda.uuid=md.uuid
|
||
LEFT JOIN users u ON att.userid=u.id
|
||
WHERE md.uuid=?
|
||
";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid));
|
||
$rows = $sth->fetchAll();
|
||
|
||
$this->view->info=$rows;
|
||
|
||
$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('document-view');
|
||
}
|
||
|
||
if($ac == 'del')
|
||
{
|
||
|
||
$this->_helper->layout()->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
(int)$id = $this->_request->getParam('id');
|
||
$uuid = $this->_request->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))
|
||
{
|
||
exit();
|
||
}
|
||
|
||
$info = $this->getFileinfo($id);
|
||
$filepath = $dataFilePath.$info['filename'];
|
||
try{
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$userid = $user->id;
|
||
$sql_mdattach = "delete from mdattach where uuid='$uuid' and id='$id'";
|
||
$sql = "delete from attachments where id='$id' and userid='$userid'";
|
||
if($this->db->exec($sql_mdattach)>0 && $this->db->exec($sql)>0)
|
||
{
|
||
@unlink($filepath);
|
||
echo "ok";
|
||
}
|
||
}
|
||
|
||
}catch(Exception $e){}
|
||
//不输出任何错误
|
||
|
||
}//删除
|
||
|
||
if($ac=='upload')
|
||
{
|
||
$submit = $this->_request->getParam('submit');
|
||
if(empty($submit))
|
||
{
|
||
$uuid = $this->_request->getParam('uuid');
|
||
$this->view->uuid=$uuid;
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer('document-upload');
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
$this->_helper->layout()->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
try{
|
||
|
||
$files=new files();
|
||
$msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],'document');
|
||
|
||
if(empty($msg['error']))
|
||
{
|
||
$msg['error']="";
|
||
$filename = $msg['db_path'];
|
||
$filesize = $msg['file_size'];
|
||
$filedesc = $this->_request->getParam('filedesc');
|
||
$filetype = $msg['file_type'];
|
||
$realname = $msg['realname'];
|
||
|
||
|
||
$sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$u_id','$filesize','$realname') RETURNING id";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$att = $sth->fetch(PDO::FETCH_ASSOC);
|
||
$msg['attid'] = $attid = $att['id'];
|
||
|
||
$sql = "insert into mdattach (uuid,id) values ('$uuid','$attid')";
|
||
if($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();
|
||
}
|
||
}
|
||
}//文件上传
|
||
|
||
if($ac == 'download')
|
||
{
|
||
(int)$id = $this->_request->getParam('id');
|
||
|
||
$sql = "select * from attachments where id='$id'";
|
||
|
||
$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="'.$row['realname'].'"')
|
||
->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);
|
||
}//文件下载
|
||
|
||
}//文档管理
|
||
|
||
/*
|
||
* delegateAction() 委托
|
||
*
|
||
*
|
||
*/
|
||
public function delegateAction(){
|
||
|
||
$ac = $this->_request->getParam('ac');
|
||
$uuid = $this->_request->getParam('uuid');
|
||
|
||
if($ac == '' && !empty($uuid))
|
||
{
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}
|
||
|
||
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))
|
||
{
|
||
$this->view->info = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT * FROM metadata WHERE uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth ->execute(array($uuid));
|
||
$row = $sth->fetch();
|
||
|
||
$this->view->metadata = $row;
|
||
|
||
//确认一下用户有权限,如果直接使用update语句无法得到已更改过的状态
|
||
//只要是认证后的数据作者,都可以修改数据的委托状态
|
||
$sql = "SELECT * FROM mdstatus
|
||
WHERE uuid=? AND userid in (select userid from mdauthor where status=1 and uuid=?) AND status=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$uuid,6));
|
||
$mds = $sth->fetch();
|
||
|
||
if(!empty($mds['id']))
|
||
{
|
||
$sql = "UPDATE mdstatus SET status=7,ts_changed='now()',userid=$uid WHERE uuid='$uuid'";
|
||
if($this->db->exec($sql))
|
||
{
|
||
$this->view->info = "委托成功!";
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
$this->view->info = "委托失败!";
|
||
return true;
|
||
}
|
||
}else{
|
||
$this->view->info = "该数据无法委托,请确定数据状态已经可以进行委托,或数据尚未进行委托";
|
||
}
|
||
}
|
||
|
||
if($ac == 'cancel')
|
||
{
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}
|
||
|
||
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))
|
||
{
|
||
$this->view->info = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT * FROM metadata WHERE uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth ->execute(array($uuid));
|
||
$row = $sth->fetch();
|
||
|
||
$this->view->metadata = $row;
|
||
|
||
$sql = "SELECT * FROM mdstatus
|
||
WHERE uuid=? AND userid in (select userid from mdauthor where status=1 and uuid=?) AND status=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$uuid,7));
|
||
$mds = $sth->fetch();
|
||
|
||
if(!empty($mds['id']))
|
||
{
|
||
$sql = "UPDATE mdstatus SET status=6,ts_changed='now()',userid=$uid WHERE uuid='$uuid'";
|
||
if($this->db->exec($sql))
|
||
{
|
||
$this->view->info = "取消委托成功!";
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
$this->view->info = "取消委托失败!";
|
||
return true;
|
||
}
|
||
}else{
|
||
$this->view->info = "操作失败!该数据尚未进行委托";
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
}//委托
|
||
|
||
/*
|
||
* sendmailAction() 邮件通知
|
||
*
|
||
* Param uuid $uuid //元数据UUID
|
||
*
|
||
* return Ajax-response
|
||
*
|
||
* 传入元数据UUID,判断是否为当前用户的数据,如果是,即可向已经下载过该数据的所有用户发送电子邮件
|
||
*/
|
||
public function sendmailAction()
|
||
{
|
||
$uuid = $this->_getParam('uuid');
|
||
$ac = $this->_getParam('ac');
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}
|
||
|
||
if(empty($uuid) || empty($uid))
|
||
{
|
||
$this->view->error = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
$sql = "SELECT a.*,m.title,m.description,g.id as gid,mds.status as mdstatus,m.uuid FROM normalmetadata m
|
||
LEFT JOIN mdauthor a ON m.uuid=a.uuid
|
||
LEFT JOIN geonetworkmetadata g on m.uuid=g.uuid
|
||
LEFT JOIN mdstatus mds ON m.uuid=mds.uuid
|
||
WHERE a.userid=? AND a.status>=0 AND m.uuid=?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uid,$uuid));
|
||
$metadata = $sth->fetch();
|
||
|
||
if(empty($metadata['uuid']))
|
||
{
|
||
$this->view->error = "数据不存在或者您可能没有该数据的管理权限";
|
||
return true;
|
||
}
|
||
|
||
$this->view->metadata = $metadata;
|
||
|
||
$sql = "select u.email
|
||
from dataorder d
|
||
LEFT JOIN users u on d.userid = u.id
|
||
WHERE u.email IS NOT NULL
|
||
AND d.uuid=?
|
||
GROUP BY u.email";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid));
|
||
$mails = $sth->fetchAll();
|
||
|
||
$this->view->mailinfo = count($mails);
|
||
|
||
if($ac == "send")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$title = $this->_getParam('title');
|
||
$body = $this->_getParam('body');
|
||
|
||
foreach($mails as $k=>$v)
|
||
{
|
||
$mail=new WestdcMailer($this->view->config->smtp);
|
||
$mail->setFrom($this->view->config->service->email,'西部数据中心服务组');
|
||
$mail->setBodyText($body);
|
||
$mail->setSubject($title);
|
||
if($this->debug==0)
|
||
{
|
||
$mail->addTo($v['email']);
|
||
}else{
|
||
$mail->addTo($debug_email);
|
||
}
|
||
if($mail->send())
|
||
{
|
||
echo $v['email']."...发送成功!<br />";
|
||
}else{
|
||
echo $v['email']."...发送失败!<br />";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
* staticsAction() 数据统计
|
||
*
|
||
*
|
||
*/
|
||
public function staticsAction(){
|
||
|
||
$ac = $this->_getParam('ac');
|
||
|
||
if(empty($ac))
|
||
{
|
||
$this->view->alldata = $this->getClick();
|
||
}
|
||
|
||
if($ac=="md")
|
||
{
|
||
$this->_helper->viewRenderer('statics-md');
|
||
$this->view->allorder = $this->getStatic("allorder");
|
||
$this->view->offlineorder = $this->getStatic("offline");
|
||
$this->view->onlineorder = $this->getStatic("online");
|
||
}
|
||
|
||
if($ac == "time")
|
||
{
|
||
$this->_helper->viewRenderer('statics-time');
|
||
$this->view->datas = $this->getStaticByYear();
|
||
|
||
}
|
||
|
||
}//staticsAction() 数据统计
|
||
|
||
public function getClick(){
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}
|
||
|
||
$sql = "SELECT md.title,md.uuid,s.viewed,count(o.id) as down FROM metadata md
|
||
LEFT JOIN mdstat s ON md.uuid=s.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
LEFT JOIN dataorder o ON md.uuid=o.uuid
|
||
WHERE a.userid=? and a.status=1 and (o.status=0 or o.status=5)
|
||
GROUP BY md.title,md.uuid,s.viewed";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uid));
|
||
$rows = $sth->fetchAll();
|
||
|
||
return $rows;
|
||
}
|
||
|
||
/*
|
||
* getStaticByYear按月份获取统计数据
|
||
*/
|
||
public function getStaticByYear($year=0)
|
||
{
|
||
$uid=Zend_Auth::getInstance()->getIdentity()->id;
|
||
|
||
$sql = "select to_char(o.ts_created, 'YYYY-MM') as d , count(o.id) as c from dataorder o
|
||
where o.status in (0,5) and o.uuid in (select uuid from mdauthor where status=1 and userid=".$uid.")";
|
||
if ($year>0)
|
||
$sql.=" and o.ts_created between '$year-01-01' and '$year-12-31' ";
|
||
$sql.=" group by d order by d desc";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute();
|
||
$rows = $sth->fetchAll();
|
||
|
||
return $rows;
|
||
}
|
||
|
||
public function getStatic($ac){
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}
|
||
|
||
if(empty($uid)){
|
||
return false;
|
||
}
|
||
|
||
if($ac == "allorder"){
|
||
$sql = " SELECT count(o.id) as c FROM metadata md
|
||
LEFT JOIN dataorder o ON md.uuid=o.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
WHERE a.userid=? AND a.status>0";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uid));
|
||
$row = $sth->fetch();
|
||
return $row['c'];
|
||
}
|
||
|
||
if($ac == "offline"){
|
||
$sql = " SELECT count(o.id) as c FROM metadata md
|
||
LEFT JOIN dataorder o ON md.uuid=o.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
WHERE o.offlineappid > 0 AND a.userid=? AND a.status>0";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uid));
|
||
$row = $sth->fetch();
|
||
return $row['c'];
|
||
}
|
||
|
||
if($ac == "online"){
|
||
$sql = " SELECT count(o.id) as c FROM metadata md
|
||
LEFT JOIN dataorder o ON md.uuid=o.uuid
|
||
LEFT JOIN mdauthor a ON md.uuid=a.uuid
|
||
WHERE o.onlineappid > 0 AND a.userid=? AND a.status>0";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uid));
|
||
$row = $sth->fetch();
|
||
return $row['c'];
|
||
}
|
||
|
||
}
|
||
|
||
|
||
public function getFileinfo($id){
|
||
$sql = "select * from attachments where id='$id'";
|
||
$re= $this->db->query($sql);
|
||
$row= $re->fetch();
|
||
return $row;
|
||
}
|
||
|
||
//成为作者后的后继处理工作
|
||
private function author_first($uuid,$author)
|
||
{
|
||
$sql="insert into mdversion (xml,ts_created,uuid,changelog,userid)
|
||
select x.data,m.ts_created,?,?,? from metadata m left join xml x on m.id=x.id
|
||
left join mdversion v on m.uuid=v.uuid
|
||
where m.uuid=? and v.changelog is null and m.uuid not in (select uuid from mdversion where changelog is not null)
|
||
order by v.ts_created ASC LIMIT 1";
|
||
$sth=$this->db->prepare($sql);
|
||
try
|
||
{
|
||
$sth->execute(array($uuid,'初始版本 version 1.0',$author,$uuid));
|
||
} catch(Exception $e){
|
||
// do nothing here.
|
||
// 说明之前已经有对应数据
|
||
}
|
||
$this->wdb=Zend_Db::factory($this->view->config->geonetwork);
|
||
$sql="update metadata set owner=? where uuid=?";
|
||
$sth=$this->wdb->prepare($sql);
|
||
$sth->execute(array($author,$uuid));
|
||
}
|
||
|
||
|
||
/*
|
||
* metadata() 新建元数据
|
||
*
|
||
*
|
||
*
|
||
*/
|
||
public function metadataAction()
|
||
{
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}
|
||
|
||
$ac = $this->_getParam('ac');
|
||
|
||
if(empty($ac))
|
||
{
|
||
|
||
include_once("MetaData.php");
|
||
$md = new Metadata($this->db);
|
||
$this->view->Field = $md->MetadataFields;
|
||
|
||
$MDList = $md->getRecord($uid);
|
||
|
||
if(!empty($MDList))
|
||
{
|
||
foreach($MDList as $k=>$v)
|
||
{
|
||
$MDList[$k]['content'] = json_decode($v['content']);
|
||
}
|
||
$this->view->MDList = $MDList;
|
||
}
|
||
}
|
||
|
||
if($ac=="new")
|
||
{
|
||
$this->_helper->viewRenderer('metadata-new');
|
||
|
||
include_once("MetaData.php");
|
||
$md = new Metadata($this->db);
|
||
$this->view->Field = $md->MetadataFields;
|
||
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
if(!empty($uuid) && !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))
|
||
{
|
||
$this->view->error = "参数错误";
|
||
return true;
|
||
}
|
||
|
||
else{
|
||
$this->view->uuid = $uuid;
|
||
if(!empty($uuid)){
|
||
|
||
$datas = $md->getRecord($uid,$uuid);
|
||
$data = json_decode($datas['content']);
|
||
$this->view->data = $data;
|
||
return true;
|
||
}
|
||
}
|
||
|
||
}//创建元数据页面
|
||
|
||
if($ac == "del")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$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))
|
||
{
|
||
$this->jsonexit(array('error'=>"参数错误"));
|
||
return true;
|
||
}
|
||
|
||
$sql = "DELETE FROM metadata_temp WHERE userid=? AND uuid=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$rs = $sth->execute(array($uid,$uuid));
|
||
|
||
if($rs>0)
|
||
{
|
||
$this->jsonexit(array('msg'=>"删除成功",'deleted'=>1));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array('error'=>"删除失败,请刷新页面后查看"));
|
||
return true;
|
||
}
|
||
|
||
return true;
|
||
|
||
}//删除
|
||
|
||
if($ac == "save")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
include_once("MetaData.php");
|
||
$md = new Metadata($this->db);
|
||
|
||
$uuid = $this->_getParam('uuid');
|
||
$commit = $this->_getParam('commit');
|
||
|
||
$data = array();
|
||
|
||
foreach($md->MetadataFields as $k=>$v)
|
||
{
|
||
$data[$v['FieldName_temp']] = $this->_getParam($v['FieldName']);
|
||
|
||
if(!empty($commit))
|
||
{
|
||
if(isset($v['Required']) && $v['Required'] == true)
|
||
{
|
||
if($v['Type'] == 'varchar' || $v['Type'] == 'text')
|
||
{
|
||
if(empty($data[$v['FieldName_temp']]))
|
||
{
|
||
$this->jsonexit(array("error"=>$v['Title']." 必须填写"));
|
||
return true;
|
||
}
|
||
} // 文本数据
|
||
|
||
if($v['Type'] == 'array')
|
||
{
|
||
if(!is_array($data[$v['FieldName_temp']]) || count($data[$v['FieldName_temp']]) < 1 )
|
||
{
|
||
$this->jsonexit(array("error"=>$v['Title']." 信息不完整"));
|
||
return true;
|
||
}//数组没有值
|
||
|
||
foreach($data[$v['FieldName_temp']] as $sk=>$sv)
|
||
{
|
||
if(empty($sv))
|
||
{
|
||
unset($data[$v['FieldName_temp']][$sk]);
|
||
}
|
||
|
||
if(is_array($sv))
|
||
{
|
||
$error_cu = 0;
|
||
foreach($sv as $sub_val)
|
||
{
|
||
if(empty($sub_val))
|
||
{
|
||
$error_cu ++ ;
|
||
}
|
||
}
|
||
|
||
if($error_cu >= count($sv))
|
||
{
|
||
unset($data[$v['FieldName_temp']][$sk]);
|
||
$error_cu = 0;
|
||
}
|
||
|
||
if($error_cu > 0 && $error_cu < count($sv)){
|
||
$this->jsonexit(array("error"=>$v['Title']." 信息不完整"));
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
if(count($data[$v['FieldName_temp']]) < 1)
|
||
{
|
||
$this->jsonexit(array("error"=>$v['Title']." 必须填写"));
|
||
return true;
|
||
}
|
||
|
||
} // 数组数据
|
||
|
||
} // 是否必填
|
||
}// empty($commit)
|
||
}// end foreach
|
||
|
||
if(empty($data['title']))
|
||
{
|
||
$this->jsonexit(array("error"=>"元数据标题必须填写"));
|
||
return true;
|
||
}
|
||
|
||
if(!empty($commit))
|
||
{
|
||
$status = 1;
|
||
}else{
|
||
$status = 0;
|
||
}
|
||
|
||
if(!empty($uuid))
|
||
{
|
||
$rs = $md->Record($uid,$data,$status,$uuid);
|
||
}else{
|
||
$rs = $md->Record($uid,$data,$status);
|
||
}
|
||
|
||
if($rs !== false)
|
||
{
|
||
if(!empty($commit))
|
||
{
|
||
$data = array("uuid"=>$rs,"complete"=>$commit);
|
||
}else{
|
||
$data = array("uuid"=>$rs,'saved'=>1);
|
||
}
|
||
$this->jsonexit($data);
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array("error"=>'保存失败'));
|
||
return false;
|
||
}
|
||
}// 新元数据保存
|
||
|
||
if($ac == "autoinput")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$name = $this->_getParam('k');
|
||
|
||
$name = strip_tags(trim($name));
|
||
|
||
if(!empty($name))
|
||
{
|
||
$sql = "SELECT realname,email FROM users WHERE realname LIKE ? OR email LIKE ?";
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array('%'.$name.'%','%'.$name.'%'));
|
||
$rows = $sth->fetchAll();
|
||
$this->jsonexit($rows);
|
||
}
|
||
}
|
||
|
||
if($ac == "process")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
$sql = "SELECT * FROM metadata_temp WHERE uuid=? AND userid=?";
|
||
|
||
$sth = $this->db->prepare($sql);
|
||
$sth->execute(array($uuid,$uid));
|
||
|
||
$row = $sth->fetch();
|
||
|
||
$body = json_decode($row['content']);
|
||
echo "<pre>";
|
||
print_r($body);
|
||
echo "</pre>";
|
||
|
||
return true;
|
||
}// 元数据处理
|
||
|
||
}//metadata()
|
||
|
||
public function fundAction()
|
||
{
|
||
//$this->_helper->layout->setLayout('administry');
|
||
$ac = $this->_getParam('ac');
|
||
$submit = $this->_getParam('submit');
|
||
|
||
include_once("data/Fund.php");
|
||
$fund = new Fund($this->db);
|
||
|
||
$auth = Zend_Auth::getInstance();
|
||
if($auth->hasIdentity())
|
||
{
|
||
$user = $auth->getIdentity();
|
||
$uid = $user->id;
|
||
}else{
|
||
exit("请重新登录");
|
||
}
|
||
|
||
if($ac=='index' || empty($ac))
|
||
{
|
||
$uuid = $this->_getParam('uuid');
|
||
if(empty($uuid))
|
||
{
|
||
$rows = $fund->fetch(0,true,$uid);
|
||
$fund->addPaginator($rows,$this->view,$this->_request);
|
||
}else{
|
||
include('data/Metadata.php');
|
||
$md = new Metadata($this->db);
|
||
$this->view->md = $md->view($uuid);
|
||
$rows = $fund->fetch($uuid);
|
||
$fund->addPaginator($rows,$this->view,$this->_request);
|
||
}
|
||
return true;
|
||
}
|
||
|
||
if($ac == "add")
|
||
{
|
||
$this->_helper->viewRenderer('fund-add');
|
||
if(!empty($submit))
|
||
{
|
||
$data = $fund->_getParams($this->_request);
|
||
$data['userid'] = $uid;
|
||
|
||
if($fund->add($data) == true)
|
||
{
|
||
$this->view->AlertType = "alert-success";
|
||
$this->view->msg = "添加成功!";
|
||
$this->view->jump_url = "/author/fund/";
|
||
return true;
|
||
}else{
|
||
$this->view->data = $data;
|
||
$this->view->error = "添加失败,请重试";
|
||
return true;
|
||
}
|
||
}
|
||
return true;
|
||
}//add
|
||
|
||
if($ac == "edit")
|
||
{
|
||
$this->_helper->viewRenderer('fund-add');
|
||
$id = $this->_getParam('id');
|
||
|
||
if(empty($id))
|
||
{
|
||
$this->view->AlertType = "alert-error";
|
||
$this->view->msg = "参数错误";
|
||
$this->view->jump_url = "/author/fund/";
|
||
}
|
||
|
||
if(!empty($submit))
|
||
{
|
||
$data = $fund->_getParams($this->_request);
|
||
$data['userid'] = $uid;
|
||
$state = $fund->update($data,$id,$uid);
|
||
if( $state == true)
|
||
{
|
||
$this->view->AlertType = "alert-success";
|
||
$this->view->msg = "修改成功!";
|
||
$this->view->jump_url = "/author/fund/";
|
||
return true;
|
||
}else{
|
||
$this->view->data = $data;
|
||
if(is_string($state))
|
||
{
|
||
$this->view->error = $state;
|
||
}else{
|
||
$this->view->error = "修改失败,请重试";
|
||
}
|
||
return true;
|
||
}
|
||
}else{
|
||
$this->view->data = $fund->view($id);
|
||
}
|
||
return true;
|
||
}//edit
|
||
|
||
if($ac == "del")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$id = $this->_getParam('id');
|
||
|
||
if(empty($id))
|
||
{
|
||
$this->jsonexit(array('error'=>'参数错误'));
|
||
return true;
|
||
}
|
||
|
||
if($fund->delete($id,$uid) == true)
|
||
{
|
||
$this->jsonexit(array('success'=>$id));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array('error'=>'删除失败'));
|
||
return true;
|
||
}
|
||
|
||
}//del
|
||
|
||
if($ac == "formd")
|
||
{
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
if(empty($uuid))
|
||
{
|
||
$this->view->AlertType = "alert-error";
|
||
$this->view->msg = "参数错误";
|
||
$this->view->jump_url = "/admin/data/fund/";
|
||
}
|
||
|
||
$id = $this->_getParam('id');
|
||
$order = $this->_getParam('order');
|
||
|
||
if(!empty($id))
|
||
{
|
||
if($fund->addToMdfund($uuid,$id,$order))
|
||
{
|
||
$this->view->AlertType = "alert-success";
|
||
$this->view->error = "添加成功!可以继续选择并添加";
|
||
}else{
|
||
$this->view->AlertType = "alert-error";
|
||
$this->view->error = "添加失败!该数据可能已被添加";
|
||
}
|
||
}
|
||
|
||
$mfid = $this->_getParam('mfid');
|
||
|
||
if(!empty($mfid))
|
||
{
|
||
if($fund->changeorder($mfid,$order))
|
||
{
|
||
$this->view->AlertType = "alert-success";
|
||
$this->view->error = "排序修改成功!";
|
||
}else{
|
||
$this->view->AlertType = "alert-error";
|
||
$this->view->error = "排序修改失败!";
|
||
}
|
||
$rows = $fund->fetch($uuid,true,$uid);
|
||
}else{
|
||
$this->view->ct = "ct";
|
||
$rows = $fund->fetch($uuid,false,$uid);
|
||
}
|
||
|
||
include('data/Metadata.php');
|
||
$md = new Metadata($this->db);
|
||
$this->view->md = $md->view($uuid);
|
||
|
||
$fund->addPaginator($rows,$this->view,$this->_request);
|
||
|
||
return true;
|
||
}//formd
|
||
|
||
if($ac == "mdfunddel")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$id = $this->_getParam('id');
|
||
|
||
if(empty($id))
|
||
{
|
||
$this->jsonexit(array('error'=>'参数错误'));
|
||
return true;
|
||
}
|
||
|
||
if($fund->mfdelete($id) == true)
|
||
{
|
||
$this->jsonexit(array('success'=>$id));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array('error'=>'删除失败'));
|
||
return true;
|
||
}
|
||
}//mdfunddel
|
||
|
||
}//fund
|
||
|
||
public function doiAction()
|
||
{
|
||
//$this->_helper->layout->setLayout('administry');
|
||
$ac = $this->_getParam('ac');
|
||
$submit = $this->_getParam('submit');
|
||
$uuid = $this->_getParam('uuid');
|
||
|
||
include_once("data/Doi.php");
|
||
$doi = new Doi($this->db);
|
||
include_once("helper/view.php");
|
||
|
||
if( empty($ac) || $ac == "index")
|
||
{
|
||
$uid = view::User('id');
|
||
if(empty($uuid))
|
||
{
|
||
$rows = $doi->fetch($uid);
|
||
view::addPaginator($rows,$this->view,$this->_request);
|
||
}else{
|
||
$this->_redirect('/author/doi/ac/edit/?uuid='.$uuid);
|
||
return true;
|
||
}
|
||
return true;
|
||
}//index
|
||
|
||
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);
|
||
if(empty($this->view->data))
|
||
{
|
||
include('data/Metadata.php');
|
||
$md = new Metadata($this->db);
|
||
$metadata = $md->view($uuid);
|
||
$this->view->data = array(
|
||
'uuid'=>$uuid,
|
||
'title'=>$metadata['title'],
|
||
'doi'=>$metadata['doi'],
|
||
'url'=>"http://" . $_SERVER['HTTP_HOST'].'/data/'.$uuid,
|
||
'publisher'=>view::User('realname'),
|
||
);
|
||
}else{
|
||
$this->view->data['info'] = $doi->data_process_out($this->view->data);
|
||
}
|
||
}else{
|
||
$this->view->data = $doi->view($uuid);
|
||
$this->view->data['info'] = $doi->data_process_out($this->view->data);
|
||
}
|
||
}else{
|
||
$data = $doi->_getParams($this->_request);
|
||
$this->view->data = $data;
|
||
$info = $doi->checkinfo($data['info']);
|
||
if(!is_array($info)){
|
||
$this->view->error = view::Error('alert-error',$info,-1);
|
||
return true;
|
||
}else{
|
||
$data['info'] = $info;
|
||
$data['info'] = $doi->sksort($data['info'],"order",SORT_DESC);
|
||
}
|
||
$uid = view::User('id');
|
||
$state = $doi->update($data,$uuid,$uid);
|
||
if($state)
|
||
{
|
||
$this->view->msg = view::Msg('alert-success',"修改成功!",'/author/doi/uuid/'.$uuid);
|
||
return false;
|
||
}else{
|
||
$this->view->error = view::Error('alert-error',"修改失败",-1);
|
||
return false;
|
||
}
|
||
}
|
||
}//edit
|
||
|
||
if($ac == "del")
|
||
{
|
||
$this->_helper->layout->disableLayout();
|
||
$this->_helper->viewRenderer->setNoRender();
|
||
|
||
$id = $this->_getParam('id');
|
||
|
||
if(empty($id))
|
||
{
|
||
$this->jsonexit(array('error'=>'参数错误'));
|
||
return true;
|
||
}
|
||
|
||
if($doi->delete($id) == true)
|
||
{
|
||
$this->jsonexit(array('success'=>$id));
|
||
return true;
|
||
}else{
|
||
$this->jsonexit(array('error'=>'删除失败'));
|
||
return true;
|
||
}
|
||
|
||
}//del
|
||
|
||
}//doi
|
||
|
||
/*
|
||
* jsonexit() 退出并返回json数据
|
||
*
|
||
* param array $data 要返回的JSON数据,可以是任意数组
|
||
*
|
||
* return JSON-response
|
||
*/
|
||
public function jsonexit($data){
|
||
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($data));
|
||
return true;
|
||
}//jsonexit() 退出并返回json数据
|
||
|
||
private function genRandomString($len)
|
||
{
|
||
$chars = array(
|
||
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
|
||
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
|
||
"w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
|
||
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
|
||
"S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
|
||
"3", "4", "5", "6", "7", "8", "9"
|
||
);
|
||
$charsLen = count($chars) - 1;
|
||
|
||
shuffle($chars); // 将数组打乱
|
||
|
||
$output = "";
|
||
for ($i=0; $i<$len; $i++)
|
||
{
|
||
$output .= $chars[mt_rand(0, $charsLen)];
|
||
}
|
||
return $output;
|
||
}
|
||
|
||
//ajax 提示框
|
||
public function alertbox($type='',$body){
|
||
if($type == "error")
|
||
{
|
||
$img = '<img src="/images/alert_big_error.png" />';
|
||
$text = '<h4>'.$body.'</h4>';
|
||
return $img.$text;
|
||
}
|
||
if($type == "ok")
|
||
{
|
||
$img = '<img src="/images/alert_big_ok.png" />';
|
||
$text = '<h4>'.$body.'</h4>';
|
||
return $img.$text;
|
||
}
|
||
if($type == "warning")
|
||
{
|
||
$img = '<img src="/images/alert_big_warning.png" />';
|
||
$text = '<h4>'.$body.'</h4>';
|
||
return $img.$text;
|
||
}
|
||
if(empty($type))
|
||
{
|
||
$text = '<h4>'.$body.'</h4>';
|
||
return $text;
|
||
}
|
||
}
|
||
}
|
||
|