| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 | 
							- <?php
 
- namespace app\index\controller;
 
- use addons\wechat\model\WechatCaptcha;
 
- use app\common\controller\Frontend;
 
- use app\common\library\Ems;
 
- use app\common\library\Sms;
 
- use app\common\model\Attachment;
 
- use think\Config;
 
- use think\Cookie;
 
- use think\Hook;
 
- use think\Session;
 
- use think\Validate;
 
- /**
 
-  * 会员中心
 
-  */
 
- class User extends Frontend
 
- {
 
-     protected $layout = 'default';
 
-     protected $noNeedLogin = ['login', 'register', 'third'];
 
-     protected $noNeedRight = ['*'];
 
-     public function _initialize()
 
-     {
 
-         parent::_initialize();
 
-         $auth = $this->auth;
 
-         if (!Config::get('fastadmin.usercenter')) {
 
-             $this->error(__('User center already closed'), '/');
 
-         }
 
-         //监听注册登录退出的事件
 
-         Hook::add('user_login_successed', function ($user) use ($auth) {
 
-             $expire = input('post.keeplogin') ? 30 * 86400 : 0;
 
-             Cookie::set('uid', $user->id, $expire);
 
-             Cookie::set('token', $auth->getToken(), $expire);
 
-         });
 
-         Hook::add('user_register_successed', function ($user) use ($auth) {
 
-             Cookie::set('uid', $user->id);
 
-             Cookie::set('token', $auth->getToken());
 
-         });
 
-         Hook::add('user_delete_successed', function ($user) use ($auth) {
 
-             Cookie::delete('uid');
 
-             Cookie::delete('token');
 
-         });
 
-         Hook::add('user_logout_successed', function ($user) use ($auth) {
 
-             Cookie::delete('uid');
 
-             Cookie::delete('token');
 
-         });
 
-     }
 
-     /**
 
-      * 会员中心
 
-      */
 
-     public function index()
 
-     {
 
-         $this->view->assign('title', __('User center'));
 
-         return $this->view->fetch();
 
-     }
 
-     /**
 
-      * 注册会员
 
-      */
 
-     public function register()
 
-     {
 
-         $url = $this->request->request('url', '', 'url_clean');
 
-         if ($this->auth->id) {
 
-             $this->success(__('You\'ve logged in, do not login again'), $url ? $url : url('user/index'));
 
-         }
 
-         if ($this->request->isPost()) {
 
-             $username = $this->request->post('username');
 
-             $password = $this->request->post('password', '', null);
 
-             $email = $this->request->post('email');
 
-             $mobile = $this->request->post('mobile', '');
 
-             $captcha = $this->request->post('captcha');
 
-             $token = $this->request->post('__token__');
 
-             $rule = [
 
-                 'username'  => 'require|length:3,30',
 
-                 'password'  => 'require|length:6,30',
 
-                 'email'     => 'require|email',
 
-                 'mobile'    => 'regex:/^1\d{10}$/',
 
-                 '__token__' => 'require|token',
 
-             ];
 
-             $msg = [
 
-                 'username.require' => 'Username can not be empty',
 
-                 'username.length'  => 'Username must be 3 to 30 characters',
 
-                 'password.require' => 'Password can not be empty',
 
-                 'password.length'  => 'Password must be 6 to 30 characters',
 
-                 'email'            => 'Email is incorrect',
 
-                 'mobile'           => 'Mobile is incorrect',
 
-             ];
 
-             $data = [
 
-                 'username'  => $username,
 
-                 'password'  => $password,
 
-                 'email'     => $email,
 
-                 'mobile'    => $mobile,
 
-                 '__token__' => $token,
 
-             ];
 
-             //验证码
 
-             $captchaResult = true;
 
-             $captchaType = config("fastadmin.user_register_captcha");
 
-             if ($captchaType) {
 
-                 if ($captchaType == 'mobile') {
 
-                     $captchaResult = Sms::check($mobile, $captcha, 'register');
 
-                 } elseif ($captchaType == 'email') {
 
-                     $captchaResult = Ems::check($email, $captcha, 'register');
 
-                 } elseif ($captchaType == 'wechat') {
 
-                     $captchaResult = WechatCaptcha::check($captcha, 'register');
 
-                 } elseif ($captchaType == 'text') {
 
-                     $captchaResult = \think\Validate::is($captcha, 'captcha');
 
-                 }
 
-             }
 
-             if (!$captchaResult) {
 
-                 $this->error(__('Captcha is incorrect'));
 
-             }
 
-             $validate = new Validate($rule, $msg);
 
-             $result = $validate->check($data);
 
-             if (!$result) {
 
-                 $this->error(__($validate->getError()), null, ['token' => $this->request->token()]);
 
-             }
 
-             if ($this->auth->register($username, $password, $email, $mobile)) {
 
-                 $this->success(__('Sign up successful'), $url ? $url : url('user/index'));
 
-             } else {
 
-                 $this->error($this->auth->getError(), null, ['token' => $this->request->token()]);
 
-             }
 
-         }
 
-         //判断来源
 
-         $referer = $this->request->server('HTTP_REFERER', '', 'url_clean');
 
-         if (!$url && $referer && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) {
 
-             $url = $referer;
 
-         }
 
-         $this->view->assign('captchaType', config('fastadmin.user_register_captcha'));
 
-         $this->view->assign('url', $url);
 
-         $this->view->assign('title', __('Register'));
 
-         return $this->view->fetch();
 
-     }
 
-     /**
 
-      * 会员登录
 
-      */
 
-     public function login()
 
-     {
 
-         $url = $this->request->request('url', '', 'url_clean');
 
-         if ($this->auth->id) {
 
-             $this->success(__('You\'ve logged in, do not login again'), $url ?: url('user/index'));
 
-         }
 
-         if ($this->request->isPost()) {
 
-             $account = $this->request->post('account');
 
-             $password = $this->request->post('password', '', null);
 
-             $keeplogin = (int)$this->request->post('keeplogin');
 
-             $token = $this->request->post('__token__');
 
-             $rule = [
 
-                 'account'   => 'require|length:3,50',
 
-                 'password'  => 'require|length:6,30',
 
-                 '__token__' => 'require|token',
 
-             ];
 
-             $msg = [
 
-                 'account.require'  => 'Account can not be empty',
 
-                 'account.length'   => 'Account must be 3 to 50 characters',
 
-                 'password.require' => 'Password can not be empty',
 
-                 'password.length'  => 'Password must be 6 to 30 characters',
 
-             ];
 
-             $data = [
 
-                 'account'   => $account,
 
-                 'password'  => $password,
 
-                 '__token__' => $token,
 
-             ];
 
-             $validate = new Validate($rule, $msg);
 
-             $result = $validate->check($data);
 
-             if (!$result) {
 
-                 $this->error(__($validate->getError()), null, ['token' => $this->request->token()]);
 
-             }
 
-             if ($this->auth->login($account, $password)) {
 
-                 $this->success(__('Logged in successful'), $url ? $url : url('user/index'));
 
-             } else {
 
-                 $this->error($this->auth->getError(), null, ['token' => $this->request->token()]);
 
-             }
 
-         }
 
-         //判断来源
 
-         $referer = $this->request->server('HTTP_REFERER', '', 'url_clean');
 
-         if (!$url && $referer && !preg_match("/(user\/login|user\/register|user\/logout)/i", $referer)) {
 
-             $url = $referer;
 
-         }
 
-         $this->view->assign('url', $url);
 
-         $this->view->assign('title', __('Login'));
 
-         return $this->view->fetch();
 
-     }
 
-     /**
 
-      * 退出登录
 
-      */
 
-     public function logout()
 
-     {
 
-         if ($this->request->isPost()) {
 
-             $this->token();
 
-             //退出本站
 
-             $this->auth->logout();
 
-             $this->success(__('Logout successful'), url('user/index'));
 
-         }
 
-         $html = "<form id='logout_submit' name='logout_submit' action='' method='post'>" . token() . "<input type='submit' value='ok' style='display:none;'></form>";
 
-         $html .= "<script>document.forms['logout_submit'].submit();</script>";
 
-         return $html;
 
-     }
 
-     /**
 
-      * 个人信息
 
-      */
 
-     public function profile()
 
-     {
 
-         $this->view->assign('title', __('Profile'));
 
-         return $this->view->fetch();
 
-     }
 
-     /**
 
-      * 修改密码
 
-      */
 
-     public function changepwd()
 
-     {
 
-         if ($this->request->isPost()) {
 
-             $oldpassword = $this->request->post("oldpassword", '', null);
 
-             $newpassword = $this->request->post("newpassword", '', null);
 
-             $renewpassword = $this->request->post("renewpassword", '', null);
 
-             $token = $this->request->post('__token__');
 
-             $rule = [
 
-                 'oldpassword'   => 'require|regex:\S{6,30}',
 
-                 'newpassword'   => 'require|regex:\S{6,30}',
 
-                 'renewpassword' => 'require|regex:\S{6,30}|confirm:newpassword',
 
-                 '__token__'     => 'token',
 
-             ];
 
-             $msg = [
 
-                 'renewpassword.confirm' => __('Password and confirm password don\'t match')
 
-             ];
 
-             $data = [
 
-                 'oldpassword'   => $oldpassword,
 
-                 'newpassword'   => $newpassword,
 
-                 'renewpassword' => $renewpassword,
 
-                 '__token__'     => $token,
 
-             ];
 
-             $field = [
 
-                 'oldpassword'   => __('Old password'),
 
-                 'newpassword'   => __('New password'),
 
-                 'renewpassword' => __('Renew password')
 
-             ];
 
-             $validate = new Validate($rule, $msg, $field);
 
-             $result = $validate->check($data);
 
-             if (!$result) {
 
-                 $this->error(__($validate->getError()), null, ['token' => $this->request->token()]);
 
-             }
 
-             $ret = $this->auth->changepwd($newpassword, $oldpassword);
 
-             if ($ret) {
 
-                 $this->success(__('Reset password successful'), url('user/login'));
 
-             } else {
 
-                 $this->error($this->auth->getError(), null, ['token' => $this->request->token()]);
 
-             }
 
-         }
 
-         $this->view->assign('title', __('Change password'));
 
-         return $this->view->fetch();
 
-     }
 
-     public function attachment()
 
-     {
 
-         //设置过滤方法
 
-         $this->request->filter(['strip_tags']);
 
-         if ($this->request->isAjax()) {
 
-             $mimetypeQuery = [];
 
-             $where = [];
 
-             $filter = $this->request->request('filter');
 
-             $filterArr = (array)json_decode($filter, true);
 
-             if (isset($filterArr['mimetype']) && preg_match("/(\/|\,|\*)/", $filterArr['mimetype'])) {
 
-                 $this->request->get(['filter' => json_encode(array_diff_key($filterArr, ['mimetype' => '']))]);
 
-                 $mimetypeQuery = function ($query) use ($filterArr) {
 
-                     $mimetypeArr = array_filter(explode(',', $filterArr['mimetype']));
 
-                     foreach ($mimetypeArr as $index => $item) {
 
-                         $query->whereOr('mimetype', 'like', '%' . str_replace("/*", "/", $item) . '%');
 
-                     }
 
-                 };
 
-             } elseif (isset($filterArr['mimetype'])) {
 
-                 $where['mimetype'] = ['like', '%' . $filterArr['mimetype'] . '%'];
 
-             }
 
-             if (isset($filterArr['filename'])) {
 
-                 $where['filename'] = ['like', '%' . $filterArr['filename'] . '%'];
 
-             }
 
-             if (isset($filterArr['createtime'])) {
 
-                 $timeArr = explode(' - ', $filterArr['createtime']);
 
-                 $where['createtime'] = ['between', [strtotime($timeArr[0]), strtotime($timeArr[1])]];
 
-             }
 
-             $search = $this->request->get('search');
 
-             if ($search) {
 
-                 $where['filename'] = ['like', '%' . $search . '%'];
 
-             }
 
-             $model = new Attachment();
 
-             $offset = $this->request->get("offset", 0);
 
-             $limit = $this->request->get("limit", 0);
 
-             $total = $model
 
-                 ->where($where)
 
-                 ->where($mimetypeQuery)
 
-                 ->where('user_id', $this->auth->id)
 
-                 ->order("id", "DESC")
 
-                 ->count();
 
-             $list = $model
 
-                 ->where($where)
 
-                 ->where($mimetypeQuery)
 
-                 ->where('user_id', $this->auth->id)
 
-                 ->order("id", "DESC")
 
-                 ->limit($offset, $limit)
 
-                 ->select();
 
-             $cdnurl = preg_replace("/\/(\w+)\.php$/i", '', $this->request->root());
 
-             foreach ($list as $k => &$v) {
 
-                 $v['fullurl'] = ($v['storage'] == 'local' ? $cdnurl : $this->view->config['upload']['cdnurl']) . $v['url'];
 
-             }
 
-             unset($v);
 
-             $result = array("total" => $total, "rows" => $list);
 
-             return json($result);
 
-         }
 
-         $mimetype = $this->request->get('mimetype', '');
 
-         $mimetype = substr($mimetype, -1) === '/' ? $mimetype . '*' : $mimetype;
 
-         $this->view->assign('mimetype', $mimetype);
 
-         $this->view->assign("mimetypeList", \app\common\model\Attachment::getMimetypeList());
 
-         return $this->view->fetch();
 
-     }
 
- }
 
 
  |