ProfileController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  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. function upload_image($path, $file, $drive = 'oss')
  61. {
  62. $disk = Storage::disk($drive);
  63. //将图片上传到OSS中,并返回图片路径信息 值如:avatar/WsH9mBklpAQUBQB4mL.jpeg
  64. $path = $disk->put($path, $file);
  65. //由于图片不在本地,所以我们应该获取图片的完整路径,
  66. //值如:https://test.oss-cn-hongkong.aliyuncs.com/avatar/8GdIcz1NaCZ.jpeg
  67. return $disk->url($path);
  68. }
  69. /**
  70. * 修改用户头像
  71. * @param Request $request
  72. */
  73. public function postAvatar(Request $request)
  74. {
  75. $validateRules = [
  76. 'user_avatar' => 'required|image',
  77. ];
  78. if ($request->hasFile('user_avatar')) {
  79. $this->validate($request, $validateRules);
  80. $user_id = $request->user()->id;
  81. $file = $request->file('user_avatar');
  82. $avatarDir = User::getAvatarDir($user_id);
  83. $extension = strtolower($file->getClientOriginalExtension());
  84. $extArray = array('png', 'gif', 'jpeg', 'jpg');
  85. if (in_array($extension, $extArray)) {
  86. // if($extension != 'jpg'){
  87. // Image::make(File::get($file))->save(storage_path('app/'.User::getAvatarPath($user_id,'origin')));
  88. // Image::make(File::get($file))->save(app('path.public').'/static/uploads/user_origin_'.$user_id.'.jpg');
  89. $path = 'avatar/' . date("Ym/d", time());
  90. $data['qrcode'] = $this->upload_image($path, $request->user_avatar);
  91. DB::table('users')->where('id', '=', $user_id)->update($data);
  92. // }else{
  93. // Storage::disk('local')->put($avatarDir.'/'.User::getAvatarFileName($user_id,'origin').'.'.$extension,File::get($file));
  94. // }
  95. } else {
  96. return response('error');
  97. }
  98. return response()->json(array(
  99. 'url' => $data['qrcode'],
  100. 'msg' => '头像上传成功'
  101. ));
  102. }
  103. if ($request->isMethod('POST')) {
  104. $x = intval($request->input('x'));
  105. $y = intval($request->input('y'));
  106. $width = intval($request->input('width'));
  107. $height = intval($request->input('height'));
  108. $user_id = $request->user()->id;
  109. // File::delete(storage_path('app/'.User::getAvatarPath($user_id,'big')));
  110. // File::delete(storage_path('app/'.User::getAvatarPath($user_id,'middle')));
  111. // File::delete(storage_path('app/'.User::getAvatarPath($user_id,'small')));
  112. //
  113. // 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')));
  114. // 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')));
  115. // 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')));
  116. // $path = 'avatar/' . date("Ym/d", time());
  117. // $data['qrcode'] = $this->upload_image($path, $request->user_avatar);
  118. File::delete(app('path.public') . '/static/uploads/user_big_' . $user_id . '.jpg');
  119. File::delete(app('path.public') . '/static/uploads/user_middle_' . $user_id . '.jpg');
  120. File::delete(app('path.public') . '/static/uploads/user_small_' . $user_id . '.jpg');
  121. 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');
  122. 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');
  123. 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');
  124. $data['qrcode'] = '/static/uploads/user_big_' . $user_id . '.jpg';
  125. DB::table('users')->where('id', '=', $user_id)->update($data);
  126. return response()->json(array(
  127. 'status' => 1,
  128. 'msg' => '头像截剪成功'
  129. ));
  130. }
  131. }
  132. /**
  133. * 修改用户密码
  134. * @param Request $request
  135. */
  136. public function anyPassword(Request $request)
  137. {
  138. if ($request->isMethod('POST')) {
  139. $validateRules = [
  140. 'old_password' => 'required|min:6|max:16',
  141. 'password' => 'required|min:6|max:16',
  142. 'password_confirmation' => 'same:password',
  143. 'captcha' => 'required|captcha',
  144. ];
  145. $this->validate($request, $validateRules);
  146. $user = $request->user();
  147. if (Hash::check($request->input('old_password'), $user->password)) {
  148. $user->password = Hash::make($request->input('password'));
  149. $user->save();
  150. Auth()->logout();
  151. return $this->success(route('auth.user.login'), '密码修改成功,请重新登录');
  152. }
  153. return redirect(route('auth.profile.password'))
  154. ->withErrors([
  155. 'old_password' => '原密码错误!',
  156. ]);
  157. }
  158. return view('theme::profile.password');
  159. }
  160. /*修改邮箱*/
  161. public function anyEmail(Request $request)
  162. {
  163. if ($request->isMethod('POST')) {
  164. $validateRules = [
  165. 'email' => 'required|email|unique:users,email,' . $request->user()->id,
  166. 'captcha' => 'required|captcha',
  167. ];
  168. $this->validate($request, $validateRules);
  169. if ($request->input('email') !== $request->user()->email) {
  170. $request->user()->email = $request->input('email');
  171. $request->user()->status = 0;
  172. $request->user()->save();
  173. $emailToken = EmailToken::create([
  174. 'email' => $request->input('email'),
  175. 'action' => 'verify',
  176. 'token' => EmailToken::createToken(),
  177. ]);
  178. if ($emailToken) {
  179. $subject = '欢迎注册' . Setting()->get('website_name') . ',请激活您注册的邮箱!';
  180. $content = "「" . $request->user()->name . "」您好,请激活您在 " . Setting()->get('website_name') . " 的注册邮箱!<br /> 请在1小时内点击该链接激活注册账号 → " . route('auth.email.verifyToken', ['action' => $emailToken->action, 'token' => $emailToken->token]) . "<br />如非本人操作,请忽略此邮件!";
  181. $this->sendEmail($emailToken->email, $subject, $content);
  182. }
  183. return $this->success(route('auth.profile.email'), '邮箱修改成功!一封验证邮件已经发到您的邮箱' . $request->user()->email . ',请登陆邮箱进行验证!');
  184. }
  185. }
  186. return view('theme::profile.email');
  187. }
  188. public function anyMobile(Request $request)
  189. {
  190. if ($request->isMethod('post')) {
  191. $validateRules = [
  192. 'mobile' => 'required|max:11,' . $request->user()->id,
  193. 'code' => 'required|min:4|max:10',
  194. ];
  195. $this->validate($request, $validateRules);
  196. $mobile = $request->input('mobile');
  197. $code = $request->input('code');
  198. if (!SmsService::verifySmsCode($mobile, $code)) {
  199. return $this->error(route('auth.profile.mobile'), "短信验证码错误,请重新验证");
  200. }
  201. $request->user()->mobile = $mobile;
  202. $request->user()->status = 1;
  203. $request->user()->save();
  204. $request->user()->userData->mobile_status = 1;
  205. $request->user()->userData->save();
  206. return $this->success(route('auth.profile.mobile'), '手机号码绑定成功!');
  207. }
  208. return view('theme::profile.mobile');
  209. }
  210. /*第三方系统账号绑定*/
  211. public function anyOauth()
  212. {
  213. return view('theme::profile.oauth');
  214. }
  215. /*消息通知设置*/
  216. public function anyNotification(Request $request)
  217. {
  218. if ($request->isMethod('post')) {
  219. $siteNotifications = $request->input('site_notifications', '');
  220. $emailNotifications = $request->input('email_notifications', '');
  221. $request->user()->site_notifications = '';
  222. if ($siteNotifications) {
  223. $request->user()->site_notifications = implode(",", $siteNotifications);
  224. }
  225. $request->user()->email_notifications = '';
  226. if ($emailNotifications) {
  227. $request->user()->email_notifications = implode(",", $emailNotifications);
  228. }
  229. $request->user()->save();
  230. return $this->success(route('auth.profile.notification'), '通知提醒策略设置成功');
  231. }
  232. $siteNotifications = explode(",", $request->user()->site_notifications);
  233. $emailNotifications = explode(",", $request->user()->email_notifications);
  234. return view('theme::profile.notification')->with(compact('siteNotifications', 'emailNotifications'));
  235. }
  236. }