Sha256: 38c4a43dffd1a874e79f67cdda3b2fb7b3afbf9e80cc6c8ae963fe2215a85552

Contents?: true

Size: 1.84 KB

Versions: 4

Compression:

Stored size: 1.84 KB

Contents

# https://github.com/spree-contrib/spree_address_book/blob/master/app/controllers/spree/checkout_controller_decorator.rb
module Spree
  module Checkout
    module AddressBook
      extend ActiveSupport::Concern

      included do
        after_action :normalize_addresses, only: :update
        before_action :set_addresses, only: :update
      end

      protected

      def set_addresses
        return unless params[:order] && params[:state] == 'address'

        if params[:order][:ship_address_id].to_i > 0
          params[:order].delete(:ship_address_attributes)

          Spree::Address.find(params[:order][:ship_address_id]).user_id != try_spree_current_user&.id && raise('Frontend address forging')
        else
          params[:order].delete(:ship_address_id)
        end

        if params[:order][:bill_address_id].to_i > 0
          params[:order].delete(:bill_address_attributes)

          Spree::Address.find(params[:order][:bill_address_id]).user_id != try_spree_current_user&.id && raise('Frontend address forging')
        else
          params[:order].delete(:bill_address_id)
        end
      end

      def normalize_addresses
        return unless params[:state] == 'address' && @order.bill_address_id && @order.ship_address_id

        # ensure that there is no validation errors and addresses were saved
        return unless @order.bill_address && @order.ship_address

        bill_address = @order.bill_address
        ship_address = @order.ship_address
        if @order.bill_address_id != @order.ship_address_id && bill_address == ship_address
          @order.update_column(:bill_address_id, ship_address.id)
          bill_address.destroy
        else
          bill_address.update_attribute(:user_id, try_spree_current_user&.id)
        end

        ship_address.update_attribute(:user_id, try_spree_current_user&.id)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
spree_frontend-4.0.0.rc3 app/controllers/concerns/spree/checkout/address_book.rb
spree_frontend-4.0.0.rc2 app/controllers/concerns/spree/checkout/address_book.rb
spree_frontend-4.0.0.rc1 app/controllers/concerns/spree/checkout/address_book.rb
spree_frontend-4.0.0.beta app/controllers/concerns/spree/checkout/address_book.rb