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(