*/ public function buildPageData(): array { return [ 'overview' => $this->buildOverview(), 'modules' => $this->buildModuleInventory(), 'permissions' => $this->buildPermissionSummary(), ]; } /** * @return array */ private function buildOverview(): array { return [ 'php_version' => PHP_VERSION, 'php_sapi' => PHP_SAPI, 'app_environment' => $this->resolveEnvironment(), 'health_checks' => $this->healthService->runAll(), ]; } /** * @return list, permissions_count: int}> */ private function buildModuleInventory(): array { if ($this->moduleRegistry === null) { return []; } $modules = []; foreach ($this->moduleRegistry->getModules() as $manifest) { $modules[] = [ 'id' => $manifest->id, 'version' => $manifest->version, 'enabled_by_default' => $manifest->enabledByDefault, 'requires' => $manifest->requires, 'permissions_count' => count($manifest->permissions), ]; } usort($modules, static fn (array $a, array $b): int => strcmp($a['id'], $b['id'])); return $modules; } /** * @return array{active_count: int, inactive_count: int, by_source: array} */ private function buildPermissionSummary(): array { $activeKeys = $this->healthRepository->listAllActivePermissionKeys(); $bySource = $this->derivePermissionsBySource($activeKeys); return [ 'active_count' => $this->healthRepository->countActivePermissions(), 'inactive_count' => $this->healthRepository->countInactivePermissions(), 'by_source' => $bySource, ]; } /** * @param list $activeKeys * @return array */ private function derivePermissionsBySource(array $activeKeys): array { $moduleKeys = []; if ($this->moduleRegistry !== null) { foreach ($this->moduleRegistry->getModules() as $manifest) { foreach ($manifest->permissions as $perm) { $key = $perm['key'] ?? ''; if ($key !== '') { $moduleKeys[$key] = $manifest->id; } } } } $counts = []; foreach ($activeKeys as $key) { $source = $moduleKeys[$key] ?? 'core'; $counts[$source] = ($counts[$source] ?? 0) + 1; } ksort($counts); return $counts; } private function resolveEnvironment(): string { if (defined('APP_ENV')) { return (string) APP_ENV; } $env = getenv('APP_ENV'); return is_string($env) && $env !== '' ? $env : 'unknown'; } }