prepare('SELECT COUNT(*) FROM custom_lists WHERE LOWER(name) = LOWER(?) AND id <> ?'); $dup->execute([$name, $id]); if ($dup->fetchColumn() > 0) $errors[] = 'Eine Liste mit diesem Namen existiert bereits.'; if (!$errors) { if ($action === 'create') { $pdo->prepare('INSERT INTO custom_lists (name, sort_order, notes, created_at, updated_at) VALUES (?,?,?,?,?)')->execute([$name, $sort, $notes ?: null, db_now(), db_now()]); $id = (int) $pdo->lastInsertId(); audit_log($staff['id'], "Liste erstellt: {$name}"); flash('success', 'Liste erstellt.'); } else { $pdo->prepare('UPDATE custom_lists SET name=?, sort_order=?, notes=?, updated_at=? WHERE id=?')->execute([$name, $sort, $notes ?: null, db_now(), $id]); audit_log($staff['id'], "Liste aktualisiert: {$name}"); flash('success', 'Änderungen gespeichert.'); } // Einträge abgleichen: Bestehende behalten (und umsortieren), neue anlegen, entfernte löschen $existing = $pdo->prepare('SELECT id, value FROM custom_list_items WHERE list_id = ?'); $existing->execute([$id]); $byValue = array_column($existing->fetchAll(), 'id', 'value'); $upd = $pdo->prepare('UPDATE custom_list_items SET sort_order = ? WHERE id = ?'); $ins = $pdo->prepare('INSERT INTO custom_list_items (list_id, value, sort_order) VALUES (?,?,?)'); foreach ($values as $i => $val) { if (isset($byValue[$val])) { $upd->execute([($i + 1) * 10, $byValue[$val]]); unset($byValue[$val]); } else $ins->execute([$id, $val, ($i + 1) * 10]); } $del = $pdo->prepare('DELETE FROM custom_list_items WHERE id = ?'); foreach ($byValue as $itemId) $del->execute([$itemId]); redirect('/staff/custom_lists.php'); } } if ($action === 'delete') { $id = (int) $_POST['id']; $pdo->prepare('DELETE FROM custom_list_items WHERE list_id = ?')->execute([$id]); $pdo->prepare('DELETE FROM custom_lists WHERE id = ?')->execute([$id]); audit_log($staff['id'], "Liste gelöscht: #{$id}"); flash('success', 'Liste gelöscht.'); redirect('/staff/custom_lists.php'); } } $isNew = isset($_GET['new']); $editId = (int) ($_GET['edit'] ?? 0); $showForm = $isNew || $editId || ($errors && in_array($_POST['action'] ?? '', ['create', 'update'], true)); $lists = $pdo->query('SELECT l.*, (SELECT COUNT(*) FROM custom_list_items i WHERE i.list_id = l.id) AS item_count FROM custom_lists l ORDER BY l.sort_order, l.name')->fetchAll(); $editList = null; $editItems = []; if ($editId) { $es = $pdo->prepare('SELECT * FROM custom_lists WHERE id = ?'); $es->execute([$editId]); $editList = $es->fetch() ?: null; $ei = $pdo->prepare('SELECT value FROM custom_list_items WHERE list_id = ? ORDER BY sort_order, value'); $ei->execute([$editId]); $editItems = $ei->fetchAll(PDO::FETCH_COLUMN); } $pageTitle = 'Benutzerdefinierte Listen'; $activePage = 'custom_lists'; require __DIR__ . '/_header.php'; ?>
Wiederverwendbare Auswahllisten für Ticket-Felder. Wähle in einem Ticket-Feld den Typ „Liste“ und verknüpfe eine dieser Listen.
| Name | Einträge | Erstellt | Zuletzt aktualisiert | |
|---|---|---|---|---|
| = e($l['name']) ?> | = (int) $l['item_count'] ?> | = e(ui_date($l['created_at'] ?? null)) ?> | = e(ui_date($l['updated_at'] ?? null)) ?> | Bearbeiten · |
| Noch keine Listen angelegt. | ||||