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

Размер файла: 4.64Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Flood;
  9. use App\Models\Guestbook;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\View\View;
  13.  
  14. class GuestbookController extends Controller
  15. {
  16. /**
  17. * Главная страница
  18. *
  19. * @return View
  20. */
  21. public function index(): View
  22. {
  23. $posts = Guestbook::query()
  24. ->where('active', true)
  25. ->orderByDesc('created_at')
  26. ->with('user', 'editUser')
  27. ->paginate(10);
  28.  
  29. $unpublished = Guestbook::query()->where('active', false)->count();
  30.  
  31. return view('guestbook/index', compact('posts', 'unpublished'));
  32. }
  33.  
  34. /**
  35. * Добавление сообщения
  36. *
  37. * @param Request $request
  38. * @param Validator $validator
  39. * @param Flood $flood
  40. *
  41. * @return RedirectResponse
  42. */
  43. public function add(Request $request, Validator $validator, Flood $flood): RedirectResponse
  44. {
  45. $msg = $request->input('msg');
  46. $user = getUser();
  47.  
  48. $validator->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  49. ->length($msg, 5, setting('guesttextlength'), ['msg' => __('validator.text')])
  50. ->false($flood->isFlood(), ['msg' => __('validator.flood', ['sec' => $flood->getPeriod()])]);
  51.  
  52. /* Проверка для гостей */
  53. if (! $user && setting('bookadds')) {
  54. $validator->true(captchaVerify(), ['protect' => __('validator.captcha')]);
  55. $validator->true(! str_contains($msg ?? '', '//'), ['msg' => __('guestbook.without_links')]);
  56. $validator->length($request->input('guest_name'), 3, 20, ['guest_name' => __('users.name_short_or_long')], false);
  57. } else {
  58. $validator->true($user, ['msg' => __('main.not_authorized')]);
  59. }
  60.  
  61. if ($validator->isValid()) {
  62. $msg = antimat($msg);
  63. $active = ! setting('guest_moderation');
  64. $guestName = $request->input('guest_name');
  65.  
  66. if ($user) {
  67. $active = true;
  68. $guestName = null;
  69. $bookscores = setting('bookscores') ? 1 : 0;
  70.  
  71. $user->increment('allguest');
  72. $user->increment('point', $bookscores);
  73. $user->increment('money', 5);
  74. }
  75.  
  76. Guestbook::query()->create([
  77. 'user_id' => $user->id ?? null,
  78. 'text' => $msg,
  79. 'ip' => getIp(),
  80. 'brow' => getBrowser(),
  81. 'guest_name' => $guestName,
  82. 'active' => $active,
  83. 'created_at' => SITETIME,
  84. ]);
  85.  
  86. clearCache('statGuestbook');
  87. $flood->saveState();
  88.  
  89. sendNotify($msg, '/guestbook', __('index.guestbook'));
  90. setFlash('success', $active ? __('main.message_added_success') : __('main.message_publish_moderation'));
  91. } else {
  92. setInput($request->all());
  93. setFlash('danger', $validator->getErrors());
  94. }
  95.  
  96. return redirect('/guestbook');
  97. }
  98.  
  99. /**
  100. * Редактирование сообщения
  101. *
  102. * @param int $id
  103. * @param Request $request
  104. * @param Validator $validator
  105. *
  106. * @return View|RedirectResponse
  107. */
  108. public function edit(int $id, Request $request, Validator $validator)
  109. {
  110. if (! $user = getUser()) {
  111. abort(403);
  112. }
  113.  
  114. $msg = $request->input('msg');
  115.  
  116. /** @var Guestbook $post */
  117. $post = Guestbook::query()->where('user_id', $user->id)->find($id);
  118.  
  119. if (! $post) {
  120. abort(404, __('main.message_not_found'));
  121. }
  122.  
  123. if ($post->created_at + 600 < SITETIME) {
  124. abort(200, __('main.editing_impossible'));
  125. }
  126.  
  127. if ($request->isMethod('post')) {
  128. $validator->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  129. ->length($msg, 5, setting('guesttextlength'), ['msg' => __('validator.text')]);
  130.  
  131. if ($validator->isValid()) {
  132. $post->update([
  133. 'text' => antimat($msg),
  134. 'edit_user_id' => $user->id,
  135. 'updated_at' => SITETIME,
  136. ]);
  137.  
  138. setFlash('success', __('main.message_edited_success'));
  139.  
  140. return redirect('guestbook');
  141. }
  142.  
  143. setInput($request->all());
  144. setFlash('danger', $validator->getErrors());
  145. }
  146.  
  147. return view('guestbook/edit', compact('post'));
  148. }
  149. }