RegisterController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: dingran
  5. * Date: 2019/2/20
  6. * Time: 上午11:09
  7. */
  8. namespace app\platform\controllers;
  9. use app\common\components\BaseController;
  10. use app\common\exceptions\AdminException;
  11. use app\common\helpers\Cache;
  12. use app\platform\modules\system\models\SystemSetting;
  13. use app\platform\modules\user\models\AdminUser;
  14. use app\platform\modules\user\models\OfficialWebsiteContact;
  15. use app\platform\modules\user\models\OfficialWebsiteTheme;
  16. use Illuminate\Http\Request;
  17. use Illuminate\Foundation\Auth\RegistersUsers;
  18. use app\platform\modules\user\models\YzUserProfile;
  19. use Illuminate\Validation\Rule;
  20. use Yunshop\Article\models\Article;
  21. class RegisterController extends BaseController
  22. {
  23. /*
  24. |--------------------------------------------------------------------------
  25. | Register Controller
  26. |--------------------------------------------------------------------------
  27. |
  28. | This controller handles the registration of new users as well as their
  29. | validation and creation. By default this controller uses a trait to
  30. | provide this functionality without requiring any additional code.
  31. |
  32. */
  33. use RegistersUsers {
  34. register as traitregister;
  35. }
  36. /**
  37. * Where to redirect users after login / registration.
  38. *
  39. * @var string
  40. */
  41. protected $redirectTo = '/admin';
  42. /**
  43. * Create a new controller instance.
  44. *
  45. * @return void
  46. */
  47. public function __construct()
  48. {
  49. // $this->middleware('guest');
  50. }
  51. /**
  52. * Get a validator for an incoming registration request.
  53. *
  54. * @param array $data
  55. * @return \Illuminate\Contracts\Validation\Validator
  56. */
  57. protected function validator(array $data)
  58. {
  59. return \Validator::make($data, [
  60. 'username' => 'required|max:255|unique:yz_admin_users',
  61. 'password' => 'required|min:6|confirmed',
  62. ]);
  63. }
  64. /**
  65. * 重定义注册页面
  66. *
  67. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  68. */
  69. public function showRegistrationForm()
  70. {
  71. return view('admin.auth.register');
  72. }
  73. /**
  74. * 自定义认证驱动
  75. * @return [type] [description]
  76. */
  77. protected function guard()
  78. {
  79. return auth()->guard('admin');
  80. }
  81. /**
  82. * Create a new user instance after a valid registration.
  83. *
  84. * @param array $data
  85. * @return User
  86. */
  87. protected function create(array $data)
  88. {
  89. $user_model = new AdminUser;
  90. $user_model->fill([
  91. 'username' => $data['username'],
  92. 'password' => bcrypt($data['password']),
  93. ]);
  94. dump($user_model->save());
  95. return $user_model;
  96. }
  97. public function register(Request $request)
  98. {
  99. try {
  100. $this->traitregister($request);
  101. } catch (\Exception $e) {
  102. throw new AdminException($e->getMessage());
  103. }
  104. $data = [
  105. 'mobile' => request()->profile['mobile'],
  106. 'uid' => \Auth::guard('admin')->user()->uid
  107. ];
  108. $profile_model = new YzUserProfile;
  109. $profile_model->fill($data);
  110. $validator = $profile_model->validator();
  111. if ($validator->fails()) {
  112. return $this->errorJson($validator->messages());
  113. } else {
  114. $profile_model->save();
  115. }
  116. }
  117. //独立框架官网提交电话信息
  118. public function contactInformation()
  119. {
  120. $name = request()->name;
  121. $name = empty($name) ? "" : $name;
  122. $mobile = request()->mobile;
  123. $mobile = empty($mobile) ? "" : $mobile;
  124. if (empty($name) || empty($mobile)) {
  125. return $this->errorJson("数据为空");
  126. }
  127. $data = [
  128. "nickname" => $name,
  129. "mobile" => $mobile,
  130. "created_at" => time(),
  131. "updated_at" => time()
  132. ];
  133. OfficialWebsiteContact::insert($data);
  134. return $this->successJson("成功");
  135. }
  136. public function followArticle()
  137. {
  138. $page = request()->page;
  139. $page = empty($page) ? 0 : $page;
  140. $theme = OfficialWebsiteTheme::where("is_default",1)->first();
  141. $basic = [];
  142. if ($theme) {
  143. $basic = $theme->basic ? json_decode($theme->basic,true) : [];
  144. }
  145. //获取最新的文章
  146. $start = $page*3;
  147. $news = Article::where("state",1)->where("type","!=",1)->orderBy("id","desc")->offset($start)->limit(3);
  148. if ($basic && $basic['cus_uniacid']) {
  149. $news->where('uniacid',$basic['cus_uniacid']);
  150. }
  151. $news = $news->get();
  152. $news = empty($news) ? [] : $news->toArray();
  153. if ($news) {
  154. foreach ($news as $kk=>$vv) {
  155. $news[$kk]['detail_url'] = $_SERVER['REQUEST_SCHEME'] . '://' .$_SERVER['HTTP_HOST']."/officialwebsite.php?page_name=resource_detail&article=".$vv['id'];
  156. $news[$kk]['thumb'] = yz_tomedia($vv['thumb']);
  157. }
  158. }
  159. //获取虚拟阅读量多的文章
  160. $read = Article::where("state",1)->where("type","!=",1)->orderBy("virtual_read_num","desc")->offset($start)->limit(3);
  161. if ($basic && $basic['cus_uniacid']) {
  162. $read->where('uniacid',$basic['cus_uniacid']);
  163. }
  164. $read = $read->get();
  165. $read = empty($read) ? [] : $read->toArray();
  166. if ($read) {
  167. foreach ($read as $kk=>$vv) {
  168. $read[$kk]['detail_url'] = $_SERVER['REQUEST_SCHEME'] . '://' .$_SERVER['HTTP_HOST']."/officialwebsite.php?page_name=resource_detail&article=".$vv['id'];
  169. $read[$kk]['thumb'] = yz_tomedia($vv['thumb']);
  170. }
  171. }
  172. return $this->successJson("",["news"=>$news,"read"=>$read]);
  173. }
  174. /**
  175. * 注册用户
  176. *
  177. */
  178. public function registerAdmin()
  179. {
  180. $data = request()->all();
  181. $mobile_code = Cache::get('app_login_'.$data['mobile']);
  182. if (AdminUser::where('username' ,$data['username'])->first()){
  183. return $this->errorJson('该用户名已经存在');
  184. }
  185. if (!$data['captcha'] || app('captcha')->platformCheck($data['captcha']) == false) {
  186. return $this->errorJson('图形验证码错误');
  187. }
  188. if (!$mobile_code) {
  189. return $this->errorJson('手机验证码已过期');
  190. } elseif ($mobile_code != $data['mobile_code']) {
  191. return $this->errorJson('手机验证码错误');
  192. }
  193. $data['avatar'] = \Setting::get('shop.member')['headimg'] ? : " ";
  194. $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
  195. empty($loginset['endtime']) ? $data['endtime'] = 0 : $data['endtime'] = strtotime("+ {$loginset['endtime']} day");
  196. empty($loginset['application_number']) ? $data['application_number'] = 0 : $data['application_number'] = $loginset['application_number'];
  197. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password']) > 0) {
  198. return $this->errorJson(['密码不能含有中文']);
  199. }
  200. if ($loginset['password_verify'] == 1) {
  201. $validatePassword = validatePassword($data['password']);
  202. if ($validatePassword !== true) {
  203. return $this->errorJson($validatePassword);
  204. }
  205. }
  206. if (!$data) {
  207. return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
  208. }
  209. return $this->returnMessage(0, $data);
  210. }
  211. public function registerCode()
  212. {
  213. $mobile = request()->mobile;
  214. if (!$mobile) {
  215. return $this->errorJson('手机号填写错误');
  216. }
  217. return (new ResetpwdController())->sendSmsV3($mobile, '86', 4); //只要不等于2或3都会走通用手机验证码发送
  218. }
  219. /**
  220. * 注册页面信息
  221. */
  222. public function registerSite()
  223. {
  224. $data = [];
  225. $login_set = SystemSetting::settingLoad('loginset', 'system_loginset');
  226. $data['agreement_title'] = $login_set['agreement_title'] ?: '';
  227. $data['agreement_content'] = $login_set['agreement_content'] ?: '';
  228. $data['password_verify'] = $login_set['password_verify'] ?: 0;
  229. return $this->successJson('ok', $data);
  230. }
  231. /**
  232. * 刷新注册页面验证码
  233. */
  234. public function refreshCaptcha()
  235. {
  236. $captcha = app('captcha');
  237. $captcha_base64 = $captcha->create('default', true, true);
  238. return $this->successJson('成功', $captcha_base64['img']);
  239. }
  240. /**
  241. * 返回消息
  242. *
  243. * @param $sign 1: 修改, 0: 添加
  244. * @param null $data 参数
  245. * @param array $user 用户信息
  246. * @return \Illuminate\Http\JsonResponse
  247. */
  248. public function returnMessage($sign, $data = null, $user = [])
  249. {
  250. if ($sign && !$user) {
  251. return $this->check(AdminUser::returnData('0', AdminUser::NO_DATA));
  252. }
  253. $validate = $this->validate($this->rules(), $data, $this->message());
  254. if ($sign) {
  255. $validate = $this->validate($this->rules($user), $data, $this->message());
  256. }
  257. if ($validate) {
  258. return $validate;
  259. }
  260. $data['password'] = bcrypt($data['password']);
  261. return $this->check(AdminUser::saveData($data, $user));
  262. }
  263. /**
  264. * 处理表单验证
  265. *
  266. * @param array $rules
  267. * @param \Request|null $request
  268. * @param array $messages
  269. * @param array $customAttributes
  270. * @return \Illuminate\Http\JsonResponse
  271. */
  272. public function validate($rules, $request = null, $messages = [], $customAttributes = [])
  273. {
  274. if (!isset($request)) {
  275. $request = request();
  276. }
  277. $validator = $this->getValidationFactory()->make($request, $rules, $messages, $customAttributes);
  278. if ($validator->fails()) {
  279. return $this->errorJson($validator->errors()->all());
  280. }
  281. }
  282. /**
  283. * 表单验证规则
  284. *
  285. * @param $user
  286. * @param $data
  287. * @return array
  288. */
  289. public function rules($user = [], $data = [])
  290. {
  291. $rules = [];
  292. if (request()->path() == "admin/user/create") {
  293. $rules = [
  294. // 'username' => 'required|regex:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_\-]{3,30}$/u|unique:yz_admin_users',
  295. // 'username' => 'required|unique:yz_admin_users',
  296. 'username' => [
  297. 'required',
  298. Rule::unique('yz_admin_users')->where(function($q){
  299. return $q->whereNull('deleted_at');
  300. })
  301. ],
  302. // 'mobile' => 'required|regex:/^1[3456789]\d{9}$/|unique:yz_users_profile',
  303. 'mobile' => [
  304. 'required',
  305. 'regex:/^1[3456789]\d{9}$/',
  306. Rule::unique('yz_users_profile')->where(function($q){
  307. return $q->whereNull('deleted_at');
  308. })
  309. ]
  310. ];
  311. }else if(request()->path() == "admin/user/edit") {
  312. $rules = [
  313. // 'username' => 'required|regex:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_\-]{3,30}$/u|unique:yz_admin_users,username,'.$user['uid'].',uid',
  314. // 'username' => 'required|unique:yz_admin_users,username,'.$user['uid'].',uid',
  315. 'username' => [
  316. 'required',
  317. Rule::unique('yz_admin_users')->where(function($q) use($user){
  318. return $q->whereNull('deleted_at')->where('uid','<>',$user['uid']);
  319. })
  320. ],
  321. // 'mobile' => 'required|regex:/^1[3456789]\d{9}$/|unique:yz_users_profile,mobile,'.$user['hasOneProfile']['id'],
  322. 'mobile' => [
  323. 'required',
  324. 'regex:/^1[3456789]\d{9}$/',
  325. Rule::unique('yz_users_profile')->where(function($q) use($user){
  326. return $q->whereNull('deleted_at')->where('id','<>',$user['hasOneProfile']['id']);
  327. })
  328. ]
  329. ];
  330. }
  331. if (request()->path() != "admin/user/edit") {
  332. if (request()->path() == "admin/user/modify_user" && !$data['password']) {
  333. return $rules;
  334. }
  335. $rules['password'] = 'required';
  336. $rules['re_password'] = 'same:password';
  337. }
  338. return $rules;
  339. }
  340. /**
  341. * 表单验证自定义错误消息
  342. *
  343. * @return array
  344. */
  345. public function message()
  346. {
  347. return [
  348. 'username.required' => '用户名不能为空',
  349. 'username.regex' => '用户名格式不正确',
  350. 'username.unique' => '用户名已存在',
  351. 'mobile.required' => '手机号不能为空',
  352. 'mobile.regex' => '手机号格式不正确',
  353. 'mobile.unique' => '手机号已存在',
  354. 'password.required' => '密码不能为空',
  355. 're_password.same' => '两次密码不一致',
  356. ];
  357. }
  358. /**
  359. * 返回 json 信息
  360. *
  361. * @param $param
  362. * @return \Illuminate\Http\JsonResponse
  363. */
  364. public function check($param)
  365. {
  366. if ($param['sign'] == 1) {
  367. return $this->successJson('成功');
  368. } else {
  369. return $this->errorJson([$param['message']]);
  370. }
  371. }
  372. }