Zentrale Verwaltung für Mandanten, Lizenzen, Updates und Betriebsstatus.
-diff --git a/saas-app/public/admin.php b/saas-app/public/admin.php index 9ee1a0f..4d3ed24 100644 --- a/saas-app/public/admin.php +++ b/saas-app/public/admin.php @@ -19,7 +19,28 @@ function admin_h(string $value): string function admin_badge(string $label, string $tone = 'neutral'): string { - return '' . admin_h($label) . ''; + $class = 'status'; + + if ($tone === 'success') { + $class .= ' status--success'; + } elseif ($tone === 'warning') { + $class .= ' status--warning'; + } elseif ($tone === 'error') { + $class .= ' status--danger'; + } + + return '' . admin_h($label) . ''; +} + +function admin_metric_value(array $metrics, string $label, string $fallback = '0'): string +{ + foreach ($metrics as $metric) { + if ((string) ($metric['label'] ?? '') === $label) { + return (string) ($metric['value'] ?? $fallback); + } + } + + return $fallback; } function admin_update_summary(array $items): array @@ -217,329 +238,1353 @@ SQL, ); } } + +$navItems = $admin === null + ? [ + ['href' => '/admin/login/', 'label' => 'Login', 'page' => 'login'], + ] + : [ + ['href' => '/admin/', 'label' => 'Übersicht', 'page' => 'overview'], + ['href' => '/admin/tenants/', 'label' => 'Mandanten', 'page' => 'tenants'], + ['href' => '/admin/updates/', 'label' => 'Updates', 'page' => 'updates'], + ['href' => '/admin/migration/', 'label' => 'Migrationen', 'page' => 'migration'], + ]; + +$pageTitle = match ($page) { + 'login' => 'Kaffeeliste Admin - Login', + 'overview' => 'Kaffeeliste Admin - Übersicht', + 'tenants' => 'Kaffeeliste Admin - Mandanten', + 'updates' => 'Kaffeeliste Admin - Updates', + 'migration' => 'Kaffeeliste Admin - Migrationen', + default => 'Kaffeeliste Admin', +}; + +$pageHero = match ($page) { + 'login' => [ + 'kicker' => 'Global-Admin', + 'title' => 'Zentrale Administration für die Kaffeeliste.', + 'lead' => 'Dieser Zugang ist ausschließlich für die globale Verwaltung gedacht und bleibt bewusst vom Mitglieder-Login getrennt.', + 'badges' => ['Getrennter Zugang', 'Mandanten', 'Updates & Migrationen'], + 'aside' => [ + ['label' => 'Zugang', 'value' => 'Separat', 'detail' => 'Der Global-Admin bleibt bewusst vom Mitglieder-Login getrennt.'], + ['label' => 'Oberfläche', 'value' => 'Zentral', 'detail' => 'Mandanten, Lizenzen und Betriebsaufgaben in einer Konsole.'], + ['label' => 'Version', 'value' => $appVersion, 'detail' => 'Aktuell bereitgestellter Stand der Anwendung.'], + ], + ], + 'overview' => [ + 'kicker' => 'Zentrale Übersicht', + 'title' => 'Portfolio, Lizenzen und Systemstände in einer Oberfläche.', + 'lead' => 'Die globale Verwaltung bündelt die wichtigsten Betriebsdaten und führt direkt in Lizenzpflege, Mandanten-Einstieg sowie Updates und Migrationen.', + 'badges' => ['Portfolio', 'Betrieb', 'Freischaltungen'], + 'aside' => [ + ['label' => 'Mandanten', 'value' => admin_metric_value($summaryMetrics, 'Mandanten gesamt'), 'detail' => 'Im zentralen Portfolio sichtbar.'], + ['label' => 'Updates offen', 'value' => (string) $updateSummary['pending'], 'detail' => 'Direkt aus der Weboberfläche ausführbar.'], + ['label' => 'Version', 'value' => $appVersion, 'detail' => 'Aktuell bereitgestellter Stand der Anwendung.'], + ], + ], + 'tenants' => [ + 'kicker' => 'Mandanten-Verwaltung', + 'title' => 'Mandanten zentral anlegen, lizenzieren und betreten.', + 'lead' => 'Hier pflegt der Global-Admin die Stammdaten aller Mandanten und steuert, welche Funktionspakete pro Lizenz freigeschaltet sind.', + 'badges' => ['Portfolio', 'Lizenzen', 'Mandantenzugang'], + 'aside' => [ + ['label' => 'Aktiv', 'value' => admin_metric_value($summaryMetrics, 'Aktive Mandanten'), 'detail' => 'Mandanten mit aktivem Status.'], + ['label' => 'Mitglieder', 'value' => admin_metric_value($summaryMetrics, 'Mitglieder gesamt'), 'detail' => 'Aktive Zuordnungen über alle Mandanten.'], + ['label' => 'SSO-Provider', 'value' => admin_metric_value($summaryMetrics, 'SSO-Provider'), 'detail' => 'Aktive Identitätsanbieter auf der Plattform.'], + ], + ], + 'updates' => [ + 'kicker' => 'Update-Center', + 'title' => 'System-Updates zentral prüfen und ausführen.', + 'lead' => 'Schema-Erweiterungen und Datenanpassungen werden versioniert dokumentiert und können direkt über die Weboberfläche angestoßen werden.', + 'badges' => ['Deployment', 'Web-Ausführung', 'Protokoll'], + 'aside' => [ + ['label' => 'Offen', 'value' => (string) $updateSummary['pending'], 'detail' => 'Warten auf Ausführung.'], + ['label' => 'Erfolgreich', 'value' => (string) $updateSummary['success'], 'detail' => 'Bereits dokumentiert abgeschlossen.'], + ['label' => 'Fehlgeschlagen', 'value' => (string) $updateSummary['failed'], 'detail' => 'Brauchen Aufmerksamkeit.'], + ], + ], + default => [ + 'kicker' => 'Migrations-Center', + 'title' => 'Datenbank-Migrationen zentral prüfen und ausführen.', + 'lead' => 'Die SQL-Migrationen aus database/migrations können hier nachvollziehbar über die zentrale Verwaltung eingespielt werden.', + 'badges' => ['Schema', 'Baseline', 'Web-Ausführung'], + 'aside' => [ + ['label' => 'Offen', 'value' => (string) $migrationSummary['pending'], 'detail' => 'Noch nicht eingespielt.'], + ['label' => 'Erfolgreich', 'value' => (string) $migrationSummary['success'], 'detail' => 'Bereits protokolliert.'], + ['label' => 'Fehlgeschlagen', 'value' => (string) $migrationSummary['failed'], 'detail' => 'Brauchen Aufmerksamkeit.'], + ], + ], +}; + +$flashClass = match ((string) ($flash['type'] ?? 'success')) { + 'error' => 'alert--danger', + 'warning' => 'alert--warning', + default => 'alert--success', +}; ?>
-Zentrale Verwaltung für Mandanten, Lizenzen, Updates und Betriebsstatus.
-