'That asset no longer exists.']); exit; } $client_id = intval($asset_row['asset_client_id']); enforceClientAccess(); $can_edit = lookupUserPermission('module_support') >= 2; $can_credentials = lookupUserPermission('module_credential') >= 1; $asset_name = escapeHtml($asset_row['asset_name']); $asset_type = escapeHtml($asset_row['asset_type']); $asset_description = escapeHtml($asset_row['asset_description']); $asset_make_model = escapeHtml(trim($asset_row['asset_make'] . ' ' . $asset_row['asset_model'])); $asset_os = escapeHtml($asset_row['asset_os']); $asset_os_icon = assetOsIcon($asset_row['asset_os']); $asset_serial = escapeHtml($asset_row['asset_serial']); $asset_ip = escapeHtml($asset_row['interface_ip']); $asset_mac = escapeHtml($asset_row['interface_mac']); $asset_links = assetLinks($asset_row['asset_uri'], $asset_row['asset_uri_2'], $asset_row['asset_uri_client']); $asset_warranty = assetWarranty($asset_row['asset_warranty_expire']); $asset_photo = escapeHtml($asset_row['asset_photo']); $asset_physical_location = escapeHtml($asset_row['asset_physical_location']); $asset_notes = escapeHtml($asset_row['asset_notes']); $asset_favorite = intval($asset_row['asset_favorite']); $asset_archived = !empty($asset_row['asset_archived_at']); $asset_contact_id = intval($asset_row['asset_contact_id']); $asset_tone = assetTypeTone($asset_row['asset_type']); $device_icon = getAssetIcon($asset_row['asset_type']); $asset_tags_display = tagPills('asset', $asset_id, tagsForRecord('asset', $asset_id), "assets.php?client_id=$client_id&"); // The rack it sits in, if any $asset_rack = rackPositionForAsset($asset_id); // Interfaces, primary first, and what each one is plugged into $sql_related_interfaces = mysqli_query($mysqli, " SELECT ai.interface_id, ai.interface_name, ai.interface_mac, ai.interface_ip, ai.interface_primary, 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 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_primary DESC, ai.interface_name ASC "); $interface_count = mysqli_num_rows($sql_related_interfaces); // Credentials - only for agents who may see them $related_credentials = $can_credentials ? credentialRows("credential_asset_id = $asset_id AND credential_client_id = $client_id") : []; $credential_count = count($related_credentials); // Tickets - open ones first; the most recent few here, the rest on the asset page $quick_ticket_limit = 8; [$ticket_count, $ticket_open_count] = ticketCounts(ticketAssetSql($asset_id)); $related_tickets = ticketRows(ticketAssetSql($asset_id), $quick_ticket_limit); // Recurring tickets $sql_related_recurring_tickets = mysqli_query($mysqli, "SELECT recurring_tickets.recurring_ticket_id, recurring_ticket_subject, recurring_ticket_frequency, recurring_ticket_next_run, recurring_ticket_paused_at FROM recurring_tickets LEFT JOIN recurring_ticket_assets ON recurring_tickets.recurring_ticket_id = recurring_ticket_assets.recurring_ticket_id WHERE recurring_ticket_asset_id = $asset_id OR recurring_ticket_assets.asset_id = $asset_id GROUP BY recurring_tickets.recurring_ticket_id ORDER BY recurring_ticket_next_run ASC" ); $recurring_ticket_count = mysqli_num_rows($sql_related_recurring_tickets); // Licenses it holds a seat on, with the key it was given $held_software = softwareHeldBy('asset', $asset_id); $software_count = count($held_software); // The services it runs - what goes down with it $asset_services = servicesFor('asset', $asset_id); $service_count = count($asset_services); // Documents $linked_documents = linkedRecords('asset', $asset_id, 'document'); $document_count = count($linked_documents); // Files $linked_files = linkedRecords('asset', $asset_id, 'file'); $file_count = count($linked_files); // Notes $sql_related_notes = mysqli_query($mysqli, "SELECT asset_note, asset_note_created_at, asset_note_type, user_name FROM asset_notes LEFT JOIN users ON asset_note_created_by = user_id WHERE asset_note_asset_id = $asset_id AND asset_note_archived_at IS NULL ORDER BY asset_note_created_at DESC" ); $note_count = mysqli_num_rows($sql_related_notes); $note_type_icons = []; $sql_note_type_icons = mysqli_query($mysqli, "SELECT category_name, category_icon FROM categories WHERE category_type = 'asset_note_type'"); while ($row = mysqli_fetch_assoc($sql_note_type_icons)) { $note_type_icons[$row['category_name']] = escapeHtml($row['category_icon']); } // Only the tabs with something in them - same order as the asset page $quick_tabs = array_filter([ 'interfaces' => ['label' => 'Interfaces', 'count' => $interface_count], 'credentials' => ['label' => 'Credentials', 'count' => $credential_count], 'tickets' => ['label' => 'Tickets', 'count' => $ticket_count, 'badge' => $ticket_open_count], 'recurring' => ['label' => 'Recurring', 'count' => $recurring_ticket_count], 'licenses' => ['label' => 'Licenses', 'count' => $software_count], 'services' => ['label' => 'Services', 'count' => $service_count], 'documents' => ['label' => 'Documents', 'count' => $document_count], 'files' => ['label' => 'Files', 'count' => $file_count], 'notes' => ['label' => 'Notes', 'count' => $note_count], ], function ($tab) { return $tab['count'] > 0; }); $first_tab = array_key_first($quick_tabs); // Its type's details (functions/asset_type.php) - and Assigned only on a type someone is given, or one that has someone $asset_spec_rows = assetSpecRows($asset_row['asset_type'], assetSpecs($asset_id), $client_id); $asset_has_contact = assetTypeHasField($asset_row['asset_type'], 'contact') || $asset_row['contact_name']; $has_left = $asset_ip || $asset_mac || $asset_serial || $asset_warranty || $asset_spec_rows; $has_right = $can_edit || $asset_row['location_name'] || $asset_row['contact_name'] || $asset_rack; ob_start(); ?>