637 lines
24 KiB
PHP
Executable File
637 lines
24 KiB
PHP
Executable File
<?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()
|
||
{
|
||
$this->view->messages = $this->messenger->getMessages();
|
||
}
|
||
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');
|
||
$adminuser=$this->_request->getParam('adminuser');
|
||
$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='已成功同步缩略图!';
|
||
} elseif ($adminuser=='geonetwork') {
|
||
$sql="select id,username,password,email from users where usertype='administrator'";
|
||
$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='$row->password',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','$row->password','$row->email')";
|
||
$this->db->query($sql);
|
||
}
|
||
}
|
||
$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 set status=4 where status=3 and userid=?";
|
||
$this->db->query($sql,array($start));
|
||
//提示信息
|
||
$this->messenger->addMessage('提示信息:该离线数据已经开始处理,请在处理完成后点击“完成”。');
|
||
$this->_redirect('/admin/data/offline');
|
||
} elseif ($finish) {
|
||
$sql="begin;update dataorder set status=5,ts_approved=now() where status=4 and 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 set status=-1 where (status=3 or status=4) and 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()
|
||
{
|
||
$add=(int)$this->_getParam('add');
|
||
$edit=(int)$this->_getParam('edit');
|
||
$delete=(int)$this->_getParam('delete');
|
||
if ($add) {
|
||
$form=new OfflinelogForm();
|
||
$form->pdf->setDestination($this->view->config->offline->savepath);
|
||
if ($this->_request->isPost()) {
|
||
$formdata=$this->_request->getPost();
|
||
if ($form->isValid($formdata)) {
|
||
$uploadedData = $form->getValues();
|
||
$pdf = basename($form->pdf->getFileName());
|
||
$sql="insert into offlineapp (username,email,unit,phone,address,postcode,project,pdflink,datalist,ts_approved) values(?,?,?,?,?,?,?,?,?,?)";
|
||
$this->db->query($sql,array($formdata['username'],$formdata['email'],$formdata['unit'],$formdata['phone'],$formdata['address'],$formdata['postcode'],$formdata['project'],$pdf,$formdata['datalist'],$formdata['ts_approved']));
|
||
$this->messenger->addMessage('提示信息:您已经成功添加该离线服务记录。');
|
||
$this->_redirect('/admin/data/offline');
|
||
} else {
|
||
$form->populate($formdata);
|
||
}
|
||
}
|
||
$this->view->form=$form;
|
||
$this->_helper->viewRenderer('offlineadd');
|
||
} elseif ($edit){
|
||
$form=new OfflinelogForm();
|
||
$form->pdf->setRequired(false);
|
||
if ($this->_request->isPost()) {
|
||
$formdata=$this->_request->getPost();
|
||
if ($form->isValid($formdata)) {
|
||
$uploadedData = $form->getValues();
|
||
$pdf = basename($form->pdf->getFileName());
|
||
$sql="update offlineapp set username=?,email=?,unit=?,phone=?,address=?,postcode=?,project=?,";
|
||
if ($form->pdf->isUploaded()) $sql.="pdflink=?,";
|
||
$sql.="datalist=?,ts_approved=? where id=?";
|
||
$param=array($formdata['username'],$formdata['email'],$formdata['unit'],$formdata['phone'],$formdata['address'],$formdata['postcode'],$formdata['project']);
|
||
if ($form->pdf->isUploaded()) $param[]=$pdf;
|
||
$param[]=$formdata['datalist'];
|
||
$param[]=$formdata['ts_approved'];
|
||
$param[]=$edit;
|
||
$this->db->query($sql,$param);
|
||
$this->messenger->addMessage('提示信息:您已经编辑添加该记录。');
|
||
$this->_redirect('/admin/data/offline');
|
||
} else {
|
||
$form->populate($formdata);
|
||
}
|
||
} else {
|
||
$sql="select * from offlineapp where id=?";
|
||
$formdata=$this->db->fetchRow($sql,array($edit));
|
||
$form->submit->setLabel('保存');
|
||
$form->populate($formdata);
|
||
}
|
||
$this->view->form=$form;
|
||
$this->_helper->viewRenderer('offlineadd');
|
||
|
||
} elseif ($delete) {
|
||
$sql="delete from offlineapp where id=?";
|
||
try {
|
||
$this->db->query($sql,array($delete));
|
||
$this->messenger->addMessage('提示信息:您已经成功删除该服务记录。');
|
||
} catch (Exception $e) {
|
||
$this->messenger->addMessage($e->getMessage());
|
||
}
|
||
$this->_redirect("/admin/data/offline");
|
||
}
|
||
$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) {
|
||
//数据重复插入,此处忽略所有错误
|
||
}
|
||
}
|
||
}
|
||
|