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

Размер файла: 2.62Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers\Forum;
  6.  
  7. use App\Http\Controllers\Controller;
  8. use App\Models\Post;
  9. use App\Models\Topic;
  10. use App\Models\User;
  11. use Exception;
  12. use Illuminate\Http\JsonResponse;
  13. use Illuminate\View\View;
  14.  
  15. class ActiveController extends Controller
  16. {
  17. /**
  18. * @var User
  19. */
  20. public $user;
  21.  
  22. /**
  23. * Конструктор
  24. */
  25. public function __construct()
  26. {
  27. $this->middleware(function ($request, $next) {
  28. $login = $request->input('user', getUser('login'));
  29. $this->user = getUserByLogin($login);
  30.  
  31. if (! $this->user) {
  32. abort(404, __('validator.user'));
  33. }
  34.  
  35. return $next($request);
  36. });
  37. }
  38.  
  39. /**
  40. * Вывод тем
  41. *
  42. * @return View
  43. */
  44. public function topics(): View
  45. {
  46. $user = $this->user;
  47.  
  48. $topics = Topic::query()
  49. ->where('user_id', $user->id)
  50. ->orderByDesc('updated_at')
  51. ->with('forum', 'user', 'lastPost.user')
  52. ->paginate(setting('forumtem'))
  53. ->appends(['user' => $user->login]);
  54.  
  55. return view('forums/active_topics', compact('topics', 'user'));
  56. }
  57.  
  58. /**
  59. * Вывод сообщений
  60. *
  61. * @return View
  62. */
  63. public function posts(): View
  64. {
  65. $user = $this->user;
  66.  
  67. $posts = Post::query()
  68. ->where('user_id', $user->id)
  69. ->orderByDesc('created_at')
  70. ->with('topic', 'user')
  71. ->paginate(setting('forumpost'))
  72. ->appends(['user' => $user->login]);
  73.  
  74. return view('forums/active_posts', compact('posts', 'user'));
  75. }
  76.  
  77. /**
  78. * Удаление сообщений
  79. *
  80. * @param int $id
  81. *
  82. * @return JsonResponse
  83. * @throws Exception
  84. */
  85. public function destroy(int $id): JsonResponse
  86. {
  87. if (! isAdmin()) {
  88. return response()->json([
  89. 'success' => false,
  90. 'message' => __('forums.posts_deleted_moderators'),
  91. ]);
  92. }
  93.  
  94. $post = Post::query()
  95. ->where('id', $id)
  96. ->with('topic.forum')
  97. ->first();
  98.  
  99. if (! $post) {
  100. return response()->json([
  101. 'success' => false,
  102. 'message' => __('forums.post_not_exist'),
  103. ]);
  104. }
  105.  
  106. $post->delete();
  107. $post->topic->decrement('count_posts');
  108. $post->topic->forum->decrement('count_posts');
  109.  
  110. return response()->json([
  111. 'success' => true,
  112. 'message' => __('main.record_deleted_success'),
  113. ]);
  114. }
  115. }