Class: Admin::SettingsController
- Inherits:
-
ApplicationController
- Object
- ApplicationController
- Admin::SettingsController
- Includes:
- AuditLoggable
- Defined in:
- lib/generators/ruby_cms/templates/controllers/admin/settings_controller.rb
Instance Method Summary collapse
- #index ⇒ Object
- #reset_defaults ⇒ Object
- #update ⇒ Object
-
#update_nav_order ⇒ Object
Dedicated endpoint for saving nav order.
Instance Method Details
#index ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/generators/ruby_cms/templates/controllers/admin/settings_controller.rb', line 9 def index RubyCms::Settings.ensure_defaults! @registry_entries = sorted_registry_entries @categories = @registry_entries.map { |e| e.category.to_s }.uniq @active_tab = resolve_active_tab(params[:tab], @categories) @entries_for_tab = @active_tab == "overview" ? [] : @registry_entries.select { |entry| entry.category.to_s == @active_tab } # Preload all Preference rows for this tab in one query before .get loop. # Without this each entry triggers a SELECT (N+1). RubyCms::Settings.preload_keys(@entries_for_tab.map { |e| e.key.to_s }) @values = @entries_for_tab.to_h do |entry| [ entry.key, RubyCms::Settings.get(entry.key, default: entry.default) ] end # Preload Preference timestamps for entries in this tab (avoids N+1 in view). @pref_updated_at = if @entries_for_tab.any? keys = @entries_for_tab.map { |e| e.key.to_s } Preference.where(key: keys).pluck(:key, :updated_at).to_h else {} end load_overview_data if @active_tab == "overview" end |
#reset_defaults ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/generators/ruby_cms/templates/controllers/admin/settings_controller.rb', line 54 def reset_defaults RubyCms::SettingsRegistry.seed_defaults! RubyCms::SettingsRegistry.each do |entry| RubyCms::Settings.set(entry.key, entry.default) end audit!(:settings_reset, target: "Settings", summary: "Reset all settings to defaults") redirect_to admin_settings_path(redirect_settings_params), notice: t("ruby_cms.admin.settings.defaults_reset") end |
#update ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/generators/ruby_cms/templates/controllers/admin/settings_controller.rb', line 36 def update updated_keys = apply_updates(extract_updates) updated_keys = apply_nav_order_update(updated_keys) if updated_keys.any? audit!( :settings_updated, target: "Settings", summary: "Updated #{updated_keys.size} setting(s): #{updated_keys.join(', ').truncate(200)}", meta: { keys: updated_keys } ) end respond_with_update_success(updated_keys) rescue StandardError => e respond_with_update_failure(e) end |
#update_nav_order ⇒ Object
Dedicated endpoint for saving nav order. Stores a JSON hash so cross-section moves (an item dragged from main → settings) are persisted as a section override.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/generators/ruby_cms/templates/controllers/admin/settings_controller.rb', line 68 def update_nav_order payload = nav_order_payload_from_raw_body if payload["main"].blank? && payload["settings"].blank? return render json: { success: false, error: "nav_order_main and nav_order_bottom required" }, status: :unprocessable_content end rec = Preference.find_or_initialize_by(key: "nav_order") rec.category = "navigation" if rec.new_record? rec.value_type = "json" rec.value = payload.to_json rec.save! render json: { success: true, updated_keys: [ "nav_order" ], updated_count: 1 } rescue StandardError => e render json: { success: false, error: e. }, status: :unprocessable_content end |