diff --git a/DeskHub-Webseite/staff/_header.php b/DeskHub-Webseite/staff/_header.php index 670d2c24..a6b38293 100644 --- a/DeskHub-Webseite/staff/_header.php +++ b/DeskHub-Webseite/staff/_header.php @@ -1,429 +1,430 @@ - - - - - - -<?= e($pageTitle ?? 'DeskHub – Mitarbeiterbereich') ?> - - - - - -"> - - - - - - - - - - -
- + + + + + + + +
+ +
+ + +
+ $staff ?? null, 'activePage' => $activePage ?? '']) /* Hinweise von Plugins oben auf jeder Seite (fertiges HTML aus vertrauenswürdigem Plugin-Code) */ ?> + +
+ + + + + +
+ Datenbank veraltet: ausstehende Änderung(en) – der Code ist neuer als die Datenbank. + Jetzt aktualisieren +
+ + +
+ Plugin-Updates verfügbar: $u['name'] . ' ' . $u['available'], $__upd))) ?> + Zu den Plugins +
+ + + +
+ 🔓 Als Admin können Sie die Sperre von „“ auf Ticket # sofort aufheben, statt auf den automatischen Timeout zu warten. +
+ + + + +
+
+ + +
+ ⚠️ SQLite-Modus aktiv: Nicht für den Produktivbetrieb geeignet. + Bitte in config/config.php auf driver = 'mysql' umstellen und MySQL-Zugangsdaten eintragen. +
+ + +
+ 🔑 Kein App-Key gesetzt: Passwörter werden nur schwach verschlüsselt. + Bitte in config/config.php den Wert app_key setzen. + Generieren: php -r "echo bin2hex(random_bytes(32));" +
+ diff --git a/DeskHub-Webseite/staff/profile.php b/DeskHub-Webseite/staff/profile.php index fe6f155d..88b4eb7c 100644 --- a/DeskHub-Webseite/staff/profile.php +++ b/DeskHub-Webseite/staff/profile.php @@ -108,10 +108,15 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($action === 'save_settings') { $onVacation = !empty($_POST['is_on_vacation']) ? 1 : 0; $substituteId = ($_POST['vacation_substitute_id'] ?? '') !== '' ? (int)$_POST['vacation_substitute_id'] : null; + $beforeRow = $pdo->prepare('SELECT is_on_vacation, vacation_substitute_id FROM staff WHERE id = ?'); + $beforeRow->execute([$staff['id']]); + $beforeRow = $beforeRow->fetch() ?: ['is_on_vacation' => 0, 'vacation_substitute_id' => null]; $pdo->prepare('UPDATE staff SET is_on_vacation=?, vacation_substitute_id=? WHERE id=?') ->execute([$onVacation, $substituteId, $staff['id']]); audit_log($staff['id'], $onVacation ? 'Abwesenheit aktiviert' : 'Abwesenheit deaktiviert'); - flash('success', 'Einstellungen gespeichert.'); + // Offene Tickets an die Vertretung weitergeben bzw. nach dem Urlaub zurückholen + [$handed, $back] = vacation_apply_change($pdo, (int) $staff['id'], [$beforeRow['is_on_vacation'], $beforeRow['vacation_substitute_id']], [$onVacation, $substituteId], !empty($_POST['hand_over'])); + flash('success', 'Einstellungen gespeichert.' . ($handed ? ' ' . $handed . ' offene Tickets wurden an die Vertretung weitergegeben.' : '') . ($back ? ' ' . $back . ' Tickets sind wieder bei Ihnen.' : '')); redirect('/staff/profile.php?tab=settings'); } @@ -129,6 +134,13 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { redirect('/staff/profile.php?tab=account'); } + // ── Gemerktes Gerät entfernen (Anmelde-Wächter) ──────────────── + if ($action === 'forget_device') { + $pdo->prepare('DELETE FROM login_devices WHERE id = ? AND staff_id = ?')->execute([(int) ($_POST['device_id'] ?? 0), $staff['id']]); + flash('success', 'Gerät entfernt.'); + redirect('/staff/profile.php?tab=security'); + } + // ── 2FA aktivieren ───────────────────────────────────────────── if ($action === 'enable_2fa') { $code = trim($_POST['totp_code'] ?? ''); @@ -352,7 +364,7 @@ require __DIR__ . '/_header.php'; > Urlaubsmodus aktiv
- Neue Tickets werden nicht automatisch diesem Konto zugewiesen, während der Urlaubsmodus aktiv ist. Bereits zugewiesene Tickets bleiben unverändert. + Neue Tickets werden nicht automatisch diesem Konto zugewiesen, während der Urlaubsmodus aktiv ist.
@@ -362,7 +374,11 @@ require __DIR__ . '/_header.php'; -

Neue Tickets werden während Ihrer Abwesenheit automatisch dieser Person zugewiesen.

+

Neue Tickets werden während Ihrer Abwesenheit automatisch dieser Person zugewiesen. Sie sieht dafür auch Ihre Abteilungen.

+
Urlaubsmodus ist aktuell aktiv. Sie erhalten keine automatischen Ticket-Zuweisungen.
@@ -480,6 +496,44 @@ $setupSecret = $_SESSION['totp_setup_secret'] ?? '';
+prepare('SELECT * FROM login_devices WHERE staff_id = ? ORDER BY last_seen DESC'); +$myDevices->execute([$staff['id']]); +$myDevices = $myDevices->fetchAll(); +$myEvents = $pdo->prepare('SELECT * FROM login_events WHERE staff_id = ? ORDER BY id DESC LIMIT 10'); +$myEvents->execute([$staff['id']]); +$myEvents = $myEvents->fetchAll(); +$eventLabels = login_guard_event_labels(); +?> +
+

🛡️ Meine Geräte und Anmeldungen

+

Von diesen Geräten haben Sie sich schon angemeldet. Meldet sich jemand von einem neuen Gerät oder Ort an, bekommen Sie eine Mail. Ein Gerät, das Sie nicht kennen, können Sie hier entfernen; ändern Sie dann auch Ihr Passwort.

+

Noch keine Geräte gemerkt.

+
+ + + + + + + + + + + +
GerätLetzter OrtZuletzt gesehen
, seit
+ + +

Letzte Anmeldungen

+
+ + + + + +
()
+ +