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

Размер файла: 4.7Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Controllers\Admin;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Chat;
  9. use App\Models\User;
  10. use Illuminate\Http\Request;
  11.  
  12. class ChatController extends AdminController
  13. {
  14. /**
  15. * Главная страница
  16. *
  17. * @param Request $request
  18. * @param Validator $validator
  19. *
  20. * @return string
  21. */
  22. public function index(Request $request, Validator $validator): string
  23. {
  24. $user = getUser();
  25.  
  26. if ($user->newchat !== statsNewChat()) {
  27. $user->update([
  28. 'newchat' => statsNewChat()
  29. ]);
  30. }
  31.  
  32. if ($request->isMethod('post')) {
  33. $msg = $request->input('msg');
  34.  
  35. $validator->equal($request->input('token'), $_SESSION['token'], ['msg' => __('validator.token')])
  36. ->length($msg, 5, 1500, ['msg' => __('validator.text')]);
  37.  
  38. if ($validator->isValid()) {
  39. /** @var Chat $post */
  40. $post = Chat::query()->orderBy('created_at')->first();
  41.  
  42. if ($post
  43. && $post->created_at + 1800 > SITETIME
  44. && $user->id === $post->user_id
  45. && (utfStrlen($msg) + utfStrlen($post->text) <= 1500)
  46. ) {
  47. $newpost = $post->text . PHP_EOL . PHP_EOL . '[i][size=1]' . __('admin.chat.post_added_after', ['sec' => makeTime(SITETIME - $post->created_at)]) . '[/size][/i]' . PHP_EOL . $msg;
  48.  
  49. $post->update([
  50. 'text' => $newpost,
  51. ]);
  52. } else {
  53. Chat::query()->create([
  54. 'user_id' => $user->id,
  55. 'text' => $msg,
  56. 'ip' => getIp(),
  57. 'brow' => getBrowser(),
  58. 'created_at' => SITETIME,
  59. ]);
  60. }
  61.  
  62. clearCache('statChat');
  63. sendNotify($msg, '/admin/chats', __('index.admin_chat'));
  64.  
  65. setFlash('success', __('main.message_added_success'));
  66. redirect('/admin/chats');
  67. } else {
  68. setInput($request->all());
  69. setFlash('danger', $validator->getErrors());
  70. }
  71. }
  72.  
  73. $posts = Chat::query()
  74. ->orderByDesc('created_at')
  75. ->with('user', 'editUser')
  76. ->paginate(setting('chatpost'));
  77.  
  78. return view('admin/chats/index', compact('posts'));
  79. }
  80.  
  81. /**
  82. * Редактирование сообщения
  83. *
  84. * @param int $id
  85. * @param Request $request
  86. * @param Validator $validator
  87. *
  88. * @return string
  89. */
  90. public function edit(int $id, Request $request, Validator $validator): string
  91. {
  92. $page = int($request->input('page', 1));
  93.  
  94. if (! $user = getUser()) {
  95. abort(403);
  96. }
  97.  
  98. /** @var Chat $post */
  99. $post = Chat::query()->where('user_id', $user->id)->find($id);
  100.  
  101. if (! $post) {
  102. abort('default', __('main.message_deleted'));
  103. }
  104.  
  105. if ($post->created_at + 600 < SITETIME) {
  106. abort('default', __('main.editing_impossible'));
  107. }
  108.  
  109. if ($request->isMethod('post')) {
  110. $msg = $request->input('msg');
  111.  
  112. $validator->equal($request->input('token'), $_SESSION['token'], ['msg' => __('validator.token')])
  113. ->length($msg, 5, 1500, ['msg' => __('validator.text')]);
  114.  
  115. if ($validator->isValid()) {
  116. $post->update([
  117. 'text' => $msg,
  118. 'edit_user_id' => $user->id,
  119. 'updated_at' => SITETIME,
  120. ]);
  121.  
  122. setFlash('success', __('main.message_edited_success'));
  123. redirect('/admin/chats?page=' . $page);
  124. } else {
  125. setInput($request->all());
  126. setFlash('danger', $validator->getErrors());
  127. }
  128. }
  129.  
  130. return view('admin/chats/edit', compact('post', 'page'));
  131. }
  132.  
  133. /**
  134. * Очистка чата
  135. *
  136. * @param Request $request
  137. * @param Validator $validator
  138. *
  139. * @return void
  140. */
  141. public function clear(Request $request, Validator $validator): void
  142. {
  143. $validator
  144. ->equal($request->input('token'), $_SESSION['token'], __('validator.token'))
  145. ->true(isAdmin(User::BOSS), __('main.page_only_admins'));
  146.  
  147. if ($validator->isValid()) {
  148. Chat::query()->truncate();
  149.  
  150. setFlash('success', __('admin.chat.success_cleared'));
  151. } else {
  152. setFlash('danger', $validator->getErrors());
  153. }
  154.  
  155. redirect('/admin/chats');
  156. }
  157. }