diff --git a/partials/landingpages/modules/setup.php b/partials/landingpages/modules/setup.php index 76bb91e..e19e037 100644 --- a/partials/landingpages/modules/setup.php +++ b/partials/landingpages/modules/setup.php @@ -74,6 +74,13 @@ $dbDefaultsByGroup = [ 'db' => is_array($defaults) ? $defaults : [], 'metadata_db' => is_array($metadataDefaults) ? $metadataDefaults : [], ]; +$authConfig = is_array($module['auth'] ?? null) ? $module['auth'] : ['required' => false, 'users' => [], 'groups' => []]; +$allowedUsers = []; +$allowedGroups = []; +$knownUsers = []; +$knownGroups = []; +$manualUsers = []; +$manualGroups = []; $setNested = function (array &$target, string $path, mixed $value): void { $parts = explode('.', $path); @@ -134,6 +141,22 @@ foreach ($fields as $field) { $generalFields[] = $field; } +$generalSetupFields = []; +$cronSetupFields = []; +$customSetupFields = []; +foreach ($generalFields as $field) { + $fieldName = (string)($field['name'] ?? ''); + if ($fieldName === 'debug_enabled') { + $generalSetupFields[] = $field; + continue; + } + if ($fieldName === 'schedule_timezone') { + $cronSetupFields[] = $field; + continue; + } + $customSetupFields[] = $field; +} + $driverOptions = [ 'pgsql' => 'PostgreSQL', 'mysql' => 'MySQL / MariaDB', @@ -576,6 +599,15 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } } else { modules()->saveSettings($moduleName, $current); + $selectedUsers = is_array($_POST['auth_user_values'] ?? null) ? $_POST['auth_user_values'] : []; + $selectedGroups = is_array($_POST['auth_group_values'] ?? null) ? $_POST['auth_group_values'] : []; + $manualUserValues = preg_split('/[,\\n]+/', (string) ($_POST['auth_users'] ?? '')) ?: []; + $manualGroupValues = preg_split('/[,\\n]+/', (string) ($_POST['auth_groups'] ?? '')) ?: []; + modules()->saveAuth($moduleName, [ + 'required' => isset($_POST['auth_required']), + 'users' => array_merge($selectedUsers, $manualUserValues), + 'groups' => array_merge($selectedGroups, $manualGroupValues), + ]); if ($isFxRatesSetup && modules()->hasFunction($moduleName, 'save_runtime_settings')) { module_fn($moduleName, 'save_runtime_settings', $payload); $current = modules()->settings($moduleName); @@ -586,14 +618,54 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } $notice = 'Setup gespeichert.'; $module = modules()->get($moduleName) ?: $module; + $authConfig = is_array($module['auth'] ?? null) ? $module['auth'] : $authConfig; } } $moduleStatusPanel = null; +$activeSetupSection = trim((string) ($_POST['active_setup_section'] ?? 'setup-section-general')); +if (!in_array($activeSetupSection, ['setup-section-general', 'setup-section-access', 'setup-section-cron', 'setup-section-custom'], true)) { + $activeSetupSection = 'setup-section-general'; +} $activeDbGroup = $testGroup !== null && array_key_exists($testGroup, $dbGroups) ? $testGroup : (array_key_first($dbGroups) ?? ''); +$authConfig = is_array($module['auth'] ?? null) ? $module['auth'] : ['required' => false, 'users' => [], 'groups' => []]; +$allowedUsers = is_array($authConfig['users'] ?? null) ? array_values(array_filter(array_map('strval', $authConfig['users']))) : []; +$allowedGroups = is_array($authConfig['groups'] ?? null) ? array_values(array_filter(array_map('strval', $authConfig['groups']))) : []; +$knownUsers = modules()->knownAuthUsers(); +$knownGroups = modules()->knownAuthGroups(); +$currentUser = auth_user(); +if (is_array($currentUser) && trim((string)($currentUser['sub'] ?? '')) !== '') { + $currentSub = (string) $currentUser['sub']; + $hasCurrentUser = false; + foreach ($knownUsers as $knownUser) { + if ((string) ($knownUser['sub'] ?? '') === $currentSub) { + $hasCurrentUser = true; + break; + } + } + if (!$hasCurrentUser) { + $knownUsers[] = [ + 'sub' => $currentSub, + 'username' => (string) ($currentUser['username'] ?? ''), + 'email' => (string) ($currentUser['email'] ?? ''), + 'name' => (string) ($currentUser['name'] ?? ''), + 'groups' => is_array($currentUser['groups'] ?? null) ? $currentUser['groups'] : [], + ]; + } +} +$knownGroups = array_values(array_unique(array_merge($knownGroups, auth_groups()))); +sort($knownGroups, SORT_NATURAL | SORT_FLAG_CASE); +$knownUserValues = array_column($knownUsers, 'sub'); +$manualUsers = array_values(array_filter($allowedUsers, fn (string $value): bool => !in_array($value, $knownUserValues, true))); +$manualGroups = array_values(array_filter($allowedGroups, fn (string $value): bool => !in_array($value, $knownGroups, true))); +$hasCronSection = $cronSetupFields !== [] || $intervalTaskStatuses !== [] || $cronTaskDefinitions !== []; +$hasCustomSection = $customSetupFields !== [] || $setupActions !== [] || $isFxRatesSetup; +if ($activeSetupSection === 'setup-section-custom' && !$hasCustomSection) { + $activeSetupSection = 'setup-section-general'; +} ?>