2024-08-31 01:03:37 +08:00

224 lines
7.0 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
class userRegist extends Controller {
public function __construct() {
parent::__construct();
}
public function checkAllow(){
if (!isset($this->regOpen)) {
$regist = Model("SystemOption")->get("regist");
$this->regOpen = $regist['openRegist'] == '1';
}
if (!$this->regOpen) {
show_json("未开启注册,请联系管理员!",false);
}
}
/**
* 发送验证码——注册、找回密码
*/
public function sendMsgCode() {
$data = Input::getArray(array(
'type' => array('check' => 'in', 'param' => array('email', 'phone')),
'input' => array('check' => 'require'),
'source' => array('check' => 'require'),
'checkCode' => array('check' => 'require'),
));
$type = $data['type'];
$input = $data['input'];
$source = $data['source'];
// 个人设置、注册、找回密码
if(!in_array($source, array('setting', 'regist', 'findpwd'))){
show_json(LNG('common.invalidRequest'), false);
}
if (!Input::check($input, $type)) {
$text = $type . ($type == 'phone' ? 'Number' : '');
show_json(LNG('common.invalid') . LNG('common.' . $text), false);
}
// 图形验证码
Action('user.setting')->checkImgCode($data['checkCode']);
// 1.1前端注册检测
if ($source == 'regist') {
$this->checkAllow();
$this->userRegistCheck($data);
}
// 1.2找回密码(前端找回、后端重置)检测
if ($source == 'findpwd') {
$this->userFindPwdCheck($data);
}
// 2.发送邮件/短信
Action('user.setting')->checkMsgFreq($data); // 消息发送频率检查
if ($type == 'email') {
$res = Action('user.bind')->sendEmail($input, $type.'_'.$source);
} else {
$res = Action('user.bind')->sendSms($input, $type.'_'.$source);
}
if (!$res['code']) {
show_json(LNG('user.sendFail') . ': ' . $res['data'], false);
}
Action('user.setting')->checkMsgFreq($data, true);
// 3.存储验证码
$param = array(
'type' => $source,
'input' => $input
);
Action('user.setting')->checkMsgCode($type, $res['data'], $param, true);
show_json(LNG('user.sendSuccess'), true);
}
/**
* 判断号码、邮箱是否已注册
* @param type $data
*/
private function userRegistCheck($data) {
$where = array($data['type'] => $data['input']);
if (Model('User')->userSearch($where)) {
show_json(LNG('common.' . $data['type']) . LNG('user.registed'), false);
}
}
/**
* 判断账号(及图片验证码-前端)是否有效-找回密码
* @param type $data
* @return type
*/
private function userFindPwdCheck($data) {
$userID = Input::get('userID', 'require', '0');
$text = $data['type'] . ($data['type'] == 'phone' ? 'Number' : '');
// 前端找回密码
if ($userID == '0') {
$where = array($data['type'] => $data['input']);
if (!Model('User')->userSearch($where)) {
show_json(LNG('common.' . $text) . LNG('common.error'), false);
// show_json(LNG('common.' . $data['type']) . LNG('user.notRegist'), false);
}
return;
}
// 后端重置密码
$userInfo = Model('User')->getInfoSimple($userID);
if (empty($userInfo)) {
show_json(LNG('common.illegalRequest'), false);
}
if(!$userInfo[$data['type']]) {
show_json(LNG('common.' . $text) . LNG('common.error'), false);
// show_json(LNG('common.' . $text) . LNG('user.notBind'), false);
}
// 提交的邮箱、手机和用户信息中的不匹配
if ($userInfo[$data['type']] != $data['input']) {
show_json(sprintf(LNG('user.inputNotMatch'), LNG('common.' . $text)), false);
}
}
/**
* 注册
*/
public function regist() {
$this->checkAllow();
$data = Input::getArray(array(
'type' => array('check' => 'in', 'param' => array('email', 'phone')),
'input' => array('check' => 'require'),
'name' => array('default' => null),
'nickName' => array('default' => null),
'password' => array('check' => 'require'),
'msgCode' => array('check' => 'require'), // 消息验证码
));
foreach ($data as $k => $val) {
$data[$k] = rawurldecode($val);
}
if(empty($data['name'])) $data['name'] = $data['input']; // 兼容app注册
// 邮箱/手机号校验
if (!Input::check($data['input'], $data['type'])) {
$text = $data['type'] . ($data['type'] == 'phone' ? 'Number' : '');
show_json(LNG('common.invalid') . LNG('common.' . $text), false);
}
// 消息验证码校验
if(!$msgCode = Input::get('msgCode')){
show_json(LNG('user.inputVerifyCode'), false);
}
$param = array(
'type' => 'regist',
'input' => $data['input']
);
Action('user.setting')->checkMsgCode($data['type'], $msgCode, $param);
// 密码校验
$salt = Input::get('salt',null, 0);
$password = $salt == 1 ? Action('user.setting')->decodePwd($data['password']) : $data['password'];
$data['password'] = rawurldecode($password);
if( !ActionCall('filter.userCheck.password',$data['password']) ){
return ActionCall('filter.userCheck.passwordTips');
}
$this->addUser($data);
}
/**
* 新增/注册用户
* @param type $data
* @return type
*/
public function addUser($data) {
$this->checkAllow();
$name = $data['name'];
$nickName = trim($data['nickName']);
$nickName = $nickName ? $nickName : '';
$bindRegist = true; // 绑定注册
if (isset($data['type']) && isset($data['input'])) {
$bindRegist = false;
if (Model('User')->userSearch(array($data['type'] => $data['input'])) ) {
$text = $data['type'] . ($data['type'] == 'phone' ? 'Number' : '');
return show_json(LNG('common.' . $text) . LNG('common.error'), false);
// return show_json(LNG('common.' . $data['type']) . LNG('user.registed'), false);
}
}
// 3.1用户基础信息保存
$regist = Model("SystemOption")->get("regist");
$this->in = array(
'name' => $name,
'nickName' => $nickName,
'password' => $data['password'],
'roleID' => $regist['roleID'],
'email' => isset($data['email']) ? $data['email'] : '',
'phone' => isset($data['phone']) ? $data['phone'] : '',
'avatar' => isset($data['avatar']) ? $data['avatar'] : '',
'sex' => isset($data['sex']) ? $data['sex'] : 1,
'sizeMax' => floatval($regist['sizeMax']), //M
'status' => $regist['checkRegist'] == 1 ? 0 : 1, //0禁用1启用 等待审核可以改为-1
'groupInfo' => $regist['groupInfo']
);
!$bindRegist && $this->in[$data['type']] = $data['input'];
$res = ActionCallHook('admin.member.add');
// 绑定注册,直接返回新增结果
if ($bindRegist) return $res; // show_json(true, true, userID)
if(!$res['code']) {
$msg = $res['data'] ? $res['data'] : LNG('explorer.error');
show_json($msg, false);
}
$code = true;
$msg = LNG('user.registSuccess');
if(!$this->in['status']){
$code = ERROR_CODE_USER_INVALID;
$msg .= LNG('user.waitCheck');
}
show_json($msg, $code);
}
}