discourse/app/mailers/user_notifications.rb

102 lines
3.3 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
require_dependency 'markdown_linker'
2013-06-11 03:33:37 +08:00
require_dependency 'email/builder'
2013-02-06 03:16:51 +08:00
class UserNotifications < ActionMailer::Base
2013-04-26 14:56:28 +08:00
default charset: 'UTF-8'
2013-06-11 03:33:37 +08:00
include Email::Builder
2013-02-06 03:16:51 +08:00
def signup(user, opts={})
build_email(user.email, "user_notifications.signup", email_token: opts[:email_token])
end
def signup_after_approval(user, opts={})
build_email(
user.email,
'user_notifications.signup_after_approval',
email_token: opts[:email_token],
new_user_tips: SiteContent.content_for(:usage_tips)
)
end
2013-02-06 03:16:51 +08:00
def authorize_email(user, opts={})
build_email(user.email, "user_notifications.authorize_email", email_token: opts[:email_token])
end
def forgot_password(user, opts={})
build_email(user.email, "user_notifications.forgot_password", email_token: opts[:email_token])
end
def private_message(user, opts={})
post = opts[:post]
build_email user.email,
"user_notifications.private_message",
message: post.raw,
url: post.url,
subject_prefix: "[#{I18n.t('private_message_abbrev')}] #{post.post_number != 1 ? 're: ' : ''}",
2013-02-06 03:16:51 +08:00
topic_title: post.topic.title,
private_message_from: post.user.name,
from: "#{I18n.t(:via, username: post.user.name, site_name: SiteSetting.title)} <#{SiteSetting.notification_email}>",
2013-02-06 03:16:51 +08:00
add_unsubscribe_link: true
end
def digest(user, opts={})
@user = user
@base_url = Discourse.base_url
min_date = opts[:since] || @user.last_emailed_at || @user.last_seen_at || 1.month.ago
2013-02-06 03:16:51 +08:00
@site_name = SiteSetting.title
@last_seen_at = I18n.l(@user.last_seen_at || @user.created_at, format: :short)
2013-02-07 23:45:24 +08:00
# A list of topics to show the user
@new_topics = Topic.for_digest(user, min_date)
2013-02-06 03:16:51 +08:00
@markdown_linker = MarkdownLinker.new(Discourse.base_url)
# Don't send email unless there is content in it
if @new_topics.present?
2013-02-07 23:45:24 +08:00
mail to: user.email,
from: "#{I18n.t('user_notifications.digest.from', site_name: SiteSetting.title)} <#{SiteSetting.notification_email}>",
2013-02-06 03:16:51 +08:00
subject: I18n.t('user_notifications.digest.subject_template',
site_name: @site_name,
date: I18n.l(Time.now, format: :short))
2013-02-06 03:16:51 +08:00
end
end
2013-02-07 23:45:24 +08:00
2013-02-06 03:16:51 +08:00
def notification_template(user, opts)
@notification = opts[:notification]
return unless @notification.present?
@post = opts[:post]
return unless @post.present?
2013-02-28 07:30:14 +08:00
username = @notification.data_hash[:display_username]
2013-03-01 20:07:44 +08:00
notification_type = Notification.types[opts[:notification].notification_type].to_s
2013-02-28 07:30:14 +08:00
email_opts = {
topic_title: @notification.data_hash[:topic_title],
message: @post.raw,
url: @post.url,
username: username,
add_unsubscribe_link: true
}
# If we have a display name, change the from address
if username.present?
aliased = I18n.t(:via, username: username, site_name: SiteSetting.title)
email_opts[:from] = "#{aliased} <#{SiteSetting.notification_email}>"
2013-02-28 07:30:14 +08:00
end
email = build_email user.email, "user_notifications.user_#{notification_type}", email_opts
2013-02-07 23:45:24 +08:00
end
2013-02-28 07:30:14 +08:00
2013-02-06 03:16:51 +08:00
alias :user_invited_to_private_message :notification_template
alias :user_replied :notification_template
alias :user_quoted :notification_template
alias :user_mentioned :notification_template
alias :user_posted :notification_template
2013-02-06 03:16:51 +08:00
end