summaryrefslogtreecommitdiff
path: root/app/controllers/search_controller.rb
blob: 8104f3d077c5170d9e4dc7a684e62ae44479f8f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class SearchController < ApplicationController
  def show
    project_id = params[:project_id]
    group_id = params[:group_id]

    project_ids = find_project_ids(group_id, project_id)

    result = SearchContext.new(project_ids, params).execute

    @projects       = result[:projects]
    @merge_requests = result[:merge_requests]
    @issues         = result[:issues]
    @wiki_pages     = result[:wiki_pages]
    @blobs          = Kaminari.paginate_array(result[:blobs]).page(params[:page]).per(20)
    @total_results = @projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.total_count
  end

  def find_project_ids(group_id, project_id)
    project_ids = current_user.authorized_projects.map(&:id)

    if group_id.present?
      @group = Group.find(group_id)
      group_project_ids = @group.projects.map(&:id)
      project_ids.select! { |id| group_project_ids.include?(id) }
    elsif project_id.present?
      @project = Project.find(project_id)
      project_ids = @project.public ? [@project.id] : project_ids.select { |id| id == project_id.to_i }
    end
    project_ids
  end
end