diff --git a/database_updates.php b/database_updates.php
index 20d9433f..b4cc80cb 100644
--- a/database_updates.php
+++ b/database_updates.php
@@ -2476,6 +2476,10 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
mysqli_query($mysqli, "ALTER TABLE `tickets` ADD `ticket_order` int(11) NOT NULL DEFAULT 0");
+ mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_default_view` tinyint(1) NOT NULL DEFAULT 0");
+ mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_ordering` tinyint(1) NOT NULL DEFAULT 0");
+ mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_moving_columns` tinyint(1) NOT NULL DEFAULT 1");
+
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.8.1'");
}
diff --git a/db.sql b/db.sql
index dad2b9a7..0399a3e4 100644
--- a/db.sql
+++ b/db.sql
@@ -1704,6 +1704,9 @@ CREATE TABLE `settings` (
`config_ticket_autoclose_hours` int(5) NOT NULL DEFAULT 72,
`config_ticket_new_ticket_notification_email` varchar(200) DEFAULT NULL,
`config_ticket_default_billable` tinyint(1) NOT NULL DEFAULT 0,
+ `config_ticket_default_view` tinyint(1) NOT NULL DEFAULT 0,
+ `config_ticket_moving_columns` tinyint(1) NOT NULL DEFAULT 1,
+ `config_ticket_ordering` tinyint(1) NOT NULL DEFAULT 0,
`config_enable_cron` tinyint(1) NOT NULL DEFAULT 0,
`config_recurring_auto_send_invoice` tinyint(1) NOT NULL DEFAULT 1,
`config_enable_alert_domain_expire` tinyint(1) NOT NULL DEFAULT 1,
diff --git a/get_settings.php b/get_settings.php
index 0ccf34ef..e560078e 100644
--- a/get_settings.php
+++ b/get_settings.php
@@ -75,6 +75,9 @@ $config_ticket_client_general_notifications = intval($row['config_ticket_client_
$config_ticket_autoclose_hours = intval($row['config_ticket_autoclose_hours']);
$config_ticket_new_ticket_notification_email = $row['config_ticket_new_ticket_notification_email'];
$config_ticket_default_billable = intval($row['config_ticket_default_billable']);
+$config_ticket_default_view = intval($row['config_ticket_default_view']);
+$config_ticket_moving_columns = intval($row['config_ticket_moving_columns']);
+$config_ticket_ordering = intval($row['config_ticket_ordering']);
// Cron
$config_enable_cron = intval($row['config_enable_cron']);
diff --git a/js/tickets_kanban.js b/js/tickets_kanban.js
index 5d3b2df4..706ca9f9 100644
--- a/js/tickets_kanban.js
+++ b/js/tickets_kanban.js
@@ -1,20 +1,25 @@
$(document).ready(function() {
+ console.log('CONFIG_TICKET_MOVING_COLUMNS: ' + CONFIG_TICKET_MOVING_COLUMNS);
+ console.log('CONFIG_TICKET_ORDERING: ' + CONFIG_TICKET_ORDERING);
// Initialize Dragula for the Kanban board
let boardDrake = dragula([
document.querySelector('#kanban-board')
], {
moves: function(el, container, handle) {
return handle.classList.contains('panel-title');
+ },
+ accepts: function(el, target, source, sibling) {
+ return CONFIG_TICKET_MOVING_COLUMNS === 1;
}
});
// Log the event of moving the column panel-title
boardDrake.on('drag', function(el) {
- console.log('Dragging column:', el.querySelector('.panel-title').innerText);
+ //console.log('Dragging column:', el.querySelector('.panel-title').innerText);
});
boardDrake.on('drop', function(el, target, source, sibling) {
- console.log('Dropped column:', el.querySelector('.panel-title').innerText);
+ //console.log('Dropped column:', el.querySelector('.panel-title').innerText);
// Get all columns and their positions
let columns = document.querySelectorAll('#kanban-board .kanban-column');
@@ -55,6 +60,11 @@ $(document).ready(function() {
drake.on('drop', function (el, target, source, sibling) {
// Log the target ID to the console
//console.log('Dropped into:', target.getAttribute('data-column-name'));
+
+ if (CONFIG_TICKET_ORDERING === 0 && source == target) {
+ drake.cancel(true); // Move the card back to its original position
+ return;
+ }
// Get all cards in the target column and their positions
let cards = $(target).children('.task');
diff --git a/post/admin/admin_settings_ticket.php b/post/admin/admin_settings_ticket.php
index 34561fd6..bc75e518 100644
--- a/post/admin/admin_settings_ticket.php
+++ b/post/admin/admin_settings_ticket.php
@@ -14,8 +14,11 @@ if (isset($_POST['edit_ticket_settings'])) {
if (filter_var($_POST['config_ticket_new_ticket_notification_email'], FILTER_VALIDATE_EMAIL)) {
$config_ticket_new_ticket_notification_email = sanitizeInput($_POST['config_ticket_new_ticket_notification_email']);
}
-
- mysqli_query($mysqli,"UPDATE settings SET config_ticket_prefix = '$config_ticket_prefix', config_ticket_next_number = $config_ticket_next_number, config_ticket_email_parse = $config_ticket_email_parse, config_ticket_email_parse_unknown_senders = $config_ticket_email_parse_unknown_senders, config_ticket_autoclose_hours = $config_ticket_autoclose_hours, config_ticket_new_ticket_notification_email = '$config_ticket_new_ticket_notification_email', config_ticket_default_billable = $config_ticket_default_billable WHERE company_id = 1");
+ $config_ticket_default_view = intval($_POST['config_ticket_default_view']);
+ $config_ticket_moving_columns = intval($_POST['config_ticket_moving_columns']);
+ $config_ticket_ordering = intval($_POST['config_ticket_ordering']);
+
+ mysqli_query($mysqli,"UPDATE settings SET config_ticket_prefix = '$config_ticket_prefix', config_ticket_next_number = $config_ticket_next_number, config_ticket_email_parse = $config_ticket_email_parse, config_ticket_email_parse_unknown_senders = $config_ticket_email_parse_unknown_senders, config_ticket_autoclose_hours = $config_ticket_autoclose_hours, config_ticket_new_ticket_notification_email = '$config_ticket_new_ticket_notification_email', config_ticket_default_billable = $config_ticket_default_billable, config_ticket_default_view = $config_ticket_default_view, config_ticket_moving_columns = $config_ticket_moving_columns, config_ticket_ordering = $config_ticket_ordering WHERE company_id = 1");
// Logging
logAction("Settings", "Edit", "$session_name edited ticket settings");
@@ -24,4 +27,4 @@ if (isset($_POST['edit_ticket_settings'])) {
header("Location: " . $_SERVER["HTTP_REFERER"]);
-}
+}
\ No newline at end of file
diff --git a/tickets.php b/tickets.php
index d7d8fd24..a1605de9 100644
--- a/tickets.php
+++ b/tickets.php
@@ -357,7 +357,7 @@ $sql_categories = mysqli_query(
-
diff --git a/tickets_kanban.php b/tickets_kanban.php
index 01f48b97..feda8644 100644
--- a/tickets_kanban.php
+++ b/tickets_kanban.php
@@ -20,6 +20,19 @@ while ($status_row = mysqli_fetch_array($status_sql)) {
$statuses[$id]->order = $kanban_order; // Store the order
}
+$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 and merge into statuses
$sql = mysqli_query(
$mysqli,
@@ -37,13 +50,12 @@ $sql = mysqli_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
- ORDER BY $sort $order"
+ $ordering_snippet"
);
while ($row = mysqli_fetch_array($sql)) {
$id = $row['ticket_status_id'];
$ticket_order = $row['ticket_order'];
- $row['ticket_order'] = $ticket_order; // Store the ticket order
// Loop over all items in $row to apply nullable_htmlentities only if the content is a string
foreach ($row as $key => $value) {
@@ -58,38 +70,7 @@ while ($row = mysqli_fetch_array($sql)) {
}
// Convert associative array to indexed array for sorting
-$kanban_array = array_values($statuses);
-
-// Sort the array by the 'order' field, moving null values to the end
-usort($kanban_array, function($a, $b) {
- if ($a->order === null) {
- return 1;
- }
- if ($b->order === null) {
- return -1;
- }
- return $a->order - $b->order;
-});
-
-// Sort tickets within each column by 'ticket_order'
-foreach ($kanban_array as $kanban_column) {
- usort($kanban_column->tickets, function($a, $b) {
- return $a['ticket_order'] - $b['ticket_order'];
- });
-}
-
-// Re-index the sorted array back to associative array if needed
-$ordered_kanban = [];
-foreach ($kanban_array as $item) {
- $ordered_kanban[$item->id] = $item;
-}
-
-$kanban = $ordered_kanban;
-
-
-
-
-
+$kanban = array_values($statuses);
?>
@@ -161,6 +142,11 @@ $kanban = $ordered_kanban;
-
+";
+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