0 LEFT JOIN vendors ON vendor_id = network_vendor_id AND network_vendor_id > 0"; // The views and the type $shows = [ '' => ['label' => 'Active', 'icon' => 'fa-network-wired', 'where' => 'network_archived_at IS NULL'], 'starred' => ['label' => 'Starred', 'icon' => 'fa-star', 'where' => 'network_archived_at IS NULL AND network_favorite = 1'], 'archived' => ['label' => 'Archived', 'icon' => 'fa-archive', 'where' => 'network_archived_at IS NOT NULL'], ]; $show = isset($shows[$_GET['show'] ?? '']) ? ($_GET['show'] ?? '') : ''; $type_filter = isset(NETWORK_TYPES[$_GET['type'] ?? '']) ? $_GET['type'] : ''; $view_query = 'AND ' . $shows[$show]['where'] . ($type_filter ? " AND network_type = '$type_filter'" : ''); // Only these sort - an unknown column would take the page down $sortable_columns = [ 'network_name' => "network_name $order", 'client_name' => "client_name $order, network_name ASC", 'network' => "INET6_ATON(SUBSTRING_INDEX(network, '/', 1)) $order, network_name ASC", 'network_vlan' => "network_vlan IS NULL, network_vlan $order, network_name ASC", 'network_type' => "FIELD(network_type, '" . implode("', '", array_keys(NETWORK_TYPES)) . "') $order, network_name ASC", 'location_name' => "location_name IS NULL, location_name $order, network_name ASC", ]; if (!isset($sortable_columns[$sort])) { $sort = 'network_name'; } $sql = mysqli_query($mysqli, "SELECT SQL_CALC_FOUND_ROWS networks.*, client_name, location_name, vendor_name FROM networks $joins WHERE $filters $view_query ORDER BY network_favorite DESC, {$sortable_columns[$sort]}, network_id DESC LIMIT $record_from, $record_to"); $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); $networks = []; while ($row = mysqli_fetch_assoc($sql)) { $networks[intval($row['network_id'])] = $row; } $addresses = networkAddresses(array_keys($networks)); $networks_tags = tagsForRecords('network', array_keys($networks)); $usage = networkUsage($networks, $addresses); $problems = []; foreach ($networks as $network_id => $row) { $problems[$network_id] = networkAddressPlan($row, $addresses)['problems']; } // How many of each, for the pills - the views over what the filters leave, the types within the view $view_counts = []; $row = mysqli_fetch_row(mysqli_query($mysqli, "SELECT " . implode(', ', array_map(function ($s) { return "COALESCE(SUM({$s['where']}), 0)"; }, $shows)) . " FROM networks $joins WHERE $filters")); foreach (array_keys($shows) as $i => $key) { $view_counts[$key] = intval($row[$i]); } $type_counts = []; $sql_types = mysqli_query($mysqli, "SELECT network_type, COUNT(*) FROM networks $joins WHERE $filters AND {$shows[$show]['where']} GROUP BY network_type"); while ($row = mysqli_fetch_row($sql_types)) { $key = isset(NETWORK_TYPES[$row[0]]) ? $row[0] : 'Other'; $type_counts[$key] = ($type_counts[$key] ?? 0) + intval($row[1]); } $filter_url = function ($changes) { $params = array_merge($_GET, $changes); unset($params['page']); return '?' . http_build_query(array_filter($params, function ($v) { return $v !== '' && $v !== null; })); }; $sort_link = function ($column, $label) use ($url_query_strings_sort, $sort, $disp, $order_icon) { return '' . $label . ($sort === $column ? " $order_icon" : '') . ''; }; $csrf = $_SESSION['csrf_token']; ?>

Networks

text-nowrap table-light"> $row) { $row_client_id = intval($row['network_client_id']); $type = networkType($row); $info = networkSubnetInfo($row['network']); $is_archived = !empty($row['network_archived_at']); $is_favorite = intval($row['network_favorite']) === 1; $row_problems = $problems[$network_id]; $url = escapeHtml(networkUrl($network_id, $row_client_id)); $name = escapeHtml($row['network_name']); $dns = array_filter([$row['network_primary_dns'], $row['network_secondary_dns']]); $u = $usage[$network_id]; ?>
Gateway, DNS & DHCP In use
Archived
VLAN
Not a subnet' ?>
-
'networks', 'icon' => 'fa-network-wired', 'filtered' => $q !== '' || $type_filter || $client_filter || $location_filter, 'archived' => $show === 'archived', 'views' => ['show'], 'view' => emptyStatePill($shows, $show), 'match_title' => $q_ip !== false ? 'No network has ' . escapeHtml($q_ip) . ' in it' : null, 'text' => 'Start with the office LAN, the guest wireless and the internet connection.', 'actions' => $can_edit ? array_merge( [['label' => 'New Network', 'modal' => "modals/network/network_add.php?{$client_url}location_id=$location_filter&type=$type_filter", 'size' => 'lg']], $client_url ? [['label' => 'Import', 'modal' => "modals/network/network_import.php?$client_url", 'icon' => 'fa-upload']] : [] ) : [], ]; require_once "../includes/filter_footer.php"; ?>