From d32c19b2d969091ee3020620c46e39a558d406e1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 14 May 2013 14:34:34 +0300 Subject: [PATCH] Fix bulk issue status update --- app/contexts/issues/bulk_update_context.rb | 36 ++++++++++++++++++++++ app/contexts/issues/list_context.rb | 32 +++++++++++++++++++ app/contexts/issues_bulk_update_context.rb | 24 --------------- app/contexts/issues_list_context.rb | 30 ------------------ app/controllers/issues_controller.rb | 4 +-- 5 files changed, 70 insertions(+), 56 deletions(-) create mode 100644 app/contexts/issues/bulk_update_context.rb create mode 100644 app/contexts/issues/list_context.rb delete mode 100644 app/contexts/issues_bulk_update_context.rb delete mode 100644 app/contexts/issues_list_context.rb diff --git a/app/contexts/issues/bulk_update_context.rb b/app/contexts/issues/bulk_update_context.rb new file mode 100644 index 00000000000..e92264a8bb1 --- /dev/null +++ b/app/contexts/issues/bulk_update_context.rb @@ -0,0 +1,36 @@ +module Issues + class BulkUpdateContext < BaseContext + def execute + update_data = params[:update] + + issues_ids = update_data[:issues_ids].split(",") + milestone_id = update_data[:milestone_id] + assignee_id = update_data[:assignee_id] + status = update_data[:status] + + opts = {} + opts[:milestone_id] = milestone_id if milestone_id.present? + opts[:assignee_id] = assignee_id if assignee_id.present? + + issues = Issue.where(id: issues_ids).all + issues = issues.select { |issue| can?(current_user, :modify_issue, issue) } + + issues.each do |issue| + issue.update_attributes(opts) + + if status.present? + if status == 'closed' + issue.close + else + issue.reopen + end + end + end + + { + count: issues.count, + success: !issues.count.zero? + } + end + end +end diff --git a/app/contexts/issues/list_context.rb b/app/contexts/issues/list_context.rb new file mode 100644 index 00000000000..a35bddd6443 --- /dev/null +++ b/app/contexts/issues/list_context.rb @@ -0,0 +1,32 @@ +module Issues + class ListContext < BaseContext + include IssuesHelper + + attr_accessor :issues + + def execute + @issues = case params[:status] + when issues_filter[:all] then @project.issues + when issues_filter[:closed] then @project.issues.closed + when issues_filter[:to_me] then @project.issues.assigned(current_user) + when issues_filter[:by_me] then @project.issues.authored(current_user) + else @project.issues.opened + end + + @issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present? + @issues = @issues.includes(:author, :project) + + # Filter by specific assignee_id (or lack thereof)? + if params[:assignee_id].present? + @issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id])) + end + + # Filter by specific milestone_id (or lack thereof)? + if params[:milestone_id].present? + @issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id])) + end + + @issues + end + end +end diff --git a/app/contexts/issues_bulk_update_context.rb b/app/contexts/issues_bulk_update_context.rb deleted file mode 100644 index 7981259d73d..00000000000 --- a/app/contexts/issues_bulk_update_context.rb +++ /dev/null @@ -1,24 +0,0 @@ -class IssuesBulkUpdateContext < BaseContext - def execute - update_data = params[:update] - - issues_ids = update_data[:issues_ids].split(",") - milestone_id = update_data[:milestone_id] - assignee_id = update_data[:assignee_id] - status = update_data[:status] - - opts = {} - opts[:milestone_id] = milestone_id if milestone_id.present? - opts[:assignee_id] = assignee_id if assignee_id.present? - opts[:closed] = (status == "closed") if status.present? - - issues = Issue.where(id: issues_ids).all - issues = issues.select { |issue| can?(current_user, :modify_issue, issue) } - issues.each { |issue| issue.update_attributes(opts) } - { - count: issues.count, - success: !issues.count.zero? - } - end -end - diff --git a/app/contexts/issues_list_context.rb b/app/contexts/issues_list_context.rb deleted file mode 100644 index 0765b30c354..00000000000 --- a/app/contexts/issues_list_context.rb +++ /dev/null @@ -1,30 +0,0 @@ -class IssuesListContext < BaseContext - include IssuesHelper - - attr_accessor :issues - - def execute - @issues = case params[:status] - when issues_filter[:all] then @project.issues - when issues_filter[:closed] then @project.issues.closed - when issues_filter[:to_me] then @project.issues.assigned(current_user) - when issues_filter[:by_me] then @project.issues.authored(current_user) - else @project.issues.opened - end - - @issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present? - @issues = @issues.includes(:author, :project) - - # Filter by specific assignee_id (or lack thereof)? - if params[:assignee_id].present? - @issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id])) - end - - # Filter by specific milestone_id (or lack thereof)? - if params[:milestone_id].present? - @issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id])) - end - - @issues - end -end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 242bc90d28f..ba92ba2bdae 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -86,7 +86,7 @@ class IssuesController < ProjectResourceController end def bulk_update - result = IssuesBulkUpdateContext.new(project, current_user, params).execute + result = Issues::BulkUpdateContext.new(project, current_user, params).execute redirect_to :back, notice: "#{result[:count]} issues updated" end @@ -109,6 +109,6 @@ class IssuesController < ProjectResourceController end def issues_filtered - @issues = IssuesListContext.new(project, current_user, params).execute + @issues = Issues::ListContext.new(project, current_user, params).execute end end