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)):
?>
= t('acp.hd.newest_first') ?>
| # | = t('acp.hd.col_subject') ?> | = t('acp.hd.col_opened_by') ?> | = t('acp.hd.col_created') ?> | = t('acp.hd.col_status') ?> |
|---|---|---|---|---|
| = $id ?> | = h((string)($ticket['subject'] ?? '')) ?> | = h((string)($ticket['username'] ?? '')) ?> | = h(getClock((int)($ticket['creation'] ?? 0), true)) ?> | = h($status) ?> |