query('SELECT id, name FROM staff WHERE is_active = 1 ORDER BY name')->fetchAll(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { verify_csrf(); $action = $_POST['action'] ?? ''; if ($action === 'create' || $action === 'update') { $id = $action === 'update' ? (int) ($_POST['id'] ?? 0) : 0; try { team_save($pdo, $id, [ 'name' => $_POST['name'] ?? '', 'lead_id' => $_POST['lead_id'] ?? null, 'notes' => $_POST['notes'] ?? '', 'is_active' => ($_POST['status'] ?? 'active') === 'active', 'no_alerts' => !empty($_POST['no_alerts']), 'members' => $_POST['members'] ?? [], ]); audit_log($staff['id'], ($action === 'create' ? 'Team erstellt: ' : 'Team aktualisiert: ') . trim($_POST['name'] ?? '')); flash('success', $action === 'create' ? 'Team erstellt.' : 'Änderungen gespeichert.'); redirect('/staff/teams.php'); } catch (AdminModelException $e) { $errors[] = $e->getMessage(); } } if ($action === 'delete') { $deleted = team_delete($pdo, (int) $_POST['id']); audit_log($staff['id'], "Team gelöscht: {$deleted}"); flash('success', 'Team gelöscht.'); redirect('/staff/teams.php'); } } $isNew = isset($_GET['new']); $editId = (int) ($_GET['edit'] ?? 0); $showForm = $isNew || $editId || ($errors && in_array($_POST['action'] ?? '', ['create', 'update'], true)); $editTeam = null; $editMembers = []; if ($editId) { $es = $pdo->prepare('SELECT * FROM teams WHERE id = ?'); $es->execute([$editId]); $editTeam = $es->fetch() ?: null; $em = $pdo->prepare('SELECT staff_id FROM team_members WHERE team_id = ?'); $em->execute([$editId]); $editMembers = array_map('intval', $em->fetchAll(PDO::FETCH_COLUMN)); } if ($_POST && $errors) $editMembers = array_map('intval', (array) ($_POST['members'] ?? [])); $teams = $pdo->query( 'SELECT t.*, s.name AS lead_name, (SELECT COUNT(*) FROM team_members tm WHERE tm.team_id = t.id) AS member_count FROM teams t LEFT JOIN staff s ON s.id = t.lead_id ORDER BY t.name' )->fetchAll(); $fmt = fn(?string $dt) => $dt ? date('d.m.Y H:i', strtotime($dt)) : '–'; $pageTitle = 'Teams'; $activePage = 'teams'; require __DIR__ . '/_header.php'; ?>
Abteilungsübergreifende Mitarbeiter-Gruppen. Tickets können einem Team statt einem einzelnen Mitarbeiter zugewiesen werden; die Mitglieder werden dabei benachrichtigt.
| Teamname | Status | Mitglieder | Teamleiter | Erstellt | Zuletzt aktualisiert | |
|---|---|---|---|---|---|---|
| = e($t['name']) ?> | = $t['is_active'] ? 'Aktiv' : 'Deaktiviert' ?> | = (int) $t['member_count'] ?> | = e($t['lead_name'] ?? '') ?> | = e($fmt($t['created_at'] ?? null)) ?> | = e($fmt($t['updated_at'] ?? null)) ?> | Bearbeiten · |
| Noch keine Teams angelegt. | ||||||