From 7157c98dcbe9743f27eee8b33f8ba40d4d96c7e9 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 15 Apr 2026 02:41:09 +0200 Subject: [PATCH] adasd --- modules/kea/migrations/001_1.0.0_baseline.php | 26 +++ modules/kea/module.json | 1 + modules/kea/pages/edit.php | 40 +++- modules/kea/pages/index.php | 20 +- modules/kea/partials/dashboard.php | 28 ++- partials/landingpages/modules/index.php | 25 +++ partials/landingpages/modules/install.php | 24 +++ src/App/BaseSchema.php | 33 ++++ src/App/ModuleManager.php | 19 ++ src/App/ModuleMigrationContext.php | 18 ++ src/App/ModuleMigrationService.php | 172 ++++++++++++++++++ src/Repository/KeaHostMetadataRepository.php | 101 +++++++++- src/Repository/KeaHostRepository.php | 127 ++++++++++++- 13 files changed, 614 insertions(+), 20 deletions(-) create mode 100644 modules/kea/migrations/001_1.0.0_baseline.php create mode 100644 src/App/ModuleMigrationContext.php create mode 100644 src/App/ModuleMigrationService.php diff --git a/modules/kea/migrations/001_1.0.0_baseline.php b/modules/kea/migrations/001_1.0.0_baseline.php new file mode 100644 index 0000000..ec668a0 --- /dev/null +++ b/modules/kea/migrations/001_1.0.0_baseline.php @@ -0,0 +1,26 @@ +settings(); + $fallback = is_array($context->module['metadata_db_defaults'] ?? null) + ? $context->module['metadata_db_defaults'] + : []; + $config = is_array($settings['metadata_db'] ?? null) + ? array_replace($fallback, $settings['metadata_db']) + : $fallback; + + if (empty($config['driver']) || empty($config['dbname'])) { + return; + } + + $repo = new KeaHostMetadataRepository(Database::createFromArray($config)); + $repo->ensureSchema(); + } +}; diff --git a/modules/kea/module.json b/modules/kea/module.json index 31cf00e..f135b43 100644 --- a/modules/kea/module.json +++ b/modules/kea/module.json @@ -1,6 +1,7 @@ { "title": "KEA DHCP", "version": "1.0.0", + "schema_version": 1, "description": "Verwaltung von KEA DHCP Hosts und Reservierungen.", "menu": [ { "label": "Hosts", "href": "/module/kea" }, diff --git a/modules/kea/pages/edit.php b/modules/kea/pages/edit.php index 3dc3192..bb302a4 100644 --- a/modules/kea/pages/edit.php +++ b/modules/kea/pages/edit.php @@ -18,6 +18,7 @@ $error = null; $notice = null; $host = null; $metadataRepo = null; +$groups = []; try { $pdo = modules()->modulePdo('kea', $fallback); @@ -27,6 +28,7 @@ try { $metadataRepo = new KeaHostMetadataRepository(Database::createFromArray($metadataConfig)); $metadataRepo->ensureSchema(); + $groups = $metadataRepo->listGroups(); $repo = new KeaHostRepository($pdo, $metadataRepo); $host = $repo->findDisplayByKey($source, $id); if (!$host) { @@ -40,16 +42,26 @@ try { 'owner' => $_POST['owner'] ?? '', 'location' => $_POST['location'] ?? '', 'device_type' => $_POST['device_type'] ?? '', + 'group_name' => $_POST['group_name'] ?? '', + 'desired_ip' => $_POST['desired_ip'] ?? '', 'notes' => $_POST['notes'] ?? '', 'tags' => [], ]; - $metadataRepo->saveForHost( - $id, - (string)($host['dhcp_identifier'] ?? ''), - (string)($host['ipv4_address'] ?? ''), - $metadata - ); - $notice = 'Zusatzdaten gespeichert.'; + $desiredIp = trim((string)$metadata['desired_ip']); + if ($desiredIp !== '') { + $newHostId = $repo->reserveDisplayEntry($host, $desiredIp, $metadata); + $source = 'reservation'; + $id = $newHostId; + $notice = 'Zusatzdaten gespeichert und KEA-Reservierung gesetzt.'; + } else { + $metadataRepo->saveForHost( + $id, + (string)($host['dhcp_identifier'] ?? ''), + (string)($host['ipv4_address'] ?? ''), + $metadata + ); + $notice = 'Zusatzdaten gespeichert.'; + } $host = $repo->findDisplayByKey($source, $id) ?: $host; } } catch (Throwable $e) { @@ -114,6 +126,20 @@ $metadata = is_array($host['metadata'] ?? null) ? $host['metadata'] : []; Gerätetyp + +