Commit 4b0fb02816e91eac09ce84c2383b0275b35aef97
1 parent
70fb26a6
Exists in
spb-stable
and in
3 other branches
Do not load all projects all the time.
Showing
1 changed file
with
20 additions
and
14 deletions
Show diff stats
app/services/filtering_service.rb
@@ -24,10 +24,10 @@ class FilteringService | @@ -24,10 +24,10 @@ class FilteringService | ||
24 | @current_user = current_user | 24 | @current_user = current_user |
25 | @params = params | 25 | @params = params |
26 | 26 | ||
27 | - items = by_scope | 27 | + items = init_collection |
28 | + items = by_scope(items) | ||
28 | items = by_state(items) | 29 | items = by_state(items) |
29 | items = by_group(items) | 30 | items = by_group(items) |
30 | - items = by_project(items) | ||
31 | items = by_search(items) | 31 | items = by_search(items) |
32 | items = by_milestone(items) | 32 | items = by_milestone(items) |
33 | items = by_assignee(items) | 33 | items = by_assignee(items) |
@@ -37,24 +37,30 @@ class FilteringService | @@ -37,24 +37,30 @@ class FilteringService | ||
37 | 37 | ||
38 | private | 38 | private |
39 | 39 | ||
40 | - def by_scope | 40 | + def init_collection |
41 | table_name = klass.table_name | 41 | table_name = klass.table_name |
42 | 42 | ||
43 | + return klass.of_projects(Project.public_only) unless current_user | ||
44 | + | ||
45 | + if project | ||
46 | + if current_user.can?(:read_project, project) | ||
47 | + project.send(table_name) | ||
48 | + else | ||
49 | + [] | ||
50 | + end | ||
51 | + else | ||
52 | + klass.of_projects(current_user.authorized_projects) | ||
53 | + end | ||
54 | + end | ||
55 | + | ||
56 | + def by_scope(items) | ||
43 | case params[:scope] | 57 | case params[:scope] |
44 | when 'created-by-me', 'authored' then | 58 | when 'created-by-me', 'authored' then |
45 | - current_user.send(table_name) | 59 | + klass.where(author_id: current_user.id) |
46 | when 'all' then | 60 | when 'all' then |
47 | - if current_user | ||
48 | - if project && (project.public? || project.internal?) | ||
49 | - klass.of_projects(Project.public_or_internal_only(current_user)) | ||
50 | - else | ||
51 | - klass.of_projects(current_user.authorized_projects.pluck(:id)) | ||
52 | - end | ||
53 | - else | ||
54 | - klass.of_projects(Project.public_only) | ||
55 | - end | 61 | + klass |
56 | when 'assigned-to-me' then | 62 | when 'assigned-to-me' then |
57 | - current_user.send("assigned_#{table_name}") | 63 | + klass.where(assignee_id: current_user.id) |
58 | else | 64 | else |
59 | raise 'You must specify default scope' | 65 | raise 'You must specify default scope' |
60 | end | 66 | end |