1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117 |
- <?php
- namespace app\index\controller;
- use addons\wechat\model\WechatCaptcha;
- use app\admin\model\Admin;
- use app\admin\model\cms\AuthorManuscript;
- use app\admin\model\cms\Channel;
- use app\admin\model\cms\Comment;
- use app\admin\model\cms\Comments;
- use app\admin\model\cms\InviteReviewer;
- use app\admin\model\cms\Issue;
- use app\admin\model\cms\Participate;
- use app\admin\model\EmailContent;
- use app\common\controller\Frontend;
- use app\common\library\Ems;
- use app\common\library\Sms;
- use app\common\model\Attachment;
- use app\common\model\UserRoleContent;
- use app\common\model\UserRoleLog;
- use app\manytenant\model\Manytenant;
- use think\Config;
- use think\Cookie;
- use think\Db;
- use think\Hook;
- use think\Session;
- use think\Validate;
- /**
- * 会员中心
- */
- class User extends Frontend
- {
- protected $layout = 'default';
- protected $noNeedLogin = ['login', 'register', 'third', 'jump'];
- protected $noNeedRight = ['*'];
- public function _initialize()
- {
- parent::_initialize();
- $auth = $this->auth;
- if (!Config::get('fastadmin.usercenter')) {
- $this->error(__('User center already closed'), '/');
- }
- //监听注册登录退出的事件
- Hook::add('user_login_successed', function ($user) use ($auth) {
- $expire = input('post.keeplogin') ? 30 * 86400 : 0;
- Cookie::set('uid', $user->id, $expire);
- Cookie::set('token', $auth->getToken(), $expire);
- });
- Hook::add('user_register_successed', function ($user) use ($auth) {
- Cookie::set('uid', $user->id);
- Cookie::set('token', $auth->getToken());
- });
- Hook::add('user_delete_successed', function ($user) use ($auth) {
- Cookie::delete('uid');
- Cookie::delete('token');
- });
- Hook::add('user_logout_successed', function ($user) use ($auth) {
- Cookie::delete('uid');
- Cookie::delete('token');
- });
- }
- /**
- * 会员中心
- */
- public function index()
- {
- $this->view->assign('title', __('User center'));
- return $this->view->fetch();
- }
- /**
- * 注册会员
- */
- public function register()
- {
- $url = $this->request->request('url', '', 'trim');
- if ($this->auth->id) {
- $this->success('You\'ve logged in, do not login again', $url ? $url : url('user/index'));
- }
- if ($this->request->isPost()) {
- $username = $this->request->post('username');
- $password = $this->request->post('password');
- $password_confirm = $this->request->post('password_confirm');
- // 判断密码是否一致
- if ($password != $password_confirm) {
- $this->error('Inconsistent password input', null, ['token' => $this->request->token()]);
- }
- $email = $this->request->post('email');
- $mobile = $this->request->post('mobile', '');
- $token = $this->request->post('__token__');
- $rule = [
- 'username' => 'require|length:3,30',
- 'password' => 'require|length:6,30',
- '__token__' => 'require|token',
- ];
- $msg = [
- 'username.require' => 'Username can not be empty',
- 'username.length' => 'Username must be 3 to 30 characters',
- 'password.require' => 'Password can not be empty',
- 'password.length' => 'Password must be 6 to 30 characters',
- ];
- $data = [
- 'username' => $username,
- 'password' => $password,
- 'email' => $email,
- 'mobile' => $mobile,
- '__token__' => $token,
- ];
- $validate = new Validate($rule, $msg);
- $result = $validate->check($data);
- if (!$result) {
- $this->error($validate->getError(), null, ['token' => $this->request->token()]);
- }
- if ($this->auth->register($username, $password)) {
- $this->success('Registration successful, please go to the corresponding email to check and verify', $url ? $url : url('user/login'));
- } else {
- $this->error($this->auth->getError(), null, ['token' => $this->request->token()]);
- }
- }
- //判断来源
- $referer = $this->request->server('HTTP_REFERER');
- if (!$url && (strtolower(parse_url($referer, PHP_URL_HOST)) == strtolower($this->request->host()))
- && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) {
- $url = $referer;
- }
- $this->view->assign('url', $url);
- $this->view->assign('title', 'Register');
- return $this->view->fetch();
- }
- /**
- * 会员登录
- */
- public function login()
- {
- $url = $this->request->request('url', '', 'trim');
- if ($this->auth->id) {
- $this->success('You\'ve logged in, do not login again', $url ? $url : url('user/index'));
- }
- if ($this->request->isPost()) {
- $account = $this->request->post('account');
- $password = $this->request->post('password');
- $keeplogin = (int)$this->request->post('keeplogin');
- $token = $this->request->post('__token__');
- $rule = [
- 'account' => 'require|length:3,50',
- 'password' => 'require|length:6,30',
- '__token__' => 'require|token',
- ];
- $msg = [
- 'account.require' => 'Account can not be empty',
- 'account.length' => 'Account must be 3 to 50 characters',
- 'password.require' => 'Password can not be empty',
- 'password.length' => 'Password must be 6 to 30 characters',
- ];
- $data = [
- 'account' => $account,
- 'password' => $password,
- '__token__' => $token,
- ];
- $validate = new Validate($rule, $msg);
- $result = $validate->check($data);
- if (!$result) {
- $this->error(__($validate->getError()), null, ['token' => $this->request->token()]);
- return false;
- }
- if ($this->auth->login($account, $password)) {
- // $this->success('Logged in successful', $url ? $url : url('user/index'));
- $this->success('Logged in successful', url('/'));
- } else {
- $this->error($this->auth->getError(), null, ['token' => $this->request->token()]);
- }
- }
- //判断来源
- $referer = $this->request->server('HTTP_REFERER');
- if (!$url && (strtolower(parse_url($referer, PHP_URL_HOST)) == strtolower($this->request->host()))
- && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) {
- $url = $referer;
- }
- $this->view->assign('url', $url);
- $this->view->assign('title', __('Login'));
- return $this->view->fetch();
- }
- /**
- * 退出登录
- */
- public function logout()
- {
- if ($this->request->isPost()) {
- $this->token();
- //退出本站
- $this->auth->logout();
- // $this->success(__('Logout successful'), url('user/index'));
- // $this->success('Logout successful', url('/'));
- $this->redirect(url('user/jump'));
- }
- $html = "<form id='logout_submit' name='logout_submit' action='' method='post'>" . token() . "<input type='submit' value='ok' style='display:none;'></form>";
- $html .= "<script>document.forms['logout_submit'].submit();</script>";
- return $html;
- }
- /**
- * 退出登录
- *
- * @return string
- * @throws \think\Exception
- */
- public function jump()
- {
- $this->view->assign('title', 'Logout out');
- return $this->view->fetch();
- }
- /**
- * 个人信息
- */
- public function profile()
- {
- $this->view->assign('title', __('Profile'));
- return $this->view->fetch();
- }
- /**
- * 修改密码
- */
- public function changepwd()
- {
- if ($this->request->isPost()) {
- $oldpassword = $this->request->post("oldpassword");
- $newpassword = $this->request->post("newpassword");
- $renewpassword = $this->request->post("renewpassword");
- $token = $this->request->post('__token__');
- $rule = [
- 'oldpassword' => 'require|regex:\S{6,30}',
- 'newpassword' => 'require|regex:\S{6,30}',
- 'renewpassword' => 'require|regex:\S{6,30}|confirm:newpassword',
- '__token__' => 'token',
- ];
- $msg = [
- 'renewpassword.confirm' => __('Password and confirm password don\'t match')
- ];
- $data = [
- 'oldpassword' => $oldpassword,
- 'newpassword' => $newpassword,
- 'renewpassword' => $renewpassword,
- '__token__' => $token,
- ];
- $field = [
- 'oldpassword' => __('Old password'),
- 'newpassword' => __('New password'),
- 'renewpassword' => __('Renew password')
- ];
- $validate = new Validate($rule, $msg, $field);
- $result = $validate->check($data);
- if (!$result) {
- $this->error(__($validate->getError()), null, ['token' => $this->request->token()]);
- return false;
- }
- $ret = $this->auth->changepwd($newpassword, $oldpassword);
- if ($ret) {
- $this->success(__('Reset password successful'), url('user/login'));
- } else {
- $this->error($this->auth->getError(), null, ['token' => $this->request->token()]);
- }
- }
- $this->view->assign('title', __('Change password'));
- return $this->view->fetch();
- }
- public function attachment()
- {
- //设置过滤方法
- $this->request->filter(['strip_tags']);
- if ($this->request->isAjax()) {
- $mimetypeQuery = [];
- $where = [];
- $filter = $this->request->request('filter');
- $filterArr = (array)json_decode($filter, true);
- if (isset($filterArr['mimetype']) && preg_match("/(\/|\,|\*)/", $filterArr['mimetype'])) {
- $this->request->get(['filter' => json_encode(array_diff_key($filterArr, ['mimetype' => '']))]);
- $mimetypeQuery = function ($query) use ($filterArr) {
- $mimetypeArr = array_filter(explode(',', $filterArr['mimetype']));
- foreach ($mimetypeArr as $index => $item) {
- $query->whereOr('mimetype', 'like', '%' . str_replace("/*", "/", $item) . '%');
- }
- };
- } elseif (isset($filterArr['mimetype'])) {
- $where['mimetype'] = ['like', '%' . $filterArr['mimetype'] . '%'];
- }
- if (isset($filterArr['filename'])) {
- $where['filename'] = ['like', '%' . $filterArr['filename'] . '%'];
- }
- if (isset($filterArr['createtime'])) {
- $timeArr = explode(' - ', $filterArr['createtime']);
- $where['createtime'] = ['between', [strtotime($timeArr[0]), strtotime($timeArr[1])]];
- }
- $search = $this->request->get('search');
- if ($search) {
- $where['filename'] = ['like', '%' . $search . '%'];
- }
- $model = new Attachment();
- $offset = $this->request->get("offset", 0);
- $limit = $this->request->get("limit", 0);
- $total = $model
- ->where($where)
- ->where($mimetypeQuery)
- ->where('user_id', $this->auth->id)
- ->order("id", "DESC")
- ->count();
- $list = $model
- ->where($where)
- ->where($mimetypeQuery)
- ->where('user_id', $this->auth->id)
- ->order("id", "DESC")
- ->limit($offset, $limit)
- ->select();
- $cdnurl = preg_replace("/\/(\w+)\.php$/i", '', $this->request->root());
- foreach ($list as $k => &$v) {
- $v['fullurl'] = ($v['storage'] == 'local' ? $cdnurl : $this->view->config['upload']['cdnurl']) . $v['url'];
- }
- unset($v);
- $result = array("total" => $total, "rows" => $list);
- return json($result);
- }
- $mimetype = $this->request->get('mimetype', '');
- $mimetype = substr($mimetype, -1) === '/' ? $mimetype . '*' : $mimetype;
- $this->view->assign('mimetype', $mimetype);
- $this->view->assign("mimetypeList", \app\common\model\Attachment::getMimetypeList());
- return $this->view->fetch();
- }
- /**
- * 我的个人主页
- */
- public function homepage()
- {
- $this->view->assign('title', 'My Personal Homepage');
- return $this->view->fetch();
- }
- /**
- * 我得邮箱页
- */
- public function inbox()
- {
- // 获取当前用户的邮箱内容信息
- $email_contents = EmailContent::where(['email' => $this->auth->email])->paginate();
- foreach ($email_contents as $content) {
- $content['user'] = \app\admin\model\User::where(['id' => $content['user_id']])->find();
- if ($content['type'] == 'admin') {
- $content['user'] = Admin::where(['id' => $content['user_id']])->find();
- }
- $content['createtime'] = date('Y-m-d', $content['createtime']);
- if ($content['status'] == 'normal') {
- $content['status'] = 'READ';
- } else {
- $content['status'] = 'Unread';
- }
- }
- $this->view->assign('list', $email_contents);
- $this->view->assign('title', 'INBOX');
- return $this->view->fetch();
- }
- /**
- * 我的未读邮件页
- */
- public function unread()
- {
- // 获取当前用户的邮箱内容信息
- $email_contents = EmailContent::where(['email' => $this->auth->email, 'status' => 'hidden'])->paginate();
- foreach ($email_contents as $content) {
- $content['user'] = \app\admin\model\User::where(['id' => $content['user_id']])->find();
- if ($content['type'] == 'admin') {
- $content['user'] = Admin::where(['id' => $content['user_id']])->find();
- }
- $content['createtime'] = date('Y-m-d', $content['createtime']);
- $content['status'] = 'Unread';
- }
- $this->view->assign('list', $email_contents);
- $this->view->assign('title', 'Unread');
- return $this->view->fetch();
- }
- /**
- * 提交手稿
- */
- public function submit_manuscript($id = null)
- {
- $row = [
- 'id' => '',
- 'manuscript_zip' => '',
- 'manuscript_pdf' => '',
- 'cover_letter' => '',
- 'graphical_abstract' => '',
- 'non_material' => '',
- 'is_copyright' => '',
- 'copyright_files' => '',
- 'image' => '',
- 'journal' => '',
- 'article_type' => '',
- 'title' => '',
- 'abstract' => '',
- 'keywords' => '',
- 'number_page' => '',
- 'is_funding' => '',
- 'funding_content' => '',
- 'is_interest' => '',
- 'interest_content' => '',
- 'statement_type' => '',
- 'article_one' => '',
- 'article_two' => '',
- 'article_three' => '',
- 'country' => '',
- 'affiliation' => '',
- 'name' => '',
- 'invoice_email' => '',
- 'order_email' => '',
- 'address' => '',
- 'zip_code' => '',
- 'city' => '',
- 'telephone' => '',
- 'fax' => '',
- 'vat' => '',
- ];
- $id = $this->request->param('id');
- if ($id) {
- $row = AuthorManuscript::where(['id' => $id])->find();
- $row->author_content = json_decode($row->author_content, true);
- $row->review_content = json_decode($row->review_content, true);
- }
- $this->view->assign('row', $row);
- $this->view->assign('title', 'Submit Manuscript');
- return $this->view->fetch();
- }
- /**
- * 手稿状态
- */
- public function display_submitted()
- {
- // 构建分页参数
- $limit = $this->request->param('limit', 10);
- $status = $this->request->param('status', 'all');
- $where = [];
- if ($status != 'all') {
- $where = ['status' => $status];
- }
- // 查询当前用户手稿
- $manuscripts = AuthorManuscript::where(['user_id' => $this->auth->id])
- ->where($where)
- ->field('id,title,image,createtime,journal,status')
- ->order('createtime', 'DESC')
- ->paginate($limit);
- $author_edit_status = config('site.author_edit_status');
- $author_comments_status = config('site.author_comments_status');
- foreach ($manuscripts as $manuscript) {
- $manuscript['journal'] = Channel::where(['id' => $manuscript['journal']])->value('name');
- $manuscript['is_edit'] = false;
- $manuscript['is_comments'] = false;
- if (in_array($manuscript['status'], $author_edit_status)) {
- $manuscript['is_edit'] = true;
- }
- if (in_array($manuscript['status'], $author_comments_status)) {
- $manuscript['is_comments'] = true;
- }
- }
- if ($this->request->isAjax()) {
- $keyword = $this->request->param('keyword');
- $manuscripts = AuthorManuscript::where(['user_id' => $this->auth->id])
- ->where(function ($query) use ($keyword, $status) {
- if ($status != 'all') {
- return $query->where(['status' => $status]);
- }
- if ($keyword != '') {
- return $query->where(['title' => ['like', '%'. $keyword .'%']]);
- }
- })->field('id,title,image,createtime,journal,status')
- ->order('createtime', 'DESC')
- ->paginate($limit);
- foreach ($manuscripts as $manuscript) {
- $manuscript['createtime'] = date('Y-m-d', $manuscript['createtime']);
- $manuscript['journal'] = Channel::where(['id' => $manuscript['journal']])->value('name') ?? '';
- $manuscript['is_edit'] = false;
- $manuscript['is_comments'] = false;
- if (in_array($manuscript['status'], $author_edit_status)) {
- $manuscript['is_edit'] = true;
- }
- if (in_array($manuscript['status'], $author_comments_status)) {
- $manuscript['is_comments'] = true;
- }
- }
- $this->success('', '', $manuscripts);
- }
- $this->view->assign('status', $status);
- $this->view->assign('list', $manuscripts);
- $this->view->assign('title', 'Dispaly Submitted');
- return $this->view->fetch();
- }
- /**
- * 审核人信息
- */
- public function reviewer_information()
- {
- $user_role = UserRoleLog::where(['user_id' => $this->auth->id, 'type' => 'review', 'is_adopt' => ['in', ['review', 'fault']]])->order('createtime', 'DESC')->find();
- $user_content = UserRoleContent::where(['user_id' => $this->auth->id, 'type' => 'review'])->find();
- if (empty($user_content)) {
- $user_content['field'] = '';
- $user_content['degree'] = '';
- $user_content['affiliation'] = '';
- $user_content['publication'] = '';
- $user_content['orcid'] = '';
- $user_content['homepage'] = '';
- $user_content['review_journal'] = '';
- $user_content['interested_journal'] = '';
- $user_content['resume'] = '';
- $user_content['journal_ids'] = '';
- }
- $this->view->assign('row', $user_content);
- $this->view->assign('user_role', $user_role);
- $this->view->assign('title', 'Reviewer Information');
- return $this->view->fetch();
- }
- /**
- * 审阅的手稿
- */
- public function show_reviewed_manuscripts()
- {
- $limit = $this->request->param('limit', 10);
- $status = $this->request->param('status', 'comment_submission');
- $where = ['status' => $status];
- // 查询当前用户手稿
- $manuscripts = AuthorManuscript::whereRaw("FIND_IN_SET(". $this->auth->id .", `reviewer_ids`)")
- ->where($where)
- ->field('id,title,image,createtime,journal')
- ->order('createtime', 'DESC')
- ->paginate($limit);
- foreach ($manuscripts as $manuscript) {
- $manuscript['journal'] = Channel::where(['id' => $manuscript['journal']])->value('name');
- }
- if ($this->request->isAjax()) {
- $keyword = $this->request->param('keyword');
- $manuscripts = AuthorManuscript::where(['title' => ['like', '%'. $keyword .'%'], 'status' => $status])
- ->whereRaw("FIND_IN_SET(". $this->auth->id .", `reviewer_ids`)")
- ->field('id,title,image,createtime,journal')
- ->order('createtime', 'DESC')
- ->paginate($limit);
- foreach ($manuscripts as $manuscript) {
- $manuscript['createtime'] = date('Y-m-d', $manuscript['createtime']);
- $manuscript['journal'] = Channel::where(['id' => $manuscript['journal']])->value('name') ?? '';
- }
- $this->success('', '', $manuscripts);
- }
- $this->view->assign('status', $status);
- $this->view->assign('list', $manuscripts);
- $this->view->assign('title', 'Show Reviewed Manuscripts');
- return $this->view->fetch();
- }
- /**
- * 手稿详情
- */
- public function article_details($id = null)
- {
- $id = $this->request->param('id');
- $type = $this->request->param('type');
- $status = $this->request->param('status', 'reviewer_details');
- $row = AuthorManuscript::where(['id' => $id])->find();
- $row['review_content'] = json_decode($row['review_content'], true);
- if ($row) {
- $row['keywords'] = explode(',', $row['keywords']);
- }
- // 判断是审稿人还是编辑,如果是编辑则可以看到全部意见
- $comments = Comments::where(['manuscript_id' => $row['id']])->select();
- if ($type == 'reviewer') {
- $comments = Comments::where(['manuscript_id' => $row['id'], 'type' => 'reviewer'])->select();
- }
- if ($type == 'editor') {
- $reviewers = InviteReviewer::where(['manuscript_id' => $row['id']])->select();
- // 邀请的审稿人信息
- if ($status == 'reviewer_details') {
- foreach ($reviewers as $reviewer) {
- $reviewer_role = UserRoleContent::where(['id' => $reviewer['role_id']])->find();
- if ($reviewer_role) {
- // 查询审稿人提交意见信息
- $reviewer_comment = Comments::where(['user_id' => $reviewer_role['user_id'], 'manuscript_id' => $row['id']])
- ->order('createtime', 'DESC')
- ->find();
- $reviewer_user = \app\admin\model\User::where(['id' => $reviewer_role['user_id']])->find();
- if ($reviewer_comment) {
- $reviewer['reply_time'] = date('Y-m-d', $reviewer_comment['createtime'] ?? time());
- $reviewer['submission_time'] = date('Y-m-d', $reviewer_comment['createtime'] ?? time());
- $reviewer['status'] = $reviewer_comment['recommendation'] ?? '';
- }
- }
- $reviewer['nickname'] = $reviewer_user['nickname'];
- $reviewer['invited_time'] = date('Y-m-d', $reviewer['createtime']);
- }
- }
- // 审稿人信息
- if ($status == 'reviewer_suggestion') {
- foreach ($reviewers as $reviewer) {
- $reviewer_role = UserRoleContent::where(['id' => $reviewer['role_id']])->find();
- if ($reviewer_role) {
- // 查询审稿人提交意见数量
- $reviewer_comment_num = Comments::where(['user_id' => $reviewer_role['user_id'], 'manuscript_id' => $row['id']])
- ->count();
- $reviewer_user = \app\admin\model\User::where(['id' => $reviewer_role['user_id']])->find();
- }
- $reviewer['nickname'] = $reviewer_user['nickname'];
- $reviewer['affiliation'] = $reviewer_role['affiliation'];
- $reviewer['comment_num'] = $reviewer_comment_num;
- }
- }
- // 审稿人意见信息
- if ($status == 'review_report') {
- foreach ($reviewers as $reviewer) {
- $reviewer_role = UserRoleContent::where(['id' => $reviewer['role_id']])->find();
- if ($reviewer_role) {
- // 查询审稿人提交意见信息
- $reviewer_comment = Comments::where(['user_id' => $reviewer_role['user_id'], 'manuscript_id' => $row['id']])
- ->order('createtime', 'DESC')
- ->find();
- $reviewer_user = \app\admin\model\User::where(['id' => $reviewer_role['user_id']])->find();
- }
- $reviewer['nickname'] = $reviewer_user['nickname'];
- $reviewer['recommendation'] = $reviewer_comment['recommendation'];
- $reviewer['comment'] = $reviewer_comment['comments'];
- $reviewer['createtime'] = date('Y-m-d', $reviewer_comment['createtime']);
- }
- }
- if ($status == 'author_report') {
- // 查询作者提交意见信息回复
- $author_comment = Comments::where(['user_id' => $row['user_id'], 'manuscript_id' => $row['id'], 'type' => 'author'])
- ->order('createtime', 'DESC')
- ->find();
- if ($author_comment) {
- $author_user = \app\admin\model\User::where(['id' => $row['user_id']])->find();
- $author['nickname'] = $author_user['nickname'] ?? '';
- $author['comment'] = $author_comment['comments'] ?? '';
- $author['createtime'] = date('Y-m-d', $author_comment['createtime']);
- }
- }
- $row['reviewer'] = $reviewers;
- $row['author'] = $author ?? [];
- }
- $row['comments'] = $comments ?? [];
- $this->view->assign('status', $status);
- $this->view->assign('row', $row);
- $this->view->assign('type', $type);
- $this->view->assign('title', 'Article Details');
- return $this->view->fetch();
- }
- /**
- * 审稿页面
- */
- public function conduct_review($id = null)
- {
- $id = $this->request->param('id');
- $type = $this->request->param('type');
- $row = Comments::where(['manuscript_id' => $id, 'type' => $type])->find();
- $manuscript = AuthorManuscript::where(['id' => $id])->find();
- $this->view->assign('row', $row);
- $this->view->assign('manuscript', $manuscript);
- $this->view->assign('id', $id);
- $this->view->assign('type', $type);
- $this->view->assign('title', 'Conduct Review');
- return $this->view->fetch();
- }
- /**
- * 申请创建特刊
- */
- public function special_issue($id = null)
- {
- $special_issue = [
- 'image' => '',
- 'journal' => '',
- 'issue_name' => '',
- 'proposal_text' => '',
- 'publication_cycle' => '',
- 'editor' => '',
- 'statement_type' => '',
- ];
- if ($id) {
- $special_issue = Issue::where(['id' => $id])->find();
- $special_issue->editor = json_decode($special_issue['editor']);
- }
- $this->view->assign('row', $special_issue);
- $this->view->assign('title', 'Apply to creat a special issue');
- return $this->view->fetch();
- }
- /**
- * 申请成为编辑
- */
- public function become_an_editor()
- {
- $user_content = UserRoleContent::where(['user_id' => $this->auth->id, 'type' => ['in', ['editor', 'chief']]])->find();
- $user = \app\common\model\User::get($this->auth->id);
- // 因为是主编和编辑共用一个页面所以只查询这两个角色下最后一个申请记录就可以
- $user_role_log = UserRoleLog::where(['user_id' => $this->auth->id, 'type' => ['in', ['editor', 'chief']]])->order('createtime', 'DESC')->find();
- if (empty($user_content)) {
- $user_content['degree'] = '';
- $user_content['affiliation'] = '';
- $user_content['publication'] = '';
- $user_content['orcid'] = '';
- $user_content['homepage'] = '';
- $user_content['review_journal'] = '';
- $user_content['interested_journal'] = '';
- $user_content['resume'] = '';
- $user_content['journal_ids'] = '';
- $user_content['is_chief'] = '';
- $user_content['is_editor'] = '';
- } else {
- $user_content['is_chief'] = $user['is_chief'];
- $user_content['is_editor'] = $user['is_editor'];
- }
- $this->view->assign('row', $user_content);
- $this->view->assign('user_role', $user_role_log);
- $this->view->assign('user', $user);
- $this->view->assign('title', 'Apply to become an editor');
- return $this->view->fetch();
- }
- /**
- * 编辑手稿
- */
- public function editing_manuscripts()
- {
- $limit = $this->request->param('limit', 10);
- $type = $this->request->param('type');
- $status = $this->request->param('status', 'all');
- $where = [];
- if ($status != 'all') {
- $where = ['status' => $status];
- }
- $user = $this->auth;
- // 查询当前用户手稿
- $manuscripts = AuthorManuscript::where(function ($query) use ($user) {
- if ($user->is_chief == 'correct') {
- $query->where(['chief_id' => $this->auth->id]);
- }
- if ($user->is_editor == 'correct') {
- $query->whereRaw("FIND_IN_SET(". $this->auth->id .", `editor_ids`)");
- }
- })->where($where)->field('id,title,image,createtime,journal')
- ->order('createtime', 'DESC')
- ->paginate($limit);
- foreach ($manuscripts as $manuscript) {
- $manuscript['journal'] = Channel::where(['id' => $manuscript['journal']])->value('name');
- }
- if ($this->request->isAjax()) {
- $keyword = $this->request->param('keyword');
- $manuscripts = AuthorManuscript::where(['title' => ['like', '%'. $keyword .'%']])->whereRaw("FIND_IN_SET(". $this->auth->id .", `editor_ids`)")->field('id,title,image,createtime,journal')->order('createtime', 'DESC')->paginate($limit);
- foreach ($manuscripts as $manuscript) {
- $manuscript['is_chief'] = false;
- $manuscript['createtime'] = date('Y-m-d', $manuscript['createtime']);
- $manuscript['journal'] = Channel::where(['id' => $manuscript['journal']])->value('name') ?? '';
- if ($this->auth->is_chief == 'correct') {
- $manuscript['is_chief'] = true;
- }
- }
- $this->success('', '', $manuscripts);
- }
- $this->view->assign('status', $status);
- $this->view->assign('type', $type);
- $this->view->assign('list', $manuscripts);
- $this->view->assign('title', 'Editing Manuscripts');
- return $this->view->fetch();
- }
- /**
- * 提交处理意见
- */
- public function handing_suggestions()
- {
- $id = $this->request->param('id');
- $type = $this->request->param('type');
- $row = Comments::where(['manuscript_id' => $id, 'type' => $type, 'user_id' => $this->auth->id])->find();
- $manuscript = AuthorManuscript::where(['id' => $id])->find();
- if (empty($row)) {
- $row['is_interest'] = '';
- }
- $this->view->assign('row', $row);
- $this->view->assign('manuscript', $manuscript);
- $this->view->assign('id', $id);
- $this->view->assign('type', $type);
- $this->view->assign('title', 'Submit Handing Suggestions');
- return $this->view->fetch();
- }
- /**
- * 邀请审稿人
- */
- public function invite_reviewers()
- {
- $id = $this->request->param('id');
- // 构建分页参数
- $limit = $this->request->param('limit', 10);
- $manuscript = AuthorManuscript::get($id);
- $manuscript_review_id_arr = explode(',', $manuscript['reviewer_ids']);
- $review_user_content = UserRoleContent::where(['user_id' => ['in', $manuscript_review_id_arr], 'type' => 'review'])->select();
- // 获取审稿人信息
- $review_id_arr = \app\common\model\User::where(['is_review' => 'correct', 'id' => ['not in', $manuscript->user_id]])->column('id');
- $list = UserRoleContent::with(['user'])->where(['user_id' => ['in', $review_id_arr], 'type' => 'review'])->select();
- // $list = UserRoleContent::with(['user'])->where(['user_id' => ['in', $review_id_arr], 'type' => 'review'])->paginate($limit);
- foreach ($list as $value) {
- $channel_name_arr = Channel::where(['id' => ['in', explode(',', $value['journal_ids'])]])->column('name');
- $value['journal'] = implode(',', $channel_name_arr);
- $value['is_checked'] = false;
- if (in_array($value['user_id'], $manuscript_review_id_arr)) {
- $value['is_checked'] = true;
- }
- }
- $this->view->assign('id', $id);
- $this->view->assign('list', $list);
- $this->view->assign('reviewer_user_content', $review_user_content);
- $this->view->assign('title', 'Invite Reviewers');
- return $this->view->fetch();
- }
- /**
- * 获取审稿人列表
- *
- * @return void
- * @throws \think\exception\DbException
- */
- public function getReviewerList()
- {
- // 构建分页参数
- $limit = $this->request->param('limit', 10);
- // 获取审稿人信息
- $review_id_arr = \app\common\model\User::where(['is_review' => 'correct'])->column('id');
- $data = UserRoleContent::with(['user'])->where(['user_id' => ['in', $review_id_arr], 'type' => 'review'])->paginate($limit);
- // 返回表格数据和分页信息
- $this->success('', '', $data);
- }
- /**
- * 提交会议
- *
- * @return string
- * @throws \think\Exception
- */
- public function submit_conference()
- {
- $this->view->assign('title', 'Submit Conference');
- return $this->view->fetch();
- }
- /**
- * 参加会议
- *
- * @return string
- * @throws \think\Exception
- */
- public function conference_participate()
- {
- $param = $this->request->param();
- $id = $param['id'];
- $row = Participate::where(['id' => $id])->find();
- $this->view->assign('id', $id);
- $this->view->assign('row', $row);
- $this->view->assign('title', 'Submit Conference');
- return $this->view->fetch();
- }
- /**
- * 特刊列表页
- *
- * @return string
- * @throws \think\Exception
- * @throws \think\exception\DbException
- */
- public function special_issue_list()
- {
- $status = $this->request->param('status', 'all');
- $where = ['user_id' => $this->auth->id];
- if ($status != 'all') {
- $where = ['status' => $status, 'user_id' => $this->auth->id];
- }
- if ($status == 'all') {
- unset($where['status']);
- }
- $special_issues = Issue::where($where)->order('createtime', 'DESC')->paginate();
- if ($this->request->isAjax()) {
- $keyword = $this->request->param('keyword');
- if ($status == 'all') {
- $status = '';
- }
- $special_issues = Issue::where(['user_id' => $this->auth->id, 'issue_name' => ['like', '%'. $keyword .'%']])
- ->where(function ($query) use ($status) {
- if ($status) {
- $query->where(['status' => $status]);
- }
- })->field('id,issue_name,image,createtime,journal')
- ->order('createtime', 'DESC')
- ->paginate();
- foreach ($special_issues as $special_issue) {
- $special_issue['createtime'] = date('Y-m-d', $special_issue['createtime']);
- $special_issue['journal'] = Channel::where(['id' => $special_issue['journal']])->value('name');
- }
- $this->success('', '', $special_issues);
- }
- foreach ($special_issues as $special_issue) {
- $special_issue['createtime'] = date('Y-m-d', $special_issue['createtime']);
- $special_issue['journal'] = Channel::where(['id' => $special_issue['journal']])->value('name');
- }
- $this->view->assign('status', $status);
- $this->view->assign('title', 'Special Issue List');
- $this->view->assign('list', $special_issues);
- return $this->view->fetch();
- }
- /**
- * 作者审稿意见
- *
- * @return string
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function review_comments()
- {
- $param = $this->request->param();
- $type = $param['type'];
- $row = Comments::where(['manuscript_id' => $param['id']])->find();
- $manuscript = AuthorManuscript::get($param['id']);
- if (empty($row)) {
- $row['manuscript_id'] = $param['id'];
- $row['comments'] = '';
- $row['status'] = $manuscript['status'];
- }
- $this->view->assign('row', $row);
- $this->view->assign('type', $type);
- return $this->view->fetch();
- }
- /**
- * 发送邮件列表
- *
- * @return string
- * @throws \think\Exception
- * @throws \think\exception\DbException
- */
- public function send_email()
- {
- $param = $this->request->param();
- $type = $param['type'];
- $row = AuthorManuscript::get($param['id']);
- // 身份是不同的则需要查询不同人的列表
- if ($type == 'author') {
- /** 审稿人 编辑 */
- $review_ids = explode(',', $row['reviewer_ids']);
- $editor_ids = explode(',', $row['editor_ids']);
- $user_arr = array_merge($review_ids, $editor_ids);
- $user_arr = array_unique($user_arr);
- }
- if ($type == 'reviewer') {
- /** 作者 编辑 */
- $editor_ids = explode(',', $row['editor_ids']);
- $author_ids = [$row['user_id']];
- $user_arr = array_merge($editor_ids, $author_ids);
- $user_arr = array_unique($user_arr);
- }
- if ($type == 'editor') {
- /** 作者 审稿人 */
- $author_ids = [$row['user_id']];
- $review_ids = explode(',', $row['reviewer_ids']);
- $user_arr = array_merge($review_ids, $author_ids);
- $user_arr = array_unique($user_arr);
- }
- $user_list = \app\admin\model\User::where(['id' => ['in', $user_arr]])->column('email', 'id');
- $this->view->assign('type', $type);
- $this->view->assign('user_list', $user_list);
- $this->view->assign('row', $row);
- $this->view->assign('mail_smtp_host', $this->auth->mail_smtp_host);
- $this->view->assign('mail_smtp_port', $this->auth->mail_smtp_port);
- $this->view->assign('mail_smtp_user', $this->auth->mail_smtp_user);
- $this->view->assign('mail_smtp_pass', $this->auth->mail_smtp_pass);
- $this->view->assign('title', 'Send Email');
- return $this->view->fetch();
- }
- /**
- * 邀请编辑页
- *
- * @return string
- * @throws \think\Exception
- * @throws \think\exception\DbException
- */
- public function invite_editor()
- {
- $param = $this->request->param();
- $type = $param['type'];
- $row = AuthorManuscript::get($param['id']);
- $this->view->assign('row', $row);
- $this->view->assign('type', $type);
- $this->view->assign('title', 'Invite Editor');
- return $this->view->fetch();
- }
- /**
- * 选择编辑
- *
- * @return \think\response\Json
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function choose_editor()
- {
- $info = \app\common\model\User::where(['is_editor' => 'correct', 'id' => ['not in', $this->auth->id]])->field('nickname, id')->select();
- $params = $this->request->request();
- if (array_key_exists('name', $params) && $params['name']) {
- $info = \app\common\model\User::where(['is_editor' => 'correct', 'nickname' => ['like', '%' . $params['name'] . '%'], 'id' => ['not in', $this->auth->id]])->field('nickname, id')->select();
- }
- if ($this->request->request("keyValue")) {
- $id_arr = $this->request->request('keyValue');
- $info = \app\common\model\User::where(['id' => ['in', $id_arr]])->field('nickname, id')->select();
- }
- $arr = [];
- foreach ($info as $item) {
- $v['id'] = $item['id'];
- $v['name'] = $item['nickname'];
- $arr[] = $v;
- }
- $data['list'] = $arr;
- $data['total'] = count($arr);
- return json($data);
- }
- /**
- * 选择期刊
- *
- * @return \think\response\Json
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function choose_journal()
- {
- $type = $this->request->request("type");
- $where = [];
- if ($type == 'author') {
- $where['chief_id'] = ['<>', 0];
- }
- $info = Channel::where(['parent_id' => 1])->where($where)->field('name, id')->select();
- $params = $this->request->request();
- if (array_key_exists('name', $params) && $params['name']) {
- $info = Channel::where(['parent_id' => 1, 'name' => ['like', '%' . $params['name'] . '%']])->where($where)->field('name, id')->select();
- }
- if ($this->request->request("keyValue")) {
- $id_arr = $this->request->request('keyValue');
- $info = Channel::where(['id' => ['in', $id_arr]])->where($where)->field('name, id')->select();
- }
- $arr = [];
- foreach ($info as $item) {
- $v['id'] = $item['id'];
- $v['name'] = $item['name'];
- $arr[] = $v;
- }
- $data['list'] = $arr;
- $data['total'] = count($arr);
- return json($data);
- }
- }
|