2017-07-11 18:24:04 -07:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class Form::AdminSettings
|
|
|
|
include ActiveModel::Model
|
|
|
|
|
2019-03-23 06:07:04 -07:00
|
|
|
KEYS = %i(
|
|
|
|
site_contact_username
|
|
|
|
site_contact_email
|
|
|
|
site_title
|
|
|
|
site_short_description
|
|
|
|
site_description
|
|
|
|
site_extended_description
|
|
|
|
site_terms
|
|
|
|
registrations_mode
|
|
|
|
closed_registrations_message
|
|
|
|
open_deletion
|
|
|
|
timeline_preview
|
|
|
|
show_staff_badge
|
|
|
|
bootstrap_timeline_accounts
|
2019-03-23 14:10:51 -07:00
|
|
|
flavour
|
|
|
|
skin
|
2019-03-23 06:07:04 -07:00
|
|
|
min_invite_role
|
|
|
|
activity_api_enabled
|
|
|
|
peers_api_enabled
|
|
|
|
show_known_fediverse_at_about_page
|
|
|
|
preview_sensitive_media
|
|
|
|
custom_css
|
|
|
|
profile_directory
|
2019-03-23 14:10:51 -07:00
|
|
|
hide_followers_count
|
|
|
|
flavour_and_skin
|
2019-03-30 20:03:56 -07:00
|
|
|
thumbnail
|
|
|
|
hero
|
|
|
|
mascot
|
2019-04-30 12:51:24 -07:00
|
|
|
show_reblogs_in_public_timelines
|
|
|
|
show_replies_in_public_timelines
|
2019-08-06 08:57:52 -07:00
|
|
|
trends
|
2019-10-08 15:30:15 -07:00
|
|
|
trendable_by_default
|
2022-02-26 01:45:44 -08:00
|
|
|
trending_status_cw
|
2019-08-19 02:35:48 -07:00
|
|
|
show_domain_blocks
|
|
|
|
show_domain_blocks_rationale
|
2019-09-10 23:44:58 -07:00
|
|
|
noindex
|
2020-05-30 07:47:17 -07:00
|
|
|
outgoing_spoilers
|
2020-12-14 01:03:09 -08:00
|
|
|
require_invite_text
|
2022-01-25 14:56:57 -08:00
|
|
|
captcha_enabled
|
2019-03-23 06:07:04 -07:00
|
|
|
).freeze
|
|
|
|
|
|
|
|
BOOLEAN_KEYS = %i(
|
|
|
|
open_deletion
|
|
|
|
timeline_preview
|
|
|
|
show_staff_badge
|
|
|
|
activity_api_enabled
|
|
|
|
peers_api_enabled
|
|
|
|
show_known_fediverse_at_about_page
|
|
|
|
preview_sensitive_media
|
|
|
|
profile_directory
|
2019-03-23 14:10:51 -07:00
|
|
|
hide_followers_count
|
2019-04-30 12:51:24 -07:00
|
|
|
show_reblogs_in_public_timelines
|
|
|
|
show_replies_in_public_timelines
|
2019-08-06 08:57:52 -07:00
|
|
|
trends
|
2019-10-08 15:30:15 -07:00
|
|
|
trendable_by_default
|
2022-02-26 01:45:44 -08:00
|
|
|
trending_status_cw
|
2019-09-10 23:44:58 -07:00
|
|
|
noindex
|
2020-12-14 01:03:09 -08:00
|
|
|
require_invite_text
|
2022-01-25 14:56:57 -08:00
|
|
|
captcha_enabled
|
2019-03-23 06:07:04 -07:00
|
|
|
).freeze
|
|
|
|
|
|
|
|
UPLOAD_KEYS = %i(
|
|
|
|
thumbnail
|
|
|
|
hero
|
|
|
|
mascot
|
|
|
|
).freeze
|
|
|
|
|
2019-03-23 14:10:51 -07:00
|
|
|
PSEUDO_KEYS = %i(
|
|
|
|
flavour_and_skin
|
|
|
|
).freeze
|
|
|
|
|
2019-03-23 06:07:04 -07:00
|
|
|
attr_accessor(*KEYS)
|
|
|
|
|
2019-04-09 18:34:16 -07:00
|
|
|
validates :site_short_description, :site_description, html: { wrap_with: :p }
|
|
|
|
validates :site_extended_description, :site_terms, :closed_registrations_message, html: true
|
2019-03-23 06:07:04 -07:00
|
|
|
validates :registrations_mode, inclusion: { in: %w(open approved none) }
|
|
|
|
validates :min_invite_role, inclusion: { in: %w(disabled user moderator admin) }
|
|
|
|
validates :site_contact_email, :site_contact_username, presence: true
|
|
|
|
validates :site_contact_username, existing_username: true
|
|
|
|
validates :bootstrap_timeline_accounts, existing_username: { multiple: true }
|
2019-08-19 02:35:48 -07:00
|
|
|
validates :show_domain_blocks, inclusion: { in: %w(disabled users all) }
|
|
|
|
validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }
|
2019-03-23 06:07:04 -07:00
|
|
|
|
|
|
|
def initialize(_attributes = {})
|
|
|
|
super
|
|
|
|
initialize_attributes
|
|
|
|
end
|
|
|
|
|
|
|
|
def save
|
|
|
|
return false unless valid?
|
|
|
|
|
|
|
|
KEYS.each do |key|
|
2019-03-23 14:10:51 -07:00
|
|
|
next if PSEUDO_KEYS.include?(key)
|
2019-03-23 06:07:04 -07:00
|
|
|
value = instance_variable_get("@#{key}")
|
|
|
|
|
2019-03-31 22:30:46 -07:00
|
|
|
if UPLOAD_KEYS.include?(key) && !value.nil?
|
2019-03-23 06:07:04 -07:00
|
|
|
upload = SiteUpload.where(var: key).first_or_initialize(var: key)
|
|
|
|
upload.update(file: value)
|
|
|
|
else
|
|
|
|
setting = Setting.where(var: key).first_or_initialize(var: key)
|
|
|
|
setting.update(value: typecast_value(key, value))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-10-08 06:00:27 -07:00
|
|
|
|
|
|
|
def flavour_and_skin
|
|
|
|
"#{Setting.flavour}/#{Setting.skin}"
|
|
|
|
end
|
2019-03-23 14:10:51 -07:00
|
|
|
|
|
|
|
def flavour_and_skin=(value)
|
|
|
|
@flavour, @skin = value.split('/', 2)
|
|
|
|
end
|
|
|
|
|
2019-03-23 06:07:04 -07:00
|
|
|
private
|
|
|
|
|
|
|
|
def initialize_attributes
|
|
|
|
KEYS.each do |key|
|
2019-03-23 14:10:51 -07:00
|
|
|
next if PSEUDO_KEYS.include?(key)
|
2019-03-23 06:07:04 -07:00
|
|
|
instance_variable_set("@#{key}", Setting.public_send(key)) if instance_variable_get("@#{key}").nil?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def typecast_value(key, value)
|
|
|
|
if BOOLEAN_KEYS.include?(key)
|
|
|
|
value == '1'
|
|
|
|
else
|
|
|
|
value
|
|
|
|
end
|
|
|
|
end
|
2017-07-11 18:24:04 -07:00
|
|
|
end
|