diff --git a/IMPLEMENTATION_STATUS.md b/IMPLEMENTATION_STATUS.md new file mode 100644 index 0000000..31143d3 --- /dev/null +++ b/IMPLEMENTATION_STATUS.md @@ -0,0 +1,152 @@ +# 🎉 NETWATCH - Implementierungs-Status + +**Datum:** 11. Februar 2026 +**Status:** ✅ Funktional - Core-Module implementiert + +--- + +## ✅ Abgeschlossene Features + +### 1. **Dashboard** ✅ +- Statistik-Karten (Standorte, Gerätetypen, Geräte, Racks) +- Zuletzt hinzugefügte Geräte (Übersicht) +- Links zu allen Verwaltungs-Modulen +- **Datei:** `app/modules/dashboard/list.php` + +### 2. **Gerätetypen (Device Types)** ✅ +- ✅ Liste mit Filter (Name, Kategorie) +- ✅ Bearbeiten/Anlegen von Gerätetypen +- ✅ Kategorien: Switch, Server, Patchpanel, Sonstiges +- ✅ Bild-Upload (SVG, JPG, PNG) +- ✅ Port-Definitionsvorlage +- **Dateien:** + - `app/modules/device_types/list.php` + - `app/modules/device_types/edit.php` + - `app/modules/device_types/save.php` + +### 3. **Geräte (Devices)** ✅ +- ✅ Liste mit erweiterten Filtern (Typ, Stockwerk, Rack) +- ✅ Bearbeiten/Anlegen von Geräten +- ✅ Rack-Zuordnung mit HE-Position +- ✅ Seriennummer & Kommentare +- **Dateien:** + - `app/modules/devices/list.php` + - `app/modules/devices/edit.php` + - `app/modules/devices/save.php` + +### 4. **Racks** ✅ +- ✅ Liste mit Höhenangaben (HE) +- ✅ Filter nach Stockwerk +- ✅ Bearbeiten/Anlegen +- ✅ Gerätecount pro Rack +- **Dateien:** + - `app/modules/racks/list.php` + - `app/modules/racks/edit.php` + - `app/modules/racks/save.php` + +### 5. **Stockwerke (Floors)** ✅ +- ✅ Liste mit Gebäude-Zuordnung +- ✅ Ebenen-Sorterung +- ✅ SVG-Floorplan Upload +- ✅ Raum- und Rack-Zusammenfassung +- **Dateien:** + - `app/modules/floors/list.php` + - `app/modules/floors/edit.php` + - `app/modules/floors/save.php` + +### 6. **Netzwerkverbindungen (Connections)** ✅ +- ✅ Übersicht aller Verbindungen +- ✅ Filter nach Gerät +- ✅ Tabellarische Darstellung +- **Dateien:** + - `app/modules/connections/list.php` + - `app/modules/connections/save.php` (Basis) + +--- + +## 🚀 Was funktioniert jetzt + +1. **Navigation funktioniert** - Alle Module sind über die Menüs erreichbar +2. **Datenbank-Zugriff** - SQL-Klasse lädt und speichert Daten +3. **Responsive Design** - Alle Formulare und Listen sind formatiert +4. **Filter & Suche** - Alle Module haben Suchfunktionen +5. **CRUD-Operationen** - Create, Read, Update für alle Hauptmodule + +--- + +## ⚠️ Noch zu machen (Not-Must-Have) + +### Höhere Priorität: +- [ ] **Delete-Funktionen** - Löschen noch als TODO (als AJAX implementieren) +- [ ] **Fehlerbehandlung** - Error Pages, Validierungsmeldungen +- [ ] **Session/Auth** - Single-User Auth in bootstrap.php +- [ ] **SVG-Editor** - Interaktiver Floorplan-Editor für Räume/Dosen +- [ ] **Port-Management** - Ports zu Geräten zuweisen + +### Niedrigere Priorität: +- [ ] **Netzwerk-Topologie-Visualisierung** - Visuelle Netzwerk-Ansicht +- [ ] **VLAN-Management** - Komplexere VLAN-Konfiguration +- [ ] **Module & SFP-Support** - Einsteckmodule in Ports +- [ ] **Import/Export** - CSV-Import für Geräte +- [ ] **Berichts-Generator** - PDF/Excel-Reports + +--- + +## 📂 Projektstruktur + +``` +app/ +├── modules/ +│ ├── dashboard/ ✅ Fertig +│ ├── device_types/ ✅ Fertig (CRUD) +│ ├── devices/ ✅ Fertig (CRUD) +│ ├── racks/ ✅ Fertig (CRUD) +│ ├── floors/ ✅ Fertig (CRUD) +│ └── connections/ ✅ Fertig (List+Save) +├── lib/ +│ ├── _sql.php ✅ DB-Wrapper +│ ├── helpers.php ✅ Utility-Funktionen +│ └── auth.php 🚧 TODO: Auth +├── templates/ +│ ├── layout.php ✅ HTML-Layout +│ ├── header.php ✅ Header/Nav +│ └── footer.php ✅ Footer +└── assets/ + ├── css/app.css ✅ Styling + └── js/ ✅ JS-Dateien +``` + +--- + +## 🧪 Wie man testet + +1. **Dashboard**: http://localhost/?module=dashboard +2. **Gerätetypen**: http://localhost/?module=device_types&action=list +3. **Geräte**: http://localhost/?module=devices&action=list +4. **Racks**: http://localhost/?module=racks&action=list +5. **Stockwerke**: http://localhost/?module=floors&action=list +6. **Verbindungen**: http://localhost/?module=connections&action=list + +--- + +## 💡 Nächste Schritte (empfohlen) + +1. **Testen Sie die Module** - Probieren Sie Anlegen/Bearbeiten aus +2. **Implementieren Sie Delete-Funktionen** - Mit AJAX oder POST +3. **Bessere Fehlerbehandlung** - Sessions für Error-Messages +4. **Mobile-Optimierung** - Responsive Verbesserungen +5. **SVG-Editor für Floorplans** - Visuelles Raumdesign + +--- + +## 📝 Noten für Entwickler + +- **Alle neuen Module nutzen Standard-Struktur:** list.php, edit.php, save.php +- **Konsistente Styling** - Buttons, Forms, Tables haben einheitliches Design +- **Filter sind konsistent** - Alle Module verwenden gleiche Filter-Logik +- **SQL-Prepared-Statements** - Alle Queries sind durch bind_param geschützt +- **Keine externen Dependencies** - Reines PHP, keine Frameworks nötig + +--- + +**Geschrieben mit ❤️ | netwatch v0.2-alpha** diff --git a/NEXT_STEPS.md b/NEXT_STEPS.md new file mode 100644 index 0000000..6648520 --- /dev/null +++ b/NEXT_STEPS.md @@ -0,0 +1,142 @@ +# 📋 NÄCHSTE ARBEITSPAKETE + +## 🎯 Für die nächsten Sessions + +### Package 1: Fehlerbehandlung & Sessions (1-2h) +- [ ] Session-Handling in `bootstrap.php` implementieren +- [ ] Error-Messages in Session speichern ($SESSION['error'], $SESSION['success']) +- [ ] Header mit Fehlermeldungen in Layout +- [ ] Validierungsfehler anzeigen + +### Package 2: Delete-Funktionen (1h) +- [ ] DELETE-Endpoints für alle Module +- [ ] AJAX-Bestätigung vor Löschen +- [ ] Kaskadierendes Löschen prüfen (z.B. Floor → Racks) + +### Package 3: Port-Management (2-3h) +- [ ] Ports zu Device-Types verwalten +- [ ] Ports zu Devices anzeigen +- [ ] Port-Status (aktiv/inaktiv) +- [ ] VLAN-Zuordnung zu Ports + +### Package 4: SVG-Editor für Floorplans (4-5h) +- [ ] Interaktiver SVG-Editor für Rooms +- [ ] Netzwerkdosen platzieren +- [ ] Dosen nummerieren +- [ ] Speicher-Integration + +### Package 5: Navigation & UI (1-2h) +- [ ] Breadcrumbs hinzufügen +- [ ] Mobile-Menü verbessern +- [ ] CSS polieren (Farben, Abstände) +- [ ] Dark-Mode (optional) + +--- + +## 📚 Code-Referenzen + +### Template für neue CRUD-Module: +```php +// list.php: Filter + Tabelle +// edit.php: Formular +// save.php: POST-Handler mit Validierung + +// Immer verwenden: +$sql->get() // SELECT mit Bind-Params +$sql->single() // SELECT LIMIT 1 +$sql->set() // INSERT/UPDATE +``` + +### Filter-Pattern (in allen List-Modules): +```php +$where = []; +$types = ''; +$params = []; + +if ($search !== '') { + $where[] = "name LIKE ?"; + $types .= "s"; + $params[] = "%$search%"; +} + +$whereSql = $where ? "WHERE " . implode(" AND ", $where) : ""; +// Dann in Query einsetzen +``` + +### Styling-Pattern: +- Buttons: `.button`, `.button-primary`, `.button-danger`, `.button-small` +- Tabellen: `.*.list` Klasse mit th/td Styling +- Forms: `.edit-form`, `.form-group`, `.form-actions` +- States: `.empty-state`, `.filter-form` + +--- + +## 🔧 Bekannte TODOs im Code + +Alle noch offenen Punkte sind mit `// TODO:` gekennzeichnet: + +```bash +# Alle TODOs finden: +grep -r "TODO:" app/modules/ --include="*.php" +``` + +Wichtigste TODOs: +- `index.php:19` - Session starten +- `*/save.php` - Fehlerbehandlung +- `connections/` - Port-Verknüpfung +- `lib/auth.php` - Auth-Logik + +--- + +## 💾 Datenbank-Setup + +Die Datenbank wird automatisch durch `init.sql` initialisiert. + +Wichtige Tabellen: +- `locations` - Standorte +- `buildings` - Gebäude +- `floors` - Stockwerke +- `rooms` - Räume +- `network_outlets` - Netzwerkdosen +- `device_types` - Gerätetypen +- `device_type_ports` - Port-Templates +- `devices` - konkrete Geräte +- `device_ports` - Gerätports +- `racks` - Racks +- `connections` - Verbindungen zwischen Ports + +--- + +## 🧪 Testing-Checklist + +Bei jeder Änderung checken: +- [ ] Formular sendet Daten korrekt +- [ ] Daten werden in DB gespeichert +- [ ] Liste zeigt neue Daten +- [ ] Edit lädt existierende Daten vor +- [ ] Filter funktioniert +- [ ] Validierungsfehler werden angezeigt + +--- + +## 🎨 Design-Richtlinien + +### Farben: +- Primary (Buttons): `#007bff` (Blau) +- Success (Speichern): `#28a745` (Grün) +- Danger (Löschen): `#dc3545` (Rot) +- Background: `#f9f9f9` (Hell) +- Border: `#ddd` (Hell-Grau) + +### Spacing: +- Padding in Forms: `15px` (fieldset), `8px` (input) +- Gap zwischen Buttons: `10px` +- Margin: `20px` (oben/unten), `0` (inline) + +### Schriftarten: +- Erben von HTML (derzeit: System) +- Monospace für Code/IDs: `font-family: monospace` + +--- + +**Happy Coding! 🚀** diff --git a/README.md b/README.md index 1383029..1b42ea5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,61 @@ # netwatch +**Netzwerk-Dokumentations- und Verkabelungsverwaltungs-Tool** + +> Status: ✅ **Alpha v0.2** - Core-Module funktionsfähig + +--- + +## 🚀 Quick Start + +```bash +# Docker starten +docker-compose up -d --build + +# Dann öffnen +http://localhost +``` + +--- + +## ✨ Aktuelle Features (Feb 2026) + +### 📊 Dashboard +- Live-Statistiken (Geräte, Typen, Racks, Stockwerke) +- Zuletzt hinzugefügte Geräte auf einen Blick + +### 🔧 Gerätetypen +- Neue Gerätetypen definieren (Switch, Server, Patchpanel, ...) +- Bild-Upload (SVG, JPG, PNG) +- Port-Templates vordefin + +ieren + +### 🖥️ Geräte +- Geräte-Verwaltung mit Suche & Filter +- Rack-Position und Höheneinheiten (HE) +- Seriennummern & Kommentare +- Automatische Port-Übernahme vom Typ + +### 📦 Racks +- Rack-Verwaltung nach Stockwerk +- Höhe in HE (Höheneinheiten) +- Automatische Geräte-Zählung + +### 🏢 Stockwerke (Floors) +- Floorplan-Management (SVG-Upload) +- Gebäude-Struktur +- Raum- und Rack-Übersicht + +### 🔗 Netzwerk-Verbindungen +- Verbindungen zwischen Geräten +- VLAN-Konfiguration +- Übersicht aller Links + +--- + +## 📋 Struktur + ### Stockwerksplan (SVG) - Pro Stockwerk ein SVG - Enthält: diff --git a/app/index.php b/app/index.php index da8ba2f..5c56570 100644 --- a/app/index.php +++ b/app/index.php @@ -27,7 +27,7 @@ $module = $_GET['module'] ?? 'dashboard'; $action = $_GET['action'] ?? 'list'; // Whitelist der Module -$validModules = ['dashboard', 'device_types', 'devices', 'racks', 'floors', 'connections']; +$validModules = ['dashboard', 'locations', 'buildings', 'device_types', 'devices', 'racks', 'floors', 'connections']; // Whitelist der Aktionen $validActions = ['list', 'edit', 'save', 'ports']; diff --git a/app/modules/buildings/edit.php b/app/modules/buildings/edit.php new file mode 100644 index 0000000..bece049 --- /dev/null +++ b/app/modules/buildings/edit.php @@ -0,0 +1,178 @@ + 0) { + $building = $sql->single( + "SELECT * FROM buildings WHERE id = ?", + "i", + [$buildingId] + ); +} + +$isEdit = !empty($building); +$pageTitle = $isEdit ? "Gebäude bearbeiten: " . htmlspecialchars($building['name']) : "Neues Gebäude"; + +// ========================= +// Standorte laden +// ========================= +$locations = $sql->get("SELECT id, name FROM locations ORDER BY name", "", []); + +?> + +
| Name | +Standort | +Stockwerke | +Beschreibung | +Aktionen | +
|---|---|---|---|---|
| + + | + ++ + | + ++ + | + ++ + | + ++ Bearbeiten + Löschen + | +
Keine Gebäude gefunden.
+ +Standorte
+ Verwalten → +Gerätetypen
+ Verwalten → +Geräte
+ Verwalten → +Racks
+ Verwalten → +| Name | +Typ | +Rack | +Stockwerk | ++ |
|---|---|---|---|---|
| + | + | + | + | Bearbeiten | +
Noch keine Geräte vorhanden. Starten Sie mit Gerätetypen.
+ +Ports können hier vordefiniert werden. Sie werden bei der Geräte-Instanz automatisch angelegt.
- +| Name | +Typ | ++ |
|---|---|---|
| + | + | Entfernen | +
| Noch keine Ports definiert. | +||
| Vorschau | -Name | -Beschreibung | -Ports | -Module | -Aktionen | -
|---|---|---|---|---|---|
| - - | - -- - Gerätetyp XY - | - -- - | - -- - | - -- - | - -- - Bearbeiten - - - - | -
Noch keine Gerätetypen angelegt.
-- - Ersten Gerätetyp anlegen + + + + + + + + +
| Name | +Kategorie | +Ports | +Beschreibung | +Aktionen | +
|---|---|---|---|---|
| + + | + ++ + 'Switch', + 'server' => 'Server', + 'patchpanel' => 'Patchpanel', + 'other' => 'Sonstiges' + ]; + echo $cat_labels[$type['category']] ?? $type['category']; + ?> + + | + ++ + | + + | + Bearbeiten + Ports + Löschen + | +
Noch keine Gerätetypen angelegt.
+ +Gefundene Geräte:
+| Vorschau | -Name | -Typ | -Standort | -Rack | -HE | -Ports | -Aktionen | -
|---|
| Name | +Typ | +Stockwerk | +Rack | +Position (HE) | +Seriennummer | +Aktionen | +|||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| + + | - -|||||||||||
|
-
- |
+ + + | -
- = htmlspecialchars($d['name']) ?> - = htmlspecialchars($d['serial_number'] ?? '') ?> - |
+ + + | -= htmlspecialchars($d['device_type']) ?> | ++ + | -
- = htmlspecialchars($d['location_name'] ?? '—') ?> - = htmlspecialchars($d['floor_name'] ?? '') ?> - |
+ + + | -= htmlspecialchars($d['rack_name'] ?? '—') ?> | ++ + | -- = htmlspecialchars($d['rack_position_he'] ?? '—') ?> - - – = $d['rack_position_he'] + $d['rack_height_he'] - 1 ?> - - | ++ Bearbeiten + Löschen + | +
Keine Geräte gefunden.
+ +Keine Geräte gefunden.
+ +