Commit d32c19b2d969091ee3020620c46e39a558d406e1

Authored by Dmitriy Zaporozhets
1 parent 72d5a566

Fix bulk issue status update

app/contexts/issues/bulk_update_context.rb 0 → 100644
@@ -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
app/contexts/issues/list_context.rb 0 → 100644
@@ -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 &lt; ProjectResourceController @@ -86,7 +86,7 @@ class IssuesController &lt; 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 &lt; ProjectResourceController @@ -109,6 +109,6 @@ class IssuesController &lt; 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