0) { // ----------------------------------------------------------- Post reply if (!empty($_POST['reply_text'])) { $replyText = sanitize((string)$_POST['reply_text']); $username = sanitize((string)($_POST['username'] ?? 'ADMIN')); db()->execute(" INSERT INTO `znote_tickets_replies` (`tid`, `username`, `message`, `created`) VALUES (?, ?, ?, ?); ", [$view, $username, $replyText, time()]); db()->execute(" UPDATE `znote_tickets` SET `status` = 'Staff-Reply' WHERE `id` = ? LIMIT 1; ", [$view]); acp_log('helpdesk.reply', '#' . $view); acp_flash_success(t('acp.hd.reply_posted')); acp_redirect('helpdesk', ['view' => $view]); } $ticketId = intv($_POST['admin_ticket_id'] ?? 0); // ---------------------------------------------------------- Close ticket if (!empty($_POST['admin_ticket_close']) && $ticketId > 0) { db()->execute("UPDATE `znote_tickets` SET `status` = 'CLOSED' WHERE `id` = ? LIMIT 1;", [$ticketId]); acp_log('helpdesk.close', '#' . $ticketId); acp_flash_success(t('acp.hd.closed')); acp_redirect('helpdesk', ['view' => $view]); } // ----------------------------------------------------------- Open ticket if (!empty($_POST['admin_ticket_open']) && $ticketId > 0) { db()->execute("UPDATE `znote_tickets` SET `status` = 'Open' WHERE `id` = ? LIMIT 1;", [$ticketId]); acp_log('helpdesk.reopen', '#' . $ticketId); acp_flash_success(t('acp.hd.reopened')); acp_redirect('helpdesk', ['view' => $view]); } // --------------------------------------------------------- Delete ticket if (!empty($_POST['admin_ticket_delete']) && $ticketId > 0) { db()->execute("DELETE FROM `znote_tickets` WHERE `id` = ? LIMIT 1;", [$ticketId]); db()->execute("DELETE FROM `znote_tickets_replies` WHERE `tid` = ?;", [$ticketId]); acp_log('helpdesk.delete', '#' . $ticketId); acp_flash_success(t('acp.hd.deleted', ['id' => $ticketId])); acp_redirect('helpdesk'); } } // Pill colour per ticket status. function acp_ticket_tone(string $status): string { switch (strtoupper($status)) { case 'CLOSED': return 'grey'; case 'STAFF-REPLY': return 'blue'; case 'OPEN': return 'green'; default: return 'amber'; } } ?> 0): $ticket = db()->fetchOne("SELECT * FROM `znote_tickets` WHERE `id` = ? LIMIT 1;", [$view]); if (!is_array($ticket)): ?>
fetchAll(" SELECT * FROM `znote_tickets_replies` WHERE `tid` = ? ORDER BY `created` ASC; ", [$view]); ?>
$ticketId]) ?> —
' : '' ?>

fetchAll(" SELECT `id`, `subject`, `username`, `creation`, `status` FROM `znote_tickets` ORDER BY `creation` DESC; "); ?>

#