db=Zend_Registry::get('db');
$this->view->config = Zend_Registry::get('config');
$this->messenger=$this->_helper->getHelper('FlashMessenger');
$this->view->messages = $this->messenger->getMessages();
}
function postDispatch()
{
$this->view->messages = $this->messenger->getMessages();
}
function indexAction()
{
//其他连接
}
//提供和GEONETWORK中的元数据的同步功能
//提供双向同步功能,但只处理ISO 19115格式的元数据?
function syncAction()
{
set_time_limit(0);
$sql="select * from (select count(*) as westdccount from metadata) as t1,(select count(uuid) as gncount from geonetworkmetadata where schemaid='iso19115') as t2";
$this->db->setFetchMode(Zend_Db::FETCH_OBJ);
$this->view->mdcount=$this->db->fetchRow($sql);
$source=$this->_request->getParam('source');
$delete=$this->_request->getParam('delete');
$thumb=$this->_request->getParam('thumb');
$list=$this->_request->getParam('list');
$adminuser=$this->_request->getParam('adminuser');
$uuid=trim($this->_request->getParam('uuid'));
if ($source=="geonetwork" && empty($uuid) ) {
//从geonetwork向WESTDC同步
//对所有的新数据增加评审状态
$sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from geonetworkmetadata gn where uuid not in (select uuid from mdstatus)";
$userid = Zend_Auth::getInstance()->getIdentity()->id;
$this->db->query($sql,array($userid));
$sql="select uuid,data,source from geonetworkmetadata where schemaid='iso19115'";
$rs=$this->db->fetchAll($sql);
foreach($rs as $gmd) {
$this->import($gmd->data);
$this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
}
$this->view->msg='成功同步元数据!';
} elseif ($source=="watergn" && empty($uuid) ) {
//首先删除所有的黑河试验数据
//$sql="delete from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'";
$sql="delete from metadata where uuid in (select uuid from watergn)";
$this->db->query($sql);
$sql="delete from responsible where id not in (select distinct(resid) from role)";
$this->db->query($sql);
//对所有的新数据增加评审状态
$sql="insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from watergn where uuid not in (select uuid from mdstatus)";
$userid = Zend_Auth::getInstance()->getIdentity()->id;
$this->db->query($sql,array($userid));
//同步黑河遥感实验的元数据
$sql="select uuid,data,source from watergn where schemaid='iso19115'";
$rs=$this->db->fetchAll($sql);
foreach($rs as $gmd) {
$this->import($gmd->data);
$this->db->query("update metadata set source=? where uuid=?",array($gmd->source,$gmd->uuid));
}
$this->view->msg='成功同步黑河遥感综合实验元数据!';
} elseif ($source=="westdc" && empty($uuid) ) {
//从westdc向geonetwork同步
$sql="select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid not in (select uuid from geonetworkmetadata)";
$rs=$this->db->fetchAll($sql);
foreach($rs as $gmd) {
$sql="insert into geonetworkmetadata (uuid,source,data) values('".$gmd->uuid."','".$gmd->source."',".$this->db->quote($gmd->data).")";
$this->db->exec($sql);
}
$sql="select m.uuid,m.source,x.data from metadata m left join xml x on m.id=x.id where m.uuid in (select uuid from geonetworkmetadata)";
$rs=$this->db->fetchAll($sql);
foreach($rs as $gmd) {
$sql="update geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
$this->db->exec($sql);
}
$this->view->msg='成功同步WESTDC元数据到GEONETWORK!';
} elseif (!empty($uuid) && isset($_POST['submit'])) {
//同步单条元数据
$sql=$this->db->quoteInto("select data,source from geonetworkmetadata where uuid=?",$uuid);
if ($rs=$this->db->fetchRow($sql)) {
$this->import($rs->data);
$this->db->exec($this->db->quoteInto("update metadata set source=? where uuid='$uuid'",$rs->source));
$userid = Zend_Auth::getInstance()->getIdentity()->id;
$this->db->query("insert into mdstatus (uuid,status,ts_accepted,userid) select uuid,1,now(),?
from geonetworkmetadata gn where uuid not in (select uuid from mdstatus) and uuid=?",array($userid,$uuid));
$this->view->msg='成功同步元数据:'.$uuid;
} else $this->view->msg='不存在此元数据:'.$uuid;
} elseif (!empty($uuid) && isset($_POST['gnsubmit'])) {
//同步单条元数据到geonetwork
$sql=$this->db->quoteInto("select m.uuid,m.source,x.data,g.id from metadata m left join xml x on m.id=x.id left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=?",$uuid);
if ($gmd=$this->db->fetchRow($sql)) {
if (!empty($gmd->id)) {
$sql="update geonetworkmetadata set source='".$gmd->source."',data=".$this->db->quote($gmd->data)." where uuid='".$gmd->uuid."'";
} else {
$sql="insert into geonetworkmetadata (uuid,source,data) values('".$gmd->uuid."','".$gmd->source."',".$this->db->quote($gmd->data).")";
}
$this->db->exec($sql);
$this->view->msg='成功同步元数据:'.$uuid;
} else $this->view->msg='不存在此元数据:'.$uuid;
} elseif (!empty($uuid) && isset($_POST['watersubmit'])) {
//同步单条元数据
$sql=$this->db->quoteInto("select data,source from watergn where uuid=?",$uuid);
if ($rs=$this->db->fetchRow($sql)) {
$this->import($rs->data);
$this->db->query("update metadata set source=? where uuid=?",array($rs->source,$uuid));
$this->view->msg='成功同步元数据:'.$uuid;
} else $this->view->msg='不存在此元数据:'.$uuid;
} elseif ($list=='westdc') {
$sql="select uuid,title from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
$this->view->metadata=$this->db->query($sql);
} elseif ($list=='geonetwork') {
$sql="select id,uuid,(regexp_matches(data,'(.*)'))[1] as title from geonetworkmetadata
where uuid not in (select uuid from metadata)";
$this->view->metadata=$this->db->query($sql);
} elseif ($delete=='westdc') {
$sql="delete from metadata where uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
$this->db->query($sql);
$this->view->msg='已删除WESTDC中多出的元数据!';
} elseif ($delete=='geonetwork') {
//dblink view中删除多条有问题,暂时用单条删除替代
//$sql="delete from geonetworkmetadata where uuid not in (select uuid from metadata)";
$sql="select uuid from geonetworkmetadata where uuid not in (select uuid from metadata)";
$rows=$this->db->fetchAll($sql);
foreach($rows as $row)
{
$this->db->exec($this->db->quoteInto("delete from geonetworkmetadata where uuid=?",$row->uuid));
}
$this->view->msg='已删除GEONETWORK中多出的元数据!';
} elseif ($delete=='water') {
$sql="delete from metadata where uuid not in (select uuid from watergn where schemaid='iso19115') and uuid not in (select uuid from geonetworkmetadata where schemaid='iso19115')";
$this->db->query($sql);
$this->view->msg='已删除WESTDC中多出的元数据!';
} elseif ($thumb=='geonetwork') {
$sql="select g.id as gid,m.uuid,t.* from thumbnail t left join metadata m on t.id=m.id left join geonetworkmetadata g on m.uuid=g.uuid where t.filetype is not null and t.filename is not null";
$rows=$this->db->fetchAll($sql);
foreach($rows as $row) {
$data=file_get_contents($this->view->config->geonetwork->url.'srv/cn/resources.get?access=public&id='.$row->gid.'&fname='.urlencode($row->filename));
$sql="update thumbnail set data=? where id=?";
$this->db->query($sql,array(base64_encode($data),$row->id));
}
$this->view->msg='已成功同步缩略图!';
} elseif ($thumb=='water') {
$sql="select g.id as gid,m.uuid,t.* from watergn g left join metadata m on m.uuid=g.uuid left join thumbnail t on t.id=m.id where t.filetype is not null and t.filename is not null";
$rows=$this->db->fetchAll($sql);
foreach($rows as $row) {
$data=file_get_contents($this->view->config->watergeonetwork->url.'srv/cn/resources.get?access=public&id='.$row->gid.'&fname='.urlencode($row->filename));
$sql="update thumbnail set data=? where id=?";
$this->db->query($sql,array(base64_encode($data),$row->id));
}
$this->view->msg='已成功同步缩略图!';
} elseif ($adminuser=='geonetwork') {
$sql="select id,username,password,email from users";
$rows=$this->db->fetchAll($sql);
foreach($rows as $row) {
$sql="select * from geonetworkusers where id=?";
$r=$this->db->fetchRow($sql,array($row->id));
if ($r) {
$sql="update geonetworkusers set username='$row->username',password=encode(digest(md5('$row->password'),'sha1'),'hex'),email='$row->email' where id=$row->id";
$this->db->query($sql);
} else {
$sql="insert into geonetworkusers (id,username,password,email) values($row->id,'$row->username',encode(digest(md5('$row->password'),'sha1'),'hex'),'$row->email')";
$this->db->query($sql);
}
}
$this->view->msg='已成功同步帐号!';
}
}
function datasetcdAction()
{
$add=(int)$this->_getParam('add');
$edit=(int)$this->_getParam('edit');
$delete=(int)$this->_getParam('delete');
if ($add) {
$form=new DatasetcdForm();
$form->img->setRequired(true);
$form->document->setRequired(true);
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$uploadedData = $form->getValues();
$img = '/'.$form->img->getFileName();
$document='/'.$form->document->getFileName();
$sql="insert into datasetcd (title,size,uuid,img,document,descript) values(?,?,?,?,?,?)";
$this->db->query($sql,array($formdata['title'],$formdata['size'],$formdata['uuid'],$img,$document,$formdata['descript']));
$this->messenger->addMessage('提示信息:您已经成功添加该特色数据集。');
$this->_redirect('/admin/data/datasetcd');
} else {
$form->populate($formdata);
}
}
$this->view->form=$form;
$this->_helper->viewRenderer('datasetcdadd');
} elseif ($edit){
$form=new DatasetcdForm();
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$uploadedData = $form->getValues();
$img = '/'.$form->img->getFileName();
$document='/'.$form->document->getFileName();
$sql="update datasetcd set title=?,size=?,uuid=?,";
if ($form->img->isUploaded()) $sql.="img=?,";
if ($form->document->isUploaded()) $sql.="document=?,";
$sql.="descript=? where id=?";
$param=array($formdata['title'],$formdata['size'],$formdata['uuid']);
if ($form->img->isUploaded()) $param[]=$img;
if ($form->document->isUploaded()) $param[]=$document;
$param[]=$formdata['descript'];
$param[]=$edit;
$this->db->query($sql,$param);
$this->messenger->addMessage('提示信息:您已经编辑添加该特色数据集。');
$this->_redirect('/admin/data/datasetcd');
} else {
$form->populate($formdata);
}
} else {
$sql="select * from datasetcd where id=?";
$formdata=$this->db->fetchRow($sql,array($edit));
$form->populate($formdata);
}
$this->view->form=$form;
$this->_helper->viewRenderer('datasetcdadd');
} elseif ($delete) {
$sql="delete from datasetcd where id=?";
try {
$this->db->query($sql,array($delete));
$this->messenger->addMessage('提示信息:您已经成功删除该特色数据集。');
} catch (Exception $e) {
$this->messenger->addMessage($e->getMessage());
}
$this->_redirect("/admin/data/datasetcd");
}
$select=$this->db->select();
$select->from('datasetcd')->order('id desc');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}
function mdAction()
{
$delete=(int)$this->_getParam('delete');
$down=(int)$this->_getParam('down');
$search = $this->_getParam('search');
$keyword = $this->_getParam('keyword');
$att=$this->_getParam('att');
if ($delete)
{
$sql="delete from metadata where id=?";
try {
$this->db->query($sql,array($delete));
$this->messenger->addMessage('提示信息:您已经成功删除该数据。');
} catch (Exception $e) {
$this->messenger->addMessage($e->getMessage());
}
$this->_redirect("/admin/data/md");
}//删除
elseif($att>0){
$submit=$this->_request->getParam('submit');
$uuid=$this->_request->getParam('uuid');
$atts=$this->_request->getParam('ids');
$addatts=$this->_request->getParam('addatts');
$this->view->id = $att;
$this->view->uuid = $uuid;
if(!empty($addatts))
{
if(empty($submit))
{
$sql = "select title from metadata where uuid='$uuid'";
$re = $this->db->query($sql);
$rows = $re->fetch();
$this->view->id = $att;
$this->view->uuid = $uuid;
$this->view->mdtitle = $rows['title'];
$this->view->thisatt = $rows;
$this->_redirect("/admin/data/attachments/uuid/$uuid/mdtitle/{$rows['title']}");
}
else
{
if(!empty($uuid))
{
foreach($atts as $v)
{
$sql = "insert into mdattach (uuid,id) values ('$uuid','$v')";
try{
$this->db->exec($sql);
$this->messenger->addMessage('成功添加附件:'.$v);
}catch (Exception $e)
{
$this->messenger->addMessage('添加附件失败:'.$v);
}
}
$this->_redirect("/admin/data/md/att/1/uuid/$uuid");
}
}
}//empty($addatts)
else
{
if(!empty($uuid))
{
$sql = "select m.*,a.*,d.title from mdattach m
left join attachments a on m.id = a.id
left join metadata d on m.uuid=d.uuid where m.uuid='$uuid'";
$re = $this->db->query($sql);
$rows = $re->fetchAll();
$sql = "select title from metadata where uuid='$uuid'";
$re = $this->db->query($sql);
$title = $re->fetch();
$this->view->atts=$rows;
$this->view->mdtitle = $title['title'];
$this->_helper->viewRenderer('attmanager');
}
}
}//编辑附件
/*
* 输出打包下载的xml文件
*
* 文件量大时可能出现超时,需要修改超时时间为无限
*/
elseif ($down) {
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
//临时zip文件名
$tmpname="dataxml";
//xml文件存放的缓存目录
$dirName = '../data/import/';
//查询需要创建的文件
$sql = "SELECT md.title,md.uuid,x.* from xml x
LEFT JOIN normalmetadata md ON md.id=x.id";
$sth = $this->db->prepare($sql);
$sth->execute();
$rows = $sth->fetchAll(); //将结果储存,但不使用
//创建zip文件,创建成功后再使用查询结果
$zip = new ZipArchive();
$url = tempnam($this->config->temp->path,$tmpname);//创建临时文件
if( $zip->open($url, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true )
{
throw new Exception("cannot open {$url} for writing.");
}
foreach($rows as $k=>$v)
{
$filename = $dirName.$v['uuid'].'.xml';
//创建xml文件
$handle = fopen($filename,"w");
fwrite($handle,$v['data']);
fclose($handle);
//添加到zip文件
//zip localname 直接使用UUID作为文件名
$zip->addFile($filename,$v['uuid'].".xml");
}
$zip->close();
//zip文件创建完成后删除服务器上的缓存文件,防止发生冗余
foreach($rows as $k=>$v)
{
$filename = $dirName.$v['uuid'].'.xml';
unlink($filename);
}
//输出下载
$content=file_get_contents($url);
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
->setHeader('Content-Disposition','attachment; filename="dataxml.zip"')
->setHeader('Content-Length', strlen($content))
->setHeader('Content-Type','application/force-download')
->setHeader('Content-Type','application/download')
->setHeader('Content-Type','application/zip')
->setHeader('Content-Description','File Transfer')
->setHeader('Content-Transfer-Encoding','binary')
->setHeader('Expires',0)
->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0')
->setHeader('Pragma','public')
->setBody($content);
}//down
else if($search){
if(!empty($keyword))
{
$sql = "select m.*,md.viewed,g.id as gid from metadata m
left join mdstat md on m.uuid=md.uuid
left join geonetworkmetadata g on g.uuid=m.uuid
where m.title like '%$keyword%'
order by m.id desc
";
$re=$this->db->query($sql);
$row=$re->fetchAll();
$paginator = Zend_Paginator::factory($row);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
$this->messenger->addMessage($keyword.' 的搜索结果');
}
else
{
$this->messenger->addMessage('请输入搜索关键字');
$this->_redirect("/admin/data/md");
}
}//search
else{
$select=$this->db->select();
$select->from('metadata')
->joinLeft('mdstat','metadata.uuid=mdstat.uuid','viewed')
->joinLeft('geonetworkmetadata','geonetworkmetadata.uuid=metadata.uuid','id as gid')
->joinLeft('mdstatus','metadata.uuid=mdstatus.uuid','status as mdstatus')
->order('metadata.id desc');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}
}
function commentAction()
{
$delete=(int)$this->_getParam('delete');
if ($delete)
{
$sql="delete from comments where id=?";
try {
$this->db->query($sql,array($delete));
$this->messenger->addMessage('提示信息:您已经成功删除该评论。');
} catch (Exception $e) {
$this->messenger->addMessage($e->getMessage());
}
$this->_redirect("/admin/data/comment");
}
$select=$this->db->select();
$select->from('comments')
->joinLeft('metadata','metadata.uuid=comments.uuid','title')
->order('comments.ts_created desc')
->order('comments.id desc');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}
function newsletterAction()
{
$form=new Zend_Form();
$form->setName('newsletter');
$form->setAttrib('enctype', 'multipart/form-data');
$nlf=new Zend_Form_Element_File('nlf');
$nlf->setLabel('数据通讯')
->setRequired(true)
->setDestination($this->view->config->paths->newsletter)
->addValidator('Count', false, 1) // ensure only 1 file
->addValidator('Size', false, 2048000) // limit to 2M
->addValidator('Extension', false, 'pdf'); // only JPEG, PNG, and GIFs
$submit = new Zend_Form_Element_Submit('submit');
$form->addElements(array($nlf,$submit));
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$uploadedData = $form->getValues();
//自动生成JPG文件
$pdf = $form->nlf->getFileName();
$img = new Imagick($pdf.'[0]');
$img->thumbnailImage(200, 0);
$img->writeImage($this->view->config->paths->newsletter.basename($pdf,'.pdf').'.jpg');
$this->messenger->addMessage('提示信息:您已经成功添加该数据通讯。');
$this->_redirect('/admin/data/newsletter');
}
}
$l=new mydir($this->view->config->paths->newsletter,"newsletter_*.pdf");
$this->view->newsletters=$l->toArray();
$this->view->addHelperPath('helper','Zend_View_Helper_');
rsort($this->view->newsletters);
$this->view->form=$form;
}
function featureAction()
{
$add=(int)$this->_getParam('add');
$edit=(int)$this->_getParam('edit');
$delete=(int)$this->_getParam('delete');
if ($add) {
$form=new DatafeatureForm();
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$uploadedData = $form->getValues();
if (!$form->imgurl) {
$imgurl = '/'.$form->img->getFileName();
} else
$imgurl=$formdata['imgurl'];
$sql="insert into datafeature (title,detailurl,imgurl,description) values(?,?,?,?)";
$this->db->query($sql,array($formdata['title'],$formdata['detailurl'],$imgurl,$formdata['description']));
$this->messenger->addMessage('提示信息:您已经成功添加该特色推荐。');
$this->_redirect('/admin/data/feature');
} else {
$form->populate($formdata);
}
}
$this->view->form=$form;
$this->_helper->viewRenderer('featureadd');
} elseif ($edit){
$form=new DatafeatureForm();
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$uploadedData = $form->getValues();
if (!$form->imgurl) {
$imgurl = '/'.$form->img->getFileName();
} else
$imgurl=$form->imgurl;
$sql="update datafeature set title=?,detailurl=?,imgurl=?,description=? where id=?";
$param=array($formdata['title'],$formdata['detailurl'],$formdata['imgurl'],$formdata['description'],$edit);
$this->db->query($sql,$param);
$this->messenger->addMessage('提示信息:您已经编辑该特色推荐。');
$this->_redirect('/admin/data/feature');
} else {
$form->populate($formdata);
}
} else {
$sql="select * from datafeature where id=?";
$formdata=$this->db->fetchRow($sql,array($edit));
$form->populate($formdata);
}
$this->view->form=$form;
$this->_helper->viewRenderer('featureadd');
} elseif ($delete) {
$sql="delete from datafeature where id=?";
try {
$this->db->query($sql,array($delete));
$this->messenger->addMessage('提示信息:您已经成功删除该特色推荐。');
} catch (Exception $e) {
$this->messenger->addMessage($e->getMessage());
}
$this->_redirect("/admin/data/feature");
}
$select=$this->db->select();
$select->from('datafeature')->order('id desc');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}
/*
* 数据文献管理
*/
function referenceAction()
{
$add=(int)$this->_getParam('add');
$edit=(int)$this->_getParam('edit');
$delete=(int)$this->_getParam('delete');
$uuid=$this->_getParam('uuid');
$search=$this->_getParam('search');
$keyword=$this->_getParam('keyword');
$import=(int)$this->_getParam('import');
$show = $this->_getParam('show');
if ($add) {
$form=new ReferenceForm();
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$sql="select id from reference where reference=?";
$row=$this->db->fetchRow($sql,array(trim($formdata['reference'])));
if (!$row)
{
$sql="insert into reference (reference,link) values(?,?)";
$this->db->query($sql,array(trim($formdata['reference']),trim($formdata['link'])));
$sql="select id from reference where reference=?";
$row=$this->db->fetchRow($sql,array(trim($formdata['reference'])));
}
$sql="insert into mdref (uuid,refid,reftype) values(?,?,?)";
$this->db->query($sql,array(trim($formdata['uuid']),$row['id'],$formdata['reftype']));
$this->messenger->addMessage('提示信息:您已经成功添加该数据文献。');
$this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
}else {
$form->populate($formdata);
}
} else {
if ($uuid)
{
$formdata['uuid']=$uuid;
$form->populate($formdata);
}
}
$this->view->form=$form;
$this->_helper->viewRenderer('referenceadd');
} //添加
else if($show){
$sql = "select mr.id as mdid,mr.refid,r.reference,md.title,md.uuid FROM mdref mr
left join metadata md on md.uuid=mr.uuid
left join reference r on r.id=mr.refid
where mr.uuid='$show';
";
$rs = $this->db->query($sql);
$rows = $rs->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
} //按UUID查看
elseif ($edit){
$form=new ReferenceForm();
if ($this->_request->isPost()) {
$formdata=$this->_request->getPost();
if ($form->isValid($formdata)) {
$sql="select id from reference where reference=? order by id desc";
$rs=$this->db->query($sql,array($formdata['reference']));
$row = $rs->fetch();
if ($row['id']!='')
{
//更新文献信息
$sql="update mdref set refid=?,reftype=? where uuid=? and id=?";
$td = $this->db->query($sql,array($row['id'],$formdata['reftype'],$formdata['uuid'],$edit));
$sql="update reference set reference=?,link=? where id=?";
$this->db->query($sql,array($formdata['reference'],$formdata['link'],$row['id']));
if($td)
{
$this->messenger->addMessage('提示信息:您已经编辑该数据文献。');
$this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
}
}else
{
$sql = "INSERT INTO reference (reference,link) VALUES ('".$formdata['reference']."','".$formdata['link']."') RETURNING id";
$sth = $this->db->prepare($sql);
if($sth->execute())
{
$row = $sth->fetch(PDO::FETCH_ASSOC);
$sql="update mdref set refid=?,reftype=? where uuid=? and id=?";
$td = $this->db->query($sql,array($row['id'],$formdata['reftype'],$formdata['uuid'],$edit));
$this->messenger->addMessage('提示信息:您已经编辑该数据文献。');
$this->_redirect('/admin/data/reference/show/'.$formdata['uuid']);
}else
{
$this->messenger->addMessage('提示信息:文献创建失败,请重试');
$this->_redirect('/admin/data/reference/edit/'.$edit);
}
}
} else {
$form->populate($formdata);
}
} else {
$sql="select m.uuid,r.reference,r.link,m.reftype from reference r left join mdref m on r.id=m.refid where m.id=?";
$formdata=$this->db->fetchRow($sql,array($edit));
$form->populate($formdata);
}
$this->view->form=$form;
$this->_helper->viewRenderer('referenceadd');
} //编辑相关文献
elseif ($delete) {
$sql = "select uuid from mdref where id=$delete";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$sql="delete from mdref where id=?";
try {
$this->db->query($sql,array($delete));
$this->messenger->addMessage('提示信息:您已经成功删除该数据文献。');
} catch (Exception $e) {
$this->messenger->addMessage($e->getMessage());
}
$this->_redirect('/admin/data/reference/show/'.$row['uuid']);
} //删除相关文献
elseif ($import) {
if ($this->_request->isPost()) {
if ($_FILES["ref"]["error"] == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["ref"]["tmp_name"];
$fp = fopen($tmp_name, "rb");
$ref=fread($fp, filesize($tmp_name));
fclose($fp);
$lines=explode("\n",$ref);
foreach($lines as $line)
{
$data=explode(";",$line);
if (count($data)==2)
$link='';
else
$link=$data[2];
$link=$this->db->quote($link);
$sql="insert into reference (reference,link) values(?,".$link.")";
try {
$this->db->exec($this->db->quoteInto($sql,$data[1]));
} catch (Exception $e) {}
$sql="select id from reference where reference=?";
$row=$this->db->fetchRow($this->db->quoteInto($sql,$data[1]));
$sql="insert into mdref (uuid,refid) values(?,".$row['id'].")";
try {
$this->db->exec($this->db->quoteInto($sql,$data[0]));
} catch (Exception $e) {}
}
}//end if
}
$this->_helper->viewRenderer('referenceimport');
} //引用
else if($search){
if(!empty($keyword))
{
$sql="select rf.id as mdid,rf.refid,m.*,r.* from mdref rf
left join metadata m on m.uuid=rf.uuid
left join reference r on r.id=rf.refid
where m.title like '%$keyword%'
order by m.title";
$re=$this->db->query($sql);
$row=$re->fetchAll();
$paginator = Zend_Paginator::factory($row);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
$this->messenger->addMessage($keyword.' 的搜索结果');
}
else
{
$this->messenger->addMessage('请输入搜索关键字');
$this->_redirect("/admin/data/reference");
}
} //搜索
else{
$select=$this->db->select();
$select->from('mdref',array('id as mdid','refid'))
->join('metadata','metadata.uuid=mdref.uuid')
->join('reference','reference.id=mdref.refid')
->order('metadata.title');
$paginator = Zend_Paginator::factory($select);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}//列表
}
/*
* 删除元数据,删除前有确认
*/
function deleteAction()
{
if ($this->_request->isPost()) {
$id = (int)$this->_request->getPost('id');
$del = $this->_request->getPost('del');
if ($del == 'Yes' && $id > 0) {
$md = new MetadataTable();
$where = 'id = ' . $id;
$md->delete($where);
}
$this->_redirect('/data');
} else {
$id = (int)$this->_request->getParam('id');
if ($id > 0) {
$mdt = new MetadataTable();
$this->view->md = $mdt->fetchRow('id='.$id);
}
}
}
/*
* 导入本地元数据
*/
function importAction()
{
$md=new MetadataTable();
$thumb=new ThumbnailTable();
$xmlt=new XmlTable();
$cgt=new CategoryTable();
$cgct=new CategoryCodeTable();
$keyt=new KeywordTable();
$dst=new DatasetSeriesTable();
$seriestable=new SeriesTable();
if ($this->_request->isPost()) {
foreach ($_FILES["xmlfile"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["xmlfile"]["tmp_name"][$key];
$name = $_FILES["xmlfile"]["name"][$key];
$fp = fopen($tmp_name, "rb");
$xml=fread($fp, filesize($tmp_name));
fclose($fp);
$this->import($xml);
//采用UUID为文件名?
//move_uploaded_file($tmp_name, "../data/import/$name");
}//end if
}//foreach
$this->_redirect('/data');
} else {
//do nothing now.
}
}
/*
* 批量处理元数据(元数据保存在服务器的一个目录上)
*/
function batchimportAction()
{
if ($this->_request->isPost()) {
$dir = $this->_request->getPost('directory');
$subdir = $this->_request->getPost('subdir');
$l=new mydir($dir,"*.xml");
$xmlfiles=$l->toArray();
foreach($xmlfiles as $xmlfile)
{
$fp=fopen($dir.'/'.$xmlfile,'rb');
$xml=fread($fp,filesize($dir.'/'.$xmlfile));
fclose($fp);
$this->import($xml);
}
$this->_redirect('/data');
}
}
function datafileimportAction()
{
if ($this->_request->isPost()) {
set_time_limit(0);
$dir = $this->_request->getPost('directory');
if (file_exists($dir.'/dataset.txt'))
{
$fp=fopen($dir.'/dataset.txt','rb');
$ds=fread($fp,filesize($dir.'/dataset.txt'));
fclose($fp);
$ds1=explode("\n",$ds);
for($i=0;$idb->query($sql);
//$sql="insert into dataset (path,uuid) values('".$dpath."','".$duuid."')";
$sql="insert into dataset (path,uuid) values(?,?)";
$this->db->query($sql,array($dpath,$duuid));
$sql="select id from dataset where uuid='".$duuid."'";
$rs=$this->db->fetchRow($sql);
$dsid=$rs["id"];
$fp=fopen($dir.'/'.$duuid.'.txt','rb');
$filep=fread($fp,filesize($dir.'/'.$duuid.'.txt'));
fclose($fp);
$filep1=explode("\n",$filep);
//print $duuid."
";
//print $dpath." ".count($dpatch)."
";
for($j=0;$j";
//$sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(".$dsid.",'".$this->db->escape($fpath)."',".$fsize.",".$fdir.",".$fdepth.")";
$sql="insert into datafile (dsid,filename,filesize,isdir,depth) values(?,?,?,?,?)";
$this->db->query($sql,array($dsid,$fpath,$fsize,$fdir,$fdepth));
}
}
}
}
}
$this->view->msg='已成功处理数据目录信息!';
}
}//datafileimportAction
function sourceAction()
{
$do = $this->_request->getParam('do');
$uuid = $this->_request->getParam('uuid');
$id = $this->_request->getParam('id');
$q = $this->_request->getParam('q');
$search = $this->_request->getParam('search');
if ($do == 'add') {
$redirect = "/admin/data/source/";
if(!empty($_POST['submit']))
{
try{
$title = $this->_request->getParam('title');
$uuid = $this->_request->getParam('uuid');
$code = $this->_request->getParam('code');
$description = $this->_request->getParam('description');
$has_pages = $this->_request->getParam('has_pages');
$has_agreement = $this->_request->getParam('has_agreement');
$data = array(
'title' => $title,
'uuid' => $uuid,
'code' => $code,
'description' => $description,
'has_pages' => $has_pages,
'has_agreement' => $has_agreement
);
if($this->db->insert('source',$data))
{
$this->messenger->addMessage('添加来源信息成功');
$this->_redirect($redirect);
}
}catch(Exception $e){
$this->messenger->addMessage('添加来源信息失败:'.$e->getMessage());
$this->_redirect('/admin/data/source/do/add');
}
}
$this->_helper->viewRenderer('sourceadd');
}// 添加项目来源
else if($do == 'edit' && !empty($id))
{
if(!empty($_POST['submit']))
{
try{
$title = $this->_request->getParam('title');
$uuid = $this->_request->getParam('uuid');
$code = $this->_request->getParam('code');
$description = $this->_request->getParam('description');
$has_pages = $this->_request->getParam('has_pages');
$has_agreement = $this->_request->getParam('has_agreement');
$sql = "update source set title='$title',uuid='$uuid',code='$code',description='$description',has_pages='$has_pages',has_agreement='$has_agreement' where id='$id'";
if($this->db->exec($sql))
{
$this->messenger->addMessage('修改来源信息成功');
$this->_redirect("/admin/data/source/do/edit/id/$id");
}
}catch(Exception $e){
$this->messenger->addMessage('修改来源信息失败:'.$e->getMessage());
$this->_redirect("/admin/data/source/do/edit/id/$id");
}
}
$sql = "select * from source where id='$id'";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$this->view->info = $row;
$this->_helper->viewRenderer('sourceadd');
}// 编辑单条信息
else if($do == 'datasource' && !empty($uuid))
{
$redirect = "/admin/data/source/do/datasource/uuid/$uuid";
$this->view->uuid = $uuid;
$sql = "select md.title,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
left join datasource ds on ds.uuid=md.uuid
left join source s on s.id=ds.sourceid
where md.uuid='$uuid'";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$this->view->info = $row;
if(!empty($_POST['submit']))
{
$sourceid = $this->_request->getParam('sourceid');
if(empty($sourceid))
{
$this->messenger->addMessage('请选择项目来源');
$this->_redirect($redirect);
}
$sql="";
if(empty($row['id']))
{
$sql = "insert into datasource (uuid,sourceid) values ('$uuid','$sourceid')";
}else
{
$sql = "update datasource set uuid='$uuid',sourceid='$sourceid' where id='{$row['id']}'";
}
try{
if($this->db->exec($sql))
{
$this->messenger->addMessage('修改项目来源成功');
$this->_redirect($redirect);
}
else
{
$this->messenger->addMessage('修改项目来源失败');
$this->_redirect($redirect);
}
}catch (Exception $e){
$this->messenger->addMessage('修改项目来源失败:'.$e->getMessage());
$this->_redirect($redirect);
}
}
$wheresql = array();
if(!empty($q) && !empty($search))
{
$this->view->q = $q;
$wheresql[] = " title like '%$q%' ";
}
if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
else $wheresql='';
if($wheresql!='')
{
$wheresql = 'where '.$wheresql;
}
$sql = "select * from source $wheresql order by id desc";
$rs = $this->db->query($sql);
$rows = $rs->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
$this->_helper->viewRenderer('sourceselect');
}// 为元数据选择项目来源
else if($do == 'del' && !empty($id))
{
$redirect = "/admin/data/source/";
$sql = "delete from source where id='$id'";
try{
if($this->db->exec($sql))
{
$this->messenger->addMessage('删除成功');
$this->_redirect($redirect);
}else{
$this->messenger->addMessage('删除失败,可能该数据已不存在');
$this->_redirect($redirect);
}
}catch (Exception $e){
$this->messenger->addMessage('删除失败:'.$e->getMessage());
$this->_redirect($redirect);
}
}// 删除项目来源
else if($do == 'fetch' && !empty($id))
{
$wheresql = array();
$wheresql[] = " ds.sourceid='$id' ";
if(!empty($q) && !empty($search))
{
$this->view->q = $q;
$wheresql[] = " title like '%$q%' ";
}
if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
else $wheresql='';
if($wheresql!='')
{
$wheresql = 'where '.$wheresql;
}
$sql = "select md.title,md.uuid,ds.id,ds.sourceid,s.title as stitle,s.code from metadata md
left join datasource ds on ds.uuid=md.uuid
left join source s on s.id=ds.sourceid
$wheresql
order by id desc";
$rs = $this->db->query($sql);
$rows = $rs->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
$this->_helper->viewRenderer('sourcefetchone');
}//查看某项目来源中的所有元数据
else if($do == 'delsource' && !empty($id))
{
$redirect = "/admin/data/source/do/datasource/uuid/$uuid";
$sql = "delete from datasource where id='$id'";
try{
if($this->db->exec($sql))
{
$this->messenger->addMessage('删除成功');
$this->_redirect($redirect);
}else{
$this->messenger->addMessage('删除失败,可能该数据已不存在');
$this->_redirect($redirect);
}
}catch (Exception $e){
$this->messenger->addMessage('删除失败:'.$e->getMessage());
$this->_redirect($redirect);
}
}// 清除元数据来源记录
elseif ($do=='sync') { //同步数据来源到metadata表
$redirect = "/admin/data/source/";
$sql = "update metadata m set source=s.uuid from source s right join datasource d on s.id=d.sourceid where m.uuid=d.uuid";
if($this->db->exec($sql))
{
$this->messenger->addMessage('成功同步数据来源');
$this->_redirect($redirect);
}else{
$this->messenger->addMessage('同步数据来源失败');
$this->_redirect($redirect);
}
}
else
{
$wheresql = array();
if(!empty($q) && !empty($search))
{
$this->view->q = $q;
$wheresql[] = " title like '%$q%' ";
}
if(count($wheresql>0))$wheresql = join(' and ',$wheresql);
else $wheresql='';
if($wheresql!='')
{
$wheresql = 'where '.$wheresql;
}
$sql = "select * from source $wheresql order by id desc";
$rs = $this->db->query($sql);
$rows = $rs->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
}// 项目来源管理
}//function sourceAction
function attachmentsAction()
{
$submit = $this->_request->getParam('submit');
$add = $this->_request->getParam('add');
$search = $this->_request->getParam('search');
$delete = $this->_request->getParam('delete');
$edit = $this->_request->getParam('edit');
$down = $this->_request->getParam('down');
$uuid = $this->_request->getParam('uuid');
$mdtitle = $this->_request->getParam('mdtitle');
$mdattdel = $this->_request->getParam('mdattdel');
if(!empty($uuid)&&!empty($mdtitle))
{
$this->view->uuid= $uuid;
$this->view->mdtitle=$mdtitle;
}
if($add)
{
$this->_helper->viewRenderer('attachmentsadd');
if(!empty($uuid))
{
$this->view->uuid = $uuid;
}
}//附件添加
else if($mdattdel)
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$sql = "delete from mdattach where uuid=? AND id=?";
$sth = $this->db->prepare($sql);
$ds = $sth->execute(array($uuid,$mdattdel));
if($ds)
{
$data = array("status"=>1); //操作状态代码 : 1=>成功 2=>失败
$this->jsonexit($data);
return true;
}else{
$data = array("error"=>"处理中出现错误");
$this->jsonexit($data);
return true;
}
}
else if($delete)
{
//需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录
$basepath = $this->view->config->upload;
//从数据库获取文件路径
$info = $this->getFileinfo($delete);
$filepath = $basepath.$info['filename'];
$sql = "SELECT * FROM mdattach WHERE id=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($delete));
$rows = $sth->fetchAll();
if(count($rows)>0)
{
$this->messenger->addMessage('删除失败!该文件有对应元数据附件信息,不能直接删除');
$this->_redirect("/admin/data/attachments/");
}
$sql = "SELECT * FROM mdreviewattach WHERE attachid=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($delete));
$rows = $sth->fetchAll();
if(count($rows)>0)
{
$this->messenger->addMessage('删除失败!该文件有对应评审附件信息,不能直接删除');
$this->_redirect("/admin/data/attachments/");
}
if(unlink($filepath))
{
$sql = "delete from attachments where id='$delete'";
if($this->db->exec($sql)>0)
{
$this->messenger->addMessage('删除文件成功');
$this->_redirect("/admin/data/attachments/");
}
}
else
{
$sql = "delete from attachments where id='$delete'";
if($this->db->exec($sql)>0)
{
$this->messenger->addMessage('文件删除失败,仅删除数据库记录,请手动删除文件:'.$info['filename']);
$this->_redirect("/admin/data/attachments/");
}
}
}//删除
else if($edit>0)
{
if(empty($submit))
{
$this->view->info = $this->getFileinfo($edit);
$this->_helper->viewRenderer('attachmentsadd');
}
else
{
$filedesc = $this->_request->getParam('filedesc');
$sql="update attachments set filedesc='$filedesc' where id='$edit'";
if($this->db->exec($sql)>0)
{
$this->messenger->addMessage('编辑成功');
$this->_redirect("/admin/data/attachments/edit/$edit");
}
}
}//编辑
else if($search && $search!='my')
{
$keyword = $this->_request->getParam('keyword');
if(empty($keyword))
{
$this->messenger->addMessage('请输入关键词');
$this->_redirect("/admin/data/attachments/search/1");
}
else
{
$sql="select * from attachments where filedesc like '%$keyword%'";
$re = $this->db->query($sql);
$rows=$re->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
}
}//搜索
else if($search && $search=='my')
{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
$sql="select * from attachments where userid='$userid'";
$re= $this->db->query($sql);
$rows = $re->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}
}//我的附件列表
else if ($down>0)
{
$sql = "select * from attachments where id='$down'";
$re = $this->db->query($sql);
$row = $re->fetch();
$file = new files();
$fullPath = $this->view->config->upload.$row['filename'];
// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
// Determine Content Type
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
$content=file_get_contents($fullPath);
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream')
->setHeader('Content-Disposition','attachment; filename="'.basename($fullPath).'"')
->setHeader('Content-Length', $fsize)
->setHeader('Content-Type','application/force-download')
->setHeader('Content-Type','application/download')
->setHeader('Content-Type',$ctype)
->setHeader('Content-Description','File Transfer')
->setHeader('Content-Transfer-Encoding','binary')
->setHeader('Expires',0)
->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0')
->setHeader('Pragma','public')
->setBody($content);
//$sql = "update attachments set downtimes=downtimes+1 where id='$down'";
//$this->db->exec($sql);
}//附件下载
else
{
$sql="select * from attachments order by id desc";
$re= $this->db->query($sql);
$rows = $re->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(30);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$this->view->paginator=$paginator;
}//所有附件
}//attachments 附件
function uploadAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid = $this->_getParam('uuid');
try{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
}
if(empty($userid)||!is_numeric($userid)){
$msg['error'] = "请先登录";
echo Zend_Json::encode($msg);
exit();
}
if($user->usertype!='administrator')
{
$msg['error'] = "您无权使用此功能";
echo Zend_Json::encode($msg);
exit();
}
$files=new files();
$msg = $files -> upload($this->view->config->upload,$_FILES['Filedata'],empty($uuid)?'file':'md');
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','$userid','$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(empty($uuid) || $this->db->exec($sql))
{
$msg['html'] = $realname.'['. round($filesize/1024,2) .' kb]';
echo Zend_Json::encode($msg);
exit();
}else{
$msg['error'] = '附件上传失败:写入附件表出错';
@unlink($filename);
echo Zend_Json::encode($msg);
exit();
}
}else{
$msg['error'] = '附件上传失败:'.$msg['error'];
@unlink($filename);
echo Zend_Json::encode($msg);
exit();
}
}catch(Exception $e){
$msg['error'] = "错误:".$e->getMessage();
echo Zend_Json::encode($msg);
exit();
}
}// uploadAction ajax上传附件
function getattsAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$uuid = $this->_request->getParam('uuid');
if($uuid!='')
{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
$sql = "select m.*,a.*,d.title from mdattach m
left join attachments a on m.id = a.id
left join metadata d on m.uuid=d.uuid where m.uuid='$uuid'
ORDER BY a.ts_created ASC";
$rs = $this->db->query($sql);
$atts = $rs->fetchAll();
foreach($atts as $k=>$v)
{
$atts[$k]['html']= $v['realname'].'['. round($v['filesize']/1024,2) .' kb]';
}
echo Zend_Json::encode($atts);
exit();
}else
{
exit();
}
}else{
exit();
}
//不输出错误
}//获取附件
/*
获得单个文件的信息
return array row
*/
public function getFileinfo($id){
$sql = "select * from attachments where id='$id'";
$re= $this->db->query($sql);
$row= $re->fetch();
return $row;
}
/*
* 保存XML数据到数据库
*/
private function import($xml)
{
$iso=new ISO19115();
$iso->saveDB($this->db,$xml);
}
/*
* jsonexit() 退出并返回json数据
*
* param array $data 要返回的JSON数据,可以是任意数组
*
* return JSON-response
*/
public function jsonexit($data){
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK));
return true;
}//jsonexit() 退出并返回json数据
}