diff --git a/AGENTS.md b/AGENTS.md index cff6c9d..a9c8fd7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -50,3 +50,6 @@ Wenn ein Skill genannt wird (z. B. `$skill-creator`) oder die Aufgabe exakt zu ## Einschränkungen - Sandbox ist lesend; bitte selbst `AGENTS.md` anlegen. - Jegliche Ausgaben/Antworten sollten den Developer-Guidelines folgen (kurz, teamorientiert, klare nächste Schritte). + +## Wichtig: +- Nutze UTF-8 wenn nicht anders angegeben \ No newline at end of file diff --git a/TODO.md b/TODO.md index fdbfaa5..e3d6d12 100644 --- a/TODO.md +++ b/TODO.md @@ -162,7 +162,7 @@ Hinweis: Die Eintraege sind direkt aus den Quelldateien aggregiert. ## app\modules\floor_infrastructure\list.php -- [ ] L143:
TODO: SVG-Editor mit Drag & Drop für diese Objekte erweitern (siehe Stockwerke-Modul).
+- [ ] L143://TODO: SVG-Editor mit Drag & Drop für diese Objekte erweitern (siehe Stockwerke-Modul).
## app\modules\floors\list.php @@ -176,7 +176,6 @@ Hinweis: Die Eintraege sind direkt aus den Quelldateien aggregiert. - [ ] L134: //TODO design schlecht, mach es hübscher - [ ] L208: //TODO style in css file -- [ ] L406: // TODO: AJAX-Delete implementieren ## app\modules\racks\edit.php @@ -234,4 +233,4 @@ Hinweis: Die Eintraege sind direkt aus den Quelldateien aggregiert. - [ ] L241: ### TODO: Patchpanel-Infrastruktur - [ ] L253: - TODO: SVG-Editor um Drag & Drop für diese Objekte erweitern und Klicks direkt mit dem Modul verbinden. -- [ ] //TODO infrastruktur patchfelder löschen soll implementiert werden. \ No newline at end of file +- [ ] //TODO infrastruktur patchfelder löschen soll implementiert werden. diff --git a/app/index.php b/app/index.php index 9ac3a36..a76aab9 100644 --- a/app/index.php +++ b/app/index.php @@ -34,8 +34,7 @@ $validActions = ['list', 'edit', 'save', 'ports', 'delete']; // Prüfen auf gültige Werte if (!in_array($module, $validModules)) { - // TODO: Fehlerseite anzeigen, nutze renderClientError(...) - die('Ungültiges Modul'); + renderClientError(400, 'Ungültiges Modul'); } if (!in_array($action, $validActions)) { diff --git a/app/modules/connections/list.php b/app/modules/connections/list.php index 2f84393..5c24022 100644 --- a/app/modules/connections/list.php +++ b/app/modules/connections/list.php @@ -68,6 +68,66 @@ $connections = $sql->get( // ========================= $devices = $sql->get("SELECT id, name FROM devices ORDER BY name", "", []); +$selectedDevice = null; +$selectedDevicePorts = []; +$selectedDeviceVlans = []; + +if ($deviceId > 0) { + $selectedDevice = $sql->single( + "SELECT d.id, d.name, dt.name AS type_name + FROM devices d + LEFT JOIN device_types dt ON d.device_type_id = dt.id + WHERE d.id = ?", + "i", + [$deviceId] + ); + + if ($selectedDevice) { + $selectedDevice['port_count'] = (int)($sql->single( + "SELECT COUNT(*) AS cnt FROM device_ports WHERE device_id = ?", + "i", + [$deviceId] + )['cnt'] ?? 0); + + $selectedDevice['connection_count'] = (int)($sql->single( + "SELECT COUNT(DISTINCT c.id) AS cnt + FROM connections c + LEFT JOIN device_ports dpt1 ON c.port_a_type = 'device' AND c.port_a_id = dpt1.id + LEFT JOIN device_ports dpt2 ON c.port_b_type = 'device' AND c.port_b_id = dpt2.id + WHERE dpt1.device_id = ? OR dpt2.device_id = ?", + "ii", + [$deviceId, $deviceId] + )['cnt'] ?? 0); + + $selectedDevicePorts = $sql->get( + "SELECT name, vlan_config + FROM device_ports + WHERE device_id = ? + ORDER BY id + LIMIT 12", + "i", + [$deviceId] + ); + + foreach ($selectedDevicePorts as $port) { + if (empty($port['vlan_config'])) { + continue; + } + + $vlans = json_decode($port['vlan_config'], true); + foreach ((array)$vlans as $vlan) { + $vlan = trim((string)$vlan); + if ($vlan !== '') { + $selectedDeviceVlans[$vlan] = true; + } + } + } + + $selectedDeviceVlans = array_keys($selectedDeviceVlans); + natcasesort($selectedDeviceVlans); + } +} + ?>> + Position, Groesse und Stockwerkskarte werden erst angezeigt, sobald ein Stockwerk ausgewaehlt ist. +
+Die eingetragenen Patchpanels und Wandbuchsen erscheinen später als feste Objekte auf dem Stockwerks-SVG. Die Polygon-Positionen werden momentan noch durch numerische X/Y-Werte gesteuert.
-TODO: SVG-Editor mit Drag & Drop für diese Objekte erweitern (siehe Stockwerke-Modul).
+ +Kein Stockwerk fuer die Planansicht verfuegbar.
+ +Das gewaehlte Stockwerk hat noch keinen SVG-Plan hinterlegt.
+ +Drag & Drop ist aktiv fuer . Aenderungen werden direkt gespeichert.
+Patchpanels: blau, Wandbuchsen: gruen. Ziehen und loslassen zum Speichern.
+