diff --git a/app/controllers/admin/email_templates_controller.rb b/app/controllers/admin/email_templates_controller.rb index c4241e4d180..fcd8b341845 100644 --- a/app/controllers/admin/email_templates_controller.rb +++ b/app/controllers/admin/email_templates_controller.rb @@ -1,10 +1,14 @@ # frozen_string_literal: true class Admin::EmailTemplatesController < Admin::AdminController + # to update the list of keys below, run the `list_email_templates_strings` + # rake task and replace the list below with the output from the rake task def self.email_keys @email_keys ||= %w[ + admin_confirmation_mailer custom_invite_forum_mailer custom_invite_mailer + download_backup_mailer invite_forum_mailer invite_mailer invite_password_instructions @@ -18,52 +22,104 @@ class Admin::EmailTemplatesController < Admin::AdminController system_messages.csv_export_succeeded system_messages.download_remote_images_disabled system_messages.email_error_notification + system_messages.email_reject_attachment system_messages.email_reject_auto_generated system_messages.email_reject_bad_destination_address system_messages.email_reject_empty + system_messages.email_reject_inactive_user + system_messages.email_reject_insufficient_trust_level system_messages.email_reject_invalid_access + system_messages.email_reject_invalid_post + system_messages.email_reject_invalid_post_action + system_messages.email_reject_invalid_post_specified + system_messages.email_reject_not_allowed_email + system_messages.email_reject_old_destination system_messages.email_reject_parsing + system_messages.email_reject_post_too_short system_messages.email_reject_reply_key + system_messages.email_reject_reply_not_allowed + system_messages.email_reject_reply_to_digest + system_messages.email_reject_reply_user_not_matching system_messages.email_reject_screened_email + system_messages.email_reject_silenced_user + system_messages.email_reject_strangers_not_allowed + system_messages.email_reject_too_many_recipients system_messages.email_reject_topic_closed system_messages.email_reject_topic_not_found system_messages.email_reject_unrecognized_error system_messages.email_reject_user_not_found system_messages.email_revoked + system_messages.flags_agreed_and_post_deleted + system_messages.flags_agreed_and_post_deleted_for_responders + system_messages.flags_disagreed + system_messages.ignored_users_summary + system_messages.new_user_of_the_month system_messages.pending_users_reminder system_messages.post_hidden system_messages.post_hidden_again + system_messages.queued_by_staff system_messages.queued_posts_reminder system_messages.restore_failed system_messages.restore_succeeded + system_messages.reviewable_queued_post_revise_and_reject + system_messages.reviewable_queued_post_revise_and_reject_new_topic + system_messages.reviewables_reminder system_messages.silenced_by_staff system_messages.spam_post_blocked + system_messages.tl2_promotion_message system_messages.too_many_spam_flags + system_messages.too_many_tl3_flags system_messages.unsilenced + system_messages.user_added_to_group_as_member + system_messages.user_added_to_group_as_owner system_messages.user_automatically_silenced system_messages.welcome_invite - system_messages.welcome_user system_messages.welcome_staff + system_messages.welcome_tl1_user + system_messages.welcome_user test_mailer + unsubscribe_mailer user_notifications.account_created + user_notifications.account_exists + user_notifications.account_second_factor_disabled + user_notifications.account_silenced + user_notifications.account_silenced_forever + user_notifications.account_suspended + user_notifications.account_suspended_forever + user_notifications.activation_reminder user_notifications.admin_login user_notifications.confirm_new_email + user_notifications.confirm_new_email_via_admin + user_notifications.confirm_old_email + user_notifications.confirm_old_email_add user_notifications.email_login user_notifications.forgot_password user_notifications.notify_old_email + user_notifications.notify_old_email_add + user_notifications.post_approved user_notifications.set_password user_notifications.signup user_notifications.signup_after_approval + user_notifications.signup_after_reject user_notifications.suspicious_login + user_notifications.user_group_mentioned + user_notifications.user_group_mentioned_pm + user_notifications.user_group_mentioned_pm_group user_notifications.user_invited_to_private_message_pm user_notifications.user_invited_to_private_message_pm_group + user_notifications.user_invited_to_private_message_pm_staged user_notifications.user_invited_to_topic user_notifications.user_linked user_notifications.user_mentioned + user_notifications.user_mentioned_pm user_notifications.user_posted user_notifications.user_posted_pm + user_notifications.user_posted_pm_staged user_notifications.user_quoted user_notifications.user_replied + user_notifications.user_replied_pm + user_notifications.user_watching_category_or_tag + user_notifications.user_watching_first_post ] end diff --git a/lib/email_templates_finder.rb b/lib/email_templates_finder.rb new file mode 100644 index 00000000000..44c76d83917 --- /dev/null +++ b/lib/email_templates_finder.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class EmailTemplatesFinder + def self.list + path = File.join(Rails.root, "config", "locales", "server.en.yml") + yaml = YAML.load_file(path, aliases: true) + new(yaml).list + end + + attr_reader :list + + def initialize(obj) + @obj = obj + @list = [] + check(@obj, "") + @list.sort! + end + + private + + def check(obj, path) + obj.each do |key, val| + if Hash === val + next_path = "#{path}#{key}" + if val.key?("text_body_template") && val.key?("subject_template") + @list << next_path.sub("en.", "") + else + check(val, "#{next_path}.") + end + end + end + end +end diff --git a/lib/tasks/list_email_templates_strings.rake b/lib/tasks/list_email_templates_strings.rake new file mode 100644 index 00000000000..d98d7d687fc --- /dev/null +++ b/lib/tasks/list_email_templates_strings.rake @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +task "list_email_templates_strings" => :environment do + puts EmailTemplatesFinder.list +end diff --git a/spec/requests/admin/email_templates_controller_spec.rb b/spec/requests/admin/email_templates_controller_spec.rb index dcda1ac8e3b..fc52952f3b9 100644 --- a/spec/requests/admin/email_templates_controller_spec.rb +++ b/spec/requests/admin/email_templates_controller_spec.rb @@ -453,4 +453,12 @@ RSpec.describe Admin::EmailTemplatesController do expect(I18n.t(key)).to_not include("Translation missing") end end + + describe ".email_keys" do + it "returns a list that contains all the email templates in the server.en.yml file" do + expect(Admin::EmailTemplatesController.email_keys).to contain_exactly( + *EmailTemplatesFinder.list, + ) + end + end end