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 |