diff --git a/application/admin/controllers/DataController.php b/application/admin/controllers/DataController.php index a83f97e9..229cc4d4 100755 --- a/application/admin/controllers/DataController.php +++ b/application/admin/controllers/DataController.php @@ -1,1542 +1,1640 @@ -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="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="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)); - $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 (!empty($uuid)) { - //同步单条元数据 - $sql=$this->db->quoteInto("select data,source from geonetworkmetadata 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=='water') { - $sql="select uuid,title 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->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("delete from mdstatus where uuid in (select uuid from metadata where id=?)",array($delete)); - $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) values(?,?)"; - $this->db->query($sql,array(trim($formdata['uuid']),$row['id'])); - $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=? where uuid=? and refid=?"; - $td = $this->db->query($sql,array($row['id'],$formdata['uuid'],$edit)); - 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()) - { - $temp = $sth->fetch(PDO::FETCH_ASSOC); - $sql = "INSERT INTO mdref (uuid,refid) VALUES ('".$formdata['uuid']."','".$temp['id']."')"; - if($this->db->exec($sql)) - { - $sql = "DELETE FROM mdref where uuid='".$formdata['uuid']."' and refid='$edit'"; - @$this->db->exec($sql); - $this->messenger->addMessage('提示信息:您已经编辑该数据文献。'); - $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']); - }else - { - $this->messenger->addMessage('提示信息:文献关联失败,请重试'); - $this->_redirect('/admin/data/reference/edit/'.$edit); - } - }else - { - $this->messenger->addMessage('提示信息:文献创建失败,请重试'); - $this->_redirect('/admin/data/reference/edit/'.$edit); - } - } - } else { - $form->populate($formdata); - } - } else { - $sql="select * from reference r left join mdref m on r.id=m.refid where r.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'); - - 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($delete) - { - - //需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录 - - $basepath = $this->view->config->upload; - - //从数据库获取文件路径 - - $info = $this->getFileinfo($delete); - - $filepath = $basepath.$info['filename']; - - 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'],'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($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'"; - $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); - } -} - +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="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="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)); + $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 (!empty($uuid)) { + //同步单条元数据 + $sql=$this->db->quoteInto("select data,source from geonetworkmetadata 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=='water') { + $sql="select uuid,title 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->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("delete from mdstatus where uuid in (select uuid from metadata where id=?)",array($delete)); + $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{ + $sql = "SELECT md.*,s.viewed,g.id as gid,st.status as mdstatus,ds.id as datasetid FROM metadata md + LEFT JOIN mdstat s ON md.uuid=s.uuid + LEFT JOIN geonetworkmetadata g ON g.uuid=md.uuid + LEFT JOIN mdstatus st ON md.uuid=st.uuid + LEFT JOIN dataset ds ON md.uuid=ds.uuid + ORDER BY md.id DESC"; + $sth = $this->db->prepare($sql); + $sth->execute(); + $rows = $sth->fetchAll(); + + $paginator = Zend_Paginator::factory($rows); + $paginator->setCurrentPageNumber($this->_getParam('page')); + $paginator->setItemCountPerPage($this->view->config->page->max); + $paginator->setView($this->view); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); + $this->view->paginator=$paginator; + } + + } + + /* + * datasetAction() + * 数据存档 + * + */ + function datasetAction() + { + + $ac = $this->_request->getParam('ac'); + + if($ac == "getdataset") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer('md-dataset'); + + $uuid = $this->_request->getParam('uuid'); + $sql = "SELECT * FROM dataset WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + + $this->view->dataset = $row; + $this->view->uuid = $uuid; + } + + if($ac == "update") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->getParam('uuid'); + $host = $this->_getParam('host'); + $path = $this->_getParam('path'); + + $sql = "UPDATE dataset SET host=?,path=? WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $ds = $sth ->execute(array($host,$path,$uuid)); + + if($ds) + { + $data = array("ok"=>1); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>"处理中出现错误"); + $this->jsonexit($data); + return true; + } + } + + if($ac == "add") + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + + $uuid = $this->_request->getParam('uuid'); + $host = $this->_getParam('host'); + $path = $this->_getParam('path'); + + $sql = "SELECT * FROM dataset WHERE uuid=?"; + $sth = $this->db->prepare($sql); + $sth ->execute(array($uuid)); + $row = $sth->fetch(); + if(!empty($row['id'])) + { + $data = array("error"=>"该数据已经有存档信息,不能重复添加"); + $this->jsonexit($data); + return true; + } + + $sql = "INSERT INTO dataset (uuid,host,path) VALUES (?,?,?)"; + $sth = $this->db->prepare($sql); + $ds = $sth ->execute(array($uuid,$host,$path)); + + if($ds) + { + $data = array("ok"=>1); + $this->jsonexit($data); + return true; + }else{ + $data = array("error"=>"处理中出现错误"); + $this->jsonexit($data); + return true; + } + } + + }//datasetAction存档管理 + + 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) values(?,?)"; + $this->db->query($sql,array(trim($formdata['uuid']),$row['id'])); + $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=? where uuid=? and refid=?"; + $td = $this->db->query($sql,array($row['id'],$formdata['uuid'],$edit)); + 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()) + { + $temp = $sth->fetch(PDO::FETCH_ASSOC); + $sql = "INSERT INTO mdref (uuid,refid) VALUES ('".$formdata['uuid']."','".$temp['id']."')"; + if($this->db->exec($sql)) + { + $sql = "DELETE FROM mdref where uuid='".$formdata['uuid']."' and refid='$edit'"; + @$this->db->exec($sql); + $this->messenger->addMessage('提示信息:您已经编辑该数据文献。'); + $this->_redirect('/admin/data/reference/show/'.$formdata['uuid']); + }else + { + $this->messenger->addMessage('提示信息:文献关联失败,请重试'); + $this->_redirect('/admin/data/reference/edit/'.$edit); + } + }else + { + $this->messenger->addMessage('提示信息:文献创建失败,请重试'); + $this->_redirect('/admin/data/reference/edit/'.$edit); + } + } + } else { + $form->populate($formdata); + } + } else { + $sql="select * from reference r left join mdref m on r.id=m.refid where r.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'); + + 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($delete) + { + + //需要删除文件,通过Zend_Registry::get('upload')获得上传文件的根目录 + + $basepath = $this->view->config->upload; + + //从数据库获取文件路径 + + $info = $this->getFileinfo($delete); + + $filepath = $basepath.$info['filename']; + + 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'],'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($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'"; + $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); + } + + public function jsonexit($data){ + $this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(json_encode($data,JSON_NUMERIC_CHECK)); + return true; + } +} + diff --git a/application/admin/views/scripts/data/md-dataset.phtml b/application/admin/views/scripts/data/md-dataset.phtml new file mode 100644 index 00000000..067affe0 --- /dev/null +++ b/application/admin/views/scripts/data/md-dataset.phtml @@ -0,0 +1,99 @@ + + + + +数据存档 + + + + + + + + + + + +
+
+
+ dataset)) + {?> +

主机:

+

路径:

+

+ +

主机:

+

路径:

+

+ +
+
+ + + + + \ No newline at end of file diff --git a/application/admin/views/scripts/data/md.phtml b/application/admin/views/scripts/data/md.phtml index 8c128fd9..c53b856b 100644 --- a/application/admin/views/scripts/data/md.phtml +++ b/application/admin/views/scripts/data/md.phtml @@ -1,64 +1,76 @@ -headTitle($this->config->title->site); - $this->headTitle('后台管理'); - $this->headTitle()->setSeparator(' - '); - $this->headLink()->appendStylesheet('/css/admin.css'); - $this->breadcrumb('首页'); - $this->breadcrumb('后台首页'); - $this->breadcrumb('数据管理'); - $this->breadcrumb('元数据管理'); - $this->breadcrumb()->setSeparator(' > '); -?> -
-partial('data/left.phtml'); ?> -
-
-msg or $this->messages) :?> -
-msg) : ?> -

msg; ?>

-messages): foreach($this->messages as $msg): ?> -

- -
- - -
元数据管理
- - - -下载全部xml元数据 -paginator)): ?> -
- -
- -paginator; ?> -
\ No newline at end of file +headTitle($this->config->title->site); + $this->headTitle('后台管理'); + $this->headTitle()->setSeparator(' - '); + $this->headLink()->appendStylesheet('/css/admin.css'); + $this->breadcrumb('首页'); + $this->breadcrumb('后台首页'); + $this->breadcrumb('数据管理'); + $this->breadcrumb('元数据管理'); + $this->breadcrumb()->setSeparator(' > '); + $this->headScript()->appendFile('/js/jquery-1.7.min.js'); + $this->headScript()->appendFile('/js/jquery.colorbox-min.js'); + $this->headLink()->appendStylesheet('/css/colorbox.css'); +?> +
+partial('data/left.phtml'); ?> +
+
+msg or $this->messages) :?> +
+msg) : ?> +

msg; ?>

+messages): foreach($this->messages as $msg): ?> +

+ +
+ + +
元数据管理
+ + + +下载全部xml元数据 +paginator)): ?> +
+ +
+ +paginator; ?> +
+ \ No newline at end of file