Chris@16: require_dependency 'settings_controller' Chris@16: Chris@16: module Checkout Chris@16: module SettingsControllerPatch Chris@16: def self.included(base) # :nodoc: Chris@16: base.send(:include, InstanceMethods) Chris@16: Chris@16: base.class_eval do Chris@16: unloadable Chris@16: Chris@16: alias_method_chain :edit, :checkout Chris@16: end Chris@16: end Chris@16: Chris@16: module InstanceMethods Chris@16: def edit_with_checkout Chris@16: if request.post? && params['tab'] == 'checkout' Chris@16: if params[:settings] && params[:settings].is_a?(Hash) Chris@16: settings = HashWithIndifferentAccess.new Chris@16: (params[:settings] || {}).each do |name, value| Chris@16: if name = name.to_s.slice(/checkout_(.+)/, 1) Chris@16: case value Chris@16: when Array Chris@16: # remove blank values in array settings Chris@16: value.delete_if {|v| v.blank? } Chris@16: when Hash Chris@16: # change protocols hash to array. Chris@16: value = value.sort{|(ak,av),(bk,bv)|ak<=>bk}.collect{|id,protocol| protocol} if name.start_with? "protocols_" Chris@16: end Chris@16: settings[name.to_sym] = value Chris@16: end Chris@16: end Chris@16: Chris@16: Setting.plugin_redmine_checkout = settings Chris@16: params[:settings] = {} Chris@16: end Chris@16: end Chris@16: edit_without_checkout Chris@16: end Chris@16: end Chris@16: end Chris@16: end Chris@16: Chris@16: SettingsController.send(:include, Checkout::SettingsControllerPatch)