discourse/app/controllers/post_action_users_controller.rb
Martin Brennan 3894ee6cb6
DEV: Add post_action_users_list modifier for PostActionUsersController ()
This commit adds another plugin modifier related to post
actions, similar to ae24e04a5e.

This will be used to exclude users who liked _and_ reacted to
the post, since now in discourse-reactions we make a Like when
a user reacts too. This will affect the display of the post footer.
2024-02-20 09:48:09 +10:00

62 lines
1.8 KiB
Ruby

# frozen_string_literal: true
class PostActionUsersController < ApplicationController
INDEX_LIMIT = 200
def index
params.require(:post_action_type_id)
params.require(:id)
post_action_type_id = params[:post_action_type_id].to_i
page = params[:page].to_i
page_size = fetch_limit_from_params(default: INDEX_LIMIT, max: INDEX_LIMIT)
# Find the post, and then determine if they can see the post (if deleted)
post = Post.with_deleted.find_by(id: params[:id].to_i)
guardian.ensure_can_see!(post)
post_actions =
post
.post_actions
.where(post_action_type_id: post_action_type_id)
.includes(:user)
.offset(page * page_size)
.order("post_actions.created_at ASC")
.limit(page_size)
post_actions =
DiscoursePluginRegistry.apply_modifier(:post_action_users_list, post_actions, post)
if !guardian.can_see_post_actors?(post.topic, post_action_type_id)
raise Discourse::InvalidAccess if current_user.blank?
post_actions = post_actions.where(user_id: current_user.id)
end
action_type = PostActionType.types.key(post_action_type_id)
total_count = post["#{action_type}_count"].to_i
post_actions = post_actions.to_a
data = {
post_action_users:
serialize_data(
post_actions,
PostActionUserSerializer,
unknown_user_ids: current_user_muting_or_ignoring_users(post_actions.map(&:user_id)),
),
}
data[:total_rows_post_action_users] = total_count if total_count > page_size
render_json_dump(data)
end
private
def current_user_muting_or_ignoring_users(user_ids)
return [] if current_user.blank?
UserCommScreener.new(
acting_user: current_user,
target_user_ids: user_ids,
).actor_preventing_communication
end
end