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 @@ | @@ -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 @@ | @@ -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,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,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,7 +86,7 @@ class IssuesController < ProjectResourceController | ||
86 | end | 86 | end |
87 | 87 | ||
88 | def bulk_update | 88 | def bulk_update |
89 | - result = IssuesBulkUpdateContext.new(project, current_user, params).execute | 89 | + result = Issues::BulkUpdateContext.new(project, current_user, params).execute |
90 | redirect_to :back, notice: "#{result[:count]} issues updated" | 90 | redirect_to :back, notice: "#{result[:count]} issues updated" |
91 | end | 91 | end |
92 | 92 | ||
@@ -109,6 +109,6 @@ class IssuesController < ProjectResourceController | @@ -109,6 +109,6 @@ class IssuesController < ProjectResourceController | ||
109 | end | 109 | end |
110 | 110 | ||
111 | def issues_filtered | 111 | def issues_filtered |
112 | - @issues = IssuesListContext.new(project, current_user, params).execute | 112 | + @issues = Issues::ListContext.new(project, current_user, params).execute |
113 | end | 113 | end |
114 | end | 114 | end |