summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-05-14 14:34:34 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-05-14 14:34:34 +0300
commitd32c19b2d969091ee3020620c46e39a558d406e1 (patch)
tree9dc18e42214282f4ff0e5c5053553ac7585a63b4
parent72d5a566b46db918b17a1040b6e6d0a3dd986386 (diff)
downloadgitlab-ce-d32c19b2d969091ee3020620c46e39a558d406e1.tar.gz
Fix bulk issue status update
-rw-r--r--app/contexts/issues/bulk_update_context.rb36
-rw-r--r--app/contexts/issues/list_context.rb32
-rw-r--r--app/contexts/issues_bulk_update_context.rb24
-rw-r--r--app/contexts/issues_list_context.rb30
-rw-r--r--app/controllers/issues_controller.rb4
5 files changed, 70 insertions, 56 deletions
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