"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