Files
tougao/application/api/controller/Reviewer.php
wangjinlei 6abe90ec53 1
2025-01-09 09:25:20 +08:00

2094 lines
94 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\api\controller;
use app\api\controller\Base;
use think\Db;
use think\Queue;
use think\Validate;
/**
* @title 审稿人接口
* @description 审稿人接口
*/
class Reviewer extends Base
{
//put your code here
public function __construct(\think\Request $request = null)
{
parent::__construct($request);
}
/**
* @title 获取文章审稿实例列表(审稿人)
* @description 获取文章审稿实例列表(审稿人)
* @author wangjinlei
* @url /api/Reviewer/getReviewerList
* @method POST
*
* @param name:username type:string require:1 desc:审稿人account
* @param name:pageIndex type:int require:1 desc:当前页码
* @param name:pageSize type:int require:1 desc:每个页面的数据条数
*
* @return data:数据列表#
* @return total:数据条数
*/
public function getReviewerList()
{
$data = $this->request->post();
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$reviewer_info = $this->user_obj->where('account', $data['username'])->find();
$res = $this->article_reviewer_obj->field('t_article_reviewer.*,t_article.title article_title,t_journal.title journal_title,t_article.accept_sn accept_sn')
->join('t_article', 't_article_reviewer.article_id = t_article.article_id', 'LEFT')
->join('t_journal', 't_article.journal_id = t_journal.journal_id', 'LEFT')
->where('t_article_reviewer.reviewer_id', $reviewer_info['user_id'])
->where("t_article.state", 2)
->order('t_article_reviewer.state')
->limit($limit_start, $data['pageSize'])
->select();
$count = $this->article_reviewer_obj->where('t_article_reviewer.reviewer_id', $reviewer_info['user_id'])->count();
return json(['code' => 0, 'data' => $res, 'total' => $count]);
}
/**
* @title 获取待审审稿实例列表,包含复审待审
* @description 获取待审审稿实例列表
* @author wangjinlei
* @url /api/Reviewer/getReviewerListPending
* @method POST
*
* @param name:user_id type:int require:1 desc:审稿人id
*
* @return lists:数据列表#
*/
public function getReviewerListPending()
{
$data = $this->request->post();
//获取审稿人基本信息
$reviewer_info = $this->user_obj->where('user_id', $data['user_id'])->find();
$res = $this->article_reviewer_obj
->field('t_article_reviewer.*,t_article.title article_title,t_article.abstrart,t_article.major_id,t_article.cmajor_id,t_article.type,t_journal.title journal_title,t_article.accept_sn accept_sn')
->join('t_article', 't_article_reviewer.article_id = t_article.article_id', 'LEFT')
->join('t_journal', 't_article.journal_id = t_journal.journal_id', 'LEFT')
->where('t_article_reviewer.reviewer_id', $reviewer_info['user_id'])
->where("t_article.state", 2)
->where('t_article.user_id','<>',$reviewer_info['user_id'])
->where('t_article_reviewer.state', 0)
->select();
foreach ($res as $k => $v) {
if ($v['type']) {
$res[$k]['type'] = translateType($v['type']);
}
}
//加上文章领域
foreach ($res as $k => $v) {
$major = $this->reviewer_major_obj->where('major_id', $v['major_id'])->find();
$cmajor = $this->reviewer_major_obj->where('major_id', $v['cmajor_id'])->find();
$res[$k]['major'] = $major['title'];
$res[$k]['cmajor'] = $cmajor['title'];
}
//复审的稿件列表
$repeats = $this->article_reviewer_obj
->field('t_article_reviewer.*,t_article.title article_title,t_article.abstrart,t_article.major_id,t_article.cmajor_id,t_article.type,t_journal.title journal_title,t_article.accept_sn accept_sn')
->join("t_article_reviewer_repeat","t_article_reviewer_repeat.art_rev_id = t_article_reviewer.art_rev_id","left")
->join('t_article', 't_article_reviewer.article_id = t_article.article_id', 'LEFT')
->join('t_journal', 't_article.journal_id = t_journal.journal_id', 'LEFT')
->where("t_article_reviewer.reviewer_id",$reviewer_info['user_id'])
->where("t_article_reviewer_repeat.state",0)
->select();
$re['lists'] = $res;
$re['repeats'] = $repeats;
return jsonSuccess($re);
}
/**创建复审实例
* @return void
*/
public function startRepeatReviewer(){
$data = $this->request->post();
$rule = new Validate([
"art_rev_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$article_reviewer_info = $this->article_reviewer_obj->where('art_rev_id',$data['art_rev_id'])->find();
//审查添加的合法性
$repeats = $this->article_reviewer_repeat_obj->where('art_rev_id',$data['art_rev_id'])->select();
$last = count($repeats)-1;
if($repeats&&($repeats[$last]['state']==0||$repeats[$last]['recommend']!=3)){
return jsonError("create error");
}
$reviewer_info = $this->user_obj->where('user_id',$article_reviewer_info['reviewer_id'])->find();
$article_info = $this->article_obj->where('article_id',$article_reviewer_info['article_id'])->find();
$journal_info = $this->journal_obj->where("journal_id",$article_info['journal_id'])->find();
//添加实例数据
$insert['art_rev_id'] = $data['art_rev_id'];
$insert['ctime'] = time();
$this->article_reviewer_repeat_obj->insert($insert);
//发送邮件至审稿人,提醒到系统内复审稿件
$tt = $article_info['title']."<br/>";
$tt .= "sn:".$article_info['accept_sn']."<br/><br/>";
$tt .= "Dear Reviewer,<br/><br/>";
$tt .= "Thank you for your support and valuable feedback to our journal. According to your comments, the author has made revisions to the article and submitted the revised manuscript to us.<br/><br/>";
$tt .= 'To ensure the quality and accuracy of the article, we would like to ask for your re-review of the revised manuscript within 5 days. Please log in to the <a href="https://submission.tmrjournals.com">Submission System</a> and click on "Peer Review" to re-review the revised manuscript.If you fail to complete the re-review, we will consider your initial opinion as the final decision.<br/><br/>';
$tt .= "We appreciate your time and effort to the journal and look forward to hearing back from you soon.<br/><br/>";
$tt .= 'Sincerely,<br>Editorial Office<br>';
$tt .= $journal_info['title'] . '<br>';
$tt .= 'Email: ' . $journal_info['email'] . '<br>';
$tt .= 'Website: ' . $journal_info['website'];
$maidata['email'] = $reviewer_info['email'];
$maidata['title'] = "Invitation for Re-review of Revised Manuscript";
$maidata['content'] = $tt;
$maidata['tmail'] = $journal_info['email'];
$maidata['tpassword'] = $journal_info['epassword'];
Queue::push('app\api\job\mail@fire', $maidata, "tmail");
return jsonSuccess([]);
}
/**
* @title 获取历史审稿实例列表
* @description 获取历史审稿实例列表
* @author wangjinlei
* @url /api/Reviewer/getReviewerListHistory
* @method POST
*
* @param name:user_id type:int require:1 desc:审稿人id
* @param name:pageIndex type:int require:1 desc:当前页码
* @param name:pageSize type:int require:1 desc:每个页面的数据条数
*
* @return lists:数据列表#
*/
public function getReviewerListHistory()
{
$data = $this->request->post();
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$reviewer_info = $this->user_obj->where('user_id', $data['user_id'])->find();
$res = $this->article_reviewer_obj
->field('t_article_reviewer.*,t_article.article_id,t_article.journal_id,t_article.major_id,t_article.abstrart,t_article.cmajor_id,t_article.state astate,t_article.title article_title,t_article.type,t_journal.title journal_title,t_article.accept_sn accept_sn,t_article_reviewer_question.recommend,t_article_reviewer_question.ctime recommenttime')
->join('t_article', 't_article_reviewer.article_id = t_article.article_id', 'LEFT')
->join('t_journal', 't_article.journal_id = t_journal.journal_id', 'LEFT')
->join("t_article_reviewer_question", "t_article_reviewer_question.art_rev_id = t_article_reviewer.art_rev_id", "left")
->where('t_article_reviewer.reviewer_id', $reviewer_info['user_id'])
->where('t_article_reviewer.state', 'in', [1, 2, 3, 4])
->where("t_article.article_id", ">", 0)
// ->order('t_article_reviewer.state')
->limit($limit_start, $data['pageSize'])
->select();
foreach ($res as $k => $v) {
if ($v['type']) {
$res[$k]['type'] = translateType($v['type']);
}
}
//加上文章领域
foreach ($res as $k => $v) {
$major = $this->reviewer_major_obj->where('major_id', $v['major_id'])->find();
$cmajor = $this->reviewer_major_obj->where('major_id', $v['cmajor_id'])->find();
$res[$k]['major'] = $major['title'];
$res[$k]['cmajor'] = $cmajor['title'];
}
$count = $this->article_reviewer_obj
->join('t_article', 't_article_reviewer.article_id = t_article.article_id', 'LEFT')
->where('t_article_reviewer.reviewer_id', $reviewer_info['user_id'])
->where('t_article_reviewer.state', 'in', [1, 2, 3, 4])
->where("t_article.article_id", ">", 0)
->count();
$re['lists'] = $res;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* @title 审稿实例详情----主动申请审稿实例详情
* @description 审稿实例详情----主动申请审稿实例详情
* @author wangjinlei
* @url /api/Reviewer/getArtRevDetail
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
* @param name:user_id type:int require:1 desc:用户id
*
* @return lists:数据列表#
*/
public function getArtRevDetail()
{
$data = $this->request->post();
$res = $this->article_reviewer_obj->where('reviewer_id', $data['user_id'])->where('article_id', $data['article_id'])->find();
if ($res !== null) {
return jsonError('Instance exists');
}
$article = $this->article_obj
->field('t_article.*,t_journal.title journal_title')
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'left')
->where('t_article.article_id', $data['article_id'])
->find();
$re['article'] = $article;
return jsonSuccess($re);
}
/**
* 获取审稿人详情
*
*/
public function getReviewerDetail()
{
$uid = $this->request->post('rid');
//获取基本信息
$base_info = $this->user_obj->join('t_user_reviewer_info', 't_user.user_id = t_user_reviewer_info.reviewer_id')->where('t_user.user_id', $uid)->find();
//增加major
$major_res = $this->reviewer_major_obj->where('major_id', $base_info['major'])->column('title');
$base_info['major_title'] = $major_res ? $major_res[0] : '';
$cmajor_res = $this->reviewer_major_obj->where('major_id', $base_info['cmajor'])->column('title');
$base_info['cmajor_title'] = $cmajor_res ? $cmajor_res[0] : '';
return json(['data' => $base_info]);
}
/**
* @title 获取审稿人详情通过用户名或邮箱
* @description 获取审稿人详情通过用户名或邮箱
* @author wangjinlei
* @url /api/Reviewer/getReviewerByNameEmail
* @method POST
*
* @param name:account type:string require:1 desc:用户名或邮箱
*
* @return reviewer:审稿人详情信息#
*/
public function getReviewerByNameEmail()
{
$data = $this->request->post();
$check = $this->user_obj
->join('t_user_reviewer_info', 't_user_reviewer_info.reviewer_id = t_user.user_id', 'left')
->where('t_user.account|t_user.email', 'like', '%' . $data['account'] . '%')
->where('t_user.state', 0)
->find();
$check['majorshu'] = getMajorShu($check['major']);
$check['cvs'] = getReviewerCvs($check['user_id']);
$check['title'] = $check['technical'];
$re['reviewer'] = $check;
return jsonSuccess($re);
}
public function researchUser(){
$data = $this->request->post();
$rule = new Validate([
"keywords"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$list = $this->user_obj->field("email,realname")->where("email","like",'%'.$data['keywords'].'%')->limit(15)->select();
$re['list'] = $list;
return jsonSuccess($re);
}
public function checkUserAndGet(){
$data = $this->request->post();
$rule = new Validate([
"email"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$user_info = $this->user_obj->where('email', $data['email'])->find();
if(!$user_info){
return jsonError("no user researched");
}
$check = $this->user_obj
->join('t_user_reviewer_info', 't_user_reviewer_info.reviewer_id = t_user.user_id', 'left')
->where('t_user.email', $data['email'])
->where('t_user.state', 0)
->find();
$check['majorshu'] = getMajorShu($check['major']);
$check['cvs'] = getReviewerCvs($check['user_id']);
$check['title'] = $check['technical'];
$re['result'] = $check;
return jsonSuccess($re);
}
/**
* @title 获取审稿人详情
* @description 获取审稿人详情
* @author wangjinlei
* @url /api/Reviewer/getReviewerDetail1
* @method POST
*
* @param name:user_id type:int require:1 desc:审稿人id
*
*/
public function getReviewerDetail1()
{
$data = $this->request->post();
//获取基本信息
$base_info = $this->user_obj->join('t_user_reviewer_info', 't_user.user_id = t_user_reviewer_info.reviewer_id', 'left')->where('t_user.user_id', $data['user_id'])->find();
//增加major
$major_res = $this->reviewer_major_obj->where('major_id', $base_info['major'])->column('title');
$base_info['major_title'] = $major_res ? $major_res[0] : '';
$cmajor_res = $this->reviewer_major_obj->where('major_id', $base_info['cmajor'])->column('title');
$base_info['cmajor_title'] = $cmajor_res ? $cmajor_res[0] : '';
$journals = $this->reviewer_to_journal_obj->field('t_journal.*')->join('t_journal', 't_reviewer_to_journal.journal_id = t_journal.journal_id', 'left')->where('t_reviewer_to_journal.reviewer_id', $data['user_id'])->where('t_reviewer_to_journal.state', 0)->select();
//获取审稿人期刊与对应身份
// $frag = [];
// $revs = $this->reviewer_to_journal_obj->join('t_journal','t_reviewer_to_journal.journal_id = t_journal.journal_id','left')->where('t_reviewer_to_journal.reviewer_id',$data['user_id'])->where('t_reviewer_to_journal.state',0)->select();
// $chiefs = $this->chief_to_journal_obj->join('t_journal','t_chief_to_journal.journal_id = t_journal.journal_id','left')->where('t_chief_to_journal.user_id',$data['user_id'])->where('t_chief_to_journal.state',0)->select();
// $boards = $this->board_to_journal_obj->join('t_journal','t_board_to_journal.journal_id = t_journal.journal_id','left')->where('t_board_to_journal.user_id',$data['user_id'])->where('t_board_to_journal.state',0)->select();
// foreach ($revs as $v){
// $frag[] = array(
// 'journal'=>$v,
// 'type'=>'reviewer'
// );
// }
// foreach ($chiefs as $v){
// $frag[] = array(
// 'journal'=>$v,
// 'type'=>'chief'
// );
// }
// foreach ($boards as $v){
// $frag[] = array(
// 'journal'=>$v,
// 'type'=>'board'
// );
// }
//
// $re['journals'] = $frag;
$re['journals'] = $journals;
$re['reviewer'] = $base_info;
return jsonSuccess($re);
}
/**
* 更改审稿人信息
*/
public function editReviewer()
{
$data = $this->request->post();
$this->user_reviewer_info_obj->where('reviewer_info_id', $data['reviewer_info_id'])->update(['major' => $data['major'], 'cmajor' => $data['cmajor']]);
return json(['code' => 0]);
}
/**获取复审稿件详情
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function getReviewerRepeatDetail(){
$data = $this->request->post();
$rule = new Validate([
"art_rev_id"=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id',$data['art_rev_id'])->find();
$article_info = $this->article_obj
->field("t_article.*,t_journal.title journal_title,t_journal.website")
->join("t_journal","t_journal.journal_id = t_article.journal_id","left")
->where('t_article.article_id',$art_rev_info['article_id'])
->find();
//组装审稿时间线
$c_question = $this->article_reviewer_question_obj->where('art_rev_id',$data['art_rev_id'])->find();
$question[] = $c_question;
$re_question = $this->article_reviewer_repeat_obj->where('art_rev_id',$data['art_rev_id'])->select();
foreach ($re_question as $v){
$question[] = $v;
}
$art_rev_info['question'] = $question;
$re['art_rev_info'] = $art_rev_info;
//组装文章文件
$response = $this->article_response_to_reviewer_obj->where('article_id',$article_info['article_id'])->select();
$files['response'] = $response;
$files['manuscript'] = $this->article_file_obj->where('article_id',$article_info['article_id'])->where('type_name',"manuscirpt")->order("ctime")->select();
$files['figures'] = $this->article_file_obj->where('article_id',$article_info['article_id'])->where('type_name',"picturesAndTables")->order("ctime")->select();
$files['supplementary'] = $this->article_file_obj->where('article_id',$article_info['article_id'])->where('type_name',"supplementary")->order("ctime")->select();
$re['files'] = $files;
$re['article_info'] = $article_info;
return jsonSuccess($re);
}
/**
* @title 发起审稿
* @description 发起审稿
* @author wangjinlei
* @url /api/Reviewer/editUserReviewer
* @method POST
*
* @param name:user_id type:int require:1 desc:审稿人userid
* @param name:email type:string require:1 desc:邮箱
* @param name:gender type:int require:1 desc:性别
* @param name:title type:string require:1 desc:用户title
* @param name:country type:string require:1 desc:国家
* @param name:major type:int require:1 desc:领域
* @param name:cmajor type:int require:1 desc:子领域
* @param name:field type:string require:1 desc:领域
* @param name:realname type:string require:0 desc:真实姓名
* @param name:orcid type:string require:0 desc:orcid
* @param name:introduction type:string require:0 desc:简介
* @param name:company type:string require:0 desc:单位
*/
public function editUserReviewer()
{
$data = $this->request->post();
$update['email'] = trim($data['email']);
$update['realname'] = isset($data['realname']) ? trim($data['realname']) : '';
$update['orcid'] = isset($data['orcid']) ? trim($data['orcid']) : '';
$this->user_obj->where('user_id', $data['user_id'])->update($update);
$info_update['gender'] = $data['gender'];
$info_update['technical'] = $data['title'];
$info_update['country'] = $data['country'];
$info_update['introduction'] = isset($data['introduction']) ? trim($data['introduction']) : '';
$info_update['company'] = isset($data['company']) ? trim($data['company']) : '';
$info_update['major'] = $data['major'];
$info_update['cmajor'] = $data['cmajor'];
$info_update['field'] = trim($data['field']);
$this->user_reviewer_info_obj->where('reviewer_id', $data['user_id'])->update($info_update);
return jsonSuccess([]);
}
/**
* 上传/修改文章审核实例详情两个文件(编辑,审稿人)
*/
public function articleReviewerUpSubmit($type)
{
//接受参数,查询信息
$data = $this->request->post();
$artrev_info = $this->article_reviewer_obj->where('art_rev_id', $data['artrevid'])->find();
$article_info = $this->article_obj->where('article_id', $artrev_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
$editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find();
if ($type == 'editor') {
$up_data['editor_act'] = 1;
$user_msg_url = '/reviewerArticleDetail?id=' . $data['artrevid'];
$user_info = $this->user_obj->where('account', $data['editor'])->find();
} else {
$up_data['reviewer_act'] = 1;
$user_msg_url = '/articleReviewerDetail?id=' . $data['artrevid'];
$user_info = $this->user_obj->where('user_id', $artrev_info['reviewer_id'])->find();
}
//上传
self::save_article_reviewer_file($data['artrevid'], $user_info['user_id'], $user_info['account'], $data['articlefile'], 'articlefile');
if ($data['articlezip'] != '') {
self::save_article_reviewer_file($data['artrevid'], $user_info['user_id'], $user_info['account'], $data['articlezip'], 'articlezip');
}
//更新实例状态
$this->article_reviewer_obj->where('art_rev_id', $data['artrevid'])->update($up_data);
//记录userlog
$log_data['user_id'] = $user_info['user_id'];
$log_data['type'] = 3;
$log_data['content'] = $user_info['account'] . "(" . $user_info['realname'] . "),更改了一篇文章审稿实例:(" . $article_info['title'] . ")的状态,更改时间是:" . date('Y-m-d H:i:s', time());
$log_data['ctime'] = time();
$this->user_log_obj->insert($log_data);
//发送email提醒
if ($type != 'editor') {
$tt = 'Dear editor,<br>';
$tt .= 'Please check the new comments from the reviewer.';
sendEmail($editor_info['email'], $journal_info['title'], $journal_info['title'], $tt, $journal_info['email'], $journal_info['epassword']);
$sendEditor = [
'title' => $journal_info['title'], // 邮件标题
'content' => 'Dear editor,<br>Please check the new comments from the reviewer.', //邮件内容
'user_id' => $journal_info['editor_id'], //收件人ID
'email' => $editor_info['email'], // 收件人邮箱
'journal_id' => $journal_info['journal_id'], // 期刊ID
'sendEmail' => $journal_info['email'], // 期刊邮箱
'sendPassword' => $journal_info['epassword'], // 期刊密码
'from_name' => $journal_info['title']
];
// Queue::push('app\api\job\domail@fire', $sendEditor, 'domail');
}
//保存usermsg
add_usermsg($type == 'editor' ? $artrev_info['reviewer_id'] : $journal_info['editor_id'], 'New status of the manuscript', $user_msg_url);
return json(['code' => 0]);
}
/**
* 获取文章审稿实例文件列表
*/
public function getFilelistByID()
{
$rev_id = $this->request->post('revid');
$where['art_rev_id'] = $rev_id;
$res = $this->article_reviewer_file_obj->where($where)->select();
$frag = [];
foreach ($res as $v) {
$frag[$v['type_name']][] = $v;
}
return json($frag);
}
/**
* @title 获取文章文件manuscirpt
* @description 获取文章文件manuscirpt
* @author wangjinlei
* @url /api/Reviewer/getAFilelistByID
* @method POST
*
* @param name:revid type:int require:1 desc:art_rev_id文章审稿实例id
*
*/
public function getAFilelistByID()
{
$rev_id = $this->request->post('revid');
$article_rev_info = $this->article_reviewer_obj->where('art_rev_id', $rev_id)->find();
$file_list = $this->article_file_obj->where('article_id', $article_rev_info['article_id'])->where('type_name', 'manuscirpt')->order('file_id desc')->limit(1)->select();
return json(['data' => $file_list]);
}
/**
* @title 获取文章文件picturesAndTables
* @description 获取文章文件picturesAndTables
* @author wangjinlei
* @url /api/Reviewer/getBFilelistByID
* @method POST
*
* @param name:revid type:int require:1 desc:art_rev_id文章审稿实例id
*
*/
public function getBFilelistByID()
{
$rev_id = $this->request->post('revid');
$article_rev_info = $this->article_reviewer_obj->where('art_rev_id', $rev_id)->find();
$file_list = $this->article_file_obj->where('article_id', $article_rev_info['article_id'])->where('type_name', 'picturesAndTables')->order('file_id desc')->limit(1)->select();
return json(['data' => $file_list]);
}
public function getCFilelistByID()
{
$rev_id = $this->request->post('revid');
$article_rev_info = $this->article_reviewer_obj->where('art_rev_id', $rev_id)->find();
$file_list = $this->article_file_obj->where('article_id', $article_rev_info['article_id'])->where('type_name', 'supplementary')->order('file_id desc')->limit(1)->select();
return json(['data' => $file_list]);
}
/**
* @title 审稿人详情页--获取文章审稿实例详情(审稿人,编辑)
* @description 审稿人详情页--获取文章审稿实例详情(审稿人,编辑)
* @author wangjinlei
* @url /api/Reviewer/getartrevdate
* @method POST
*
* @param name:revid type:int require:1 desc:art_rev_id文章审稿实例id
* @param name:human type:string require:1 desc:(reviewer/editor)
*/
public function getartrevdate()
{
//接受参数
$data = $this->request->post();
//查询实例数据
$res = $this->article_reviewer_obj->field('t_journal.*,t_article_reviewer.*,t_article.abstrart,t_article.title article_title,t_article.type atype,t_article.state astate,t_article.accept_sn accept_sn,t_user.account account')
->join('t_article', 't_article.article_id = t_article_reviewer.article_id', 'LEFT')
->join('t_user', 't_user.user_id = t_article_reviewer.reviewer_id', 'LEFT')
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'left')
->where('t_article_reviewer.art_rev_id', $data['revid'])
->find();
//文章类型转译
$res['atype'] = translateType($res['atype']);
//复审相关
$repeats = $this->article_reviewer_repeat_obj->where('art_rev_id',$data['revid'])->select();
if($repeats){
$last = count($repeats)-1;
$res['can_repeat'] = ($repeats[$last]['state']==1&&$repeats[$last]['recommend']==3)?1:0;
$res['repeat'] = $repeats;
}else{//不存在复审实例,可添加
$res['can_repeat'] = 1;
$res['repeat'] = [];
}
//更改实例状态(消息提醒)
if ($data['human'] == 'editor') {
$up_data['reviewer_act'] = 0;
} else {
$up_data['editor_act'] = 0;
}
$this->article_reviewer_obj->where('art_rev_id', $data['revid'])->update($up_data);
return json($res);
}
/**
* @title 申请审稿实例
* @description 申请审稿实例
* @author wangjinlei
* @url /api/Reviewer/addArticleReviewer
* @method POST
*
* @param name:articleId type:int require:1 desc:文章id
* @param name:uid type:int require:1 desc:用户id
*/
public function addArticleReviewer()
{
//接收参数,查询数据
$data = $this->request->post();
$article_info = $this->article_obj->where('article_id', $data['articleId'])->find();
$reviewer_info = $this->user_obj
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_user.user_id", "left")
->where('t_user.user_id', $data['uid'])
->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
//增加信息到文章审稿表
$insert_data['reviewer_id'] = $data['uid'];
$insert_data['article_id'] = $data['articleId'];
$insert_data['editor_act'] = 1;
$insert_data['ctime'] = time();
$res = $this->article_reviewer_obj->insertGetId($insert_data);
//发送email提醒审稿员
$tt = $article_info['accept_sn'] . '<br>';
$tt .= 'Dear Dr. ' . ($reviewer_info['realname'] == '' ? $reviewer_info["account"] : $reviewer_info['realname']) . '<br><br>';
$tt .= 'The manuscript entitled “' . $article_info['title'] . '” has'
. ' been submitted to the journal ' . $journal_info['title'] . '. The Editor-in-Chief would'
. ' be most grateful if you could offer an opinion regarding its suitability for publication'
. ' in the journal ' . $journal_info['title'] . '. <br>';
$tt .= "<strong>Abstract: ".$article_info['abstrart']."</strong><br>";
$tt .= 'Please bring into our knowledge if there is any potential Conflict of Interest. If you agree to review this manuscript, we ask you to complete your review and submit it by submission system within 10 days of receipt of the manuscript.<br><br>';
$tt .= 'Thank you for your consideration.<br> Look forward for your reply.<br>';
$tt .= '<a href="' . $this->creatLoginUrlForreviewer($reviewer_info, $res) . '">Click here to review the article</a><br>';
$tt .= 'Your username:' . $reviewer_info['account'] . '<br><br>';
$tt .= 'Your original password:123456qwe , if you have reset the password, please login with the new one or click the "<a href="https://submission.tmrjournals.com/retrieve">forgot password</a>".<br>';
$tt .= 'Sincerely,<br>Editorial Office<br>';
$tt .= '<a href="https://www.tmrjournals.com/draw_up.html?issn=' . $journal_info['issn'] . '">Subscribe to this journal</a><br>';
$tt .= $journal_info['title'] . '<br>';
$tt .= 'Email:' . $journal_info['email'] . '<br>';
$tt .= 'Website:' . $journal_info['website'];
$sendEditor = [
'title' => $journal_info['title'], // 邮件标题
'content' => $tt, //邮件内容
'user_id' => $reviewer_info['user_id'], //收件人ID
'email' => $reviewer_info['email'], // 收件人邮箱
'journal_id' => $journal_info['journal_id'], // 期刊ID
'sendEmail' => $journal_info['email'], // 期刊邮箱
'sendPassword' => $journal_info['epassword'], // 期刊密码
'from_name' => $journal_info['title']
];
// Queue::push('app\api\job\domail@fire', $sendEditor, 'domail');
sendEmail($reviewer_info['email'], $journal_info['title'], $journal_info['title'], $tt, $journal_info['email'], $journal_info['epassword']);
return jsonSuccess([]);
}
/**
* @title 获取文章详情
* @description 获取文章详情
* @author wangjinlei
* @url /api/Reviewer/getArticleDetail
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
*/
public function getArticleDetail()
{
$data = $this->request->post();
$info = $this->article_obj->field('t_article.*,t_journal.title journal_title')
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'left')
->where('t_article.article_id', $data['article_id'])
->find();
$major = $this->reviewer_major_obj->where('major_id', $info['major_id'])->find();
$cmajor = $this->reviewer_major_obj->where('major_id', $info['cmajor_id'])->find();
$info['major'] = $major['title'];
$info['cmajor'] = $cmajor['title'];
$re['article'] = $info;
return jsonSuccess($re);
}
public function getRevEmailByTopic(){
$data = $this->request->post();
$topic= $this->reviewer_major_obj->where('title',trim($data['topic']))->where('state',0)->find();
if($topic==null){
return jsonError("topic not find");
}
$list = $this
->user_reviewer_info_obj
->field('t_user.user_id,t_user.email')
->join('t_user','t_user.user_id = t_user_reviewer_info.reviewer_id','left')
->where('t_user_reviewer_info.major',$topic['major_id'])
->where('t_user.is_advert',0)
->where('t_user_reviewer_info.state',0)
->select();
$re['reviewers'] = $list;
return jsonSuccess($re);
}
public function getReviewerOnChina(){
$res = $this->user_obj
->field("t_user.email")
->join("t_user_reviewer_info","t_user_reviewer_info.reviewer_id = t_user.user_id","left")
->where('t_user_reviewer_info.country','China')
->whereOr('t_user_reviewer_info.country','中国')
->select();
$re['emails']=$res;
return jsonSuccess($re);
}
/**
* @title 提交问卷(审稿人)
* @description 提交问卷(审稿人)
* @author wangjinlei
* @url /api/Reviewer/questionSubmit
* @method POST
*
* @param name:art_rev_id type:int require:1 desc:art_rev_id文章审稿实例id
* @param name:qu1 type:int require:1 desc:问题1
* @param name:qu2 type:int require:1 desc:问题2
* @param name:qu3 type:int require:1 desc:问题3
* @param name:qu4 type:int require:1 desc:问题4
* @param name:qu5 type:int require:1 desc:问题5
* @param name:qu6 type:int require:1 desc:问题6
* @param name:qu7 type:int require:1 desc:问题7
* @param name:qu8 type:int require:1 desc:问题8
* @param name:qu9 type:int require:1 desc:问题9
* @param name:qu9contents type:string require:1 desc:问题9描述
* @param name:qu10 type:int require:1 desc:问题10
* @param name:qu10contents type:string require:1 desc:问题10描述
* @param name:qu11 type:int require:1 desc:问题11
* @param name:qu11contents type:string require:1 desc:问题11描述
* @param name:qu12 type:int require:1 desc:问题12
* @param name:qu12contents type:string require:1 desc:问题12描述
* @param name:qu13 type:int require:1 desc:问题13
* @param name:qu13contents type:string require:1 desc:问题13描述
* @param name:qu14 type:int require:1 desc:问题14
* @param name:qu14contents type:string require:1 desc:问题14描述
* @param name:qu15 type:int require:1 desc:问题15
* @param name:qu15contents type:string require:1 desc:问题15描述
* @param name:rated type:int require:1 desc:分数
* @param name:recommend type:int require:1 desc:最终决定
* @param name:other type:int require:1 desc:其他
* @param name:confident type:string require:1 desc:对编辑的意见
* @param name:comment type:string require:1 desc:对作者的意见
* @param name:is_anonymous string require:1 desc:是否匿名0否1是
*
*/
public function questionSubmit()
{
//接受参数,查询基础数据
$data = $this->request->post();
// $data['rev_qu_id'] = 3;
// $data['art_rev_id'] = 23;
// $data['qu1'] = 1;
// $data['qu2'] = 2;
// $data['qu3'] = 3;
// $data['qu4'] = 1;
// $data['qu5'] = 4;
// $data['qu6'] = 2;
// $data['qu7'] = 3;
// $data['qu8'] = 1;
// $data['qu9'] = 2;
// $data['qu9contents'] = '';
// $data['qu10'] = 'true';
// $data['qu10contents'] = '';
// $data['qu11'] = 'true';
// $data['qu11contents'] = '';
// $data['qu12'] = 'true';
// $data['qu12contents'] = '';
// $data['qu13'] = 'true';
// $data['qu13contents'] = '';
// $data['qu14'] = 'true';
// $data['qu14contents'] = '';
// $data['qu15'] = 'true';
// $data['qu15contents'] = '';
// $data['rated'] = 7;
// $data['recommend'] = 2;
// $data['other'] = 1;
// $data['confident'] = 'contetn1';
// $data['comment'] = 'contetsdasd';
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
$article_info = $this->article_obj->where('article_id', $art_rev_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
$editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find();
//不可重复提交答案的验证
$check_question = $this->article_reviewer_question_obj->where('art_rev_id',$data['art_rev_id'])->find();
if($check_question){
return jsonError("Non repeatable review");
}
//验证字数
$content = $data['qu9contents']." ".$data['qu10contents']." ".$data['qu11contents']." ".$data['qu12contents']." ".$data['qu13contents']." ".$data['qu14contents']." ".$data['qu15contents']." ".$data['comment'];
if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $content)>0){//含有中文
return jsonError("Cannot contain Chinese");
// if($journal_info['journal_id']==1){
// if(mb_strlen($content, 'UTF8')<150){
// return jsonError("We encourage you to enrich your comment further to help improve the peer paper (at least 150 words).");
// }
// }else{
// if(mb_strlen($content, 'UTF8')<100){
// return jsonError("We encourage you to enrich your comment further to help improve the peer paper (at least 70 words).");
// }
// }
}else{//不含中文
if($journal_info['journal_id']==1){
$carray = explode(" ", $content);
if(count($carray)<150){
return jsonError("We encourage you to enrich your comment further to help improve the peer paper (at least 150 words).");
}
}else{
$carray = explode(" ", $content);
if(count($carray)<100){
return jsonError("We encourage you to enrich your comment further to help improve the peer paper (at least 70 words).");
}
}
}
//组合insert数据,存储
$insert_data['art_rev_id'] = $data['art_rev_id'];
$insert_data['qu1'] = $data['qu1'];
$insert_data['qu2'] = $data['qu2'];
$insert_data['qu3'] = $data['qu3'];
$insert_data['qu4'] = $data['qu4'];
$insert_data['qu5'] = $data['qu5'];
$insert_data['qu6'] = $data['qu6'];
$insert_data['qu7'] = $data['qu7'];
$insert_data['qu8'] = $data['qu8'];
$insert_data['qu9'] = $data['qu9'] == "true" ? 1 : 0;
$insert_data['qu9_contents'] = $data['qu9contents'];
$insert_data['qu10'] = $data['qu10'] == "true" ? 1 : 0;
$insert_data['qu10_contents'] = $data['qu10contents'];
$insert_data['qu11'] = $data['qu11'] == "true" ? 1 : 0;
$insert_data['qu11_contents'] = $data['qu11contents'];
$insert_data['qu12'] = $data['qu12'] == "true" ? 1 : 0;
$insert_data['qu12_contents'] = $data['qu12contents'];
$insert_data['qu13'] = $data['qu13'] == "true" ? 1 : 0;
$insert_data['qu13_contents'] = $data['qu13contents'];
$insert_data['qu14'] = $data['qu14'] == "true" ? 1 : 0;
$insert_data['qu14_contents'] = $data['qu14contents'];
$insert_data['qu15'] = $data['qu15'] == "true" ? 1 : 0;
$insert_data['qu15_contents'] = $data['qu15contents'];
$insert_data['rated'] = $data['rated'];
$insert_data['recommend'] = $data['recommend'];
$insert_data['other'] = $data['other'];
$insert_data['confidential'] = $data['confident'];
$insert_data['comments'] = $data['comment'];
$insert_data['is_anonymous'] = isset($data['is_anonymous']) ? $data['is_anonymous'] : 0;
if ($data['rev_qu_id'] == '') { //新增
$insert_data['ctime'] = time();
$res = $this->article_reviewer_question_obj->insert($insert_data);
} else { //更新
$res = $this->article_reviewer_question_obj->where('rev_qu_id', $data['rev_qu_id'])->update($insert_data);
}
//根据recommend问题改变此实例的状态,并且更改act消息提醒状态
if ($data['recommend'] == 1) {
$artrevstate = 3;
} else if ($data['recommend'] == 2) {
$artrevstate = 1;
} else {
$artrevstate = 2;
}
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => $artrevstate, 'reviewer_act' => 1]);
//文章是从初始状态到其他状态,增加审稿人成功审核次数
if ($art_rev_info['state'] == 0) {
$this->user_obj->where('user_id', $art_rev_info['reviewer_id'])->setInc('rs_num');
}
//添加文章状态信息
$in_data['article_id'] = $article_info['article_id'];
$in_data['content'] = 'Comments from the reviewer has been received';
$in_data['state_from'] = $article_info['state'];
$in_data['state_to'] = $article_info['state'];
$in_data['ctime'] = time();
// $this->article_msg_obj->insert($in_data);
//记录log
//生成pdf文件
// $reviewer_pdf = self::pdftest($journal_info['title']);
$reviewer_ZS = self::createReviewerZS($data['art_rev_id']);
//发送email->编辑
$tt = 'Dear editor,<br>';
$tt .= 'Please check the new comments from the reviewer.<br>';
$tt .= 'Journal:' . $journal_info['title'] . ' and article title:' . $article_info['title'];
$sendEditor = [
'title' => $journal_info['title'], // 邮件标题
'content' => $tt, //邮件内容
'user_id' => $journal_info['editor_id'], //收件人ID
'email' => $editor_info['email'], // 收件人邮箱
'journal_id' => $journal_info['journal_id'], // 期刊ID
'sendEmail' => $journal_info['email'], // 期刊邮箱
'sendPassword' => $journal_info['epassword'], // 期刊密码
'from_name' => $journal_info['title']
];
// Queue::push('app\api\job\domail@fire', $sendEditor, 'domail');
sendEmail($editor_info['email'], $journal_info['title'], $journal_info['title'], $tt, $journal_info['email'], $journal_info['epassword']);
//发送email感谢reviewer并携带附件
$reviewer_info = $this->user_obj->where('user_id', $art_rev_info['reviewer_id'])->find();
$tt1 = 'You have reviewed 1 submission in the journal ' . $journal_info['title'] . ' during ' . date('Y') . '.Thank you for your support to our journal. This contribution is greatly appreciated.<br><br>';
$tt1 .= 'Regards<br>Editorial Office<br>' . $journal_info['title'] . '<br><br>';
$tt1 .= 'Contact us<br>TMR Publishing Group Address: 11 Cockle Bay Rd, Cockle Bay, Auckland 2014, New Zealand<br>Telephone: +64 02108293806<br>E-mail: publisher@tmrjournals.com';
//为审稿人增加积分
$score = 0;
if($journal_info['level']=='A'){
$score = 0.3;
}elseif($journal_info['level']=="B"){
$score = 0.2;
}else{
$score = 0.1;
}
addUserScoreLog($art_rev_info['reviewer_id'],$score,"add score ".$score." for review article",time());
$this->user_obj->where('user_id',$art_rev_info['reviewer_id'])->setInc('score',$score);
$sendReviewer = [
'title' => 'Your contribution is greatly appreciated', // 邮件标题
'content' => $tt1, //邮件内容
'user_id' => $reviewer_info['user_id'], //收件人ID
'email' => $reviewer_info['email'], // 收件人邮箱
'journal_id' => $journal_info['journal_id'], // 期刊ID
'sendEmail' => $journal_info['email'], // 期刊邮箱
'sendPassword' => $journal_info['epassword'], // 期刊密码
'from_name' => $journal_info['title'],
'attachment_url' => $reviewer_ZS
];
// Queue::push('app\api\job\domail@fire', $sendReviewer, 'domail');
sendEmail($reviewer_info['email'], 'Your contribution is greatly appreciated', $journal_info['title'], $tt1, $journal_info['email'], $journal_info['epassword'], $reviewer_ZS);
//记录usermsg
add_usermsg($journal_info['editor_id'], 'Feedback questionnaire be uploaded:'.$article_info['accept_sn']."(".$reviewer_info['account'].":".$reviewer_info['email'].")", '/articleReviewerDetail?id=' . $data['art_rev_id']);
return json(['code' => 0]);
}
// public function jpg_test(){
// $reviewer_ZS = self::createReviewerZS(3380);
// sendEmail("1586428462@qq.com", "title", "ttttt", "content", 'tmr@tmrjournals.com', "Wu9999999999", $reviewer_ZS);
// }
public function changeJournalReviewerForPD($userId){
$info = $this->reviewer_to_journal_obj->where("journal_id",4)->where("reviewer_id",$userId)->where("state",0)->find();
if($info==null){
echo "system error!";
return ;
}
$this->reviewer_to_journal_obj->where("rtj_id",$info['rtj_id'])->update(["journal_id"=>22,"journal_title"=>"Pharmacology Discovery"]);
echo "You have successfully joined the Pharmacology Discovery reviewer team. We greatly appreciate your support and contributions, and look forward to continuing our collaboration in this new field. Thank you for your ongoing contributions to scientific advancement!";
}
/**提交复审
* @return \think\response\Json
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @throws \think\exception\PDOException
*/
public function questionRepeat(){
$data = $this->request->post();
$rule = new Validate([
"art_rev_rep_id"=>"require",
"recommend"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$repeat_info = $this->article_reviewer_repeat_obj->where('art_rev_rep_id',$data['art_rev_rep_id'])->find();
$art_info = $this->article_reviewer_obj->where('art_rev_id',$repeat_info['art_rev_id'])->find();
$reviewer_info = $this->user_obj->where('user_id',$art_info['reviewer_id'])->find();
$article_info = $this->article_obj->where('article_id',$art_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find();
$update['recommend'] = $data['recommend'];
$update['stime'] = time();
if($data['recommend']==3){
$update['content'] = isset($data['content'])?trim($data['content']):'';
$this->article_reviewer_obj->where("art_rev_id",$repeat_info['art_rev_id'])->update(['state'=>1]);
}
$update['state'] = 1;
$this->article_reviewer_repeat_obj->where('art_rev_rep_id',$data['art_rev_rep_id'])->update($update);
//更新审稿实例
if($data['recommend']!=3){
$state = $data['recommend']==1?3:2;
$this->article_reviewer_obj->where("art_rev_id",$repeat_info['art_rev_id'])->update(['state'=>$state]);
}
//复审后发送邮件
//增加usermsg
add_usermsg($journal_info['editor_id'], 'New re_reviewer:'.$article_info['accept_sn']."(".$reviewer_info['account'].":".$reviewer_info['email'].")", '/articleReviewerDetail?id=' . $art_info['art_rev_id']);
return jsonSuccess([]);
}
/**
* 获取问卷详情
*/
public function getQuestion()
{
$id = $this->request->post('artrevid');
$qu_info = $this->article_reviewer_question_obj->where('art_rev_id', $id)->find();
if ($qu_info) {
return json(['code' => 0, 'data' => $qu_info]);
} else {
return json(['code' => 1]);
}
}
/**
* 上传文章的文件
*/
public function up_file($type)
{
$file = request()->file($type);
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . $type);
if ($info) {
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
/**
* @title 审稿人cv上传
* @description 审稿人cv上传
* @author wangjinlei
* @url /api/Reviewer/up_cv_file
* @method POST
*
* @param name:name type:string require:1 default:reviewerCV desc:文件域名称
*
* @return upurl:图片地址
*/
public function up_cv_file()
{
$file = request()->file('reviewerCV');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'reviewer');
if ($info) {
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
/**
* @title 待审文章页--获取待审文章列表
* @description 待审文章页--获取待审文章列表
* @author wangjinlei
* @url /api/Reviewer/getAllReviewerList
* @method POST
*
* @param name:user_id type:int require:1 desc:审稿人userid
* @param name:journal_id type:int require:1 desc:期刊id
* @param name:pageIndex type:int require:1 desc:当前页码
* @param name:pageSize type:int require:1 desc:每个页面的数据条数
*
* @return articles:文章列表#
* @return count:总数#
*/
public function getAllReviewerList()
{
$data = $this->request->post();
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$artids = $this->article_reviewer_obj->where('reviewer_id', $data['user_id'])->column('article_id');
$count = 0;
if ($data['journal_id'] == 0) {
$journals = $this->reviewer_to_journal_obj->where('reviewer_id', $data['user_id'])->column('journal_id');
$arts = $this->article_obj
->field("t_article.*,t_article.major_id,t_article.abstrart,t_article.cmajor_id,t_journal.title journal_title")
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'left')
->where('t_article.state', 2)
->where('t_article.article_id', 'not in', $artids)
->where('t_article.journal_id', 'in', $journals)
->limit($limit_start, $data['pageSize'])
->select();
$count = $this->article_obj->where('state', 2)->where('article_id', 'not in', $artids)->where('journal_id', 'in', $journals)->count();
} else {
$arts = $this->article_obj
->field("t_article.*,t_article.major_id,t_article.abstrart,t_article.cmajor_id,t_journal.title journal_title")
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'left')
->where('t_article.journal_id', $data['journal_id'])
->where('t_article.article_id', 'not in', $artids)
->where('t_article.state', 2)
->limit($limit_start, $data['pageSize'])->select();
$count = $this->article_obj->where('journal_id', $data['journal_id'])->where('article_id', 'not in', $artids)->where('state', 2)->count();
}
foreach ($arts as $k => $v) {
if ($v['type']) {
$arts[$k]['type'] = translateType($v['type']);
}
}
//加上文章领域
foreach ($arts as $k => $v) {
$major = $this->reviewer_major_obj->where('major_id', $v['major_id'])->find();
$cmajor = $this->reviewer_major_obj->where('major_id', $v['cmajor_id'])->find();
$arts[$k]['major'] = $major['title'];
$arts[$k]['cmajor'] = $cmajor['title'];
}
$re['articles'] = $arts;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* @title 获取审稿人证书
* @description 获取审稿人证书
* @author wangjinlei
* @url /api/Reviewer/getZSimg
* @method POST
*
* @param name:art_rev_id type:int require:1 desc:文章审稿实例id
*/
public function getZSimg()
{
$data = $this->request->post();
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
$article_info = $this->article_obj->where('article_id', $art_rev_info['article_id'])->find();
// if($article_info['rtime']==0){
// return jsonError('Certificate not issued');
// }
if (!file_exists(ROOT_PATH . 'public' . DS . 'reviewerZS' . DS . $data['art_rev_id'] . '.jpg')) {
$this->createZS($data['art_rev_id']);
}
$re['icon'] = 'reviewerZS' . DS . $data['art_rev_id'] . '.jpg';
return jsonSuccess($re);
}
/**
* 创建证书方法
*/
private function createZS($art_rev_id)
{
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $art_rev_id)->find();
$reviewer_info = $this->user_obj->where('user_id', $art_rev_info['reviewer_id'])->find();
$article_info = $this->article_obj->where('article_id', $art_rev_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
$rev_ques_info = $this->article_reviewer_question_obj->where('art_rev_id',$art_rev_id)->find();
// $url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getJournalIcon';
// $res = object_to_array(json_decode(myPost($url, ['issn'=>$journal_info['issn']])));
// $img = 'http://journalapi.tmrjournals.com/public/journalicon/'.$res['data']['icon'];
$template = ROOT_PATH . 'public' . DS . 'reviewerZS' . DS . 'zs.jpg';
$ziti = ROOT_PATH . 'public' . DS . 'zhengshu' . DS . 'siyuan.ttf';
$image = \think\Image::open($template);
$image->text($journal_info['title'], $ziti, 70, '#000000', [1450, 950])
->text($reviewer_info['realname'] == '' ? $reviewer_info['account'] : $reviewer_info['realname'], $ziti, 60, '#000000', [1900, 1700])
->text('awarded ' . date('d, F, Y', $rev_ques_info['ctime'] == 0 ? $article_info['ctime'] : $rev_ques_info['ctime']) . ' to', $ziti, 60, '#000000', [1600, 1500])
->text('In recognition of the review made for the journal', $ziti, 80, '#000000', [900, 1900])
->text($article_info['title'], $ziti, 30, '#000000', [230, 2100])
->text('The Editors of', $ziti, 65, '#000000', [230, 2345])
->text($journal_info['title'], $ziti, 60, '#000000', [830, 2345])
->text('Auckland, New Zealand, 2012', $ziti, 60, '#000000', [230, 2500])
->save(ROOT_PATH . 'public' . DS . 'reviewerZS' . DS . $art_rev_id . '.jpg');
}
/**
* @title 审稿人申请审稿
* @description 审稿人申请审稿
* @author wangjinlei
* @url /api/Reviewer/launchReviewer
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
* @param name:user_id type:int require:1 desc:发起者userid
*
*/
public function launchReviewer()
{
$data = $this->request->post();
//审查是否重复发起
$che = $this->article_reviewer_obj->where('article_id', $data['article_id'])->where('reviewer_id', $data['user_id'])->find();
if ($che != null) {
return jsonError('has review');
}
//审查发起者是否具有审稿的权限
$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();
$user_info = $this->user_obj->where('user_id', $data['user_id'])->find();
$user_rev_info = $this->user_reviewer_info_obj->where("reviewer_id", $user_info['user_id'])->find();
$re_res = $this->reviewer_to_journal_obj->where('reviewer_id', $data['user_id'])->find();
$bo_res = $this->board_to_journal_obj->where('user_id', $data['user_id'])->find();
if ($re_res == null && $bo_res == null) {
return jsonError('No permission');
}
//增加信息到文章审稿表
$insert_data['reviewer_id'] = $data['user_id'];
$insert_data['article_id'] = $data['article_id'];
$insert_data['editor_act'] = 1;
$insert_data['ctime'] = time();
$res = $this->article_reviewer_obj->insertGetId($insert_data);
//发送email提醒审稿员
$tt = $article_info['accept_sn'] . '<br>';
$tt .= 'Dear Dr. ' . ($user_info['realname'] == '' ? $user_info['account'] : $user_info['realname']) . '<br><br>';
$tt .= 'The manuscript entitled “' . $article_info['title'] . '” has'
. ' been submitted to the journal ' . $journal_info['title'] . '. The Editor-in-Chief would'
. ' be most grateful if you could offer an opinion regarding its suitability for publication'
. ' in the journal ' . $journal_info['title'] . '. <br>';
$tt .= 'Please bring into our knowledge if there is any potential Conflict of Interest. If you agree to review this manuscript, we ask you to complete your review and submit it by submission system within 10 days of receipt of the manuscript.<br><br>';
$tt .= 'Thank you for your consideration.<br> Look forward for your reply.<br>';
$tt .= '<a href="' . $this->creatLoginUrlForreviewer($user_info, $article_info['article_id']) . '">Click here to review the article</a><br>';
$tt .= 'Your username:' . $user_info['account'] . '<br><br>';
$tt .= 'Your original password:123456qwe , if you have reset the password, please login with the new one or click the "<a href="https://submission.tmrjournals.com/retrieve">forgot password</a>".<br>';
$tt .= 'Sincerely,<br>Editorial Office<br>';
$tt .= '<a href="https://www.tmrjournals.com/draw_up.html?issn=' . $journal_info['issn'] . '">Subscribe to this journal</a><br>';
$tt .= $journal_info['title'] . '<br>';
$tt .= 'Email:' . $journal_info['email'] . '<br>';
$tt .= 'Website:' . $journal_info['website'];
sendEmail($user_info['email'], $journal_info['title'], $journal_info['title'], $tt, $journal_info['email'], $journal_info['epassword']);
//添加文章状态信息
$in_data['article_id'] = $article_info['article_id'];
$in_data['content'] = 'The reviewer has been appointed';
$in_data['state_from'] = $article_info['state'];
$in_data['state_to'] = $article_info['state'];
$in_data['ctime'] = time();
// $this->article_msg_obj->insert($in_data);
$re['art_rev_id'] = $res;
return jsonSuccess($re);
}
private function creatLoginUrlForreviewer($user, $article_id)
{
$code = md5(time() . rand(1000, 9999) . 'thinkphp');
$insert['user_id'] = $user['user_id'];
$insert['code'] = $code;
$insert['ctime'] = time();
$this->login_auto_obj->insert($insert);
$url = 'https://submission.tmrjournals.com/per_text?Art_id=' . $article_id . '&act=' . $code;
return $url;
}
/**
* @title 审稿人同意审稿
* @description 审稿人同意审稿
* @author wangjinlei
* @url /api/Reviewer/agreeReviewerArticle
* @method POST
*
* @param name:art_rev_id type:int require:1 desc:文章审稿id
*/
public function agreeReviewerArticle()
{
$data = $this->request->post();
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
if ($art_rev_info['state'] == 5) {
//添加找到审稿人信息的article msg
$article_info = $this->article_obj->where('article_id',$art_rev_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find();
//添加文章状态信息
$insert_data['article_id'] = $article_info['article_id'];
$insert_data['content'] = 'The reviewer has been appointed';
$insert_data['state_from'] = $article_info['state'];
$insert_data['state_to'] = $article_info['state'];
$insert_data['ctime'] = time();
// $this->article_msg_obj->insert($insert_data);
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 0]);
return jsonSuccess([]);
} else {
return jsonError("Status changed fail");
}
}
/**
* @title 审稿人拒绝审稿
* @description 审稿人拒绝审稿
* @author wangjinlei
* @url /api/Reviewer/refuseReviewerArticle
* @method POST
*
* @param name:art_rev_id type:int require:1 desc:文章审稿id
*/
public function refuseReviewerArticle()
{
$data = $this->request->post();
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
if ($art_rev_info['state'] == 5) {
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 4]);
//记录审稿失败次数
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
$this->user_obj->where("user_id", $art_rev_info["reviewer_id"])->setInc("rd_num");
return jsonSuccess([]);
} else {
return jsonError("Status changed fail");
}
}
/**
* 拒绝审稿get方法
*/
public function refusereview($aid)
{
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $aid)->find();
if ($art_rev_info == null) {
return "error";
}
$this->article_reviewer_obj->where('art_rev_id', $aid)->update(['state' => 4]);
//记录审稿失败次数
$this->user_obj->where("user_id", $art_rev_info["reviewer_id"])->setInc("rd_num");
echo "You have declined the reviewing invitation.";
}
/**
* @title 获取邀请审稿实例列表
* @description 获取邀请审稿实例列表
* @author wangjinlei
* @url /api/Reviewer/getInvitatReviewList
* @method POST
*
* @param name:user_id type:int require:1 desc:审稿人id
*/
public function getInvitatReviewList()
{
$data = $this->request->post();
$res = $this->article_reviewer_obj
->field("t_article_reviewer.art_rev_id,t_article.*,t_journal.title journal_title")
->join('t_article', 't_article.article_id = t_article_reviewer.article_id', 'left')
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'left')
->where('t_article_reviewer.reviewer_id', $data['user_id'])
->where('t_article_reviewer.state', 5)
->where("t_article.state",2)
->select();
foreach ($res as $k => $v) {
if ($v['type']) {
$res[$k]['type'] = translateType($v['type']);
}
}
//加上文章领域
foreach ($res as $k => $v) {
$major = $this->reviewer_major_obj->where('major_id', $v['major_id'])->find();
$cmajor = $this->reviewer_major_obj->where('major_id', $v['cmajor_id'])->find();
$res[$k]['major'] = $major['title'];
$res[$k]['cmajor'] = $cmajor['title'];
}
$re['articles'] = $res;
return jsonSuccess($re);
}
/**
* @title 审查用户是否有审稿的权限
* @description 审查用户是否有审稿的权限
* @author wangjinlei
* @url /api/Reviewer/checkUserForReviewer
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
* @param name:user_id type:int require:1 desc:发起者userid
*/
public function checkUserForReviewer()
{
$data = $this->request->post();
$re_res = $this->article_reviewer_obj->where('reviewer_id', $data['user_id'])->where('article_id', $data['article_id'])->find();
if ($re_res != null) {
return jsonSuccess([]);
} else {
return jsonError('No permission');
}
}
/**
* @title 检测用户
* @description 检测用户
* @author wangjinlei
* @url /api/Reviewer/checkUser
* @method POST
*
* @param name:account type:string require:1 desc:用户名/邮箱
*
* @return has:no-has(无-有)#
*/
public function checkUser()
{
$data = $this->request->post();
$user_info = $this->user_obj->where('account|email', $data['account'])->find();
$has = '';
if ($user_info == null) {
$has = 'no';
} else {
$has = 'has';
}
$re['has'] = $has;
return jsonSuccess($re);
}
/**
* @title 检测用户是否是为某本期刊的审稿人
* @description 检测用户是否是为某本期刊的审稿人
* @author wangjinlei
* @url /api/Reviewer/checkReviewerOfJournal
* @method POST
*
* @param name:username type:string require:1 desc:用户名
* @param name:journal type:int require:1 desc:期刊id
*
* @return has:是否存在(0不存在1存在)
*/
public function checkReviewerOfJournal()
{
$data = $this->request->post();
$user_info = $this->user_obj->where('account', $data['username'])->where('state', 0)->find();
if ($user_info == null) {
return jsonError("username error!!");
}
$check = $this->reviewer_to_journal_obj->where("reviewer_id", $user_info['user_id'])->where('journal_id', $data['journal'])->where('state', 0)->find();
$re['has'] = $check == null ? 0 : 1;
return jsonSuccess($re);
}
/**
* @title 获取审稿人领域
* @description 获取审稿人领域
* @author wangjinlei
* @url /api/Reviewer/getMajorForReviewer
* @method POST
*
* @param name:username type:string require:1 desc:用户名
*
* @return major:领域id(0:不存在)
*/
public function getMajorForReviewer()
{
$data = $this->request->post();
$user_info = $this->user_obj->where('account', $data['username'])->where('state', 0)->find();
$reviewer_info = $this->user_reviewer_info_obj->where("reviewer_id", $user_info['user_id'])->where('state', 0)->find();
$re["major"] = $reviewer_info == null ? 0 : $reviewer_info['major'];
return jsonSuccess($re);
}
/**
* @title 获取专业领域
* @description 获取专业领域
* @author wangjinlei
* @url /api/Reviewer/getMajor
* @method POST
*
* @param name:pid type:int require:1 desc:0为顶级栏目
*
* @return majors:专业列表#
*/
public function getMajor()
{
$data = $this->request->post();
$majors = $this->reviewer_major_obj->where('pid', $data['pid'])->where('state', 0)->select();
$re['majors'] = $majors;
return jsonSuccess($re);
}
/**
* @title 获取全部专业领域
* @description 获取全部专业领域
* @author wangjinlei
* @url /api/Reviewer/getAllMajor
* @method POST
*
* @return majors:专业列表#
*/
public function getAllMajor()
{
$majors = $this->reviewer_major_obj->where('pid', 0)->where('state', 0)->select();
foreach ($majors as $k => $v) {
$cmajors = $this->reviewer_major_obj->where('pid', $v['major_id'])->where('state', 0)->select();
$majors[$k]['children'] = $cmajors;
}
$re['majors'] = $majors;
return jsonSuccess($re);
}
/**
* @title 添加reviewer
* @description 添加reviewer
* @author wangjinlei
* @url /api/Reviewer/addReviewer
* @method POST
*
* @param name:journal_id type:int require:1 desc:期刊id
* @param name:account type:string require:1 desc:账户
* @param name:email type:string require:1 desc:邮箱
* @param name:gender type:int require:1 desc:性别
* @param name:title type:string require:1 desc:用户title
* @param name:country type:string require:1 desc:国家
* @param name:major type:int require:1 desc:领域
* @param name:cmajor type:int require:1 desc:子领域
* @param name:field type:string require:1 desc:领域
* @param name:realname type:string require:0 desc:真实姓名
* @param name:orcid type:string require:0 desc:orcid
* @param name:introduction type:string require:0 desc:简介
* @param name:company type:string require:0 desc:单位
* @param name:cv type:string require:1 desc:审稿人简历
*/
public function addReviewer()
{
$data = $this->request->post();
// $data['account'] = "wjl";
// $data['cmajor'] = "36";
// $data['country'] = "China";
// $data['email'] = "wjl@126.com";
// $data['gender'] = "2";
// $data['journal_id'] = "1";
// $data['major'] = "3";
// $data['title'] = "Ph.D.";
// $data['field'] = "123454";
$check = $this->user_obj->where('account', trim($data['account']))->whereOr('email', $data['email'])->find();
if ($check != null) {
return jsonError($data['account'] . ' has register');
}
$journal_info = $this->journal_obj->where('journal_id', $data['journal_id'])->find();
Db::startTrans();
//筛选数据,添加数据
$insert['account'] = trim($data['account']);
$insert['password'] = md5('123456qwe');
$insert['email'] = trim($data['email']);
$insert['realname'] = isset($data['realname']) ? trim($data['realname']) : '';
$insert['orcid'] = isset($data['orcid']) ? trim($data['orcid']) : '';
$insert['ctime'] = time();
$insert['type'] = 1;
$insert['is_reviewer'] = 1;
$uid = $this->user_obj->insertGetId($insert);
$info_insert['reviewer_id'] = $uid;
$info_insert['gender'] = $data['gender'];
$info_insert['technical'] = $data['title'];
$info_insert['country'] = $data['country'];
$info_insert['introduction'] = isset($data['introduction']) ? trim($data['introduction']) : '';
$info_insert['company'] = isset($data['company']) ? trim($data['company']) : '';
$info_insert['major'] = $data['major'];
$cv = isset($data['cv'])?trim($data['cv']):'';
// $info_insert['qualifications'] = $cv;
//处理cv表
if($cv!=''){
$cv_obj["user_id"] = $uid;
$cv_obj["cv"] = $cv;
$cv_obj['ctime'] = time();
$this->user_cv_obj->insert($cv_obj);
}
$info_insert['field'] = trim($data['field']);
$info_insert['test_from'] = "addReviewer";
$res1 = $this->user_reviewer_info_obj->insertGetId($info_insert);
$to_insert['reviewer_id'] = $uid;
$to_insert['journal_id'] = $data['journal_id'];
$to_insert['account'] = trim($data['account']);
$to_insert['journal_title'] = $journal_info['title'];
$to_insert['ctime'] = time();
$res2 = $this->reviewer_to_journal_obj->insertGetId($to_insert);
if ($uid && $res1 && $res2) {
Db::commit();
//发送邮件通知审稿人
// $content = "Please find your following username and original password. Editorial team thank you for your supprot.<br/>";
// $content .= '<a href="https://submission.tmrjournals.com">SubmissionSystem</a><br>';
// $content .= '<p>username:' . trim($data['account']) . '</p>';
// $content .= '<p>Original Password: 123456qwe</p>';
// $maidata['email'] = trim($data['email']);
// $maidata['title'] = $journal_info['title'];
// $maidata['content'] = $content;
// $maidata['tmail'] = $journal_info['email'];
// $maidata['tpassword'] = $journal_info['epassword'];
// Queue::push('app\api\job\mail@fire', $maidata, "tmail");
return jsonSuccess([]);
} else {
Db::rollback();
return jsonError('add error!');
}
}
/**
* @title 添加reviewer(已存在用户)
* @description 添加reviewer(已存在用户)
* @author wangjinlei
* @url /api/Reviewer/addReviewerBee
* @method POST
*
* @param name:journal_id type:int require:1 desc:期刊id
* @param name:user_id type:int require:1 desc:用户id
* @param name:gender type:int require:1 desc:性别
* @param name:title type:string require:1 desc:用户title
* @param name:country type:string require:1 desc:国家
* @param name:major type:int require:1 desc:领域
* @param name:cmajor type:int require:1 desc:子领域
* @param name:field type:string require:1 desc:领域
* @param name:introduction type:string require:0 desc:简介
* @param name:company type:string require:0 desc:单位
* @param name:cv type:string require:1 desc:审稿人简历
*/
public function addReviewerBee()
{
$data = $this->request->post();
$journal_info = $this->journal_obj->where('journal_id', $data['journal_id'])->find();
$user_info = $this->user_obj->where('user_id', $data['user_id'])->where('state', 0)->find();
$reviewer_info = $this->user_reviewer_info_obj->where('reviewer_id', $data['user_id'])->where('state', 0)->find();
$revtojou = $this->reviewer_to_journal_obj->where('reviewer_id', $data['user_id'])->where('journal_id', $data['journal_id'])->where('state', 0)->find();
if ($revtojou != null) {
return jsonError('has reviewer!!');
}
$info_insert['reviewer_id'] = $data['user_id'];
$info_insert['gender'] = $data['gender'];
$info_insert['technical'] = $data['title'];
$info_insert['country'] = $data['country'];
$info_insert['introduction'] = isset($data['introduction']) ? trim($data['introduction']) : '';
$info_insert['company'] = isset($data['company']) ? trim($data['company']) : '';
$info_insert['major'] = $data['major'];
// $info_insert['cmajor'] = $data['cmajor'];
$info_insert['field'] = trim($data['field']);
// $info_insert['qualifications'] = trim($data['cv']);
$cv = isset($data['cv'])?trim($data['cv']):'';
// $info_insert['qualifications'] = $cv;
//处理cv表
$c_cv = $this->user_cv_obj->where("user_id",$data['user_id'])->where("cv",$cv)->where("state",0)->find();
if(!$c_cv&&$cv!=''){
$cv_obj["user_id"] = $data['user_id'];
$cv_obj["cv"] = $cv;
$cv_obj['ctime'] = time();
$this->user_cv_obj->insert($cv_obj);
}
if ($reviewer_info == null) {
$info_insert['test_from'] = "addReviewerBee";
$this->user_reviewer_info_obj->insertGetId($info_insert);
} else {
$this->user_reviewer_info_obj->where('reviewer_info_id', $reviewer_info['reviewer_info_id'])->update($info_insert);
}
$to_insert['reviewer_id'] = $data['user_id'];
$to_insert['journal_id'] = $data['journal_id'];
$to_insert['account'] = $user_info['account'];
$to_insert['journal_title'] = $journal_info['title'];
$to_insert['ctime'] = time();
$this->reviewer_to_journal_obj->insertGetId($to_insert);
return jsonSuccess([]);
}
/**
* @title 编辑审稿人信息(编辑)
* @description 编辑审稿人信息(编辑)
* @author wangjinlei
* @url /api/Reviewer/editReviewerForEditor
* @method POST
*
* @param name:user_id type:int require:1 desc:用户id
* @param name:title type:string require:1 desc:用户title
* @param name:major type:int require:1 desc:领域
* @param name:cmajor type:int require:1 desc:子领域
* @param name:field type:string require:1 desc:领域
* @param name:realname type:string require:0 desc:真实姓名
* @param name:introduction type:string require:0 desc:简介
* @param name:company type:string require:0 desc:单位
* @param name:cv type:string require:1 desc:审稿人简历
*/
public function editReviewerForEditor()
{
$data = $this->request->post();
// $info_insert['reviewer_id'] = $data['user_id'];
$info_insert['technical'] = $data['title'];
$info_insert['introduction'] = isset($data['introduction']) ? trim($data['introduction']) : '';
$info_insert['company'] = isset($data['company']) ? trim($data['company']) : '';
$info_insert['major'] = $data['major'];
$info_insert['cmajor'] = $data['cmajor'];
$info_insert['field'] = trim($data['field']);
$info_insert['country'] = $data['country'];
$info_insert['qualifications'] = trim($data['cv']);
$this->user_reviewer_info_obj->where("reviewer_id", $data['user_id'])->update($info_insert);
if(isset($data['realname'])&&$data['realname']!=''){
$this->user_obj->where('user_id',$data['user_id'])->update(['realname'=>$data['realname']]);
}
return jsonSuccess([]);
}
// public function addtest(){
// $list = $this->reviewer_to_journal_obj
// ->field("t_reviewer_to_journal.*,t_user_reviewer_info.reviewer_info_id")
// ->join("t_user_reviewer_info","t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id","left")
// ->where("t_reviewer_to_journal.state",0)
// ->select();
// echo '<pre>';
//
// foreach ($list as $v){
// if($v['reviewer_info_id']!=null){
// continue;
// }
// var_dump($v);
// }
//
// echo '</pre>';
// }
/**
* @title 获取审稿人列表
* @description 获取审稿人列表
* @author wangjinlei
* @url /api/Reviewer/getReviewerListByJournal
* @method POST
*
* @param name:username type:string require:1 desc:用户名
* @param name:keyword type:string require:0 desc:搜索账户名/email/真名
* @param name:journalId type:int require:1 desc:期刊id当全选时为0
* @param name:grade type:string require:0 desc:审稿人评级
* @param name:pageIndex type:int require:1 desc:开始页码
* @param name:pageSize type:int require:1 desc:每页是数据条数
*/
public function getReviewerListByJournal()
{
$data = $this->request->post();
$editor_info = $this->user_obj->where('account', $data['username'])->where('state', 0)->find();
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$jous = [];
$res = [];
$count = 0;
if ($data['journalId'] == 0) {
$jous = $this->journal_obj->where('editor_id', $editor_info['user_id'])->where('state', 0)->column('journal_id');
} else {
$jous[] = $data['journalId'];
}
$gradewhere = '';
if(isset($data['grade'])){
$gradewhere = 't_reviewer_to_journal.grade = "'.$data['grade'].'"';
}
if (isset($data['keyword'])) {
$res = $this->reviewer_to_journal_obj
->field('t_reviewer_to_journal.is_yboard,t_user.*,t_reviewer_to_journal.grade,t_user_reviewer_info.*,t_journal.journal_id,t_journal.title journal_title')
->join('t_journal', 't_journal.journal_id = t_reviewer_to_journal.journal_id', 'left')
->join('t_user', 't_user.user_id = t_reviewer_to_journal.reviewer_id', 'left')
->join('t_user_reviewer_info', 't_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id', 'LEFT')
->where('t_reviewer_to_journal.journal_id', 'in', $jous)
->where($gradewhere)
->where('t_reviewer_to_journal.state', 0)
->where("t_user.account|t_user.email", "like", '%' . $data['keyword'] . '%')
->limit($limit_start, $data['pageSize'])
->select();
$count = $this->reviewer_to_journal_obj->join('t_user', 't_user.user_id = t_reviewer_to_journal.reviewer_id', 'left')->join('t_user_reviewer_info', 't_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id', 'LEFT')->where('t_reviewer_to_journal.journal_id', 'in', $jous)->where($gradewhere)->where('t_reviewer_to_journal.state', 0)->where("t_user.account|t_user.email", "like", '%' . $data['keyword'] . '%')->count();
} else {
$res = $this->reviewer_to_journal_obj
->field('t_reviewer_to_journal.is_yboard,t_user.*,t_reviewer_to_journal.grade,t_user_reviewer_info.*,t_journal.journal_id,t_journal.title journal_title')
->join('t_journal', 't_journal.journal_id = t_reviewer_to_journal.journal_id', 'left')
->join('t_user', 't_user.user_id = t_reviewer_to_journal.reviewer_id', 'left')
->join('t_user_reviewer_info', 't_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id', 'LEFT')
->where('t_reviewer_to_journal.journal_id', 'in', $jous)
->where($gradewhere)
->where('t_reviewer_to_journal.state', 0)
->limit($limit_start, $data['pageSize'])
->select();
$count = $this->reviewer_to_journal_obj->where('t_reviewer_to_journal.journal_id', 'in', $jous)->where($gradewhere)->where('t_reviewer_to_journal.state', 0)->count();
}
foreach($res as $k => $v){
$res[$k]['major_title'] = getMajorStr($v['major']);
$res[$k]['cvs'] = $this->getCvs($v['user_id']);
}
return json(['code' => 0, 'data' => $res, 'total' => $count]);
}
/**
* @title 获取国家
* @description 获取国家
* @author wangjinlei
* @url /api/Reviewer/getCountrys
* @method POST
*
* @return countrys:国家列表#
*/
public function getCountrys()
{
$res = $this->country_obj->order('en_name')->select();
$re['countrys'] = $res;
return json($re);
}
/**
* 修改审稿人评级
*/
public function editReviewerGrade(){
$data = $this->request->post();
$rule = new Validate([
'journal_id'=>'require|number',
'user_id'=>'require',
'grade'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$this->reviewer_to_journal_obj->where('journal_id',$data['journal_id'])
->where('reviewer_id',$data['user_id'])->where('state',0)->update(['grade'=>$data['grade']]);
return jsonSuccess([]);
}
/**
* @title 获取期刊审稿人范围内全部领域
* @description 获取期刊审稿人范围内全部领域
* @author wangjinlei
* @url /api/Reviewer/getAllReviewerMajor
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
*
* @return majors:领域列表#
*/
public function getAllReviewerMajor()
{
$data = $this->request->post();
$article_info = $this->article_obj->where("article_id", $data['article_id'])->find();
$ids = $this->reviewer_to_journal_obj
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
->where('t_reviewer_to_journal.journal_id', $article_info['journal_id'])
->where("t_reviewer_to_journal.state", 0)
->column("t_user_reviewer_info.major");
$list = $this->reviewer_major_obj->where("major_id", "in", $ids)->where("state", 0)->select();
foreach ($list as $k => $v) {
$list[$k]["children"] = $this->reviewer_major_obj->where("pid", $v["major_id"])->where("state", 0)->select();
}
$re['majors'] = $list;
return jsonSuccess($re);
}
/**
* @title 查找条件下的审稿人
* @description 查找条件下的审稿人
* @author wangjinlei
* @url /api/Reviewer/searchReviewer
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
* @param name:major_id type:int require:1 desc:领域id
* @param name:keywords type:string require:1 desc:关键词
* @param name:grade type:string require:0 desc:评级
* @param name:pageIndex type:int require:1 desc:当前页码数
* @param name:pageSize type:int require:1 desc:单页数据条数
*
* @return reviewers:审稿人列表#
*/
public function searchReviewer()
{
$data = $this->request->post();
$rule = new Validate([
'article_id'=>'require',
'pageIndex'=>'require',
'pageSize'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$article_info = $this->article_obj->where("article_id", $data['article_id'])->find();
$noids = $this->article_reviewer_obj->where('article_id', $data['article_id'])->column('reviewer_id');
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$list = [];
$where['t_reviewer_to_journal.journal_id'] = $article_info['journal_id'];
$where['t_reviewer_to_journal.reviewer_id'] = ['not in',$noids];
$where['t_reviewer_to_journal.state'] = 0;
if(isset($data['email'])&&$data['email']!=''){
$where['t_user.email'] = ['like',"%" . $data["email"] . "%"];
}
if(isset($data['field'])&&$data['field']!=''){
$where['t_user_reviewer_info.field'] = ['like',"%" . $data["field"] . "%"];
}
if (isset($data['major_id'])&&$data['major_id']!=0){
$where['t_user_reviewer_info.major'] = ['in',$this->majorids($data['major_id'])];
}
// if(isset($data['keywords'])&&$data['keywords']!=''){
// $where['t_user_reviewer_info.field|t_user.account|t_user.email|t_user.realname'] = ['like',"%" . $data["keywords"] . "%"];
// }
// if(isset($data['major_id'])&&$data['major_id']!=0){
// $where['t_user_reviewer_info.major'] = $data['major_id'];
// }
$list = $this->reviewer_to_journal_obj
->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
->where($where)
->order('t_user.rs_num desc')
->limit($limit_start, $data['pageSize'])
->select();
$count = $this->reviewer_to_journal_obj
->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
->where($where)
->count();
foreach($list as $k => $v){
$list[$k]['majorstr'] = getMajorStr($v['major']);
$list[$k]['now'] = $this->article_reviewer_obj->where('reviewer_id',$v['user_id'])->where('state',0)->count();
}
$re['reviewers'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* 获取作者推荐审稿人
*/
public function getRecommendReviewer()
{
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->user_reviewer_recommend_obj
->field("t_user.user_id,t_user.realname,t_reviewer_major.title cmajor,t_user.account,t_user_reviewer_info.company,t_user_reviewer_info.field,t_user.rs_num,t_user.rd_num")
->join("t_user", "t_user.user_id = t_user_reviewer_recommend.reviewer_id", "left")
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_user_reviewer_recommend.reviewer_id", "left")
->join("t_reviewer_major", "t_reviewer_major.major_id = t_user_reviewer_info.cmajor", "left")
->where('t_user_reviewer_recommend.article_id', $data['article_id'])
->select();
$re['reviewers'] = $list;
return jsonSuccess($re);
}
/**
* @title 获取所有审稿意见
* @description 获取所有审稿意见
* @author wangjinlei
* @url /api/Reviewer/getAllReviewerObj
* @method POST
*
* @param name:article_id type:int require:1 desc:文章id
*
* @return reviews:审稿列表#
*/
public function getAllReviewerObj()
{
$data = $this->request->post();
$list = $this->article_reviewer_obj
->where("article_id", $data['article_id'])
->where("state", "in", [1, 2, 3])
->select();
foreach ($list as $k => $v) {
$list[$k]["question"] = $this->article_reviewer_question_obj->where("art_rev_id", $v['art_rev_id'])->find();
$list[$k]['reviewer'] = $this->user_obj->where("user_id", $v['reviewer_id'])->find();
}
$re["reviews"] = $list;
return jsonSuccess($re);
}
/**
* 存储reviewer文件历史信息
*/
private function save_article_reviewer_file($art_rev_id, $user_id, $username, $url, $type_name)
{
//首先确定数据库里面是否存在此数据
$res = $this->article_reviewer_file_obj->where(['file_url' => $url])->find();
if ($res) {
return false;
}
$insert_data['art_rev_id'] = $art_rev_id;
$insert_data['up_user_id'] = $user_id;
$insert_data['up_username'] = $username;
$insert_data['file_url'] = $url;
$insert_data['type_name'] = $type_name;
$insert_data['ctime'] = time();
return $this->article_reviewer_file_obj->insert($insert_data);
}
private function createReviewerZS($art_rev_id)
{
if (!file_exists(ROOT_PATH . 'public' . DS . 'reviewerZS' . DS . $art_rev_id . '.jpg')) {
$this->createZS($art_rev_id);
}
return ROOT_PATH . 'public' . DS . 'reviewerZS' . DS . $art_rev_id . '.jpg';
}
/**
* 生成pdf感谢reviewer
*/
// private function pdftest($title) {
// $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// $pdf->SetHeaderData('logo.png', 25, '', '', array(0, 64, 255), array(0, 64, 128));
// $pdf->setFooterData(array(0, 64, 0), array(0, 64, 128));
// $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
// $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
// $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// if (@file_exists(dirname(__FILE__) . '/lang/eng.php')) {
// require_once(dirname(__FILE__) . '/lang/eng.php');
// $pdf->setLanguageArray($l);
// }
// $pdf->setFontSubsetting(true);
// $pdf->SetFont('times', '', 14, '', true);
// $pdf->AddPage();
// $pdf->setTextShadow(array('enabled' => true, 'depth_w' => 0.2, 'depth_h' => 0.2, 'color' => array(196, 196, 196), 'opacity' => 1, 'blend_mode' => 'Normal'));
// $html = '<div style="margin-top:300px;font-size:16px;"><h3>To whom it may concern</h3>'
// . 'You have reviewed 1 submission in the journal ' . $title . ' during ' . date('Y') . '
//Thank you for your support to our journal. This contribution is greatly appreciated.'
// . '<p>Regards<br>
//Editorial Office<br>
//' . $title . '</p>'
// . '<p><h3>Contact us</h3>
//TMR Publishing Group Address: 11 Cockle Bay Rd, Cockle Bay, Auckland 2014, New Zealand<br>
//Telephone: +64 02108293806<br>
//E-mail: publisher@tmrjournals.com</p></div>';
//
// $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
//// $pdf->Output('example_001.pdf', 'D');
//// $pdf_wj = 'd:/example_001.pdf';
// $pdf_wj = $_SERVER['DOCUMENT_ROOT'] . 'public/pdf/' . date('YmdHis') . 'thanks.pdf';
//// $pdf_wj = '/public/pdf/'.date('YMD').'/'.date('His').'thanks.pdf';
// $pdf->Output($pdf_wj, 'F');
// return $pdf_wj;
// }
}