mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-22 03:32:18 -05:00
111 lines
4.4 KiB
Ruby
111 lines
4.4 KiB
Ruby
class SettingsController < ApplicationController
|
|
before_action :check_owner_permission
|
|
before_action { SiteSettings.clear_cache }
|
|
|
|
def update
|
|
# Save site-wide settings if user is an admin
|
|
update_library_settings(params[:libraries])
|
|
update_appearance_settings(params[:appearance])
|
|
update_file_settings(params[:files])
|
|
update_tagging_settings(params[:model_tags])
|
|
update_multiuser_settings(params[:multiuser])
|
|
update_analysis_settings(params[:analysis])
|
|
update_usage_settings(params[:usage])
|
|
update_derivatives_settings(params[:derivatives])
|
|
update_discovery_settings(params[:discovery])
|
|
update_integrations_settings(params[:integrations])
|
|
redirect_back_or_to settings_path, notice: t(".success")
|
|
end
|
|
|
|
private
|
|
|
|
def update_file_settings(settings)
|
|
return unless settings
|
|
regexes = settings[:model_ignored_files].lines.map { |p| p.chomp.to_regexp }
|
|
SiteSettings.model_ignored_files = regexes unless regexes.any?(&:nil?)
|
|
end
|
|
|
|
def update_appearance_settings(settings)
|
|
return unless settings
|
|
SiteSettings.site_name = settings[:site_name]
|
|
SiteSettings.site_tagline = settings[:site_tagline]
|
|
SiteSettings.theme = settings[:theme]
|
|
SiteSettings.default_landing_page = settings[:default_landing_page]
|
|
SiteSettings.about = settings[:about]
|
|
SiteSettings.rules = settings[:rules]
|
|
SiteSettings.support_link = settings[:support_link]
|
|
SiteSettings.site_icon = begin
|
|
URI.parse(settings[:site_icon])
|
|
settings[:site_icon]
|
|
rescue URI::InvalidURIError
|
|
nil
|
|
end
|
|
end
|
|
|
|
def update_library_settings(settings)
|
|
return unless settings
|
|
SiteSettings.show_libraries = settings[:show] == "1"
|
|
end
|
|
|
|
def update_tagging_settings(settings)
|
|
return unless settings
|
|
SiteSettings.model_tags_filter_stop_words = settings[:filter_stop_words] == "1"
|
|
SiteSettings.model_tags_tag_model_directory_name = settings[:tag_model_directory_name] == "1"
|
|
SiteSettings.model_tags_stop_words_locale = settings[:stop_words_locale]
|
|
SiteSettings.model_tags_custom_stop_words = settings[:custom_stop_words].split
|
|
SiteSettings.model_tags_auto_tag_new = settings[:auto_tag_new]
|
|
end
|
|
|
|
def update_analysis_settings(settings)
|
|
return unless settings
|
|
SiteSettings.analyse_manifold = settings[:manifold] == "1"
|
|
end
|
|
|
|
def update_multiuser_settings(settings)
|
|
return unless settings
|
|
SiteSettings.registration_enabled = (settings[:registration_open])
|
|
SiteSettings.approve_signups = (settings[:approve_signups])
|
|
SiteSettings.default_signup_role = settings[:default_signup_role]
|
|
SiteSettings.autocreate_creator_for_new_users = settings[:autocreate_creator_for_new_users]
|
|
SiteSettings.default_viewer_role = settings[:default_viewer_role]
|
|
SiteSettings.enable_user_quota = (settings[:enable_user_quota].presence)
|
|
SiteSettings.default_user_quota = (settings[:default_user_quota].to_i * 1.megabyte)
|
|
end
|
|
|
|
def update_usage_settings(settings)
|
|
return unless settings
|
|
(settings[:report] == "1") ? UsageReport.enable! : UsageReport.disable!
|
|
end
|
|
|
|
def update_discovery_settings(settings)
|
|
return unless settings
|
|
SiteSettings.allow_robots = settings[:allow_robots] == "1"
|
|
SiteSettings.allow_ai_bots = settings[:allow_ai_bots] == "1"
|
|
SiteSettings.default_indexable = settings[:default_indexable] == "1"
|
|
SiteSettings.default_ai_indexable = settings[:default_ai_indexable] == "1"
|
|
end
|
|
|
|
def update_derivatives_settings(settings)
|
|
return unless settings
|
|
SiteSettings.pregenerate_downloads = (settings[:pregenerate_downloads] == "1")
|
|
SiteSettings.download_expiry_time_in_hours = (settings[:download_expiry].to_i)
|
|
SiteSettings.generate_image_derivatives = (settings[:image_derivatives] == "1")
|
|
SiteSettings.generate_model_renders = (settings[:model_renders] == "1")
|
|
# Trigger background jobs if enabled
|
|
Upgrade::BackfillImageDerivatives.perform_later if SiteSettings.generate_image_derivatives
|
|
Upgrade::BackfillModelRenders.perform_later if SiteSettings.generate_model_renders
|
|
end
|
|
|
|
def update_integrations_settings(settings)
|
|
return unless settings
|
|
SiteSettings.cults3d_api_username = settings[:cults3d_api_username]
|
|
SiteSettings.cults3d_api_key = settings[:cults3d_api_key]
|
|
SiteSettings.myminifactory_api_key = settings[:myminifactory_api_key]
|
|
SiteSettings.thingiverse_api_key = settings[:thingiverse_api_key]
|
|
end
|
|
|
|
def check_owner_permission
|
|
authorize :settings
|
|
end
|
|
end
|