File size: 2.62Kb
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Forum;
use App\Http\Controllers\Controller;
use App\Models\Post;
use App\Models\Topic;
use App\Models\User;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\View\View;
class ActiveController extends Controller
{
/**
* @var User
*/
public $user;
/**
* Конструктор
*/
public function __construct()
{
$this->middleware(function ($request, $next) {
$login = $request->input('user', getUser('login'));
$this->user = getUserByLogin($login);
if (! $this->user) {
abort(404, __('validator.user'));
}
return $next($request);
});
}
/**
* Вывод тем
*
* @return View
*/
public function topics(): View
{
$user = $this->user;
$topics = Topic::query()
->where('user_id', $user->id)
->orderByDesc('updated_at')
->with('forum', 'user', 'lastPost.user')
->paginate(setting('forumtem'))
->appends(['user' => $user->login]);
return view('forums/active_topics', compact('topics', 'user'));
}
/**
* Вывод сообщений
*
* @return View
*/
public function posts(): View
{
$user = $this->user;
$posts = Post::query()
->where('user_id', $user->id)
->orderByDesc('created_at')
->with('topic', 'user')
->paginate(setting('forumpost'))
->appends(['user' => $user->login]);
return view('forums/active_posts', compact('posts', 'user'));
}
/**
* Удаление сообщений
*
* @param int $id
*
* @return JsonResponse
* @throws Exception
*/
public function destroy(int $id): JsonResponse
{
if (! isAdmin()) {
return response()->json([
'success' => false,
'message' => __('forums.posts_deleted_moderators'),
]);
}
$post = Post::query()
->where('id', $id)
->with('topic.forum')
->first();
if (! $post) {
return response()->json([
'success' => false,
'message' => __('forums.post_not_exist'),
]);
}
$post->delete();
$post->topic->decrement('count_posts');
$post->topic->forum->decrement('count_posts');
return response()->json([
'success' => true,
'message' => __('main.record_deleted_success'),
]);
}
}