大更新,1投稿系统参考文献的类型增加功能,,,2官网数据库功能
This commit is contained in:
62
application/master/service/push/EbscoPusher.php
Normal file
62
application/master/service/push/EbscoPusher.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace app\master\service\push;
|
||||
|
||||
use app\master\service\XmlBuilder;
|
||||
|
||||
/**
|
||||
* EBSCO 推送器
|
||||
* 为每篇文章生成 XML,连同 PDF 通过 FTP 上传到 EBSCO。
|
||||
* 逻辑迁移自 Datebase::pushXmlToEp / pushFtpForEp。
|
||||
*/
|
||||
class EbscoPusher extends AbstractPusher
|
||||
{
|
||||
public function code()
|
||||
{
|
||||
return 'ebsco';
|
||||
}
|
||||
|
||||
public function label()
|
||||
{
|
||||
return 'EBSCO';
|
||||
}
|
||||
|
||||
public function pushStage($stage_id, array $options = [])
|
||||
{
|
||||
$stage_info = $this->journal_stage_obj->where("journal_stage_id", $stage_id)->find();
|
||||
$list = $this->article_obj->where("journal_stage_id", $stage_id)->select();
|
||||
$journal_info = $this->journal_obj->where("journal_id", $stage_info['journal_id'])->find();
|
||||
$count = 0;
|
||||
foreach ($list as $v) {
|
||||
$local_file = XmlBuilder::forArticle($v['article_id']);
|
||||
$file = substr($v['doi'], strpos($v['doi'], "/") + 1) . ".xml";
|
||||
$remote_file = "/" . $journal_info['title'] . "/" . $stage_info['stage_year'] . "v" . $stage_info['stage_vol'] . "n" . $stage_info['stage_no'] . "-" . $file;
|
||||
$this->pushFtp($remote_file, $local_file);
|
||||
$localPdf = ROOT_PATH . "public/articlePDF/" . $v['file_pdf'];
|
||||
$remotePdf = "/" . $journal_info['title'] . "/" . $stage_info['stage_year'] . "v" . $stage_info['stage_vol'] . "n" . $stage_info['stage_no'] . "-" . substr($v['doi'], strpos($v['doi'], "/") + 1) . ".pdf";
|
||||
$this->pushFtp($remotePdf, $localPdf);
|
||||
$count++;
|
||||
}
|
||||
return PushResult::success("EBSCO 已上传 {$count} 篇文章的 XML/PDF");
|
||||
}
|
||||
|
||||
private function pushFtp($remote_file, $local_file)
|
||||
{
|
||||
$cred = $this->cred('ebsco');
|
||||
$con = ftp_connect($cred['host'], $cred['port']);
|
||||
if (!$con) {
|
||||
throw new \Exception('EBSCO FTP 连接失败');
|
||||
}
|
||||
$res = ftp_login($con, $cred['user'], $cred['pass']);
|
||||
if (!$res) {
|
||||
ftp_close($con);
|
||||
throw new \Exception('EBSCO FTP 登录失败');
|
||||
}
|
||||
ftp_pasv($con, true);
|
||||
$data = ftp_put($con, $remote_file, $local_file, FTP_BINARY);
|
||||
ftp_close($con);
|
||||
if (!$data) {
|
||||
throw new \Exception('EBSCO FTP 上传失败: ' . $remote_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user