discourse/app/models/post_alert_observer.rb

59 lines
1.7 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
class PostAlertObserver < ActiveRecord::Observer
observe :post_action, :post_revision
def alerter
@alerter ||= PostAlerter.new
end
2013-02-06 03:16:51 +08: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 23:45:24 +08:00
end
2013-02-06 03:16:51 +08:00
def after_save_post_action(post_action)
# We only care about deleting post actions for now
return if post_action.deleted_at.blank?
Notification.where(post_action_id: post_action.id).each(&:destroy)
2013-02-06 03:16:51 +08: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 23:45:24 +08:00
return if post_action.user.blank?
2013-02-06 03:16:51 +08:00
alerter.create_notification(post.user,
2013-03-01 20:07:44 +08:00
Notification.types[:liked],
2013-02-07 23:45:24 +08:00
post,
2013-02-06 03:16:51 +08:00
display_username: post_action.user.username,
2013-02-07 23:45:24 +08:00
post_action_id: post_action.id)
2013-02-06 03:16:51 +08:00
end
2013-12-12 10:41:34 +08:00
def after_create_post_revision(post_revision)
post = post_revision.post
2013-02-06 03:16:51 +08:00
return unless post
2013-12-12 10:41:34 +08:00
return if post_revision.user.blank?
return if post_revision.user_id == post.user_id
2013-02-06 03:16:51 +08:00
return if post.topic.private_message?
alerter.create_notification(post.user, Notification.types[:edited], post, display_username: post_revision.user.username)
2013-02-06 03:16:51 +08:00
end
2013-02-07 23:45:24 +08:00
2013-02-06 03:16:51 +08:00
protected
def callback_for(action, model)
"#{action}_#{model.class.name.underscore.gsub(/.+\//, '')}"
end
end