summaryrefslogtreecommitdiff
path: root/app/controllers/settings/preferences_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/settings/preferences_controller.rb')
-rw-r--r--app/controllers/settings/preferences_controller.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb
new file mode 100644
index 00000000000..25ec2a434a4
--- /dev/null
+++ b/app/controllers/settings/preferences_controller.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+class Settings::PreferencesController < Settings::ApplicationController
+ before_action :user
+
+ def show
+ end
+
+ def update
+ begin
+ result = Users::UpdateService.new(current_user, preferences_params.merge(user: user)).execute
+
+ if result[:status] == :success
+ flash[:notice] = _('Preferences saved.')
+ else
+ flash[:alert] = _('Failed to save preferences.')
+ end
+ rescue ArgumentError => e
+ # Raised when `dashboard` is given an invalid value.
+ flash[:alert] = _("Failed to save preferences (%{error_message}).") % { error_message: e.message }
+ end
+
+ respond_to do |format|
+ format.html { redirect_to settings_preferences_path }
+ format.js
+ end
+ end
+
+ private
+
+ def user
+ @user = current_user
+ end
+
+ def preferences_params
+ params.require(:user).permit(preferences_param_names)
+ end
+
+ def preferences_param_names
+ [
+ :color_scheme_id,
+ :layout,
+ :dashboard,
+ :project_view,
+ :theme_id,
+ :first_day_of_week,
+ :preferred_language,
+ :time_display_relative,
+ :time_format_in_24h
+ ]
+ end
+end