620 lines
28 KiB
PHP
620 lines
28 KiB
PHP
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use think\Controller;
|
|
use think\Db;
|
|
|
|
/**
|
|
* @title 文章web接口
|
|
* @description 文章web相关操作
|
|
* @group 文章web相关
|
|
*/
|
|
class Article extends Controller {
|
|
|
|
//put your code here
|
|
protected $admin_obj = '';
|
|
protected $journal_obj = '';
|
|
protected $article_obj = '';
|
|
protected $article_author_obj = '';
|
|
protected $article_organ_obj = '';
|
|
protected $article_ltai_obj = '';
|
|
protected $article_author_to_organ_obj = '';
|
|
protected $journal_topic_obj = '';
|
|
protected $journal_stage_obj = '';
|
|
protected $journal_notices_obj = '';
|
|
protected $journal_abs_obj = '';
|
|
protected $article_to_topic_obj = '';
|
|
|
|
public function __construct(\think\Request $request = null) {
|
|
parent::__construct($request);
|
|
$this->admin_obj = Db::name('admin');
|
|
$this->journal_obj = Db::name('journal');
|
|
$this->article_obj = Db::name('article');
|
|
$this->article_author_obj = Db::name('article_author');
|
|
$this->article_organ_obj = Db::name('article_organ');
|
|
$this->article_ltai_obj = Db::name('article_ltai');
|
|
$this->article_author_to_organ_obj = Db::name('article_author_to_organ');
|
|
$this->journal_topic_obj = Db::name('journal_topic');
|
|
$this->journal_stage_obj = Db::name('journal_stage');
|
|
$this->journal_notices_obj = Db::name('journal_notices');
|
|
$this->journal_abs_obj = Db::name('journal_abstracting');
|
|
$this->article_to_topic_obj = Db::name('article_to_topic');
|
|
}
|
|
|
|
/**
|
|
* @title 获取文章详情
|
|
* @description 获取文章详情
|
|
* @author wangjinlei
|
|
* @url /api/Article/getArticleDetail
|
|
* @method POST
|
|
*
|
|
* @param name:article_id type:int require:1 desc:文章id
|
|
*
|
|
* @return articleInfo:文章信息#
|
|
* @return journalInfo:期刊信息#
|
|
* @return stageInfo:分期信息#
|
|
* @return author:作者信息#
|
|
* @return cite:引用#
|
|
*
|
|
*/
|
|
public function getArticleDetail() {
|
|
$data = $this->request->post();
|
|
$article_info = $this->article_obj->where('article_id', $data['article_id'])->find();
|
|
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id', $article_info['journal_stage_id'])->find();
|
|
|
|
//获取文章作者相关
|
|
$authors = $this->article_author_obj->where('article_id', $article_info['article_id'])->where('state', 0)->select();
|
|
$organs = $this->article_organ_obj->where('article_id', $article_info['article_id'])->where('state', 0)->select();
|
|
$atto = $this->article_author_to_organ_obj->where('article_id', $article_info['article_id'])->where('state', 0)->select();
|
|
$author = $this->sys_author($authors, $organs, $atto);
|
|
|
|
//标题斜体
|
|
$caches = $this->article_ltai_obj->where('article_id',$article_info['article_id'])->where('state',0)->column('content');
|
|
$cache_title = $article_info['title'];
|
|
$article_info['old_title'] = $article_info['title'];
|
|
foreach ($caches as $val){
|
|
$cache_title = str_replace($val, '<i>'.$val.'</i>', $cache_title);
|
|
}
|
|
$article_info['title'] = $cache_title;
|
|
|
|
//组合cite信息
|
|
$no = $stage_info['stage_no'] == 0 ? ':' : '(' . $stage_info['stage_no'] . '):';
|
|
if($journal_info['journal_id']==22){
|
|
$cite = $article_info['abbr'] . '. ' . $article_info['title'] . '[J]. ' . $journal_info['jabbr'] . ',' . $stage_info['stage_year'] . ',' . $stage_info['stage_vol'] . $no . $article_info['npp'] . '. doi:' . $article_info['doi'];
|
|
}else{
|
|
$cite = $article_info['abbr'] . '. ' . $article_info['title'] . '. <i>' . $journal_info['jabbr'] . '</i>. ' . $stage_info['stage_year'] . ';' . $stage_info['stage_vol'] . $no . $article_info['npp'] . '. doi:' . $article_info['doi'];
|
|
}
|
|
|
|
if(stripos($article_info['npp'], '-')){
|
|
$cc = explode('-', $article_info['npp']);
|
|
$article_info['first_page'] = $cc[0];
|
|
$article_info['last_page'] = $cc[1];
|
|
}
|
|
|
|
$article_info['publication'] = date('Y/m/d', strtotime($article_info['pub_date']));
|
|
|
|
//修改keywords
|
|
$article_info['keywords'] = str_replace(',', ' ', $article_info['keywords']);
|
|
|
|
//返回数据
|
|
$re['articleInfo'] = $article_info;
|
|
$re['journalInfo'] = $journal_info;
|
|
$re['stageInfo'] = $stage_info;
|
|
$re['author'] = $author;
|
|
$re['cite'] = $cite;
|
|
return jsonSuccess($re);
|
|
}
|
|
private function sys_author($authors, $organs, $atto) {
|
|
$cache = [];
|
|
foreach ($organs as $k => $v) {
|
|
$cache[$v['article_organ_id']] = $k + 1;
|
|
$organs[$k]['alias'] = $k + 1;
|
|
}
|
|
foreach ($authors as $key => $val) {
|
|
$authors[$key]['ors'] = '';
|
|
foreach ($atto as $vv) {
|
|
if ($vv['article_author_id'] == $val['article_author_id']) {
|
|
$authors[$key]['ors'] = $authors[$key]['ors'] == '' ? '' . $cache[$vv['article_organ_id']] : $authors[$key]['ors'] . ', ' . $cache[$vv['article_organ_id']];
|
|
}
|
|
}
|
|
}
|
|
return ['authors' => $authors, 'organs' => $organs];
|
|
}
|
|
|
|
/**
|
|
* @title 获取话题文章列表
|
|
* @description 获取话题文章列表
|
|
* @author wangjinlei
|
|
* @url /api/Article/getTopicArticles
|
|
* @method POST
|
|
*
|
|
* @param name:topic_id type:int require:1 desc:话题id
|
|
* @param name:pageIndex type:int require:1 desc:当前页码数
|
|
* @param name:pageSize type:int require:1 desc:单页数据条数
|
|
*
|
|
* @return topicInfo:话题信息#
|
|
* @return articleList:文章信息#
|
|
* @return count:总数
|
|
*/
|
|
public function getTopicArticles() {
|
|
$data = $this->request->post();
|
|
$topic_info = $this->journal_topic_obj->where('journal_topic_id', $data['topic_id'])->find();
|
|
$journal_info = $this->journal_obj->where('journal_id',$topic_info['journal_id'])->find();
|
|
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
|
|
$list = $this->article_to_topic_obj->field('j_article.*,j_journal_stage.*')
|
|
->join(array(['j_article', 'j_article_to_topic.article_id = j_article.article_id', 'LEFT'], ['j_journal_stage', 'j_article.journal_stage_id = j_journal_stage.journal_stage_id', 'LEFT']))
|
|
->where('j_article_to_topic.topic_id', $data['topic_id'])
|
|
->where('j_article_to_topic.state', 0)
|
|
->order('j_article.journal_stage_id desc , j_article.article_id desc')
|
|
->limit($limit_start,$data['pageSize'])
|
|
->select();
|
|
$count = $this->article_to_topic_obj
|
|
->where('j_article_to_topic.topic_id', $data['topic_id'])
|
|
->where('j_article_to_topic.state', 0)
|
|
->count();
|
|
//获取作者
|
|
foreach ($list as $k => $v) {
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$v['journal_stage_id'])->find();
|
|
//组合cite信息
|
|
$no = $stage_info['stage_no'] == 0 ? ':' : '(' . $stage_info['stage_no'] . '):';
|
|
$cite = $v['abbr'] . '. ' . $v['title'] . '. <i>' . $journal_info['jabbr'] . '</i>. ' . $stage_info['stage_year'] . ';' . $stage_info['stage_vol'] . $no . $v['npp'] . '. doi:' . $v['doi'];
|
|
$cache_topic = $this->article_to_topic_obj->field('j_journal_topic.*')->join('j_journal_topic','j_journal_topic.journal_topic_id = j_article_to_topic.topic_id','left')->where('j_article_to_topic.article_id',$v['article_id'])->where('j_article_to_topic.state',0)->select();
|
|
|
|
$list[$k]['topic'] = $cache_topic;
|
|
$list[$k]['cite'] = $cite;
|
|
$list[$k]['authortitle'] = $this->getAuthor($v);
|
|
}
|
|
//标题斜体
|
|
foreach ($list as $k => $v) {
|
|
$caches = $this->article_ltai_obj->where('article_id', $v['article_id'])->where('state', 0)->column('content');
|
|
$cache_title = $v['title'];
|
|
foreach ($caches as $val) {
|
|
$cache_title = str_replace($val, '<i>' . $val . '</i>', $cache_title);
|
|
}
|
|
$list[$k]['title'] = $cache_title;
|
|
}
|
|
$re['topicInfo'] = $topic_info;
|
|
$re['articleList'] = $list;
|
|
$re['count'] = $count;
|
|
return jsonSuccess($re);
|
|
}
|
|
private function getAuthor($article) {
|
|
$where['article_id'] = $article['article_id'];
|
|
$where['state'] = 0;
|
|
$list = $this->article_author_obj->where($where)->select();
|
|
$frag = '';
|
|
foreach ($list as $k => $v) {
|
|
$frag = $frag == '' ? '' . $v['author_name'] : $frag . ', ' . $v['author_name'];
|
|
}
|
|
return $frag;
|
|
}
|
|
|
|
// private function getAuthor($article){
|
|
// $where['article_id'] = $article['article_id'];
|
|
// $where['state'] = 0;
|
|
// $list = $this->article_author_obj->where($where)->select();
|
|
// $frag = '';
|
|
// foreach ($list as $k=>$v){
|
|
// $frag .= $v['author_name'].',';
|
|
// }
|
|
// return substr($frag,0, -1);
|
|
// }
|
|
|
|
/**
|
|
* @title 获取stage文章列表
|
|
* @description 获取stage文章列表
|
|
* @author wangjinlei
|
|
* @url /api/Article/getStageArticles
|
|
* @method POST
|
|
*
|
|
* @param name:stage_id type:int require:1 desc:分期id
|
|
*
|
|
* @return stageInfo:分期#
|
|
* @return articleList:文章信息#
|
|
*/
|
|
public function getStageArticles() {
|
|
$data = $this->request->post();
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id', $data['stage_id'])->find();
|
|
$journal_info = $this->journal_obj->where('journal_id',$stage_info['journal_id'])->find();
|
|
$list = $this->article_obj->field('j_article.*,j_journal_stage.*')
|
|
->join('j_journal_stage', 'j_article.journal_stage_id = j_journal_stage.journal_stage_id', 'LEFT')
|
|
->where('j_article.journal_stage_id', $data['stage_id'])
|
|
->where('j_article.state', 0)
|
|
->order('j_article.sort')
|
|
->select();
|
|
//获取作者
|
|
foreach ($list as $k => $v) {
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$v['journal_stage_id'])->find();
|
|
//组合cite信息
|
|
$no = $stage_info['stage_no'] == 0 ? ':' : '(' . $stage_info['stage_no'] . '):';
|
|
$cite = $v['abbr'] . '. ' . $v['title'] . '. <i>' . $journal_info['jabbr'] . '</i>. ' . $stage_info['stage_year'] . ';' . $stage_info['stage_vol'] . $no . $v['npp'] . '. doi:' . $v['doi'];
|
|
$cache_topic = $this->article_to_topic_obj->field('j_journal_topic.*')->join('j_journal_topic','j_journal_topic.journal_topic_id = j_article_to_topic.topic_id','left')->where('j_article_to_topic.article_id',$v['article_id'])->where('j_article_to_topic.state',0)->select();
|
|
|
|
$list[$k]['topic'] = $cache_topic;
|
|
$list[$k]['cite'] = $cite;
|
|
$list[$k]['authortitle'] = $this->getAuthor($v);
|
|
}
|
|
//标题斜体
|
|
foreach ($list as $k => $v) {
|
|
$caches = $this->article_ltai_obj->where('article_id', $v['article_id'])->where('state', 0)->column('content');
|
|
$cache_title = $v['title'];
|
|
foreach ($caches as $val) {
|
|
$cache_title = str_replace($val, '<i>' . $val . '</i>', $cache_title);
|
|
}
|
|
$list[$k]['title'] = $cache_title;
|
|
}
|
|
$re['stageInfo'] = $stage_info;
|
|
$re['articleList'] = $list;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 增加文章阅读数量
|
|
* @description 增加文章阅读数量
|
|
* @author wangjinlei
|
|
* @url /api/Article/addArticleNum
|
|
* @method POST
|
|
*
|
|
* @param name:article_id type:int require:1 desc:期刊id
|
|
* @param name:type type:string require:1 desc:类型(abs/html/pdf)
|
|
*
|
|
* @return article:文章详情
|
|
*/
|
|
public function addArticleNum(){
|
|
$data = $this->request->post();
|
|
|
|
$this->article_obj->where('article_id',$data['article_id'])->setInc($data['type'].'_num');
|
|
$article_info = $this->article_obj->where('article_id',$data['article_id'])->find();
|
|
|
|
$re['article'] = $article_info;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 获取top文章列表
|
|
* @description 获取top文章列表
|
|
* @author wangjinlei
|
|
* @url /api/Article/getTopArt
|
|
* @method POST
|
|
*
|
|
* @param name:journal_id type:int require:1 desc:期刊id
|
|
* @param name:type type:string require:1 desc:类型(cited/read/download)
|
|
* @param name:pageIndex type:int require:1 desc:当前页码数
|
|
* @param name:pageSize type:int require:1 desc:单页数据条数
|
|
*
|
|
* @return articleList:文章信息#
|
|
* @return count:总数
|
|
*
|
|
*/
|
|
public function getTopArt() {
|
|
$data = $this->request->post();
|
|
$journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find();
|
|
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
|
|
$list = [];
|
|
if ($data['type'] == 'cited') {
|
|
$list = $this->article_obj->field('j_article.*,j_journal_stage.*')
|
|
->join('j_journal_stage', 'j_article.journal_stage_id = j_journal_stage.journal_stage_id', 'LEFT')
|
|
->where('j_article.journal_id', $data['journal_id'])
|
|
->where('j_article.state', 0)
|
|
->where('j_journal_stage.stage_year','>=','2019')
|
|
->where('j_journal_stage.is_publish',1)
|
|
->order('j_article.cited desc')
|
|
->limit($limit_start,$data['pageSize'])
|
|
->select();
|
|
} else if ($data['type'] == 'read') {
|
|
$list = $this->article_obj->field('j_article.*,j_journal_stage.*')
|
|
->join('j_journal_stage', 'j_article.journal_stage_id = j_journal_stage.journal_stage_id', 'LEFT')
|
|
->where('j_article.journal_id', $data['journal_id'])
|
|
->where('j_article.state', 0)
|
|
->where('j_journal_stage.is_publish',1)
|
|
->where('j_journal_stage.stage_year','>=','2019')
|
|
->order('j_article.abs_num desc')
|
|
->limit($limit_start,$data['pageSize'])
|
|
->select();
|
|
} else {
|
|
$list = $this->article_obj->field('j_article.*,j_journal_stage.*')
|
|
->join('j_journal_stage', 'j_article.journal_stage_id = j_journal_stage.journal_stage_id', 'LEFT')
|
|
->where('j_article.journal_id', $data['journal_id'])
|
|
->where('j_article.state', 0)
|
|
->where('j_journal_stage.is_publish',1)
|
|
->where('j_journal_stage.stage_year','>=','2019')
|
|
->orderRaw('j_article.html_num+j_article.pdf_num desc')
|
|
->limit($limit_start,$data['pageSize'])
|
|
->select();
|
|
}
|
|
$count = $this->article_obj
|
|
->join('j_journal_stage', 'j_article.journal_stage_id = j_journal_stage.journal_stage_id', 'LEFT')
|
|
->where('j_article.journal_id', $data['journal_id'])
|
|
->where('j_article.state', 0)
|
|
->where('j_journal_stage.is_publish',1)
|
|
->where('j_journal_stage.stage_year','>=','2019')
|
|
->count();
|
|
//获取作者
|
|
foreach ($list as $k => $v) {
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$v['journal_stage_id'])->find();
|
|
//组合cite信息
|
|
$no = $stage_info['stage_no'] == 0 ? ':' : '(' . $stage_info['stage_no'] . '):';
|
|
$cite = $v['abbr'] . '. ' . $v['title'] . '. <i>' . $journal_info['jabbr'] . '</i>. ' . $stage_info['stage_year'] . ';' . $stage_info['stage_vol'] . $no . $v['npp'] . '. doi:' . $v['doi'];
|
|
$cache_topic = $this->article_to_topic_obj->field('j_journal_topic.*')->join('j_journal_topic','j_journal_topic.journal_topic_id = j_article_to_topic.topic_id','left')->where('j_article_to_topic.article_id',$v['article_id'])->where('j_article_to_topic.state',0)->select();
|
|
|
|
$list[$k]['topic'] = $cache_topic;
|
|
$list[$k]['cite'] = $cite;
|
|
$list[$k]['authortitle'] = $this->getAuthor($v);
|
|
}
|
|
|
|
//标题斜体
|
|
foreach ($list as $k => $v) {
|
|
$caches = $this->article_ltai_obj->where('article_id', $v['article_id'])->where('state', 0)->column('content');
|
|
$cache_title = $v['title'];
|
|
foreach ($caches as $val) {
|
|
$cache_title = str_replace($val, '<i>' . $val . '</i>', $cache_title);
|
|
}
|
|
$list[$k]['title'] = $cache_title;
|
|
}
|
|
|
|
$re['articleList'] = $list;
|
|
$re['count'] = $count;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 获取文章ris文件
|
|
* @description 获取文章ris文件
|
|
* @author wangjinlei
|
|
* @url /api/Article/getArticleRis
|
|
* @method POST
|
|
*
|
|
* @param name:article_id type:int require:1 desc:文章id
|
|
*
|
|
* @return url:地址
|
|
*/
|
|
public function getArticleRis(){
|
|
$data = $this->request->post();
|
|
$article_info = $this->article_obj->where('article_id',$data['article_id'])->find();
|
|
$filename = trim(strrchr($article_info['doi'], '/'),'/');
|
|
$file_path = '../public/article/ris/'.$filename.'.ris';
|
|
if(!file_exists($file_path)){
|
|
//创建ris文件的内容
|
|
$ris = 'TY - JOUR'."\n";
|
|
$ris .= 'T1 - '.$article_info['title']."\n";
|
|
$authors = $this->article_author_obj->where('article_id',$article_info['article_id'])->where('state',0)->select();
|
|
$journal = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find();
|
|
foreach ($authors as $vv){
|
|
$ris .= 'AU - '.$vv['last_name'].', '.$vv['first_name']."\n";
|
|
}
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$article_info['journal_stage_id'])->find();
|
|
$ris .= 'JO - '.$journal['title']."\n";
|
|
$ris .= 'VL - '.$stage_info['stage_vol']."\n";
|
|
$ca_fq = explode('-', $stage_info['stage_page']);
|
|
$ris .= 'SP - '.$ca_fq[0]."\n";if(isset($ca_fq[1])){
|
|
$ris .= 'EP - '.$ca_fq[1]."\n";
|
|
}
|
|
$ris .= 'PY - '.$stage_info['stage_year']."\n";
|
|
$ris .= 'DA - '. $this->chendate($stage_info['issue_date'])."\n";
|
|
$ris .= 'SN - '.$journal['issn']."\n";
|
|
$ris .= 'DO - https://doi.org/'.$article_info['doi']."\n";
|
|
$ris .= 'UR - https://www.tmrjournals.com/article.html?J_num='.$journal['journal_id'].'&a_id='.$article_info['article_id']."\n";
|
|
$ris .= 'J2 - '.$journal['jabbr']."\n";
|
|
$ris .= 'JF - '.$journal['title']."\n";
|
|
$kws = explode(', ', $article_info['keywords']);
|
|
foreach ($kws as $vvv){
|
|
$ris .= 'KW - '.str_replace('</i>','',str_replace('<i>','',$vvv))."\n";
|
|
}
|
|
$abs = str_replace('Abstract','',strip_tags(str_replace(" ","",htmlspecialchars_decode($article_info['abstract']))));
|
|
$ris .= 'AB - '.$abs."\n";
|
|
$ris .= 'ER - '."\n";
|
|
//生成ris文件
|
|
file_put_contents($file_path,$ris);
|
|
}
|
|
$re['url'] = '/public/article/ris/'.$filename.'.ris';
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 获取文章enw文件
|
|
* @description 获取文章enw文件
|
|
* @author wangjinlei
|
|
* @url /api/Article/getArticleenw
|
|
* @method POST
|
|
*
|
|
* @param name:article_id type:int require:1 desc:文章id
|
|
*
|
|
* @return url:地址
|
|
*/
|
|
public function getArticleenw(){
|
|
$data = $this->request->post();
|
|
// $data['article_id'] = 3;
|
|
$article_info = $this->article_obj->where('article_id',$data['article_id'])->find();
|
|
$filename = trim(strrchr($article_info['doi'], '/'),'/');
|
|
$file_path = '../public/article/enw/'.$filename.'.enw';
|
|
if(!file_exists($file_path)){
|
|
//创建ris文件的内容
|
|
$ris = 'TY - JOUR'."\n";
|
|
$ris .= 'T1 - '.$article_info['title']."\n";
|
|
$authors = $this->article_author_obj->where('article_id',$article_info['article_id'])->where('state',0)->select();
|
|
$journal = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find();
|
|
foreach ($authors as $vv){
|
|
$ris .= 'AU - '.$vv['last_name'].', '.$vv['first_name']."\n";
|
|
}
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$article_info['journal_stage_id'])->find();
|
|
$ris .= 'JO - '.$journal['title']."\n";
|
|
$ris .= 'VL - '.$stage_info['stage_vol']."\n";
|
|
$ca_fq = explode('-', $stage_info['stage_page']);
|
|
$ris .= 'SP - '.$ca_fq[0]."\n";
|
|
if(isset($ca_fq[1])){
|
|
$ris .= 'EP - '.$ca_fq[1]."\n";
|
|
}
|
|
$ris .= 'PY - '.$stage_info['stage_year']."\n";
|
|
$ris .= 'DA - '. $this->chendate($stage_info['issue_date'])."\n";
|
|
$ris .= 'SN - '.$journal['issn']."\n";
|
|
$ris .= 'DO - https://doi.org/'.$article_info['doi']."\n";
|
|
$ris .= 'UR - https://www.tmrjournals.com/article.html?J_num='.$journal['journal_id'].'&a_id='.$article_info['article_id']."\n";
|
|
$ris .= 'J2 - '.$journal['jabbr']."\n";
|
|
$ris .= 'JF - '.$journal['title']."\n";
|
|
$kws = explode(', ', $article_info['keywords']);
|
|
foreach ($kws as $vvv){
|
|
$ris .= 'KW - '.str_replace('</i>','',str_replace('<i>','',$vvv))."\n";
|
|
}
|
|
$abs = str_replace('Abstract','',strip_tags(str_replace(" ","",htmlspecialchars_decode($article_info['abstract']))));
|
|
$ris .= 'AB - '.$abs."\n";
|
|
$ris .= 'ER - '."\n";
|
|
//生成ris文件
|
|
file_put_contents($file_path,$ris);
|
|
}
|
|
$re['url'] = '/public/article/enw/'.$filename.'.enw';
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 获取文章bib文件
|
|
* @description 获取文章bib文件
|
|
* @author wangjinlei
|
|
* @url /api/Article/getArticlebib
|
|
* @method POST
|
|
*
|
|
* @param name:article_id type:int require:1 desc:文章id
|
|
*
|
|
* @return url:地址
|
|
*/
|
|
public function getArticlebib(){
|
|
$data = $this->request->post();
|
|
$article_info = $this->article_obj->where('article_id',$data['article_id'])->find();
|
|
$filename = trim(strrchr($article_info['doi'], '/'),'/');
|
|
$file_path = '../public/article/bib/'.$filename.'.bib';
|
|
if(!file_exists($file_path)){
|
|
//创建ris文件的内容
|
|
$ris = '@article{'.$article_info['doi'].",\n";
|
|
$ris .= 'title = "'.$article_info['title'].'"'.",\n";
|
|
$authors = $this->article_author_obj->where('article_id',$article_info['article_id'])->where('state',0)->select();
|
|
$journal = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find();
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$article_info['journal_stage_id'])->find();
|
|
$ris .= 'journal = "'.$journal['title'].'"'.",\n";
|
|
$ris .= 'volume = "'.$stage_info['stage_vol'].'"'.",\n";
|
|
$ris .= 'pages = "'.$stage_info['stage_page'].'"'.",\n";
|
|
$ris .= 'year = "'.$stage_info['stage_year'].'"'.",\n";
|
|
$ris .= 'issn = "'.$journal['issn'].'"'.",\n";
|
|
$ris .= 'doi = "https://doi.org/'.$article_info['doi'].'"'.",\n";
|
|
$ris .= 'url = "https://www.tmrjournals.com/article.html?J_num='.$journal['journal_id'].'&a_id='.$article_info['article_id'].'"'.",\n";
|
|
$auts = '';
|
|
foreach ($authors as $vv){
|
|
$auts .= $vv['first_name'].' '.$vv['last_name']." and ";
|
|
}
|
|
$ris .= 'author = "'.substr($auts, 0,-5).'"'.",\n";
|
|
$ris .= 'keywords = "'.str_replace('</i>','',str_replace('<i>','',$article_info['keywords'])).'"'.".\n";
|
|
$ris .= 'abstract = "'.str_replace('Abstract','',strip_tags(str_replace(" ","",htmlspecialchars_decode($article_info['abstract'])))).'"'."\n";
|
|
$ris .= '}';
|
|
|
|
file_put_contents($file_path,$ris);
|
|
}
|
|
$re['url'] = '/public/article/bib/'.$filename.'.bib';
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 获取文章text文件
|
|
* @description 获取文章text文件
|
|
* @author wangjinlei
|
|
* @url /api/Article/getArticletext
|
|
* @method POST
|
|
*
|
|
* @param name:article_id type:int require:1 desc:文章id
|
|
*
|
|
* @return url:地址
|
|
*/
|
|
public function getArticletext(){
|
|
$data = $this->request->post();
|
|
$article_info = $this->article_obj->where('article_id',$data['article_id'])->find();
|
|
$filename = trim(strrchr($article_info['doi'], '/'),'/');
|
|
$file_path = '../public/article/text/'.$filename.'.txt';
|
|
if(!file_exists($file_path)){
|
|
$authors = $this->article_author_obj->where('article_id',$article_info['article_id'])->where('state',0)->select();
|
|
$journal = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find();
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$article_info['journal_stage_id'])->find();
|
|
$auts = '';
|
|
foreach ($authors as $vv){
|
|
$auts .= $vv['first_name'].' '.$vv['last_name'].", ";
|
|
}
|
|
$ris = substr($auts, 0,-2).",\n";
|
|
$ris .= $article_info['title'].",\n";
|
|
$ris .= $journal['title'].",\n";
|
|
$ris .= 'Volume '.$stage_info['stage_vol'].",\n";
|
|
$ris .= $stage_info['stage_year'].",\n";
|
|
$ris .= 'Pages '.$stage_info['stage_page'].",\n";
|
|
$ris .= 'ISSN '.$journal['issn'].",\n";
|
|
$ris .= 'https://doi.org/'.$article_info['doi'].",\n";
|
|
$ris .= '(https://www.tmrjournals.com/article.html?J_num='.$journal['journal_id'].'&a_id='.$article_info['article_id'].')'."\n";
|
|
$ris .= 'Abstract:'.str_replace('Abstract','',strip_tags(str_replace(" ","",htmlspecialchars_decode($article_info['abstract']))))."\n";
|
|
$ris .= 'Keywords:'. str_replace('</i>','',str_replace('<i>','',str_replace(',',';', $article_info['keywords'])))."\n";
|
|
|
|
file_put_contents($file_path,$ris);
|
|
}
|
|
$re['url'] = '/public/article/text/'.$filename.'.txt';
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
private function chendate($rq) {
|
|
$st = explode(' ', $rq);
|
|
$yf = '01';
|
|
if(!isset($st[1])){
|
|
return $rq;
|
|
}
|
|
switch ($st[1]){
|
|
case 'January':
|
|
$yf = '01';
|
|
break;
|
|
case 'February':
|
|
$yf = '02';
|
|
break;
|
|
case 'March';
|
|
$yf = '03';
|
|
break;
|
|
case 'April';
|
|
$yf = '04';
|
|
break;
|
|
case 'May';
|
|
$yf = '05';
|
|
break;
|
|
case 'June';
|
|
$yf = '06';
|
|
break;
|
|
case 'July';
|
|
$yf = '07';
|
|
break;
|
|
case 'August';
|
|
$yf = '08';
|
|
break;
|
|
case 'September';
|
|
$yf = '09';
|
|
break;
|
|
case 'October';
|
|
$yf = '10';
|
|
break;
|
|
case 'November';
|
|
$yf = '11';
|
|
break;
|
|
case 'December';
|
|
$yf = '12';
|
|
break;
|
|
}
|
|
return $st[2].'/'.$yf.'/'.$st[0].'/';
|
|
}
|
|
|
|
|
|
// public function ggname(){
|
|
// $list = $this->article_author_obj->where('article_author_id >= 1500')->select();
|
|
// foreach ($list as $v){
|
|
// $cache = explode(' ', $v['author_name']);
|
|
// $first = str_replace('-', '', $cache[0]);
|
|
// $last = isset($cache[1])?$cache[1]:'';
|
|
// $this->article_author_obj->where('article_author_id',$v['article_author_id'])->update(['first_name'=>$first,'last_name'=>$last]);
|
|
// }
|
|
// echo '<pre>';
|
|
// var_dump($list);
|
|
// echo '</pre>';
|
|
// die;
|
|
// }
|
|
|
|
}
|