docbrown/app/controllers/admin/settings/general_settings_controller.rb
PJ 3f922921e5
Admin setting to control enabled countries for billboard geotargeting (#20083)
* use instance setting for enabled target geolocations

* add validation for enabled geolocations setting

* a start on the UI?

* backend tweaks for UI

* proper crack at autocomplete component

* fix region targeting toggle

* e2e spec
2023-09-12 12:06:00 -04:00

52 lines
1.6 KiB
Ruby

module Admin
module Settings
class GeneralSettingsController < Admin::Settings::BaseController
after_action :bust_content_change_caches, only: %i[create]
SPECIAL_PARAMS_TO_ADD = %w[
credit_prices_in_cents
meta_keywords
logo
].freeze
def create
result = ::Settings::General::Upsert.call(settings_params)
if result.success?
Audit::Logger.log(:internal, current_user, params.dup)
render json: { message: I18n.t("core.success_settings") }, status: :ok
else
render json: { error: result.errors.to_sentence }, status: :unprocessable_entity
end
end
private
# NOTE: we need to override this since the controller name doesn't reflect
# the model name
def authorization_resource
::Settings::General
end
def settings_params
params.require(:settings_general)&.merge(parsed_countries)&.permit(
settings_keys.map(&:to_sym),
social_media_handles: ::Settings::General::SOCIAL_MEDIA_SERVICES,
meta_keywords: ::Settings::General.meta_keywords.keys,
credit_prices_in_cents: ::Settings::General.credit_prices_in_cents.keys,
billboard_enabled_countries: ISO3166::Country.codes,
)
end
def settings_keys
::Settings::General.keys + SPECIAL_PARAMS_TO_ADD
end
def parsed_countries
countries = params[:settings_general][:billboard_enabled_countries]
return {} unless countries
{ billboard_enabled_countries: JSON.parse(countries) }
end
end
end
end