177 lines
3.3 KiB
PHP
177 lines
3.3 KiB
PHP
<?php
|
|
namespace Westdc\MetadataSync\Plugin;
|
|
|
|
use Sookon\Helpers\View as view;
|
|
use Sookon\Helpers\Dbh as dbh;
|
|
use Sookon\Helpers\PDO;
|
|
use Sookon\Helpers\Db;
|
|
use Sookon\Helpers\Config;
|
|
use Sookon\Helpers\Table;
|
|
use Zend\Http\PhpEnvironment\Request;
|
|
use Westdc\MetadataSync\SyncPluginInterface;
|
|
|
|
class Qinghaihu implements SyncPluginInterface
|
|
{
|
|
private $db; //传入PDO对象
|
|
private $target; //目标数据库
|
|
private $table;
|
|
|
|
public $url = "http://deep.qherc.org"; //outlink表中得链接
|
|
public $last_sync;
|
|
public $source_type;
|
|
public $data;
|
|
|
|
protected $events = NULL;
|
|
|
|
function __construct($db)
|
|
{
|
|
$this->db = $db;
|
|
new Db($this->target);
|
|
//$this->target = new PDO;
|
|
}
|
|
|
|
public function check()
|
|
{
|
|
try{
|
|
$ol = new \Westdc\Metadata\Outlink;
|
|
$ol->opt->limit = 1;
|
|
$ol->opt->order = "ol.ts_created";
|
|
$ol->opt->sort = "DESC";
|
|
$ol->opt->where = array("ol.host='{$this->url}'");
|
|
$row = $ol->fetchAllOutlink();
|
|
|
|
if(isset($row['ts_created']))
|
|
{
|
|
$this->last_sync = $row['ts_created'];
|
|
}else{
|
|
$this->last_sync = 0;
|
|
}
|
|
|
|
return true;
|
|
}catch(Exception $e)
|
|
{
|
|
return $e->getMessage();
|
|
}
|
|
|
|
}
|
|
|
|
public function sync()
|
|
{
|
|
$this->getMetadataFromSource();
|
|
|
|
return $this->processData();
|
|
|
|
if(isset($this->last_sync))
|
|
{
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function processData()
|
|
{
|
|
if($this->source_type == "dataTable")
|
|
{
|
|
return $this->processDataFromDataTable();
|
|
}
|
|
|
|
if($this->source_type == "xml")
|
|
{
|
|
return $this->processDataFromXmlDocument();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getMetadataFromSource()
|
|
{
|
|
if(!empty($this->last_sync))
|
|
{
|
|
$sql = "SELECT x.* FROM xml x where x.id in (select id from normalmetadata)";
|
|
}else{
|
|
$sql = "SELECT x.* FROM xml x
|
|
LEFT JOIN normalmetadata m ON x.id=m.id
|
|
WHERE m.ts_created > '{$this->last_sync}'";
|
|
}
|
|
$rs = $this->db->query($sql);
|
|
|
|
$this->data = $rs->fetchAll();
|
|
|
|
$this->source_type = "xml";
|
|
}
|
|
|
|
public function processDataFromXmlDocument()
|
|
{
|
|
foreach($this->data as $k=>$v)
|
|
{
|
|
$isoxml = new \Westdc\MetadataXml\ISO19115;
|
|
$isoxml->saveDB($this->target,$v['data']);
|
|
|
|
$this->insertToMdoutlink($isoxml->uuid);
|
|
$this->insertToThumbnail($v['id']);
|
|
|
|
unset($isoxml);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function processDataFromDataTable()
|
|
{
|
|
|
|
|
|
foreach($this->data as $k=>$v)
|
|
{
|
|
$data = array(
|
|
'uuid' => $v['uuid'],
|
|
'title' => $v['title'],
|
|
'description' => $v['description'],
|
|
);
|
|
}
|
|
}
|
|
|
|
//写入 mdoutlink表
|
|
public function insertToMdoutlink($uuid)
|
|
{
|
|
$sql = "DELETE FROM mdoutlink WHERE uuid=?";
|
|
$rs = $this->target->query($sql,array($uuid));
|
|
|
|
$data = array(
|
|
'uuid' => $uuid,
|
|
'url' => $this->url."/data/".$uuid,
|
|
'status' => 1,
|
|
'host' => $this->url
|
|
);
|
|
$dbh = new dbh();
|
|
$dbh->insert("mdoutlink",$data);
|
|
}
|
|
|
|
//读取缩略图并写入 thumbnail
|
|
public function insertToThumbnail($id)
|
|
{
|
|
$sql = "SELECT * FROM thumbnail WHERE id=$id";
|
|
$rs = $this->db->query($sql);
|
|
$row = $rs->fetch();
|
|
|
|
if($row)
|
|
{
|
|
$data = array(
|
|
'id' => $row['id'],
|
|
'data' => $row['data'],
|
|
'filetype' => $row['filetype'],
|
|
'filename' => $row['filename'],
|
|
'filedesc' => $row['filedesc']
|
|
);
|
|
$dbh = new dbh();
|
|
$dbh->insert("thumbnail",$data);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |