Add new widget

This commit is contained in:
DariusIII
2026-03-03 12:38:45 +01:00
parent 1d0e3ea82a
commit 88eba997b7
2 changed files with 42 additions and 2 deletions
@@ -142,13 +142,25 @@ class AdminPageController extends BasePageController
return \App\Models\ReleaseReport::where('status', 'pending')->count();
});
// Cache soft-deleted users count for 5 minutes
$softDeletedCount = \Illuminate\Support\Facades\Cache::remember('admin_stats_soft_deleted_users_count', 300, function () {
return \App\Models\User::onlyTrashed()->count();
});
// Cache permanently deleted users count for 5 minutes (from activity log)
$permanentlyDeletedCount = \Illuminate\Support\Facades\Cache::remember('admin_stats_permanently_deleted_users_count', 300, function () {
return \App\Models\UserActivity::where('activity_type', 'deleted')
->whereJsonContains('metadata->permanent', true)
->count();
});
// Today's counts can be cached for 1 minute since they change frequently
$releasesToday = \Illuminate\Support\Facades\Cache::remember('admin_stats_releases_today_'.$today, 60, function () use ($today) {
return \App\Models\Release::whereRaw('DATE(adddate) = ?', [$today])->count();
});
$usersToday = \Illuminate\Support\Facades\Cache::remember('admin_stats_users_today_'.$today, 60, function () use ($today) {
return \App\Models\User::whereRaw('DATE(created_at) = ?', [$today])->count();
return \App\Models\User::whereNull('deleted_at')->whereRaw('DATE(created_at) = ?', [$today])->count();
});
return [
@@ -160,6 +172,8 @@ class AdminPageController extends BasePageController
'active_groups' => $activeGroupsCount,
'failed' => $failedCount,
'reported' => $reportedCount,
'soft_deleted_users' => $softDeletedCount,
'permanently_deleted_users' => $permanentlyDeletedCount,
'disk_free' => $this->getDiskSpace(),
];
}
+27 -1
View File
@@ -9,7 +9,7 @@
</div>
<!-- Stats Grid -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-6">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 gap-6">
<!-- Total Releases -->
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm p-6 border border-gray-200 dark:border-gray-700">
<div class="flex items-center justify-between">
@@ -99,6 +99,32 @@
</a>
</div>
</div>
<!-- Deleted Users -->
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-sm p-6 border border-gray-200 dark:border-gray-700">
<div class="flex items-center justify-between">
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">Deleted Users</p>
<p class="text-3xl font-bold text-gray-800 dark:text-gray-200">{{ number_format(($stats['soft_deleted_users'] ?? 0) + ($stats['permanently_deleted_users'] ?? 0)) }}</p>
</div>
<div class="w-12 h-12 bg-red-100 dark:bg-red-900 rounded-lg flex items-center justify-center">
<i class="fas fa-user-slash text-2xl text-red-600 dark:text-red-400"></i>
</div>
</div>
<div class="mt-4 space-y-1">
<span class="text-sm text-yellow-600 dark:text-yellow-400 block">
<i class="fas fa-trash"></i> {{ number_format($stats['soft_deleted_users'] ?? 0) }} soft deleted
</span>
<span class="text-sm text-red-600 dark:text-red-400 block">
<i class="fas fa-trash-alt"></i> {{ number_format($stats['permanently_deleted_users'] ?? 0) }} permanently deleted
</span>
</div>
<div class="mt-2">
<a href="{{ route('admin.deleted.users.index') }}" class="text-sm text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300">
View deleted users <i class="fas fa-arrow-right"></i>
</a>
</div>
</div>
</div>
<!-- User Statistics Widget -->