UserController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <?php
  2. namespace App\Http\Controllers\Home;
  3. use Hash;
  4. use Auth;
  5. use Config;
  6. use Request;
  7. use Validator;
  8. use App\Models\User;
  9. use App\Models\Active;
  10. use App\Models\Course;
  11. use App\Libs\Aliyun\Sms;
  12. use App\Models\ActivesUser;
  13. use App\Models\UsersProfile;
  14. use App\Http\Requests\MobileRequest;
  15. use App\Http\Requests\PasswordRequest;
  16. use App\Http\Requests\UserProfileRequest;
  17. use App\Http\Controllers\Home\BaseController;
  18. class UserController extends BaseController
  19. {
  20. /* 视图文件相对路径 */
  21. protected $view = 'home.user.index';
  22. protected $view_act = 'home.user.active';
  23. protected $view_actSco = 'home.user.active_score';
  24. protected $view_cor = 'home.user.course';
  25. protected $view_pro = 'home.user.profile';
  26. protected $view_pwd = 'home.user.password';
  27. protected $view_secur = 'home.user.security';
  28. protected $view_mobile = 'home.user.mobile';
  29. protected $view_email = 'home.user.email';
  30. protected $view_forget = 'auth.forget';
  31. protected $education = [
  32. '初中以下', '初中', '中专', '高中', '大专',
  33. '本科', '研究生', '硕士', '博士', '博士后'
  34. ];
  35. public function __construct(ActivesUser $activesUser)
  36. {
  37. $this->activesUser = $activesUser;
  38. parent::__construct();
  39. }
  40. public function getUser()
  41. {
  42. $user = User::find(Auth::user()->id);
  43. $user->mobile = $this->encryptMobile($user->mobile);
  44. return $user;
  45. }
  46. // 会员中心首页
  47. public function index()
  48. {
  49. $view_para = array_add($this->view_para, 'user', $this->getUser());
  50. return view($this->view, $view_para);
  51. }
  52. // 参与活动
  53. public function act()
  54. {
  55. $actives = User::find(Auth::user()->id)->actives;
  56. $view_para = array_add($this->view_para, 'actives', $actives);
  57. $view_para = array_add($view_para, 'model_activesUser', $this->activesUser);
  58. return view($this->view_act, $view_para);
  59. }
  60. // 参加课程
  61. public function cor()
  62. {
  63. $courses = User::find(Auth::user()->id)->courses;
  64. $view_para = array_add($this->view_para, 'courses', $courses);
  65. return view($this->view_cor, $view_para);
  66. }
  67. /* 更改资料 */
  68. // 页面展示
  69. public function proView()
  70. {
  71. $profile = UsersProfile::where('id', Auth::user()->id)->first();
  72. $view_para = array_add($this->view_para, 'pro', $profile);
  73. $view_para = array_add($view_para, 'education', $this->education);
  74. return view($this->view_pro, $view_para);
  75. }
  76. // 表单处理
  77. public function proPost(UserProfileRequest $request)
  78. {
  79. UsersProfile::updateOrCreate(
  80. ['id' => Auth::user()->id], Request::except('_token')
  81. );
  82. return redirect()->route('user_profile')->with('success', '更改资料成功');
  83. }
  84. /* 安全中心首页 */
  85. public function securityView()
  86. {
  87. $view_para = array_add($this->view_para, 'user', $this->getUser());
  88. return view($this->view_secur, $view_para);
  89. }
  90. /* 修改密码 */
  91. // 页面展示
  92. public function pwdView()
  93. {
  94. return view($this->view_pwd, $this->view_para);
  95. }
  96. // 表单处理
  97. public function pwdPost(PasswordRequest $request)
  98. {
  99. $user = User::find(Auth::user()->id);
  100. if ( !Hash::check(Request::input('old_password'), $user->password) ) {
  101. return redirect()->back()
  102. ->withErrors(['old_password' => '原密码错误'])
  103. ->withInput();
  104. }
  105. $user->password = bcrypt(Request::input('password'));
  106. $user->save();
  107. return redirect()->route('user_secur')->with('success', '修改密码成功');
  108. }
  109. /* 修改手机 */
  110. // 页面展示
  111. public function mobileView()
  112. {
  113. $view_para = array_add($this->view_para, 'user', $this->getUser());
  114. return view($this->view_mobile, $view_para);
  115. }
  116. // 表单处理
  117. public function mobilePost(MobileRequest $request)
  118. {
  119. $validator = Validator::make(
  120. Request::all(), [
  121. 'captcha' => 'required|in:'.session('sms.'.Request::input('mobile').'.mobile')
  122. ], [], [
  123. 'captcha' => '验证码'
  124. ]
  125. );
  126. if ($validator->fails()) {
  127. return redirect()->back()
  128. ->withErrors($validator)
  129. ->withInput();
  130. }
  131. User::where('id', Auth::user()->id)
  132. ->update(['mobile', Request::input('mobile')]);
  133. return redirect()->route('user_secur')->with('success', '修改手机成功');
  134. }
  135. /* 修改邮箱 */
  136. // 页面展示
  137. public function emailView()
  138. {
  139. $view_para = array_add($this->view_para, 'user', $this->getUser());
  140. return view($this->view_email, $view_para);
  141. }
  142. // 表单处理
  143. public function emailPost()
  144. {
  145. $validator = Validator::make(
  146. Request::all(), [
  147. 'email' => 'email'
  148. ]
  149. );
  150. if ($validator->fails()) {
  151. return redirect()->back()
  152. ->withErrors($validator)
  153. ->withInput();
  154. }
  155. User::where('id', Auth::user()->id)
  156. ->update(['email' => Request::input('email')]);
  157. return redirect()->route('user_secur')->with('success', '修改邮箱成功');
  158. }
  159. /* 忘记密码 */
  160. // 页面展示
  161. public function forgetView()
  162. {
  163. return view($this->view_forget, $this->view_para);
  164. }
  165. // 表单处理
  166. public function forgetPost(PasswordRequest $request)
  167. {
  168. $name = Request::input('name');
  169. $user = User::where('name', $name)->first();
  170. $validator = Validator::make(
  171. Request::all(), [
  172. 'captcha' => 'required|in:'.session('sms.'.$user->mobile.'.password')
  173. ], [], [
  174. 'captcha' => '验证码'
  175. ]
  176. );
  177. if ($validator->fails()) {
  178. return redirect()->back()
  179. ->withErrors($validator)
  180. ->withInput();
  181. }
  182. $user->password = bcrypt(Request::input('password'));
  183. $user->save();
  184. return redirect()->route('login');
  185. }
  186. // 给手机号码加密
  187. public function encryptMobile($mobile)
  188. {
  189. $encryptMb = substr_replace($mobile, '****', 3, 4);
  190. return $encryptMb;
  191. }
  192. // 根据手机号码或会员账号发送短信
  193. public function sendSmsByMobileOrName()
  194. {
  195. $mobile = Request::input('mobile');
  196. $name = Request::input('name');
  197. $templete = Request::input('templete');
  198. if (!$mobile && !$name) {
  199. return response()
  200. ->json(['error' => '请输入手机号码或会员账号']);
  201. }
  202. if ($mobile) {
  203. if (!preg_match('/^1[3-9][0-9]{9}$/', $mobile)) {
  204. return response()
  205. ->json(['error' => '请输入正确的新手机号码']);
  206. }
  207. }
  208. if ($name) {
  209. $user = User::where('name', $name)->first();
  210. if (!$user) {
  211. return response()
  212. ->json(['error' => '会员账号不存在']);
  213. }
  214. $mobile = $user->mobile;
  215. }
  216. $sms = new Sms();
  217. $smsCode = rand(100000, 999999);
  218. $templeteCode = Config::get('sms.templeteCode.'.$templete);
  219. $response = $sms->sendSms($mobile, $templeteCode, $smsCode);
  220. if ('OK' == $response->Code) {
  221. session(['sms.'.$mobile.'.'.$templete => $smsCode]);
  222. return response()
  223. ->json(['result' => 'success']);
  224. }
  225. else {
  226. return response()
  227. ->json(['result' => '短信'.$response->Message]);
  228. }
  229. }
  230. // 根据会员账号返回手机号码
  231. public function getMobileFromName()
  232. {
  233. $name = Request::input('name');
  234. $user = User::where('name', $name)->firstOrFail();
  235. $user->mobile = $this->encryptMobile($user->mobile);
  236. return $user->mobile;
  237. }
  238. }