mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 00:47:46 -06:00
FIX: Add new/missing email templates to the email templates editor (#28075)
We have a dedicated admin page (`/admin/customize/email_templates`) that lets admins customize all emails that Discourse sends to users. The way this page works is that it lists all translations strings that are used for emails, and the list of translation strings is currently hardcoded and hasn't been updated in years. We've had a number of new emails that Discourse sends, so we should add those templates to the list to let admins easily customize those templates. Meta topic: https://meta.discourse.org/t/3-2-x-still-ignores-some-custom-email-templates/308203.
This commit is contained in:
parent
1a95543e93
commit
e9aa2c96e1
@ -1,10 +1,14 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Admin::EmailTemplatesController < Admin::AdminController
|
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
|
def self.email_keys
|
||||||
@email_keys ||= %w[
|
@email_keys ||= %w[
|
||||||
|
admin_confirmation_mailer
|
||||||
custom_invite_forum_mailer
|
custom_invite_forum_mailer
|
||||||
custom_invite_mailer
|
custom_invite_mailer
|
||||||
|
download_backup_mailer
|
||||||
invite_forum_mailer
|
invite_forum_mailer
|
||||||
invite_mailer
|
invite_mailer
|
||||||
invite_password_instructions
|
invite_password_instructions
|
||||||
@ -18,52 +22,104 @@ class Admin::EmailTemplatesController < Admin::AdminController
|
|||||||
system_messages.csv_export_succeeded
|
system_messages.csv_export_succeeded
|
||||||
system_messages.download_remote_images_disabled
|
system_messages.download_remote_images_disabled
|
||||||
system_messages.email_error_notification
|
system_messages.email_error_notification
|
||||||
|
system_messages.email_reject_attachment
|
||||||
system_messages.email_reject_auto_generated
|
system_messages.email_reject_auto_generated
|
||||||
system_messages.email_reject_bad_destination_address
|
system_messages.email_reject_bad_destination_address
|
||||||
system_messages.email_reject_empty
|
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_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_parsing
|
||||||
|
system_messages.email_reject_post_too_short
|
||||||
system_messages.email_reject_reply_key
|
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_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_closed
|
||||||
system_messages.email_reject_topic_not_found
|
system_messages.email_reject_topic_not_found
|
||||||
system_messages.email_reject_unrecognized_error
|
system_messages.email_reject_unrecognized_error
|
||||||
system_messages.email_reject_user_not_found
|
system_messages.email_reject_user_not_found
|
||||||
system_messages.email_revoked
|
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.pending_users_reminder
|
||||||
system_messages.post_hidden
|
system_messages.post_hidden
|
||||||
system_messages.post_hidden_again
|
system_messages.post_hidden_again
|
||||||
|
system_messages.queued_by_staff
|
||||||
system_messages.queued_posts_reminder
|
system_messages.queued_posts_reminder
|
||||||
system_messages.restore_failed
|
system_messages.restore_failed
|
||||||
system_messages.restore_succeeded
|
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.silenced_by_staff
|
||||||
system_messages.spam_post_blocked
|
system_messages.spam_post_blocked
|
||||||
|
system_messages.tl2_promotion_message
|
||||||
system_messages.too_many_spam_flags
|
system_messages.too_many_spam_flags
|
||||||
|
system_messages.too_many_tl3_flags
|
||||||
system_messages.unsilenced
|
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.user_automatically_silenced
|
||||||
system_messages.welcome_invite
|
system_messages.welcome_invite
|
||||||
system_messages.welcome_user
|
|
||||||
system_messages.welcome_staff
|
system_messages.welcome_staff
|
||||||
|
system_messages.welcome_tl1_user
|
||||||
|
system_messages.welcome_user
|
||||||
test_mailer
|
test_mailer
|
||||||
|
unsubscribe_mailer
|
||||||
user_notifications.account_created
|
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.admin_login
|
||||||
user_notifications.confirm_new_email
|
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.email_login
|
||||||
user_notifications.forgot_password
|
user_notifications.forgot_password
|
||||||
user_notifications.notify_old_email
|
user_notifications.notify_old_email
|
||||||
|
user_notifications.notify_old_email_add
|
||||||
|
user_notifications.post_approved
|
||||||
user_notifications.set_password
|
user_notifications.set_password
|
||||||
user_notifications.signup
|
user_notifications.signup
|
||||||
user_notifications.signup_after_approval
|
user_notifications.signup_after_approval
|
||||||
|
user_notifications.signup_after_reject
|
||||||
user_notifications.suspicious_login
|
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
|
||||||
user_notifications.user_invited_to_private_message_pm_group
|
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_invited_to_topic
|
||||||
user_notifications.user_linked
|
user_notifications.user_linked
|
||||||
user_notifications.user_mentioned
|
user_notifications.user_mentioned
|
||||||
|
user_notifications.user_mentioned_pm
|
||||||
user_notifications.user_posted
|
user_notifications.user_posted
|
||||||
user_notifications.user_posted_pm
|
user_notifications.user_posted_pm
|
||||||
|
user_notifications.user_posted_pm_staged
|
||||||
user_notifications.user_quoted
|
user_notifications.user_quoted
|
||||||
user_notifications.user_replied
|
user_notifications.user_replied
|
||||||
|
user_notifications.user_replied_pm
|
||||||
|
user_notifications.user_watching_category_or_tag
|
||||||
|
user_notifications.user_watching_first_post
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
33
lib/email_templates_finder.rb
Normal file
33
lib/email_templates_finder.rb
Normal file
@ -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
|
5
lib/tasks/list_email_templates_strings.rake
Normal file
5
lib/tasks/list_email_templates_strings.rake
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
task "list_email_templates_strings" => :environment do
|
||||||
|
puts EmailTemplatesFinder.list
|
||||||
|
end
|
@ -453,4 +453,12 @@ RSpec.describe Admin::EmailTemplatesController do
|
|||||||
expect(I18n.t(key)).to_not include("Translation missing")
|
expect(I18n.t(key)).to_not include("Translation missing")
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user