From 7d73c570c9a12026bd5ee61aefae4a54ba259488 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 4 Mar 2026 23:42:00 +0100 Subject: [PATCH] module change --- modules/kea/pages/index.php | 14 +++----- public/index.php | 19 +++++++++-- src/App/ModuleConfigException.php | 32 +++++++++++++++++++ src/App/ModuleManager.php | 53 ++++++++++++++++++++++++++----- 4 files changed, 99 insertions(+), 19 deletions(-) create mode 100644 src/App/ModuleConfigException.php diff --git a/modules/kea/pages/index.php b/modules/kea/pages/index.php index 8169e73..3d27b02 100644 --- a/modules/kea/pages/index.php +++ b/modules/kea/pages/index.php @@ -8,15 +8,11 @@ $pdo = modules()->modulePdo('kea', $fallback); $hosts = []; $error = null; -if ($pdo) { - try { - $repo = new KeaHostRepository($pdo); - $hosts = $repo->findAll(50); - } catch (\Exception $e) { - $error = "Datenbankfehler: " . $e->getMessage(); - } -} else { - $error = "Modul nicht konfiguriert. Bitte Setup ausführen."; +try { + $repo = new KeaHostRepository($pdo); + $hosts = $repo->findAll(50); +} catch (\Exception $e) { + $error = "Datenbankfehler: " . $e->getMessage(); } module_tpl('kea', 'dashboard', compact('hosts', 'error')); diff --git a/public/index.php b/public/index.php index 7b60658..e804356 100755 --- a/public/index.php +++ b/public/index.php @@ -111,8 +111,23 @@ if ($targetReal && $retoolBase && str_starts_with($targetReal, $retoolBase)) { // ------------------------------------ // Erst Inhalt laden (ohne Ausgabe), damit Header/Redirects vor HTML funktionieren ob_start(); -require $target; -$content = ob_get_clean(); +try { + require $target; + $content = ob_get_clean(); +} catch (\App\ModuleConfigException $e) { + ob_end_clean(); + http_response_code(412); + $moduleName = $e->module(); + $module = app()->modules()->get($moduleName); + $title = $module['title'] ?? $moduleName; + $setupUrl = '/modules/setup/' . rawurlencode($moduleName); + $content = '
' . + '
' . e($title) . '
' . + '

Setup erforderlich

' . + '

' . e($e->getMessage()) . '

' . + '
Zum Setup
' . + '
'; +} // Wenn bereits Header gesendet wurden (z. B. eigener Redirect/Content-Type), Layout überspringen if (headers_sent()) { diff --git a/src/App/ModuleConfigException.php b/src/App/ModuleConfigException.php new file mode 100644 index 0000000..e09854a --- /dev/null +++ b/src/App/ModuleConfigException.php @@ -0,0 +1,32 @@ +module = $module; + $this->details = $details; + } + + public function module(): string + { + return $this->module; + } + + public function details(): ?string + { + return $this->details; + } +} diff --git a/src/App/ModuleManager.php b/src/App/ModuleManager.php index d769a3a..fae5206 100644 --- a/src/App/ModuleManager.php +++ b/src/App/ModuleManager.php @@ -113,7 +113,10 @@ final class ModuleManager $settings = $this->settings($name); $db = $settings['db'] ?? $fallback; if (!is_array($db) || empty($db)) { - return null; + throw new ModuleConfigException( + $name, + 'Modul nicht konfiguriert. Bitte Setup ausfuehren.' + ); } if (!isset($db['options'])) { @@ -123,15 +126,49 @@ final class ModuleManager ]; } - $pdo = Database::createFromArray($db); + try { + $pdo = Database::createFromArray($db); + } catch (\Throwable $e) { + if (defined('APP_DEBUG_TOOL') && APP_DEBUG_TOOL) { + @file_put_contents( + __DIR__ . '/../../debug/module_db_error.log', + '[' . date('c') . '] ' . $name . ': ' . $e->getMessage() . PHP_EOL, + FILE_APPEND + ); + } + throw new ModuleConfigException( + $name, + 'Modul-Datenbank nicht korrekt konfiguriert.', + $e->getMessage(), + 0, + $e + ); + } if ($name === 'kea' && !empty($settings['kea_auto_init'])) { - Database::ensureKeaSchema($pdo, [ - 'auto_init' => true, - 'init_cmd' => $settings['kea_init_cmd'] ?? null, - 'init_script' => $settings['kea_init_script'] ?? null, - 'kea_db_version' => $settings['kea_db_version'] ?? '', - ]); + try { + Database::ensureKeaSchema($pdo, [ + 'auto_init' => true, + 'init_cmd' => $settings['kea_init_cmd'] ?? null, + 'init_script' => $settings['kea_init_script'] ?? null, + 'kea_db_version' => $settings['kea_db_version'] ?? '', + ]); + } catch (\Throwable $e) { + if (defined('APP_DEBUG_TOOL') && APP_DEBUG_TOOL) { + @file_put_contents( + __DIR__ . '/../../debug/module_db_error.log', + '[' . date('c') . '] ' . $name . ': ' . $e->getMessage() . PHP_EOL, + FILE_APPEND + ); + } + throw new ModuleConfigException( + $name, + 'Modul-Datenbank nicht korrekt konfiguriert.', + $e->getMessage(), + 0, + $e + ); + } } return $pdo;