prepare("SELECT \"Admin\" FROM user_permissions WHERE user_id = ?"); $stmt->execute([$_SESSION["user_id"]]); $isAdmin = $stmt->fetchColumn(); if ((int)$isAdmin !== 1) { header("Location: {$g_httpHomePath}"); exit(); } if ($_SERVER['REQUEST_METHOD'] === 'POST' && !authorization_csrf_is_valid($_POST['csrf_token'] ?? null)) { header('Location: admin_inbox.php?inbox_status=error'); exit(); } // Typ-Konfiguration für Inbox $typeConfig = [ 'registration' => ['label' => 'Registrierung', 'class' => 'inbox-type-registration'], 'contact' => ['label' => 'Kontakt', 'class' => 'inbox-type-contact'], 'system' => ['label' => 'System', 'class' => 'inbox-type-system'], ]; // Filter $activeFilter = $_GET['filter'] ?? 'all'; $validFilters = array_merge(['all'], array_keys($typeConfig)); if (!in_array($activeFilter, $validFilters, true)) $activeFilter = 'all'; function getTypeLabel($type, $typeConfig) { return $typeConfig[$type]['label'] ?? ucfirst($type); } function getTypeClass($type, $typeConfig) { return $typeConfig[$type]['class'] ?? 'inbox-type-system'; } // Kontaktnachricht als erledigt markieren if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["mark_done"])) { $msgId = (int)$_POST["mark_done"]; $stmt = $pdo->prepare("UPDATE admin_messages SET status = 'done', processed_at = NOW() WHERE id = ?"); $stmt->execute([$msgId]); header("Location: admin_inbox.php?inbox_status=done"); exit(); } // Brandschutz-Eskalation: Admin bestätigt persönliche Erinnerung if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["bs_escalation_confirm"])) { $msgId = (int)$_POST["bs_escalation_msg_id"]; $bsUserId = (int)$_POST["bs_escalation_user_id"]; // Nachricht als erledigt markieren $stmt = $pdo->prepare("UPDATE admin_messages SET status = 'done', processed_at = NOW() WHERE id = ?"); $stmt->execute([$msgId]); // Log-Eintrag erstellen $adminName = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? '')); if (empty($adminName)) $adminName = 'Ein Administrator'; $stmtUser = $pdo->prepare("SELECT first_name, last_name, mail FROM user_general_information WHERE user_id = ?"); $stmtUser->execute([$bsUserId]); $bsUserData = $stmtUser->fetch(PDO::FETCH_ASSOC); $bsUserName = trim(($bsUserData['first_name'] ?? '') . ' ' . ($bsUserData['last_name'] ?? '')); if (empty($bsUserName)) $bsUserName = $bsUserData['mail'] ?? 'Unbekannt'; $logSubject = "Persönliche Brandschutz-Erinnerung bestätigt: {$bsUserName}"; $logMessage = "{$adminName} hat bestätigt, {$bsUserName} persönlich an die ausstehende Brandschutzunterweisung erinnert zu haben."; $stmtLog = $pdo->prepare("INSERT INTO admin_messages (type, sender_name, sender_email, subject, message, status, processed_at, created_at) VALUES ('system', ?, ?, ?, ?, 'done', NOW(), NOW())"); $senderMail = $bsUserData['mail'] ?? ''; $stmtLog->execute([$adminName, $senderMail, $logSubject, $logMessage]); header("Location: admin_inbox.php?inbox_status=done"); exit(); } // Nachrichten laden (mit optionalem Filter) $filterClause = ''; if ($activeFilter !== 'all') { $filterClause = " AND type = '" . $activeFilter . "'"; } $pendingMessages = $pdo->query("SELECT * FROM admin_messages WHERE status = 'pending'{$filterClause} ORDER BY created_at DESC")->fetchAll(PDO::FETCH_ASSOC); $doneMessages = $pdo->query("SELECT * FROM admin_messages WHERE status = 'done'{$filterClause} ORDER BY processed_at DESC LIMIT 20")->fetchAll(PDO::FETCH_ASSOC); // Rollen laden für Registrierungs-Modal $permissionRoles = []; $rolesResult = $pdo->query("SELECT column_name FROM information_schema.columns WHERE table_name = 'user_permissions' AND table_schema = 'public'"); while ($col = $rolesResult->fetch(PDO::FETCH_ASSOC)) { if (!in_array($col['column_name'], ['p_id', 'user_id'], true)) { $permissionRoles[] = $col['column_name']; } } ?> ['type' => 'success', 'text' => 'Nachricht als erledigt markiert.'], 'approved' => ['type' => 'success', 'text' => 'Registrierung freigegeben.'], 'rejected' => ['type' => 'success', 'text' => 'Registrierung abgelehnt.'], 'error' => ['type' => 'error', 'text' => 'Ein Fehler ist aufgetreten.'], ]; $statusKey = $_GET["inbox_status"]; $statusInfo = $inboxStatusMap[$statusKey] ?? ['type' => 'success', 'text' => 'Aktion ausgeführt.']; ?>
Adminpanel
Alle $typeCfg): ?>
Offene Anfragen
0): ?>
Keine offenen Anfragen vorhanden.
Uhr
Von: ()
0): ?>
Erledigte Anfragen (letzte 20)
Erledigt: Uhr
Von: ()
Registrierung bearbeiten
Persönliche Erinnerung bestätigen
Brandschutzunterweisung – Eskalation

Bitte bestätigen Sie, dass Sie persönlich an die ausstehende Brandschutzunterweisung erinnert haben.

Überfälligkeit