ProfileController.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use App\Models\Area;
  4. use App\Models\EmailToken;
  5. use App\Models\User;
  6. use App\Services\SmsService;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\File;
  10. use Illuminate\Support\Facades\Hash;
  11. use Illuminate\Support\Facades\Storage;
  12. use Intervention\Image\Facades\Image;
  13. class ProfileController extends Controller
  14. {
  15. /*个人基本资料*/
  16. public function anyBase(Request $request)
  17. {
  18. $user = $request->user();
  19. if($request->isMethod('POST')){
  20. $request->flash();
  21. $validateRules = [
  22. 'name' => 'required|max:128',
  23. 'title' => 'sometimes|max:128',
  24. 'description' => 'sometimes|max:9999',
  25. ];
  26. $this->validate($request,$validateRules);
  27. $user->name = $request->input('name');
  28. $user->gender = $request->input('gender');
  29. if($request->input('birthday')){
  30. $user->birthday = $request->input('birthday');
  31. }
  32. $user->title = $request->input('title');
  33. $user->description = $request->input('description');
  34. $user->province = $request->input('province');
  35. $user->city = $request->input('city');
  36. if($request->hasFile('qrcode')){
  37. $validateRules = [
  38. 'qrcode' => 'required|image|max:'.config('tipask.upload.image_size'),
  39. ];
  40. $this->validate($request,$validateRules);
  41. $file = $request->file('qrcode');
  42. $extension = $file->getClientOriginalExtension();
  43. $filePath = 'qrcodes/'.gmdate("Y")."/".gmdate("m")."/".uniqid(str_random(8)).'.'.$extension;
  44. Storage::disk('local')->put($filePath,File::get($file));
  45. Image::make(storage_path('app/'.$filePath))->resize(320,435)->save();
  46. $user->qrcode = str_replace("/","-",$filePath);
  47. }
  48. $user->save();
  49. return $this->success(route('auth.profile.base'),'个人资料修改成功');
  50. }
  51. $provinces = Area::provinces();
  52. $cities = Area::cities($user->province);
  53. $data = [
  54. 'provinces' => $provinces,
  55. 'cities' => $cities,
  56. ];
  57. return view('theme::profile.base')->with('data',$data);
  58. }
  59. /**
  60. * 修改用户头像
  61. * @param Request $request
  62. */
  63. public function postAvatar(Request $request)
  64. {
  65. $validateRules = [
  66. 'user_avatar' => 'required|image',
  67. ];
  68. if($request->hasFile('user_avatar')){
  69. $this->validate($request,$validateRules);
  70. $user_id = $request->user()->id;
  71. $file = $request->file('user_avatar');
  72. $avatarDir = User::getAvatarDir($user_id);
  73. $extension = strtolower($file->getClientOriginalExtension());
  74. $extArray = array('png', 'gif', 'jpeg', 'jpg');
  75. if(in_array($extension, $extArray)){
  76. if($extension != 'jpg'){
  77. Image::make(File::get($file))->save(storage_path('app/'.User::getAvatarPath($user_id,'origin')));
  78. }else{
  79. Storage::disk('local')->put($avatarDir.'/'.User::getAvatarFileName($user_id,'origin').'.'.$extension,File::get($file));
  80. }
  81. }else{
  82. return response('error');
  83. }
  84. return response()->json(array(
  85. 'status' => 1,
  86. 'msg' => '头像上传成功'
  87. ));
  88. }
  89. if($request->isMethod('POST')){
  90. $x = intval($request->input('x'));
  91. $y = intval($request->input('y'));
  92. $width = intval($request->input('width'));
  93. $height = intval($request->input('height'));
  94. $user_id = $request->user()->id;
  95. File::delete(storage_path('app/'.User::getAvatarPath($user_id,'big')));
  96. File::delete(storage_path('app/'.User::getAvatarPath($user_id,'middle')));
  97. File::delete(storage_path('app/'.User::getAvatarPath($user_id,'small')));
  98. Image::make(storage_path('app/'.User::getAvatarPath($user_id,'origin')))->crop($width,$height,$x,$y)->resize(128,128)->save(storage_path('app/'.User::getAvatarPath($user_id,'big')));
  99. Image::make(storage_path('app/'.User::getAvatarPath($user_id,'origin')))->crop($width,$height,$x,$y)->resize(64,64)->save(storage_path('app/'.User::getAvatarPath($user_id,'middle')));
  100. Image::make(storage_path('app/'.User::getAvatarPath($user_id,'origin')))->crop($width,$height,$x,$y)->resize(24,24)->save(storage_path('app/'.User::getAvatarPath($user_id,'small')));
  101. return response()->json(array(
  102. 'status' => 1,
  103. 'msg' => '头像截剪成功'
  104. ));
  105. }
  106. }
  107. /**
  108. * 修改用户密码
  109. * @param Request $request
  110. */
  111. public function anyPassword(Request $request)
  112. {
  113. if($request->isMethod('POST')){
  114. $validateRules = [
  115. 'old_password' => 'required|min:6|max:16',
  116. 'password' => 'required|min:6|max:16',
  117. 'password_confirmation'=>'same:password',
  118. 'captcha' => 'required|captcha',
  119. ];
  120. $this->validate($request,$validateRules);
  121. $user = $request->user();
  122. if(Hash::check($request->input('old_password'),$user->password)){
  123. $user->password = Hash::make($request->input('password'));
  124. $user->save();
  125. Auth()->logout();
  126. return $this->success(route('auth.user.login'),'密码修改成功,请重新登录');
  127. }
  128. return redirect(route('auth.profile.password'))
  129. ->withErrors([
  130. 'old_password' => '原密码错误!',
  131. ]);
  132. }
  133. return view('theme::profile.password');
  134. }
  135. /*修改邮箱*/
  136. public function anyEmail(Request $request)
  137. {
  138. if($request->isMethod('POST'))
  139. {
  140. $validateRules = [
  141. 'email' => 'required|email|unique:users,email,'.$request->user()->id,
  142. 'captcha' => 'required|captcha',
  143. ];
  144. $this->validate($request,$validateRules);
  145. if($request->input('email') !== $request->user()->email){
  146. $request->user()->email = $request->input('email');
  147. $request->user()->status = 0;
  148. $request->user()->save();
  149. $emailToken = EmailToken::create([
  150. 'email' =>$request->input('email'),
  151. 'action' => 'verify',
  152. 'token' => EmailToken::createToken(),
  153. ]);
  154. if($emailToken){
  155. $subject = '欢迎注册'.Setting()->get('website_name').',请激活您注册的邮箱!';
  156. $content = "「".$request->user()->name."」您好,请激活您在 ".Setting()->get('website_name')." 的注册邮箱!<br /> 请在1小时内点击该链接激活注册账号 → ".route('auth.email.verifyToken',['action'=>$emailToken->action,'token'=>$emailToken->token])."<br />如非本人操作,请忽略此邮件!";
  157. $this->sendEmail($emailToken->email,$subject,$content);
  158. }
  159. return $this->success(route('auth.profile.email'),'邮箱修改成功!一封验证邮件已经发到您的邮箱'.$request->user()->email.',请登陆邮箱进行验证!');
  160. }
  161. }
  162. return view('theme::profile.email');
  163. }
  164. public function anyMobile(Request $request)
  165. {
  166. if($request->isMethod('post')){
  167. $validateRules = [
  168. 'mobile' => 'required|max:11,'.$request->user()->id,
  169. 'code' => 'required|min:4|max:10',
  170. ];
  171. $this->validate($request,$validateRules);
  172. $mobile = $request->input('mobile');
  173. $code = $request->input('code');
  174. if(!SmsService::verifySmsCode($mobile,$code)){
  175. return $this->error(route('auth.profile.mobile'),"短信验证码错误,请重新验证");
  176. }
  177. $request->user()->mobile = $mobile;
  178. $request->user()->status = 1;
  179. $request->user()->save();
  180. $request->user()->userData->mobile_status = 1;
  181. $request->user()->userData->save();
  182. return $this->success(route('auth.profile.mobile'),'手机号码绑定成功!');
  183. }
  184. return view('theme::profile.mobile');
  185. }
  186. /*第三方系统账号绑定*/
  187. public function anyOauth()
  188. {
  189. return view('theme::profile.oauth');
  190. }
  191. /*消息通知设置*/
  192. public function anyNotification(Request $request)
  193. {
  194. if($request->isMethod('post')){
  195. $siteNotifications = $request->input('site_notifications','');
  196. $emailNotifications = $request->input('email_notifications','');
  197. $request->user()->site_notifications = '';
  198. if($siteNotifications){
  199. $request->user()->site_notifications = implode(",",$siteNotifications);
  200. }
  201. $request->user()->email_notifications = '';
  202. if($emailNotifications){
  203. $request->user()->email_notifications = implode(",",$emailNotifications);
  204. }
  205. $request->user()->save();
  206. return $this->success(route('auth.profile.notification'),'通知提醒策略设置成功');
  207. }
  208. $siteNotifications = explode(",",$request->user()->site_notifications);
  209. $emailNotifications = explode(",",$request->user()->email_notifications);
  210. return view('theme::profile.notification')->with(compact('siteNotifications','emailNotifications'));
  211. }
  212. }