discourse/lib/tasks/site_settings.rake

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

129 lines
3.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require "yaml"
desc "Exports site settings"
task "site_settings:export" => :environment do
h = SiteSettingsTask.export_to_hash
puts h.to_yaml
end
desc "Imports site settings"
task "site_settings:import" => :environment do
yml = (STDIN.tty?) ? "" : STDIN.read
if yml == ""
puts
puts "Please specify a settings yml file"
puts "Example: rake site_settings:import < settings.yml"
exit 1
end
puts
puts "starting import..."
puts
log, counts = SiteSettingsTask.import(yml)
puts log
puts
puts "Results:"
puts " Updated: #{counts[:updated]}"
puts " Not Found: #{counts[:not_found]}"
puts " Errors: #{counts[:errors]}"
exit 1 if counts[:not_found] + counts[:errors] > 0
end
# Outputs a list of Site Settings that may no longer be in use
desc "Find dead site settings"
task "site_settings:find_dead" => :environment do
setting_names = SiteSettingsTask.names
setting_names.each do |n|
if !SiteSetting.respond_to?(n)
# Likely won't hit here, but just in case
puts "Setting #{n} does not exist."
end
end
directories = SiteSettingsTask.directories
dead_settings = []
if !SiteSettingsTask.rg_installed?
puts "Please install ripgrep to use this command"
exit 1
end
if !ENV["ALL_THE_PARENT_DIR"]
puts "To specify a custom parent directory for all-the-themes & all-the-plugins"
puts "use the ALL_THE_PARENT_DIR ENV var."
end
puts "Checking #{setting_names.count} settings in these directories:"
puts directories
puts
setting_names.each do |setting_name|
count = SiteSettingsTask.rg_search_count("SiteSetting.#{setting_name}", directories.first)
count =
SiteSettingsTask.rg_search_count(
"siteSettings.#{setting_name}",
directories.first,
) if count.zero?
directories.each do |directory|
count = SiteSettingsTask.rg_search_count(setting_name, directory) if count.zero?
end
if count.zero?
print setting_name
dead_settings << setting_name
else
print "."
end
end
puts
if dead_settings.count > 0
puts "These settings may be unused:"
puts dead_settings
else
puts "No dead settings found."
end
end
desc "Add missing keyword translation keys"
task "site_settings:add_keyword_translation_keys" => :environment do
# Manually load the YAML file, since we need to manually dump it at the end
filename = "#{Rails.root}/config/locales/server.en.yml"
text = File.read(filename)
yml = YAML.load_file(filename, aliases: true)
new_keywords = {}
added = 0
yml["en"]["site_settings"].each do |key, value|
next if !value.is_a?(String)
if yml["en"]["site_settings"]["keywords"].key?(key)
new_keywords[key] = yml["en"]["site_settings"]["keywords"][key]
else
new_keywords[key] = ""
added += 1
end
end
removed = yml["en"]["site_settings"]["keywords"].length - new_keywords.length - added
new_text = ""
new_keywords.keys.sort.each { |key| new_text += " #{key}: \"#{new_keywords[key]}\"\n" }
text.gsub!(/(# BEGIN KEYWORDS\n)(.*)( # END KEYWORDS)/m, "\\1#{new_text}\\3")
File.write(filename, text)
puts "Keyword entries added: #{added}"
puts "Keyword entries removed: #{removed}"
end