559 lines
20 KiB
PHP
559 lines
20 KiB
PHP
|
<?php
|
|||
|
class Admin_DataController extends Zend_Controller_Action
|
|||
|
{
|
|||
|
function preDispatch()
|
|||
|
{
|
|||
|
$this->db=Zend_Registry::get('db');
|
|||
|
$this->view->config = Zend_Registry::get('config');
|
|||
|
$this->messenger=$this->_helper->getHelper('FlashMessenger');
|
|||
|
$this->view->messages = $this->messenger->getMessages();
|
|||
|
}
|
|||
|
function postDispatch()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
function indexAction()
|
|||
|
{
|
|||
|
//其他连接
|
|||
|
}
|
|||
|
|
|||
|
//提供和GEONETWORK中的元数据的同步功能
|
|||
|
//提供双向同步功能,但只处理ISO 19115格式的元数据?
|
|||
|
function syncAction()
|
|||
|
{
|
|||
|
$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');
|
|||
|
$uuid=$this->_request->getParam('uuid');
|
|||
|
if ($this->_request->isPost()) $uuid=$this->_request->getPost('uuid');
|
|||
|
//$uuid=$this->_request->getParam('uuid');
|
|||
|
if ($source=="geonetwork" && empty($uuid) ) {
|
|||
|
//从geonetwork向WESTDC同步
|
|||
|
$sql="select uuid,data from geonetworkmetadata where schemaid='iso19115'";
|
|||
|
$rs=$this->db->fetchAll($sql);
|
|||
|
foreach($rs as $gmd) {
|
|||
|
$this->import($gmd->data);
|
|||
|
}
|
|||
|
$this->view->msg='成功同步元数据!';
|
|||
|
} elseif (!empty($uuid)) {
|
|||
|
//同步单条元数据
|
|||
|
$sql=$this->db->quoteInto("select data from geonetworkmetadata where uuid=?",$uuid);
|
|||
|
if ($rs=$this->db->fetchRow($sql)) {
|
|||
|
$this->import($rs->data);
|
|||
|
$this->view->msg='成功同步元数据:'.$uuid;
|
|||
|
} else $this->view->msg='不存在此元数据:'.$uuid;
|
|||
|
} 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 ($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='已成功同步缩略图!';
|
|||
|
}
|
|||
|
}
|
|||
|
//离线数据申请管理
|
|||
|
function offlineappAction()
|
|||
|
{
|
|||
|
$view=(int)$this->_getParam('view');
|
|||
|
$start=(int)$this->_getParam('start');
|
|||
|
$finish=(int)$this->_getParam('finish');
|
|||
|
$cancel=(int)$this->_getParam('cancel');
|
|||
|
if ($view) {
|
|||
|
//查看此次申请的具体内容,包括指向的地址
|
|||
|
} elseif ($start) {
|
|||
|
$sql="update dataorder d set d.status=4 where d.status=3 and d.userid=?";
|
|||
|
$this->db->query($sql,array($start));
|
|||
|
//提示信息
|
|||
|
$this->messenger->addMessage('提示信息:该离线数据已经开始处理,请在处理完成后点击“完成”。');
|
|||
|
$this->_redirect('/admin/data/offline');
|
|||
|
} elseif ($finish) {
|
|||
|
$sql="begin;update dataorder d set d.status=5,d.ts_approved=now() where d.status=4 and d.userid=?;";
|
|||
|
$sql.="update offlineapp set ts_approved=now() where userid=? and ts_approved is null;commit;";
|
|||
|
try {
|
|||
|
$this->db->query($sql,array($finish,$finish));
|
|||
|
$this->messenger->addMessage('提示信息:该离线数据已经开始处理,请在处理完成后点击“完成”。');
|
|||
|
} catch (Exception $e) {
|
|||
|
//提示信息
|
|||
|
$this->messenger->addMessage($e->getMessage());
|
|||
|
$this->messenger->addMessage('提示信息:该数据有可能还没有开始处理,请先开始。');
|
|||
|
}
|
|||
|
$this->_redirect('/admin/data/offline');
|
|||
|
} elseif ($cancel) {
|
|||
|
//取消=删除?
|
|||
|
//需谨慎操作
|
|||
|
$sql="begin;update dataorder d set d.status=-1 where (d.status=3 or d.status=4) and d.userid=?;";
|
|||
|
$sql.="delete from offlineapp where id=?;commit;";
|
|||
|
//todo: 此处有问题,暂时跳过
|
|||
|
}
|
|||
|
|
|||
|
$select=$this->db->select();
|
|||
|
$select->from('offlineapp')->where('ts_approved is null')->where('pdflink is not null')->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 offlineAction()
|
|||
|
{
|
|||
|
$select=$this->db->select();
|
|||
|
$select->from('offlineapp')->where('ts_approved is not null')->where('pdflink is not null')->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 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,url,img,document,descript) values(?,?,?,?,?,?)";
|
|||
|
$this->db->query($sql,array($formdata['title'],$formdata['size'],$formdata['url'],$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=?,url=?,";
|
|||
|
if ($form->img->isUploaded()) $sql.="img=?,";
|
|||
|
if ($form->document->isUploaded()) $sql.="document=?,";
|
|||
|
$sql.="descript=? where id=?";
|
|||
|
$param=array($formdata['title'],$formdata['size'],$formdata['url']);
|
|||
|
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');
|
|||
|
if ($delete)
|
|||
|
{
|
|||
|
$sql="delete from metadata where id=?";
|
|||
|
try {
|
|||
|
$this->db->query($sql,array($delete));
|
|||
|
$this->messenger->addMessage('提示信息:您已经成功删除该数据。');
|
|||
|
} catch (Exception $e) {
|
|||
|
$this->messenger->addMessage($e->getMessage());
|
|||
|
}
|
|||
|
$this->_redirect("/admin/data/md");
|
|||
|
}
|
|||
|
$select=$this->db->select();
|
|||
|
$select->from('metadata')
|
|||
|
->joinLeft('mdstat','metadata.uuid=mdstat.uuid','viewed')
|
|||
|
->joinLeft('geonetworkmetadata','geonetworkmetadata.uuid=metadata.uuid','id as gid')
|
|||
|
->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.uuid 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=$form->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 datasetcd set title=?,detailurl=?,imgurl=?,descrition=? where id=?";
|
|||
|
$param=array($formdata['title'],$formdata['detailurl'],$formdata['imgurl'],$formdata['descript'],$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 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('/metadata');
|
|||
|
} 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');
|
|||
|
}
|
|||
|
}
|
|||
|
/*
|
|||
|
* 保存XML数据到数据库
|
|||
|
*/
|
|||
|
private function import($xml)
|
|||
|
{
|
|||
|
$iso=new ISO19115();
|
|||
|
$iso->loadXML($xml);
|
|||
|
$md=new MetadataTable();
|
|||
|
$thumb=new ThumbnailTable();
|
|||
|
$xmlt=new XmlTable();
|
|||
|
$cgt=new CategoryTable();
|
|||
|
$cgct=new CategoryCodeTable();
|
|||
|
$keyt=new KeywordTable();
|
|||
|
$dst=new DatasetSeriesTable();
|
|||
|
$seriestable=new SeriesTable();
|
|||
|
$db=$seriestable->getAdapter();
|
|||
|
//save metadata
|
|||
|
//先删除已有元数据,然后再插入新数据
|
|||
|
$sql="delete from metadata where uuid=?";
|
|||
|
$this->db->query($sql,array($iso->uuid));
|
|||
|
$row=$md->createRow();
|
|||
|
$trow=$thumb->createRow();
|
|||
|
$row->uuid=$iso->uuid;
|
|||
|
$row->title=$iso->resTitle;
|
|||
|
$row->description=$iso->idAbs;
|
|||
|
$row->citation=$iso->citation;
|
|||
|
$row->fileformat=$iso->fileformat;
|
|||
|
$row->projection=$iso->projection;
|
|||
|
$row->author=$iso->author;
|
|||
|
$row->datatype=$iso->datatype;
|
|||
|
$row->filesize=$iso->filesize;
|
|||
|
$row->ts_created=$iso->mdDateSt;
|
|||
|
$row->timebegin=$iso->timebegin;
|
|||
|
$row->timeend=$iso->timeend;
|
|||
|
$row->west=$iso->geoBox['w'];
|
|||
|
$row->south=$iso->geoBox['s'];
|
|||
|
$row->north=$iso->geoBox['n'];
|
|||
|
$row->east=$iso->geoBox['e'];
|
|||
|
//生成空白统计数据
|
|||
|
$sql=$db->quoteInto("select * from mdstat where uuid=?",$iso->uuid);
|
|||
|
if (!$db->fetchRow($sql))
|
|||
|
{
|
|||
|
$sql="insert into mdstat (uuid) values(?)";
|
|||
|
$db->query($sql,array($iso->uuid));
|
|||
|
}
|
|||
|
try {
|
|||
|
$id=$row->save();
|
|||
|
//处理在线资源
|
|||
|
if ($iso->onlineresource) foreach($iso->onlineresource as $resource)
|
|||
|
{
|
|||
|
$sql="insert into onlineresource (uuid,linkage,protocol,name,description) values(?,?,?,?,?)";
|
|||
|
$db->query($sql,array($iso->uuid,$resource['linkage'],$resource['protocol'],$resource['name'],$resource['description']));
|
|||
|
}
|
|||
|
//处理缩略图
|
|||
|
if (!empty($iso->thumbnail)) {
|
|||
|
$trow->id=$id;
|
|||
|
$trow->data=$iso->thumbnail;
|
|||
|
$trow->filetype='jpg';
|
|||
|
$trow->save();
|
|||
|
} elseif ($iso->graph) {
|
|||
|
$trow->id=$id;
|
|||
|
//$trow->data=$iso->graph['data'];
|
|||
|
$trow->filetype=$iso->graph['filetype'];
|
|||
|
$trow->filedesc=$iso->graph['filedesc'];
|
|||
|
$trow->filename=$iso->graph['filename'];
|
|||
|
$trow->save();
|
|||
|
}
|
|||
|
//todo:处理关键词
|
|||
|
//1:N relation
|
|||
|
foreach($iso->keyword as $keytype=>$keys)
|
|||
|
{
|
|||
|
foreach($keys as $key)
|
|||
|
{
|
|||
|
$row=$keyt->createRow();
|
|||
|
$row->id=$id;
|
|||
|
//统一转换为大写
|
|||
|
$row->keyword=strtoupper($key);
|
|||
|
$row->keytype=$keytype;
|
|||
|
$row->save();
|
|||
|
}
|
|||
|
}
|
|||
|
//todo:处理数据集序列
|
|||
|
//M:N relation
|
|||
|
if ($iso->datasetSeries) foreach($iso->datasetSeries as $ds)
|
|||
|
{
|
|||
|
$where=$db->quoteInto('name = ?',$ds['seriesName']);
|
|||
|
$trow=$seriestable->fetchRow($where);
|
|||
|
if ($trow)
|
|||
|
$sid=$trow->id;
|
|||
|
else {
|
|||
|
$trow=$seriestable->createRow();
|
|||
|
$trow->name=$ds['seriesName'];
|
|||
|
$sid=$trow->save();
|
|||
|
}
|
|||
|
$row=$dst->createRow();
|
|||
|
$row->id=$id;
|
|||
|
$row->sid=$sid;
|
|||
|
$row->save();
|
|||
|
}
|
|||
|
//处理XML入库
|
|||
|
$row=$xmlt->createRow();
|
|||
|
$row->id=$id;
|
|||
|
$row->data=$xml;
|
|||
|
$row->save();
|
|||
|
//处理数据分类
|
|||
|
foreach($iso->tpCat as $cat){
|
|||
|
if (is_numeric($cat)) {
|
|||
|
$row=$cgt->createRow();
|
|||
|
$row->id=$id;
|
|||
|
$row->code=(int)$cat;
|
|||
|
$row->save();
|
|||
|
} else {
|
|||
|
//是字符串,geonetwork会采用这种模式
|
|||
|
//从categorycode表中查找其对应的code
|
|||
|
$where=$db->quoteInto('name= ?',trim($cat));
|
|||
|
$trow=$cgct->fetchRow($where);
|
|||
|
if ($trow) {
|
|||
|
$row=$cgt->createRow();
|
|||
|
$row->id=$id;
|
|||
|
$row->code=$trow->code;
|
|||
|
$row->save();
|
|||
|
}
|
|||
|
//$db=$cgt->getAdapter();
|
|||
|
//$sql="insert into category (id,code) values($id,(select code from categorycode where name='$cat'))";
|
|||
|
//$db->query($sql);
|
|||
|
}
|
|||
|
}
|
|||
|
$iso->save("../data/import/$iso->uuid.xml");
|
|||
|
} catch (Exception $e) {
|
|||
|
//数据重复插入,此处忽略所有错误
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|