You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.8 KiB

  1. # frozen_string_literal: true
  2. module Admin
  3. class SettingsController < BaseController
  4. ADMIN_SETTINGS = %w(
  5. site_contact_username
  6. site_contact_email
  7. site_title
  8. site_short_description
  9. site_description
  10. site_extended_description
  11. site_terms
  12. open_registrations
  13. closed_registrations_message
  14. open_deletion
  15. timeline_preview
  16. show_staff_badge
  17. bootstrap_timeline_accounts
  18. thumbnail
  19. hero
  20. min_invite_role
  21. activity_api_enabled
  22. peers_api_enabled
  23. show_known_fediverse_at_about_page
  24. preview_sensitive_media
  25. ).freeze
  26. BOOLEAN_SETTINGS = %w(
  27. open_registrations
  28. open_deletion
  29. timeline_preview
  30. show_staff_badge
  31. activity_api_enabled
  32. peers_api_enabled
  33. show_known_fediverse_at_about_page
  34. preview_sensitive_media
  35. ).freeze
  36. UPLOAD_SETTINGS = %w(
  37. thumbnail
  38. hero
  39. ).freeze
  40. def edit
  41. authorize :settings, :show?
  42. @admin_settings = Form::AdminSettings.new
  43. end
  44. def update
  45. authorize :settings, :update?
  46. settings_params.each do |key, value|
  47. if UPLOAD_SETTINGS.include?(key)
  48. upload = SiteUpload.where(var: key).first_or_initialize(var: key)
  49. upload.update(file: value)
  50. else
  51. setting = Setting.where(var: key).first_or_initialize(var: key)
  52. setting.update(value: value_for_update(key, value))
  53. end
  54. end
  55. flash[:notice] = I18n.t('generic.changes_saved_msg')
  56. redirect_to edit_admin_settings_path
  57. end
  58. private
  59. def settings_params
  60. params.require(:form_admin_settings).permit(ADMIN_SETTINGS)
  61. end
  62. def value_for_update(key, value)
  63. if BOOLEAN_SETTINGS.include?(key)
  64. value == '1'
  65. else
  66. value
  67. end
  68. end
  69. end
  70. end