1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-01 12:24:28 +01:00
fab-manager/app/services/setting_service.rb

87 lines
3.0 KiB
Ruby
Raw Normal View History

2020-01-27 17:10:29 +01:00
# frozen_string_literal: true
# Settings are saved in two database tables: Settings and HistoryValues.
# Due to the way the controller updates the settings, we cannot safely use ActiveRecord's callbacks (eg. after_update, after_commit...)
# so this service provides a wrapper around these operations.
class SettingService
2022-11-04 09:44:17 +01:00
class << self
def update_allowed?(setting)
2022-11-04 09:44:17 +01:00
return false if Rails.application.secrets.locked_settings.include? setting.name
2022-11-04 09:44:17 +01:00
true
end
def run_after_update(settings)
update_theme_stylesheet(settings)
update_home_stylesheet(settings)
notify_privacy_update(settings)
sync_stripe_objects(settings)
build_stats(settings)
export_projects_to_openlab(settings)
validate_admins(settings)
update_accounting_line(settings)
2022-11-04 09:44:17 +01:00
end
private
2022-11-04 09:44:17 +01:00
# rebuild the theme stylesheet
def update_theme_stylesheet(settings)
return unless (%w[main_color secondary_color] & settings.map(&:name)).count.positive?
2022-11-04 09:44:17 +01:00
Stylesheet.theme&.rebuild!
end
# rebuild the home page stylesheet
def update_home_stylesheet(settings)
return unless settings.any? { |s| s.name == 'home_css' }
2022-11-04 09:44:17 +01:00
Stylesheet.home_page&.rebuild!
end
2020-01-27 17:10:29 +01:00
# notify about a change in privacy policy
def notify_privacy_update(settings)
return unless settings.any? { |s| s.name == 'privacy_body' }
2022-11-04 09:44:17 +01:00
2023-01-03 10:36:45 +01:00
setting = settings.find { |s| s.name == 'privacy_body' }
2022-11-04 09:44:17 +01:00
NotifyPrivacyUpdateWorker.perform_async(setting.id)
end
2021-06-04 18:26:20 +02:00
# sync all objects on stripe
def sync_stripe_objects(settings)
return unless (%w[stripe_secret_key online_payment_module] & settings.map(&:name)).count.positive?
2022-11-04 09:44:17 +01:00
2023-01-03 10:36:45 +01:00
setting = settings.find { |s| s.name == 'stripe_secret_key' }
2022-11-04 09:44:17 +01:00
SyncObjectsOnStripeWorker.perform_async(setting.history_values.last&.invoicing_profile&.user&.id)
end
# generate the statistics since the last update
def build_stats(settings)
return unless settings.any? { |s| s.name == 'statistics_module' && s.value == 'true' }
2023-01-03 10:36:45 +01:00
setting = settings.find { |s| s.name == 'statistics_module' }
2022-11-04 09:44:17 +01:00
PeriodStatisticsWorker.perform_async(setting.previous_update)
end
# export projects to openlab
def export_projects_to_openlab(settings)
return unless (%w[openlab_app_id openlab_app_secret] & settings.map(&:name)).count.positive? &&
2022-11-04 09:44:17 +01:00
Setting.get('openlab_app_id').present? && Setting.get('openlab_app_secret').present?
Project.all.each(&:openlab_create)
end
# automatically validate the admins
def validate_admins(settings)
return unless settings.any? { |s| s.name == 'user_validation_required' && s.value == 'true' }
2022-11-04 09:44:17 +01:00
User.admins.each { |admin| admin.update(validated_at: DateTime.current) if admin.validated_at.nil? }
end
def update_accounting_line(settings)
return unless settings.any? { |s| s.name.match(/^accounting_/) || s.name == 'advanced_accounting' }
AccountingWorker.perform_async(:all)
end
2020-01-27 17:10:29 +01:00
end
end