{$nav}
HTML; } public static function footer(): void { echo "
"; } private static function navHtml(string $active): string { $items = [ 'dashboard' => ['index.php', 'Dashboard'], 'licenses' => ['licenses.php', 'Licenses'], 'versions' => ['versions.php', 'Versions'], 'launcher' => ['launcher.php', 'Launcher'], 'audit' => ['audit.php', 'Audit'], ]; $links = ''; foreach ($items as $k => [$href, $label]) { $cls = ($k === $active) ? 'active' : ''; $links .= sprintf( '%s', htmlspecialchars($href), $cls, htmlspecialchars($label) ); } return << PS_Launcher Admin {$links} Déconnexion HTML; } public static function flash(?string $msg, string $type = 'success'): void { if ($msg === null || $msg === '') return; $cls = $type === 'error' ? 'error' : 'success'; echo "
" . nl2br(htmlspecialchars($msg)) . "
"; } public static function csrfField(): string { return ''; } public static function formatBytes(int $bytes): string { if ($bytes <= 0) return '—'; $units = ['o', 'Ko', 'Mo', 'Go', 'To']; $u = 0; $v = (float)$bytes; while ($v >= 1024 && $u < count($units) - 1) { $v /= 1024; $u++; } return number_format($v, 1) . ' ' . $units[$u]; } }