&page= * Lädt plugins//pages/.php innerhalb des normalen Mitarbeiter-Layouts. */ require_once __DIR__ . '/../includes/bootstrap.php'; $staff = require_staff_login(); $pdo = get_db(); $slug = (string) ($_GET['p'] ?? ''); $page = (string) ($_GET['page'] ?? ''); if (!plugin_valid_slug($slug) || !preg_match('/^[A-Za-z0-9_-]+$/', $page)) { http_response_code(404); exit('Seite nicht gefunden.'); } $loaded = plugin_state()['loaded'][$slug] ?? null; $file = plugins_dir() . '/' . $slug . '/pages/' . $page . '.php'; // Nur Seiten, die das Plugin selbst als Menüpunkt registriert hat (verhindert den Aufruf beliebiger Dateien) $registered = array_filter(plugin_state()['menus'], fn($m) => $m['plugin'] === $slug && $m['page'] === $page); if (!$loaded || !$registered || !is_file($file)) { http_response_code(404); exit('Seite nicht gefunden oder Plugin nicht aktiv.'); } $menu = reset($registered); if ($menu['permission'] !== null && !has_permission($staff, $menu['permission'])) { http_response_code(403); exit('Keine Berechtigung.'); } $isAdminPage = ($menu['belongs_to'] ?? null) === 'admin'; // Adminportal-Seite eines Plugins: nur für Administratoren if ($isAdminPage && ($staff['role'] ?? '') !== 'admin') { http_response_code(403); exit('Keine Berechtigung.'); } $pageTitle = $menu['label']; $activePage = (!empty($menu['belongs_to']) && !$isAdminPage) ? (string) $menu['belongs_to'] : 'plugin_' . $slug; // Reiter-Seiten markieren die übergeordnete Seite (zum Beispiel „Backup“) require __DIR__ . '/_header.php'; if (!empty($menu['belongs_to']) && !$isAdminPage) echo plugin_subpage_tabs((string) $menu['belongs_to'], $staff, $slug . ':' . $page); plugin_guard($slug, function () use ($file, $staff, $pdo) { // Variablen für die Plugin-Seite: $staff, $pdo include $file; }); require __DIR__ . '/_footer.php';