Files
2026-08-08 18:27:38 +08:00

96 lines
2.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Article;
use App\Models\ForumReply;
use App\Models\ForumThread;
use Illuminate\Http\Request;
/**
* 统一审核队列:文章投稿 / 论坛帖子 / 论坛回复 的待审内容。
* 入口按权限展示对应 Tabarticles.moderate / forum.moderate)。
*/
class ModerationController extends Controller
{
public function index(Request $request)
{
$user = $request->user();
$tab = $request->query('tab', 'articles');
$canArticles = $user->canPerm('articles.moderate');
$canForum = $user->canPerm('forum.moderate');
if (! $canArticles && ! $canForum) {
abort(403, '无审核权限');
}
if ($tab === 'threads' && ! $canForum) {
$tab = $canArticles ? 'articles' : 'replies';
}
if ($tab === 'replies' && ! $canForum) {
$tab = $canArticles ? 'articles' : 'threads';
}
$articles = $canArticles
? Article::where('status', 'pending')->with('user', 'category')->orderByDesc('created_at')->paginate(10, ['*'], 'ap')
: null;
$threads = $canForum
? ForumThread::where('status', 'pending')->with('user', 'board')->orderByDesc('created_at')->paginate(10, ['*'], 'tp')
: null;
$replies = $canForum
? ForumReply::where('status', 'pending')->with('user', 'thread')->orderByDesc('created_at')->paginate(10, ['*'], 'rp')
: null;
return view('admin.moderation.index', compact('tab', 'articles', 'threads', 'replies', 'canArticles', 'canForum'));
}
public function approveArticle(Article $article)
{
$article->update([
'status' => 'approved',
'published_at' => $article->published_at ?? now(),
]);
return back()->with('success', "已通过文章《{$article->title}》");
}
public function rejectArticle(Article $article)
{
$article->update(['status' => 'rejected']);
return back()->with('success', "已驳回文章《{$article->title}》");
}
public function approveThread(ForumThread $thread)
{
$thread->update(['status' => ForumThread::STATUS_APPROVED]);
return back()->with('success', "已通过帖子《{$thread->title}》");
}
public function rejectThread(ForumThread $thread)
{
$thread->update(['status' => ForumThread::STATUS_REJECTED]);
return back()->with('success', "已驳回帖子《{$thread->title}》");
}
public function approveReply(ForumReply $reply)
{
$reply->update(['status' => ForumReply::STATUS_APPROVED]);
return back()->with('success', '已通过该回复');
}
public function rejectReply(ForumReply $reply)
{
$reply->update(['status' => ForumReply::STATUS_REJECTED]);
return back()->with('success', '已驳回该回复');
}
}