diff --git a/admin_settings_ticket.php b/admin_settings_ticket.php index f91cd4c4..2dcdea6c 100644 --- a/admin_settings_ticket.php +++ b/admin_settings_ticket.php @@ -53,6 +53,13 @@ require_once "includes/inc_all_admin.php"; +
+
+ value="1" id="ticketTimerSwitch"> + +
+
+
diff --git a/database_updates.php b/database_updates.php index e4fba32d..a3c6cf98 100644 --- a/database_updates.php +++ b/database_updates.php @@ -3464,12 +3464,15 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.4'"); } + if (CURRENT_DATABASE_VERSION == '2.1.4') { + mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_timer_autostart` TINYINT(1) NOT NULL DEFAULT '1' AFTER `config_ticket_default_billable`"); + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.5'"); + } - - // if (CURRENT_DATABASE_VERSION == '2.1.4') { - // // Insert queries here required to update to DB version 2.1.5 + // if (CURRENT_DATABASE_VERSION == '2.1.5') { + // // Insert queries here required to update to DB version 2.1.6 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.5'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.6'"); // } } else { diff --git a/db.sql b/db.sql index 203f5771..89f581eb 100644 --- a/db.sql +++ b/db.sql @@ -1812,6 +1812,7 @@ 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_timer_autostart` tinyint(1) NOT NULL DEFAULT 1, `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, @@ -2500,4 +2501,4 @@ CREATE TABLE `vendors` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-05-24 13:23:21 +-- Dump completed on 2025-06-12 13:43:40 diff --git a/includes/database_version.php b/includes/database_version.php index 72a223bb..6df39190 100644 --- a/includes/database_version.php +++ b/includes/database_version.php @@ -5,4 +5,4 @@ * It is used in conjunction with database_updates.php */ -DEFINE("LATEST_DATABASE_VERSION", "2.1.4"); +DEFINE("LATEST_DATABASE_VERSION", "2.1.5"); diff --git a/includes/get_settings.php b/includes/get_settings.php index 80e6fa7b..65a28aee 100644 --- a/includes/get_settings.php +++ b/includes/get_settings.php @@ -78,6 +78,7 @@ $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']); +$config_ticket_timer_autostart = intval($row['config_ticket_timer_autostart']); // Cron $config_enable_cron = intval($row['config_enable_cron']); diff --git a/js/ticket_time_tracking.js b/js/ticket_time_tracking.js index f2a7d6fe..ea1b69f8 100644 --- a/js/ticket_time_tracking.js +++ b/js/ticket_time_tracking.js @@ -1,10 +1,7 @@ -// Description: This file contains the JavaScript for the ticket time tracking feature - (function() { document.addEventListener("DOMContentLoaded", function() { // Initialize variables var timerInterval = null; - var isPaused = false; var ticketID = getCurrentTicketID(); var elapsedSecs = getElapsedSeconds(); @@ -51,10 +48,8 @@ localStorage.setItem(getLocalStorageKey("startTime"), Date.now().toString()); } timerInterval = setInterval(countTime, 1000); - isPaused = false; document.getElementById("startStopTimer").innerHTML = ""; localStorage.setItem("ticket-timer-running-" + ticketID, "true"); - } function pauseTimer() { @@ -65,10 +60,8 @@ let currentElapsed = getElapsedSeconds(); localStorage.setItem(getLocalStorageKey("pausedTime"), currentElapsed.toString()); localStorage.removeItem(getLocalStorageKey("startTime")); - isPaused = true; document.getElementById("startStopTimer").innerHTML = ""; localStorage.setItem("ticket-timer-running-" + ticketID, "false"); - } function clearTimeStorage() { @@ -99,9 +92,7 @@ } function handleInputFocus() { - if (!isPaused) { - pauseTimer(); - } + pauseTimer(); } function updateTimeFromInput() { @@ -110,7 +101,6 @@ const seconds = parseInt(document.getElementById("seconds").value, 10) || 0; elapsedSecs = (hours * 3600) + (minutes * 60) + seconds; - // Update local storage so the manually entered time is retained even if the page is reloaded. if (!timerInterval) { localStorage.setItem(getLocalStorageKey("pausedTime"), elapsedSecs.toString()); } else { @@ -120,7 +110,6 @@ } } - // Function to check status and pause timer function checkStatusAndPauseTimer() { var status = document.querySelector('select[name="status"]').value; if (status.includes("Pending") || status.includes("Close")) { @@ -128,6 +117,7 @@ } } + // Attach input listeners document.getElementById("hours").addEventListener('change', updateTimeFromInput); document.getElementById("minutes").addEventListener('change', updateTimeFromInput); document.getElementById("seconds").addEventListener('change', updateTimeFromInput); @@ -151,25 +141,33 @@ }); document.getElementById("ticket_add_reply").addEventListener('click', function() { - // Wait for other synchronous actions (if any) to complete before resetting the timer. - setTimeout(forceResetTimer, 100); // 100ms delay should suffice, but you can adjust as needed. + setTimeout(forceResetTimer, 100); }); document.getElementById("ticket_close").addEventListener('click', function() { - // Wait for other synchronous actions (if any) to complete before resetting the timer. - setTimeout(clearTimeStorage, 100); // 100ms delay should suffice, but you can adjust as needed. + setTimeout(clearTimeStorage, 100); }); + // Final initialization logic try { displayTime(); + + // If no timer state, respect ticketAutoStart if (!localStorage.getItem(getLocalStorageKey("startTime")) && !localStorage.getItem(getLocalStorageKey("pausedTime"))) { - startTimer(); - } else if (localStorage.getItem(getLocalStorageKey("startTime"))) { + if (ticketAutoStart === 1) { + startTimer(); + } else { + pauseTimer(); + } + } + // If timer already running, resume it + else if (localStorage.getItem(getLocalStorageKey("startTime"))) { startTimer(); } // Check and pause timer if status is pending checkStatusAndPauseTimer(); + } catch (error) { console.error("There was an issue initializing the timer:", error); } diff --git a/post/admin/admin_settings_ticket.php b/post/admin/admin_settings_ticket.php index bc75e518..918a703c 100644 --- a/post/admin/admin_settings_ticket.php +++ b/post/admin/admin_settings_ticket.php @@ -17,8 +17,9 @@ if (isset($_POST['edit_ticket_settings'])) { $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']); + $config_ticket_timer_autostart = intval($_POST['config_ticket_timer_autostart']); - 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"); + 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, config_ticket_timer_autostart = $config_ticket_timer_autostart WHERE company_id = 1"); // Logging logAction("Settings", "Edit", "$session_name edited ticket settings"); diff --git a/ticket.php b/ticket.php index 55868d1a..40265423 100644 --- a/ticket.php +++ b/ticket.php @@ -1252,6 +1252,11 @@ require_once "includes/footer.php"; + + +