From b48168ffec5975fd5210b33f6255f62d954a0a30 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Mon, 12 Jan 2026 15:36:06 +0000 Subject: [PATCH] Rewrite kanban in more procedural code to match existing codebase (as a v2, delete old and rename once we're happy) --- admin/settings_ticket.php | 2 +- agent/ticket_kanban_v2.php | 176 +++++++++++++++++++++++++++++++++++++ agent/tickets.php | 7 +- 3 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 agent/ticket_kanban_v2.php diff --git a/admin/settings_ticket.php b/admin/settings_ticket.php index 05e7fbba..f9736c1f 100644 --- a/admin/settings_ticket.php +++ b/admin/settings_ticket.php @@ -97,7 +97,7 @@ require_once "includes/inc_all_admin.php";
value="1" id="ticketOrderingSwitch"> - +
value="1" id="ticketMovingColumnsSwitch"> diff --git a/agent/ticket_kanban_v2.php b/agent/ticket_kanban_v2.php new file mode 100644 index 00000000..464ebec4 --- /dev/null +++ b/agent/ticket_kanban_v2.php @@ -0,0 +1,176 @@ + + + $status_id, + 'name' => $status_name, + 'order' => $kanban_order, + 'tickets' => array() + ); +} + +$ordering_snippet = "ORDER BY + CASE + WHEN ticket_priority = 'High' THEN 1 + WHEN ticket_priority = 'Medium' THEN 2 + WHEN ticket_priority = 'Low' THEN 3 + ELSE 4 + END, + ticket_id DESC"; + +if ($config_ticket_ordering == 1) { + $ordering_snippet = "ORDER BY ticket_order ASC"; +} + +// Fetch tickets +$sql = mysqli_query( + $mysqli, + "SELECT SQL_CALC_FOUND_ROWS * FROM tickets + LEFT JOIN clients ON ticket_client_id = client_id + LEFT JOIN contacts ON ticket_contact_id = contact_id + LEFT JOIN users ON ticket_assigned_to = user_id + LEFT JOIN assets ON ticket_asset_id = asset_id + LEFT JOIN locations ON ticket_location_id = location_id + LEFT JOIN vendors ON ticket_vendor_id = vendor_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + LEFT JOIN categories ON ticket_category = category_id + WHERE $ticket_status_snippet $ticket_assigned_query + $category_query + $client_query + AND DATE(ticket_created_at) BETWEEN '$dtf' AND '$dtt' + AND ( + CONCAT(ticket_prefix,ticket_number) LIKE '%$q%' OR + client_name LIKE '%$q%' OR + ticket_subject LIKE '%$q%' OR + ticket_status_name LIKE '%$q%' OR + ticket_priority LIKE '%$q%' OR + user_name LIKE '%$q%' OR + contact_name LIKE '%$q%' OR + asset_name LIKE '%$q%' OR + vendor_name LIKE '%$q%' OR + ticket_vendor_ticket_number LIKE '%$q%' + ) + $ticket_permission_snippet + $ordering_snippet" +); + +while ($row = mysqli_fetch_assoc($sql)) { + + $status_id = $row['ticket_status_id']; + + foreach ($row as $key => $value) { + if (is_string($value)) { + $row[$key] = nullable_htmlentities($value); + } + } + + if (isset($statuses[$status_id])) { + $statuses[$status_id]['tickets'][] = $row; + } +} + +// Convert associative array to indexed array +$kanban = array_values($statuses); +?> + +
+ + + +
+
+ +
+ + + +
+ + + + + + + + + + + +
+ + + + + +
+ + +
+ + +
+ +
+ + + + + + +
+ + + +
+
+ + + +
+ +"; +echo "const CONFIG_TICKET_MOVING_COLUMNS = " . json_encode($config_ticket_moving_columns) . ";"; +echo "const CONFIG_TICKET_ORDERING = " . json_encode($config_ticket_ordering) . ";"; +echo ""; +?> + + + \ No newline at end of file diff --git a/agent/tickets.php b/agent/tickets.php index e4f4d28f..89fac035 100644 --- a/agent/tickets.php +++ b/agent/tickets.php @@ -235,8 +235,9 @@ $sql_categories_filter = mysqli_query(
@@ -391,6 +392,8 @@ if (isset($_GET["view"])) { require_once "ticket_list.php"; } elseif ($_GET["view"] == "kanban") { require_once "ticket_kanban.php"; + } elseif ($_GET["view"] == "kanbanv2") { + require_once "ticket_kanban_v2.php"; } } else { // here we have to get default view setting