ModifyController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Storage;
  5. use Illuminate\Validation\Rule;
  6. use App\Http\Controllers\Controller;
  7. use App\Http\Traits\CommonTrait;
  8. use App\Models\User;
  9. use App\Models\UserNameLog;
  10. use App\Models\UserEmailLog;
  11. use App\Models\FileLib;
  12. use App\Rules\AllowNickname;
  13. class ModifyController extends Controller
  14. {
  15. use CommonTrait;
  16. private User $userModel;
  17. private UserNameLog $userNameLogModel;
  18. private UserEmailLog $userEmailLogModel;
  19. public function __construct(
  20. User $user,
  21. UserNameLog $UserNameLogModel,
  22. UserEmailLog $userEmailLogModel
  23. ) {
  24. $this->middleware(['front', 'auth']);
  25. $this->userModel = $user;
  26. $this->userNameLogModel = $UserNameLogModel;
  27. $this->userEmailLogModel = $userEmailLogModel;
  28. }
  29. /**
  30. * 회원 정보 수정
  31. * @method GET
  32. * @see /account/modify
  33. */
  34. public function index(Request $request)
  35. {
  36. $this->isCertified($request);
  37. $request->session()->reflash();
  38. $changeNicknameDayLeft = $this->userNameLogModel->getDayLeft(UID);
  39. $changeEmailDayLeft = $this->userEmailLogModel->getDayLeft(UID);
  40. $userThumbWidth = config('user_thumb_width', THUMB_MAX_WIDTH);
  41. $userThumbHeight = config('user_thumb_height', THUMB_MAX_HEIGHT);
  42. $useUserThumb = config('use_user_thumb', 0);
  43. return view(layout('account.modify'), [
  44. 'user' => $request->user(),
  45. 'changeNicknameDayLeft' => $changeNicknameDayLeft,
  46. 'changeEmailDayLeft' => $changeEmailDayLeft,
  47. 'userThumbWidth' => $userThumbWidth,
  48. 'userThumbHeight' => $userThumbHeight,
  49. 'useUserThumb' => $useUserThumb,
  50. 'menuID' => 'MODIFY'
  51. ]);
  52. }
  53. /**
  54. * 회원 정보 수정 처리
  55. * @method POST
  56. * @see /account/modify
  57. */
  58. public function update(Request $request, FileLib $fileLib)
  59. {
  60. $request->session()->reflash();
  61. $rules = [
  62. 'nickname' => ['required', 'string', 'min:2', 'max:20',
  63. new AllowNickname, Rule::unique('users', 'nickname')->ignore(UID, 'id')],
  64. 'thumb_img' => 'nullable|mimes:jpg,jpeg,gif,png|max:3192',
  65. 'today_message' => ['nullable', 'string', 'max:40'],
  66. 'about_me' => ['nullable', 'string', 'max:500'],
  67. 'is_open_profile' => 'nullable|numeric|in:0,1',
  68. 'receive_email' => 'nullable|numeric|in:0,1'
  69. ];
  70. $attributes = [
  71. 'nickname' => '닉네임',
  72. 'thumb_img' => '프로필 이미지',
  73. 'today_message' => '오늘의 한마디',
  74. 'about_me' => '자기소개',
  75. 'is_open_profile' => '정보 공개 여부',
  76. 'receive_email' => '수신여부 - 이메일(Email)'
  77. ];
  78. $messages = [
  79. 'profile.max' => '첨부 가능한 이미지의 최대 용량은 3MB 입니다.'
  80. ];
  81. $posts = $this->validate($request, $rules, $messages, $attributes);
  82. $user = $request->user();
  83. if(!$this->userNameLogModel->isUpdateAble($user->id)) {
  84. $posts['nickname'] = $user->nickname;
  85. }
  86. if(!$request->has('is_open_profile')) {
  87. $posts['is_open_profile'] = 0;
  88. }
  89. if(!$request->has('receive_email')) {
  90. $posts['receive_email'] = 0;
  91. }
  92. $saveData = [
  93. 'nickname' => $posts['nickname'],
  94. 'today_message' => $posts['today_message'],
  95. 'about_me' => $posts['about_me'],
  96. 'is_open_profile' => $posts['is_open_profile'],
  97. 'receive_email' => $posts['receive_email']
  98. ];
  99. // 파일 삭제
  100. if($request->get('thumb_img_del'))
  101. {
  102. $thumbPath = public_path($request->user()->thumb);
  103. if(file_exists($thumbPath)) {
  104. if(unlink($thumbPath)) {
  105. $saveData['thumb'] = null;
  106. }
  107. }
  108. }else if($request->hasFile('thumb_img')) {
  109. // 파일 저장
  110. $thumb = $request->file('thumb_img');
  111. $savePath = $thumb->store(UPLOAD_PATH_PUBLIC . DIRECTORY_SEPARATOR . UPLOAD_PATH_USER_THUMB . DIRECTORY_SEPARATOR . $user->id);
  112. $storagePath = Storage::path($savePath);
  113. $saveData['thumb'] = Storage::url($savePath);
  114. // 이미지 크기 조정
  115. $fileLib->resize($storagePath, THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT);
  116. }
  117. // 이름 변경 확인
  118. if($user->nickname != $posts['nickname']) {
  119. $this->userNameLogModel->setLog($user, $posts['nickname']);
  120. }
  121. $this->userModel->updater(UID, $saveData);
  122. return redirect()->route('account.profile')->withErrors('회원 정보가 수정되었습니다.');
  123. }
  124. }