添加了ris导出功能
This commit is contained in:
parent
6ae3223a84
commit
8d89e9f435
|
@ -2,6 +2,7 @@
|
||||||
use Helpers\View as view;
|
use Helpers\View as view;
|
||||||
use Reference\Reference;
|
use Reference\Reference;
|
||||||
use Reference\Ris;
|
use Reference\Ris;
|
||||||
|
use Reference\RisOutput;
|
||||||
use Helpers\dbh;
|
use Helpers\dbh;
|
||||||
use \Files\Files;
|
use \Files\Files;
|
||||||
|
|
||||||
|
@ -1402,9 +1403,29 @@ class Admin_DataController extends Zend_Controller_Action
|
||||||
|
|
||||||
if(!empty($submit))
|
if(!empty($submit))
|
||||||
{
|
{
|
||||||
|
$mode = $this->_getParam('mode');
|
||||||
|
|
||||||
|
$risOutput = new RisOutput();
|
||||||
|
$preData = $risOutput->preRead($mode);
|
||||||
|
|
||||||
|
$risData = $risOutput->processArrayDataToRisData($preData);
|
||||||
|
|
||||||
|
$risText = $risOutput->output($risData);
|
||||||
|
view::Dump($risText);
|
||||||
}
|
}
|
||||||
}//ris output
|
}//ris output
|
||||||
|
|
||||||
|
if($ac == "ristest")
|
||||||
|
{
|
||||||
|
$this->_helper->viewRenderer('ref-ris');
|
||||||
|
$submit = $this->_getParam('submit');
|
||||||
|
|
||||||
|
if(!empty($submit))
|
||||||
|
{
|
||||||
|
$ris = new \Reference\Ris();
|
||||||
|
view::Dump($ris->processRis(NULL,$this->_getParam('ristext')),false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}//文献管理 refAction()
|
}//文献管理 refAction()
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
$this->headTitle($this->config->title->site);
|
||||||
|
$this->headTitle('后台管理');
|
||||||
|
$this->headTitle()->setSeparator(' - ');
|
||||||
|
$this->breadcrumb('<a href="/">首页</a>');
|
||||||
|
$this->breadcrumb('<a href="/admin/data">数据管理</a>');
|
||||||
|
$this->breadcrumb('文献管理');
|
||||||
|
$this->breadcrumb()->setSeparator(' > ');
|
||||||
|
$this->theme->AppendPlus($this,'colorbox');
|
||||||
|
$this->theme->AppendPlus($this,"uploadify");
|
||||||
|
$this->theme->AppendPlus($this,'admin_plugin');
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
table thead tr th {background:#EBF2F6;}
|
||||||
|
</style>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span2">
|
||||||
|
<?= $this->partial('data/left.phtml'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="span10">
|
||||||
|
<div>
|
||||||
|
<?= $this->partial('data/ref-nav.phtml',array('ac'=>$this->ac)); ?>
|
||||||
|
</div>
|
||||||
|
<?php if(!empty($this->error)) { ?>
|
||||||
|
<?= $this->error ?>
|
||||||
|
<?php } ?>
|
||||||
|
<?php if(!empty($this->msg)) { ?>
|
||||||
|
<?= $this->msg ?>
|
||||||
|
<?php } else{ ?>
|
||||||
|
<h3>RIS导出</h3>
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<?php if(!empty($this->years)) { ?>
|
||||||
|
按年份 :
|
||||||
|
<?php foreach($this->years as $k=>$v){ ?>
|
||||||
|
<a class="btn btn-info" href="?field[year]=<?= $v['year'] ?>"><?= empty($v['year']) ? "未知":$v['year'] ?>(<?= $v['num'] ?>)</a>
|
||||||
|
<?php } ?>
|
||||||
|
<hr />
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
其它方式:<a class="btn btn-info" href="?submit=1&mode=all">全部</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //页面内容 -->
|
|
@ -575,4 +575,26 @@ class Reference
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获得标签
|
||||||
|
public function getTagsByReference($id,$single = false)
|
||||||
|
{
|
||||||
|
if(is_numeric($id))
|
||||||
|
{
|
||||||
|
$sql = "SELECT * FROM {$this->table->reference_tag} WHERE id=$id";
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
if(!$single)
|
||||||
|
{
|
||||||
|
return $rs->fetchAll();
|
||||||
|
}else{
|
||||||
|
foreach($rows = $rs->fetchAll() as $k=>$v)
|
||||||
|
{
|
||||||
|
$rows[$k] = (string)$v['tag'];
|
||||||
|
}
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
<?php
|
||||||
|
namespace Reference;
|
||||||
|
|
||||||
|
use \Helpers\View as view;
|
||||||
|
use \Helpers\dbh;
|
||||||
|
//use \Reference\Listener\RisOutputListener as Listener;
|
||||||
|
use \Files\Files;
|
||||||
|
use \Reference\Reference;
|
||||||
|
use \Reference\Ris;
|
||||||
|
use \LibRIS\RISReader;
|
||||||
|
use \LibRIS\RISTags;
|
||||||
|
use \LibRIS\RISWriter;
|
||||||
|
|
||||||
|
class RisOutput
|
||||||
|
{
|
||||||
|
private $db; //传入PDO对象.
|
||||||
|
private $config; //站点设置
|
||||||
|
private $dbh;
|
||||||
|
|
||||||
|
protected $events = NULL;
|
||||||
|
public $table;
|
||||||
|
public $ris_records = NULL;
|
||||||
|
protected $ris;
|
||||||
|
public $attr;
|
||||||
|
public $attr_flip;
|
||||||
|
|
||||||
|
function __construct($db = NULL,$mail = NULL)
|
||||||
|
{
|
||||||
|
if(empty($db))
|
||||||
|
{
|
||||||
|
$this->db = \Zend_Registry::get('db');
|
||||||
|
}else{
|
||||||
|
$this->db = $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->config = \Zend_Registry::get('config');
|
||||||
|
|
||||||
|
//$Listener = new Listener();
|
||||||
|
//@$this->events()->attachAggregate($Listener);
|
||||||
|
|
||||||
|
$this->table = new \Helpers\Table();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function events(\Zend_EventManager_EventCollection $events = NULL)
|
||||||
|
{
|
||||||
|
if ($events !== NULL) {
|
||||||
|
$this->events = $events;
|
||||||
|
} elseif ($this->events === NULL) {
|
||||||
|
$this->events = new \Zend_EventManager_EventManager(__CLASS__);
|
||||||
|
}
|
||||||
|
return $this->events;
|
||||||
|
}
|
||||||
|
|
||||||
|
//读取数据
|
||||||
|
public function preRead($mode = "all")
|
||||||
|
{
|
||||||
|
if($mode == "all")
|
||||||
|
{
|
||||||
|
$sql = "SELECT * FROM {$this->table->reference} ORDER BY year DESC,title ASC,id ASC";
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
return $rs->fetchAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}//preRead
|
||||||
|
|
||||||
|
//将数据组成RIS数组格式
|
||||||
|
public function processArrayDataToRisData($arrayData,$risPrior = true,$mixAuthor = true,$mixTags = true)
|
||||||
|
{
|
||||||
|
if(!is_array($arrayData))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$risData = array();
|
||||||
|
|
||||||
|
if($risPrior === true)
|
||||||
|
{
|
||||||
|
$risReader = new RISReader();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->ris = new Ris();
|
||||||
|
$this->attr = $this->ris->attr;
|
||||||
|
$this->attr_flip = array_flip($this->ris->attr);
|
||||||
|
unset($this->ris);
|
||||||
|
|
||||||
|
$this->reference = new Reference();
|
||||||
|
|
||||||
|
foreach($arrayData as $k=>$v)
|
||||||
|
{
|
||||||
|
$risData[$k] = $this->transformToRis($v);
|
||||||
|
if($mixAuthor === true || $mixTags === true)
|
||||||
|
{
|
||||||
|
if($mixAuthor === true)
|
||||||
|
{
|
||||||
|
$author = $this->reference->getAuthorByReference($v['id'],true);
|
||||||
|
if(is_array($author) && count($author)>0)
|
||||||
|
{
|
||||||
|
$risData[$k] = array_merge($risData[$k],array("AU"=>$author));
|
||||||
|
}
|
||||||
|
unset($author);
|
||||||
|
}//mixAuthor
|
||||||
|
|
||||||
|
if($mixTags === true)
|
||||||
|
{
|
||||||
|
$tags = $this->reference->getTagsByReference($v['id'],true);
|
||||||
|
if(is_array($tags) && count($tags) > 0)
|
||||||
|
{
|
||||||
|
$risData[$k] = array_merge($risData[$k],array("KW"=>$tags));
|
||||||
|
}
|
||||||
|
unset($tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_array($risData[$k]) || count($risData[$k]) < 1)
|
||||||
|
{
|
||||||
|
unset($risData[$k]);
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($arrayData[$k]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $risData;
|
||||||
|
}//processArrayDataToRisData
|
||||||
|
|
||||||
|
//单条记录的整编
|
||||||
|
public function transformToRis($record)
|
||||||
|
{
|
||||||
|
$arr = array();
|
||||||
|
|
||||||
|
foreach($record as $k=>$v)
|
||||||
|
{
|
||||||
|
if(!empty($v))
|
||||||
|
{
|
||||||
|
if(isset($this->attr_flip[$k]))
|
||||||
|
{
|
||||||
|
//echo $k ."-". $this->attr_flip[$k] . '-' .$v;
|
||||||
|
//echo "<br />";
|
||||||
|
$arr[$this->attr_flip[$k]] = array(0=>$v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//echo "<br />";
|
||||||
|
return $arr;
|
||||||
|
}//transformToRis
|
||||||
|
|
||||||
|
//输出成文件
|
||||||
|
public function output($risData)
|
||||||
|
{
|
||||||
|
$risWirte = new RISWriter();
|
||||||
|
return @$risWirte->writeRecords($risData);
|
||||||
|
}//output
|
||||||
|
}
|
Loading…
Reference in New Issue