1
0
Files
helper/application/common/service/Member.php
2023-11-16 14:33:38 +08:00

394 lines
10 KiB
PHP
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
// +------------------------------------------------+
// |http://www.cjango.com |
// +------------------------------------------------+
// | 修复BUG不是一朝一夕的事情等我喝醉了再说吧 |
// +------------------------------------------------+
// | Author: 小陈叔叔 <Jason.Chen> |
// +------------------------------------------------+
namespace app\common\service;
use app\common\model\Member as MemberModel;
use app\common\model\MemberInfo as MemberInfoModel;
use app\common\model\Template as TemplateModel;
use app\common\service\Score as ScoreService;
use app\common\validate\Member as MemberValidate;
use app\common\validate\MemberInfo as MemberInfoValidate;
use think\Config;
use think\Request;
use think\Session;
use tools\Crypt;
class Member extends _Init
{
/**
* 获取用户信息
*
* @param integer 用户id
* @return object
*/
public static function info($uid)
{
return MemberInfoModel::get($uid);
}
public static function isBind($uid)
{
$user = MemberModel::find($uid);
if (\tools\Verify::isMobilePhone($user->username)) {
return true;
} else {
return '用户尚未绑定手机号';
}
}
/**
* 编辑用户资料
*
* @param integer 用户id
* @param array 更新的数据
* @param string 数据验证的名称
* @return boolean|string
*/
public static function editInfo($uid, $data, $scene = '')
{
$validate = new MemberInfoValidate();
if (! $validate->scene($scene)->check($data)) {
return $validate->getError();
}
$MemberInfo = self::info($uid);
if (MemberInfoModel::update($data, ['uid' => $uid])) {
if (empty($MemberInfo->$scene)) {
ScoreService::setting(UID, $scene);
}
return true;
} else {
return '更新失败';
}
}
/**
* 添加 用户资料
*
* @param [type] $user 添加的信息
*/
private static function createInfo($user)
{
$data = [
'uid' => $user->id,
'mobile' => $user->username,
'nickname' => $user->username,
];
MemberInfoModel::create($data);
}
/**
* 注册一个用户
*
* @param string $username 用户名
* @param string $password 密码
* @param integer $status 初始状态
* @return [type] 返回结果
*/
public static function register($username, $password, $status = null, $pid = 0, $extends = [])
{
$status = is_numeric($status) ?: (Config::get('new_member_status') ?: 0);
$data = [
'username' => $username,
'password' => $password,
'status' => $status,
'pid' => $pid,
];
$validate = new MemberValidate();
if (! $validate->scene('register')->check($data)) {
return $validate->getError();
}
if (is_array($extends) && ! empty($extends)) {
$data = array_merge($data, $extends);
}
$user = MemberModel::create($data);
if ($user) {
Logs::write('注册用户', $data);
// 自动的注册一个用户资料
self::createInfo($user);
//增加积分
Score::register($user->id);
if (! empty($pid)) {
Score::invite($pid);
}
return true;
} else {
return '注册失败';
}
}
/**
* 修改密码
*
* @param integer $uid 用户编号
* @param string $old 旧密码
* @param string $new 新密码
* @return [type]
*/
public static function changePassword($uid, $old, $new, $repass)
{
$data = [
'uid' => $uid,
'oldpass' => $old,
'newpass' => $new,
'repass' => $repass,
];
$validate = new MemberValidate();
if (! $validate->scene('changepass')->check($data)) {
return $validate->getError();
}
return self::updatePassword($uid, $new);
}
/**
* 更新密码
*
* @param [type] $uid 用户id
* @param [type] $password 更新的密码
* @return [type] [description]
*/
public static function updatePassword($uid, $password)
{
$data = [
'password' => $password,
];
$validate = new MemberValidate();
if (! $validate->scene('updatepass')->check($data)) {
return $validate->getError();
}
$user = MemberModel::update($data, ['id' => $uid]);
if ($user) {
Logs::write('重置密码');
return true;
} else {
return '重置密码失败';
}
}
/**
* 用户登录
*
* @param [type] $username 用户民
* @param [type] $password 密码
* @return [type] 登录的结果
*/
public static function login($username, $password)
{
$data = [
'username' => $username,
'password' => $password,
];
$validate = new MemberValidate();
if (! $validate->scene('login')->check($data)) {
return $validate->getError();
}
$user = MemberModel::where('username', $username)->find();
if (! $user) {
return '用户不存在';
} elseif ($user->status != 1) {
return '用户被禁用';
} elseif ($user->password != Crypt::uMd5($password)) {
return '密码错误';
} else {
// 设置session
$auth = [
'uid' => $user->id,
'username' => $user->username,
'last_time' => $user->last_time,
'last_ip' => $user->last_ip,
];
Session::set('user_auth', $auth);
Session::set('user_auth_sign', Crypt::dataAuthSign($auth));
// 保存登录记录
$save = [
'login' => $user->login + 1,
'last_time' => time(),
'last_ip' => Request::instance()->ip(),
];
$user->save($save);
Logs::write('用户登录成功');
return true;
}
}
/**
* 根据openid 登录
*
* @param [type] $openid [description]
* @return [type] [description]
*/
public static function openid_login($openid)
{
$user = MemberModel::where('openid', $openid)->find();
if (! $user) {
return '用户不存在';
} elseif ($user->status != 1) {
return '用户被禁用';
} else {
// 设置session
$auth = [
'uid' => $user->id,
'username' => $user->username,
'last_time' => $user->last_time,
'last_ip' => $user->last_ip,
];
Session::set('user_auth', $auth);
Session::set('user_auth_sign', Crypt::dataAuthSign($auth));
// 保存登录记录
$save = [
'login' => $user->login + 1,
'last_time' => time(),
'last_ip' => Request::instance()->ip(),
];
$user->save($save);
Logs::write('用户登录成功');
return true;
}
}
/**
* 退出当前账户
*
* @return [type] [description]
*/
public static function logout()
{
Logs::write('注销登录');
Session::delete('user_auth');
Session::delete('user_auth_sign');
Session::clear();
Session::destroy();
return true;
}
/**
* 修改用户状态
*
* @param [type] $uid 要修改的用户id
* @param [type] $status 要修改的状态 正常 禁用
*/
public static function status($uid, $status)
{
$user = MemberModel::get($uid);
if (! $user) {
return '用户不存在';
} elseif ($user->save(['status' => $status])) {
Logs::write('修改状态', ['status' => $status]);
return true;
} else {
return '状态修改失败';
}
}
/**
* 用户登录判断
*
* @return boolean 返回用户id 失败返回0
*/
public static function isLogin()
{
$user = Session::get('user_auth');
if (empty($user)) {
return 0;
} else {
return Session::get('user_auth_sign') == Crypt::dataAuthSign($user) ? $user['uid'] : 0;
}
}
/**
* 切换模版
*
* @param [type] $uid [description]
* @param [type] $tpl [description]
* @return [type] [description]
*/
public static function changeTpl($uid, $tpl)
{
if (! TemplateModel::get($tpl)) {
return '模板不存在';
}
if (MemberInfoModel::update(['index_tpl' => $tpl], ['uid' => $uid])) {
return true;
} else {
return '操作失败';
}
}
/**
* 绑定微信
*
* @param [type] $uid [description]
* @param [type] $data [description]
* @return [type] [description]
*/
public static function bindWechat($uid, $data)
{
$validate = new MemberValidate();
if (! $validate->scene('openid')->check($data)) {
return $validate->getError();
}
$MemberInfo = self::info($uid);
$scene = 'openid';
if (MemberModel::update($data, ['id' => $uid])) {
if (empty($MemberInfo->$scene)) {
ScoreService::setting(UID, $scene);
}
return true;
} else {
return '更新失败';
}
}
/**
* 解除绑定
*
* @param [type] $uid [description]
* @param [type] $data [description]
* @return [type] [description]
*/
public static function unBindWechat($uid, $openid)
{
$ids = MemberModel::where('openid', $openid)->column('id');
$data = [
'openid' => '',
];
$map = [
'id' => ['in', $ids],
];
if (MemberModel::update($data, $map)) {
return true;
} else {
return '解除绑定失败';
}
}
}