mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 01:25:06 +08:00
69 lines
2.5 KiB
Ruby
69 lines
2.5 KiB
Ruby
class UserEmailObserver < ActiveRecord::Observer
|
|
observe :notification
|
|
|
|
def after_commit(notification)
|
|
if rails4?
|
|
if notification.send(:transaction_include_any_action?, [:create])
|
|
notification_type = Notification.types[notification.notification_type]
|
|
|
|
# Delegate to email_user_{{NOTIFICATION_TYPE}} if exists
|
|
email_method = :"email_user_#{notification_type.to_s}"
|
|
send(email_method, notification) if respond_to?(email_method)
|
|
end
|
|
else
|
|
if notification.send(:transaction_include_action?, :create)
|
|
notification_type = Notification.types[notification.notification_type]
|
|
|
|
# Delegate to email_user_{{NOTIFICATION_TYPE}} if exists
|
|
email_method = :"email_user_#{notification_type.to_s}"
|
|
send(email_method, notification) if respond_to?(email_method)
|
|
end
|
|
end
|
|
end
|
|
|
|
def email_user_mentioned(notification)
|
|
return unless notification.user.email_direct?
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
:user_email,
|
|
type: :user_mentioned,
|
|
user_id: notification.user_id,
|
|
notification_id: notification.id)
|
|
end
|
|
|
|
def email_user_posted(notification)
|
|
return unless notification.user.email_direct?
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
:user_email,
|
|
type: :user_posted,
|
|
user_id: notification.user_id,
|
|
notification_id: notification.id)
|
|
end
|
|
|
|
def email_user_quoted(notification)
|
|
return unless notification.user.email_direct?
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
:user_email,
|
|
type: :user_quoted,
|
|
user_id: notification.user_id,
|
|
notification_id: notification.id)
|
|
end
|
|
|
|
def email_user_replied(notification)
|
|
return unless notification.user.email_direct?
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
:user_email,
|
|
type: :user_replied,
|
|
user_id: notification.user_id,
|
|
notification_id: notification.id)
|
|
end
|
|
|
|
def email_user_invited_to_private_message(notification)
|
|
return unless notification.user.email_direct?
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
:user_email,
|
|
type: :user_invited_to_private_message,
|
|
user_id: notification.user_id,
|
|
notification_id: notification.id)
|
|
end
|
|
end
|