diff --git a/ajax/ajax_asset_details.php b/ajax/ajax_asset_details.php
new file mode 100644
index 00000000..f5ea387c
--- /dev/null
+++ b/ajax/ajax_asset_details.php
@@ -0,0 +1,735 @@
+$contact_name";
+} else {
+ $contact_name_display = $contact_name;
+}
+$location_name = nullable_htmlentities($row['location_name']);
+if (empty($location_name)) {
+ $location_name = "-";
+}
+$location_archived_at = nullable_htmlentities($row['location_archived_at']);
+if ($location_archived_at) {
+ $location_name_display = "$location_name";
+} else {
+ $location_name_display = $location_name;
+}
+
+// Network Interfaces
+$sql_related_interfaces = mysqli_query($mysqli, "
+ SELECT
+ ai.interface_id,
+ ai.interface_name,
+ ai.interface_description,
+ ai.interface_type,
+ ai.interface_mac,
+ ai.interface_ip,
+ ai.interface_nat_ip,
+ ai.interface_ipv6,
+ ai.interface_primary,
+ ai.interface_notes,
+ n.network_name,
+ n.network_id,
+ connected_interfaces.interface_id AS connected_interface_id,
+ connected_interfaces.interface_name AS connected_interface_name,
+ connected_assets.asset_name AS connected_asset_name,
+ connected_assets.asset_id AS connected_asset_id,
+ connected_assets.asset_type AS connected_asset_type
+ FROM asset_interfaces AS ai
+ LEFT JOIN networks AS n
+ ON n.network_id = ai.interface_network_id
+ LEFT JOIN asset_interface_links AS ail
+ ON (ail.interface_a_id = ai.interface_id OR ail.interface_b_id = ai.interface_id)
+ LEFT JOIN asset_interfaces AS connected_interfaces
+ ON (
+ (ail.interface_a_id = ai.interface_id AND ail.interface_b_id = connected_interfaces.interface_id)
+ OR
+ (ail.interface_b_id = ai.interface_id AND ail.interface_a_id = connected_interfaces.interface_id)
+ )
+ LEFT JOIN assets AS connected_assets
+ ON connected_assets.asset_id = connected_interfaces.interface_asset_id
+ WHERE
+ ai.interface_asset_id = $asset_id
+ AND ai.interface_archived_at IS NULL
+ ORDER BY ai.interface_name ASC
+");
+$interface_count = mysqli_num_rows($sql_related_interfaces);
+
+// Related Credentials Query
+$sql_related_credentials = mysqli_query($mysqli, "
+ SELECT
+ logins.login_id AS login_id,
+ logins.login_name,
+ logins.login_description,
+ logins.login_uri,
+ logins.login_username,
+ logins.login_password,
+ logins.login_otp_secret,
+ logins.login_note,
+ logins.login_important,
+ logins.login_contact_id,
+ logins.login_vendor_id,
+ logins.login_asset_id,
+ logins.login_software_id
+ FROM logins
+ LEFT JOIN login_tags ON login_tags.login_id = logins.login_id
+ LEFT JOIN tags ON tags.tag_id = login_tags.tag_id
+ WHERE login_asset_id = $asset_id
+ AND login_archived_at IS NULL
+ GROUP BY logins.login_id
+ ORDER BY login_name DESC
+");
+$credential_count = mysqli_num_rows($sql_related_credentials);
+
+// Related Tickets Query
+$sql_related_tickets = mysqli_query($mysqli, "SELECT * FROM tickets
+ LEFT JOIN users on ticket_assigned_to = user_id
+ LEFT JOIN ticket_statuses ON ticket_status_id = ticket_status
+ WHERE ticket_asset_id = $asset_id
+ ORDER BY ticket_number DESC"
+);
+$ticket_count = mysqli_num_rows($sql_related_tickets);
+
+// Related Recurring Tickets Query
+$sql_related_recurring_tickets = mysqli_query($mysqli, "SELECT * FROM scheduled_tickets
+ WHERE scheduled_ticket_asset_id = $asset_id
+ ORDER BY scheduled_ticket_next_run DESC"
+);
+$recurring_ticket_count = mysqli_num_rows($sql_related_recurring_tickets);
+
+// Related Documents
+$sql_related_documents = mysqli_query($mysqli, "SELECT * FROM asset_documents
+ LEFT JOIN documents ON asset_documents.document_id = documents.document_id
+ WHERE asset_documents.asset_id = $asset_id
+ AND document_archived_at IS NULL
+ ORDER BY document_name DESC"
+);
+$document_count = mysqli_num_rows($sql_related_documents);
+
+// Related Files
+$sql_related_files = mysqli_query($mysqli, "SELECT * FROM asset_files
+ LEFT JOIN files ON asset_files.file_id = files.file_id
+ WHERE asset_files.asset_id = $asset_id
+ AND file_archived_at IS NULL
+ ORDER BY file_name DESC"
+);
+$file_count = mysqli_num_rows($sql_related_files);
+
+// Related Software Query
+$sql_related_software = mysqli_query(
+ $mysqli,
+ "SELECT * FROM software_assets
+ LEFT JOIN software ON software_assets.software_id = software.software_id
+ WHERE software_assets.asset_id = $asset_id
+ AND software_archived_at IS NULL
+ ORDER BY software_name DESC"
+);
+
+$software_count = mysqli_num_rows($sql_related_software);
+
+
+
+// Generate the HTML form content using output buffering.
+ob_start();
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ">
+
+ | Name / Port |
+ Type |
+ MAC |
+ IP |
+ Network |
+ Connected To |
+
+
+
+
+ $network_name"
+ : '-';
+
+ // Connected interface details
+ $connected_asset_id = intval($row['connected_asset_id']);
+ $connected_asset_name = nullable_htmlentities($row['connected_asset_name']);
+ $connected_asset_type = nullable_htmlentities($row['connected_asset_type']);
+ $connected_asset_icon = getAssetIcon($connected_asset_type);
+ $connected_interface_name = nullable_htmlentities($row['connected_interface_name']);
+
+
+ // Show either "-" or "AssetName - Port"
+ if ($connected_asset_name) {
+ $connected_to_display = "$connected_asset_name - $connected_interface_name";
+ } else {
+ $connected_to_display = "-";
+ }
+ ?>
+
+ |
+
+ (Primary)"; } ?>
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Name |
+ Username |
+ Password |
+ OTP |
+ URI |
+
+
+
+ ";
+ }
+ $login_password = nullable_htmlentities(decryptLoginEntry($row['login_password']));
+ $login_otp_secret = nullable_htmlentities($row['login_otp_secret']);
+ $login_id_with_secret = '"' . $row['login_id'] . '","' . $row['login_otp_secret'] . '"';
+ if (empty($login_otp_secret)) {
+ $otp_display = "-";
+ } else {
+ $otp_display = " Hover..";
+ }
+ $login_note = nullable_htmlentities($row['login_note']);
+ $login_important = intval($row['login_important']);
+ $login_contact_id = intval($row['login_contact_id']);
+ $login_vendor_id = intval($row['login_vendor_id']);
+ $login_asset_id = intval($row['login_asset_id']);
+ $login_software_id = intval($row['login_software_id']);
+
+ // Tags
+ $login_tag_name_display_array = array();
+ $login_tag_id_array = array();
+ $sql_login_tags = mysqli_query($mysqli, "SELECT * FROM login_tags LEFT JOIN tags ON login_tags.tag_id = tags.tag_id WHERE login_id = $login_id ORDER BY tag_name ASC");
+ while ($row = mysqli_fetch_array($sql_login_tags)) {
+
+ $login_tag_id = intval($row['tag_id']);
+ $login_tag_name = nullable_htmlentities($row['tag_name']);
+ $login_tag_color = nullable_htmlentities($row['tag_color']);
+ if (empty($login_tag_color)) {
+ $login_tag_color = "dark";
+ }
+ $login_tag_icon = nullable_htmlentities($row['tag_icon']);
+ if (empty($login_tag_icon)) {
+ $login_tag_icon = "tag";
+ }
+
+ $login_tag_id_array[] = $login_tag_id;
+ $login_tag_name_display_array[] = "$login_tag_name";
+ }
+ $login_tags_display = implode('', $login_tag_name_display_array);
+
+ ?>
+
+ |
+
+
+ |
+ |
+
+
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Number |
+ Subject |
+ Priority |
+ Status |
+ Assigned |
+ Last Response |
+
+
+
+ Never";
+ } else {
+ $ticket_updated_at_display = "Never
";
+ }
+ } else {
+ $ticket_updated_at_display = $ticket_updated_at;
+ }
+ $ticket_closed_at = nullable_htmlentities($row['ticket_closed_at']);
+
+ 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_assigned_to = intval($row['ticket_assigned_to']);
+ if (empty($ticket_assigned_to)) {
+ if ($ticket_status == 5) {
+ $ticket_assigned_to_display = "Not Assigned
";
+ } else {
+ $ticket_assigned_to_display = "Not Assigned
";
+ }
+ } else {
+ $ticket_assigned_to_display = nullable_htmlentities($row['user_name']);
+ }
+
+ ?>
+
+
+ |
+
+
+
+ |
+ |
+ |
+
+
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Subject |
+ Priority |
+ Frequency |
+ Next Run |
+
+
+
+
+
+
+ |
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Software |
+ Type |
+ Key |
+ Seats |
+
+
+
+
+
+ | $software_version"; ?> |
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Document Title |
+ By |
+ Created |
+ Updated |
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0) {
-
+
|