UserController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace App\Http\Controllers\Admin\Sms\Book;
  3. use Illuminate\Http\Request;
  4. use App\Http\Controllers\Controller;
  5. use App\Models\SmsUser;
  6. use App\Models\User;
  7. use App\Models\UserGroup;
  8. use App\Models\UserGrade;
  9. use App\Models\DTO\SearchData;
  10. class UserController extends Controller
  11. {
  12. private ?int $book;
  13. private User $userModel;
  14. private UserGroup $userGroupModel;
  15. private UserGrade $userGradeModel;
  16. private SmsUser $smsUserModel;
  17. public function __construct(
  18. User $user,
  19. UserGroup $userGroup,
  20. UserGrade $userGrade,
  21. SmsUser $smsUser
  22. ) {
  23. $this->userModel = $user;
  24. $this->userGroupModel = $userGroup;
  25. $this->userGradeModel = $userGrade;
  26. $this->smsUserModel = $smsUser;
  27. $this->book = request()->input('book');
  28. if(!$this->book) {
  29. return redirect()->route('admin.sms.book.list.index')->with('message', 'Book ID는 필수 입니다.');
  30. }
  31. }
  32. /**
  33. * 연락처 관리 - 목록
  34. * @method GET
  35. * @see /admin/sms/book/user
  36. */
  37. public function index(Request $request)
  38. {
  39. $params = SearchData::fromRequest($request);
  40. $params->userGroupID = $request->get('user_group_id', []);
  41. $params->userGradeID = $request->get('user_grade_id', []);
  42. $params->smsBookID = $this->book;
  43. $smsUserData = $this->smsUserModel->data($params);
  44. if ($smsUserData->rows > 0) {
  45. $num = listNum($smsUserData->total, $params->page, $params->perPage);
  46. foreach ($smsUserData->list as $i => $row) {
  47. $row->num = $num--;
  48. $row->searchURL = route('admin.user.list.index') . '?' . http_build_query([
  49. 'field' => 'users.id',
  50. 'keyword' => $row->user_id
  51. ]);
  52. $smsUserData->list[$i] = $row;
  53. }
  54. }
  55. return view('admin.sms.book.user.index', [
  56. 'smsUserData' => $smsUserData,
  57. 'userGroupData' => $this->userGroupModel->all(),
  58. 'userGradeData' => $this->userGradeModel->all(),
  59. 'params' => $params
  60. ]);
  61. }
  62. /**
  63. * 주소록 회원 등록
  64. * @method GET
  65. * @see /admin/sms/book/user/create
  66. */
  67. public function create()
  68. {
  69. return view('admin.sms.book.user.write', [
  70. 'actionURL' => route('admin.sms.book.user.store'),
  71. 'book' => $this->book
  72. ]);
  73. }
  74. /**
  75. * 주소록 회원 저장
  76. * @method POST
  77. * @see /admin/sms/book/user
  78. */
  79. public function store(Request $request)
  80. {
  81. $rules = [
  82. 'users' => 'required|string'
  83. ];
  84. $attributes = [
  85. 'users' => '회원 ID'
  86. ];
  87. $posts = $this->validate($request, $rules, [], $attributes);
  88. $today = now();
  89. $users = explode(',', $posts['users']);
  90. foreach($users as $sid) {
  91. $user = $this->userModel->findByUserID($sid);
  92. if(!$user->exists) {
  93. return back()->withErrors(['sid' => "{$sid} 는 존재하지 않는 회원입니다."])->withInput();
  94. }else{
  95. // 이미 추가된 회원이면 무시
  96. if($this->smsUserModel->where([
  97. ['sms_book_id', $this->book],
  98. ['user_id', $user->id]
  99. ])->exists()) {
  100. continue;
  101. }
  102. $this->smsUserModel->insert([
  103. 'sms_book_id' => $this->book,
  104. 'user_id' => $user->id,
  105. 'created_at' => $today
  106. ]);
  107. }
  108. }
  109. $message = '주소록에 회원이 등록되었습니다.';
  110. return redirect()->route('admin.sms.book.user.index', [
  111. 'book' => $this->book
  112. ])->with('message', $message);
  113. }
  114. /**
  115. * 주소록 회원 삭제
  116. * @method DELETE
  117. * @see /admin/sms/book/users
  118. */
  119. public function destroy(Request $request)
  120. {
  121. $chk = $request->post('chk');
  122. if ($chk) {
  123. foreach ($chk as $smsUserID) {
  124. $this->smsUserModel->find($smsUserID)->delete();
  125. }
  126. }
  127. $message = '주소록에서 회원 정보가 삭제되었습니다.';
  128. return redirect()->route('admin.sms.book.user.index', [
  129. 'book' => $this->book
  130. ])->with('message', $message);
  131. }
  132. }