docbrown/app/controllers/notifications_controller.rb
Andy Zhao 92cea23fcd Fix a few notification bugs (#1232)
* Remove notifications synchronously on unpublish and destroy

* Asynchronously remove reaction notifications for article

* Remove all associated notifications when destroyed

* Fix edge case for reaction notifications

* Load new comment_box file instead of old one

* Delete legacy views

* Remove unused private declaration

* Use casecmp.zero? instead of downcase for speed, and use @user

* Add friendly error message for notifications

* Use delete all and not destroy b/c no callbacks
2018-12-03 12:35:35 -05:00

35 lines
1.7 KiB
Ruby

class NotificationsController < ApplicationController
# No authorization required because we provide authentication on notifications page
def index
if user_signed_in?
@notifications_index = true
@user = if params[:username] && current_user.admin?
User.find_by_username(params[:username])
else
current_user
end
if params[:page]
num = 45
notified_at_offset = Notification.find(params[:page])&.notified_at
else
num = 10
end
@notifications = if params[:filter].to_s.casecmp("posts").zero?
Notification.where(user_id: @user.id, notifiable_type: "Article", action: "Published").
order("notified_at DESC")
elsif params[:filter].to_s.casecmp("comments").zero?
Notification.where(user_id: @user.id, notifiable_type: "Comment", action: nil). # Nil action means not reaction in this context
or(Notification.where(user_id: @user.id, notifiable_type: "Mention")).
order("notified_at DESC")
else
Notification.where(user_id: @user.id).
order("notified_at DESC")
end
@last_user_reaction = @user.reactions.last&.id
@last_user_comment = @user.comments.last&.id
@notifications = @notifications.where("notified_at < ?", notified_at_offset) if notified_at_offset
@notifications = NotificationDecorator.decorate_collection(@notifications.limit(num))
render partial: "notifications_list" if notified_at_offset
end
end
end