From dab75d5aec5520aa1557b37b55752f89e1a1fef1 Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Tue, 26 Mar 2019 17:24:30 +0100 Subject: [PATCH] Fix duplicated projects in new report modal [SCI-3173] --- app/controllers/reports_controller.rb | 2 +- app/models/project.rb | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index f8100c012..d156ecf15 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -451,7 +451,7 @@ class ReportsController < ApplicationController def load_visible_projects render_404 unless current_team - projects = current_team.projects.visible_from_user_by_name( + projects = Project.visible_from_user_by_name( current_user, current_team, search_params[:q] ).limit(Constants::SEARCH_LIMIT).select(:id, :name) @visible_projects = projects.collect do |project| diff --git a/app/models/project.rb b/app/models/project.rb index 2a4522ab5..76ca7935b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -54,14 +54,15 @@ class Project < ApplicationRecord scope :templates, -> { where(template: true) } def self.visible_from_user_by_name(user, team, name) - if user.is_admin_of_team? team - return where('projects.archived IS FALSE AND projects.name ILIKE ?', - "%#{name}%") + projects = where(team: team).distinct + if user.is_admin_of_team?(team) + projects.where('projects.archived IS FALSE AND projects.name ILIKE ?', "%#{name}%") + else + projects.joins(:user_projects) + .where('user_projects.user_id = ? OR projects.visibility = 1', user.id) + .where('projects.archived IS FALSE AND projects.name ILIKE ?', + "%#{name}%") end - joins(:user_projects) - .where('user_projects.user_id = ? OR projects.visibility = 1', user.id) - .where('projects.archived IS FALSE AND projects.name ILIKE ?', - "%#{name}%") end def self.search(