ProfileController.php 11 KB

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