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'; ?>
$_POST[$k] ?? $default; $v = fn(string $k, string $col, $default = '') => $f($k, $editTeam[$col] ?? $default); $curStatus = $_POST ? ($_POST['status'] ?? 'active') : (($editTeam['is_active'] ?? 1) ? 'active' : 'inactive'); $curLead = (string) $v('lead_id', 'lead_id'); $noAlerts = $_POST ? !empty($_POST['no_alerts']) : !empty($editTeam['no_alerts']); ?>

—

Teaminformationen

Administratornotizen – Interne Notizen, sichtbar für alle Administratoren

Abbrechen

Teams

Neues Team hinzufügen

Abteilungsübergreifende Mitarbeiter-Gruppen. Tickets können einem Team statt einem einzelnen Mitarbeiter zugewiesen werden; die Mitglieder werden dabei benachrichtigt.

TeamnameStatusMitgliederTeamleiterErstelltZuletzt aktualisiert
Bearbeiten ·
Noch keine Teams angelegt.