ListController.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. namespace App\Http\Controllers\Admin\Board\Group;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Validation\Rule;
  5. use Illuminate\Support\Facades\Validator;
  6. use App\Http\Controllers\Controller;
  7. use App\Models\Board;
  8. use App\Models\BoardGroup;
  9. use App\Models\BoardGroupMeta;
  10. use App\Models\DTO\SearchData;
  11. use App\Models\DTO\ResponseData;
  12. use Exception;
  13. class ListController extends Controller
  14. {
  15. private Board $boardModel;
  16. private BoardGroup $boardGroupModel;
  17. private BoardGroupMeta $boardGroupMetaModel;
  18. public function __construct(Board $board, BoardGroup $boardGroup, BoardGroupMeta $boardGroupMeta)
  19. {
  20. $this->boardModel = $board;
  21. $this->boardGroupModel = $boardGroup;
  22. $this->boardGroupMetaModel = $boardGroupMeta;
  23. }
  24. /**
  25. * 게시판 그룹 관리
  26. * @method GET
  27. * @see /admin/board/group/list
  28. */
  29. public function index(Request $request)
  30. {
  31. $params = SearchData::fromRequest($request);
  32. $boardGroupData = $this->boardGroupModel->data($params);
  33. if ($boardGroupData->rows > 0) {
  34. $num = listNum($boardGroupData->total, $params->page, $params->perPage);
  35. foreach ($boardGroupData->list as $i => $row) {
  36. $row->num = $num--;
  37. $row->boardRows = number_format($row->boardRows);
  38. $row->postRows = number_format($row->postRows);
  39. $row->commentRows = number_format($row->commentRows);
  40. $row->createdAt = dateBr($row->created_at, '-');
  41. $row->editURL = route('admin.board.group.list.edit', $row->id);
  42. $boardGroupData->list[$i] = $row;
  43. }
  44. }
  45. return view('admin.board.group.index', [
  46. 'boardGroupData' => $boardGroupData,
  47. 'params' => $params
  48. ]);
  49. }
  50. /**
  51. * 게시판 그룹 등록
  52. * @method GET
  53. * @see /admin/board/group/list/create
  54. */
  55. public function create()
  56. {
  57. return view('admin.board.group.write', [
  58. 'actionURL' => route('admin.board.group.list.store'),
  59. 'boardGroupData' => [],
  60. 'boardGroupMetaData' => [],
  61. 'boardGroupID' => null
  62. ]);
  63. }
  64. /**
  65. * 게시판 그룹 수정
  66. * @method GET
  67. * @see /admin/board/group/list/{pk}/edit
  68. */
  69. public function edit(int $boardGroupID)
  70. {
  71. return view('admin.board.group.write', [
  72. 'actionURL' => route('admin.board.group.list.update', $boardGroupID),
  73. 'boardGroupData' => $this->boardGroupModel->find($boardGroupID),
  74. 'boardGroupMetaData' => $this->boardGroupMetaModel->getAllMeta($boardGroupID),
  75. 'boardGroupID' => $boardGroupID
  76. ]);
  77. }
  78. /**
  79. * 게시판 그룹 등록 저장
  80. * @method POST
  81. * @see /admin/board/group/list
  82. */
  83. public function store(Request $request, ResponseData $response)
  84. {
  85. $rules = [
  86. 'code' => [
  87. 'required',
  88. 'string',
  89. 'min:3',
  90. 'max:50',
  91. 'alpha_dash',
  92. ],
  93. 'name' => 'required|max:255',
  94. 'sort' => 'required|numeric',
  95. 'pc_header_content' => 'string|nullable',
  96. 'pc_footer_content' => 'string|nullable',
  97. 'mobile_header_content' => 'string|nullable',
  98. 'mobile_footer_content' => 'string|nullable'
  99. ];
  100. $attributes = [
  101. 'code' => '주소',
  102. 'name' => '제목',
  103. 'sort' => '순서',
  104. 'pc_header_content' => 'PC 상단 내용',
  105. 'pc_footer_content' => 'PC 하단 내용',
  106. 'mobile_header_content' => '모바일 상단 내용',
  107. 'mobile_footer_content' => '모바일 하단 내용'
  108. ];
  109. $this->validate($request, $rules, [], $attributes);
  110. $result = $this->boardGroupModel->register($request, $response);
  111. if(!$result->success) {
  112. return back()->withErrors($result->message)->withInput();
  113. }
  114. $message = '게시판 그룹이 등록되었습니다.';
  115. return redirect()->route('admin.board.group.list.index')->with('message', $message);
  116. }
  117. /**
  118. * 게시판 그룹 수정 저장
  119. * @method PUT
  120. * @see /admin/board/group/list/{pk}
  121. */
  122. public function update(Request $request, ResponseData $response)
  123. {
  124. $boardGroupID = $request->post('board_group_id');
  125. $rules = [
  126. 'board_group_id' => 'required|numeric|exists:tb_board_group,id',
  127. 'code' => [
  128. 'required',
  129. 'string',
  130. 'min:3',
  131. 'max:50',
  132. 'alpha_dash',
  133. Rule::unique('tb_board_group', 'code')->ignore($boardGroupID, 'id')
  134. ],
  135. 'name' => 'required|max:255',
  136. 'sort' => 'required|numeric',
  137. 'pc_header_content' => 'string|nullable',
  138. 'pc_footer_content' => 'string|nullable',
  139. 'mobile_header_content' => 'string|nullable',
  140. 'mobile_footer_content' => 'string|nullable'
  141. ];
  142. $attributes = [
  143. 'board_group_id' => 'PK',
  144. 'code' => '주소',
  145. 'name' => '제목',
  146. 'sort' => '순서',
  147. 'pc_header_content' => 'PC 상단 내용',
  148. 'pc_footer_content' => 'PC 하단 내용',
  149. 'mobile_header_content' => '모바일 상단 내용',
  150. 'mobile_footer_content' => '모바일 하단 내용'
  151. ];
  152. $this->validate($request, $rules, [], $attributes);
  153. $result = $this->boardGroupModel->updater($boardGroupID, $request, $response);
  154. if(!$result->success) {
  155. return back()->withErrors($result->message)->withInput();
  156. }
  157. $message = '게시판 그룹이 수정되었습니다.';
  158. return redirect()->route('admin.board.group.list.edit', $boardGroupID)->with('message', $message);
  159. }
  160. /**
  161. * 게시판 그룹 수정
  162. * @method POST
  163. * @see /admin/board/group/list/listUpdate
  164. */
  165. public function listUpdate(Request $request)
  166. {
  167. $posts = $request->all();
  168. if($posts['chk']) {
  169. foreach($posts['chk'] as $boardGroupID) {
  170. $updateData = [
  171. 'code' => ($posts['code'][$boardGroupID] ?? ''),
  172. 'name' => ($posts['name'][$boardGroupID] ?? ''),
  173. 'sort' => ($posts['sort'][$boardGroupID] ?? ''),
  174. ];
  175. $rules = [
  176. 'code' => [
  177. 'required',
  178. 'string',
  179. 'min:3',
  180. 'max:50',
  181. 'alpha_dash',
  182. Rule::unique('tb_board_group', 'code')->ignore($boardGroupID, 'id')
  183. ],
  184. 'name' => 'required|max:255',
  185. 'sort' => 'required|numeric'
  186. ];
  187. $attributes = [
  188. 'code' => 'CODE',
  189. 'name' => '제목',
  190. 'sort' => '순서'
  191. ];
  192. $validator = Validator::make($updateData, $rules, [], $attributes);
  193. if($validator->fails()) {
  194. return back()->withErrors($validator)->withInput();
  195. }
  196. $this->boardGroupModel->find($boardGroupID)->update($updateData);
  197. }
  198. }
  199. $message = '게시판 그룹 정보가 변경되었습니다.';
  200. return redirect()->route('admin.board.group.list.index')->with('message', $message);
  201. }
  202. /**
  203. * 게시판 그룹 삭제
  204. * @method DELETE
  205. * @see /admin/board/group/list/destroy
  206. */
  207. public function destroy(Request $request)
  208. {
  209. try {
  210. $chk = $request->post('chk');
  211. if ($chk) {
  212. foreach ($chk as $boardGroupID) {
  213. $boardGroup = $this->boardGroupModel->findOrNew($boardGroupID);
  214. if (!$boardGroup->exists) {
  215. throw new Exception($boardGroupID . '번 게시판 그룹은 존재하지 않습니다.');
  216. }
  217. if ($boardGroup->board->count() > 0) {
  218. return back()->withErrors($boardGroupID . "번 게시판 그룹은 삭제할 수 없습니다.")->withInput();
  219. }
  220. $this->boardGroupModel->remove($boardGroupID);
  221. }
  222. }
  223. $message = '게시판 그룹이 삭제되었습니다.';
  224. return redirect()->route('admin.board.group.list.index')->with('message', $message);
  225. } catch (Exception $e) {
  226. return back()->withErrors($e->getMessage())->withInput();
  227. }
  228. }
  229. }