diff --git a/client_tickets.php b/client_tickets.php index 4c2d1340..284acdbb 100644 --- a/client_tickets.php +++ b/client_tickets.php @@ -7,15 +7,13 @@ $order = "DESC"; require_once "inc_all_client.php"; -if (isset($_GET['status']) && ($_GET['status']) == 'Open') { - $status = 'Open'; - $ticket_status_snippet = "ticket_status != 'Closed'"; -} elseif (isset($_GET['status']) && ($_GET['status']) == 'Closed') { +if (isset($_GET['status']) && ($_GET['status']) == 'Closed') { $status = 'Closed'; - $ticket_status_snippet = "ticket_status = 'Closed'"; + $ticket_status_snippet = "ticket_closed_at IS NOT NULL"; } else { + // Default - Show open tickets $status = 'Open'; - $ticket_status_snippet = "ticket_status != 'Closed'"; + $ticket_status_snippet = "ticket_closed_at IS NULL"; } if (isset($_GET['billable']) && ($_GET['billable']) == '1') { @@ -40,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 @@ -50,12 +49,12 @@ $sql = mysqli_query( $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); //Get Total tickets open -$sql_total_tickets_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_open FROM tickets WHERE ticket_client_id = $client_id AND ticket_status != 'Closed'"); +$sql_total_tickets_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_open FROM tickets WHERE ticket_client_id = $client_id AND ticket_closed_at IS NULL"); $row = mysqli_fetch_array($sql_total_tickets_open); $total_tickets_open = intval($row['total_tickets_open']); //Get Total tickets closed -$sql_total_tickets_closed = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_closed FROM tickets WHERE ticket_client_id = $client_id AND ticket_status = 'Closed'"); +$sql_total_tickets_closed = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS total_tickets_closed FROM tickets WHERE ticket_client_id = $client_id AND ticket_closed_at IS NOT NULL"); $row = mysqli_fetch_array($sql_total_tickets_closed); $total_tickets_closed = intval($row['total_tickets_closed']); @@ -142,14 +141,16 @@ $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 = nullable_htmlentities($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']); $ticket_updated_at = nullable_htmlentities($row['ticket_updated_at']); $ticket_updated_at_time_ago = timeAgo($row['ticket_updated_at']); if (empty($ticket_updated_at)) { - if ($ticket_status == "Closed") { + if (!empty($ticket_closed_at)) { $ticket_updated_at_display = "

Never

"; } else { $ticket_updated_at_display = "

Never

"; @@ -159,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); - if ($ticket_priority == "High") { $ticket_priority_display = "$ticket_priority"; } elseif ($ticket_priority == "Medium") { @@ -173,7 +172,7 @@ $total_scheduled_tickets = intval($row['total_scheduled_tickets']); $ticket_assigned_to = intval($row['ticket_assigned_to']); if (empty($ticket_assigned_to)) { - if ($ticket_status == "Closed") { + if (!empty($ticket_closed_at)) { $ticket_assigned_to_display = "

Not Assigned

"; } else { $ticket_assigned_to_display = "

Not Assigned

"; @@ -181,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']); @@ -261,7 +260,7 @@ $total_scheduled_tickets = intval($row['total_scheduled_tickets']); - + @@ -286,7 +285,7 @@ $total_scheduled_tickets = intval($row['total_scheduled_tickets']); 0) { $contact_id = intval($row['scheduled_ticket_contact_id']); $asset_id = intval($row['scheduled_ticket_asset_id']); - $ticket_status = 'New'; // Default + $ticket_status = 1; // Default if ($assigned_id > 0) { - $ticket_status = '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 @@ -381,7 +379,7 @@ if ($config_ticket_autoclose == 1) { $sql_tickets_to_chase = mysqli_query( $mysqli, "SELECT * FROM tickets - WHERE ticket_status = 'Auto Close' + WHERE ticket_status = 4 AND ticket_updated_at < NOW() - INTERVAL $config_ticket_autoclose_hours HOUR" ); @@ -395,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 = '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"); @@ -410,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 = 'Auto Close' + WHERE ticket_status = 4 AND ticket_updated_at < NOW() - INTERVAL 48 HOUR" ); @@ -422,7 +420,7 @@ if ($config_ticket_autoclose == 1) { $ticket_prefix = sanitizeInput($row['ticket_prefix']); $ticket_number = intval($row['ticket_number']); $ticket_subject = sanitizeInput($row['ticket_subject']); - $ticket_status = sanitizeInput($row['ticket_status']); + $ticket_status = sanitizeInput( getTicketStatusName($row['ticket_status'])); $client_id = intval($row['ticket_client_id']); $sql_ticket_reply = mysqli_query($mysqli, "SELECT ticket_reply FROM ticket_replies WHERE ticket_reply_type = 'Public' AND ticket_reply_ticket_id = $ticket_id ORDER BY ticket_reply_created_at DESC LIMIT 1"); @@ -431,7 +429,7 @@ if ($config_ticket_autoclose == 1) { $subject = "Ticket pending closure - [$ticket_prefix$ticket_number] - $ticket_subject"; - $body = "##- Please type your reply above this line -##

Hello, $contact_name

This is an automatic friendly reminder that your ticket regarding \"$ticket_subject\" will be closed, unless you respond.

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

If your issue is resolved, you can ignore this email - the ticket will automatically close. If you need further assistance, please respond to this email.

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

--
$company_name - Support
$config_ticket_from_email
$company_phone"; + $body = "##- Please type your reply above this line -##

Hello, $contact_name

This is an automatic friendly reminder that your ticket regarding \"$ticket_subject\" will be closed, unless you respond.

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

If your issue is resolved, you can ignore this email - the ticket will automatically close. If you need further assistance, please respond to this email.

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

--
$company_name - Support
$config_ticket_from_email
$company_phone"; $data = [ [ diff --git a/cron_ticket_email_parser.php b/cron_ticket_email_parser.php index b8cee1ff..152797f1 100644 --- a/cron_ticket_email_parser.php +++ b/cron_ticket_email_parser.php @@ -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 = '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 @@ -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 == "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 = '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/dashboard.php b/dashboard.php index 8d20596d..3cc490b6 100644 --- a/dashboard.php +++ b/dashboard.php @@ -89,7 +89,7 @@ if ($user_config_dashboard_financial_enable == 1) { //Define var so it doesnt throw errors in logs $largest_income_month = 0; - + //Get Total income $sql_total_payments_to_invoices = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS total_payments_to_invoices FROM payments WHERE YEAR(payment_date) = $year"); $row = mysqli_fetch_array($sql_total_payments_to_invoices); @@ -169,7 +169,7 @@ if ($user_config_dashboard_financial_enable == 1) { if ($config_module_enable_ticketing && $config_module_enable_accounting) { //Get Unbilled, closed tickets - $sql_unbilled_tickets = mysqli_query($mysqli, "SELECT COUNT('ticket_id') AS unbilled_tickets FROM tickets WHERE ticket_status = 'Closed' AND ticket_billable = 1 AND ticket_invoice_id = 0 AND YEAR(ticket_created_at) = $year"); + $sql_unbilled_tickets = mysqli_query($mysqli, "SELECT COUNT('ticket_id') AS unbilled_tickets FROM tickets WHERE ticket_closed_at IS NOT NULL AND ticket_billable = 1 AND ticket_invoice_id = 0 AND YEAR(ticket_created_at) = $year"); $row = mysqli_fetch_array($sql_unbilled_tickets); $unbilled_tickets = intval($row['unbilled_tickets']); } else { @@ -772,13 +772,14 @@ if ($user_config_dashboard_technical_enable == 1) { $ticket_number = intval($row['ticket_number']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); $ticket_priority = nullable_htmlentities($row['ticket_priority']); - $ticket_status = nullable_htmlentities($row['ticket_status']); + $ticket_status_id = intval($row['ticket_status']); + $ticket_status_name = sanitizeInput(getTicketStatusName($row['ticket_status'])); $ticket_created_at = nullable_htmlentities($row['ticket_created_at']); $ticket_created_at_time_ago = timeAgo($row['ticket_created_at']); $ticket_updated_at = nullable_htmlentities($row['ticket_updated_at']); $ticket_updated_at_time_ago = timeAgo($row['ticket_updated_at']); if (empty($ticket_updated_at)) { - if ($ticket_status == "Closed") { + if (!empty($ticket_closed_at)) { $ticket_updated_at_display = "

Never

"; } else { $ticket_updated_at_display = "

Never

"; @@ -791,17 +792,7 @@ if ($user_config_dashboard_technical_enable == 1) { $contact_id = intval($row['ticket_contact_id']); $contact_name = nullable_htmlentities($row['contact_name']); - if ($ticket_status == "New") { - $ticket_status_color = "danger"; - } elseif ($ticket_status == "Open") { - $ticket_status_color = "primary"; - } elseif ($ticket_status == "On Hold") { - $ticket_status_color = "success"; - } elseif ($ticket_status == "Auto Close") { - $ticket_status_color = "dark"; - } elseif ($ticket_status == "Closed") { - $ticket_status_color = "dark"; - } + $ticket_status_color = getTicketStatusColor($ticket_status_id); if ($ticket_priority == "High") { $ticket_priority_color = "danger"; @@ -831,7 +822,7 @@ if ($user_config_dashboard_technical_enable == 1) { - + diff --git a/database_updates.php b/database_updates.php index 3a9c3d4c..e3a5f101 100644 --- a/database_updates.php +++ b/database_updates.php @@ -1688,7 +1688,6 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { } if (CURRENT_DATABASE_VERSION == '1.1.3') { - mysqli_query($mysqli, "ALTER TABLE `networks` ADD `network_subnet` VARCHAR(200) DEFAULT NULL AFTER `network`"); mysqli_query($mysqli, "ALTER TABLE `networks` ADD `network_primary_dns` VARCHAR(200) DEFAULT NULL AFTER `network_gateway`"); mysqli_query($mysqli, "ALTER TABLE `networks` ADD `network_secondary_dns` VARCHAR(200) DEFAULT NULL AFTER `network_primary_dns`"); @@ -1747,10 +1746,39 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.1.5'"); } - // if (CURRENT_DATABASE_VERSION == '1.1.5') { - // // Insert queries here required to update to DB version 1.1.6 + if (CURRENT_DATABASE_VERSION == '1.1.5') { + + // Add new ticket_statuses table + mysqli_query($mysqli, + "CREATE TABLE `ticket_statuses` ( + `ticket_status_id` INT(11) NOT NULL AUTO_INCREMENT, + `ticket_status_name` VARCHAR(200) NOT NULL, + `ticket_status_color` VARCHAR(200) NOT NULL, + `ticket_status_active` TINYINT(1) NOT NULL DEFAULT '1', + PRIMARY KEY (`ticket_status_id`) + )"); + + // 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 + + // 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 + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 3 WHERE ticket_status = 'On Hold'"); // On Hold + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 4 WHERE ticket_status = 'Auto Close'"); // Auto Close + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = 5 WHERE ticket_closed_at IS NOT NULL"); // Closed + + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.1.6'"); + } + + // if (CURRENT_DATABASE_VERSION == '1.1.6') { + // // Insert queries here required to update to DB version 1.1.7 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.1.6'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.1.7'"); // } } else { diff --git a/database_version.php b/database_version.php index cd83a8e7..e6a7ca45 100644 --- a/database_version.php +++ b/database_version.php @@ -5,4 +5,4 @@ * It is used in conjunction with database_updates.php */ -DEFINE("LATEST_DATABASE_VERSION", "1.1.5"); +DEFINE("LATEST_DATABASE_VERSION", "1.1.6"); diff --git a/db.sql b/db.sql index f6edc4b1..b64a7bfd 100644 --- a/db.sql +++ b/db.sql @@ -1618,6 +1618,19 @@ CREATE TABLE `ticket_templates` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `ticket_statuses` +-- + +DROP TABLE IF EXISTS `ticket_statuses`; +CREATE TABLE IF NOT EXISTS `ticket_statuses` ( + `ticket_status_id` int(11) NOT NULL AUTO_INCREMENT, + `ticket_status_name` varchar(200) NOT NULL, + `ticket_status_color` varchar(200) NOT NULL, + `ticket_status_active` TINYINT(1) NOT NULL DEFAULT '1', + PRIMARY KEY (`ticket_status_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + -- -- Table structure for table `ticket_views` -- @@ -1862,4 +1875,4 @@ CREATE TABLE `vendors` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2024-03-27 19:16:15 +-- As of 2024 03 29 diff --git a/functions.php b/functions.php index 17df05b4..de0a016e 100644 --- a/functions.php +++ b/functions.php @@ -1139,15 +1139,32 @@ function createiCalStrCancel($originaliCalStr) { } function getTicketStatusColor($ticket_status) { - if ($ticket_status == "New") { - return "danger"; - } elseif ($ticket_status == "Open") { - return "primary"; - } elseif ($ticket_status == "On Hold") { - return "success"; - } elseif ($ticket_status == "Auto Close") { - return "dark"; - } elseif ($ticket_status == "Closed") { - return "dark"; + + global $mysqli; + + $status_id = intval($ticket_status); + $row = mysqli_fetch_array(mysqli_query($mysqli, "SELECT ticket_status_color FROM ticket_statuses WHERE ticket_status_id = $status_id LIMIT 1")); + + if ($row) { + return nullable_htmlentities($row['ticket_status_color']); } + + // Default return + return "Unknown"; +} + +function getTicketStatusName($ticket_status) { + + global $mysqli; + + $status_id = intval($ticket_status); + $row = mysqli_fetch_array(mysqli_query($mysqli, "SELECT * FROM ticket_statuses WHERE ticket_status_id = $status_id LIMIT 1")); + + if ($row) { + return nullable_htmlentities($row['ticket_status_name']); + } + + // Default return + return "Unknown"; + } diff --git a/global_search.php b/global_search.php index 14fceb2c..9bb698cf 100644 --- a/global_search.php +++ b/global_search.php @@ -26,7 +26,7 @@ if (isset($_GET['query'])) { AND client_name LIKE '%$query%' ORDER BY client_id DESC LIMIT 5" ); - + $sql_contacts = mysqli_query($mysqli, "SELECT * FROM contacts LEFT JOIN clients ON client_id = contact_client_id WHERE contact_archived_at IS NULL @@ -37,7 +37,7 @@ if (isset($_GET['query'])) { OR contact_mobile LIKE '%$phone_query%') ORDER BY contact_id DESC LIMIT 5" ); - + $sql_vendors = mysqli_query($mysqli, "SELECT * FROM vendors LEFT JOIN clients ON vendor_client_id = client_id WHERE vendor_archived_at IS NULL @@ -52,20 +52,20 @@ if (isset($_GET['query'])) { AND domain_name LIKE '%$query%' ORDER BY domain_id DESC LIMIT 5" ); - + $sql_products = mysqli_query($mysqli, "SELECT * FROM products WHERE product_archived_at IS NULL AND product_name LIKE '%$query%' ORDER BY product_id DESC LIMIT 5" ); - + $sql_documents = mysqli_query($mysqli, "SELECT * FROM documents LEFT JOIN clients on document_client_id = clients.client_id WHERE document_archived_at IS NULL AND MATCH(document_content_raw) AGAINST ('$query') ORDER BY document_id DESC LIMIT 5" ); - + $sql_tickets = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN clients on tickets.ticket_client_id = clients.client_id WHERE ticket_archived_at IS NULL @@ -73,7 +73,7 @@ if (isset($_GET['query'])) { OR ticket_number = '$ticket_num_query') ORDER BY ticket_id DESC LIMIT 5" ); - + $sql_logins = mysqli_query($mysqli, "SELECT * FROM logins LEFT JOIN contacts ON login_contact_id = contact_id LEFT JOIN clients ON login_client_id = client_id @@ -108,10 +108,10 @@ if (isset($_GET['query'])) { ); $q = nullable_htmlentities($_GET['query']); - + ?> - +
@@ -291,7 +291,7 @@ if (isset($_GET['query'])) { $domain_id = intval($row['domain_id']); $client_id = intval($row['client_id']); $client_name = nullable_htmlentities($row['client_name']); - + ?> @@ -308,7 +308,7 @@ if (isset($_GET['query'])) {
- + 0) { ?> @@ -418,7 +418,7 @@ if (isset($_GET['query'])) { $ticket_prefix = nullable_htmlentities($row['ticket_prefix']); $ticket_number = intval($row['ticket_number']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); - $ticket_status = nullable_htmlentities($row['ticket_status']); + $ticket_status = nullable_htmlentities(getTicketStatusName($row['ticket_status'])); $client_name = nullable_htmlentities($row['client_name']); $client_id = intval($row['ticket_client_id']); @@ -598,7 +598,7 @@ if (isset($_GET['query'])) { if (empty($contact_name)) { $contact_name_display = "-"; }else{ - $contact_name_display = "$contact_name"; + $contact_name_display = "$contact_name"; } $contact_archived_at = nullable_htmlentities($row['contact_archived_at']); if (empty($contact_archived_at)) { @@ -652,12 +652,12 @@ if (isset($_GET['query'])) { while ($row = mysqli_fetch_array($sql_ticket_replies)) { $ticket_id = intval($row['ticket_id']); - + // Only output the ticket header if we're at a new ticket if ($ticket_id !== $last_ticket_id) { if ($last_ticket_id !== null) { // Close the previous ticket's card (except for the very first ticket) - echo '
'; + echo ''; } $ticket_prefix = nullable_htmlentities($row['ticket_prefix']); @@ -699,7 +699,7 @@ if (isset($_GET['query'])) { if ($last_ticket_id !== null) { // Close the last ticket's card - echo ''; + echo ''; } ?> @@ -721,4 +721,4 @@ require_once "footer.php"; ?> - \ No newline at end of file + diff --git a/portal/portal_functions.php b/portal/portal_functions.php index a9ac1f14..2b960e13 100644 --- a/portal/portal_functions.php +++ b/portal/portal_functions.php @@ -16,10 +16,10 @@ function verifyContactTicketAccess($requested_ticket_id, $expected_ticket_state) // Setup if ($expected_ticket_state == "Closed") { // Closed tickets - $ticket_state_snippet = "ticket_status = 'Closed'"; + $ticket_state_snippet = "ticket_status = 5"; } else { // Open (working/hold) tickets - $ticket_state_snippet = "ticket_status != '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 2e154385..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 = '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 = '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 = '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 cee3b2f6..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 = nullable_htmlentities($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 5eea42d1..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 = nullable_htmlentities($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 ebd2696e..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 != 'Closed'"; -} elseif (isset($_GET['status']) && ($_GET['status']) == 'Open') { - $status = 'Open'; - $ticket_status_snippet = "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 = '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 = '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 != '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 = nullable_htmlentities($row['ticket_status']); + $ticket_status = nullable_htmlentities($row['ticket_status_name']); ?> diff --git a/post/ticket.php b/post/ticket.php index 26e628d7..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 = 'New'; + $ticket_status = 1; } else { - $ticket_status = '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"); - } + } } } @@ -94,6 +94,7 @@ if (isset($_POST['add_ticket'])) { $ticket_details = mysqli_escape_string($mysqli, $row['ticket_details']); $ticket_priority = sanitizeInput($row['ticket_priority']); $ticket_status = sanitizeInput($row['ticket_status']); + $ticket_status_name = sanitizeInput(getTicketStatusName($row['ticket_status'])); $client_id = intval($row['ticket_client_id']); $ticket_created_by = intval($row['ticket_created_by']); $ticket_assigned_to = intval($row['ticket_assigned_to']); @@ -343,8 +344,10 @@ if (isset($_POST['assign_ticket'])) { $ticket_id = intval($_POST['ticket_id']); $assigned_to = intval($_POST['assigned_to']); $ticket_status = sanitizeInput($_POST['ticket_status']); - if ($ticket_status == 'New' && $assigned_to !== 0) { - $ticket_status = 'Open'; + + // New > Open as assigned + if ($ticket_status == 1 && $assigned_to !== 0) { + $ticket_status = 2; } // Allow for un-assigning tickets @@ -369,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 != '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']); @@ -439,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 !== 'Closed') { + if (empty($ticket_closed_at)) { mysqli_query($mysqli, "DELETE FROM tickets WHERE ticket_id = $ticket_id"); // Delete all ticket replies @@ -491,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 = 'Open'; + if ($ticket_status == 1 && $assigned_to !== 0) { + $ticket_status = 2; } // Allow for un-assigning tickets @@ -634,7 +638,7 @@ if (isset($_POST['bulk_close_tickets'])) { $ticket_prefix = sanitizeInput($row['ticket_prefix']); $ticket_number = intval($row['ticket_number']); - $ticket_status = sanitizeInput($row['ticket_status']); + $ticket_status = sanitizeInput(getTicketStatusName($row['ticket_status'])); $ticket_subject = sanitizeInput($row['ticket_subject']); $current_ticket_priority = sanitizeInput($row['ticket_priority']); $client_id = intval($row['ticket_client_id']); @@ -726,6 +730,7 @@ if (isset($_POST['bulk_ticket_reply'])) { // POST variables $ticket_reply = mysqli_escape_string($mysqli, $_POST['bulk_reply_details']); $ticket_status = sanitizeInput($_POST['bulk_status']); + $ticket_status_name = sanitizeInput(getTicketStatusName($row['ticket_status'])); $private_note = intval($_POST['bulk_private_reply']); if ($private_note == 1) { $ticket_reply_type = 'Internal'; @@ -793,7 +798,7 @@ if (isset($_POST['bulk_ticket_reply'])) { if (filter_var($contact_email, FILTER_VALIDATE_EMAIL)) { $subject = "Ticket update - [$ticket_prefix$ticket_number] - $ticket_subject"; - $body = "##- Please type your reply above this line -##

Hello $contact_name,

Your ticket regarding $ticket_subject has been updated.

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

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

--
$company_name - Support
$from_email
$company_phone"; + $body = "##- Please type your reply above this line -##

Hello $contact_name,

Your ticket regarding $ticket_subject has been updated.

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

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

--
$company_name - Support
$from_email
$company_phone"; $data = []; @@ -854,15 +859,13 @@ if (isset($_POST['add_ticket_reply'])) { $ticket_id = intval($_POST['ticket_id']); $ticket_reply = mysqli_real_escape_string($mysqli, $_POST['ticket_reply']); - $ticket_status = sanitizeInput($_POST['status']); + $ticket_status = intval($_POST['status']); + $ticket_status_name = sanitizeInput(getTicketStatusName($row['ticket_status'])); // Handle the time inputs for hours, minutes, and seconds $hours = intval($_POST['hours']); $minutes = intval($_POST['minutes']); $seconds = intval($_POST['seconds']); - //var_dump($_POST); - //exit; - // Combine into a single time string $ticket_reply_time_worked = sanitizeInput(sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds)); @@ -880,9 +883,10 @@ if (isset($_POST['add_ticket_reply'])) { $ticket_reply_id = mysqli_insert_id($mysqli); // Update Ticket Last Response Field - mysqli_query($mysqli, "UPDATE tickets SET ticket_status = '$ticket_status' WHERE ticket_id = $ticket_id"); + mysqli_query($mysqli, "UPDATE tickets SET ticket_status = $ticket_status WHERE ticket_id = $ticket_id"); - if ($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"); } @@ -922,15 +926,15 @@ if (isset($_POST['add_ticket_reply'])) { // Slightly different email subject/text depending on if this update closed the ticket or not - if ($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 == '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
Portal: https://$config_base_url/portal/ticket.php?id=$ticket_id

--
$company_name - Support
$config_ticket_from_email
$company_phone"; + $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 { $subject = "Ticket update - [$ticket_prefix$ticket_number] - $ticket_subject"; - $body = "##- Please type your reply above this line -##

Hello $contact_name,

Your ticket regarding $ticket_subject has been updated.

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

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

--
$company_name - Support
$config_ticket_from_email
$company_phone"; + $body = "##- Please type your reply above this line -##

Hello $contact_name,

Your ticket regarding $ticket_subject has been updated.

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

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"; } $data = []; diff --git a/report_ticket_by_client.php b/report_ticket_by_client.php index b182850d..96b967e4 100644 --- a/report_ticket_by_client.php +++ b/report_ticket_by_client.php @@ -94,12 +94,12 @@ $sql_clients = mysqli_query($mysqli, "SELECT client_id, client_name FROM clients $ticket_raised_count = intval($row['ticket_raised_count']); // Calculate total tickets raised in period that are closed - $sql_ticket_closed_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_closed_count FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = $client_id AND ticket_status = 'Closed'"); + $sql_ticket_closed_count = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_closed_count FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = $client_id AND ticket_closed_at IS NOT NULL"); $row = mysqli_fetch_array($sql_ticket_closed_count); $ticket_closed_count = intval($row['ticket_closed_count']); // Used to calculate average time to close tickets that were raised in period specified - $sql_tickets = mysqli_query($mysqli, "SELECT ticket_created_at, ticket_closed_at FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = $client_id AND ticket_status = 'Closed' AND ticket_closed_at IS NOT NULL"); + $sql_tickets = mysqli_query($mysqli, "SELECT ticket_created_at, ticket_closed_at FROM tickets WHERE YEAR(ticket_created_at) = $year AND ticket_client_id = $client_id AND ticket_closed_at IS NOT NULL"); if ($ticket_raised_count > 0) { diff --git a/setup.php b/setup.php index 0d5a7476..59df2dfe 100644 --- a/setup.php +++ b/setup.php @@ -257,7 +257,7 @@ if (isset($_POST['add_company_settings'])) { unlink('uploads/tmp/cronkey.php'); } - + // Create Main Account Types mysqli_query($mysqli,"INSERT INTO account_types SET account_type_name = 'Asset', account_type_parent = 1, account_type_description = 'Assets are economic resources which are expected to benefit the business in the future.'"); @@ -295,6 +295,12 @@ if (isset($_POST['add_company_settings'])) { //Create Calendar mysqli_query($mysqli,"INSERT INTO calendars SET calendar_name = 'Default', calendar_color = 'blue'"); + // Add default 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 = 'success'"); // 4 + mysqli_query($mysqli, "INSERT INTO ticket_statuses SET ticket_status_name = 'Closed', ticket_status_color = 'dark'"); // 5 $_SESSION['alert_message'] = "Company $name created!"; diff --git a/ticket.php b/ticket.php index 0fbe5dc9..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,15 +263,16 @@ if (isset($_GET['ticket_id'])) {
+
-

Ticket

+

Ticket

- +
- + - +
- +
@@ -388,16 +391,15 @@ if (isset($_GET['ticket_id'])) {
@@ -545,7 +547,7 @@ if (isset($_GET['ticket_id'])) {
- +

+ @@ -662,7 +665,7 @@ if (isset($_GET['ticket_id'])) {
- > value=""> -
+
@@ -726,7 +729,7 @@ if (isset($_GET['ticket_id'])) { if ($prev_ticket_row) { $prev_ticket_id = intval($prev_ticket_row['ticket_id']); $prev_ticket_subject = nullable_htmlentities($prev_ticket_row['ticket_subject']); - $prev_ticket_status = nullable_htmlentities($prev_ticket_row['ticket_status']); + $prev_ticket_status = nullable_htmlentities( getTicketStatusName($prev_ticket_row['ticket_status'])); ?>
@@ -787,7 +790,7 @@ if (isset($_GET['ticket_id'])) { - +