DocumentController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace App\Http\Controllers\Admin\Page;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Validation\Rule;
  5. use App\Http\Controllers\Controller;
  6. use App\Http\Traits\CommonTrait;
  7. use App\Models\Document;
  8. use App\Models\DTO\SearchData;
  9. use App\Models\FileLib;
  10. use Exception;
  11. class DocumentController extends Controller
  12. {
  13. use CommonTrait;
  14. private Document $documentModel;
  15. public function __construct(Document $document)
  16. {
  17. $this->documentModel = $document;
  18. }
  19. /**
  20. * 문서 관리
  21. * @method GET
  22. * @see /admin/page/document
  23. */
  24. public function index(Request $request)
  25. {
  26. $params = SearchData::fromRequest($request);
  27. $documentData = $this->documentModel->data($params);
  28. if ($documentData->total > 0) {
  29. $num = listNum($documentData->total, $params->page, $params->perPage);
  30. foreach ($documentData->list as $i => $row) {
  31. $row->num = $num--;
  32. $row->url = route('document', $row->code);
  33. $row->views = number_format($row->views);
  34. $row->creater = $row->user->find($row->user_id);
  35. $row->updater = $row->user->find($row->updated_user_id);
  36. $row->editURL = route('admin.page.document.edit', $row->id);
  37. $documentData->list[$i] = $row;
  38. }
  39. }
  40. return view('admin.page.document.index', [
  41. 'documentData' => $documentData,
  42. 'params' => $params
  43. ]);
  44. }
  45. /**
  46. * 문서 등록
  47. * @method GET
  48. * @see /admin/page/document/create
  49. */
  50. public function create()
  51. {
  52. return view('admin.page.document.write', [
  53. 'actionURL' => route('admin.page.document.store'),
  54. 'documentData' => [],
  55. 'documentID' => null
  56. ]);
  57. }
  58. /**
  59. * 문서 수정
  60. * @method GET
  61. * @see /admin/page/document/{pk}/edit
  62. */
  63. public function edit(int $documentID)
  64. {
  65. return view('admin.page.document.write', [
  66. 'actionURL' => route('admin.page.document.update', $documentID),
  67. 'documentData' => $this->documentModel->find($documentID),
  68. 'documentID' => $documentID
  69. ]);
  70. }
  71. /**
  72. * 문서 등록 저장
  73. * @method POST
  74. * @see /admin/page/document
  75. */
  76. public function store(Request $request, FileLib $fileLib)
  77. {
  78. $rules = [
  79. 'code' => 'string|min:3|max:50|unique:tb_document,code',
  80. 'subject' => 'string|max:150',
  81. 'content' => 'string|nullable',
  82. 'mobile_content' => 'string|nullable'
  83. ];
  84. $attributes = [
  85. 'code' => '주소',
  86. 'subject' => '제목',
  87. 'content' => 'PC 내용',
  88. 'mobile_content' => '모바일 내용'
  89. ];
  90. $posts = $this->validate($request, $rules, [], $attributes);
  91. $posts['content'] = $fileLib->saveAsImage($posts['content'], UPLOAD_PATH_DOCUMENT);
  92. $this->documentModel->insert([
  93. 'user_id' => UID,
  94. 'code' => $posts['code'],
  95. 'subject' => $posts['subject'],
  96. 'content' => $posts['content'],
  97. 'views' => 0,
  98. 'ip_address' => IP_ADDRESS,
  99. 'user_agent' => USER_AGENT,
  100. 'updated_user_id' => null,
  101. 'updated_at' => null,
  102. 'created_at' => now()
  103. ]);
  104. $message = '문서가 등록되었습니다.';
  105. return redirect()->route('admin.page.document.index')->with('message', $message);
  106. }
  107. /**
  108. * 문서 수정 저장
  109. * @method PUT
  110. * @see /admin/page/document/{pk}
  111. */
  112. public function update(Request $request, FileLib $fileLib)
  113. {
  114. $documentID = $request->post('document_id');
  115. $rules = [
  116. 'document_id' => 'required|numeric|exists:tb_document,id',
  117. 'code' => [
  118. 'string',
  119. 'min:3',
  120. 'max:50',
  121. Rule::unique('tb_document', 'code')->ignore($documentID, 'id'),
  122. ],
  123. 'subject' => 'string|max:150',
  124. 'content' => 'string|nullable'
  125. ];
  126. $attributes = [
  127. 'document_id' => '번호',
  128. 'code' => '주소',
  129. 'subject' => '제목',
  130. 'content' => '내용'
  131. ];
  132. $posts = $this->validate($request, $rules, [], $attributes);
  133. $posts['content'] = $fileLib->saveAsImage($posts['content'], UPLOAD_PATH_DOCUMENT);
  134. $this->documentModel->find($documentID)->update([
  135. 'code' => $posts['code'],
  136. 'subject' => $posts['subject'],
  137. 'content' => $posts['content'],
  138. 'ip_address' => IP_ADDRESS,
  139. 'user_agent' => USER_AGENT,
  140. 'updated_user_id' => UID,
  141. 'updated_at' => now()
  142. ]);
  143. $message = '문서 정보가 수정되었습니다.';
  144. return redirect()->route(
  145. 'admin.page.document.edit', $documentID
  146. )->with('message', $message);
  147. }
  148. /**
  149. * 문서 삭제
  150. * @method DELETE
  151. * @see /admin/page/document/destroy
  152. */
  153. public function destroy(Request $request)
  154. {
  155. try {
  156. $chk = $request->post('chk');
  157. if ($chk) {
  158. foreach ($chk as $documentID) {
  159. $document = $this->documentModel->findOrNew($documentID);
  160. if(!$document->exists)
  161. {
  162. throw new Exception($documentID . "번 문서는 존재하지 않습니다.");
  163. }
  164. // 이미지 삭제
  165. $this->deleteImageFromContent($document->content);
  166. $document->delete();
  167. }
  168. }
  169. $message = '문서 정보가 삭제되었습니다.';
  170. return redirect()->route('admin.page.document.index')->with('message', $message);
  171. } catch (Exception $e) {
  172. return back()->withErrors($e->getMessage())->withInput();
  173. }
  174. }
  175. }