diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f907b11598..63fc42e266 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -411,12 +411,11 @@ 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| + def parse_none_to_blank(params) + attributes = (params || {}) + attributes.each_key {|k| attributes[k] = '' if attributes[k] == 'none'} + if (custom = attributes[:custom_field_values]) + custom.each_key do |k| if custom[k].is_a?(Array) custom[k] << '' if custom[k].delete('__none__') else @@ -427,6 +426,15 @@ class ApplicationController < ActionController::Base attributes end + def parse_params_for_bulk_update(params) + attributes = (params || {}).reject {|k, v| v.blank?} + if custom = attributes[:custom_field_values] + custom.reject! {|k, v| v.blank?} + end + + parse_none_to_blank(attributes) + end + # make sure that the user is a member of the project (or admin) if project is private # used as a before_action 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 080520ef5d..d279604f65 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -561,6 +561,7 @@ class IssuesController < ApplicationController return false end end + issue_attributes = parse_none_to_blank(issue_attributes) @issue.safe_attributes = issue_attributes @priorities = IssuePriority.active @allowed_statuses = @issue.new_statuses_allowed_to(User.current) diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 36d906fd2e..68bb9ab33b 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -6660,6 +6660,33 @@ class IssuesControllerTest < Redmine::ControllerTest assert_equal 2, issue.reload.assigned_to_id end + def test_update_with_value_of_none + @request.session[:user_id] = 2 + issue = Issue.find(1) + issue.custom_field_values = {1 => 'MySQL'} + issue.assigned_to_id = 2 + issue.save! + + put( + :update, + params: { + id: issue.id, + issue: { + assigned_to_id: 'none', + category_id: 'none', + fixed_version_id: 'none', + custom_field_values: { 1 => '__none__' } + } + } + ) + + issue.reload + assert_nil issue.assigned_to + assert_nil issue.category + assert_nil issue.fixed_version + assert_equal '', issue.custom_field_value(1) + end + def test_get_bulk_edit @request.session[:user_id] = 2 get(:bulk_edit, :params => {:ids => [1, 3]})