diff --git a/app/controllers/at_who_controller.rb b/app/controllers/at_who_controller.rb index 805d0bc7b..f6a801d11 100644 --- a/app/controllers/at_who_controller.rb +++ b/app/controllers/at_who_controller.rb @@ -29,13 +29,18 @@ class AtWhoController < ApplicationController else Repository.active.accessible_by_teams(@team).first end + + items = [] + repository_id = nil + if repository && can_read_repository?(repository) + assignable_my_module = + if params[:assignable_my_module_id].present? + MyModule.viewable_by_user(current_user, @team).find_by(id: params[:assignable_my_module_id]) + end items = SmartAnnotation.new(current_user, current_team, @query) - .repository_rows(repository, params[:assignable_my_module_id]) + .repository_rows(repository, assignable_my_module&.id) repository_id = repository.id - else - items = [] - repository_id = nil end render json: { res: [ diff --git a/app/services/activities/activity_filter_matching_service.rb b/app/services/activities/activity_filter_matching_service.rb index 93eba70e8..a2785ba07 100644 --- a/app/services/activities/activity_filter_matching_service.rb +++ b/app/services/activities/activity_filter_matching_service.rb @@ -43,34 +43,40 @@ module Activities def filter_users! @activity_filters = @activity_filters.where( - "NOT(filter ? 'users') OR filter -> 'users' @> '\"#{@activity.owner_id}\"'" + "NOT(filter ? 'users') OR filter -> 'users' @> '\":owner_id\"'", owner_id: @activity.owner_id ) end def filter_types! @activity_filters = @activity_filters.where( - "NOT(filter ? 'types') OR filter -> 'types' @> '\"#{@activity.type_of_before_type_cast}\"'" + "NOT(filter ? 'types') OR filter -> 'types' @> '\":type_of\"'", type_of: @activity.type_of_before_type_cast ) end def filter_teams! @activity_filters = @activity_filters.where( - "NOT(filter ? 'teams') OR filter -> 'teams' @> '\"#{@activity.team_id}\"'" + "NOT(filter ? 'teams') OR filter -> 'teams' @> '\":team_id\"'", team_id: @activity.team_id ) end def filter_subjects! parents = activity_subject_parents + filtered_by_subject = @activity_filters - @activity_filters = @activity_filters.where( - "NOT(filter ? 'subjects') OR "\ - "filter -> 'subjects' -> 'Project' @> '\"#{@activity.project_id}\"' OR "\ - "filter -> 'subjects' -> '#{@activity.subject_type}' @> '\"#{@activity.subject_id}\"'" + - (parents.any? ? ' OR ' : '') + - parents.map do |subject| - "filter -> 'subjects' -> '#{subject.class}' @> '\"#{subject.id}\"'" - end.join(' OR ') - ) + filtered_by_subject = + @activity_filters + .where("NOT(filter ? 'subjects')") + .or(@activity_filters.where("filter -> 'subjects' -> 'Project' @> '\":subject_id\"'", + subject_id: @activity.project_id)) + .or(@activity_filters.where("filter -> 'subjects' -> :subject_type @> '\":subject_id\"'", + subject_type: @activity.subject_type, subject_id: @activity.subject_id)) + parents.each do |parent| + filtered_by_subject = + filtered_by_subject + .or(@activity_filters.where("filter -> 'subjects' -> :subject_type @> '\":subject_id\"'", + subject_type: parent.class, subject_id: parent.id)) + end + @activity_filters = filtered_by_subject end def activity_subject_parents diff --git a/app/utilities/smart_annotation.rb b/app/utilities/smart_annotation.rb index e5a69c3bf..4cc3e24f5 100644 --- a/app/utilities/smart_annotation.rb +++ b/app/utilities/smart_annotation.rb @@ -36,18 +36,18 @@ class SmartAnnotation end def repository_rows(repository, my_module_id) - res = RepositoryRow + res = repository + .repository_rows .active - .where(repository: repository) .search_by_name_and_id(@current_user, @current_team, @query) .limit(Constants::ATWHO_SEARCH_LIMIT + 1) if my_module_id.present? - res = res.joins('LEFT OUTER JOIN "my_module_repository_rows" "current_my_module_repository_rows"'\ - 'ON "current_my_module_repository_rows"."repository_row_id" = "repository_rows"."id" '\ - 'AND "current_my_module_repository_rows"."my_module_id" = ' + my_module_id.to_s) + res = res.joins('LEFT OUTER JOIN "my_module_repository_rows" "current_my_module_repository_rows" ' \ + 'ON "current_my_module_repository_rows"."repository_row_id" = "repository_rows"."id" ' \ + 'AND "current_my_module_repository_rows"."my_module_id" = ' + Integer(my_module_id).to_s) .select('repository_rows.*', - 'CASE WHEN current_my_module_repository_rows.id IS NOT NULL '\ + 'CASE WHEN current_my_module_repository_rows.id IS NOT NULL ' \ 'THEN true ELSE false END as row_assigned') end rep_items_list = []