# 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