Files
deskhub/DeskHub-Webseite/staff/plugin.php
T
2026-10-19 18:06:00 +00:00

31 lines
1.6 KiB
PHP

<?php
/**
* Hostseite für Plugin-Seiten: /staff/plugin.php?p=<slug>&page=<seite>
* Lädt plugins/<slug>/pages/<seite>.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.'); }
$pageTitle = $menu['label'];
$activePage = !empty($menu['belongs_to']) ? (string) $menu['belongs_to'] : 'plugin_' . $slug; // Reiter-Seiten markieren die übergeordnete Seite (zum Beispiel „Backup“)
require __DIR__ . '/_header.php';
if (!empty($menu['belongs_to'])) 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';