GroupController.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace App\Http\Controllers\Admin\User;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Validator;
  5. use App\Http\Controllers\Controller;
  6. use App\Models\User;
  7. use App\Models\UserGroup;
  8. class GroupController extends Controller
  9. {
  10. private User $userModel;
  11. private UserGroup $userGroupModel;
  12. public function __construct(User $user, UserGroup $userGroup)
  13. {
  14. $this->userModel = $user;
  15. $this->userGroupModel = $userGroup;
  16. }
  17. /**
  18. * 회원그룹 관리
  19. * @method GET
  20. * @see /admin/user/group
  21. */
  22. public function index()
  23. {
  24. $userGroupData = $this->userGroupModel->data();
  25. // 전체 회원 수
  26. $totalUserCount = $this->userModel->count();
  27. $userGroupIDs = [];
  28. if ($userGroupData->total > 0) {
  29. $num = 1;
  30. foreach ($userGroupData->list as $i => $row) {
  31. $row->num = $num++;
  32. $userGroupIDs[] = $row->id;
  33. $row->userCount = $row->user->count();
  34. $row->updatedAt = dateBr($row->updated_at, '-');
  35. $row->createdAt = dateBr($row->created_at, '-');
  36. $row->share = (($row->userCount > 0) ? round(($row->userCount / $totalUserCount) * 100) : 0);
  37. $userGroupData->list[$i] = $row;
  38. }
  39. }
  40. return view('admin.user.group.index', [
  41. 'userGroupData' => $userGroupData,
  42. 'totalUserCount' => $totalUserCount,
  43. 'userGroupID' => implode(',', $userGroupIDs)
  44. ]);
  45. }
  46. /**
  47. * 회원그룹 저장
  48. * @method POST
  49. * @see /admin/user/group/list
  50. */
  51. public function store(Request $request)
  52. {
  53. $posts = $request->all();
  54. $oldUserGroupID = explode(',', $posts['old_user_group_id']); // 기존 회원그룹 PK
  55. $curUserGroupID = $request->input('user_group_id', []);
  56. $userID = UID;
  57. $today = now();
  58. if($curUserGroupID) {
  59. $nLoop = 1;
  60. foreach($curUserGroupID as $userGroupID => $pk) {
  61. $saveData = [
  62. 'user_group_id' => ($posts['user_group_id'][$userGroupID] ?? 0),
  63. 'sort' => ($posts['sort'][$userGroupID] ?? 0),
  64. 'kor_name' => ($posts['kor_name'][$userGroupID] ?? ''),
  65. 'eng_name' => ($posts['eng_name'][$userGroupID] ?? ''),
  66. 'description' => ($posts['description'][$userGroupID] ?? ''),
  67. 'is_default' => ($posts['is_default'][$userGroupID] ?? 0),
  68. 'is_use' => ($posts['is_use'][$userGroupID] ?? 0)
  69. ];
  70. $rules = [
  71. 'image' => 'nullable|mimes:jpg,jpeg,gif,png|max:2192',
  72. 'user_group_id' => 'required|numeric',
  73. 'sort' => 'required|numeric',
  74. 'kor_name' => 'required|string',
  75. 'eng_name' => 'required|string',
  76. 'description' => 'string|nullable',
  77. 'is_default' => 'nullable|numeric',
  78. 'is_use' => 'required|numeric|in:0,1'
  79. ];
  80. $attributes = [
  81. 'image' => '이미지',
  82. 'user_group_id' => '번호',
  83. 'sort' => '순서',
  84. 'kor_name' => '한글명',
  85. 'eng_name' => '영문명',
  86. 'description' => '설명',
  87. 'is_default' => '기본 그룹',
  88. 'is_use' => '사용 여부'
  89. ];
  90. $validator = Validator::make($saveData, $rules, [], $attributes);
  91. if($validator->fails()) {
  92. return redirect()->route('admin.user.group.index')->withErrors($validator)->withInput();
  93. }
  94. // 파일 저장
  95. $groupImages = $request->file('image');
  96. if(isset($groupImages[$userGroupID])) {
  97. $groupImages[$userGroupID]->store(UPLOAD_PATH_PUBLIC . DIRECTORY_SEPARATOR . USER_GROUP_IMAGE_PATH);
  98. $saveData['image'] = (UPLOAD_PATH_STORAGE . DIRECTORY_SEPARATOR . USER_GROUP_IMAGE_PATH . DIRECTORY_SEPARATOR . $groupImages[$userGroupID]->hashName());
  99. }
  100. // 파일 삭제
  101. $groupImageDel = $request->get('image_del');
  102. if(isset($groupImageDel[$userGroupID])) {
  103. if(file_exists($groupImageDel[$userGroupID])) {
  104. unlink($groupImageDel[$userGroupID]);
  105. }
  106. $saveData['image'] = null;
  107. }
  108. unset($saveData['user_group_id']);
  109. if(!$pk) {
  110. $saveData['id'] = $userGroupID;
  111. $saveData['created_at'] = $today;
  112. $this->userGroupModel->insert($saveData);
  113. }else{
  114. $saveData['updated_user_id'] = $userID;
  115. $saveData['updated_at'] = $today;
  116. $this->userGroupModel->find($pk)->update($saveData);
  117. }
  118. $nLoop++;
  119. }
  120. }
  121. // 값이 없는 경우 삭제 처리
  122. if($oldUserGroupID) {
  123. foreach($oldUserGroupID as $userGroupID) {
  124. if(!in_array($userGroupID, $curUserGroupID)) {
  125. $this->userGroupModel->find($userGroupID)->delete();
  126. }
  127. }
  128. }
  129. $message = '회원그룹 정보가 변경되었습니다.';
  130. return redirect()->route('admin.user.group.index')->with('message', $message);
  131. }
  132. }