ModifyController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. 'receive_sms' => 'nullable|numeric|in:0,1'
  70. ];
  71. $attributes = [
  72. 'nickname' => '닉네임',
  73. 'thumb_img' => '프로필 이미지',
  74. 'today_message' => '오늘의 한마디',
  75. 'about_me' => '자기소개',
  76. 'is_open_profile' => '정보 공개 여부',
  77. 'receive_email' => '수신여부 - 이메일(Email)',
  78. 'receive_sms' => '수신여부 - 이메일(Sms)'
  79. ];
  80. $messages = [
  81. 'profile.max' => '첨부 가능한 이미지의 최대 용량은 3MB 입니다.'
  82. ];
  83. $posts = $this->validate($request, $rules, $messages, $attributes);
  84. $user = $request->user();
  85. if(!$this->userNameLogModel->isUpdateAble($user->id)) {
  86. $posts['nickname'] = $user->nickname;
  87. }
  88. if(!$request->has('is_open_profile')) {
  89. $posts['is_open_profile'] = 0;
  90. }
  91. if(!$request->has('receive_email')) {
  92. $posts['receive_email'] = 0;
  93. }
  94. if(!$request->has('receive_sms')) {
  95. $posts['receive_sms'] = 0;
  96. }
  97. $saveData = [
  98. 'nickname' => $posts['nickname'],
  99. 'today_message' => $posts['today_message'],
  100. 'about_me' => $posts['about_me'],
  101. 'is_open_profile' => $posts['is_open_profile'],
  102. 'receive_email' => $posts['receive_email'],
  103. 'receive_sms' => $posts['receive_sms']
  104. ];
  105. // 파일 삭제
  106. if($request->get('thumb_img_del'))
  107. {
  108. $thumbPath = public_path($request->user()->thumb);
  109. if(file_exists($thumbPath)) {
  110. if(unlink($thumbPath)) {
  111. $saveData['thumb'] = null;
  112. }
  113. }
  114. }else if($request->hasFile('thumb_img')) {
  115. // 파일 저장
  116. $thumb = $request->file('thumb_img');
  117. $savePath = $thumb->store(UPLOAD_PATH_PUBLIC . DIRECTORY_SEPARATOR . UPLOAD_PATH_USER_THUMB . DIRECTORY_SEPARATOR . $user->id);
  118. $storagePath = Storage::path($savePath);
  119. $saveData['thumb'] = Storage::url($savePath);
  120. // 이미지 크기 조정
  121. $fileLib->resize($storagePath, THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT);
  122. }
  123. // 이름 변경 확인
  124. if($user->nickname != $posts['nickname']) {
  125. $this->userNameLogModel->setLog($user, $posts['nickname']);
  126. }
  127. $this->userModel->updater(UID, $saveData);
  128. return redirect()->route('account.profile')->withErrors('회원 정보가 수정되었습니다.');
  129. }
  130. }