2013-02-05 13:16:51 -06:00
|
|
|
class PostAlertObserver < ActiveRecord::Observer
|
2014-03-17 21:12:07 -05:00
|
|
|
observe :post_action, :post_revision
|
|
|
|
|
|
|
|
def alerter
|
|
|
|
@alerter ||= PostAlerter.new
|
|
|
|
end
|
2013-02-05 13:16:51 -06:00
|
|
|
|
|
|
|
# Dispatch to an after_save_#{class_name} method
|
|
|
|
def after_save(model)
|
|
|
|
method_name = callback_for('after_save', model)
|
|
|
|
send(method_name, model) if respond_to?(method_name)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Dispatch to an after_create_#{class_name} method
|
|
|
|
def after_create(model)
|
|
|
|
method_name = callback_for('after_create', model)
|
|
|
|
send(method_name, model) if respond_to?(method_name)
|
2013-02-07 09:45:24 -06:00
|
|
|
end
|
2013-02-05 13:16:51 -06:00
|
|
|
|
|
|
|
def after_save_post_action(post_action)
|
|
|
|
# We only care about deleting post actions for now
|
2013-02-28 12:54:12 -06:00
|
|
|
return if post_action.deleted_at.blank?
|
|
|
|
Notification.where(post_action_id: post_action.id).each(&:destroy)
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
def after_create_post_action(post_action)
|
|
|
|
# We only notify on likes for now
|
|
|
|
return unless post_action.is_like?
|
|
|
|
|
|
|
|
post = post_action.post
|
2013-02-07 09:45:24 -06:00
|
|
|
return if post_action.user.blank?
|
2013-02-05 13:16:51 -06:00
|
|
|
|
2014-10-27 16:06:43 -05:00
|
|
|
alerter.create_notification(
|
|
|
|
post.user,
|
|
|
|
Notification.types[:liked],
|
|
|
|
post,
|
|
|
|
display_username: post_action.user.username,
|
|
|
|
post_action_id: post_action.id
|
|
|
|
)
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
|
|
|
|
2013-12-11 20:41:34 -06:00
|
|
|
def after_create_post_revision(post_revision)
|
|
|
|
post = post_revision.post
|
2013-02-05 13:16:51 -06:00
|
|
|
|
2014-01-06 01:12:51 -06:00
|
|
|
return unless post
|
2013-12-11 20:41:34 -06:00
|
|
|
return if post_revision.user.blank?
|
|
|
|
return if post_revision.user_id == post.user_id
|
2013-02-05 13:16:51 -06:00
|
|
|
return if post.topic.private_message?
|
2014-09-09 11:56:04 -05:00
|
|
|
return if SiteSetting.disable_edit_notifications && post_revision.user_id == Discourse::SYSTEM_USER_ID
|
2013-02-05 13:16:51 -06:00
|
|
|
|
2014-10-06 23:57:48 -05:00
|
|
|
alerter.create_notification(
|
|
|
|
post.user,
|
|
|
|
Notification.types[:edited],
|
|
|
|
post,
|
2014-10-27 16:06:43 -05:00
|
|
|
display_username: post_revision.user.username,
|
|
|
|
acting_user_id: post_revision.try(:user_id)
|
2014-10-06 23:57:48 -05:00
|
|
|
)
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
2013-02-07 09:45:24 -06:00
|
|
|
|
2013-02-05 13:16:51 -06:00
|
|
|
protected
|
|
|
|
|
|
|
|
def callback_for(action, model)
|
|
|
|
"#{action}_#{model.class.name.underscore.gsub(/.+\//, '')}"
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|