"Fossies" - the Fresh Open Source Software Archive 
Member "discourse-3.1.3/config/initializers/014-track-setting-changes.rb" (9 Nov 2023, 3390 Bytes) of package /linux/www/discourse-3.1.3.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Ruby source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
See also the last
Fossies "Diffs" side-by-side code changes report for "014-track-setting-changes.rb":
3.0.6_vs_3.1.0.
1 # frozen_string_literal: true
2
3 PRIVATE_BOOTSTRAP_MODE_MIN_USERS = 10
4
5 DiscourseEvent.on(:site_setting_changed) do |name, old_value, new_value|
6 Category.clear_subcategory_ids if name === :max_category_nesting
7
8 # Enabling `must_approve_users` on an existing site is odd, so we assume that the
9 # existing users are approved.
10 if name == :must_approve_users && new_value == true
11 User
12 .where(approved: false)
13 .joins("LEFT JOIN reviewables r ON r.target_id = users.id")
14 .where(r: { id: nil })
15 .update_all(approved: true)
16 end
17
18 if name == :emoji_set
19 Emoji.clear_cache
20
21 before = "/images/emoji/#{old_value}/"
22 after = "/images/emoji/#{new_value}/"
23
24 Scheduler::Defer.later("Fix Emoji Links") do
25 DB.exec(
26 "UPDATE posts SET cooked = REPLACE(cooked, :before, :after) WHERE cooked LIKE :like",
27 before: before,
28 after: after,
29 like: "%#{before}%",
30 )
31 end
32 end
33
34 # Set bootstrap min users for private sites to a lower default
35 if name == :login_required && SiteSetting.bootstrap_mode_enabled == true
36 if new_value == true &&
37 SiteSetting.bootstrap_mode_min_users == SiteSetting.defaults.get(:bootstrap_mode_min_users)
38 SiteSetting.bootstrap_mode_min_users = PRIVATE_BOOTSTRAP_MODE_MIN_USERS
39 end
40
41 # Set bootstrap min users for public sites back to the default
42 if new_value == false &&
43 SiteSetting.bootstrap_mode_min_users == PRIVATE_BOOTSTRAP_MODE_MIN_USERS
44 SiteSetting.bootstrap_mode_min_users = SiteSetting.defaults.get(:bootstrap_mode_min_users)
45 end
46 end
47
48 Stylesheet::Manager.clear_color_scheme_cache! if %i[base_font heading_font].include?(name)
49
50 Report.clear_cache(:storage_stats) if %i[backup_location s3_backup_bucket].include?(name)
51
52 if name == :slug_generation_method
53 Scheduler::Defer.later("Null topic slug") { Topic.update_all(slug: nil) }
54 end
55
56 Jobs.enqueue(:update_s3_inventory) if %i[enable_s3_inventory s3_upload_bucket].include?(name)
57
58 SvgSprite.expire_cache if name.to_s.include?("_icon")
59
60 SiteIconManager.ensure_optimized! if SiteIconManager::WATCHED_SETTINGS.include?(name)
61
62 # Make sure medium and high priority thresholds were calculated.
63 if name == :reviewable_low_priority_threshold && Reviewable.min_score_for_priority(:medium) > 0
64 Reviewable.set_priorities(low: new_value)
65 end
66
67 Emoji.clear_cache && Discourse.request_refresh! if name == :emoji_deny_list
68
69 Discourse.clear_urls! if %i[tos_topic_id privacy_topic_id].include?(name)
70
71 # Update seeded topics
72 if %i[title site_description].include?(name)
73 topics = SeedData::Topics.with_default_locale
74 topics.update(site_setting_names: ["welcome_topic_id"], skip_changed: true)
75 elsif %i[company_name contact_email governing_law city_for_disputes].include?(name)
76 topics = SeedData::Topics.with_default_locale
77 %w[tos_topic_id privacy_topic_id].each do |site_setting|
78 topic_id = SiteSetting.get(site_setting)
79 if topic_id > 0 && Topic.with_deleted.exists?(id: topic_id)
80 if SiteSetting.company_name.blank?
81 topics.delete(site_setting_names: [site_setting], skip_changed: true)
82 else
83 topics.update(site_setting_names: [site_setting], skip_changed: true)
84 end
85 elsif SiteSetting.company_name.present?
86 topics.create(site_setting_names: [site_setting])
87 end
88 end
89 end
90 end