From 7df1d419faba9b6772de166f574c5180dbf6ea8c Mon Sep 17 00:00:00 2001
From: Marcus Hill
$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: