diff --git a/app/Http/Controllers/UserPreferencesController.php b/app/Http/Controllers/UserPreferencesController.php index e742115c58..0347a21c0c 100644 --- a/app/Http/Controllers/UserPreferencesController.php +++ b/app/Http/Controllers/UserPreferencesController.php @@ -37,12 +37,6 @@ use Session; class UserPreferencesController extends Controller { - private $valid_prefs = [ - 'dashboard' => 'required|integer', - 'add_schedule_note_to_device' => 'required|integer', - 'locale' => 'required|in:en,ru', - ]; - public function __construct() { $this->middleware('deny-demo'); @@ -64,14 +58,9 @@ class UserPreferencesController extends Controller 'default_dashboard' => UserPref::getPref($user, 'dashboard'), 'note_to_device' => UserPref::getPref($user, 'add_schedule_note_to_device'), 'locale' => UserPref::getPref($user, 'locale') ?: 'en', + 'locales' => $this->getValidLocales(), ]; - foreach (glob(resource_path('lang') . '/*', GLOB_ONLYDIR) as $locale) { - $locale = basename($locale); - $lang = __('preferences.lang', [], $locale); - $data['locales'][$locale] = ($lang == 'preferences.lang' ? $locale : $lang); - } - if (Config::get('twofactor')) { $twofactor = UserPref::getPref($user, 'twofactor'); if ($twofactor) { @@ -90,14 +79,23 @@ class UserPreferencesController extends Controller /** * Store a newly created resource in storage. * - * @param \Illuminate\Http\Request $request + * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { + $valid_prefs = [ + 'dashboard' => 'required|integer', + 'add_schedule_note_to_device' => 'required|integer', + 'locale' => [ + 'required', + Rule::in(array_keys($this->getValidLocales())), + ], + ]; + $this->validate($request, [ - 'pref' => ['required', Rule::in(array_keys($this->valid_prefs))], - 'value' => $this->valid_prefs[$request->pref] ?? 'required|integer', + 'pref' => ['required', Rule::in(array_keys($valid_prefs))], + 'value' => $valid_prefs[$request->pref] ?? 'required|integer', ]); UserPref::setPref($request->user(), $request->pref, $request->value); @@ -108,4 +106,16 @@ class UserPreferencesController extends Controller return response()->json(['status' => 'success']); } + + private function getValidLocales() + { + return array_reduce(glob(resource_path('lang') . '/*', GLOB_ONLYDIR), function ($locales, $locale) { + { + $locale = basename($locale); + $lang = __('preferences.lang', [], $locale); + $locales[$locale] = ($lang == 'preferences.lang' ? $locale : $lang); + return $locales; + } + }, []); + } } diff --git a/resources/views/user/preferences.blade.php b/resources/views/user/preferences.blade.php index dae9ab2adc..74127ba097 100644 --- a/resources/views/user/preferences.blade.php +++ b/resources/views/user/preferences.blade.php @@ -220,9 +220,17 @@ $this.closest('.form-group').removeClass('has-success'); }, 2000); }, - error: function () { + error: function (data) { $this.val($this.data('previous')); $this.closest('.form-group').addClass('has-error'); + + var json = data.responseJSON; + var errors = []; + for (var attrib in json) { + errors.push(json[attrib]); + } + toastr.error('Error: ' + errors.join("
")); + setTimeout(function(){ $this.closest('.form-group').removeClass('has-error'); }, 2000);