beginTransaction(); $problemId = ticket_problem_create($pdo, $_POST, (int) $staff['id']); $ticketNumber = trim((string) ($_POST['ticket_number'] ?? '')); if ($ticketNumber !== '') { $ticketStmt = $pdo->prepare('SELECT id FROM tickets WHERE ticket_number = ?'); $ticketStmt->execute([$ticketNumber]); $ticketId = (int) $ticketStmt->fetchColumn(); if (!$ticketId) throw new InvalidArgumentException('Das angegebene Ticket wurde nicht gefunden.'); ticket_problem_link($pdo, $problemId, $ticketId, (int) $staff['id']); log_activity($pdo, $ticketId, (int) $staff['id'], 'Mit ' . ticket_problem_number($problemId) . ' verknüpft'); } $pdo->commit(); audit_log($staff['id'], 'Problem ' . ticket_problem_number($problemId) . ' erstellt'); flash('success', ticket_problem_number($problemId) . ' wurde angelegt.'); redirect('/staff/problems.php?tab=list&id=' . $problemId); } elseif ($action === 'problem_update') { if (!ticket_problem_update($pdo, $problemId, $_POST, (int) $staff['id'])) throw new InvalidArgumentException('Problem nicht gefunden.'); audit_log($staff['id'], 'Problem ' . ticket_problem_number($problemId) . ' aktualisiert'); flash('success', 'Problem wurde gespeichert.'); } elseif ($action === 'ticket_link') { $ticketNumber = trim((string) ($_POST['ticket_number'] ?? '')); $ticketStmt = $pdo->prepare('SELECT id FROM tickets WHERE ticket_number = ?'); $ticketStmt->execute([$ticketNumber]); $ticketId = (int) $ticketStmt->fetchColumn(); if (!$ticketId) throw new InvalidArgumentException('Das angegebene Ticket wurde nicht gefunden.'); if (!ticket_problem_link($pdo, $problemId, $ticketId, (int) $staff['id'])) throw new InvalidArgumentException('Ticket oder Problem wurde nicht gefunden.'); log_activity($pdo, $ticketId, (int) $staff['id'], 'Mit ' . ticket_problem_number($problemId) . ' verknüpft'); audit_log($staff['id'], 'Ticket mit ' . ticket_problem_number($problemId) . ' verknüpft'); flash('success', 'Ticket wurde mit dem Problem verknüpft.'); } elseif ($action === 'ticket_unlink') { $ticketId = (int) ($_POST['ticket_id'] ?? 0); if (!ticket_problem_unlink($pdo, $problemId, $ticketId)) throw new InvalidArgumentException('Dieses Ticket ist mit dem Problem nicht verknüpft.'); log_activity($pdo, $ticketId, (int) $staff['id'], 'Verknüpfung mit ' . ticket_problem_number($problemId) . ' entfernt'); audit_log($staff['id'], 'Ticket von ' . ticket_problem_number($problemId) . ' getrennt'); flash('success', 'Ticket-Verknüpfung wurde entfernt.'); } } catch (Throwable $e) { if ($pdo->inTransaction()) $pdo->rollBack(); $errors[] = $e instanceof InvalidArgumentException ? $e->getMessage() : 'Änderung konnte nicht gespeichert werden.'; } if (!$errors) redirect('/staff/problems.php' . ($problemId ? '?id=' . $problemId : '')); } $problems = ticket_problems($pdo); $problem = $problemId ? ticket_problem_get($pdo, $problemId) : null; if ($problemId && !$problem) $errors[] = 'Problem nicht gefunden.'; $linkedTickets = $problem ? ticket_problem_tickets($pdo, $problemId) : []; $problemStatuses = ticket_problem_statuses(); $activePage = 'problems'; $pageTitle = 'Problemmanagement'; require __DIR__ . '/_header.php'; ?>

Problemmanagement

Bündeln Sie Tickets mit derselben Ursache. Ursache, Workaround und dauerhafte Lösung werden zentral dokumentiert.

← Alle Probleme + Neues Problem

Neues Problem erfassen

Titel und erste Ticketnummer eintragen. Ursache und dauerhafte Lösung können danach ergänzt werden.

Noch keine Probleme erfasst. Erstes Problem anlegen
Probleme · offen
'#dc2626', 'workaround' => '#d97706', 'monitoring' => '#2563eb', 'resolved' => '#16a34a'][$item['status']] ?? '#64748b'; $pUrl = '/staff/problems.php?id=' . (int) $item['id']; ?>
Nr.TitelStatusTicketsZuletzt geändert

Erstellt