summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/application_controller.rb16
-rw-r--r--app/controllers/issues_controller.rb18
-rw-r--r--app/controllers/timelog_controller.rb9
-rw-r--r--test/functional/timelog_controller_test.rb9
4 files changed, 27 insertions, 25 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 48ad635e8..f998be775 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -352,6 +352,22 @@ class ApplicationController < ActionController::Base
@attachments = att || []
end
+ def parse_params_for_bulk_update(params)
+ attributes = (params || {}).reject {|k,v| v.blank?}
+ attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
+ if custom = attributes[:custom_field_values]
+ custom.reject! {|k,v| v.blank?}
+ custom.keys.each do |k|
+ if custom[k].is_a?(Array)
+ custom[k] << '' if custom[k].delete('__none__')
+ else
+ custom[k] = '' if custom[k] == '__none__'
+ end
+ end
+ end
+ attributes
+ end
+
# make sure that the user is a member of the project (or admin) if project is private
# used as a before_filter for actions that do not require any particular permission on the project
def check_project_privacy
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 95c58674c..b842023a7 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -252,7 +252,7 @@ class IssuesController < ApplicationController
@issues.sort!
@copy = params[:copy].present?
- attributes = parse_params_for_bulk_issue_attributes(params)
+ attributes = parse_params_for_bulk_update(params[:issue])
copy_subtasks = (params[:copy_subtasks] == '1')
copy_attachments = (params[:copy_attachments] == '1')
@@ -495,22 +495,6 @@ class IssuesController < ApplicationController
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
end
- def parse_params_for_bulk_issue_attributes(params)
- attributes = (params[:issue] || {}).reject {|k,v| v.blank?}
- attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
- if custom = attributes[:custom_field_values]
- custom.reject! {|k,v| v.blank?}
- custom.keys.each do |k|
- if custom[k].is_a?(Array)
- custom[k] << '' if custom[k].delete('__none__')
- else
- custom[k] = '' if custom[k] == '__none__'
- end
- end
- end
- attributes
- end
-
# Saves @issue and a time_entry from the parameters
def save_issue_with_child_records
Issue.transaction do
diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb
index 597160191..66ae97678 100644
--- a/app/controllers/timelog_controller.rb
+++ b/app/controllers/timelog_controller.rb
@@ -174,7 +174,7 @@ class TimelogController < ApplicationController
end
def bulk_update
- attributes = parse_params_for_bulk_time_entry_attributes(params)
+ attributes = parse_params_for_bulk_update(params[:time_entry])
unsaved_time_entry_ids = []
@time_entries.each do |time_entry|
@@ -271,11 +271,4 @@ private
end
scope
end
-
- def parse_params_for_bulk_time_entry_attributes(params)
- attributes = (params[:time_entry] || {}).reject {|k,v| v.blank?}
- attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
- attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
- attributes
- end
end
diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb
index ce6f5936c..c3e96793d 100644
--- a/test/functional/timelog_controller_test.rb
+++ b/test/functional/timelog_controller_test.rb
@@ -527,6 +527,15 @@ class TimelogControllerTest < ActionController::TestCase
assert_equal ["0", "0"], TimeEntry.where(:id => [1, 2]).collect {|i| i.custom_value_for(10).value}
end
+ def test_bulk_update_clear_custom_field
+ field = TimeEntryCustomField.generate!(:field_format => 'string')
+ @request.session[:user_id] = 2
+ post :bulk_update, :ids => [1, 2], :time_entry => { :custom_field_values => {field.id.to_s => '__none__'} }
+
+ assert_response 302
+ assert_equal ["", ""], TimeEntry.where(:id => [1, 2]).collect {|i| i.custom_value_for(field).value}
+ end
+
def test_post_bulk_update_should_redirect_back_using_the_back_url_parameter
@request.session[:user_id] = 2
post :bulk_update, :ids => [1,2], :back_url => '/time_entries'