2013-02-05 14:16:51 -05:00
|
|
|
class UserEmailObserver < ActiveRecord::Observer
|
|
|
|
observe :notification
|
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
class EmailUser
|
|
|
|
attr_reader :notification
|
2013-07-21 12:50:01 -04:00
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def initialize(notification)
|
|
|
|
@notification = notification
|
|
|
|
end
|
2013-08-07 13:02:49 -04:00
|
|
|
|
2015-11-30 01:03:47 -05:00
|
|
|
def group_mentioned
|
|
|
|
enqueue :group_mentioned
|
|
|
|
end
|
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def mentioned
|
|
|
|
enqueue :user_mentioned
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def posted
|
|
|
|
enqueue :user_posted
|
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def quoted
|
|
|
|
enqueue :user_quoted
|
|
|
|
end
|
|
|
|
|
|
|
|
def replied
|
|
|
|
enqueue :user_replied
|
|
|
|
end
|
|
|
|
|
2016-02-16 12:29:23 -05:00
|
|
|
def linked
|
|
|
|
enqueue :user_linked
|
|
|
|
end
|
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def private_message
|
2016-02-01 04:14:30 -05:00
|
|
|
enqueue_private(:user_private_message)
|
2013-08-24 07:21:39 -04:00
|
|
|
end
|
2013-02-27 15:38:44 -05:00
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def invited_to_private_message
|
2016-02-01 04:14:30 -05:00
|
|
|
enqueue(:user_invited_to_private_message, private_delay)
|
2013-08-24 07:21:39 -04:00
|
|
|
end
|
|
|
|
|
2015-03-30 14:36:47 -04:00
|
|
|
def invited_to_topic
|
2016-02-01 04:14:30 -05:00
|
|
|
enqueue(:user_invited_to_topic, private_delay)
|
2015-03-30 14:36:47 -04:00
|
|
|
end
|
|
|
|
|
2016-01-26 20:19:49 -05:00
|
|
|
def self.notification_params(notification, type)
|
|
|
|
post_id = (notification.data_hash[:original_post_id] || notification.post_id).to_i
|
|
|
|
|
|
|
|
hash = {
|
|
|
|
type: type,
|
|
|
|
user_id: notification.user_id,
|
|
|
|
notification_id: notification.id,
|
|
|
|
notification_data_hash: notification.data_hash,
|
|
|
|
notification_type: Notification.types[notification.notification_type],
|
|
|
|
}
|
|
|
|
|
|
|
|
hash[:post_id] = post_id if post_id > 0
|
|
|
|
hash
|
|
|
|
end
|
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
private
|
|
|
|
|
2016-01-18 19:39:57 -05:00
|
|
|
EMAILABLE_POST_TYPES ||= Set.new [Post.types[:regular], Post.types[:whisper]]
|
|
|
|
|
2015-11-27 13:09:35 -05:00
|
|
|
def enqueue(type, delay=default_delay)
|
2016-02-16 23:46:19 -05:00
|
|
|
return unless notification.user.user_option.email_direct?
|
2016-02-01 13:12:10 -05:00
|
|
|
perform_enqueue(type, delay)
|
2013-08-24 07:21:39 -04:00
|
|
|
end
|
|
|
|
|
2016-02-01 04:14:30 -05:00
|
|
|
def enqueue_private(type, delay=private_delay)
|
2016-02-16 23:46:19 -05:00
|
|
|
return unless notification.user.user_option.email_private_messages?
|
2016-02-01 13:12:10 -05:00
|
|
|
perform_enqueue(type, delay)
|
2016-01-26 20:19:49 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def perform_enqueue(type, delay)
|
2016-01-18 19:39:57 -05:00
|
|
|
return unless notification.user.active? || notification.user.staged?
|
2016-02-01 13:12:10 -05:00
|
|
|
return unless EMAILABLE_POST_TYPES.include?(post_type)
|
2015-06-09 03:35:26 -04:00
|
|
|
|
2016-01-26 20:19:49 -05:00
|
|
|
Jobs.enqueue_in(delay, :user_email, self.class.notification_params(notification, type))
|
2013-08-24 07:21:39 -04:00
|
|
|
end
|
2013-08-26 00:55:35 -04:00
|
|
|
|
2015-11-27 13:09:35 -05:00
|
|
|
def default_delay
|
2013-08-26 21:52:09 -04:00
|
|
|
SiteSetting.email_time_window_mins.minutes
|
2013-08-26 00:55:35 -04:00
|
|
|
end
|
2016-01-26 20:19:49 -05:00
|
|
|
|
2016-02-01 04:14:30 -05:00
|
|
|
def private_delay
|
2016-02-04 11:22:16 -05:00
|
|
|
SiteSetting.private_email_time_window_seconds
|
2016-02-01 04:14:30 -05:00
|
|
|
end
|
|
|
|
|
2016-02-01 13:12:10 -05:00
|
|
|
def post_type
|
|
|
|
@post_type ||= begin
|
|
|
|
type = notification.data_hash["original_post_type"] if notification.data_hash
|
|
|
|
type ||= notification.post.try(:post_type)
|
|
|
|
type
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
def after_commit(notification)
|
2014-02-17 11:44:28 -05:00
|
|
|
transaction_includes_action = notification.send(:transaction_include_any_action?, [:create])
|
2016-01-26 20:19:49 -05:00
|
|
|
self.class.process_notification(notification) if transaction_includes_action
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2016-01-26 20:19:49 -05:00
|
|
|
def self.process_notification(notification)
|
2013-08-24 07:21:39 -04:00
|
|
|
email_user = EmailUser.new(notification)
|
2016-01-26 20:19:49 -05:00
|
|
|
email_method = Notification.types[notification.notification_type]
|
2016-02-01 13:12:10 -05:00
|
|
|
|
2013-08-24 07:21:39 -04:00
|
|
|
email_user.send(email_method) if email_user.respond_to? email_method
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
2016-01-26 20:19:49 -05:00
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|