ModifyController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. return view(layout('account.modify'), [
  43. 'user' => $request->user(),
  44. 'changeNicknameDayLeft' => $changeNicknameDayLeft,
  45. 'changeEmailDayLeft' => $changeEmailDayLeft,
  46. 'userThumbWidth' => $userThumbWidth,
  47. 'userThumbHeight' => $userThumbHeight,
  48. 'menuID' => 'MODIFY'
  49. ]);
  50. }
  51. /**
  52. * 회원 정보 수정 처리
  53. * @method POST
  54. * @see /account/modify
  55. */
  56. public function update(Request $request, FileLib $fileLib)
  57. {
  58. $request->session()->reflash();
  59. $rules = [
  60. 'nickname' => ['required', 'string', 'min:2', 'max:20',
  61. new AllowNickname, Rule::unique('users', 'nickname')->ignore(UID, 'id')],
  62. 'thumb_img' => 'nullable|mimes:jpg,jpeg,gif,png|max:3192',
  63. 'today_message' => ['nullable', 'string', 'max:40'],
  64. 'about_me' => ['nullable', 'string', 'max:500'],
  65. 'is_open_profile' => 'nullable|numeric|in:0,1',
  66. 'receive_email' => 'nullable|numeric|in:0,1'
  67. ];
  68. $attributes = [
  69. 'nickname' => '닉네임',
  70. 'thumb_img' => '프로필 이미지',
  71. 'today_message' => '오늘의 한마디',
  72. 'about_me' => '자기소개',
  73. 'is_open_profile' => '정보 공개 여부',
  74. 'receive_email' => '수신여부 - 이메일(Email)'
  75. ];
  76. $messages = [
  77. 'profile.max' => '첨부 가능한 이미지의 최대 용량은 3MB 입니다.'
  78. ];
  79. $posts = $this->validate($request, $rules, $messages, $attributes);
  80. $user = $request->user();
  81. if(!$this->userNameLogModel->isUpdateAble($user->id)) {
  82. $posts['nickname'] = $user->name;
  83. }
  84. if(!$request->has('is_open_profile')) {
  85. $posts['is_open_profile'] = 0;
  86. }
  87. if(!$request->has('receive_email')) {
  88. $posts['receive_email'] = 0;
  89. }
  90. $saveData = [
  91. 'nickname' => $posts['nickname'],
  92. 'today_message' => $posts['today_message'],
  93. 'about_me' => $posts['about_me'],
  94. 'is_open_profile' => $posts['is_open_profile'],
  95. 'receive_email' => $posts['receive_email']
  96. ];
  97. // 파일 삭제
  98. if($request->get('thumb_img_del'))
  99. {
  100. $thumbPath = public_path($request->user()->thumb);
  101. if(file_exists($thumbPath)) {
  102. if(unlink($thumbPath)) {
  103. $saveData['thumb'] = null;
  104. }
  105. }
  106. }else if($request->hasFile('thumb_img')) {
  107. // 파일 저장
  108. $thumb = $request->file('thumb_img');
  109. $savePath = $thumb->store(UPLOAD_PATH_PUBLIC . DIRECTORY_SEPARATOR . UPLOAD_PATH_USER_THUMB . DIRECTORY_SEPARATOR . $user->id);
  110. $storagePath = Storage::path($savePath);
  111. $saveData['thumb'] = Storage::url($savePath);
  112. // 이미지 크기 조정
  113. $fileLib->resize($storagePath, THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT);
  114. }
  115. // 이름 변경 확인
  116. if($user->nickname != $posts['nickname']) {
  117. $this->userNameLogModel->setLog($user, $posts['nickname']);
  118. }
  119. $this->userModel->updater(UID, $saveData);
  120. return redirect()->route('account.profile')->withErrors('회원 정보가 수정되었습니다.');
  121. }
  122. }