| | <?php |
| | namespace app\common\model; |
| |
|
| | use think\Db; |
| | use think\View; |
| | use app\common\validate\User as UserValidate; |
| |
|
| | class User extends Base |
| | { |
| | |
| | protected $name = 'user'; |
| |
|
| | |
| | protected $createTime = ''; |
| | protected $updateTime = ''; |
| |
|
| | |
| | protected $auto = []; |
| | protected $insert = []; |
| | protected $update = []; |
| |
|
| | public $_guest_group = 1; |
| | public $_def_group = 2; |
| |
|
| | public function countData($where) |
| | { |
| | $total = $this->where($where)->count(); |
| | return $total; |
| | } |
| |
|
| | public function listData($where, $order, $page = 1, $limit = 20, $start = 0) |
| | { |
| | $page = $page > 0 ? (int)$page : 1; |
| | $limit = $limit ? (int)$limit : 20; |
| | $start = $start ? (int)$start : 0; |
| | $total = $this->where($where)->count(); |
| | $list = Db::name('User')->where($where)->order($order)->page($page)->limit($limit)->select(); |
| | return ['code' => 1, 'msg' => lang('data_list'), 'page' => $page, 'pagecount' => ceil($total / $limit), 'limit' => $limit, 'total' => $total, 'list' => $list]; |
| | } |
| |
|
| | public function infoData($where, $field='*') |
| | { |
| | if (empty($where) || !is_array($where)) { |
| | return ['code' => 1001, 'msg'=>lang('param_err')]; |
| | } |
| | $info = $this->field($field)->where($where)->find(); |
| | if (empty($info)) { |
| | return ['code' => 1002, 'msg' => lang('obtain_err')]; |
| | } |
| | $info = $info->toArray(); |
| |
|
| | |
| | $group_list = model('Group')->getCache('group_list'); |
| | $info['group'] = $group_list[$info['group_id']]; |
| |
|
| |
|
| | $info['user_pwd'] = ''; |
| | return ['code' => 1, 'msg' =>lang('obtain_ok'), 'info' => $info]; |
| | } |
| |
|
| | public function saveData($data) |
| | { |
| | $validate = \think\Loader::validate('User'); |
| |
|
| | if (isset($data['user_start_time']) && !is_numeric($data['user_start_time'])) { |
| | $data['user_start_time'] = strtotime($data['user_start_time']); |
| | } |
| | if (isset($data['user_end_time']) && !is_numeric($data['user_end_time'])) { |
| | $data['user_end_time'] = strtotime($data['user_end_time']); |
| | } |
| |
|
| | if (!empty($data['user_id'])) { |
| | if (!$validate->scene('edit')->check($data)) { |
| | return ['code' => 1001, 'msg' => lang('param_err').':' . $validate->getError()]; |
| | } |
| |
|
| | if (empty($data['user_pwd'])) { |
| | unset($data['user_pwd']); |
| | } else { |
| | $data['user_pwd'] = md5($data['user_pwd']); |
| | } |
| | $where = []; |
| | $where['user_id'] = ['eq', $data['user_id']]; |
| | $res = $this->where($where)->update($data); |
| | } else { |
| | if (!$validate->scene('edit')->check($data)) { |
| | return ['code' => 1002, 'msg' => lang('param_err').':' . $validate->getError()]; |
| | } |
| |
|
| | $data['user_pwd'] = md5($data['user_pwd']); |
| | $res = $this->insert($data); |
| | } |
| | if (false === $res) { |
| | return ['code' => 1003, 'msg' => '' . $this->getError()]; |
| | } |
| | return ['code' => 1, 'msg' =>lang('save_ok')]; |
| | } |
| |
|
| | public function delData($where) |
| | { |
| | $res = $this->where($where)->delete(); |
| | if ($res === false) { |
| | return ['code' => 1001, 'msg' => lang('del_err').':' . $this->getError()]; |
| | } |
| | return ['code' => 1, 'msg'=>lang('del_ok')]; |
| | } |
| |
|
| | public function fieldData($where, $col, $val) |
| | { |
| | if (!isset($col) || !isset($val)) { |
| | return ['code' => 1001, 'msg'=>lang('param_err')]; |
| | } |
| | $data = []; |
| | $data[$col] = $val; |
| | $res = $this->where($where)->update($data); |
| | if ($res === false) { |
| | return ['code' => 1002, 'msg' => lang('set_err').':' . $this->getError()]; |
| | } |
| | return ['code' => 1, 'msg' =>lang('set_ok')]; |
| | } |
| |
|
| | public function register($param) |
| | { |
| | $config = config('maccms'); |
| |
|
| | $data = []; |
| | $password_raw = trim($param['user_pwd']); |
| | $data['user_name'] = htmlspecialchars(urldecode(trim($param['user_name']))); |
| | $data['user_pwd'] = htmlspecialchars(urldecode(trim($param['user_pwd']))); |
| | $data['user_pwd2'] = htmlspecialchars(urldecode(trim($param['user_pwd2']))); |
| | $data['verify'] = $param['verify']; |
| | $uid = $param['uid']; |
| | $is_from_3rdparty = !empty($param['user_openid_qq']) || !empty($param['user_openid_weixin']); |
| |
|
| |
|
| | if ($config['user']['status'] == 0 || $config['user']['reg_open'] == 0) { |
| | return ['code' => 1001, 'msg' => lang('model/user/not_open_reg')]; |
| | } |
| | if (empty($data['user_name']) || empty($data['user_pwd']) || empty($data['user_pwd2'])) { |
| | return ['code' => 1002, 'msg' => lang('model/user/input_require')]; |
| | } |
| | if (!$is_from_3rdparty && !captcha_check($data['verify']) && $config['user']['reg_verify'] == 1) { |
| | return ['code' => 1003, 'msg' => lang('verify_err')]; |
| | } |
| | if ($data['user_pwd'] != $data['user_pwd2']) { |
| | return ['code' => 1004, 'msg' => lang('model/user/pass_not_pass2')]; |
| | } |
| | $row = $this->where('user_name', $data['user_name'])->find(); |
| | if (!empty($row)) { |
| | return ['code' => 1005, 'msg' => lang('model/user/haved_reg')]; |
| | } |
| | if (!preg_match("/^[a-zA-Z\d]*$/i", $data['user_name'])) { |
| | return ['code' => 1006, 'msg' => lang('model/user/name_contain')]; |
| | } |
| |
|
| | $validate = \think\Loader::validate('User'); |
| | if (!$validate->scene('add')->check($data)) { |
| | return ['code' => 1007, 'msg' => lang('param_err').':' . $validate->getError()]; |
| | } |
| |
|
| | $filter = $GLOBALS['config']['user']['filter_words']; |
| | if(!empty($filter)) { |
| | $filter_arr = explode(',', $filter); |
| | $f_name = str_replace($filter_arr, '', $data['user_name']); |
| | if ($f_name != $data['user_name']) { |
| | return ['code' => 1008, 'msg' =>lang('model/user/name_filter',[$filter])]; |
| | } |
| | } |
| |
|
| | $ip = mac_get_ip_long(); |
| | if( $GLOBALS['config']['user']['reg_num'] > 0){ |
| | $where2=[]; |
| | $where2['user_reg_ip'] = ['eq', $ip]; |
| | $where2['user_reg_time'] = ['gt', strtotime('today')]; |
| | $cc = $this->where($where2)->count(); |
| | if($cc >= $GLOBALS['config']['user']['reg_num']){ |
| | return ['code' => 1009, 'msg' => lang('model/user/ip_limit',[$GLOBALS['config']['user']['reg_num']])]; |
| | } |
| | } |
| |
|
| | $fields = []; |
| | $fields['user_name'] = $data['user_name']; |
| | $fields['user_pwd'] = md5($password_raw); |
| | $fields['group_id'] = $this->_def_group; |
| | $fields['user_points'] = intval($config['user']['reg_points']); |
| | $fields['user_status'] = intval($config['user']['reg_status']); |
| | $fields['user_reg_time'] = time(); |
| | $fields['user_reg_ip'] = $ip; |
| | $fields['user_openid_qq'] = (string)$param['user_openid_qq']; |
| | $fields['user_openid_weixin'] = (string)$param['user_openid_weixin']; |
| |
|
| | if (!$is_from_3rdparty) { |
| | |
| | if($config['user']['reg_phone_sms'] == '1'){ |
| | $param['type'] = 3; |
| | $res = $this->check_msg($param); |
| | if($res['code'] >1){ |
| | return $res; |
| | } |
| | $fields['user_phone'] = $param['to']; |
| |
|
| | $update=[]; |
| | $update['user_phone'] = ''; |
| | $where2=[]; |
| | $where2['user_phone'] = $param['to']; |
| |
|
| | $row = $this->where($where2)->find(); |
| | if (!empty($row)) { |
| | return ['code' => 1011, 'msg' =>lang('model/user/phone_haved')]; |
| | } |
| | |
| | } |
| | elseif($config['user']['reg_email_sms'] == '1'){ |
| | $param['type'] = 3; |
| | $res = $this->check_msg($param); |
| | if($res['code'] >1){ |
| | return $res; |
| | } |
| | $fields['user_email'] = $param['to']; |
| |
|
| | $update=[]; |
| | $update['user_email'] = ''; |
| | $where2=[]; |
| | $where2['user_email'] = $param['to']; |
| |
|
| | $row = $this->where($where2)->find(); |
| | if (!empty($row)) { |
| | return ['code' => 1012, 'msg' => lang('model/user/email_haved')]; |
| | } |
| | |
| | } |
| | } |
| |
|
| | $res = $this->insert($fields); |
| | if ($res === false) { |
| | return ['code' => 1010, 'msg' => lang('model/user/reg_err')]; |
| | } |
| | $nid = $this->getLastInsID(); |
| | $uid = intval($uid); |
| | if($uid > 0) { |
| | $where2 = []; |
| | $where2['user_id'] = $uid; |
| | $invite = $this->where($where2)->find(); |
| | if ($invite) { |
| | $where=[]; |
| | $where['user_id'] = $nid; |
| | $update=[]; |
| | $update['user_pid'] = $invite['user_id']; |
| | $update['user_pid_2'] = $invite['user_pid']; |
| | $update['user_pid_3'] = $invite['user_pid_2']; |
| | $r1 = $this->where($where)->update($update); |
| | $r2 = false; |
| | $config['user']['invite_reg_num'] = intval($config['user']['invite_reg_num']); |
| |
|
| | if($config['user']['invite_reg_points']>0){ |
| | $r2 = $this->where($where2)->setInc('user_points', $config['user']['invite_reg_points']); |
| | } |
| |
|
| | if($r2!==false) { |
| | |
| | $data = []; |
| | $data['user_id'] = $uid; |
| | $data['plog_type'] = 2; |
| | $data['plog_points'] = $config['user']['invite_reg_points']; |
| | model('Plog')->saveData($data); |
| | } |
| | } |
| | } |
| | return ['code' => 1, 'msg' => lang('model/user/reg_ok')]; |
| | } |
| |
|
| | public function regcheck($t, $str) |
| | { |
| | $where = []; |
| | if ($t == 'user_name') { |
| | $where['user_name'] = $str; |
| | $row = $this->where($where)->find(); |
| | if (!empty($row)) { |
| | return ['code' => 1001, 'msg' => lang('registered')]; |
| | } |
| | } elseif ($t == 'user_email') { |
| | $where['user_email'] = $str; |
| | $row = $this->where($where)->find(); |
| | if (!empty($row)) { |
| | return ['code' => 1001, 'msg' => lang('registered')]; |
| | } |
| | } elseif ($t == 'verify') { |
| | if (!captcha_check($str)) { |
| | return ['code' => 1002, 'msg' => lang('verify_err')]; |
| | } |
| | } |
| | return ['code' => 1, 'msg' => 'ok']; |
| | } |
| |
|
| | public function info($param) |
| | { |
| | if (empty($param['user_pwd'])) { |
| | return ['code' => 1001, 'msg' => lang('model/user/input_old_pass')]; |
| | } |
| | $password_raw = trim($param['user_pwd']); |
| | $password_formatted = htmlspecialchars(urldecode(trim($param['user_pwd']))); |
| | if (!in_array($GLOBALS['user']['user_pwd'], [md5($password_raw), md5($password_formatted)])) { |
| | return ['code' => 1002, 'msg' => lang('model/user/old_pass_err')]; |
| | } |
| | if ($param['user_pwd1'] != $param['user_pwd2']) { |
| | return ['code' => 1003, 'msg' => lang('model/user/pass_not_same_pass2')]; |
| | } |
| |
|
| | $data = []; |
| | $data['user_id'] = $GLOBALS['user']['user_id']; |
| | $data['user_name'] = $GLOBALS['user']['user_name']; |
| | if(!empty($param['user_nick_name'])){ |
| | $data['user_nick_name'] = htmlspecialchars(urldecode(trim($param['user_nick_name']))); |
| | } |
| | $data['user_qq'] = htmlspecialchars(urldecode(trim($param['user_qq']))); |
| | $data['user_question'] = htmlspecialchars(urldecode(trim($param['user_question']))); |
| | $data['user_answer'] = htmlspecialchars(urldecode(trim($param['user_answer']))); |
| | if (!empty($param['user_pwd2'])) { |
| | $data['user_pwd'] = trim($param['user_pwd2']); |
| | } |
| | return $this->saveData($data); |
| | } |
| |
|
| | public function login($param) |
| | { |
| | $data = []; |
| | $password_raw = trim($param['user_pwd']); |
| | $data['user_name'] = htmlspecialchars(urldecode(trim($param['user_name']))); |
| | $data['user_pwd'] = htmlspecialchars(urldecode(trim($param['user_pwd']))); |
| | $data['verify'] = $param['verify']; |
| | $data['openid'] = htmlspecialchars(urldecode(trim($param['openid']))); |
| | $data['col'] = htmlspecialchars(urldecode(trim($param['col']))); |
| |
|
| | if (empty($data['openid'])) { |
| | if (empty($data['user_name']) || empty($data['user_pwd'])) { |
| | return ['code' => 1001, 'msg' => lang('model/user/input_require')]; |
| | } |
| | if ($GLOBALS['config']['user']['login_verify'] ==1 && !captcha_check($data['verify'])) { |
| | return ['code' => 1002, 'msg' => lang('verify_err')]; |
| | } |
| | $where = []; |
| | $pattern = '/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/'; |
| | if (!preg_match($pattern, $data['user_name'])) { |
| | $where['user_name'] = ['eq', $data['user_name']]; |
| | } else { |
| | $where['user_email'] = ['eq', $data['user_name']]; |
| | } |
| | |
| | $where['user_pwd'] = [['eq', md5($password_raw)], ['eq', $data['user_pwd']], 'or']; |
| | } else { |
| | if (empty($data['openid']) || empty($data['col'])) { |
| | return ['code' => 1001, 'msg' => lang('model/user/input_require')]; |
| | } |
| | if (!in_array($data['col'], ['user_openid_qq', 'user_openid_weixin'])) { |
| | return ['code' => 1002, 'msg' => lang('param_err') . ': col']; |
| | } |
| | $where[$data['col']] = $data['openid']; |
| | } |
| | $where['user_status'] = ['eq', 1]; |
| | $row = $this->where($where)->find(); |
| |
|
| | if(empty($row)) { |
| | return ['code' => 1003, 'msg' => lang('model/user/not_found')]; |
| | } |
| |
|
| | if($row['group_id'] > 2 && $row['user_end_time'] < time()) { |
| | $row['group_id'] = 2; |
| | $update['group_id'] = 2; |
| | } |
| |
|
| | $random = md5(rand(10000000, 99999999)); |
| | $update['user_random'] = $random; |
| | $update['user_login_ip'] = mac_get_ip_long(); |
| | $update['user_login_time'] = time(); |
| | $update['user_login_num'] = $row['user_login_num'] + 1; |
| | $update['user_last_login_time'] = $row['user_login_time']; |
| | $update['user_last_login_ip'] = $row['user_login_ip']; |
| |
|
| | $res = $this->where($where)->update($update); |
| | if ($res === false) { |
| | return ['code' => 1004, 'msg' => lang('model/user/update_login_err')]; |
| | } |
| |
|
| | |
| | $group_list = model('Group')->getCache('group_list'); |
| | $group = $group_list[$row['group_id']]; |
| |
|
| | cookie('user_id', $row['user_id'],['expire'=>2592000] ); |
| | cookie('user_name', $row['user_name'],['expire'=>2592000] ); |
| | cookie('group_id', $group['group_id'],['expire'=>2592000] ); |
| | cookie('group_name', $group['group_name'],['expire'=>2592000] ); |
| | cookie('user_check', md5($random . '-' .$row['user_name'] . '-' . $row['user_id'] .'-' ),['expire'=>2592000] ); |
| | cookie('user_portrait', mac_get_user_portrait($row['user_id']),['expire'=>2592000] ); |
| |
|
| | return ['code' => 1, 'msg' => lang('model/user/login_ok')]; |
| | } |
| |
|
| | public function expire() |
| | { |
| | $where=[]; |
| | $where['group_id'] = ['gt',2]; |
| | $where['user_end_time'] = ['elt',time()]; |
| |
|
| | $update=[]; |
| | $update['group_id'] = 2; |
| |
|
| | $res = $this->where($where)->update($update); |
| | if ($res === false) { |
| | return ['code' => 101, 'msg' => lang('model/user/update_expire_err')]; |
| | } |
| | return ['code' => 1, 'msg' => lang('model/user/update_expire_ok')]; |
| | } |
| |
|
| | public function logout() |
| | { |
| | cookie('user_id', null); |
| | cookie('user_name', null); |
| | cookie('group_id', null); |
| | cookie('group_name', null); |
| | cookie('user_check', null); |
| | cookie('user_portrait', null); |
| | return ['code' => 1, 'msg' =>lang('model/user/logout_ok')]; |
| | } |
| |
|
| | public function checkLogin() |
| | { |
| | $user_id = cookie('user_id'); |
| | $user_name = cookie('user_name'); |
| | $user_check = cookie('user_check'); |
| |
|
| | $user_id = htmlspecialchars(urldecode(trim($user_id))); |
| | $user_name = htmlspecialchars(urldecode(trim($user_name))); |
| | $user_check = htmlspecialchars(urldecode(trim($user_check))); |
| |
|
| | if (empty($user_id) || empty($user_name) || empty($user_check)) { |
| | return ['code' => 1001, 'msg' => lang('model/user/not_login')]; |
| | } |
| |
|
| | $where = []; |
| | $where['user_id'] = $user_id; |
| | $where['user_name'] = $user_name; |
| | $where['user_status'] = 1; |
| |
|
| | $info = $this->field('*')->where($where)->find(); |
| | if(empty($info)) { |
| | return ['code' => 1002, 'msg' => lang('model/user/not_login')]; |
| | } |
| | $info = $info->toArray(); |
| | $login_check = md5($info['user_random'] . '-' . $info['user_name']. '-' . $info['user_id'] .'-' ); |
| | if($login_check != $user_check) { |
| | return ['code' => 1003, 'msg' => lang('model/user/not_login')]; |
| | } |
| |
|
| | $group_list = model('Group')->getCache('group_list'); |
| | $info['group'] = $group_list[$info['group_id']]; |
| |
|
| | |
| | if ($info['group_id'] > 2 && $info['user_end_time'] < time()) { |
| | |
| | $info['group'] = $group_list[2]; |
| |
|
| | $update = []; |
| | $update['group_id'] = 2; |
| |
|
| | $res = $this->where($where)->update($update); |
| | if($res === false){ |
| | return ['code' => 1004, 'msg' => lang('model/user/update_expire_err')]; |
| | } |
| |
|
| | cookie('group_id', $info['group']['group_id'], ['expire'=>2592000] ); |
| | cookie('group_name', $info['group']['group_name'],['expire'=>2592000] ); |
| | } |
| |
|
| |
|
| | return ['code' => 1, 'msg' => lang('model/user/haved_login'), 'info' => $info]; |
| | } |
| |
|
| | public function resetPwd() |
| | { |
| |
|
| | } |
| |
|
| | public function findpass($param) |
| | { |
| | $data = []; |
| | $password_raw = trim($param['user_pwd']); |
| | $data['user_name'] = htmlspecialchars(urldecode(trim($param['user_name']))); |
| | $data['user_question'] = htmlspecialchars(urldecode(trim($param['user_question']))); |
| | $data['user_answer'] = htmlspecialchars(urldecode(trim($param['user_answer']))); |
| | $data['user_pwd'] = htmlspecialchars(urldecode(trim($param['user_pwd']))); |
| | $data['user_pwd2'] = htmlspecialchars(urldecode(trim($param['user_pwd2']))); |
| | $data['verify'] = $param['verify']; |
| |
|
| | if (empty($data['user_name']) || empty($data['user_question']) || empty($data['user_answer']) || empty($data['user_pwd']) || empty($data['user_pwd2']) || empty($data['verify'])) { |
| | return ['code' => 1001, 'msg' => lang('param_err')]; |
| | } |
| |
|
| | if (!captcha_check($data['verify'])) { |
| | return ['code' => 1002, 'msg' => lang('verify_err')]; |
| | } |
| |
|
| | if ($data['user_pwd'] != $data['user_pwd2']) { |
| | return ['code' => 1003, 'msg' => lang('model/user/pass_not_same_pass2')]; |
| | } |
| |
|
| |
|
| | $where = []; |
| | $where['user_name'] = $data['user_name']; |
| | $where['user_question'] = $data['user_question']; |
| | $where['user_answer'] = $data['user_answer']; |
| |
|
| | $info = $this->where($where)->find(); |
| | if (empty($info)) { |
| | return ['code' => 1004, 'msg' => lang('model/user/findpass_not_found')]; |
| | } |
| |
|
| | $update = []; |
| | $update['user_pwd'] = md5($password_raw); |
| |
|
| | $where = []; |
| | $where['user_id'] = $info['user_id']; |
| | $res = $this->where($where)->update($update); |
| |
|
| | if (false === $res) { |
| | return ['code' => 1005, 'msg' => '' . $this->getError()]; |
| | } |
| | return ['code' => 1, 'msg' => lang('model/user/findpass_ok')]; |
| |
|
| | } |
| |
|
| | public function popedom($type_id, $popedom, $group_id = 1) |
| | { |
| | $group_list = model('Group')->getCache(); |
| | $group_info = $group_list[$group_id]; |
| |
|
| | if (strpos(',' . $group_info['group_type'], ',' . $type_id . ',') !== false && !empty($group_info['group_popedom'][$type_id][$popedom]) !== false) { |
| | return true; |
| | } |
| | return false; |
| | } |
| |
|
| | public function upgrade($param) |
| | { |
| | $group_id = intval($param['group_id']); |
| | $long = $param['long']; |
| | $points_long = ['day'=>86400,'week'=>86400*7,'month'=>86400*30,'year'=>86400*365]; |
| |
|
| | if (!array_key_exists($long, $points_long)) { |
| | return ['code'=>1001,'msg'=>'非法操作']; |
| | } |
| |
|
| | if($group_id <3){ |
| | return ['code'=>1002,'msg'=>lang('model/user/select_diy_group_err')]; |
| | } |
| |
|
| | $group_list = model('Group')->getCache(); |
| | $group_info = $group_list[$group_id]; |
| | if(empty($group_info)){ |
| | return ['code'=>1003,'msg'=>lang('model/user/group_not_found')]; |
| | } |
| |
|
| | if($group_info['group_status'] == 0){ |
| | return ['code'=>1004,'msg'=>lang('model/user/group_is_close')]; |
| | } |
| |
|
| | $point = $group_info['group_points_'.$long]; |
| | if($GLOBALS['user']['user_points'] < $point){ |
| | return ['code'=>1005,'msg'=>lang('model/user/potins_not_enough')]; |
| | } |
| |
|
| | $sj = $points_long[$long]; |
| | $end_time = time() + $sj; |
| | if($GLOBALS['user']['user_end_time'] > time() ){ |
| | $end_time = $GLOBALS['user']['user_end_time'] + $sj; |
| | } |
| |
|
| | $where = []; |
| | $where['user_id'] = $GLOBALS['user']['user_id']; |
| |
|
| | $data = []; |
| | $data['user_points'] = $GLOBALS['user']['user_points'] - $point; |
| | $data['user_end_time'] = $end_time; |
| | $data['group_id'] = $group_id; |
| |
|
| | $res = $this->where($where)->update($data); |
| | if($res===false){ |
| | return ['code'=>1009,'msg'=>lang('model/user/update_group_err')]; |
| | } |
| |
|
| | |
| | $data = []; |
| | $data['user_id'] = $GLOBALS['user']['user_id']; |
| | $data['plog_type'] = 7; |
| | $data['plog_points'] = $point; |
| | model('Plog')->saveData($data); |
| | |
| | $this->reward($point); |
| |
|
| | cookie('group_id', $group_info['group_id'],['expire'=>2592000] ); |
| | cookie('group_name', $group_info['group_name'],['expire'=>2592000] ); |
| |
|
| | return ['code'=>1,'msg'=>lang('model/user/update_group_ok')]; |
| | } |
| |
|
| | public function check_msg($param) |
| | { |
| | $param['to'] = htmlspecialchars(urldecode(trim($param['to']))); |
| | $param['code'] = htmlspecialchars(urldecode(trim($param['code']))); |
| | if(!in_array($param['ac'],['email','phone']) || empty($param['to']) || empty($param['code']) || empty($param['type'])){ |
| | return ['code'=>9001,'msg'=>lang('param_err')]; |
| | } |
| | |
| | if ($param['ac'] == 'email' && in_array($param['type'], [1, 3])) { |
| | $result = UserValidate::validateEmail($param['to']); |
| | if ($result['code'] > 1) { |
| | return $result; |
| | } |
| | } |
| | |
| | $stime = strtotime('-5 min'); |
| | if($param['ac']=='email' && intval($GLOBALS['config']['email']['time'])>0){ |
| | $stime = strtotime('-'.$GLOBALS['config']['email']['time'].' min'); |
| | } |
| |
|
| | $where=[]; |
| | $where['user_id'] = intval($GLOBALS['user']['user_id']); |
| | $where['msg_time'] = ['gt',$stime]; |
| | $where['msg_code'] = ['eq',$param['code']]; |
| | $where['msg_type'] = ['eq', $param['type'] ]; |
| | $res = model('msg')->infoData($where); |
| | if($res['code'] >1){ |
| | return ['code'=>9002,'msg'=>lang('model/user/msg_not_found')]; |
| | } |
| | return ['code'=>1,'msg'=>'ok']; |
| | } |
| |
|
| | public function send_msg($param) |
| | { |
| | $param['to'] = htmlspecialchars(urldecode(trim($param['to']))); |
| | $param['code'] = htmlspecialchars(urldecode(trim($param['code']))); |
| |
|
| | $type_arr = [ |
| | 1=>['des'=>lang('bind'),'flag'=>'bind'], |
| | 2=>['des'=>lang('findpass'),'flag'=>'findpass'], |
| | 3=>['des'=>lang('register'),'flag'=>'reg'], |
| | ]; |
| | if(!in_array($param['ac'],['email','phone']) || !isset($type_arr[$param['type']]) || empty($param['to']) || empty($param['type'])){ |
| | return ['code'=>9001,'msg'=>lang('param_err')]; |
| | } |
| | |
| | if ($param['ac'] == 'email' && in_array($param['type'], [1, 3])) { |
| | $result = UserValidate::validateEmail($param['to']); |
| | if ($result['code'] > 1) { |
| | return $result; |
| | } |
| | } |
| |
|
| | $type_des = $type_arr[$param['type']]['des']; |
| | $type_flag = $type_arr[$param['type']]['flag']; |
| |
|
| |
|
| | $to = $param['to']; |
| | $code = mac_get_rndstr(6,'num'); |
| | $r=0; |
| |
|
| | $stime = strtotime('-5 min'); |
| | if($param['ac']=='email' && intval($GLOBALS['config']['email']['time'])>0){ |
| | $stime = strtotime('-'.$GLOBALS['config']['email']['time'].' min'); |
| | } |
| | $where=[]; |
| | $where['user_id'] = intval($GLOBALS['user']['user_id']); |
| | $where['msg_time'] = ['gt',$stime]; |
| | $where['msg_type'] = ['eq', $param['type'] ]; |
| | $where['msg_to'] = ['eq', $param['to'] ]; |
| | $res = model('msg')->infoData($where); |
| | if($res['code'] ==1){ |
| | return ['code'=>9002,'msg'=>lang('model/user/do_not_send_frequently')]; |
| | } |
| | $res_msg= ','.lang('please_try_again'); |
| | if($param['ac']=='email'){ |
| | $title = $GLOBALS['config']['email']['tpl']['user_'.$type_flag.'_title']; |
| | $msg = $GLOBALS['config']['email']['tpl']['user_'.$type_flag.'_body']; |
| | View::instance()->assign(['code'=>$code,'time'=>$GLOBALS['config']['email']['time']]); |
| | $title = View::instance()->display($title); |
| | $msg = View::instance()->display($msg); |
| | $msg = htmlspecialchars_decode($msg); |
| | $res_send = mac_send_mail($to, $title, $msg); |
| | $res_code = $res_send['code']; |
| | $res_msg = $res_send['msg']; |
| | } |
| | else{ |
| | $msg = $GLOBALS['config']['sms']['content']; |
| | $msg = str_replace(['[用户]','[类型]','[时长]','[验证码]'],[$GLOBALS['user']['user_name'],$type_des,'5',$code],$msg); |
| | $res_send = mac_send_sms($to,$code,$type_flag,$type_des,$msg); |
| | $res_code = $res_send['code']; |
| | $res_msg = $res_send['msg']; |
| | } |
| | |
| | if($res_code==1){ |
| | $data=[]; |
| | $data['user_id'] = intval($GLOBALS['user']['user_id']); |
| | $data['msg_type'] = $param['type']; |
| | $data['msg_status'] = 0; |
| | $data['msg_to'] = $to; |
| | $data['msg_code'] = $code; |
| | $data['msg_content'] = $msg; |
| | $data['msg_time'] = time(); |
| | $res = model('msg')->saveData($data); |
| |
|
| | return ['code'=>1,'msg'=>lang('model/user/msg_send_ok')]; |
| | } |
| | else{ |
| | return ['code'=>9009,'msg'=>lang('model/user/msg_send_err').':'.$res_msg]; |
| | } |
| | } |
| |
|
| | public function bind($param) |
| | { |
| | $param['type'] = 1; |
| | $res = $this->check_msg($param); |
| | if($res['code'] >1){ |
| | return ['code'=>$res['code'],'msg'=>$res['msg']]; |
| | } |
| |
|
| | $update=[]; |
| | $update2=[]; |
| | $where2=[]; |
| | if($param['ac']=='email') { |
| | $update['user_email'] = $param['to']; |
| | $update2['user_email'] = ''; |
| | $where2['user_email'] = $param['to']; |
| | } |
| | else{ |
| | $update['user_phone'] = $param['to']; |
| | $update2['user_phone'] = ''; |
| | $where2['user_phone'] = $param['to']; |
| | } |
| | $this->where($where2)->update($update2); |
| |
|
| | $where=[]; |
| | $where['user_id'] = $GLOBALS['user']['user_id']; |
| | $res = $this->where($where)->update($update); |
| | if($res===false){ |
| | return ['code'=>2003,'msg'=>lang('model/user/update_bind_err')]; |
| | } |
| | return ['code'=>1,'msg'=>lang('model/user/update_bind_ok')]; |
| | } |
| |
|
| | public function unbind($param) |
| | { |
| | if(!in_array($param['ac'],['email','phone']) ){ |
| | return ['code'=>2001,'msg'=>lang('param_err')]; |
| | } |
| | $col = 'user_email'; |
| | if($param['ac']=='phone'){ |
| | $col = 'user_phone'; |
| | } |
| | $update=[]; |
| | $update[$col] = ''; |
| | $where=[]; |
| | $where['user_id'] = $GLOBALS['user']['user_id']; |
| | $res = $this->where($where)->update($update); |
| | if($res===false){ |
| | return ['code'=>2002,'msg'=>lang('model/user/update_bind_err')]; |
| | } |
| | return ['code'=>1,'msg'=>lang('model/user/update_unbind_ok')]; |
| | } |
| |
|
| | public function bindmsg($param) |
| | { |
| | $param['type'] = 1; |
| | return $this->send_msg($param); |
| | } |
| |
|
| | public function findpass_msg($param) |
| | { |
| | $param['type'] = 2; |
| | return $this->send_msg($param); |
| | } |
| |
|
| | public function reg_msg($param) |
| | { |
| | $param['type'] = 3; |
| | return $this->send_msg($param); |
| | } |
| |
|
| |
|
| | public function findpass_reset($param) |
| | { |
| | $to = htmlspecialchars(urldecode(trim($param['user_email']))); |
| | if(empty($to)){ |
| | $to = htmlspecialchars(urldecode(trim($param['to']))); |
| | } |
| |
|
| | $password_raw = trim($param['user_pwd']); |
| | $param['code'] = htmlspecialchars(urldecode(trim($param['code']))); |
| | $param['user_pwd'] = htmlspecialchars(urldecode(trim($param['user_pwd']))); |
| | $param['user_pwd2'] = htmlspecialchars(urldecode(trim($param['user_pwd2']))); |
| |
|
| |
|
| | if (strlen($param['user_pwd']) < 6) { |
| | return ['code' => 2002, 'msg' => lang('model/user/pass_length_err')]; |
| | } |
| | if ($param['user_pwd'] != $param['user_pwd2']) { |
| | return ['code' => 2003, 'msg' => lang('model/user/pass_not_same_pass2')]; |
| | } |
| |
|
| | $param['type'] = 2; |
| | $res = $this->check_msg($param); |
| | if($res['code'] >1){ |
| | return ['code'=>$res['code'],'msg'=>$res['msg']]; |
| | } |
| |
|
| | if($param['ac']=='email') { |
| |
|
| | $pattern = '/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/'; |
| | if(!preg_match( $pattern, $to)){ |
| | return ['code'=>2005,'msg'=>lang('model/user/email_format_err')]; |
| | } |
| |
|
| | $where = []; |
| | $where['user_email'] = $to; |
| | $user = $this->where($where)->find(); |
| | if (!$user) { |
| | return ['code' => 2006, 'msg' => lang('model/user/email_err')]; |
| | } |
| | } |
| | else{ |
| | $pattern = "/^1{1}\d{10}$/"; |
| | if(!preg_match($pattern,$to)){ |
| | return ['code'=>2007,'msg'=>lang('model/user/phone_format_err')]; |
| | } |
| |
|
| | $where = []; |
| | $where['user_phone'] = $to; |
| | $user = $this->where($where)->find(); |
| | if (!$user) { |
| | return ['code' => 2008, 'msg' =>lang('model/user/phone_err')]; |
| | } |
| | } |
| |
|
| | $update = []; |
| | $update['user_pwd'] = md5($password_raw); |
| | $res = $this->where($where)->update($update); |
| | if($res===false){ |
| | return ['code'=>2009,'msg'=>lang('model/user/pass_reset_err')]; |
| | } |
| | return ['code'=>1,'msg'=>lang('model/user/pass_reset_ok')]; |
| | } |
| |
|
| | public function visit($param) |
| | { |
| | $param['uid'] = abs(intval($param['uid'])); |
| | if ($param['uid'] == 0) { |
| | return ['code' => 101, 'msg' =>lang('model/user/id_err')]; |
| | } |
| |
|
| | $ip = mac_get_ip_long(); |
| | $max_cc = $GLOBALS['config']['user']['invite_visit_num']; |
| | if(empty($max_cc)){ |
| | $max_cc=1; |
| | } |
| | $todayunix = strtotime("today"); |
| | $where = []; |
| | $where['user_id'] = $param['uid']; |
| | $where['visit_ip'] = $ip; |
| | $where['visit_time'] = ['gt', $todayunix]; |
| | $cc = model('visit')->where($where)->count(); |
| | if ($cc>= $max_cc){ |
| | return ['code' => 102, 'msg' => lang('model/user/visit_tip')]; |
| | } |
| |
|
| | $data = []; |
| | $data['user_id'] = $param['uid']; |
| | $data['visit_ip'] = $ip; |
| | $data['visit_time'] = time(); |
| | $data['visit_ly'] = htmlspecialchars(mac_get_refer()); |
| | $res = model('visit')->saveData($data); |
| |
|
| | if ($res['code'] > 1) { |
| | return ['code' => 103, 'msg' => lang('model/user/visit_err')]; |
| | } |
| |
|
| | $res = $this->where('user_id', $param['uid'])->setInc('user_points', intval($GLOBALS['config']['user']['invite_visit_points'])); |
| | if($res) { |
| | |
| | $data = []; |
| | $data['user_id'] = $param['uid']; |
| | $data['plog_type'] = 3; |
| | $data['plog_points'] = intval($GLOBALS['config']['user']['invite_visit_points']); |
| | model('Plog')->saveData($data); |
| | } |
| |
|
| | return ['code'=>1,'msg'=>lang('model/user/visit_ok')]; |
| | } |
| |
|
| | public function reward($fee_points=0) |
| | { |
| | |
| | if($fee_points>0 && $GLOBALS['config']['user']['reward_status'] == '1'){ |
| |
|
| | if(!empty($GLOBALS['config']['user']['reward_ratio']) && !empty($GLOBALS['user']['user_pid'])){ |
| | $points = floor($fee_points / 100 * $GLOBALS['config']['user']['reward_ratio']); |
| | if($points>0){ |
| | $where=[]; |
| | $where['user_id'] = $GLOBALS['user']['user_pid']; |
| | $r = model('User')->where($where)->setInc('user_points',$points); |
| | if($r){ |
| | $data = []; |
| | $data['user_id'] = $GLOBALS['user']['user_pid']; |
| | $data['plog_type'] = 4; |
| | $data['plog_points'] = $points; |
| | $data['plog_remarks'] = lang('model/user/reward_tip',[$GLOBALS['user']['user_id'],$GLOBALS['user']['user_name'],$fee_points,$points]); |
| | model('Plog')->saveData($data); |
| | } |
| | } |
| | } |
| | if(!empty($GLOBALS['config']['user']['reward_ratio_2']) && !empty($GLOBALS['user']['user_pid_2'])){ |
| | $points = floor($fee_points / 100 * $GLOBALS['config']['user']['reward_ratio_2']); |
| | if($points>0){ |
| | $where=[]; |
| | $where['user_id'] = $GLOBALS['user']['user_pid_2']; |
| | $r = model('User')->where($where)->setInc('user_points',$points); |
| | if($r){ |
| | $data = []; |
| | $data['user_id'] = $GLOBALS['user']['user_pid_2']; |
| | $data['plog_type'] = 5; |
| | $data['plog_points'] = $points; |
| | $data['plog_remarks'] =lang('model/user/reward_tip',[$GLOBALS['user']['user_id'],$GLOBALS['user']['user_name'],$fee_points,$points]); |
| | model('Plog')->saveData($data); |
| | } |
| | } |
| | } |
| | if(!empty($GLOBALS['config']['user']['reward_ratio_3']) && !empty($GLOBALS['user']['user_pid_3'])){ |
| | $points = floor($fee_points / 100 * $GLOBALS['config']['user']['reward_ratio_3']); |
| | if($points>0){ |
| | $where=[]; |
| | $where['user_id'] = $GLOBALS['user']['user_pid_3']; |
| | $r = model('User')->where($where)->setInc('user_points',$points); |
| | if($r){ |
| | $data = []; |
| | $data['user_id'] = $GLOBALS['user']['user_pid_3']; |
| | $data['plog_type'] = 6; |
| | $data['plog_points'] = $points; |
| | $data['plog_remarks'] = lang('model/user/reward_tip',[$GLOBALS['user']['user_id'],$GLOBALS['user']['user_name'],$fee_points,$points]); |
| | model('Plog')->saveData($data); |
| | } |
| | } |
| | } |
| | } |
| |
|
| | return ['code'=>1,'msg'=>lang('model/user/reward_ok')]; |
| | } |
| |
|
| | } |