backend()->entryView(), [ 'userCount' => User::count(), 'roleCount' => Schema::hasTable('roles') ? Role::count() : 0, 'mediaCount' => Schema::hasTable('media') ? Media::count() : 0, 'auditCount' => Schema::hasTable('audit_logs') ? AuditLog::count() : 0, 'recentAudit' => $this->recentAudit(), 'modules' => $this->modules(), ]); } private function recentAudit(): LengthAwarePaginator { if (! Schema::hasTable('audit_logs')) { return new LengthAwarePaginator( items: [], total: 0, perPage: 8, currentPage: Paginator::resolveCurrentPage('audit_page'), options: [ 'path' => request()->url(), 'pageName' => 'audit_page', ], ); } return AuditLog::query() ->latest('created_at') ->paginate(8, ['*'], 'audit_page') ->withQueryString(); } private function modules(): LengthAwarePaginator { $statuses = json_decode((string) file_get_contents(base_path('modules_statuses.json')), true) ?: []; $modules = []; foreach (glob(base_path('Modules/*/module.json')) ?: [] as $manifest) { $data = json_decode((string) file_get_contents($manifest), true) ?: []; $name = $data['name'] ?? basename(dirname($manifest)); $modules[] = [ 'name' => $name, 'version' => $data['version'] ?? '1.0.0', 'enabled' => (bool) ($statuses[$name] ?? false), ]; } usort($modules, fn (array $a, array $b): int => strcasecmp($a['name'], $b['name'])); $pageName = 'modules_page'; $perPage = 8; $currentPage = Paginator::resolveCurrentPage($pageName); return (new LengthAwarePaginator( items: array_slice($modules, ($currentPage - 1) * $perPage, $perPage), total: count($modules), perPage: $perPage, currentPage: $currentPage, options: [ 'path' => request()->url(), 'pageName' => $pageName, ], ))->withQueryString(); } }