mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-04-29 13:28:22 +08:00
Adds a preview text to the beginning of the email body based on user notification type. The value is taken from the translation key, which can be customized for each email within Admin -> Appearance -> Site Texts (ie. translation overrides). For html emails this preview text is hidden with `display: none` to prevent it appearing within the body of the email. For the plain text version of the email it will appear within the body of the email. Co-authored-by: Martin Brennan <martin@discourse.org>
112 lines
3 KiB
Ruby
112 lines
3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Handle sending a message to a user from the system.
|
|
|
|
class SystemMessage
|
|
def self.create(recipient, type, params = {})
|
|
self.new(recipient).create(type, params)
|
|
end
|
|
|
|
def self.create_from_system_user(recipient, type, params = {})
|
|
params = params.merge(from_system: true)
|
|
self.new(recipient).create(type, params)
|
|
end
|
|
|
|
def initialize(recipient)
|
|
@recipient = recipient
|
|
end
|
|
|
|
def create(type, params = {})
|
|
method_params = params.dup
|
|
|
|
from_system = params.delete(:from_system)
|
|
target_group_names = params.delete(:target_group_names)
|
|
|
|
params = defaults.merge(params)
|
|
|
|
if I18n.exists?("system_messages.#{type}.preview", @recipient.effective_locale)
|
|
params[:email_preview] = I18n.t("system_messages.#{type}.preview", params)
|
|
end
|
|
|
|
title =
|
|
params[:message_title] ||
|
|
I18n.with_locale(@recipient.effective_locale) do
|
|
I18n.t("system_messages.#{type}.subject_template", params)
|
|
end
|
|
raw =
|
|
params[:message_raw] ||
|
|
I18n.with_locale(@recipient.effective_locale) do
|
|
I18n.t("system_messages.#{type}.text_body_template", params)
|
|
end
|
|
|
|
if from_system
|
|
user = Discourse.system_user
|
|
else
|
|
user = Discourse.site_contact_user
|
|
target_group_names =
|
|
(
|
|
if Group.exists?(name: SiteSetting.site_contact_group_name)
|
|
SiteSetting.site_contact_group_name
|
|
else
|
|
nil
|
|
end
|
|
)
|
|
end
|
|
|
|
post_creator_args = [
|
|
user,
|
|
title: title,
|
|
raw: raw,
|
|
archetype: Archetype.private_message,
|
|
target_usernames: @recipient.username,
|
|
target_group_names: target_group_names,
|
|
subtype: TopicSubtype.system_message,
|
|
skip_validations: true,
|
|
post_alert_options: params[:post_alert_options],
|
|
]
|
|
|
|
DiscourseEvent.trigger(
|
|
:before_system_message_sent,
|
|
message_type: type,
|
|
recipient: @recipient,
|
|
post_creator_args: post_creator_args,
|
|
params: method_params,
|
|
)
|
|
|
|
creator = PostCreator.new(*post_creator_args)
|
|
|
|
post = I18n.with_locale(@recipient.effective_locale) { creator.create }
|
|
|
|
DiscourseEvent.trigger(
|
|
:system_message_sent,
|
|
post: post,
|
|
message_type: type,
|
|
recipient: @recipient,
|
|
)
|
|
|
|
raise StandardError, creator.errors.full_messages.join(" ") if creator.errors.present?
|
|
|
|
unless from_system
|
|
UserArchivedMessage.create!(user: Discourse.site_contact_user, topic: post.topic)
|
|
end
|
|
|
|
post
|
|
end
|
|
|
|
def defaults
|
|
{
|
|
site_name: SiteSetting.title,
|
|
username: @recipient.username,
|
|
name: @recipient.name,
|
|
name_or_username: @recipient.name.presence || @recipient.username,
|
|
user_preferences_url: "#{@recipient.full_url}/preferences",
|
|
new_user_tips:
|
|
I18n.with_locale(@recipient.effective_locale) do
|
|
I18n.t("system_messages.usage_tips.text_body_template", base_url: Discourse.base_url)
|
|
end,
|
|
site_password: "",
|
|
base_url: Discourse.base_url,
|
|
email_preview: "",
|
|
}
|
|
end
|
|
end
|