diff --git a/partials/landingpages/modules/setup.php b/partials/landingpages/modules/setup.php index 51cd452..d32212b 100644 --- a/partials/landingpages/modules/setup.php +++ b/partials/landingpages/modules/setup.php @@ -59,6 +59,24 @@ $getNested = function (array $source, string $path): mixed { return $node; }; +$dbGroups = []; +foreach ($fields as $field) { + $name = (string)($field['name'] ?? ''); + if (!str_contains($name, '.')) { + continue; + } + + [$group, $key] = explode('.', $name, 2); + if ($key !== 'driver') { + continue; + } + + $label = (string)($field['label'] ?? $group); + $label = trim(preg_replace('/\s+DB\s+Driver$/i', ' DB', $label) ?? $label); + $label = $label !== '' ? $label : $group; + $dbGroups[$group] = $label; +} + if ($_SERVER['REQUEST_METHOD'] === 'POST') { $payload = []; @@ -92,10 +110,36 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $payload[$name] = $value; } - modules()->saveSettings($moduleName, $payload); - $notice = 'Setup gespeichert.'; $current = array_replace_recursive($current, $payload); - $module = modules()->get($moduleName) ?: $module; + + $testGroup = (string)($_POST['test_db'] ?? ''); + if ($testGroup !== '') { + if (!array_key_exists($testGroup, $dbGroups)) { + $error = 'Unbekannte Datenbank-Konfiguration.'; + } else { + $dbConfig = $getNested($current, $testGroup); + if (!is_array($dbConfig)) { + $error = 'Datenbank-Konfiguration ist unvollstaendig.'; + } else { + try { + $dbConfig['options'] = array_replace([ + \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, + \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, + ], (array)($dbConfig['options'] ?? [])); + + $testPdo = \App\Database::createFromArray($dbConfig); + $testPdo->query('SELECT 1')->fetchColumn(); + $notice = $dbGroups[$testGroup] . ': Verbindung erfolgreich.'; + } catch (\Throwable $e) { + $error = $dbGroups[$testGroup] . ': Verbindung fehlgeschlagen. ' . $e->getMessage(); + } + } + } + } else { + modules()->saveSettings($moduleName, $payload); + $notice = 'Setup gespeichert.'; + $module = modules()->get($moduleName) ?: $module; + } } ?>