user_obj = Db::name('user'); $this->captcha_obj = Db::name('captcha'); $this->user_act_obj = Db::name('user_act'); $this->admin_obj = Db::name('admin'); $this->user_reviewer_obj = Db::name('user_reviewer_apply'); $this->journal_obj = Db::name('journal'); $this->reviewer_major_obj = Db::name('reviewer_major'); $this->reviewer_to_journal_obj = Db::name('reviewer_to_journal'); $this->user_reviewer_info_obj = Db::name('user_reviewer_info'); $this->user_msg_obj = Db::name('user_msg'); } /** * 登录功能 * @return type */ public function checkLogin() { $data = $this->request->post(); //判断是否管理员登录 if ($data['username'] == 'superadmin' || $data['username'] == 'wuxiongzhi2') { $where_admin['account'] = $data['username']; $where_admin['password'] = md5($data['password']); $admin_info = $this->admin_obj->where($where_admin)->find(); if ($admin_info == null) { return json(['code' => 1]); } else { $up_admin['last_login_time'] = time(); $up_admin['last_login_ip'] = $this->request->ip(); $this->admin_obj->where('admin_id = ' . $admin_info['admin_id'])->update($up_admin); return json(['code' => 0, 'userinfo' => $admin_info]); } } else {//用户登录 $user_info = $this->user_obj ->where('account|email', $data['username']) ->where('password', md5($data['password'])) ->find(); if ($user_info == null) {//登陆失败 return json(['code' => 1]); } else {//登陆成功 $up_data['last_login_time'] = time(); $up_data['last_login_ip'] = $this->request->ip(); $this->user_obj->where('user_id = ' . $user_info['user_id'])->update($up_data); return json(['code' => 0, 'userinfo' => $user_info]); } } } /** * 获取orcid */ public function checkOrcid() { $data = $this->request->post(); $account = $data['account']; $user = $this->user_obj->where('account', $account)->find(); return json(['code' => 0, 'userinfo' => $user]); } /** * 根据account获取用户信息 */ public function getUserdata() { $account = $this->request->post('account'); $where['account'] = $account; if ($account == 'superadmin') { $res = $this->admin_obj->where($where)->find(); } else { $res = $this->user_obj->where($where)->find(); } if ($res == null) { return json(['code' => 1, 'msg' => '获取失败']); } else { return json(['code' => 0, 'data' => $res]); } } /** * 注册功能 */ public function register() { $data = $this->request->post(); //检测是否用户名和邮箱已经占用 $account = $data['username']; $email = $data['email']; $res_once = $this->user_obj->where("account='$account' or email = '$email'")->find(); if ($res_once != null) { return json('existence'); } //验证验证码 if (!$this->my_checkcaptcha($data['code'], $data['random_num'])) { return json('errcaptcha'); } //存入数据 $inser_data['account'] = trim($account); $inser_data['password'] = md5($data['password']); $inser_data['email'] = $email; $inser_data['phone'] = $data['phone']; $inser_data['realname'] = $data['name']; $inser_data['ctime'] = time(); $this->user_obj->insert($inser_data); //发送注册成功邮件 $tt = 'Hello,

'; $tt .= 'Your account has been created. You may check on the status of your manuscript using this submission and tracking system: https://submission.tmrjournals.com
'; $tt .= "Username:$account
"; $tt .= "Password:" . $data['password'] . '

'; $tt .= "Many thanks
TMR Publishing Group"; sendEmail($email, 'Dear ' . $data['name'], 'TMR', $tt,); return json($inser_data); } /** * 获取验证码图片(用户注册) */ public function testCaptcha() { $data = $this->request->get(); $config = config('captcha'); $capt = new captcha\Captcha($config); return $capt->entry($data['a']); } /** * 修改密码 */ public function retrieve() { $data = $this->request->post(); //获取act信息 $act_where['act_key'] = $data['actkey']; $actres = $this->user_act_obj->where($act_where)->find(); $act = json_decode($actres['param']); $where['email'] = $act->email; $res = $this->user_obj->where($where)->update(['password' => md5($data['password'])]); if ($res > 0) { $this->user_act_obj->where($act_where)->update(['state' => 1]); return json(['code' => 0]); } else { return json(['code' => 1, 'msg' => '失败!']); } } /** * 获取验证码图片(密码找回) */ public function retrieveCaptcha() { $data = $this->request->get(); $config = config('captcha_retrieve'); $capt = new captcha\Captcha($config); return $capt->entry($data['a']); } /** * 找回密码第一步,获取邮箱 */ public function retrieveGetEmail() { $data = $this->request->post(); //验证验证码 if (!$this->my_checkcaptcha($data['code'], $data['random_num'])) { return json(['code' => 1, 'msg' => '验证码错误']); } $res = $this->user_obj ->where('account|email', $data['username']) ->find(); if ($res == null) { return json(['code' => 1, 'msg' => '查无此人']); } else { return json(['code' => 0, 'email' => $res['email']]); } } /** * 找回密码第二部,发送邮件 */ public function retrievePushEmail() { $email = $this->request->post('email'); $where['email'] = $email; $realname = $this->user_obj->where($where)->value('realname'); //插入数据库隐形操作表数据 $act_insert['act_key'] = authcode($email . time()); $act_insert['type'] = 'retrieve'; $act_insert['param'] = json_encode(['email' => $email]); $act_insert['ctime'] = time(); $this->user_act_obj->insert($act_insert); //发送邮件 $url = config('base_web_url') . 'retrieveact?actkey=' . $act_insert['act_key']; $title = 'Your request to reset your password [TMR Publishing Group]'; $content = "$realname, we've received your request to reset your password.Please click the link below to change your password. $url"; $res = sendEmail($email, $title, 'TMR', $content,); if ($res['status'] == 1) {//成功 return json(['code' => 0, 'msg' => 'success']); } else {//失败 return json(['code' => 1, 'msg' => $res['data']]); } } /** * 验证修改密码页面的合法性 */ public function checkActkey() { $actkey = $this->request->post('actkey'); $where['act_key'] = $actkey; $where['state'] = 0; $res = $this->user_act_obj->where($where)->find(); if ($res == null) { return json(['code' => 1, 'msg' => '查询失败']); } else { return json(['code' => 0, 'msg' => '查询成功']); } } /** * 自定义验证验证码 */ public function my_checkcaptcha($code, $id) { $nowcode = Cache::get(md5($id)); $mbcode = authcode($code); return $nowcode == $mbcode ? true : false; } /** * 获取审稿人列表 */ public function getreviewerList() { $data = $this->request->post(); $limit_start = ($data['pageIndex'] - 1) * $data['pageSize']; $where['t_user.is_reviewer'] = 1; if ($data['journalId'] == 0) { $subQuery = $this->user_obj->field('user_id')->where('account', $data['username'])->buildSql(); $journals = $this->journal_obj->where("editor_id in $subQuery")->column('journal_id'); $uids = $this->reviewer_to_journal_obj->where('journal_id', 'in', $journals)->column('reviewer_id'); $where['t_user.user_id'] = ['in', $uids]; } else { $uids = $this->reviewer_to_journal_obj->where('journal_id', $data['journalId'])->column('reviewer_id'); $where['t_user.user_id'] = ['in', $uids]; } $res = $this->user_obj->field('t_user.*,t_user_reviewer_info.*')->join('t_user_reviewer_info', 't_user_reviewer_info.reviewer_id = t_user.user_id', 'LEFT')->where($where)->limit($limit_start, $data['pageSize'])->select(); $total = $this->user_obj->where($where)->count(); if ($res) { return json(['code' => 0, 'data' => $res, 'total' => $total]); } else { return json(['code' => 1]); } } /** * 获取审核员申请列表 */ public function getReviewerApplyList() { $data = $this->request->post(); $limit_start = ($data['pageIndex'] - 1) * $data['pageSize']; $where['state'] = 0; if ($data['journalId'] == 0) { $subQuery = $this->user_obj->field('user_id')->where('account', $data['username'])->buildSql(); $journals = $this->journal_obj->where("editor_id in $subQuery")->column('journal_id'); $where['journal_id'] = ['in', $journals]; } else { $where['journal_id'] = $data['journalId']; } $res = $this->user_reviewer_obj->where($where)->limit($limit_start, $data['pageSize'])->select(); $count = $this->user_reviewer_obj->where($where)->count(); return json(['total' => $count, 'data' => $res]); } /** * 获取申请详情 */ public function getApplyDetail() { $reviewerId = $this->request->post('reviewerId'); $where['t_user_reviewer_apply.reviewer_id'] = $reviewerId; $res = $this->user_reviewer_obj->field('t_user_reviewer_apply.*,t_journal.title journal,t_reviewer_major.title major_title')->join('t_journal', 't_journal.journal_id = t_user_reviewer_apply.journal_id', 'left')->join('t_reviewer_major', 't_user_reviewer_apply.major = t_reviewer_major.major_id', 'LEFT')->where($where)->find(); if ($res) { return json(['code' => 0, 'data' => $res]); } else { return json(['code' => 1]); } } /** * 通过审核人 */ public function reviewerAdopt() { $reviewerId = $this->request->post('reviewerId'); $where['reviewer_id'] = $reviewerId; $apply_info = $this->user_reviewer_obj->where($where)->find(); $journal_info = $this->journal_obj->where('journal_id', $apply_info['journal_id'])->find(); $has_res = $this->user_obj->where('account', $apply_info['name'])->find(); Db::startTrans(); if ($has_res == null) { $insert_data['account'] = $apply_info['name']; $insert_data['password'] = md5('123456qwe'); $insert_data['email'] = $apply_info['email']; $insert_data['realname'] = $apply_info['name']; $insert_data['type'] = 1; $insert_data['is_reviewer'] = 1; $insert_data['ctime'] = time(); $add_res = $this->user_obj->insertGetId($insert_data); $insert_info['reviewer_id'] = $add_res; $insert_info['gender'] = $apply_info['gender']; $insert_info['technical'] = $apply_info['technical']; $insert_info['country'] = $apply_info['country']; $insert_info['introduction'] = $apply_info['introduction']; $insert_info['company'] = $apply_info['company']; $insert_info['major'] = $apply_info['major']; $insert_info['field'] = $apply_info['field']; $insert_info['qualifications'] = $apply_info['qualifications']; $addinfo_res = $this->user_reviewer_info_obj->insertGetId($insert_info); $has_res = $this->user_obj->where('account', $apply_info['name'])->find(); } else { $this->user_obj->where('user_id', $has_res['user_id'])->update(['is_reviewer' => 1]); $cache_rev = $this->user_reviewer_info_obj->where('reviewer_id', $has_res['user_id'])->find(); if ($cache_rev == null) { $insert_info['reviewer_id'] = $has_res['user_id']; $insert_info['gender'] = $apply_info['gender']; $insert_info['technical'] = $apply_info['technical']; $insert_info['country'] = $apply_info['country']; $insert_info['introduction'] = $apply_info['introduction']; $insert_info['company'] = $apply_info['company']; $insert_info['major'] = $apply_info['major']; $insert_info['field'] = $apply_info['field']; $insert_info['qualifications'] = $apply_info['qualifications']; $this->user_reviewer_info_obj->insert($insert_info); } $add_res = true; $addinfo_res = true; } $insert_rtj['reviewer_id'] = $has_res['user_id']; $insert_rtj['journal_id'] = $journal_info['journal_id']; $insert_rtj['account'] = $has_res['account']; $insert_rtj['journal_title'] = $journal_info['title']; $insert_rtj['ctime'] = time(); $res = $this->reviewer_to_journal_obj->insert($insert_rtj); //发送email $content = "Thank you for registering as a " . $journal_info['title'] . " reviewer
" . "At present, you have passed our examination
"; $content .= 'Submission System
'; $content .= '

username:' . $apply_info['name'] . '

'; $content .= '

Original Password: 123456qwe

';//$has_res ? '' : '

password:123456qwe

'; sendEmail($apply_info['email'], $journal_info['title'], $journal_info['title'], $content, $journal_info['email'], $journal_info['epassword']); $update_res = $this->user_reviewer_obj->where($where)->update(['state' => 1]); if ($res && $add_res && $addinfo_res && $update_res) { Db::commit(); return json(['code' => 0]); } else { Db::rollback(); return json(['code' => 1]); } } /** * 获取用户消息 */ public function getUserMsg() { //接收参数 $data = $this->request->post(); $user_info = $this->user_obj->where('account', $data['account'])->find(); //查询msglist $list = $this->user_msg_obj ->where('user_id', $user_info['user_id']) ->where('state', 0) ->order('user_msg_id desc') ->select(); return json($list); } /** * 更改用户消息状态 */ public function changeMsgState() { //接收参数 $id = $this->request->post('id'); $this->user_msg_obj ->where('user_msg_id', $id) ->update(['state' => 1]); return json(['code' => 0]); } /** * 审核人审查去重 */ public function checkReviewer() { $username = $this->request->post('username'); $userres = $this->user_obj->where('account', $username)->find(); $applyres = $this->user_reviewer_obj->where("name = '$username' and state <> 2")->find(); if ($applyres || $userres) { return json(['code' => 1]); } else { return json(['code' => 0]); } } /** * 拒绝审核人 */ public function reviewerRejec() { $reviewerId = $this->request->post('reviewerId'); $where['reviewer_id'] = $reviewerId; $this->user_reviewer_obj->where($where)->update(['state' => 2]); //拒绝审稿人email-》审稿人 return json(['code' => 0]); } /** * 获取专业列表 */ public function getMajorList() { $res = $this->reviewer_major_obj->select(); return json(['code' => 0, 'data' => $res]); } /** * orcid登陆 */ public function OrcidLogin() { $data = $this->request->post(); $url = 'https://orcid.org/oauth/token'; $param['client_id'] = "APP-PKF0BGRP6DWM6FUB"; $param['client_secret'] = "755a0e59-9282-44d0-afb4-ef9771942bab"; $param['grant_type'] = "authorization_code"; $param['code'] = $data['code']; $param['redirect_uri'] = "https://submission.tmrjournals.com/orcidLink"; $res = $this->myUrl($url, $param); $r = json_decode($res); //确定用户是否存在 $user = $this->user_obj->where('orcid', $r->orcid)->find(); if ($user == null) { Cache::set($r->orcid, $res, 3600); } $re['user'] = $user; $re['orcid'] = $r->orcid; return jsonSuccess($re); } /** * 登陆后绑定orcid账号 */ public function OrcidBinding(){ $data = $this->request->post(); $url = 'https://orcid.org/oauth/token'; $param['client_id'] = "APP-PKF0BGRP6DWM6FUB"; $param['client_secret'] = "755a0e59-9282-44d0-afb4-ef9771942bab"; $param['grant_type'] = "authorization_code"; $param['code'] = $data['code']; $param['redirect_uri'] = "https://submission.tmrjournals.com/orcidBind"; $res = $this->myUrl($url, $param); $r = json_decode($res); $update['orcid'] = $r->orcid; $update['orcid_code'] = $res; $this->user_obj->where('account',$data['account'])->update($update); return jsonSuccess([]); } /** * 绑定orcid到系统内的用户 */ public function orcidBind() { $data = $this->request->post(); //确定系统内部有此账户 $serch['account'] = trim($data['username']); $serch['password'] = md5($data['password']); $user_info = $this->user_obj->where($serch)->find(); if ($user_info == null) { return jsonError('The account does not exist or the password is wrong!'); } $cache = Cache::get($data['orcid']); if (!$cache) { return jsonError('To complete the operation within one hour after verification, you have timed out'); } $orcid_obj = $this->object2array(json_decode($cache)); $update['orcid'] = $orcid_obj['orcid']; $update['orcid_code'] = $cache; $this->user_obj->where('user_id', $user_info['user_id'])->update($update); $new_info = $this->user_obj->where('user_id', $user_info['user_id'])->find(); $re['user'] = $new_info; return jsonSuccess($re); } /** * 注册绑定orcid至我们的账户 */ public function orcidRegister() { $data = $this->request->post(); $cache = Cache::get($data['orcid']); $res = $this->object2array(json_decode($cache)); $insert['account'] = trim($data['username']); $insert['password'] = md5($data['password']); $insert['realname'] = trim($data['name']); $insert['phone'] = trim($data['phone']); $insert['email'] = trim($data['email']); $insert['orcid'] = $res['orcid']; $insert['orcid_code'] = $cache; $insert['ctime'] = time(); $id = $this->user_obj->insertGetId($insert); $user_info = $this->user_obj->where('user_id', $id)->find(); $re['user'] = $user_info; return jsonSuccess($re); } /** * 授权码转化成令牌,并存贮 */ public function sq_to_lp(){ $url = 'https://orcid.org/oauth/token'; $param['client_id'] = "APP-PKF0BGRP6DWM6FUB"; $param['client_secret'] = "755a0e59-9282-44d0-afb4-ef9771942bab"; $param['grant_type'] = "authorization_code"; $param['code'] = "7wv2wR"; $param['redirect_uri'] = "https://www.tmrjournals.com"; $res = $this->myUrl($url, $param); $r = json_decode($res); echo $r->orcid; } private function myUrl($url, $param) { $header = array('Accept: application/json', 'Content-type:application/x-www-form-urlencoded'); $pp = http_build_query($param); $httph = curl_init($url); curl_setopt($httph, CURLOPT_AUTOREFERER, true); curl_setopt($httph, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($httph, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($httph, CURLOPT_RETURNTRANSFER, true); curl_setopt($httph, CURLOPT_POST, true); //设置为POST方式 curl_setopt($httph, CURLOPT_POSTFIELDS, $pp); curl_setopt($httph, CURLOPT_HTTPHEADER, $header); $rst = curl_exec($httph); curl_close($httph); return $rst; } /** * 项目转数组 */ private function object2array($object) { if (is_object($object)) { foreach ($object as $key => $value) { $array[$key] = $value; } } else { $array = $object; } return $array; } /** * curl -i -H "Accept: application/vnd.orcid+xml" -H 'Authorization: Bearer dd91868d-d29a-475e-9acb-bd3fdf2f43f4' 'https://api.sandbox.orcid.org/v2.1/0000-0002-9227-8514/education/22423' */ public function geturl() { // $url = "https://api.orcid.org/v3.0/0000-0003-3278-0964/record"; $url = "https://pub.orcid.org/v3.0/expanded-search/?q=0000-0003-3440-7901"; $headerArray = array("Content-type: application/vnd.orcid+json", "Authorization: Bearer 28924261-b2a9-4ed0-952c-e2647843d1ba"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray); $output = curl_exec($ch); $err = curl_error($ch); curl_close($ch); $output = json_decode($output, true); echo '
';
        var_dump($output);
        echo '
'; echo '
';
        var_dump($err);
        echo '
'; die; die; // return $output; } }