Make score and sport settings fully account-specific

This commit is contained in:
2026-04-12 11:52:57 +02:00
parent a1135d37d8
commit 80f649c547
4 changed files with 153 additions and 25 deletions
+19 -3
View File
@@ -311,12 +311,25 @@ final class App
{
$user = $this->requireUser();
$settings = $this->hydrateSettings($this->settings->forUser($user['username']));
$sportTypePresets = array_values(array_filter(
Defaults::settings()['sport_types'],
static function (array $preset) use ($settings): bool {
foreach (normalized_sport_types($settings) as $type) {
if (($type['id'] ?? '') === ($preset['id'] ?? '')) {
return false;
}
}
return true;
}
));
View::render('options', [
'pageTitle' => 'Optionen',
'page' => 'options',
'authUser' => $user,
'settings' => $settings,
'sportTypePresets' => $sportTypePresets,
'users' => $user['is_admin'] ? $this->users->all() : [],
'maxScore' => $this->scoring->evaluate([
'mood' => 10,
@@ -345,7 +358,7 @@ final class App
if ($form === 'settings') {
$settings = $this->sanitizeSettings($_POST['settings'] ?? []);
$this->settings->saveForUser($user['username'], $settings);
flash('success', 'Die Bewertungslogik wurde aktualisiert.');
flash('success', 'Deine persönlichen Optionen wurden aktualisiert.');
redirect('/options');
}
@@ -551,10 +564,13 @@ final class App
];
}
$sportTypesProvided = array_key_exists('sport_types_present', $input)
|| array_key_exists('sport_types', $input);
$settings['sport_types'] = normalized_sport_types([
'sport_types' => is_array($input['sport_types'] ?? null)
'sport_types' => $sportTypesProvided && is_array($input['sport_types'] ?? null)
? $input['sport_types']
: $defaults['sport_types'],
: ($sportTypesProvided ? [] : $defaults['sport_types']),
]);
return $settings;