feature/UI-Update #12
@ -62,6 +62,7 @@ class DashboardController
|
|||||||
'data' => [
|
'data' => [
|
||||||
// Die View erwartet aktuell $serverStatus.
|
// Die View erwartet aktuell $serverStatus.
|
||||||
'serverStatus' => $serverStatus,
|
'serverStatus' => $serverStatus,
|
||||||
|
'loginPage' => false,
|
||||||
],
|
],
|
||||||
'pageTitle' => 'Dashboard',
|
'pageTitle' => 'Dashboard',
|
||||||
// In der Sidebar soll der Dashboard-Menüpunkt aktiv sein.
|
// In der Sidebar soll der Dashboard-Menüpunkt aktiv sein.
|
||||||
|
|||||||
@ -78,6 +78,7 @@ class UserManagementController
|
|||||||
'users' => $users,
|
'users' => $users,
|
||||||
'groups' => $groups,
|
'groups' => $groups,
|
||||||
'error' => $error,
|
'error' => $error,
|
||||||
|
'loginPage' => false,
|
||||||
],
|
],
|
||||||
'pageTitle' => 'Benutzer & Gruppen',
|
'pageTitle' => 'Benutzer & Gruppen',
|
||||||
'activeMenu' => 'users',
|
'activeMenu' => 'users',
|
||||||
|
|||||||
@ -3,6 +3,23 @@
|
|||||||
// Strenge Typprüfung für Parameter- und Rückgabetypen aktivieren.
|
// Strenge Typprüfung für Parameter- und Rückgabetypen aktivieren.
|
||||||
declare(strict_types=1);
|
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.
|
// Eine neue Session wird gestartet und die entsprechende Variable ($_SESSION) angelegt oder eine bestehende wird fortgesetzt.
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
@ -33,7 +50,9 @@ spl_autoload_register(
|
|||||||
|
|
||||||
require __DIR__ . '/views/layout.php';
|
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';
|
$configPath = __DIR__ . '/../config/config.php';
|
||||||
if (file_exists($configPath) === false) {
|
if (file_exists($configPath) === false) {
|
||||||
// Fail fast: ohne Konfiguration macht die App keinen Sinn
|
// Fail fast: ohne Konfiguration macht die App keinen Sinn
|
||||||
@ -87,6 +106,11 @@ function handleResult(?array $result): void
|
|||||||
|
|
||||||
$contentView = (string)($result['view'] ?? '');
|
$contentView = (string)($result['view'] ?? '');
|
||||||
$viewData = (array)($result['data'] ?? []);
|
$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'] ?? '');
|
$pageTitle = (string)($result['pageTitle'] ?? '');
|
||||||
$activeMenu = $result['activeMenu'] ?? null;
|
$activeMenu = $result['activeMenu'] ?? null;
|
||||||
|
|
||||||
@ -100,14 +124,21 @@ function handleResult(?array $result): void
|
|||||||
renderLayout($contentView, $viewData, $pageTitle, is_string($activeMenu) ? $activeMenu : null);
|
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);
|
$authController = new AuthController($config);
|
||||||
$dashboardController = new DashboardController($config);
|
$dashboardController = new DashboardController($config);
|
||||||
$userManagementController = new UserManagementController($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';
|
$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) {
|
switch ($route) {
|
||||||
case 'login':
|
case 'login':
|
||||||
// Login-Formular anzeigen (ggf. mit Fehlermeldung)
|
// Login-Formular anzeigen (ggf. mit Fehlermeldung)
|
||||||
|
|||||||
@ -2,6 +2,18 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
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 */
|
/** @var array<string, mixed> $serverStatus */
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@ -96,5 +108,4 @@ declare(strict_types=1);
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<!-- Hier kann man du später Charts, weitere Karten usw. anhängen -->
|
||||||
<!-- Hier kannst du später Charts, weitere Karten usw. anhängen -->
|
|
||||||
|
|||||||
@ -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';
|
$partialsPath = __DIR__ . '/partials';
|
||||||
|
$isLoginPage = !empty($viewData['loginPage']);
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
@ -38,7 +41,9 @@ function renderLayout(string $contentView, array $viewData, string $pageTitle, ?
|
|||||||
<!-- Page Wrapper -->
|
<!-- Page Wrapper -->
|
||||||
<div id="wrapper">
|
<div id="wrapper">
|
||||||
<!-- Begin Sidebar -->
|
<!-- Begin Sidebar -->
|
||||||
<?php if (!$viewData['loginPage']): require $partialsPath . '/sidebar.php'; endif ?>
|
<?php if ($isLoginPage === false):
|
||||||
|
require __DIR__ . '/partials/sidebar.php';
|
||||||
|
endif;?>
|
||||||
<!-- End of Sidebar -->
|
<!-- End of Sidebar -->
|
||||||
<!-- Content Wrapper -->
|
<!-- Content Wrapper -->
|
||||||
<div id="content-wrapper" class="d-flex flex-column">
|
<div id="content-wrapper" class="d-flex flex-column">
|
||||||
@ -46,7 +51,9 @@ function renderLayout(string $contentView, array $viewData, string $pageTitle, ?
|
|||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<!-- Begin Topbar -->
|
<!-- Begin Topbar -->
|
||||||
<?php if (!$viewData['loginPage']): require $partialsPath . '/topbar.php'; endif; ?>
|
<?php if ($isLoginPage === false):
|
||||||
|
require __DIR__ . '/partials/topbar.php';
|
||||||
|
endif; ?>
|
||||||
<!-- End of Topbar -->
|
<!-- End of Topbar -->
|
||||||
<!-- Begin Page Content -->
|
<!-- Begin Page Content -->
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|||||||
@ -1,7 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
declare(strict_types=1);
|
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 */
|
/** @var string|null $error */
|
||||||
?>
|
?>
|
||||||
|
|||||||
@ -1,5 +1,16 @@
|
|||||||
<?php
|
<?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.
|
||||||
|
*/
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,16 @@
|
|||||||
<?php
|
<?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.
|
||||||
|
*/
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,19 @@
|
|||||||
<?php
|
<?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-->
|
<!-- Scroll to Top Button-->
|
||||||
<a class="scroll-to-top rounded" href="#page-top">
|
<a class="scroll-to-top rounded" href="#page-top">
|
||||||
|
|||||||
@ -1,5 +1,17 @@
|
|||||||
<?php
|
<?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">
|
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
|
||||||
|
|||||||
@ -1,5 +1,16 @@
|
|||||||
<?php
|
<?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).
|
||||||
|
*/
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,20 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
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>> $users
|
||||||
* @var array<int, array<string, string>> $groups
|
* @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">
|
<table class="table table-bordered" id="usersTable" width="100%" cellspacing="0">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th><input type="checkbox" name="selectAllUsers"></th>
|
||||||
<th>Anmeldename (sAMAccountName)</th>
|
<th>Anmeldename (sAMAccountName)</th>
|
||||||
<th>Anzeigename</th>
|
<th>Anzeigename</th>
|
||||||
<th>E-Mail</th>
|
<th>E-Mail</th>
|
||||||
@ -41,6 +56,9 @@ declare(strict_types=1);
|
|||||||
<tbody>
|
<tbody>
|
||||||
<?php foreach ($users as $user): ?>
|
<?php foreach ($users as $user): ?>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="selectUser<?php echo htmlspecialchars($user['samaccountname'] ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>">
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<?php echo htmlspecialchars($user['samaccountname'] ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
|
<?php echo htmlspecialchars($user['samaccountname'] ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user