'ticket templates', 'title' => 'That ticket template is gone', 'text' => 'It may have been deleted.', 'icon' => 'fa-life-ring', 'filtered' => false, 'actions' => [['label' => 'Ticket Templates', 'href' => 'ticket_templates.php']]]); require_once "../includes/footer.php"; exit(); } $ticket_template_id = intval($template['ticket_template_id']); $name = escapeHtml($template['ticket_template_name']); $archived = !empty($template['ticket_template_archived_at']); $tasks = ticketTemplateTasks($ticket_template_id); $task_minutes = array_sum(array_column($tasks, 'estimate')); $tag_ids = ticketTemplateTagIds($ticket_template_id); $tag_rows = []; if ($tag_ids) { $sql = mysqli_query($mysqli, "SELECT * FROM tags WHERE tag_id IN (" . implode(',', $tag_ids) . ") ORDER BY tag_name"); while ($row = mysqli_fetch_assoc($sql)) { $tag_rows[] = $row; } } $usage = ticketTemplateUsage([$ticket_template_id])[$ticket_template_id] ?? ['count' => 0, 'open' => 0, 'last' => null]; $csrf = $_SESSION['csrf_token']; // The tickets it raised most lately $recent = []; $sql = mysqli_query($mysqli, "SELECT ticket_id, ticket_prefix, ticket_number, ticket_subject, ticket_client_id, ticket_created_at, ticket_resolved_at, ticket_closed_at, client_name, ticket_status_name, ticket_status_color FROM tickets LEFT JOIN clients ON client_id = ticket_client_id LEFT JOIN ticket_statuses ON ticket_status_id = ticket_status WHERE ticket_template_id = $ticket_template_id AND ticket_archived_at IS NULL ORDER BY ticket_created_at DESC, ticket_id DESC LIMIT 8"); while ($row = mysqli_fetch_assoc($sql)) { $recent[] = $row; } // What raises it $recurring = []; $sql = mysqli_query($mysqli, "SELECT recurring_ticket_id, recurring_ticket_subject, recurring_ticket_frequency, recurring_ticket_client_id, client_name FROM recurring_tickets LEFT JOIN clients ON client_id = recurring_ticket_client_id WHERE recurring_ticket_ticket_template_id = $ticket_template_id ORDER BY client_name, recurring_ticket_subject"); while ($row = mysqli_fetch_assoc($sql)) { $recurring[] = $row; } $projects = []; $sql = mysqli_query($mysqli, "SELECT project_templates.project_template_id, project_template_name FROM project_template_ticket_templates JOIN project_templates ON project_templates.project_template_id = project_template_ticket_templates.project_template_id WHERE project_template_ticket_templates.ticket_template_id = $ticket_template_id ORDER BY project_template_name"); while ($row = mysqli_fetch_assoc($sql)) { $projects[] = $row; } // Its placeholders - filled in from the ticket, or left for whoever picks it up $known = array_map('strtolower', array_keys(TICKET_PLACEHOLDERS)); $found = ticketTemplatePlaceholdersIn($template['ticket_template_subject'] . ' ' . $template['ticket_template_details'] . ' ' . implode(' ', array_column($tasks, 'name'))); $filled = array_values(array_filter($found, function ($word) use ($known) { return in_array(strtolower($word), $known, true); })); $left = array_values(array_diff($found, $filled)); // [Words] marked where they appear - escaped text, or HTML already made safe $mark = function ($html) { return preg_replace('/\[([A-Za-z][A-Za-z0-9 _\-\/]{0,40})\]/', '[$1]', $html); }; $details = trim((string) $template['ticket_template_details']) !== '' ? $mark(documentHtmlPurify($template['ticket_template_details'])) : ''; $edit_url = "modals/ticket_template/ticket_template_edit.php?id=$ticket_template_id"; ?>