about summary refs log tree commit diff
path: root/app/controllers/admin/settings_controller.rb
blob: a64e98868d9f0fb83cb5bc06de3c777960760fab (plain) (blame)
1
2
3
4
5
6
7
8
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# frozen_string_literal: true

module Admin
  class SettingsController < BaseController
    ADMIN_SETTINGS = %w(
      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
      flavour
      skin
      flavour_and_skin
      thumbnail
      hero
      mascot
      min_invite_role
      activity_api_enabled
      peers_api_enabled
      show_known_fediverse_at_about_page
      preview_sensitive_media
      custom_css
      profile_directory
      hide_followers_count
    ).freeze

    BOOLEAN_SETTINGS = %w(
      open_deletion
      timeline_preview
      show_staff_badge
      activity_api_enabled
      peers_api_enabled
      show_known_fediverse_at_about_page
      preview_sensitive_media
      profile_directory
      hide_followers_count
    ).freeze

    UPLOAD_SETTINGS = %w(
      thumbnail
      hero
      mascot
    ).freeze

    def edit
      authorize :settings, :show?
      @admin_settings = Form::AdminSettings.new
    end

    def update
      authorize :settings, :update?

      settings = settings_params
      flavours_and_skin = settings.delete('flavour_and_skin')
      if flavours_and_skin
        settings['flavour'], settings['skin'] = flavours_and_skin.split('/', 2)
      end

      settings.each do |key, value|
        if UPLOAD_SETTINGS.include?(key)
          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: value_for_update(key, value))
        end
      end

      flash[:notice] = I18n.t('generic.changes_saved_msg')
      redirect_to edit_admin_settings_path
    end

    private

    def settings_params
      params.require(:form_admin_settings).permit(ADMIN_SETTINGS)
    end

    def value_for_update(key, value)
      if BOOLEAN_SETTINGS.include?(key)
        value == '1'
      else
        value
      end
    end
  end
end