request->post();
// if ($data['username'] == 'fariba' || $data['username'] == 'zc' || $data['username'] == 'Mohammad Hossein' || $data['username'] == 'xiaoyueyue' || $data['username'] == 'sethlee000' || $data['username'] == 'yuanying9908') {
// return json(['code' => 1, 'msg' => 'Your account has been blocked. Please contact the publisher for details: publisher@tmrjournals.com.']);
// }
//判断是否管理员登录
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]);
}
if($user_info['register_check']==0){
return jsonError('Please click on the link sent to your email inbox to complete your registration.');
}
//黑名单验证
$blackCheck = $this->user_black_obj->where('user_id', $user_info['user_id'])->where('black_state', 0)->find();
if ($blackCheck) {
return jsonError("Your account has been blocked. Please contact the publisher for details: publisher@tmrjournals.com.");
}
$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);
$roles = $this->getUserRoles($user_info['account']);
$re['roles'] = $roles;
$re['userinfo'] = $user_info;
return jsonSuccess($re);
}
}
/**
* 增加青年科学家
*/
public function addYboard(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require',
'journal_id'=>'require',
'year'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$check = $this->user_to_yboard_obj
->where('user_id',$data['user_id'])
->where('journal_id',$data['journal_id'])
->where('end_date','>',time())
->find();
if($check){
return jsonError('Already exists');
}
$user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find();
$start_time = time();
//生成证书
$icon = self::createYboardCert($user_info,$journal_info,$start_time,$data['year']);
//添加数据
$insert['user_id'] = $data['user_id'];
$insert['journal_id'] = $data['journal_id'];
$insert['start_date'] = $start_time;
$insert['end_date'] = strtotime("+ ".$data['year']." year",$start_time);
$insert['icon'] = $icon;
$insert['ctime'] = time();
$this->user_to_yboard_obj->insert($insert);
return jsonSuccess([]);
}
/**
* 续约青年科学家
*/
public function addYboardContinue(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require',
'journal_id'=>'require',
'year'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$check = $this->user_to_yboard_obj
->where('user_id',$data['user_id'])
->where('journal_id',$data['journal_id'])
->where('end_date','>',time())
->find();
$start_time = 0;
if($check){
$start_time = $check['end_date'];
}else{
$start_time = time();
}
$user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find();
//生成证书
$icon = self::createYboardCert($user_info,$journal_info,$start_time,$data['year']);
//添加数据
$insert['user_id'] = $data['user_id'];
$insert['journal_id'] = $data['journal_id'];
$insert['start_date'] = $start_time;
$insert['end_date'] = strtotime("+ ".$data['year']." year",$start_time);
$insert['icon'] = $icon;
$insert['ctime'] = time();
$this->user_to_yboard_obj->insert($insert);
return jsonSuccess([]);
}
/**
* 删除青年编委
*/
public function delYboard(){
$data = $this->request->post();
$rule = new Validate([
'utyb_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$this->user_to_yboard_obj->where('utyb_id',$data['utyb_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* 获取青年科学家列表
*/
public function getYboardlist(){
$data = $this->request->post();
$rule = new Validate([
'journal_id'=>'require',
"type"=>'require',
'pageIndex'=>'require',
'pageSize'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$time = time();
$where['t_user_to_yboard.journal_id'] = $data['journal_id'];
$where['t_user_to_yboard.state'] = 0;
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
if($data['type']==1){//当职
$where['t_user_to_yboard.start_date'] = ['<=',$time];
$where['t_user_to_yboard.end_date'] = [">=",$time];
}elseif($data['type']==2){//过期
$where['t_user_to_yboard.end_date'] = ["<",$time];
}else{//按年份
// $where["_string"] = "t_user_to_yboard.start_date >= 1";
$where['t_user_to_yboard.start_date'] = ['<= time',$data['year']."-12-31 23:59:59"];
$where['t_user_to_yboard.end_date'] = [">= time",$data['year']."-1-1 00:00:00"];
}
if(isset($data['keywords'])&&$data['keywords']!=''){
$where['t_user.account|t_user.email|t_user.realname'] = ['like',"%".trim($data['keywords'])."%"];
}
if(isset($data['fieldkey'])&&$data['fieldkey']!=''){
$fk = str_replace(";",";",trim($data['fieldkey']));
$farr = explode(";",$fk);
$ws = [];
foreach($farr as $val){
$ws[] = ['like',"%".$val."%"];
}
$where['t_user_reviewer_info.field'] = count($ws)>1?$ws:$ws[0];
}
$order = '';
if(isset($data['order_remark'])&&$data['order_remark']==1){
$order = "t_user.remark desc,t_user.score desc";
}else{
$order = "t_user.score desc";
}
$list = $this->user_to_yboard_obj
->field("t_user.account,t_user.realname,t_user.email,t_user.score,t_user.remark,t_user.wos_index,t_user.wos_time,t_user.google_index,t_user.google_time,t_user_reviewer_info.field,t_user_reviewer_info.company,t_user_to_yboard.*")
->join("t_user",'t_user.user_id = t_user_to_yboard.user_id','left')
->join("t_user_reviewer_info",'t_user_reviewer_info.reviewer_id = t_user.user_id','left')
->where($where)
->group("t_user_to_yboard.user_id")
->order($order)
->limit($limit_start,$data['pageSize'])
->select();
//总结时间段
foreach($list as $k=>$v){
$ca_list = $this->user_to_yboard_obj->where("journal_id",$data['journal_id'])->where('user_id',$v['user_id'])->where('state',0)->select();
$ca_arr = [];
foreach($ca_list as $val){
$c['start_date'] = $val['start_date'];
$c['end_date'] = $val['end_date'];
$ca_arr[] = $c;
}
$list[$k]['sd'] = $ca_arr;
}
$count = $this->user_to_yboard_obj->join("t_user",'t_user.user_id = t_user_to_yboard.user_id','left')->join("t_user_reviewer_info",'t_user_reviewer_info.reviewer_id = t_user.user_id','left')->where($where)->count();
$re['yboards'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* 用户评价
*/
public function userScore1(){
die();
$data = $this->request->post();
$rule = new Validate([
'num'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
// $user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
// if(!$user_info){
// return jsonError("user not has");
// }
$limit_start = ($data['num'] - 1) * 500;
$list = $this->article_obj
->field("t_article.*,t_journal.level")
->join("t_journal","t_article.journal_id = t_journal.journal_id",'left')
->where('t_article.state',5)
->limit($limit_start,500)
->select();
foreach($list as $v){
$check = $this->user_obj->where('user_id',$v['user_id'])->find();
if(!$check){
continue;
}
if($v['journal_id']==1&&$v['ctime']<1609430400){
continue;
}
if(($v['journal_id']==12||$v['journal_id']==9||$v['journal_id']==7||$v['journal_id']==16)&&$v['ctime']<1672502400){
continue;
}
if(($v['journal_id']==18||$v['journal_id']==21)&&$v['ctime']<1696089600){
continue;
}
if($v['journal_id']!=1&&$v['journal_id']!=12&&$v['journal_id']!=9&&$v['journal_id']!=7&&$v['journal_id']!=16&&$v['journal_id']!=18&&$v['journal_id']!=21&&$v['ctime']<1659283200){
continue;
}
$score = 0;
if($v['level']=='A'){
$score=1;
}elseif($v['level']=='B'){
$score=0.5;
}else{
$score=0.2;
}
addUserScoreLog($v['user_id'],$score,"add score ".$score." for submit article :".$v['accept_sn'],$v['ctime']);
$this->user_obj->where('user_id',$v['user_id'])->setInc('score',$score);
}
dump($list);
}
/**
*
*/
public function userScore2(){
die();
$data = $this->request->post();
$rule = new Validate([
'num'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
// $user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
// if(!$user_info){
// return jsonError("user not has");
// }
$limit_start = ($data['num'] - 1) * 500;
$list = $this->article_reviewer_obj
->field("t_article_reviewer.*,t_journal.level,t_journal.journal_id")
->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.state','in',[1,2,3])
->limit($limit_start,500)
->select();
foreach($list as $v){
$check = $this->user_obj->where('user_id',$v['reviewer_id'])->find();
if(!$check){
continue;
}
if($v['journal_id']==1&&$v['ctime']<1609430400){
continue;
}
if(($v['journal_id']==12||$v['journal_id']==9||$v['journal_id']==7||$v['journal_id']==16)&&$v['ctime']<1672502400){
continue;
}
if(($v['journal_id']==18||$v['journal_id']==21)&&$v['ctime']<1696089600){
continue;
}
if($v['journal_id']!=1&&$v['journal_id']!=12&&$v['journal_id']!=9&&$v['journal_id']!=7&&$v['journal_id']!=16&&$v['journal_id']!=18&&$v['journal_id']!=21&&$v['ctime']<1659283200){
continue;
}
$score = 0;
if($v['level']=='A'){
$score = 0.2;
// }elseif($v['level']=="B"){
// $score = 0.2;
}else{
$score = 0.1;
}
addUserScoreLog($v['reviewer_id'],$score,"add score ".$score." for submit article",$v['ctime']);
$this->user_obj->where('user_id',$v['reviewer_id'])->setInc('score',$score);
}
dump($list);
}
public function addIndexApply(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require',
'journal_id'=>'require',
'local_doi'=>'require',
'pub_doi'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find();
$insert['user_id'] = $data['user_id'];
$insert['local_doi'] = $data['local_doi'];
$insert['pub_doi'] = $data['pub_doi'];
$insert['ctime'] = time();
$this->user_index_log_obj->insert($insert);
$score = 0;
if($journal_info['level']=='A'){
$score = 0.5;
}elseif($journal_info['level']=="B"){
$score = 0.2;
}else{
$score = 0.1;
}
addUserScoreLog($data['user_id'],$score,"add score ".$score." for cite a manuscript",time());
$this->user_obj->where('user_id',$data['user_id'])->setInc('score',$score);
return jsonSuccess([]);
}
/**
* 获取作者库列表
*/
public function getAuthorUserList(){
$data = $this->request->post();
$rule = new Validate([
'journal_id' => 'require',
'pageIndex' => 'require',
'pageSize' => 'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find();
$where['t_user_author.journal_title'] = $journal_info['title'];
$where['t_user_author.state'] = 0;
if(isset($data['major'])&&$data['major']!=0){
$where['t_user_reviewer_info.major'] = $data['major'];
}
if(isset($data['keywords'])&&trim($data['keywords'])!=''){
$where['t_user.account|t_user.email|t_user.realname'] = ['like',"%".trim($data['keywords'])."%"];
}
$list = $this->user_author_obj
->join([['t_user','t_user.user_id = t_user_author.user_id','left'],['t_user_reviewer_info','t_user_reviewer_info.reviewer_id=t_user.user_id','left']])
->where($where)
->page($data['pageIndex'],$data['pageSize'])
->group("t_user_author.user_id")
->select();
$count = $this->user_author_obj->join([['t_user','t_user.user_id = t_user_author.user_id','left'],['t_user_reviewer_info','t_user_reviewer_info.reviewer_id=t_user.user_id','left']])->where($where)->group("t_user_author.user_id")->count();
foreach($list as $k=>$v){
$ca = $this->user_author_obj->where('user_id',$v['user_id'])->where('state',0)->select();
$carr = [];
foreach($ca as $val){
$a = $this->journal_obj->where('title',$val['journal_title'])->find();
$c['journal_abbr'] = $a['abbr'];
$c['doi'] = $val['w_article_doi'];
$c['link'] = "https://www.tmrjournals.com/article.html?J_num=".$a['web_journal_id']."&a_id=".$val['w_article_id'];
$carr[] = $c;
}
$list[$k]['art_detail'] = $carr;
$list[$k]['major_str'] = getMajorStr($v['major']);
}
$re['list'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* 编辑用户指数信息
*/
public function editUserMsg(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require',
'realname'=>'require',
'wos_index'=>'require',
'google_index'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
$updata = [];
if($data['wos_index']!=$user_info['wos_index']){
$updata['wos_index'] = $data['wos_index'];
$updata['wos_time'] = time();
}
if($data['google_index']!=$user_info['google_index']){
$updata['google_index'] = $data['google_index'];
$updata['google_time'] = time();
}
$updata['realname'] = trim($data['realname']);
$updata['localname'] = trim($data['localname']);
if(count($updata)>0){
$this->user_obj->where('user_id',$data['user_id'])->update($updata);
}
return jsonSuccess([]);
}
/**
* 编辑灰库人员信息
*/
public function editAshUser(){
$data = $this->request->post();
$rule = new Validate([
'ash_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$updata = [];
if(isset($data['name'])){
$updata['name'] = trim($data['name']);
}
if(isset($data['email'])){
$updata['email'] = trim($data['email']);
}
if(isset($data['field'])){
$updata['field'] = trim($data['field']);
}
if(isset($data['intro'])){
$updata['intro'] = trim($data['intro']);
}
if(isset($data['remark'])){
$updata['remark'] = trim($data['remark']);
}
if(isset($data['company'])){
$updata['company'] = trim($data['company']);
}
if(isset($data['country'])){
$updata['country'] = $data['country'];
}
if(isset($data['major'])){
$updata['major'] = $data['major'];
}
if(isset($data['title'])){
$updata['title'] = $data['title'];
}
$this->user_ash_obj->where('ash_id',$data['ash_id'])->update($updata);
return jsonSuccess([]);
}
public function researchAshUser(){
$data = $this->request->post();
$rule = new Validate([
'pageIndex'=>'require',
'pageSize'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$where['state']=0;
if(isset($data['major'])&&$data['major']!=0){
$where_mids = self::majorids($data['major']);
$where['major'] = ['in',$where_mids];
}
if(isset($data['keywords'])&&$data['keywords']!=''){
$where['name|email|intro|company'] = ['like',"%".trim($data['keywords'])."%"];
}
if(isset($data['title'])&&$data['title']!="all"){
$where['title'] = $data['title'];
}
if(isset($data['fieldkey'])&&$data['fieldkey']!=''){
$fk = str_replace(";",";",$data['fieldkey']);
$farr = explode(";",$fk);
$ws = [];
foreach($farr as $val){
$ws[] = ['like',"%".$val."%"];
}
$where['field'] = count($ws)>1?$ws:$ws[0];
}
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$list = $this->user_ash_obj->where($where)->limit($limit_start,$data['pageSize'])->select();
$count = $this->user_ash_obj->where($where)->count();
foreach($list as $k=>$v){
if($v['major']==0){
$list[$k]['major_str'] = '';
$list[$k]['major_shu'] = 0;
continue;
}
$list[$k]['major_str'] = trim(self::getMajorStr($v['major']),'>');
$list[$k]['major_shu'] = self::getMajorShu($v['major']);
}
$re['data']=$list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* 添加灰库用户单个
*/
public function addAshUser(){
$data = $this->request->post();
$rule = new Validate([
'name'=>'require',
'email'=>'require',
'major'=>'require',
'company'=>'require',
'field'=>'require',
'title'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$check1 = $this->user_obj->where('email',$data['email'])->find();
if($check1){
return jsonError("用户存在于正式库");
}
$check2 = $this->user_ash_obj->where('email',$data['email'])->find();
if($check2){
return jsonError("用户存在于灰库");
}
$insert['name']=trim($data['name']);
$insert['email']=trim($data['email']);
$insert['major']=$data['major'];
$insert['company']=trim($data['company']);
$insert['field'] = trim($data['field']);
$insert['intro'] = isset($data['intro'])?trim($data['intro']):'';
$insert['country'] = isset($data['country'])?trim($data['country']):'';
$insert['title'] = trim($data['title']);
$insert['ctime'] = time();
$this->user_ash_obj->insert($insert);
return jsonSuccess([]);
}
/**
* 灰库导入excel用户
*/
public function importExcelUser(){
$data = $this->request->post();
$rule = new Validate([
// 'users'=>'require|array'
'file'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$ds = self::readExcel($data['file']);
$frag_suc = [];
$frag_err = [];
$title_arr = ['Prof','Associate Prof.','Assistant Prof.','Ph.D.','Researcher','Researcher','Associate research fellow','Assistant research fellow','Engineer','Senior engineer'];
foreach($ds as $v){
if(!$v['email']||!isset($v['field'])||!isset($v['company'])){
$v['msg'] = '信息不全或错误';
$frag_err[] = $v;
continue;
}
if($v['title']!=''&&!in_array($v['title'],$title_arr)){
$v['msg'] = 'title信息错误';
$frag_err[] = $v;
continue;
}
$check1 = $this->user_obj->where('email',trim($v['email']))->find();
if($check1){
$v['msg'] = '用户存在正式库';
$frag_err[] = $v;
continue;
}
$check2 = $this->user_ash_obj->where('email',trim($v['email']))->find();
if($check2){
$v['msg'] = "用户存在于灰库";
$frag_err[] = $v;
continue;
}
$insert['name'] = $v['name'];
$insert['email'] = trim($v['email']);
$major_res=$this->major_obj->where('major_title',trim($v['major']))->find();
$major_id = 0;
if($major_res){
$major_id = $major_res['major_id'];
}
$insert['major'] = $major_id;
$insert['field'] = trim($v['field']);
$insert['company'] = trim($v['company']);
$insert['intro'] = isset($v['intro'])?trim($v['intro']):'';
$insert['title'] = trim($v['title']);
$insert['remark'] = isset($v['remark'])?trim($v['remark']):'';
$insert['ctime'] = time();
$this->user_ash_obj->insert($insert);
$frag_suc[] = $v;
}
$re['suc'] = $frag_suc;
$re['err'] = $frag_err;
return jsonSuccess($re);
}
public function upImportFile(){
$file = request()->file('userFile');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . "userFile");
if ($info) {
$r = self::readExcel($info->getSaveName());
$re['data'] = $r;
$re['file'] = str_replace("\\", "/", $info->getSaveName());
return jsonSuccess($re);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
private function readExcel($file){
$afile = ROOT_PATH . 'public' . DS . "userFile".DS.$file;
$extension = substr($afile, strrpos($afile, '.') + 1);
vendor("PHPExcel.PHPExcel");
if ($extension == 'xlsx') {
$objReader = new \PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load($afile);
} else if ($extension == 'xls') {
$objReader = new \PHPExcel_Reader_Excel5();
$objPHPExcel = $objReader->load($afile);
}
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$frag = [];
for ($i = 2; $i <= $highestRow; $i++) {
if($objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue()==''){
continue ;
}
$aa['name'] = $objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();
$aa['email'] = $objPHPExcel->getActiveSheet()->getCell("B" . $i)->getValue();
$aa['major'] = $objPHPExcel->getActiveSheet()->getCell("C" . $i)->getValue();
$aa['field'] = $objPHPExcel->getActiveSheet()->getCell("D" . $i)->getValue();
$aa['intro'] = $objPHPExcel->getActiveSheet()->getCell("E" . $i)->getValue();
$aa['company'] = $objPHPExcel->getActiveSheet()->getCell("F" . $i)->getValue();
$aa['title'] = trim($objPHPExcel->getActiveSheet()->getCell("G" . $i)->getValue());
$aa['remark'] = $objPHPExcel->getActiveSheet()->getCell("H" . $i)->getValue();
// $aa['username'] = $objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();
// $aa['has'] = '未出证';
// if($aa['username']==''){
// continue;
// }
$frag[] = $aa;
}
return $frag;
}
/**
* @title 获取所有用户
* @description 获取所有用户
* @author wangjinlei
* @url /api/User/getAllUser
* @method POST
*
* @param name:pageIndex type:int require:1 desc:当前页码数
* @param name:pageSize type:int require:1 desc:单页数据条数
* @param name:username type:string require:1 desc:用户名或邮箱
* @param name:role type:string require:1 desc:0:全部1:editor2:reviewer3:board
*
* @return users:用户列表#
* @return count:总数
*/
public function getAllUser()
{
$data = $this->request->post();
$rule = new Validate([
'pageIndex'=>'require',
'pageSize'=>'require',
'role'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$black_list = $this->user_black_obj->where('black_state', 0)->column("user_id");
$frag = [];
$count = 0;
$where = [];
$where['state'] = 0;
// $where['user_id'] = ['not in',$black_list];
if ($data['username'] != "") {
$where["account|email"] = ['like','%' . trim($data['username'] . '%')];
}
if($data['role']==1){
$where['type'] = 2;
}elseif($data['role']==2){
$c = $this->reviewer_to_journal_obj->where('state',0)->column('reviewer_id');
$where['user_id'] = ['in',$c];
}elseif($data['role']==3){
$cc = $this->board_to_journal_obj->where('state',0)->column('user_id');
$where['user_id'] = ['in',$cc];
}
if(isset($where['user_id'])){
$where['user_id'] = [['not in',$black_list],$where['user_id']];
}else{
$where['user_id'] = ['not in',$black_list];
}
$frag = $this->user_obj->where($where)->limit($limit_start, $data['pageSize'])->select();
$count = $this->user_obj->where($where)->count();
foreach ($frag as $k => $v) {
$frag[$k]['roles'] = $this->getUserRoles($v['account']);
}
$re['users'] = $frag;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* @title 拉黑用户
* @description 拉黑用户
* @author wangjinlei
* @url /api/User/pushUserToBlack
* @method POST
*
* @param name:user_id type:int require:1 desc:用户id
* @param name:reason type:string require:1 desc:拉黑原因
*
*/
public function pushUserToBlack()
{
$data = $this->request->post();
$check_black = $this->user_black_obj->where('user_id', $data['user_id'])->where('black_state', 0)->find();
if ($check_black) {
return jsonError("repeat !");
}
$insert['user_id'] = $data['user_id'];
$insert['reason'] = trim($data['reason']);
$insert['black_ctime'] = time();
$this->user_black_obj->insert($insert);
return jsonSuccess($data);
}
/**
* @title 获取黑名单列表
* @description 获取黑名单列表
* @author wangjinlei
* @url /api/User/getUserBlackList
* @method POST
*
* @param name:pageIndex type:int require:1 desc:当前页码数
* @param name:pageSize type:int require:1 desc:单页数据条数
*
* @return blacks:黑名单列表#
* @return count:总数
*/
public function getUserBlackList()
{
$data = $this->request->post();
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$list = $this->user_black_obj
->field("t_user.account,t_user.email,t_user.realname,t_user_black.*")
->join('t_user', 't_user.user_id = t_user_black.user_id', 'left')
->where('t_user_black.black_state', 0)
->limit($limit_start, $data['pageSize'])->select();
$count = $this->user_black_obj->where('black_state', 0)->count();
$re['blacks'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
public function getBoardApplys(){
$data = $this->request->post();
$rules = new Validate([
'editor_id' => 'require'
]);
if (!$rules->check($data)) {
return jsonError($rules->getError());
}
$ids = $this->journal_obj->where('editor_id',$data['editor_id'])->column('journal_id');
$list = $this->apply_board_obj
->field("t_journal.title,t_apply_board.*,t_user.account,t_user.email,t_user.realname")
->join("t_journal",'t_journal.journal_id = t_apply_board.journal_id','left')
->join("t_user","t_user.user_id = t_apply_board.user_id",'left')
->where('t_apply_board.journal_id','in',$ids)->where('t_apply_board.state',0)->select();
$re['applys'] = $list;
return jsonSuccess($re);
}
public function delBoardApply(){
$data = $this->request->post();
$rules = new Validate([
'ap_board_id' => 'require'
]);
if (!$rules->check($data)) {
return jsonError($rules->getError());
}
$this->apply_board_obj->where('ap_board_id',$data['ap_board_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
public function getYboardApplys(){
$data = $this->request->post();
$rules = new Validate([
'editor_id' => 'require'
]);
if (!$rules->check($data)) {
return jsonError($rules->getError());
}
$ids = $this->journal_obj->where('editor_id',$data['editor_id'])->column('journal_id');
$list = $this->apply_yboard_obj
->field("t_journal.title,t_apply_yboard.*,t_user.account,t_user.email,t_user.realname")
->join("t_journal",'t_journal.journal_id = t_apply_yboard.journal_id','left')
->join("t_user","t_user.user_id = t_apply_yboard.user_id",'left')
->where('t_apply_yboard.journal_id','in',$ids)->where('t_apply_yboard.state',0)->select();
$re['applys'] = $list;
return jsonSuccess($re);
}
// public function delYboardApply(){
// $data = $this->request->post();
// $rules = new Validate([
// 'ap_yboard_id' => 'require'
// ]);
// if (!$rules->check($data)) {
// return jsonError($rules->getError());
// }
// $this->apply_yboard_obj->where('ap_yboard_id',$data['ap_yboard_id'])->update(['state'=>1]);
// return jsonSuccess([]);
// }
/**
* 同意青年科学家申请
*/
public function agreeYboardApply(){
$data = $this->request->post();
$rules = new Validate([
'ap_yboard_id' => 'require',
'year'=>'require'
]);
if (!$rules->check($data)) {
return jsonError($rules->getError());
}
$start_time = time();
$app_info = $this->apply_yboard_obj->where('ap_yboard_id',$data['ap_yboard_id'])->find();
$user_info = $this->user_obj->where('user_id',$app_info['user_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$app_info['journal_id'])->find();
$check = $this->user_to_yboard_obj->where('user_id',$app_info['user_id'])->where('journal_id',$app_info['journal_id'])->where('start_date',"<=",$start_time)->where('end_date',">=",$start_time)->find();
if($check){
return jsonError("Already exists");
}
$icon = self::createYboardCert($user_info,$journal_info,$start_time,$data['year']);
$insert['user_id'] = $app_info['user_id'];
$insert['journal_id'] = $app_info['journal_id'];
$insert['start_date'] = $start_time;
$insert['end_date'] = strtotime("+ ".$data['year']." year",$start_time);
$insert['icon'] = $icon;
$insert['ctime'] = $start_time;
$this->user_to_yboard_obj->insert($insert);
$this->apply_yboard_obj->where('ap_yboard_id',$data['ap_yboard_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* 添加作者用户
*/
public function addUserForAuthor(){
die("service stop!!");
$num = $this->request->post('num');
// $num =1;
$cs['num'] = $num;
$url = 'http://journalapi.tmrjournals.com/public/index.php/master/Article/getArticleReportAuthors';
$list = object_to_array(json_decode(myPost($url, $cs)));
$count = 0;
foreach($list['data']['list'] as $v){
if(!isset($v['author'])||!is_array($v['author'])){
echo 'ok';
continue;
}
foreach($v['author'] as $val){
$check_user = $this->user_obj->where('email',$val['email'])->where('state',0)->find();
if(!$check_user){
$ui['account'] = $val['email'];
$ui['password'] = md5("123456qwe");
$ui['email'] = $val['email'];
$ui['realname'] = $val['author_name'];
$ui['ctime'] = time();
$uid = $this->user_obj->insertGetId($ui);
$uir['reviewer_id'] = $uid;
$uir['country'] = trim($val['author_country']);
$this->user_reviewer_info_obj->insert($uir);
$check_user = $this->user_obj->where('user_id',$uid)->find();
}
$iau['user_id'] = $check_user['user_id'];
$iau['w_article_id'] = $v['article_id'];
$iau['w_article_doi'] = $v['doi'];
$iau['journal_title'] = $v['journal_title'];
$this->user_author_obj->insert($iau);
}
$count++;
}
return jsonSuccess(['count'=>$count]);
}
/**
* 拒绝青年科学家申请
*/
public function refuseYboardApply(){
$data = $this->request->post();
$rules = new Validate([
'ap_yboard_id' => 'require'
]);
if (!$rules->check($data)) {
return jsonError($rules->getError());
}
$this->apply_yboard_obj->where('ap_yboard_id',$data['ap_yboard_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* 添加用户
*/
public function addUser()
{
$data = $this->request->post();
$rules = new Validate([
'account' => 'require|alphaNum|min:5',
'email' => 'require|email',
'password' => 'require',
]);
if (!$rules->check($data)) {
return jsonError($rules->getError());
}
$check = $this->user_obj
->where('state', 0)
->where('account = "' . trim($data['account']) . '" or email = "' . trim($data['email']) . '"')
->find();
if ($check) {
return jsonError('The user already exists');
}
$inser_data['account'] = $data['account'];
$inser_data['password'] = md5($data['password']);
$inser_data['email'] = $data['email'];
$inser_data['phone'] = isset($data['phone']) ? $data['phone'] : '';
$inser_data['realname'] = isset($data['realname']) ? $data['realname'] : '';
$inser_data['ctime'] = time();
$id = $this->user_obj->insertGetId($inser_data);
$insert_reviewer['reviewer_id'] = $id;
$this->user_reviewer_info_obj->insert($insert_reviewer);
return jsonSuccess([]);
}
/**
* 获取所有编辑
*/
public function getAllEditor()
{
$editors = $this->user_obj->where('type', 2)->where('state', 0)->select();
//获取编辑管理的期刊
foreach ($editors as $k => $v) {
$cache_journals = $this->journal_obj->where('editor_id', $v['user_id'])->where('state', 0)->select();
$editors[$k]['journals'] = $cache_journals;
}
$re['editors'] = $editors;
return jsonSuccess($re);
}
/**
* 修改编辑密码
*/
public function changeEditorPassword()
{
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'user_id' => 'require|number',
'password' => 'require'
]);
if (!$rule->check($data)) {
return json(['code' => 1, 'msg' => $rule->getError()]);
}
$this->user_obj->where('user_id', $data['user_id'])->update(['password' => md5($data['password'])]);
return jsonSuccess([]);
}
/**
* @title 消除黑名单
* @description 消除黑名单
* @author wangjinlei
* @url /api/User/clearBlack
* @method POST
*
* @param name:black_id type:int require:1 desc:黑名单id
*
*/
public function clearBlack()
{
$data = $this->request->post();
$this->user_black_obj->where("black_id", $data['black_id'])->update(['black_state' => 1]);
return jsonSuccess([]);
}
/**
* 退订用户的广告邮件
*/
public function unAdvertForUser($uid){
$this->user_obj->where('user_id',$uid)->update(['is_advert'=>1]);
echo 'Unsubscribe successfully!';
}
/**
* @title 申请期刊审稿人对于审稿人
* @description 申请期刊审稿人对于审稿人
* @author wangjinlei
* @url /api/User/applyReviewerForReviewer
* @method POST
*
* @param name:username type:string require:1 desc:用户名
* @param name:journal_id type:int require:1 desc:期刊id
*
*/
public function applyReviewerForReviewer()
{
die("service stop!!");
$data = $this->request->post();
$user_info = $this->user_obj->where('account', trim($data['username']))->find();
$journal_info = $this->journal_obj->where('journal_id', $data['journal_id'])->find();
$editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find();
$reviewer_info_info = $this->user_reviewer_info_obj->where('reviewer_id', $user_info['user_id'])->where('state', 0)->find();
$check = $this->reviewer_to_journal_obj->where("reviewer_id", $user_info['user_id'])->where('journal_id', $data['journal_id'])->where('state', 0)->find();
$check1 = $this->user_reviewer_obj->where('name', trim($data['username']))->where('journal_id', $data['journal_id'])->find();
if ($check || $check1) {
return jsonError("You are already in the reviewer list of this journal");
}
$insert_data['journal_id'] = $data['journal_id'];
$insert_data['name'] = trim($data['username']);
$insert_data['introduction'] = $reviewer_info_info['introduction'];
$insert_data['email'] = $user_info['email'];
$insert_data['company'] = $reviewer_info_info['company'];
$insert_data['country'] = $reviewer_info_info['country'];
$insert_data['major'] = $reviewer_info_info['major'];
$insert_data['technical'] = $reviewer_info_info['technical'];
$insert_data['field'] = $reviewer_info_info['field'];
$insert_data['gender'] = $reviewer_info_info['gender'];
$insert_data['qualifications'] = $reviewer_info_info['qualifications'];
$insert_data['ctime'] = time();
$res = $this->user_reviewer_obj->insertGetId($insert_data);
//发送email-》编辑
$sendEditor = [
'title' => $journal_info['title'], // 邮件标题
'content' => 'Dear editor,
Please check the new reviewer application.', //邮件内容
'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');
$tt = 'Dear editor,
';
$tt .= 'Please check the new reviewer application.';
sendEmail($editor_info['email'], $journal_info['title'], $journal_info['title'], $tt, $journal_info['email'], $journal_info['epassword']);
//发送消息信息--编辑
add_usermsg($journal_info['editor_id'], '新增审稿人申请,申请人(' . $data['username'] . ')', '/reviewerApplyDetail?id=' . $res);
return jsonSuccess([]);
}
/**
* 获取用户详细信息
*/
public function getUserDetail()
{
$data = $this->request->post();
$rule = new Validate([
'user_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$user_info = $this->user_obj->where("user_id", $data['user_id'])->where('state', 0)->find();
$user_info['roles'] = $this->getUserRoles($user_info['account']);
//获取用户的客座期刊的详细信息
$list = $this->user_to_special_obj->where('user_id', $user_info['user_id'])->where('uts_state', 0)->select();
$specials = [];
foreach ($list as $k => $v) {
$cache_info = $this->getSpecialDetailById($v['special_id']);
$cache_journal = $this->journal_obj->where('issn', $cache_info['journal_issn'])->find();
$cache_info['journal_id'] = $cache_journal['journal_id'];
$specials[] = $cache_info;
}
//如果是审稿人的,获取期审稿人的附加信息
$reviewer_info = $this->user_reviewer_info_obj->where('reviewer_id',$data['user_id'])->where('state',0)->find();
if($reviewer_info){
$user_info['company'] = $reviewer_info['company'];
}
$user_info['specials'] = $specials;
$re['user'] = $user_info;
return jsonSuccess($re);
}
/**
* 获取用户所有客座专刊
*/
public function getUserAllSpecials()
{
$data = $this->request->post();
$rule = new Validate([
'user_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->user_to_special_obj->where('user_id', $data['user_id'])->where('uts_state', 0)->select();
$specials = [];
foreach ($list as $k => $v) {
$cache_info = $this->getSpecialDetailById($v['special_id']);
$cache_journal = $this->journal_obj->where('issn', $cache_info['journal_issn'])->find();
$cache_info['journal_id'] = $cache_journal['journal_id'];
$specials[] = $cache_info;
}
$re['specials'] = $specials;
return jsonSuccess($re);
}
public function getSpecialDetailById($special_id)
{
$base_url = Env::get('journal.base_url');
$api_url = $base_url . "/master/special/getSpecialDetailById";
$res = object_to_array(json_decode(myPost($api_url, ['journal_special_id' => $special_id])));
$special_info = $res['data']['special'];
unset($special_info['journal_id']);
return $special_info;
}
/**
* 添加用户身份
*/
public function addUserRole()
{
$data = $this->request->post();
$rule = new Validate([
'user_id' => 'require',
'role_type' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
if ($data['role_type'] == 'special') {
if (!isset($data['special_id'])) {
return jsonError("When adding a passenger editing identity, the passenger ID is required");
}
$check = $this->user_to_special_obj->where("user_id", $data['user_id'])->where('special_id', $data['special_id'])->where('uts_state', 0)->find();
if ($check) {
return jsonError("Cannot be added repeatedly");
}
$insert_uts['user_id'] = $data['user_id'];
$insert_uts['special_id'] = $data['special_id'];
$insert_uts['uts_ctime'] = time();
$this->user_to_special_obj->insert($insert_uts);
return jsonSuccess([]);
}
}
/**
* 谷歌测试
*/
public function googleTest(){
Loader::import("google.google-search-results");
Loader::import("google.restclient");
// require 'path/to/google-search-results.php';
// require 'path/to/restclient.php';
// $query = [
// "engine" => "google_scholar",
// "q" => "biology",
// ];
// $query = [
// "engine" => "google_scholar_author",
// "author_id" => "YrGbzsEAAAAJ",
// ];
$query = [
"engine" => "google_scholar_profiles",
"mauthors" => "biol",
];
$search = new \GoogleSearch('7651ca6caf949b0ac6ce28a95f3d2e9d8ee51b024ba7fad86f0298fb84290765');
$result = $search->get_json($query);
// $organic_results = $result->organic_results;
$organic_results = $result;
dump($organic_results);
}
/**
* 获取google学术人物列表
*/
public function googleGetAuthor(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
if($user_info['g_author']!=''||$user_info['realname']==''){
return jsonError('Google account is tied/Please tied your realname first before proceeding to the next step');
}
Loader::import("google.google-search-results");
Loader::import("google.restclient");
$query = [
"engine" => "google_scholar_profiles",
"mauthors" => $user_info['realname'],
];
$search = new \GoogleSearch('7651ca6caf949b0ac6ce28a95f3d2e9d8ee51b024ba7fad86f0298fb84290765');
$result = $search->get_json($query);
$organic_results = object_to_array($result);
if(isset($organic_results['profiles'])){
$re['authors'] = $organic_results['profiles'];
return jsonSuccess($re);
}else{
return jsonError('no date');
}
}
/**
* 绑定谷歌用户id
*/
public function googleBindAuthor(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require',
'g_author'=>'require',
// 'website'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
// $this->user_obj->where('user_id',$data['user_id'])->update(['g_author'=>trim($data['g_author']),'g_website'=>trim($data['website'])]);
$this->user_obj->where('user_id',$data['user_id'])->update(['g_author'=>trim($data['g_author'])]);
//绑定完成后自动获取指数
Loader::import("google.google-search-results");
Loader::import("google.restclient");
$query = [
"engine" => "google_scholar_author",
"author_id" => $data['g_author']
];
$search = new \GoogleSearch('7651ca6caf949b0ac6ce28a95f3d2e9d8ee51b024ba7fad86f0298fb84290765');
$result = $search->get_json($query);
$organic_results = object_to_array($result);
$h_index= 0;
// if(isset($organic_results['cited_by']['table']['h_index'])){
$h_index = $organic_results['cited_by']['table'][1]['h_index']['all'];
// }else{
// $h_index = $organic_results['cited_by']['table']['indice_h']['all'];
// }
$updata['google_index'] = $h_index;
$updata['google_time'] = time();
$this->user_obj->where('user_id',$data['user_id'])->update($updata);
return jsonSuccess($organic_results);
}
/**
* 获取H指数
*/
public function googleGetIndex(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$user_info = $this->user_obj->where('user_id',$data['user_id'])->find();
if($user_info['google_time']>strtotime('-1 year')){
return jsonError('The time interval obtained is one year');
}
if($user_info['g_author']==''){
return jsonError('google_id is null , please bind google_id before the request.');
}
Loader::import("google.google-search-results");
Loader::import("google.restclient");
$query = [
"engine" => "google_scholar_author",
"author_id" => $user_info['g_author']
];
$search = new \GoogleSearch('7651ca6caf949b0ac6ce28a95f3d2e9d8ee51b024ba7fad86f0298fb84290765');
$result = $search->get_json($query);
$organic_results = object_to_array($result);
$h_index= 0;
// if(isset($organic_results['cited_by']['table']['h_index'])){
$h_index = $organic_results['cited_by']['table'][1]['h_index']['all'];
// }else{
// $h_index = $organic_results['cited_by']['table']['indice_h']['all'];
// }
$updata['google_index'] = $h_index;
$updata['google_time'] = time();
$this->user_obj->where('user_id',$data['user_id'])->update($updata);
return jsonSuccess($organic_results);
}
public function getUserScoreLog(){
}
/**
* @title 审稿系统登录功能
* @description 审稿系统登录功能
* @author wangjinlei
* @url /api/User/reviewer_login
* @method POST
*
* @param name:username type:string require:1 desc:用户名
* @param name:password type:string require:1 desc:密码
*
* @return userinfo:用户信息#
*/
// public function reviewer_login() {
// $data = $this->request->post();
// $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]);
// }
// }
/**
* @title 获取用户身份列表
* @description 获取用户身份列表
* @author wangjinlei
* @url /api/User/getUserRole
* @method POST
*
* @param name:account type:string require:1 desc:用户名
*
* @return roles:角色列表#
*
*/
public function getUserRole()
{
$data = $this->request->post();
$roles = $this->getUserRoles($data['account']);
$re['roles'] = $roles;
return jsonSuccess($re);
}
private function getUserRoles($account)
{
$user_info = $this->user_obj->where('account', $account)->find();
if ($user_info['type'] == 2) {
$ros[] = 'editor';
return $ros;
}
$roles[] = 'author';
$reviewer_res = $this->reviewer_to_journal_obj->where('reviewer_id', $user_info['user_id'])->where('state', 0)->find();
if ($reviewer_res != null) {
$roles[] = 'reviewer';
}
// $yboard_res = $this->reviewer_to_journal_obj->where('reviewer_id', $user_info['user_id'])->where('is_yboard', 1)->where('state', 0)->find();
// if ($yboard_res != null) {
// $roles[] = 'yboard';
// }
$yboard_res = $this->user_to_yboard_obj->where('user_id',$user_info['user_id'])->where('state',0)->find();
if($yboard_res != null){
$roles[] = "yboard";
}
$chief_res = $this->chief_to_journal_obj->where('user_id', $user_info['user_id'])->where('state', 0)->find();
if ($chief_res != null) {
$roles[] = 'chief';
}
$board_res = $this->board_to_journal_obj->where('user_id', $user_info['user_id'])->where('state', 0)->find();
if ($board_res != null) {
$roles[] = 'board';
}
$special_res = $this->user_to_special_obj->where('user_id', $user_info['user_id'])->where("uts_state", 0)->find();
if ($special_res != null) {
$roles[] = 'special';
}
return $roles;
}
/**
* @title 升级审稿人至青年编委
* @description 升级审稿人至青年编委
* @author wangjinlei
* @url /api/User/upReviewerToYboard
* @method POST
*
* @param name:journal_id type:int require:1 desc:期刊id
* @param name:user_id type:int require:1 desc:审稿人userid
*
* @return roles:角色列表#
*
*/
public function upReviewerToYboard()
{
$data = $this->request->post();
$this->reviewer_to_journal_obj->where('journal_id', $data['journal_id'])->where('reviewer_id', $data['user_id'])->where('state', 0)->update(['is_yboard' => 1]);
return jsonSuccess([]);
}
/**
* @title 降级青年编委至审稿人
* @description 降级青年编委至审稿人
* @author wangjinlei
* @url /api/User/downReviewerToYboard
* @method POST
*
* @param name:journal_id type:int require:1 desc:期刊id
* @param name:user_id type:int require:1 desc:审稿人userid
*
* @return roles:角色列表#
*
*/
public function downReviewerToYboard()
{
$data = $this->request->post();
$this->reviewer_to_journal_obj->where('journal_id', $data['journal_id'])->where('reviewer_id', $data['user_id'])->where('state', 0)->update(['is_yboard' => 0]);
return jsonSuccess([]);
}
/**
* 获取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]);
}
}
/**
* 查找用户信息byaccountemail
*/
public function searchUserByAccountEmail(){
$data = $this->request->post();
$rule = new Validate([
'account'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$user_info = $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',$data['account'])->find();
$re['user'] = $user_info;
return jsonSuccess($re);
}
/**
* 注册功能
*/
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');
}
$code = get_str();
Db::startTrans();
//存入数据
$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();
$id = $this->user_obj->insertGetId($inser_data);
//存入个人额外信息
$insert_reviewer['reviewer_id'] = $id;
$r_res = $this->user_reviewer_info_obj->insert($insert_reviewer);
//存储注册验证信息
$insert_check['user_id'] = $id;
$insert_check['code'] = $code;
$insert_check['ctime'] = time();
$i_res = $this->user_register_check_obj->insert($insert_check);
//发送注册成功邮件
$tt = "Hello,
";
$tt .= "To protect the email relationship unobstructed.
";
$tt .= "Please verify your email address to complete the account registration:
";
$tt .= "https://submission.tmrjournals.com/login?code=".$code."
";
$tt .= "Thank you.
TMR Publishing Group
https://www.tmrjournals.com";
if($id&&$i_res&&$r_res){
Db::commit();
sendEmail($email, 'Dear ' . $data['name'], 'TMR', $tt);
return jsonSuccess([]);
}else{
Db::rollback();
return jsonError("system error");
}
}
/**
* 审核注册验证码
*/
public function checkRegisterCode(){
$data = $this->request->post();
$rule = new Validate([
'code'=>'require'
]);
if(!$rule->check($data)){
return jsonSuccess($rule->getError());
}
$check_info = $this->user_register_check_obj->where('code',$data['code'])->where('state',0)->find();
if(!$check_info){
return jsonError('not find this code');
}
$this->user_obj->where('user_id',$check_info['user_id'])->update(['register_check'=>1]);
$this->user_register_check_obj->where('user_rc_id',$check_info['user_rc_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* 获取验证码图片(用户注册)
*/
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' => 'fail']);
}
}
public function getUserForJournal(){
$data = $this->request->post();
$num = $data['num'];
$limit_start = ($num - 1) * 1000;
$list = $this->user_obj->limit($limit_start,1000)->select();
$re['list'] = $list;
return jsonSuccess($re);
}
/**
* 修改用户备注
*/
public function editRemarkForUser(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require|number',
'remark'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$this->user_obj->where('user_id',$data['user_id'])->update(['remark'=>$data['remark']]);
return jsonSuccess([]);
}
/**
* 获取验证码图片(密码找回)
*/
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' => 'Wrong captcha']);
}
$res = $this->user_obj
->where('account|email', $data['username'])
->find();
if ($res == null) {
return json(['code' => 1, 'msg' => 'Incorrect user ID or password']);
} else {
return json(['code' => 0, 'email' => $res['email']]);
}
}
/**
* 找回密码第二部,发送邮件
*/
public function retrievePushEmail()
{
$email = $this->request->post('email');
$where['email'] = $email;
$user = $this->user_obj->where($where)->field('realname,user_id')->find();
$realname = $user['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, Env::get('email.send_email'), Env::get("email.send_email_password"));
// if ($isUserPushed) {//成功
return json(['code' => 0, 'msg' => 'success']);
// } else {//失败
// return json(['code' => 1, 'msg' => 'fail']);
// }
}
/**
* 验证修改密码页面的合法性
*/
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' => 'Query failed']);
} else {
return json(['code' => 0, 'msg' => 'Query was successful']);
}
}
/**
* 自定义验证验证码
*/
public function my_checkcaptcha($code, $id)
{
$nowcode = Cache::get(md5($id));
$mbcode = authcode($code);
return $nowcode == $mbcode ? true : false;
}
/**
* @title 获取审稿人列表
* @description 获取审稿人列表
* @author wangjinlei
* @url /api/User/getreviewerList
* @method POST
*
* @param name:username type:string require:1 desc:用户名
* @param name:journalId type:int require:1 desc:期刊id当全选时为0
* @param name:pageIndex type:int require:1 desc:开始页码
* @param name:pageSize type:int require:1 desc:每页是数据条数
*
*/
public function getreviewerList()
{
$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 = [];
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'];
}
$res = $this->reviewer_to_journal_obj
->field('t_reviewer_to_journal.is_yboard,t_user_reviewer_info.*,t_journal.*,t_user.*')
->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('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('t_reviewer_to_journal.state', 0)->count();
return json(['code' => 0, 'data' => $res, 'total' => $count]);
// $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)->where('state', 0)->column('reviewer_id');
// $where['t_user.user_id'] = ['in', $uids];
// } else {
// $uids = $this->reviewer_to_journal_obj->where('journal_id', $data['journalId'])->where('state', 0)->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 deleteArticleReviewer()
{
$data = $this->request->post();
$this->reviewer_to_journal_obj->where('reviewer_id', $data['reviewer_id'])->where('journal_id', $data['journal_id'])->update(['state' => 1]);
return jsonSuccess([]);
}
/**
*
*/
public function getReviewerForDel()
{
$data = $this->request->post();
$user_info = $this->user_obj->where('user_id', $data['reviewer_id'])->find();
$editor_info = $this->user_obj->where('account', $data['editor_account'])->find();
$journals = $this->journal_obj->where("editor_id", $editor_info['user_id'])->column('journal_id');
$rtjs = $this->reviewer_to_journal_obj->where('journal_id', 'in', $journals)->where('reviewer_id', $data['reviewer_id'])->where('state', 0)->select();
foreach ($rtjs as $k => $v) {
$rtjs[$k]['reviewer'] = $user_info;
$rtjs[$k]['journal'] = $this->journal_obj->where('journal_id', $v['journal_id'])->find();
}
return jsonSuccess($rtjs);
}
/**
* 获取审稿人申请列表
*/
public function getApplyReviewerList(){
$data = $this->request->post();
$rule = new Validate([
'journal_id'=>'require',
'editor_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$where['t_apply_reviewer.state'] = 0;
if($data['journal_id']==0){
$journalIds = $this->journal_obj->where('editor_id',$data['editor_id'])->column("journal_id");
$where['t_apply_reviewer.journal_id'] = ['in',$journalIds];
}else{
$where['t_apply_reviewer.journal_id'] = $data['journal_id'];
}
$list = $this->apply_reviewer_obj
->field("t_user.*,t_journal.title journal_title,t_apply_reviewer.ap_reviewer_id,t_apply_reviewer.ctime apply_time")
->join("t_user","t_user.user_id = t_apply_reviewer.user_id",'left')
->join("t_journal","t_journal.journal_id=t_apply_reviewer.journal_id","left")
->where($where)
->select();
$re['list'] = $list;
return jsonSuccess($re);
}
/**
* 同意审稿人身份申请
*/
public function agreeReviewerApply(){
$data = $this->request->post();
$rule = new Validate([
'ap_reviewer_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$ap_reviewer_info = $this->apply_reviewer_obj->where('ap_reviewer_id',$data['ap_reviewer_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$ap_reviewer_info['journal_id'])->find();
$user_info = $this->user_obj->where('user_id',$ap_reviewer_info['user_id'])->find();
$check = $this->reviewer_to_journal_obj->where('reviewer_id',$ap_reviewer_info['user_id'])->where('journal_id',$journal_info['journal_id'])->where('state',0)->find();
if($check){
return jsonSuccess([]);
}
$insert['reviewer_id'] = $ap_reviewer_info['user_id'];
$insert['journal_id'] = $journal_info['journal_id'];
$insert['account'] = $user_info['account'];
$insert['journal_title'] = $journal_info['title'];
$insert['ctime'] = time();
$this->reviewer_to_journal_obj->insert($insert);
$this->apply_reviewer_obj->where('ap_reviewer_id',$data['ap_reviewer_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* 拒绝审稿人申请
*/
public function refuseReviewerApply(){
$data = $this->request->post();
$rule = new Validate([
'ap_reviewer_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$this->apply_reviewer_obj->where('ap_reviewer_id',$data['ap_reviewer_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* 获取审核员申请列表
*/
public function getReviewerApplyList()
{
die("service stop!!");
$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()
{
die("service stop!!");
$reviewerId = $this->request->post('reviewerApplyId');
$where['t_user_reviewer_apply.reviewer_apply_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]);
}
}
/**
* @title 获取作者转审稿人列表
* @description 获取作者转审稿人列表
* @author wangjinlei
* @url /api/User/getAuthorToReviewerList
* @method POST
*
* @param name:username type:string require:1 desc:用户名
* @param name:journal_id type:int require:1 desc:期刊id0是全部
*
* @return reviewerTrans:列表#
*/
public function getAuthorToReviewerList()
{
$data = $this->request->post();
$user_info = $this->user_obj->where('account', $data['username'])->find();
$journals = $this->journal_obj->where("editor_id", $user_info['user_id'])->where('state', 0)->column("journal_id");
$where['t_reviewer_from_author.rfa_state'] = 0;
if ($data['journal_id'] == 0) {
$where['t_reviewer_from_author.journal_id'] = ["in", $journals];
} else {
$where['t_reviewer_from_author.journal_id'] = $data['journal_id'];
}
$list = $this->reviewer_from_author_obj
->field("t_reviewer_from_author.rfa_id,t_article_author.*,t_journal.title journal_title")
->join("t_article_author", "t_reviewer_from_author.art_aut_id = t_article_author.art_aut_id", "left")
->join("t_journal", "t_journal.journal_id = t_reviewer_from_author.journal_id", "left")
->where($where)
->select();
$re['reviewerTrans'] = $list;
return jsonSuccess($re);
}
/**
* @title 获取作者转审稿人详情
* @description 获取作者转审稿人详情
* @author wangjinlei
* @url /api/User/getAuthorToReviewerDetail
* @method POST
*
* @param name:rfa_id type:int require:1 desc:实例id
*
* @return reviewerTrans:列表#
*/
public function getAuthorToReviewerDetail()
{
$data = $this->request->post();
$detail = $this->reviewer_from_author_obj
->field("t_reviewer_from_author.rfa_id,t_article_author.*,t_journal.title journal_title")
->join("t_article_author", "t_reviewer_from_author.art_aut_id = t_article_author.art_aut_id", "left")
->join("t_journal", "t_journal.journal_id = t_reviewer_from_author.journal_id", "left")
->where("rfa_id", $data['rfa_id'])
->find();
$re['reviewerTran'] = $detail;
return jsonSuccess($re);
}
/**
* @title 作者转审稿人提交信息并通过
* @description 作者转审稿人提交信息并通过
* @author wangjinlei
* @url /api/User/ReviewerFromAuthorAdopt
* @method POST
*
* @param name:rfa_id type:int require:1 desc:实例id
* @param name:company type:String require:1 desc:单位
* @param name:country type:String require:1 desc:国家
* @param name:email type:String require:1 desc:邮箱
* @param name:field type:String require:1 desc:领域描述
* @param name:gender type:String require:1 desc:1男2女
* @param name:introduction type:String require:1 desc:简介
* @param name:major type:int require:1 desc:major_id
* @param name:qualifications type:String require:1 desc:cv地址
* @param name:author_title type:String require:1 desc:职称
*
*
*/
public function ReviewerFromAuthorAdopt()
{
$data = $this->request->post();
$rfa_info = $this->reviewer_from_author_obj->where('rfa_id', $data['rfa_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $rfa_info['journal_id'])->find();
$art_aut_info = $this->article_author_obj->where('art_aut_id', $rfa_info['art_aut_id'])->find();
$user_info = $this->user_obj->where('email', $art_aut_info['email'])->where('state', 0)->find();
if (!$user_info) {
return jsonError("user no find!");
}
$check = $this->reviewer_to_journal_obj->where("journal_id", $journal_info['journal_id'])->where('reviewer_id', $user_info['user_id'])->where('state', 0)->find();
if ($check) {
return jsonError("has reviewer");
}
$info_check = $this->user_reviewer_info_obj->where('reviewer_id', $user_info['user_id'])->find();
Db::startTrans();
$res = true;
if ($info_check==null) {
$insert_info['reviewer_id'] = $user_info['user_id'];
$insert_info['gender'] = $data['gender'];
$insert_info['technical'] = $data['author_title'];
$insert_info['country'] = $data['country'];
$insert_info['introduction'] = $data['introduction'];
$insert_info['company'] = $data['company'];
$insert_info['major'] = $data['major'];
$insert_info['field'] = $data['field'];
$insert_info['qualifications'] = $data['qualifications'];
$res = $this->user_reviewer_info_obj->insertGetId($insert_info);
}
$insert_to['reviewer_id'] = $user_info['user_id'];
$insert_to['journal_id'] = $rfa_info['journal_id'];
$insert_to['account'] = $user_info['account'];
$insert_to['journal_title'] = $journal_info['title'];
$insert_to['ctime'] = time();
$res1 = $this->reviewer_to_journal_obj->insertGetId($insert_to);
$res2 = $this->reviewer_from_author_obj->where('rfa_id', $data['rfa_id'])->update(['rfa_state' => 1]);
if ($res && $res1 && $res2) {
Db::commit();
return jsonSuccess([]);
} else {
Db::rollback();
return jsonError("system error!");
}
}
/**
* @title 作者转审稿人拒绝
* @description 作者转审稿人拒绝
* @author wangjinlei
* @url /api/User/ReviewerFromAuthorReject
* @method POST
*
* @param name:rfa_id type:int require:1 desc:实例id
*
*
*/
public function ReviewerFromAuthorReject()
{
$data = $this->request->post();
$this->reviewer_from_author_obj->where('rfa_id', $data['rfa_id'])->update(['rfa_state' => 2]);
return jsonSuccess([]);
}
/**
* 通过审稿人
*/
public function reviewerAdopt()
{
die("service stop!!");
$reviewerId = $this->request->post('reviewerApplyId');
$where['reviewer_apply_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'])->whereOr("email", $apply_info['email'])->find();
//检测是否已经存在此审稿人
if ($has_res) {
$check = $this->reviewer_to_journal_obj->where('reviewer_id', $has_res['user_id'])->where('journal_id', $journal_info['journal_id'])->where('state', 0)->find();
if ($check) {
$this->user_reviewer_obj->where($where)->update(['state' => 1]);
return jsonError("has reviewer!");
}
}
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);
}else{
$update_info['gender'] = $apply_info['gender'];
$update_info['technical'] = $apply_info['technical'];
$update_info['country'] = $apply_info['country'];
$update_info['introduction'] = $apply_info['introduction'];
$update_info['company'] = $apply_info['company'];
$update_info['major'] = $apply_info['major'];
$update_info['field'] = $apply_info['field'];
// $update_info['qualifications'] = $apply_info['qualifications'];
$this->user_reviewer_info_obj->where('reviewer_id',$has_res['user_id'])->update($update_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
'; $sendUser = [ 'title' => $journal_info['title'], // 邮件标题 'content' => $content, //邮件内容 'user_id' => $has_res['user_id'], //收件人ID 'email' => $apply_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',$sendUser,'domail'); 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]); } } /** * @title 审查用户是否是审稿人 * @description 审查用户是否是审稿人 * @author wangjinlei * @url /api/User/checkUserIsReviewer * @method POST * * @param name:username type:String require:1 desc:account * * @return is:0否1是 * */ public function checkUserIsReviewer() { $data = $this->request->post(); $user_info = $this->user_obj->where('account', $data['username'])->find(); $check = $this->reviewer_to_journal_obj->where('reviewer_id', $user_info['user_id'])->where('state', 0)->find(); $re['is'] = $check == null ? 0 : 1; return jsonSuccess($re); } /** * @title 审查用户是否存在通过用户名或邮箱 * @description 审查用户是否存在通过用户名或邮箱 * @author wangjinlei * @url /api/User/checkUserByAccountOrEmail * @method POST * * @param name:username type:String require:1 desc:account/email * * @return has:0无1有 * */ public function checkUserByAccountOrEmail() { $data = $this->request->post(); $check_info = $this->user_obj->where("account|email", $data['username'])->where("state", 0)->find(); $re['has'] = $check_info == null ? 0 : 1; return jsonSuccess($re); } /** * 审查用户通过邮箱 */ public function checkUserByEmail() { $data = $this->request->post(); $check_info = $this->user_obj->where("email", $data['email'])->where("state", 0)->find(); $re['has'] = $check_info == null ? 0 : 1; return jsonSuccess($re); } /** * 审查用户通过账号 */ public function checkUserByAccount() { $data = $this->request->post(); $check_info = $this->user_obj->where("account", $data['account'])->where("state", 0)->find(); $re['has'] = $check_info == null ? 0 : 1; return jsonSuccess($re); } /** * 拒绝审核人 */ public function reviewerRejec() { die("service stop!!"); $reviewerId = $this->request->post('reviewerApplyId'); $where['reviewer_apply_id'] = $reviewerId; $this->user_reviewer_obj->where($where)->update(['state' => 2]); //拒绝审稿人email-》审稿人 return json(['code' => 0]); } /** * @title 获取专业列表(未来会废弃) * @description 获取专业列表(未来会废弃) * @author wangjinlei * @url /api/User/getMajorList * @method POST * * * @return data:领域列表# */ 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); } //确定用户是否属于黑名单 $black_check = $this->user_black_obj->where('user_id', $user['user_id'])->where('black_state', 0)->find(); if ($black_check) { return jsonError("Your account has been blocked. Please contact the publisher for details: publisher@tmrjournals.com."); } $roles = $this->getUserRoles($user['account']); $re['roles'] = $roles; $re['userinfo'] = $user; $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); } /** * 添加用户证书 */ public function addUserCert(){ die("service stop"); $data = $this->request->post(); $rule = new Validate([ 'user_id'=>'require', 'journal_id'=>'require', 'year'=>'require' ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } $user_info = $this->user_obj->where('user_id',$data['user_id'])->find(); $journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find(); // $check = $this->user_cert_obj->where('user_id',$data['user_id'])->where('type',$data['type'])->where('journal_id',$data['journal_id'])->where('year',$data['year'])->where('state',0)->find(); // if($check){ // return jsonError("Certificate cannot be issued repeatedly"); // } $start_time = time(); // $this->createCert($user_info,$journal_info,$data['year'],$data['type']); self::createYboardCert($user_info,$journal_info,$start_time,$data['year']); $insert['user_id']=$data['user_id']; $insert['journal_id'] = $data['journal_id']; // $insert['type'] = $data['type']; $insert['start_date'] = $start_time; $insert['end_date'] = strtotime("+ ".$data['year'].' year',$start_time);//date("+ ".$data['year']." year",$start_time); $insert['url'] = "/cert/".$data['user_id'].'_yboard_'.$data['year'] . '.png'; $insert['ctime'] = $start_time; // $this->user_cert_obj->insert($insert); return jsonSuccess($insert); } // private function createCert($user_info,$journal_info,$year,$type){ // //type:1编委,2青年科学家 // $template = ROOT_PATH . 'public' . DS . 'cert' . DS . 'cert_template.png'; // $ziti = ROOT_PATH . 'public' . DS . 'zhengshu' . DS . 'siyuan.ttf'; // $image = \think\Image::open($template); // $image->text($user_info['realname'], $ziti, 50, '#000000', [1060, 760]) // ->text($year, $ziti, 50, '#C49A6C', [1850, 505]) // ->text($year, $ziti, 36, '#C49A6C', [1665, 1052]) // ->text($journal_info['title'], $ziti, 36, '#C49A6C', [920, 980]) // ->save(ROOT_PATH . 'public' . DS . 'cert' . DS . $user_info['user_id'].'_'.$type.'_'.$year . '.png'); // return $user_info['user_id'].'_'.$type.'_'.$year . '.png'; // } /** * 注册绑定orcid至我们的账户 */ public function orcidRegister() { $data = $this->request->post(); $cache = Cache::get($data['orcid']); $res = $this->object2array(json_decode($cache)); $check1 = $this->user_obj->where("account", trim($data['username']))->where("state", 0)->find(); $check2 = $this->user_obj->where("email", trim($data['email']))->where("state", 0)->find(); if ($check1 || $check2) { return jsonError("User has registed"); } $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;
}
}