From 7df1d419faba9b6772de166f574c5180dbf6ea8c Mon Sep 17 00:00:00 2001 From: Marcus Hill Date: Fri, 29 Mar 2024 23:20:52 +0000 Subject: [PATCH] Ticket Statuses from DB / use left join instead of a function, hard-code system statuses --- client_tickets.php | 10 +++++----- cron.php | 16 ++++++---------- cron_ticket_email_parser.php | 10 +++++----- database_updates.php | 8 +------- db.sql | 6 +----- get_settings.php | 4 ---- portal/portal_functions.php | 6 +++--- portal/portal_post.php | 6 +++--- portal/ticket.php | 24 ++++++++++++++++++------ portal/ticket_view_all.php | 11 ++++------- portal/tickets.php | 17 +++++++---------- post/ticket.php | 35 ++++++++++++++++------------------- ticket.php | 36 +++++++++++++++++++----------------- tickets.php | 8 ++++---- 14 files changed, 92 insertions(+), 105 deletions(-) diff --git a/client_tickets.php b/client_tickets.php index d51bde86..284acdbb 100644 --- a/client_tickets.php +++ b/client_tickets.php @@ -38,6 +38,7 @@ $sql = mysqli_query( 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 WHERE ticket_client_id = $client_id AND $ticket_status_snippet AND $ticket_billable_snippet @@ -140,8 +141,9 @@ $total_scheduled_tickets = intval($row['total_scheduled_tickets']); $ticket_number = nullable_htmlentities($row['ticket_number']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); $ticket_priority = nullable_htmlentities($row['ticket_priority']); - $ticket_status_id = intval($row['ticket_status']); - $ticket_status_name = sanitizeInput(getTicketStatusName($row['ticket_status'])); + $ticket_status_id = intval($row['ticket_status_id']); + $ticket_status_name = nullable_htmlentities($row['ticket_status_name']); + $ticket_status_color = nullable_htmlentities($row['ticket_status_color']); $ticket_billable = intval($row['ticket_billable']); $ticket_created_at = nullable_htmlentities($row['ticket_created_at']); $ticket_created_at_time_ago = timeAgo($row['ticket_created_at']); @@ -158,8 +160,6 @@ $total_scheduled_tickets = intval($row['total_scheduled_tickets']); } $ticket_closed_at = nullable_htmlentities($row['ticket_closed_at']); - $ticket_status_color = getTicketStatusColor($ticket_status_id); - if ($ticket_priority == "High") { $ticket_priority_display = "$ticket_priority"; } elseif ($ticket_priority == "Medium") { @@ -180,7 +180,7 @@ $total_scheduled_tickets = intval($row['total_scheduled_tickets']); } else { $ticket_assigned_to_display = nullable_htmlentities($row['user_name']); } - + $project_id = intval($row['ticket_project_id']); $contact_name = nullable_htmlentities($row['contact_name']); diff --git a/cron.php b/cron.php index 5a168af9..a8d9f4bd 100644 --- a/cron.php +++ b/cron.php @@ -52,10 +52,6 @@ $config_ticket_client_general_notifications = intval($row['config_ticket_client_ $config_ticket_autoclose = intval($row['config_ticket_autoclose']); $config_ticket_autoclose_hours = intval($row['config_ticket_autoclose_hours']); $config_ticket_new_ticket_notification_email = sanitizeInput($row['config_ticket_new_ticket_notification_email']); -$config_ticket_status_id_new = intval($row['config_ticket_status_id_new']); -$config_ticket_status_id_open = intval($row['config_ticket_status_id_open']); -$config_ticket_status_id_autoclose = intval($row['config_ticket_status_id_autoclose']); -$config_ticket_status_id_closed = intval($row['config_ticket_status_id_closed']); // Get Config for Telemetry $config_theme = $row['config_theme']; @@ -229,7 +225,7 @@ foreach ($warranty_alert_array as $day) { // Notify of New Tickets // Get Ticket Pending Assignment -$sql_tickets_pending_assignment = mysqli_query($mysqli,"SELECT ticket_id FROM tickets WHERE ticket_status = '$config_ticket_status_id_new'"); +$sql_tickets_pending_assignment = mysqli_query($mysqli,"SELECT ticket_id FROM tickets WHERE ticket_status = 1"); $tickets_pending_assignment = mysqli_num_rows($sql_tickets_pending_assignment); @@ -260,9 +256,9 @@ if (mysqli_num_rows($sql_scheduled_tickets) > 0) { $contact_id = intval($row['scheduled_ticket_contact_id']); $asset_id = intval($row['scheduled_ticket_asset_id']); - $ticket_status = $config_ticket_status_id_new; // Default + $ticket_status = 1; // Default if ($assigned_id > 0) { - $ticket_status = $config_ticket_status_id_open; // Set to open if we've auto-assigned an agent + $ticket_status = 2; // Set to open if we've auto-assigned an agent } // Assign this new ticket the next ticket number @@ -383,7 +379,7 @@ if ($config_ticket_autoclose == 1) { $sql_tickets_to_chase = mysqli_query( $mysqli, "SELECT * FROM tickets - WHERE ticket_status = '$config_ticket_status_id_autoclose' + WHERE ticket_status = 4 AND ticket_updated_at < NOW() - INTERVAL $config_ticket_autoclose_hours HOUR" ); @@ -397,7 +393,7 @@ if ($config_ticket_autoclose == 1) { $ticket_assigned_to = sanitizeInput($row['ticket_assigned_to']); $client_id = intval($row['ticket_client_id']); - mysqli_query($mysqli,"UPDATE tickets SET ticket_status = '$config_ticket_status_id_closed', ticket_closed_at = NOW(), ticket_closed_by = $ticket_assigned_to WHERE ticket_id = $ticket_id"); + mysqli_query($mysqli,"UPDATE tickets SET ticket_status = 5, ticket_closed_at = NOW(), ticket_closed_by = $ticket_assigned_to WHERE ticket_id = $ticket_id"); //Logging mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Ticket', log_action = 'Closed', log_description = '$ticket_prefix$ticket_number auto closed', log_entity_id = $ticket_id"); @@ -412,7 +408,7 @@ if ($config_ticket_autoclose == 1) { "SELECT contact_name, contact_email, ticket_id, ticket_prefix, ticket_number, ticket_subject, ticket_status, ticket_client_id FROM tickets LEFT JOIN clients ON ticket_client_id = client_id LEFT JOIN contacts ON ticket_contact_id = contact_id - WHERE ticket_status = '$config_ticket_status_id_autoclose' + WHERE ticket_status = 4 AND ticket_updated_at < NOW() - INTERVAL 48 HOUR" ); diff --git a/cron_ticket_email_parser.php b/cron_ticket_email_parser.php index fde69c29..152797f1 100644 --- a/cron_ticket_email_parser.php +++ b/cron_ticket_email_parser.php @@ -110,7 +110,7 @@ $allowed_extensions = array('jpg', 'jpeg', 'gif', 'png', 'webp', 'pdf', 'txt', ' function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments) { // Access global variables - global $mysqli,$config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_ticket_client_general_notifications, $config_ticket_new_ticket_notification_email, $config_ticket_status_id_new, $config_ticket_status_id_closed, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_smtp_host, $config_smtp_port, $config_smtp_encryption, $config_smtp_username, $config_smtp_password, $allowed_extensions; + global $mysqli,$config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_ticket_client_general_notifications, $config_ticket_new_ticket_notification_email, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_smtp_host, $config_smtp_port, $config_smtp_encryption, $config_smtp_username, $config_smtp_password, $allowed_extensions; // Get the next Ticket Number and add 1 for the new ticket number $ticket_number_sql = mysqli_fetch_array(mysqli_query($mysqli, "SELECT config_ticket_next_number FROM settings WHERE company_id = 1")); @@ -122,7 +122,7 @@ function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date $message = nl2br($message); $message = mysqli_escape_string($mysqli, "Email from: $contact_email at $date:-

$message"); - mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_subject = '$subject', ticket_details = '$message', ticket_priority = 'Low', ticket_status = '$config_ticket_status_id_new', ticket_created_by = 0, ticket_contact_id = $contact_id, ticket_client_id = $client_id"); + mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_subject = '$subject', ticket_details = '$message', ticket_priority = 'Low', ticket_status = 1, ticket_created_by = 0, ticket_contact_id = $contact_id, ticket_client_id = $client_id"); $id = mysqli_insert_id($mysqli); // Logging @@ -213,7 +213,7 @@ function addReply($from_email, $date, $subject, $ticket_number, $message, $attac // Add email as a comment/reply to an existing ticket // Access global variables - global $mysqli, $config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_ticket_status_id_open, $config_ticket_status_id_closed, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_smtp_host, $config_smtp_port, $config_smtp_encryption, $config_smtp_username, $config_smtp_password, $allowed_extensions; + global $mysqli, $config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_smtp_host, $config_smtp_port, $config_smtp_encryption, $config_smtp_username, $config_smtp_password, $allowed_extensions; // Set default reply type $ticket_reply_type = 'Client'; @@ -243,7 +243,7 @@ function addReply($from_email, $date, $subject, $ticket_number, $message, $attac $client_name = sanitizeInput($row['client_name']); // Check ticket isn't closed - tickets can't be re-opened - if ($ticket_status == $config_ticket_status_id_closed) { + if ($ticket_status == 5) { mysqli_query($mysqli, "INSERT INTO notifications SET notification_type = 'Ticket', notification = 'Email parser: $from_email attempted to re-open ticket $config_ticket_prefix$ticket_number (ID $ticket_id) - check inbox manually to see email', notification_action = 'ticket.php?ticket_id=$ticket_id', notification_client_id = $client_id"); $email_subject = "Action required: This ticket is already closed"; @@ -360,7 +360,7 @@ function addReply($from_email, $date, $subject, $ticket_number, $message, $attac } // Update Ticket Last Response Field & set ticket to open as client has replied - mysqli_query($mysqli, "UPDATE tickets SET ticket_status = '$config_ticket_status_id_open' WHERE ticket_id = $ticket_id AND ticket_client_id = $client_id LIMIT 1"); + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 2 WHERE ticket_id = $ticket_id AND ticket_client_id = $client_id LIMIT 1"); echo "Updated existing ticket.
"; mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Update', log_description = 'Email parser: Client contact $from_email updated ticket $config_ticket_prefix$ticket_number ($subject)', log_client_id = $client_id"); diff --git a/database_updates.php b/database_updates.php index aff41310..e3a5f101 100644 --- a/database_updates.php +++ b/database_updates.php @@ -1758,19 +1758,13 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { PRIMARY KEY (`ticket_status_id`) )"); - // Pre-seed ticket statuses + // Pre-seed default system/built-in ticket statuses mysqli_query($mysqli, "INSERT INTO ticket_statuses SET ticket_status_name = 'New', ticket_status_color = 'danger'"); // Default ID for new tickets is 1 mysqli_query($mysqli, "INSERT INTO ticket_statuses SET ticket_status_name = 'Open', ticket_status_color = 'primary'"); // 2 mysqli_query($mysqli, "INSERT INTO ticket_statuses SET ticket_status_name = 'On Hold', ticket_status_color = 'success'"); // 3 mysqli_query($mysqli, "INSERT INTO ticket_statuses SET ticket_status_name = 'Auto Close', ticket_status_color = 'dark'"); // 4 mysqli_query($mysqli, "INSERT INTO ticket_statuses SET ticket_status_name = 'Closed', ticket_status_color = 'dark'"); // 5 - // Add default values above to settings - mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_status_id_new` int(1) NOT NULL DEFAULT '1' AFTER `config_ticket_new_ticket_notification_email`"); - mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_status_id_open` int(1) NOT NULL DEFAULT '2' AFTER `config_ticket_status_id_new`"); - mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_status_id_autoclose` int(1) NOT NULL DEFAULT '4' AFTER `config_ticket_status_id_open`"); - mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_status_id_closed` int(1) NOT NULL DEFAULT '5' AFTER `config_ticket_status_id_autoclose`"); - // Update existing tickets to use new values mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 1 WHERE ticket_status = 'New'"); // New mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 2 WHERE ticket_status = 'Open'"); // Open diff --git a/db.sql b/db.sql index 5478e4eb..b64a7bfd 100644 --- a/db.sql +++ b/db.sql @@ -1317,10 +1317,6 @@ CREATE TABLE `settings` ( `config_ticket_autoclose` tinyint(1) NOT NULL DEFAULT 0, `config_ticket_autoclose_hours` int(5) NOT NULL DEFAULT 72, `config_ticket_new_ticket_notification_email` varchar(200) DEFAULT NULL, - `config_ticket_status_id_new` int(1) NOT NULL DEFAULT 1, - `config_ticket_status_id_open` int(1) NOT NULL DEFAULT 2, - `config_ticket_status_id_autoclose` int(1) NOT NULL DEFAULT 4, - `config_ticket_status_id_closed` int(1) NOT NULL DEFAULT 5, `config_enable_cron` tinyint(1) NOT NULL DEFAULT 0, `config_cron_key` varchar(255) DEFAULT NULL, `config_recurring_auto_send_invoice` tinyint(1) NOT NULL DEFAULT 1, @@ -1879,4 +1875,4 @@ CREATE TABLE `vendors` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- As of 2024 03 29 \ No newline at end of file +-- As of 2024 03 29 diff --git a/get_settings.php b/get_settings.php index 92c1ef16..5a3dbc2d 100644 --- a/get_settings.php +++ b/get_settings.php @@ -68,10 +68,6 @@ $config_ticket_client_general_notifications = intval($row['config_ticket_client_ $config_ticket_autoclose = intval($row['config_ticket_autoclose']); $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_status_id_new = intval($row['config_ticket_status_id_new']); -$config_ticket_status_id_open = intval($row['config_ticket_status_id_open']); -$config_ticket_status_id_autoclose = intval($row['config_ticket_status_id_autoclose']); -$config_ticket_status_id_closed = intval($row['config_ticket_status_id_closed']); // Cron $config_enable_cron = intval($row['config_enable_cron']); diff --git a/portal/portal_functions.php b/portal/portal_functions.php index af4783ae..2b960e13 100644 --- a/portal/portal_functions.php +++ b/portal/portal_functions.php @@ -11,15 +11,15 @@ function verifyContactTicketAccess($requested_ticket_id, $expected_ticket_state) { // Access the global variables - global $mysqli, $session_contact_id, $session_contact_primary, $session_contact_is_technical_contact, $session_client_id, $config_ticket_status_id_closed; + global $mysqli, $session_contact_id, $session_contact_primary, $session_contact_is_technical_contact, $session_client_id; // Setup if ($expected_ticket_state == "Closed") { // Closed tickets - $ticket_state_snippet = "ticket_status = 'Closed' OR ticket_status = $config_ticket_status_id_closed"; + $ticket_state_snippet = "ticket_status = 5"; } else { // Open (working/hold) tickets - $ticket_state_snippet = "ticket_status != 'Closed' or ticket_status != $config_ticket_status_id_closed"; + $ticket_state_snippet = "ticket_status != 5"; } // Verify the contact has access to the provided ticket ID diff --git a/portal/portal_post.php b/portal/portal_post.php index f22dbf2d..b98a2555 100644 --- a/portal/portal_post.php +++ b/portal/portal_post.php @@ -33,7 +33,7 @@ if (isset($_POST['add_ticket'])) { $new_config_ticket_next_number = $config_ticket_next_number + 1; mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1"); - mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = $config_ticket_status_id_new, ticket_created_by = 0, ticket_contact_id = $contact, ticket_client_id = $client_id"); + mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = 1, ticket_created_by = 0, ticket_contact_id = $contact, ticket_client_id = $client_id"); $id = mysqli_insert_id($mysqli); // Notify agent DL of the new ticket, if populated with a valid email @@ -86,7 +86,7 @@ if (isset($_POST['add_ticket_comment'])) { $ticket_reply_id = mysqli_insert_id($mysqli); // Update Ticket Last Response Field & set ticket to open as client has replied - mysqli_query($mysqli, "UPDATE tickets SET ticket_status = $config_ticket_status_id_open WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id LIMIT 1"); + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 2 WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id LIMIT 1"); // Get ticket details & Notify the assigned tech (if any) @@ -201,7 +201,7 @@ if (isset($_GET['close_ticket'])) { if (verifyContactTicketAccess($ticket_id, "Open")) { // Close ticket - mysqli_query($mysqli, "UPDATE tickets SET ticket_status = $config_ticket_status_id_closed, ticket_closed_at = NOW() WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id"); + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 5, ticket_closed_at = NOW() WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id"); // Add reply mysqli_query($mysqli, "INSERT INTO ticket_replies SET ticket_reply = 'Ticket closed by $session_contact_name.', ticket_reply_type = 'Client', ticket_reply_by = $session_contact_id, ticket_reply_ticket_id = $ticket_id"); diff --git a/portal/ticket.php b/portal/ticket.php index 03a60c1d..7b6725b7 100644 --- a/portal/ticket.php +++ b/portal/ticket.php @@ -20,10 +20,21 @@ if (isset($_GET['id']) && intval($_GET['id'])) { if ($session_contact_primary == 1 || $session_contact_is_technical_contact) { // For a primary / technical contact viewing all tickets - $ticket_sql = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN users on ticket_assigned_to = user_id WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id"); + $ticket_sql = mysqli_query($mysqli, + "SELECT * FROM tickets + LEFT JOIN users on ticket_assigned_to = user_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id" + ); + } else { // For a user viewing their own ticket - $ticket_sql = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN users on ticket_assigned_to = user_id WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); + $ticket_sql = mysqli_query($mysqli, + "SELECT * FROM tickets + LEFT JOIN users on ticket_assigned_to = user_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + WHERE ticket_id = $ticket_id AND ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id" + ); } $ticket_row = mysqli_fetch_array($ticket_sql); @@ -32,11 +43,12 @@ if (isset($_GET['id']) && intval($_GET['id'])) { $ticket_prefix = nullable_htmlentities($ticket_row['ticket_prefix']); $ticket_number = intval($ticket_row['ticket_number']); - $ticket_status = sanitizeInput(getTicketStatusName($ticket_row['ticket_status'])); + $ticket_status = nullable_htmlentities($ticket_row['ticket_status_name']); $ticket_priority = nullable_htmlentities($ticket_row['ticket_priority']); $ticket_subject = nullable_htmlentities($ticket_row['ticket_subject']); $ticket_details = $purifier->purify($ticket_row['ticket_details']); $ticket_assigned_to = nullable_htmlentities($ticket_row['user_name']); + $ticket_closed_at = nullable_htmlentities($ticket_row['ticket_closed_at']); $ticket_feedback = nullable_htmlentities($ticket_row['ticket_feedback']); ?> @@ -56,7 +68,7 @@ if (isset($_GET['id']) && intval($_GET['id'])) {

Ticket + if (empty($ticket_closed_at)) { ?> Close ticket

@@ -70,7 +82,7 @@ if (isset($_GET['id']) && intval($_GET['id'])) {
Priority:
- + Assigned to:

@@ -81,7 +93,7 @@ if (isset($_GET['id']) && intval($_GET['id'])) { - +
diff --git a/portal/ticket_view_all.php b/portal/ticket_view_all.php index f22f5c5f..8abefd09 100644 --- a/portal/ticket_view_all.php +++ b/portal/ticket_view_all.php @@ -16,19 +16,16 @@ if ($session_contact_primary == 0 && !$session_contact_is_technical_contact) { if (!isset($_GET['status'])) { // If nothing is set, assume we only want to see open tickets $status = 'Open'; - $ticket_status_snippet = "ticket_status != 'Closed'"; -} elseif (isset($_GET['status']) && ($_GET['status']) == 'Open') { - $status = 'Open'; - $ticket_status_snippet = "ticket_status != 'Closed'"; + $ticket_status_snippet = "ticket_status != 5"; } elseif (isset($_GET['status']) && ($_GET['status']) == 'Closed') { $status = 'Closed'; - $ticket_status_snippet = "ticket_status = 'Closed'"; + $ticket_status_snippet = "ticket_status = 5"; } else { $status = '%'; $ticket_status_snippet = "ticket_status LIKE '%'"; } -$all_tickets = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN contacts ON ticket_contact_id = contact_id WHERE $ticket_status_snippet AND ticket_client_id = $session_client_id ORDER BY ticket_id DESC"); +$all_tickets = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN contacts ON ticket_contact_id = contact_id LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE $ticket_status_snippet AND ticket_client_id = $session_client_id ORDER BY ticket_id DESC"); ?>

All tickets

@@ -61,7 +58,7 @@ $all_tickets = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN contacts O $ticket_prefix = nullable_htmlentities($row['ticket_prefix']); $ticket_number = intval($row['ticket_number']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); - $ticket_status = sanitizeInput(getTicketStatusName($row['ticket_status'])); + $ticket_status = nullable_htmlentities($row['ticket_status_name']); $ticket_contact_name = nullable_htmlentities($row['contact_name']); echo ""; diff --git a/portal/tickets.php b/portal/tickets.php index 940cb358..523d5435 100644 --- a/portal/tickets.php +++ b/portal/tickets.php @@ -13,32 +13,29 @@ require_once "inc_portal.php"; if (!isset($_GET['status'])) { // If nothing is set, assume we only want to see open tickets $status = 'Open'; - $ticket_status_snippet = "ticket_status != $config_ticket_status_id_closed AND ticket_status != 'Closed'"; -} elseif (isset($_GET['status']) && ($_GET['status']) == 'Open') { - $status = 'Open'; - $ticket_status_snippet = "ticket_status != $config_ticket_status_id_closed AND ticket_status != 'Closed'"; + $ticket_status_snippet = "ticket_status != 5 AND ticket_status != 'Closed'"; } elseif (isset($_GET['status']) && ($_GET['status']) == 'Closed') { $status = 'Closed'; - $ticket_status_snippet = "ticket_status = $config_ticket_status_id_closed OR ticket_status = 'Closed'"; + $ticket_status_snippet = "ticket_status = 5 OR ticket_status = 'Closed'"; } else { $status = '%'; $ticket_status_snippet = "ticket_status LIKE '%'"; } -$contact_tickets = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN contacts ON ticket_contact_id = contact_id WHERE $ticket_status_snippet AND ticket_contact_id = $session_contact_id AND ticket_client_id = $session_client_id ORDER BY ticket_id DESC"); +$contact_tickets = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN contacts ON ticket_contact_id = contact_id LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE $ticket_status_snippet AND ticket_contact_id = $session_contact_id AND ticket_client_id = $session_client_id ORDER BY ticket_id DESC"); //Get Total tickets closed -$sql_total_tickets_closed = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_closed FROM tickets WHERE ticket_status = $config_ticket_status_id_closed OR ticket_status = 'Closed' AND ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); +$sql_total_tickets_closed = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_closed FROM tickets WHERE ticket_closed_at IS NOT NULL AND ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); $row = mysqli_fetch_array($sql_total_tickets_closed); $total_tickets_closed = intval($row['total_tickets_closed']); //Get Total tickets open -$sql_total_tickets_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_open FROM tickets WHERE ticket_status != $config_ticket_status_id_closed AND ticket_status != 'Closed' AND ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); +$sql_total_tickets_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_open FROM tickets WHERE ticket_closed_at IS NULL AND ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); $row = mysqli_fetch_array($sql_total_tickets_open); $total_tickets_open = intval($row['total_tickets_open']); //Get Total tickets -$sql_total_tickets = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets FROM tickets WHERE ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); +$sql_total_tickets = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets FROM tickets WHERE ticket_client_id = $session_client_id AND ticket_contact_id = $session_contact_id"); $row = mysqli_fetch_array($sql_total_tickets); $total_tickets = intval($row['total_tickets']); @@ -65,7 +62,7 @@ $total_tickets = intval($row['total_tickets']); $ticket_prefix = nullable_htmlentities($row['ticket_prefix']); $ticket_number = intval($row['ticket_number']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); - $ticket_status = sanitizeInput(getTicketStatusName($row['ticket_status'])); + $ticket_status = nullable_htmlentities($row['ticket_status_name']); ?> diff --git a/post/ticket.php b/post/ticket.php index e3f302ef..5da65657 100644 --- a/post/ticket.php +++ b/post/ticket.php @@ -11,9 +11,9 @@ if (isset($_POST['add_ticket'])) { $client_id = intval($_POST['client']); $assigned_to = intval($_POST['assigned_to']); if ($assigned_to == 0) { - $ticket_status = $config_ticket_status_id_new; + $ticket_status = 1; } else { - $ticket_status = $config_ticket_status_id_open; + $ticket_status = 2; } $contact = intval($_POST['contact']); $subject = sanitizeInput($_POST['subject']); @@ -63,7 +63,7 @@ if (isset($_POST['add_ticket'])) { // Check that task_name is not-empty (For some reason the !empty on the array doesnt work here like in watchers) if (!empty($task_name)) { mysqli_query($mysqli,"INSERT INTO tasks SET task_name = '$task_name', task_ticket_id = $ticket_id"); - } + } } } @@ -345,14 +345,9 @@ if (isset($_POST['assign_ticket'])) { $assigned_to = intval($_POST['assigned_to']); $ticket_status = sanitizeInput($_POST['ticket_status']); - // TODO: Remove this legacy if - if ($ticket_status == 'New' && $assigned_to !== 0) { - $ticket_status = $config_ticket_status_id_open; - } - - // New - if ($ticket_status == $config_ticket_status_id_new && $assigned_to !== 0) { - $ticket_status = $config_ticket_status_id_open; + // New > Open as assigned + if ($ticket_status == 1 && $assigned_to !== 0) { + $ticket_status = 2; } // Allow for un-assigning tickets @@ -377,7 +372,7 @@ if (isset($_POST['assign_ticket'])) { } // Get & verify ticket details - $ticket_details_sql = mysqli_query($mysqli, "SELECT ticket_prefix, ticket_number, ticket_subject, ticket_client_id, client_name FROM tickets LEFT JOIN clients ON ticket_client_id = client_id WHERE ticket_id = '$ticket_id' AND ticket_status != $config_ticket_status_id_closed AND ticket_status != 'Closed'"); + $ticket_details_sql = mysqli_query($mysqli, "SELECT ticket_prefix, ticket_number, ticket_subject, ticket_client_id, client_name FROM tickets LEFT JOIN clients ON ticket_client_id = client_id WHERE ticket_id = '$ticket_id' AND ticket_status != 5"); $ticket_details = mysqli_fetch_array($ticket_details_sql); $ticket_prefix = sanitizeInput($ticket_details['ticket_prefix']); @@ -447,15 +442,16 @@ if (isset($_GET['delete_ticket'])) { $ticket_id = intval($_GET['delete_ticket']); // Get Ticket and Client ID for logging and alert message - $sql = mysqli_query($mysqli, "SELECT ticket_prefix, ticket_number, ticket_subject, ticket_status, ticket_client_id FROM tickets WHERE ticket_id = $ticket_id"); + $sql = mysqli_query($mysqli, "SELECT ticket_prefix, ticket_number, ticket_subject, ticket_status, ticket_closed_at, ticket_client_id FROM tickets WHERE ticket_id = $ticket_id"); $row = mysqli_fetch_array($sql); $ticket_prefix = sanitizeInput($row['ticket_prefix']); $ticket_number = sanitizeInput($row['ticket_number']); $ticket_subject = sanitizeInput($row['ticket_subject']); $ticket_status = sanitizeInput($row['ticket_status']); + $ticket_closed_at = sanitizeInput($row['ticket_closed_at']); $client_id = intval($row['ticket_client_id']); - if ($ticket_status !== $config_ticket_status_id_closed && $ticket_status !== 'Closed') { + if (empty($ticket_closed_at)) { mysqli_query($mysqli, "DELETE FROM tickets WHERE ticket_id = $ticket_id"); // Delete all ticket replies @@ -499,8 +495,8 @@ if (isset($_POST['bulk_assign_ticket'])) { $ticket_subject = sanitizeInput($row['ticket_subject']); $client_id = intval($row['ticket_client_id']); - if ($ticket_status == 'New' && $assigned_to !== 0) { - $ticket_status = $config_ticket_status_id_open; + if ($ticket_status == 1 && $assigned_to !== 0) { + $ticket_status = 2; } // Allow for un-assigning tickets @@ -889,7 +885,8 @@ if (isset($_POST['add_ticket_reply'])) { // Update Ticket Last Response Field mysqli_query($mysqli, "UPDATE tickets SET ticket_status = $ticket_status WHERE ticket_id = $ticket_id"); - if ($ticket_status == $config_ticket_status_id_closed || $ticket_status == 'Closed') { + // CLose the ticket, if set + if ($ticket_status == 5) { mysqli_query($mysqli, "UPDATE tickets SET ticket_closed_at = NOW() WHERE ticket_id = $ticket_id"); } @@ -929,10 +926,10 @@ if (isset($_POST['add_ticket_reply'])) { // Slightly different email subject/text depending on if this update closed the ticket or not - if ($ticket_status == $config_ticket_status_id_closed || $ticket_status == 'Closed') { + if ($ticket_status == 5) { $subject = "Ticket closed - [$ticket_prefix$ticket_number] - $ticket_subject | (do not reply)"; $body = "Hello $contact_name,

Your ticket regarding $ticket_subject has been closed.

--------------------------------
$ticket_reply
--------------------------------

We hope the request/issue was resolved to your satisfaction. If you need further assistance, please raise a new ticket using the below details. Please do not reply to this email.

Ticket: $ticket_prefix$ticket_number
Subject: $ticket_subject
Portal: https://$config_base_url/portal/ticket.php?id=$ticket_id

--
$company_name - Support
$config_ticket_from_email
$company_phone"; - } elseif ($ticket_status == $config_ticket_status_id_autoclose || $ticket_status == 'Auto Close') { + } elseif ($ticket_status == 4) { $subject = "Ticket update - [$ticket_prefix$ticket_number] - $ticket_subject | (pending closure)"; $body = "##- Please type your reply above this line -##

Hello $contact_name,

Your ticket regarding $ticket_subject has been updated and is pending closure.

--------------------------------
$ticket_reply
--------------------------------

If your request/issue is resolved, you can simply ignore this email. If you need further assistance, please respond to let us know!

Ticket: $ticket_prefix$ticket_number
Subject: $ticket_subject
Status: $ticket_status_name
Portal: https://$config_base_url/portal/ticket.php?id=$ticket_id

--
$company_name - Support
$config_ticket_from_email
$company_phone"; } else { diff --git a/ticket.php b/ticket.php index e128714d..bde6acab 100644 --- a/ticket.php +++ b/ticket.php @@ -27,6 +27,7 @@ if (isset($_GET['ticket_id'])) { LEFT JOIN locations ON ticket_location_id = location_id LEFT JOIN assets ON ticket_asset_id = asset_id LEFT JOIN vendors ON ticket_vendor_id = vendor_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE ticket_id = $ticket_id LIMIT 1" ); @@ -76,8 +77,9 @@ if (isset($_GET['ticket_id'])) { } $ticket_feedback = nullable_htmlentities($row['ticket_feedback']); - $ticket_status = nullable_htmlentities($row['ticket_status']); - $ticket_status_color = getTicketStatusColor($ticket_status); + $ticket_status = intval($row['ticket_status_id']); + $ticket_status_name = nullable_htmlentities($row['ticket_status_name']); + $ticket_status_color = nullable_htmlentities($row['ticket_status_color']); $ticket_vendor_ticket_number = nullable_htmlentities($row['ticket_vendor_ticket_number']); $ticket_created_at = nullable_htmlentities($row['ticket_created_at']); @@ -261,11 +263,11 @@ if (isset($_GET['ticket_id'])) {
- +
-

Ticket

+

Ticket

- +
@@ -306,7 +308,7 @@ if (isset($_GET['ticket_id'])) { Close - + +
@@ -788,7 +790,7 @@ if (isset($_GET['ticket_id'])) { - +