set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one $purifier_config->set('URI.AllowedSchemes', ['data' => true, 'src' => true, 'http' => true, 'https' => true]); $purifier = new HTMLPurifier($purifier_config); if (isset($_GET['ticket_id'])) { $ticket_id = intval($_GET['ticket_id']); $sql = mysqli_query( $mysqli, "SELECT * FROM tickets LEFT JOIN clients ON ticket_client_id = client_id LEFT JOIN contacts ON ticket_contact_id = contact_id LEFT JOIN users ON ticket_assigned_to = user_id LEFT JOIN locations ON ticket_location_id = location_id LEFT JOIN assets ON ticket_asset_id = asset_id LEFT JOIN asset_interfaces ON interface_asset_id = asset_id AND interface_primary = 1 LEFT JOIN vendors ON ticket_vendor_id = vendor_id LEFT JOIN projects ON ticket_project_id = project_id LEFT JOIN invoices ON ticket_invoice_id = invoice_id LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id LEFT JOIN categories ON ticket_category = category_id WHERE ticket_id = $ticket_id $access_permission_query LIMIT 1" ); if (mysqli_num_rows($sql) == 0) { echo "

Nothing to see here

Go Back
"; include_once "includes/footer.php"; } else { $row = mysqli_fetch_array($sql); $client_id = intval($row['client_id']); $client_name = nullable_htmlentities($row['client_name']); $client_type = nullable_htmlentities($row['client_type']); $client_website = nullable_htmlentities($row['client_website']); $client_net_terms = intval($row['client_net_terms']); if ($client_net_terms == 0) { $client_net_terms = $config_default_net_terms; } $client_rate = floatval($row['client_rate']); $ticket_prefix = nullable_htmlentities($row['ticket_prefix']); $ticket_number = intval($row['ticket_number']); $ticket_category = intval($row['ticket_category']); $ticket_category_display = nullable_htmlentities($row['category_name']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); $ticket_details = $purifier->purify($row['ticket_details']); $ticket_priority = nullable_htmlentities($row['ticket_priority']); $ticket_billable = intval($row['ticket_billable']); $ticket_scheduled_for = nullable_htmlentities($row['ticket_schedule']); $ticket_onsite = intval($row['ticket_onsite']); if ($ticket_scheduled_for) { $ticket_scheduled_wording = "$ticket_scheduled_for"; } else { $ticket_scheduled_wording = "Add"; } //Set Ticket Badge Color based of priority if ($ticket_priority == "High") { $ticket_priority_display = "$ticket_priority"; } elseif ($ticket_priority == "Medium") { $ticket_priority_display = "$ticket_priority"; } elseif ($ticket_priority == "Low") { $ticket_priority_display = "$ticket_priority"; } else { $ticket_priority_display = ""; } $ticket_feedback = nullable_htmlentities($row['ticket_feedback']); $ticket_status = intval($row['ticket_status_id']); $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_vendor_ticket_number = nullable_htmlentities($row['ticket_vendor_ticket_number']); $ticket_created_at = nullable_htmlentities($row['ticket_created_at']); $ticket_created_at_ago = timeAgo($row['ticket_created_at']); $ticket_date = date('Y-m-d', strtotime($ticket_created_at)); $ticket_updated_at = nullable_htmlentities($row['ticket_updated_at']); $ticket_updated_at_ago = timeAgo($row['ticket_updated_at']); $ticket_resolved_at = nullable_htmlentities($row['ticket_resolved_at']); $ticket_resolved_at_ago = timeAgo($row['ticket_resolved_at']); $ticket_closed_at = nullable_htmlentities($row['ticket_closed_at']); $ticket_closed_at_ago = timeAgo($row['ticket_closed_at']); $ticket_closed_by = intval($row['ticket_closed_by']); $ticket_assigned_to = intval($row['ticket_assigned_to']); if (empty($ticket_assigned_to)) { $ticket_assigned_to_display = "Not Assigned"; } else { $ticket_assigned_to_display = nullable_htmlentities($row['user_name']); } // Tab Title // No Sanitizing needed $page_title = $row['ticket_subject']; $tab_title = "{$row['ticket_prefix']}{$row['ticket_number']}"; $contact_id = intval($row['contact_id']); $contact_name = nullable_htmlentities($row['contact_name']); $contact_title = nullable_htmlentities($row['contact_title']); $contact_email = nullable_htmlentities($row['contact_email']); $contact_phone_country_code = nullable_htmlentities($row['contact_phone_country_code']); $contact_phone = nullable_htmlentities(formatPhoneNumber($row['contact_phone'], $contact_phone_country_code)); $contact_extension = nullable_htmlentities($row['contact_extension']); $contact_mobile_country_code = nullable_htmlentities($row['contact_mobile_country_code']); $contact_mobile = nullable_htmlentities(formatPhoneNumber($row['contact_mobile'], $contact_mobile_country_code)); $asset_id = intval($row['asset_id']); $asset_ip = nullable_htmlentities($row['interface_ip']); $asset_name = nullable_htmlentities($row['asset_name']); $asset_type = nullable_htmlentities($row['asset_type']); $asset_uri = nullable_htmlentities($row['asset_uri']); $asset_make = nullable_htmlentities($row['asset_make']); $asset_model = nullable_htmlentities($row['asset_model']); $asset_serial = nullable_htmlentities($row['asset_serial']); $asset_os = nullable_htmlentities($row['asset_os']); $asset_warranty_expire = nullable_htmlentities($row['asset_warranty_expire']); $asset_icon = getAssetIcon($asset_type); $vendor_id = intval($row['ticket_vendor_id']); $vendor_name = nullable_htmlentities($row['vendor_name']); $vendor_description = nullable_htmlentities($row['vendor_description']); $vendor_account_number = nullable_htmlentities($row['vendor_account_number']); $vendor_contact_name = nullable_htmlentities($row['vendor_contact_name']); $vendor_phone = formatPhoneNumber($row['vendor_phone']); $vendor_extension = nullable_htmlentities($row['vendor_extension']); $vendor_email = nullable_htmlentities($row['vendor_email']); $vendor_website = nullable_htmlentities($row['vendor_website']); $vendor_hours = nullable_htmlentities($row['vendor_hours']); $vendor_sla = nullable_htmlentities($row['vendor_sla']); $vendor_code = nullable_htmlentities($row['vendor_code']); $vendor_notes = nullable_htmlentities($row['vendor_notes']); $location_id = intval($row['location_id']); $location_name = nullable_htmlentities($row['location_name']); $location_address = nullable_htmlentities($row['location_address']); $location_city = nullable_htmlentities($row['location_city']); $location_state = nullable_htmlentities($row['location_state']); $location_zip = nullable_htmlentities($row['location_zip']); $location_phone = formatPhoneNumber($row['location_phone']); $project_id = intval($row['project_id']); $project_prefix = nullable_htmlentities($row['project_prefix']); $project_number = intval($row['project_number']); $project_name = nullable_htmlentities($row['project_name']); $project_description = nullable_htmlentities($row['project_description']); $project_due = nullable_htmlentities($row['project_due']); $project_manager = nullable_htmlentities($row['project_manager']); if($project_manager) { $sql_project_manager = mysqli_query($mysqli,"SELECT * FROM users WHERE user_id = $project_manager"); $row = mysqli_fetch_array($sql_project_manager); $project_manager_name = nullable_htmlentities($row['user_name']); } $invoice_id = intval($row['ticket_invoice_id']); $invoice_prefix = nullable_htmlentities($row['invoice_prefix']); $invoice_number = intval($row['invoice_number']); $invoice_created_at = nullable_htmlentities($row['invoice_created_at']); if ($contact_id) { //Get Contact Ticket Stats $ticket_related_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_related_open FROM tickets WHERE ticket_status != 'Closed' AND ticket_contact_id = $contact_id "); $row = mysqli_fetch_array($ticket_related_open); $ticket_related_open = intval($row['ticket_related_open']); $ticket_related_closed = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_related_closed FROM tickets WHERE ticket_status = 'Closed' AND ticket_contact_id = $contact_id "); $row = mysqli_fetch_array($ticket_related_closed); $ticket_related_closed = intval($row['ticket_related_closed']); $ticket_related_total = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_related_total FROM tickets WHERE ticket_contact_id = $contact_id "); $row = mysqli_fetch_array($ticket_related_total); $ticket_related_total = intval($row['ticket_related_total']); } //Get Total Ticket Time $ticket_total_reply_time = mysqli_query($mysqli, "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(ticket_reply_time_worked))) AS ticket_total_reply_time FROM ticket_replies WHERE ticket_reply_archived_at IS NULL AND ticket_reply_ticket_id = $ticket_id"); $row = mysqli_fetch_array($ticket_total_reply_time); $ticket_total_reply_time = nullable_htmlentities($row['ticket_total_reply_time']); // Client Tags $client_tag_name_display_array = array(); $client_tag_id_array = array(); $sql_client_tags = mysqli_query($mysqli, "SELECT * FROM client_tags LEFT JOIN tags ON client_tags.tag_id = tags.tag_id WHERE client_id = $client_id ORDER BY tag_name ASC"); while ($row = mysqli_fetch_array($sql_client_tags)) { $client_tag_id = intval($row['tag_id']); $client_tag_name = nullable_htmlentities($row['tag_name']); $client_tag_color = nullable_htmlentities($row['tag_color']); if (empty($client_tag_color)) { $client_tag_color = "dark"; } $client_tag_icon = nullable_htmlentities($row['tag_icon']); if (empty($client_tag_icon)) { $client_tag_icon = "tag"; } $client_tag_id_array[] = $client_tag_id; $client_tag_name_display_array[] = "$client_tag_name"; } $client_tags_display = implode(' ', $client_tag_name_display_array); // Get the number of ticket Responses $ticket_responses_sql = mysqli_query($mysqli, "SELECT COUNT(ticket_reply_id) AS ticket_responses FROM ticket_replies WHERE ticket_reply_archived_at IS NULL AND ticket_reply_ticket_id = $ticket_id"); $row = mysqli_fetch_array($ticket_responses_sql); $ticket_responses = intval($row['ticket_responses']); $ticket_all_comments_sql = mysqli_query($mysqli, "SELECT COUNT(ticket_reply_id) AS ticket_all_comments_count FROM ticket_replies WHERE ticket_reply_archived_at IS NULL AND ticket_reply_ticket_id = $ticket_id"); $row = mysqli_fetch_array($ticket_all_comments_sql); $ticket_all_comments_count = intval($row['ticket_all_comments_count']); $ticket_internal_notes_sql = mysqli_query($mysqli, "SELECT COUNT(ticket_reply_id) AS ticket_internal_notes_count FROM ticket_replies WHERE ticket_reply_archived_at IS NULL AND ticket_reply_type = 'Internal' AND ticket_reply_ticket_id = $ticket_id"); $row = mysqli_fetch_array($ticket_internal_notes_sql); $ticket_internal_notes_count = intval($row['ticket_internal_notes_count']); $ticket_public_comments_sql = mysqli_query($mysqli, "SELECT COUNT(ticket_reply_id) AS ticket_public_comments_count FROM ticket_replies WHERE ticket_reply_archived_at IS NULL AND (ticket_reply_type = 'Public' OR ticket_reply_type = 'Client') AND ticket_reply_ticket_id = $ticket_id"); $row = mysqli_fetch_array($ticket_public_comments_sql); $ticket_public_comments_count = intval($row['ticket_public_comments_count']); $ticket_events_sql = mysqli_query($mysqli, "SELECT COUNT(log_id) AS ticket_events_count FROM logs WHERE log_type = 'Ticket' AND log_entity_id = $ticket_id"); $row = mysqli_fetch_array($ticket_events_sql); $ticket_events_count = intval($row['ticket_events_count']); // Get & format asset warranty expiry $date = date('Y-m-d H:i:s'); $dt_value = $asset_warranty_expire; //sample date $warranty_check = date('m/d/Y', strtotime('-8 hours')); if ($dt_value <= $date) { $dt_value = "Expired on $asset_warranty_expire"; $warranty_status_color = 'red'; } else { $warranty_status_color = 'green'; } if ($asset_warranty_expire == "NULL") { $dt_value = "None"; $warranty_status_color = 'red'; } // Get ticket replies $sql_ticket_replies = mysqli_query($mysqli, "SELECT * FROM ticket_replies LEFT JOIN users ON ticket_reply_by = user_id LEFT JOIN contacts ON ticket_reply_by = contact_id WHERE ticket_reply_ticket_id = $ticket_id AND ticket_reply_archived_at IS NULL ORDER BY ticket_reply_id DESC" ); // Get ticket Events $sql_ticket_events = mysqli_query($mysqli, "SELECT * FROM ticket_history WHERE ticket_history_ticket_id = $ticket_id ORDER BY ticket_history_id DESC" ); // Get Technicians to assign the ticket to $sql_assign_to_select = mysqli_query( $mysqli, "SELECT user_id, user_name FROM users WHERE user_role_id > 1 AND user_type = 1 AND user_status = 1 AND user_archived_at IS NULL ORDER BY user_name ASC" ); // Get Watchers $sql_ticket_watchers = mysqli_query($mysqli, "SELECT * FROM ticket_watchers WHERE watcher_ticket_id = $ticket_id ORDER BY watcher_email DESC"); // Get Additional Assets $sql_additional_assets = mysqli_query($mysqli, "SELECT * FROM assets, ticket_assets WHERE assets.asset_id = ticket_assets.asset_id AND ticket_id = $ticket_id AND assets.asset_id != $asset_id" ); // Get Ticket Attachments $sql_ticket_attachments = mysqli_query( $mysqli, "SELECT * FROM ticket_attachments WHERE ticket_attachment_reply_id IS NULL AND ticket_attachment_ticket_id = $ticket_id" ); // Get Tasks $sql_tasks = mysqli_query( $mysqli, "SELECT * FROM tasks WHERE task_ticket_id = $ticket_id ORDER BY task_order ASC, task_id ASC"); $task_count = mysqli_num_rows($sql_tasks); // Get Completed Task Count $sql_tasks_completed = mysqli_query($mysqli, "SELECT * FROM tasks WHERE task_ticket_id = $ticket_id AND task_completed_at IS NOT NULL" ); $completed_task_count = mysqli_num_rows($sql_tasks_completed); // Tasks Completed Percent if ($task_count) { $tasks_completed_percent = round(($completed_task_count / $task_count) * 100); } // Get all Assigned ticket Users as a comma-separated string $sql_ticket_collaborators = mysqli_query($mysqli, " SELECT GROUP_CONCAT(DISTINCT user_name SEPARATOR ', ') AS user_names FROM users LEFT JOIN ticket_replies ON user_id = ticket_reply_by WHERE ticket_reply_archived_at IS NULL AND ticket_reply_ticket_id = $ticket_id "); // Fetch the result $row = mysqli_fetch_assoc($sql_ticket_collaborators); // The user names in a comma-separated string $ticket_collaborators = nullable_htmlentities($row['user_names']); ?>
= 2) { ?>
Updated:
Closed by:
Closed at:
Feedback:
Tasks Completed%
/
Total time worked:
0) { ?>

Ticket Details

Subject:

$name | Download | View"; } ?>
= 2 && empty($ticket_resolved_at) && empty($ticket_closed_at)) { ?>
Responses:
purify($row['ticket_reply']); $ticket_reply_type = nullable_htmlentities($row['ticket_reply_type']); $ticket_reply_created_at = nullable_htmlentities($row['ticket_reply_created_at']); $ticket_reply_created_at_ago = timeAgo($row['ticket_reply_created_at']); $ticket_reply_updated_at = nullable_htmlentities($row['ticket_reply_updated_at']); $ticket_reply_updated_at_ago = timeAgo($row['ticket_reply_updated_at']); $ticket_reply_by = intval($row['ticket_reply_by']); if ($ticket_reply_type == "Client") { $ticket_reply_by_display = nullable_htmlentities($row['contact_name']); $user_initials = initials($row['contact_name']); $user_avatar = nullable_htmlentities($row['contact_photo']); $avatar_link = "uploads/clients/$client_id/$user_avatar"; } else { $ticket_reply_by_display = nullable_htmlentities($row['user_name']); $user_id = intval($row['user_id']); $user_avatar = nullable_htmlentities($row['user_avatar']); $user_initials = initials($row['user_name']); $avatar_link = "uploads/users/$user_id/$user_avatar"; $ticket_reply_time_worked = date_create($row['ticket_reply_time_worked']); } $sql_ticket_reply_attachments = mysqli_query( $mysqli, "SELECT * FROM ticket_attachments WHERE ticket_attachment_reply_id = $ticket_reply_id AND ticket_attachment_ticket_id = $ticket_id" ); ?>
mb-3">
User Avatar


Time worked:
$name | Download | View"; } ?>
Contact
0)) { ?>
= 2) { ?>
= 2) { ?> m -
0) { ?>
Watchers
Asset(s)
Vendor
Project
= 2 && empty($ticket_closed_at)) { require_once "modals/ticket_edit_asset_modal.php"; require_once "modals/ticket_edit_vendor_modal.php"; require_once "modals/ticket_add_watcher_modal.php"; require_once "modals/ticket_change_client_modal.php"; require_once "modals/ticket_edit_schedule_modal.php"; require_once "modals/ticket_merge_modal.php"; } if (lookupUserPermission("module_support") >= 2 && lookupUserPermission("module_sales") >= 2 && $config_module_enable_accounting) { require_once "modals/ticket_invoice_add_modal.php"; } } } require_once "includes/footer.php"; ?>