otwarchive-symphonyarchive/app/controllers/inbox_controller.rb
2026-03-11 22:22:11 +00:00

75 lines
2.3 KiB
Ruby

class InboxController < ApplicationController
include BlockHelper
before_action :load_user
before_action :check_ownership_or_admin
before_action :load_commentable, only: :reply
before_action :check_blocked, only: :reply
def load_user
@user = User.find_by(login: params[:user_id])
@check_ownership_of = @user
end
def show
authorize InboxComment if logged_in_as_admin?
@page_subtitle = t(".page_title", user: @user.login)
@inbox_total = @user.inbox_comments.with_bad_comments_removed.count
@unread = @user.inbox_comments.with_bad_comments_removed.count_unread
@filters = filter_params[:filters] || {}
@inbox_comments = @user.inbox_comments.with_bad_comments_removed.find_by_filters(@filters).page(params[:page])
end
def reply
@comment = Comment.new
respond_to do |format|
format.html do
redirect_to comment_path(@commentable, add_comment_reply_id: @commentable.id, anchor: 'comment_' + @commentable.id.to_s)
end
format.js
end
end
def update
authorize InboxComment if logged_in_as_admin?
begin
@inbox_comments = InboxComment.find(params[:inbox_comments])
if params[:read]
@inbox_comments.each { |i| i.update_attribute(:read, true) }
elsif params[:unread]
@inbox_comments.each { |i| i.update_attribute(:read, false) }
elsif params[:delete]
@inbox_comments.each { |i| i.destroy }
end
success_message = t(".success")
rescue
flash[:caution] = t(".must_select_item")
end
respond_to do |format|
format.html { redirect_to request.referer || user_inbox_path(@user, page: params[:page], filters: params[:filters]), notice: success_message }
format.json { render json: { item_success_message: success_message }, status: :ok }
end
end
private
# Allow flexible params through, since we're not posting any data
def filter_params
params.permit!
end
def load_commentable
@commentable = Comment.find(params[:comment_id])
end
def check_blocked
if blocked_by?(@commentable.ultimate_parent)
flash[:error] = t("comments.check_blocked.parent")
redirect_back(fallback_location: user_inbox_path(@user))
elsif blocked_by_comment?(@commentable)
flash[:error] = t("comments.check_blocked.reply")
redirect_back(fallback_location: user_inbox_path(@user))
end
end
end