get( "SELECT id, name, svg_path FROM floors ORDER BY name", "", [] ); $where = ''; $types = ''; $params = []; if ($floorId > 0) { $where = "WHERE p.floor_id = ?"; $types = 'i'; $params[] = $floorId; } $patchPanels = $sql->get( "SELECT p.*, f.name AS floor_name FROM floor_patchpanels p LEFT JOIN floors f ON f.id = p.floor_id $where ORDER BY f.name, p.name", $types, $params ); $networkOutlets = $sql->get( "SELECT o.id, o.room_id, o.name, o.x, o.y, o.comment, r.name AS room_name, r.number AS room_number, f.name AS floor_name, f.id AS floor_id, GROUP_CONCAT(nop.name ORDER BY nop.name SEPARATOR ', ') AS port_names FROM network_outlets o LEFT JOIN rooms r ON r.id = o.room_id LEFT JOIN floors f ON f.id = r.floor_id LEFT JOIN network_outlet_ports nop ON nop.outlet_id = o.id GROUP BY o.id ORDER BY f.name, r.name, o.name", "", [] ); $floorMap = []; foreach ($floors as $floor) { $id = (int)$floor['id']; $svgPath = trim((string)($floor['svg_path'] ?? '')); $floorMap[$id] = [ 'id' => $id, 'name' => (string)($floor['name'] ?? ''), 'svg_url' => $svgPath !== '' ? '/' . ltrim($svgPath, '/\\') : '' ]; } $editorFloor = ($floorId > 0 && isset($floorMap[$floorId])) ? $floorMap[$floorId] : null; $editorPatchPanels = []; $editorOutlets = []; $editorRooms = []; $editorLinks = []; if ($editorFloor) { foreach ($patchPanels as $panel) { if ((int)$panel['floor_id'] !== $floorId) { continue; } $editorPatchPanels[] = [ 'id' => (int)$panel['id'], 'name' => (string)$panel['name'], 'x' => (int)$panel['pos_x'], 'y' => (int)$panel['pos_y'], 'width' => max(1, (int)$panel['width']), 'height' => max(1, (int)$panel['height']), 'port_count' => (int)$panel['port_count'], 'comment' => (string)($panel['comment'] ?? '') ]; } foreach ($networkOutlets as $outlet) { if ((int)$outlet['floor_id'] !== $floorId) { continue; } $editorOutlets[] = [ 'id' => (int)$outlet['id'], 'name' => (string)$outlet['name'], 'x' => (int)$outlet['x'], 'y' => (int)$outlet['y'], 'room_name' => (string)($outlet['room_name'] ?? ''), 'room_number' => (string)($outlet['room_number'] ?? ''), 'port_names' => (string)($outlet['port_names'] ?? ''), 'comment' => (string)($outlet['comment'] ?? '') ]; } foreach ($sql->get( "SELECT id, name, number, x, y, width, height, polygon_points FROM rooms WHERE floor_id = ? ORDER BY name", "i", [$floorId] ) as $room) { $editorRooms[] = [ 'id' => (int)($room['id'] ?? 0), 'name' => (string)($room['name'] ?? ''), 'number' => (string)($room['number'] ?? ''), 'x' => (int)($room['x'] ?? 0), 'y' => (int)($room['y'] ?? 0), 'width' => (int)($room['width'] ?? 0), 'height' => (int)($room['height'] ?? 0), 'polygon_points' => (string)($room['polygon_points'] ?? ''), ]; } $outletIdByPort = []; foreach ($sql->get( "SELECT nop.id AS port_id, nop.outlet_id FROM network_outlet_ports nop JOIN network_outlets o ON o.id = nop.outlet_id JOIN rooms r ON r.id = o.room_id WHERE r.floor_id = ?", "i", [$floorId] ) as $row) { $portId = (int)($row['port_id'] ?? 0); $outletId = (int)($row['outlet_id'] ?? 0); if ($portId > 0 && $outletId > 0) { $outletIdByPort[$portId] = $outletId; } } $patchPanelIdByPort = []; foreach ($sql->get( "SELECT fpp.id AS port_id, fpp.patchpanel_id FROM floor_patchpanel_ports fpp JOIN floor_patchpanels fp ON fp.id = fpp.patchpanel_id WHERE fp.floor_id = ?", "i", [$floorId] ) as $row) { $portId = (int)($row['port_id'] ?? 0); $patchPanelId = (int)($row['patchpanel_id'] ?? 0); if ($portId > 0 && $patchPanelId > 0) { $patchPanelIdByPort[$portId] = $patchPanelId; } } $resolveNodeKey = static function (string $endpointType, int $endpointId) use ($outletIdByPort, $patchPanelIdByPort): ?string { if ($endpointId <= 0) { return null; } $type = strtolower(trim($endpointType)); if ($type === 'outlet' || $type === 'network_outlet_ports') { $outletId = (int)($outletIdByPort[$endpointId] ?? 0); return $outletId > 0 ? ('outlet:' . $outletId) : null; } if ($type === 'patchpanel' || $type === 'floor_patchpanel_ports') { $patchPanelId = (int)($patchPanelIdByPort[$endpointId] ?? 0); return $patchPanelId > 0 ? ('patchpanel:' . $patchPanelId) : null; } return null; }; $linksByKey = []; foreach ($sql->get( "SELECT id, port_a_type, port_a_id, port_b_type, port_b_id FROM connections", "", [] ) as $row) { $fromKey = $resolveNodeKey((string)($row['port_a_type'] ?? ''), (int)($row['port_a_id'] ?? 0)); $toKey = $resolveNodeKey((string)($row['port_b_type'] ?? ''), (int)($row['port_b_id'] ?? 0)); if ($fromKey === null || $toKey === null || $fromKey === $toKey) { continue; } $edgeKey = ($fromKey < $toKey) ? ($fromKey . '|' . $toKey) : ($toKey . '|' . $fromKey); if (!isset($linksByKey[$edgeKey])) { $linksByKey[$edgeKey] = [ 'from_key' => $fromKey, 'to_key' => $toKey, 'count' => 0, 'sample_connection_id' => (int)($row['id'] ?? 0) ]; } $linksByKey[$edgeKey]['count']++; } $editorLinks = array_values($linksByKey); } ?>

Stockwerksinfrastruktur

+ Patchpanel hinzufügen + Wandbuchse hinzufügen
Zurücksetzen

Stockwerkskarte

Bitte ein Stockwerk auswählen, um die Karte anzuzeigen.

Gewähltes Stockwerk wurde nicht gefunden.

Das gewählte Stockwerk hat keinen SVG-Plan hinterlegt.

Read-only Vorschau für . Alle Objekte werden angezeigt; Hover zeigt Details.

Stockwerksplan

Blau: Patchpanel | Grün: Wandbuchse. Knoten sind greifbar und verschiebbar. Räume und Kabel lassen sich ein-/ausblenden.

Patchpanels

Name Stockwerk Position Größe Ports Aktionen
Bearbeiten

Noch keine Patchpanels definiert.

Wandbuchsen

Name Stockwerk Raum Koordinaten Ports Kommentar Aktionen
Bearbeiten

Noch keine Wandbuchsen angelegt.