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="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