Просмотр файла app/Http/Controllers/Admin/GuestbookController.php

Размер файла: 5.78Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers\Admin;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Guestbook;
  9. use App\Models\User;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\View\View;
  13.  
  14. class GuestbookController extends AdminController
  15. {
  16. /**
  17. * Главная страница
  18. */
  19. public function index(): View
  20. {
  21. $posts = Guestbook::query()
  22. ->orderByDesc('created_at')
  23. ->with('user', 'editUser')
  24. ->paginate(setting('bookpost'));
  25.  
  26. $unpublished = Guestbook::query()->where('active', false)->count();
  27.  
  28. return view('admin/guestbook/index', compact('posts', 'unpublished'));
  29. }
  30.  
  31. /**
  32. * Редактирование сообщения
  33. *
  34. * @param int $id
  35. * @param Request $request
  36. * @param Validator $validator
  37. *
  38. * @return View|RedirectResponse
  39. */
  40. public function edit(int $id, Request $request, Validator $validator)
  41. {
  42. $page = int($request->input('page'));
  43. $post = Guestbook::with('user')->find($id);
  44.  
  45. if (! $post) {
  46. abort(404, __('main.message_not_found'));
  47. }
  48.  
  49. if ($request->isMethod('post')) {
  50. $msg = $request->input('msg');
  51.  
  52. $validator->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  53. ->length($msg, 5, setting('guesttextlength'), ['msg' => __('validator.text')]);
  54.  
  55. if ($validator->isValid()) {
  56. $msg = antimat($msg);
  57.  
  58. $post->update([
  59. 'text' => $msg,
  60. 'edit_user_id' => getUser('id'),
  61. 'updated_at' => SITETIME,
  62. ]);
  63.  
  64. setFlash('success', __('main.message_edited_success'));
  65.  
  66. return redirect('admin/guestbook?page=' . $page);
  67. }
  68.  
  69. setInput($request->all());
  70. setFlash('danger', $validator->getErrors());
  71. }
  72.  
  73. return view('admin/guestbook/edit', compact('post', 'page'));
  74. }
  75.  
  76. /**
  77. * Ответ на сообщение
  78. *
  79. * @param int $id
  80. * @param Request $request
  81. * @param Validator $validator
  82. *
  83. * @return View|RedirectResponse
  84. */
  85. public function reply(int $id, Request $request, Validator $validator)
  86. {
  87. $page = int($request->input('page'));
  88. $post = Guestbook::with('user')->find($id);
  89.  
  90. if (! $post) {
  91. abort(404, __('main.message_not_found'));
  92. }
  93.  
  94. if ($request->isMethod('post')) {
  95. $reply = $request->input('reply');
  96.  
  97. $validator->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  98. ->length($reply, 5, setting('guesttextlength'), ['msg' => __('validator.text')]);
  99.  
  100. if ($validator->isValid()) {
  101. $post->update([
  102. 'reply' => $reply,
  103. ]);
  104.  
  105. setFlash('success', __('guestbook.answer_success_added'));
  106.  
  107. return redirect('admin/guestbook?page=' . $page);
  108. }
  109.  
  110. setInput($request->all());
  111. setFlash('danger', $validator->getErrors());
  112. }
  113.  
  114. return view('admin/guestbook/reply', compact('post', 'page'));
  115. }
  116.  
  117. /**
  118. * Удаление сообщений
  119. *
  120. * @param Request $request
  121. * @param Validator $validator
  122. *
  123. * @return RedirectResponse
  124. */
  125. public function delete(Request $request, Validator $validator): RedirectResponse
  126. {
  127. $page = int($request->input('page', 1));
  128. $del = intar($request->input('chosen'));
  129.  
  130. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  131. ->true($del, __('validator.deletion'));
  132.  
  133. if ($validator->isValid()) {
  134. Guestbook::query()->whereIn('id', $del)->delete();
  135.  
  136. clearCache('statGuestbook');
  137. setFlash('success', __('main.messages_deleted_success'));
  138. } else {
  139. setFlash('danger', $validator->getErrors());
  140. }
  141.  
  142. return redirect('admin/guestbook?page=' . $page);
  143. }
  144.  
  145. /**
  146. * Активация сообщений
  147. *
  148. * @param Request $request
  149. * @param Validator $validator
  150. *
  151. * @return RedirectResponse
  152. */
  153. public function publish(Request $request, Validator $validator): RedirectResponse
  154. {
  155. $page = int($request->input('page', 1));
  156. $active = intar($request->input('chosen'));
  157.  
  158. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  159. ->true($active, __('validator.published'));
  160.  
  161. if ($validator->isValid()) {
  162. Guestbook::query()->whereIn('id', $active)->update([
  163. 'active' => true,
  164. ]);
  165.  
  166. clearCache('statGuestbook');
  167. setFlash('success', __('main.messages_published_success'));
  168. } else {
  169. setFlash('danger', $validator->getErrors());
  170. }
  171.  
  172. return redirect('admin/guestbook?page=' . $page);
  173. }
  174.  
  175. /**
  176. * Очистка сообщений
  177. *
  178. * @param Request $request
  179. * @param Validator $validator
  180. *
  181. * @return RedirectResponse
  182. */
  183. public function clear(Request $request, Validator $validator): RedirectResponse
  184. {
  185. $validator
  186. ->equal($request->input('_token'), csrf_token(), __('validator.token'))
  187. ->true(isAdmin(User::BOSS), __('main.page_only_owner'));
  188.  
  189. if ($validator->isValid()) {
  190. Guestbook::query()->truncate();
  191. clearCache('statGuestbook');
  192.  
  193. setFlash('success', __('guestbook.messages_success_cleared'));
  194. } else {
  195. setFlash('danger', $validator->getErrors());
  196. }
  197.  
  198. return redirect('admin/guestbook');
  199. }
  200. }