Commit d32c19b2d969091ee3020620c46e39a558d406e1
1 parent
72d5a566
Exists in
master
and in
4 other branches
Fix bulk issue status update
Showing
5 changed files
with
70 additions
and
56 deletions
Show diff stats
... | ... | @@ -0,0 +1,36 @@ |
1 | +module Issues | |
2 | + class BulkUpdateContext < BaseContext | |
3 | + def execute | |
4 | + update_data = params[:update] | |
5 | + | |
6 | + issues_ids = update_data[:issues_ids].split(",") | |
7 | + milestone_id = update_data[:milestone_id] | |
8 | + assignee_id = update_data[:assignee_id] | |
9 | + status = update_data[:status] | |
10 | + | |
11 | + opts = {} | |
12 | + opts[:milestone_id] = milestone_id if milestone_id.present? | |
13 | + opts[:assignee_id] = assignee_id if assignee_id.present? | |
14 | + | |
15 | + issues = Issue.where(id: issues_ids).all | |
16 | + issues = issues.select { |issue| can?(current_user, :modify_issue, issue) } | |
17 | + | |
18 | + issues.each do |issue| | |
19 | + issue.update_attributes(opts) | |
20 | + | |
21 | + if status.present? | |
22 | + if status == 'closed' | |
23 | + issue.close | |
24 | + else | |
25 | + issue.reopen | |
26 | + end | |
27 | + end | |
28 | + end | |
29 | + | |
30 | + { | |
31 | + count: issues.count, | |
32 | + success: !issues.count.zero? | |
33 | + } | |
34 | + end | |
35 | + end | |
36 | +end | ... | ... |
... | ... | @@ -0,0 +1,32 @@ |
1 | +module Issues | |
2 | + class ListContext < BaseContext | |
3 | + include IssuesHelper | |
4 | + | |
5 | + attr_accessor :issues | |
6 | + | |
7 | + def execute | |
8 | + @issues = case params[:status] | |
9 | + when issues_filter[:all] then @project.issues | |
10 | + when issues_filter[:closed] then @project.issues.closed | |
11 | + when issues_filter[:to_me] then @project.issues.assigned(current_user) | |
12 | + when issues_filter[:by_me] then @project.issues.authored(current_user) | |
13 | + else @project.issues.opened | |
14 | + end | |
15 | + | |
16 | + @issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present? | |
17 | + @issues = @issues.includes(:author, :project) | |
18 | + | |
19 | + # Filter by specific assignee_id (or lack thereof)? | |
20 | + if params[:assignee_id].present? | |
21 | + @issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id])) | |
22 | + end | |
23 | + | |
24 | + # Filter by specific milestone_id (or lack thereof)? | |
25 | + if params[:milestone_id].present? | |
26 | + @issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id])) | |
27 | + end | |
28 | + | |
29 | + @issues | |
30 | + end | |
31 | + end | |
32 | +end | ... | ... |
app/contexts/issues_bulk_update_context.rb
... | ... | @@ -1,24 +0,0 @@ |
1 | -class IssuesBulkUpdateContext < BaseContext | |
2 | - def execute | |
3 | - update_data = params[:update] | |
4 | - | |
5 | - issues_ids = update_data[:issues_ids].split(",") | |
6 | - milestone_id = update_data[:milestone_id] | |
7 | - assignee_id = update_data[:assignee_id] | |
8 | - status = update_data[:status] | |
9 | - | |
10 | - opts = {} | |
11 | - opts[:milestone_id] = milestone_id if milestone_id.present? | |
12 | - opts[:assignee_id] = assignee_id if assignee_id.present? | |
13 | - opts[:closed] = (status == "closed") if status.present? | |
14 | - | |
15 | - issues = Issue.where(id: issues_ids).all | |
16 | - issues = issues.select { |issue| can?(current_user, :modify_issue, issue) } | |
17 | - issues.each { |issue| issue.update_attributes(opts) } | |
18 | - { | |
19 | - count: issues.count, | |
20 | - success: !issues.count.zero? | |
21 | - } | |
22 | - end | |
23 | -end | |
24 | - |
app/contexts/issues_list_context.rb
... | ... | @@ -1,30 +0,0 @@ |
1 | -class IssuesListContext < BaseContext | |
2 | - include IssuesHelper | |
3 | - | |
4 | - attr_accessor :issues | |
5 | - | |
6 | - def execute | |
7 | - @issues = case params[:status] | |
8 | - when issues_filter[:all] then @project.issues | |
9 | - when issues_filter[:closed] then @project.issues.closed | |
10 | - when issues_filter[:to_me] then @project.issues.assigned(current_user) | |
11 | - when issues_filter[:by_me] then @project.issues.authored(current_user) | |
12 | - else @project.issues.opened | |
13 | - end | |
14 | - | |
15 | - @issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present? | |
16 | - @issues = @issues.includes(:author, :project) | |
17 | - | |
18 | - # Filter by specific assignee_id (or lack thereof)? | |
19 | - if params[:assignee_id].present? | |
20 | - @issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id])) | |
21 | - end | |
22 | - | |
23 | - # Filter by specific milestone_id (or lack thereof)? | |
24 | - if params[:milestone_id].present? | |
25 | - @issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id])) | |
26 | - end | |
27 | - | |
28 | - @issues | |
29 | - end | |
30 | -end |
app/controllers/issues_controller.rb
... | ... | @@ -86,7 +86,7 @@ class IssuesController < ProjectResourceController |
86 | 86 | end |
87 | 87 | |
88 | 88 | def bulk_update |
89 | - result = IssuesBulkUpdateContext.new(project, current_user, params).execute | |
89 | + result = Issues::BulkUpdateContext.new(project, current_user, params).execute | |
90 | 90 | redirect_to :back, notice: "#{result[:count]} issues updated" |
91 | 91 | end |
92 | 92 | |
... | ... | @@ -109,6 +109,6 @@ class IssuesController < ProjectResourceController |
109 | 109 | end |
110 | 110 | |
111 | 111 | def issues_filtered |
112 | - @issues = IssuesListContext.new(project, current_user, params).execute | |
112 | + @issues = Issues::ListContext.new(project, current_user, params).execute | |
113 | 113 | end |
114 | 114 | end | ... | ... |