feature/UI-Update #12

Merged
blaerf merged 4 commits from feature/UI-Update into develop 2025-11-29 06:32:51 +00:00
12 changed files with 154 additions and 13 deletions

View File

@ -62,6 +62,7 @@ class DashboardController
'data' => [
// Die View erwartet aktuell $serverStatus.
'serverStatus' => $serverStatus,
'loginPage' => false,
],
'pageTitle' => 'Dashboard',
// In der Sidebar soll der Dashboard-Menüpunkt aktiv sein.

View File

@ -78,6 +78,7 @@ class UserManagementController
'users' => $users,
'groups' => $groups,
'error' => $error,
'loginPage' => false,
],
'pageTitle' => 'Benutzer & Gruppen',
'activeMenu' => 'users',

View File

@ -3,6 +3,23 @@
// Strenge Typprüfung für Parameter- und Rückgabetypen aktivieren.
declare(strict_types=1);
/**
* Front-Controller der Webanwendung.
*
* Aufgaben:
* - Startet die Session und initialisiert den Autoloader für den App-Namespace.
* - Lädt die zentrale Konfiguration aus config/config.php.
* - Instanziiert die Hauptcontroller (Auth, Dashboard, User-Management).
* - Steuert das Routing anhand des GET-Parameters "route".
* - Leitet View-Result-Arrays an das zentrale Layout (renderLayout) weiter
* oder führt Redirects aus.
*
* WICHTIG:
* - Diese Datei ist der einzige öffentliche Einstiegspunkt (Entry Point) der App.
* - Alle neuen Routen sollten über den Switch-Block am Ende ergänzt werden.
*/
// Eine neue Session wird gestartet und die entsprechende Variable ($_SESSION) angelegt oder eine bestehende wird fortgesetzt.
session_start();
@ -33,7 +50,9 @@ spl_autoload_register(
require __DIR__ . '/views/layout.php';
// Pfad zur Konfigurationsdatei prüfen und Konfiguration laden
// Die Konfigurationsdatei liefert ein assoziatives Array mit den Teilbereichen
// "ldap", "snmp" und "security" (u. a. Session-Keys, Timeout-Einstellungen, OIDs).
$configPath = __DIR__ . '/../config/config.php';
if (file_exists($configPath) === false) {
// Fail fast: ohne Konfiguration macht die App keinen Sinn
@ -87,6 +106,11 @@ function handleResult(?array $result): void
$contentView = (string)($result['view'] ?? '');
$viewData = (array)($result['data'] ?? []);
// Standard: Wir gehen davon aus, dass es KEINE Loginseite ist,
// außer der Controller sagt explizit etwas anderes.
if (!array_key_exists('loginPage', $viewData)) {
$viewData['loginPage'] = false;
}
$pageTitle = (string)($result['pageTitle'] ?? '');
$activeMenu = $result['activeMenu'] ?? null;
@ -100,14 +124,21 @@ function handleResult(?array $result): void
renderLayout($contentView, $viewData, $pageTitle, is_string($activeMenu) ? $activeMenu : null);
}
// Controller instanziieren
// Zentrale Controller der Anwendung initialisieren und ihnen die vollständige Konfiguration übergeben.
// Die Controller holen sich daraus bei Bedarf ihre spezifischen Teilkonfigurationen (z. B. "ldap" oder "snmp").
$authController = new AuthController($config);
$dashboardController = new DashboardController($config);
$userManagementController = new UserManagementController($config);
// Route bestimmen
// Route aus dem Query-Parameter lesen. Standardroute ist "login",
// sodass nicht angemeldete Benutzer automatisch auf die Login-Seite geführt werden.
$route = $_GET['route'] ?? 'login';
// Einfache Router-Logik: Jede Route ruft eine Controller-Methode auf und
// übergibt deren View-Result an handleResult(). Neue Seiten werden hier ergänzt.
switch ($route) {
case 'login':
// Login-Formular anzeigen (ggf. mit Fehlermeldung)

View File

@ -2,6 +2,18 @@
declare(strict_types=1);
/**
* View-Template für das Server-Dashboard.
*
* Aufgaben:
* - Visualisiert den vom SnmpServerStatusService gelieferten Serverstatus.
* - Zeigt Kennzahlen wie Hostname, Uptime, CPU-Auslastung, RAM-Auslastung
* und Belegung der Systempartition "C:" an.
*
* Erwartete View-Daten:
* - array<string, mixed> $serverStatus Assoziatives Array mit Statuswerten (hostname, uptime, cpu_usage, memory_usage, disk_usage_c, last_update).
*/
/** @var array<string, mixed> $serverStatus */
?>
@ -96,5 +108,4 @@ declare(strict_types=1);
</div>
</div>
<!-- Hier kannst du später Charts, weitere Karten usw. anhängen -->
<!-- Hier kann man du später Charts, weitere Karten usw. anhängen -->

View File

@ -26,7 +26,10 @@ function renderLayout(string $contentView, array $viewData, string $pageTitle, ?
}
}
// Basispfad für alle Layout-Teilansichten (Head, Sidebar, Topbar, Footer, Scripts).
$partialsPath = __DIR__ . '/partials';
$isLoginPage = !empty($viewData['loginPage']);
?>
<!DOCTYPE html>
<html lang="de">
@ -38,7 +41,9 @@ function renderLayout(string $contentView, array $viewData, string $pageTitle, ?
<!-- Page Wrapper -->
<div id="wrapper">
<!-- Begin Sidebar -->
<?php if (!$viewData['loginPage']): require $partialsPath . '/sidebar.php'; endif ?>
<?php if ($isLoginPage === false):
require __DIR__ . '/partials/sidebar.php';
endif;?>
<!-- End of Sidebar -->
<!-- Content Wrapper -->
<div id="content-wrapper" class="d-flex flex-column">
@ -46,7 +51,9 @@ function renderLayout(string $contentView, array $viewData, string $pageTitle, ?
<!-- Main Content -->
<div id="content">
<!-- Begin Topbar -->
<?php if (!$viewData['loginPage']): require $partialsPath . '/topbar.php'; endif; ?>
<?php if ($isLoginPage === false):
require __DIR__ . '/partials/topbar.php';
endif; ?>
<!-- End of Topbar -->
<!-- Begin Page Content -->
<div class="container-fluid">

View File

@ -1,7 +1,20 @@
<?php
declare(strict_types=1);
const LOGIN_PAGE = true;
/**
* View-Template für die Login-Seite des AD Admin Tools.
*
* Aufgaben:
* - Stellt das Anmeldeformular für Administratoren dar.
* - Zeigt bei Bedarf eine Fehlermeldung aus der Authentifizierung an.
* - Kennzeichnet sich selbst über die Konstante LOGIN_PAGE, damit das Layout
* Sidebar und Topbar ausblenden kann.
*
* Erwartete View-Daten:
* - string|null $error Fehlermeldung aus dem AuthController (oder null bei Erfolg).
*/
/** @var string|null $error */
?>

View File

@ -1,5 +1,16 @@
<?php
// public/views/partials/footer.php
/**
* Partielle View für den Footer-Bereich und das Schließen der Layout-Container.
*
* Aufgaben:
* - Schließt die Container für den Hauptinhalt und den Content-Wrapper.
* - Rendert den Sticky-Footer mit einfachem Copyright-Hinweis.
* - Schließt die äußeren Wrapper-Elemente des SB-Admin-2-Layouts.
*
* Hinweis:
* - Die JavaScript-Ressourcen werden separat in scripts.php eingebunden.
*/
?>

View File

@ -1,5 +1,16 @@
<?php
// public/views/partials/head.php
/**
* Partielle View für den <head>-Bereich und den Beginn des HTML-Body.
*
* Aufgaben:
* - Setzt Zeichensatz und Dokumenttitel (inkl. optionalem Seitentitel).
* - Bindet die CSS-Ressourcen des SB-Admin-2-Templates sowie DataTables ein.
* - Öffnet das <body>-Element und den Wrapper für das Layout.
*
* WICHTIG:
* - Diese Datei wird ausschließlich über das zentrale Layout (layout.php) eingebunden.
*/
?>

View File

@ -1,5 +1,19 @@
<?php
// public/views/partials/scripts.php
/**
* Partielle View für alle JavaScript-Assets.
*
* Aufgaben:
* - Stellt den "Scroll to Top"-Button bereit.
* - Bindet die JavaScript-Abhängigkeiten des SB-Admin-2-Templates ein
* (jQuery, Bootstrap, jQuery-Easing).
* - Lädt optionale Plugins wie Chart.js und DataTables.
* - Lädt die Demo-Skripte für Charts und Tabellen (js/demo/...).
*
* Hinweis:
* - Diese Datei sollte am Ende des Body-Bereichs über das Layout eingebunden werden,
* damit die Seite schnell gerendert wird.
*/
?>
<!-- Scroll to Top Button-->
<a class="scroll-to-top rounded" href="#page-top">

View File

@ -1,5 +1,17 @@
<?php
// public/views/partials/sidebar.php
/**
* Partielle View für die linke Sidebar-Navigation.
*
* Aufgaben:
* - Zeigt das Branding (Logo + Titel "AD Admin Tool") im oberen Bereich.
* - Enthält die Navigationspunkte "Dashboard" und "Benutzer & Gruppen".
* - Markiert den aktuell aktiven Menüpunkt anhand der Variable $activeMenu.
* - Stellt den Sidebar-Toggler für schmalere Viewports bereit.
*
* Erwartete View-Daten:
* - string|null $activeMenu Kennzeichnung für den aktuell aktiven Eintrag (z. B. 'dashboard' oder 'users').
*/
?>
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">

View File

@ -1,5 +1,16 @@
<?php
// public/views/partials/topbar.php
/**
* Partielle View für die obere Navigationsleiste (Topbar).
*
* Aufgaben:
* - Stellt den Button zum Ein- und Ausklappen der Sidebar auf mobilen Geräten bereit.
* - Zeigt im rechten Bereich die Benutzerinformationen an (Anzeigename + Profilbild).
* - Bietet im Benutzer-Dropdown einen Logout-Link an, der die Route "logout" aufruft.
*
* Erwartete View-Daten:
* - string|null $currentUsername Anzeigename des aktuell angemeldeten Benutzers (optional).
*/
?>

View File

@ -2,6 +2,20 @@
declare(strict_types=1);
/**
* View-Template für die Anzeige von Benutzern und Gruppen.
*
* Aufgaben:
* - Stellt zwei Tabellen dar: eine Benutzerliste und eine Gruppenliste.
* - Nutzt Daten aus dem LdapDirectoryService (über den UserManagementController).
* - Behandelt optionale Fehlermeldungen durch Ausgabe eines Alert-Elements.
*
* Erwartete View-Daten:
* - array<int, array<string, string>> $users Liste von Benutzerobjekten (z. B. sAMAccountName, displayName, mail).
* - array<int, array<string, string>> $groups Liste von Gruppenobjekten (z. B. sAMAccountName, cn, description).
* - string|null $error Fehlermeldung bei Problemen mit dem LDAP-Zugriff.
*/
/**
* @var array<int, array<string, string>> $users
* @var array<int, array<string, string>> $groups
@ -33,6 +47,7 @@ declare(strict_types=1);
<table class="table table-bordered" id="usersTable" width="100%" cellspacing="0">
<thead>
<tr>
<th><input type="checkbox" name="selectAllUsers"></th>
<th>Anmeldename (sAMAccountName)</th>
<th>Anzeigename</th>
<th>E-Mail</th>
@ -41,6 +56,9 @@ declare(strict_types=1);
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td>
<input type="checkbox" name="selectUser<?php echo htmlspecialchars($user['samaccountname'] ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>">
</td>
<td>
<?php echo htmlspecialchars($user['samaccountname'] ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
</td>