discourse/app/models/user_email_observer.rb

79 lines
2.9 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_private_message(notification)
return unless (notification.user.email_direct? && notification.user.email_private_messages?)
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
:user_email,
type: :user_private_message,
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