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 @@
  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 @@
  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 &lt; 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 &lt; 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
... ...