Files
Virtnet.bond/extensions/Others/SocialBase/Admin/Widgets/SocialBaseModerationWidget.php
2025-11-30 11:57:22 +01:00

58 lines
3.1 KiB
PHP

<?php
namespace Paymenter\Extensions\Others\SocialBase\Admin\Widgets;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
use Paymenter\Extensions\Others\SocialBase\Models\Message;
use Paymenter\Extensions\Others\SocialBase\Models\UserReport;
use Paymenter\Extensions\Others\SocialBase\Models\MessageReport;
use Paymenter\Extensions\Others\SocialBase\Models\ProfileComment;
class SocialBaseModerationWidget extends BaseWidget
{
protected static ?string $pollingInterval = '30s';
protected static ?int $sort = 2;
protected function getStats(): array
{
$flaggedMessages = Message::where('moderation_status', 'flagged')->count();
$userReports = UserReport::where('status', 'pending')->count();
$messageReports = MessageReport::where('status', 'pending')->count();
$pendingComments = ProfileComment::where('moderation_status', 'pending')->count();
$totalPending = $flaggedMessages + $userReports + $messageReports + $pendingComments;
return [
Stat::make('Flagged Messages', $flaggedMessages)
->description('Messages requiring review')
->descriptionIcon('ri-message-2-line')
->color($flaggedMessages > 5 ? 'danger' : ($flaggedMessages > 0 ? 'warning' : 'success'))
->url(route('filament.admin.resources.socialbase.message-moderation.index', ['tableFilters' => ['moderation_status' => ['value' => 'flagged']]])),
Stat::make('User Reports', $userReports)
->description('User profile reports')
->descriptionIcon('ri-user-line')
->color($userReports > 3 ? 'danger' : ($userReports > 0 ? 'warning' : 'success'))
->url(route('filament.admin.resources.socialbase.user-reports.index', ['tableFilters' => ['status' => ['value' => 'pending']]])),
Stat::make('Message Reports', $messageReports)
->description('Message content reports')
->descriptionIcon('ri-flag-line')
->color($messageReports > 3 ? 'danger' : ($messageReports > 0 ? 'warning' : 'success'))
->url(route('filament.admin.resources.socialbase.message-reports.index', ['tableFilters' => ['status' => ['value' => 'pending']]])),
Stat::make('Pending Comments', $pendingComments)
->description('Profile comments awaiting approval')
->descriptionIcon('ri-chat-3-line')
->color($pendingComments > 5 ? 'danger' : ($pendingComments > 0 ? 'warning' : 'success'))
->url(route('filament.admin.resources.socialbase.profile-comments.index', ['tableFilters' => ['moderation_status' => ['value' => 'pending']]])),
Stat::make('Total Pending', $totalPending)
->description('All SocialBase items needing attention')
->descriptionIcon('ri-alarm-warning-line')
->color($totalPending > 15 ? 'danger' : ($totalPending > 0 ? 'warning' : 'success')),
];
}
}