foodsoft/app/controllers/admin/configs_controller.rb

64 lines
1.9 KiB
Ruby
Raw Normal View History

2014-03-16 02:08:15 +01:00
class Admin::ConfigsController < Admin::BaseController
before_action :get_tabs, only: %i[show list]
2014-03-16 02:08:15 +01:00
def show
@current_tab = @tabs.include?(params[:tab]) ? params[:tab] : @tabs.first
@cfg = FoodsoftConfig
end
def list
@current_tab = 'list'
@cfg = FoodsoftConfig
@dfl = FoodsoftConfig.config
@keys = FoodsoftConfig.keys.select { |k| FoodsoftConfig.allowed_key?(k) }.sort
2014-03-16 02:08:15 +01:00
end
def update
parse_recurring_selects! params[:config][:order_schedule]
2014-03-16 02:08:15 +01:00
ActiveRecord::Base.transaction do
# TODO: support nested configuration keys
2014-03-16 02:08:15 +01:00
params[:config].each do |key, val|
FoodsoftConfig[key] = convert_config_value val
2014-03-16 02:08:15 +01:00
end
end
flash[:notice] = I18n.t('admin.configs.update.notice')
redirect_to action: 'show'
end
protected
# Set configuration tab names as `@tabs`
def get_tabs
@tabs = %w[foodcoop payment tasks messages layout language security others]
2014-03-16 02:08:15 +01:00
# allow engines to modify this list
engines = Rails::Engine.subclasses.map(&:instance).select { |e| e.respond_to?(:configuration) }
engines.each { |e| e.configuration(@tabs, self) }
@tabs.uniq!
end
# turn recurring rules into something palatable
def parse_recurring_selects!(config)
return unless config
for k in %i[pickup boxfill ends] do
if config[k]
# allow clearing it using dummy value '{}' ('' would break recurring_select)
if config[k][:recurr].present? && config[k][:recurr] != '{}'
config[k][:recurr] = ActiveSupport::JSON.decode(config[k][:recurr])
config[k][:recurr] = FoodsoftDateUtil.rule_from(config[k][:recurr]).to_ical if config[k][:recurr]
else
config[k] = nil
end
end
end
end
def convert_config_value(value)
if value.is_a? ActionController::Parameters
value.transform_values { |v| convert_config_value(v) }.to_hash
else
value
end
end
2014-03-16 02:08:15 +01:00
end