You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
5.3 KiB
194 lines
5.3 KiB
<?php
|
|
class api_user {
|
|
public $api;
|
|
public function __construct(){
|
|
$this->api = new api();
|
|
}
|
|
|
|
//获取会员信息
|
|
public function find($username = '' , $password = '' , $all = false){
|
|
$where = is_numeric($username) ? 'userid='.$username : 'username="'.$username.'"';
|
|
$dbtbpre = $this->api->dbtbpre;
|
|
$user = $this->api->one("select * from {$dbtbpre}enewsmember where {$where} limit 1");
|
|
if($password && $user){
|
|
if($this->mark_password($password , $user['salt']) !== $user['password']){
|
|
return false;
|
|
}
|
|
}
|
|
if($user && $all){
|
|
$data = $this->api->one("select * from {$dbtbpre}enewsmemberadd where userid=".$user['userid']." limit 1");
|
|
$user = array_merge($user , $data);
|
|
}
|
|
return $user;
|
|
}
|
|
|
|
//是否已登陆
|
|
public function islogin($all = true){
|
|
$userid = (int)getcvar('mluserid');
|
|
$username = RepPostVar(getcvar('mlusername'));
|
|
$rnd = RepPostVar(getcvar('mlrnd'));
|
|
if(!$userid || !$username || !$rnd){
|
|
return false;
|
|
}
|
|
$user = $this->find($userid , false , $all);
|
|
//检测用户是否已过期
|
|
if($user['userdate']){
|
|
if($user['userdate'] - time() <= 0){
|
|
$this->set_group($user['userid'] , $user['zgroupid']);
|
|
if($user['zgroupid']){
|
|
$user['groupid'] = $user['zgroupid'];
|
|
$user['zgroupid'] = 0;
|
|
}
|
|
}
|
|
}
|
|
return $user;
|
|
}
|
|
|
|
//设置用户会员组
|
|
public function set_group($userid , $groupid = 0){
|
|
$groupid = (int)$groupid;
|
|
$userid = (int)$userid;
|
|
return $userid ? $this->api->update("enewsmember" , array('groupid' => $groupid , 'userdate' => 0) , "userid=".$userid) : false;
|
|
}
|
|
|
|
//会员登陆
|
|
public function login($user , $time = 0){
|
|
if(empty($user) || !is_array($user)){
|
|
return false;
|
|
}
|
|
$rnd = make_password(20);
|
|
$lasttime = time();
|
|
$user['groupid'] = (int)$user['groupid'];
|
|
$lastip = egetip();
|
|
$lastipport = egetipport();
|
|
$time = $time ? time()+ $time : 0;
|
|
//update
|
|
$this->api->update("enewsmember" , "rnd='{$rnd}'" , "userid=".(int)$user['userid']);
|
|
$this->api->update("enewsmemberadd" , "lasttime='{$lasttime}',lastip='{$lastip}',loginnum=loginnum+1,lastipport='{$lastipport}'" , "userid=".(int)$user['userid']);
|
|
//cookie
|
|
esetcookie("mlusername" , $user['username'] , $time);
|
|
esetcookie("mluserid" , $user['userid'] , $time);
|
|
esetcookie("mlgroupid" , $user['groupid'] , $time);
|
|
esetcookie("mlrnd" , $rnd , $time);
|
|
esetcookie('mlauth', $this->get_auth_code($user['userid'], $user['username'], $rnd, $user['groupid']) , $time);
|
|
return true;
|
|
}
|
|
|
|
//会员注册
|
|
public function register($data){
|
|
if(empty($data) || !is_array($data) || !isset($data['username']) || !isset($data['password'])){
|
|
return false;
|
|
}
|
|
//检测用户名是否已存在
|
|
if($this->has_username($data['username'])){
|
|
return false;
|
|
}
|
|
|
|
//注册时删除userid
|
|
if(isset($data['userid'])){
|
|
unset($data['userid']);
|
|
}
|
|
|
|
//注册时间
|
|
if(!isset($data['registertime'])){
|
|
$data['registertime'] = time();
|
|
}
|
|
|
|
//会员组
|
|
if(!isset($data['groupid'])){
|
|
$data['groupid'] = (int)$this->api->public_r['defaultgroupid'];
|
|
}
|
|
|
|
//userkey
|
|
$data['userkey'] = make_password(12);
|
|
|
|
//rnd
|
|
$data['rnd'] = make_password(20);
|
|
|
|
//salt
|
|
$data['salt'] = make_password($this->api->ecms_config['member']['saltnum']);
|
|
|
|
//密码处理
|
|
$data['password'] = $this->mark_password($data['password'] , $data['salt']);
|
|
|
|
//checked
|
|
if(!isset($data['checked'])){
|
|
$data['checked'] = @$this->api->level_r[$data['groupid']]['regchecked'] == 1 ? 1 : 0;
|
|
if($data['checked'] && $this->public_r['regacttype']==1){
|
|
$data['checked'] = 0;
|
|
}
|
|
}
|
|
//积分
|
|
$data['userfen'] = isset($data['userfen']) ? (int)$data['userfen'] : (int)$this->api->public_r['reggetfen'];
|
|
|
|
$userid = $this->api->insert('enewsmember' , $data);
|
|
if(!$userid){
|
|
return false;
|
|
}else{
|
|
$data['userid'] = $userid;
|
|
//副表信息
|
|
$add = array(
|
|
'userid' => $userid,
|
|
'regip' => egetip(),
|
|
'regipport' => egetipport()
|
|
);
|
|
$this->api->insert('enewsmemberadd' , $add);
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
//检查会员名是否已存在
|
|
public function has_username($username){
|
|
$username = RepPostVar($username);
|
|
return $this->api->total('enewsmember' , "username = '".$username."'");
|
|
}
|
|
|
|
//检查邮箱是否已存在
|
|
public function has_email($email){
|
|
$email = RepPostVar($email);
|
|
return $this->api->total('enewsmember' , "email = '".$email."'");
|
|
}
|
|
|
|
//验证码
|
|
public function verify_code($name , $code = false){
|
|
$name = $name === 'login' ? 'checkloginkey' : 'checkregkey';
|
|
if($code !== false){
|
|
//验证
|
|
return api_check_code($name , $code , 0);
|
|
}else{
|
|
//设置
|
|
esetcookie($name , '' , 0 , 0);
|
|
}
|
|
}
|
|
|
|
|
|
//注销登陆
|
|
public function logout(){
|
|
esetcookie("mlusername","",0);
|
|
esetcookie("mluserid","",0);
|
|
esetcookie("mlgroupid","",0);
|
|
esetcookie("mlrnd","",0);
|
|
esetcookie("mlauth","",0);
|
|
}
|
|
|
|
//生成会员密码
|
|
public function mark_password($pw , $salt = ''){
|
|
$type = $this->api->ecms_config['member']['pwtype'];
|
|
if($type == 0){
|
|
return md5($pw);
|
|
}else if($type == 1){
|
|
return $pw;
|
|
}else if($type == 3){
|
|
return substr(md5($pw),8,16);
|
|
}else{
|
|
return md5(md5($pw).$salt);
|
|
}
|
|
}
|
|
|
|
//获取登陆验证符
|
|
public function get_auth_code($userid, $username, $rnd, $groupid){
|
|
$code = md5(md5($rnd.'-'.$userid.'-'.$username.'-'.$groupid).'-#empire.cms!-'.$this->api->ecms_config['cks']['ckrndtwo']);
|
|
return $code;
|
|
}
|
|
|
|
}
|