Make score and sport settings fully account-specific
This commit is contained in:
+19
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user