Install
Works with Drupal: 8.xUsing Composer to manage Drupal site dependencies
Alternative installation files
Release notes
This is the last release to support Drupal 8.6 and PHP 5. From next release Drupal 8.7 and PHP 7 will be required.
This release requires Address 1.7 and Profile 1.0.
If your site is running Commerce Shipping, you will need to update it to 2.0-beta7.
If your site is running Commerce Authorize.Net, you will need to update it to 1.2.
Commerce 2.14 now has an address book, allowing customer information (billing/shipping) to be saved and then used on next purchase. This UI works in the order admin UI, and at checkout. See the change record for more information.
As a part of this effort we have stabilized the Profile module, fixing over 60 issues. We released several release candidates, and finally, 8.x-1.0.
Note that some on-site gateways have a bug which breaks the user/{user}/payment-methods add/edit form, because clicking the "Save" button is interpreted as clicking the address book "Edit" button. We are tracking the possibly affected gateways here: #3077506: [meta] On site payment gateways with broken add/edit form. The bug has already been fixed in Commerce Authorize.net 1.2.
Commerce 2.14 also allows not collecting billing information, through a per-gateway setting. For backwards compatibility reasons each gateway needs to be updated (by adding a new annotation flag) to support this feature. We are tracking this conversion in #3077499: [meta] Payment gateways that need to add the "not collecting billing information" feature.
Not collecting billing information is currently supported by the Manual gateway (shipped with Commerce), Authorize.net, Braintree.
Read the blog post for further information.
Contributors (38)
bojanz, mglaman, Marios Anagnostopoulos, andriansyah, jurgenhaas, zaporylie, joehuggans, jonathanshaw, ilchovuchkov, purvitagupta, drasgardian, jsacksick, Niklan, andypost, el7cosmos, flocondetoile, Yasser Samman, NicolasGraph, rhovland, rszrama, agoradesign, Morbus Iff, mrconnerton, amateescu, eiriksm, sergei_semipiadniy, Upchuk, czigor, dobe, facine, carstenG, iuana, lisastreeter, edwardaa, SAVEL, piggito, mitrpaka, carlxjs
Changelog
Issues: 53 issues resolved.
Changes since 8.x-2.13:
Bug
- #3075669 by joehuggans, bojanz, jonathanshaw: Cart incorrectly checks its order flag in CartProvider and commerce_cart_commerce_order_delete()
- #3075135 by bojanz: commerce_order_build_address_field_definition() does not add the address field to the form/view displays
- #2991489 by drasgardian: selecting product variation jumps page to top
- #3049887 by jsacksick, bojanz: New phpcs failures under drupal/coder 8.3.3
- #3069912 by Niklan, andypost: The module must require ext-bcmath
- #3071000 by el7cosmos: Payment entity didn't invalidate related cache on postSave
- #3072378 by flocondetoile: PHPStorm complaining the return type does not match in Intervall Object
- #3065103 by Yasser Samman, bojanz: The commerce:create:store command is broken for Drupal Console v1.9.0
- #3068649 by bojanz, NicolasGraph: Undefined variable $triggering_element in CustomerProfile::buildInlineForm()
- #3065795 by Niklan, bojanz: Order form adds incorrect classes on non Latin languages
- #3063784 by Morbus Iff: Shipped YAML config is slightly out of date
- #3050350 by eiriksm: The OrderTotalPrice condition crashes if the order is empty
- #3016740 by Upchuk, bojanz: TaxOrderProcessor breaks the order item unit price override
- #3057547 by bojanz, czigor: File upload saves product variation when using Single Variation (Product Information widget)
- #3009618 by dobe, bojanz, mglaman: Tax crashes if the customer profile has no address
- #3052227 by facine, bojanz: PaymentMethodStorage::loadReusable() needs to support gateways that don't collect billing information
- #3050770 by jsacksick, carstenG: Payment checkout flow validation fails when payment panes are disabled or missing
- #3052288 by iuana: ProductVariationType::setGenerateTitle should return $this; it doesn't
- #3052955 by lisastreeter: Fix minor doc block error in Payments module
- #3049355 by bojanz: Checkout panes are rendered even if they are empty
- #3048070 by bojanz: There is no way to unset an order / order item data key
- #3047875 by bojanz: OrderAssignEvent doesn't have access to the original customer/email
- #3011667 by mglaman, bojanz, agoradesign, carlxjs: Saving the order before its payment in PaymentGateway::onReturn() can cause data loss
Feature
- #3077968 by bojanz: Add a payment method post-update hook for the address book
- #3077935 by bojanz: [Address Book] Add a CSS class to the default profile in the user pages
- #3059633 by mglaman, bojanz: Provide a better addressbook UI for the user pages
- #3060433 by bojanz: Provide a way to collect all order profiles (billing, shipping, etc)
- #3075282 by bojanz: Introduce alter hooks for inline forms
- #3073182 by bojanz: Add an EntityStoreInterface and make OrderInterface extend it
- #3053165 by bojanz, rhovland, mglaman, jsacksick, rszrama, agoradesign: [Addressbook part 2] Complete the UI by allowing choice between multiple addressbook profiles
- #3065400 by bojanz: Allow AddressBook::copy() to update address book profiles
- #3062783 by mrconnerton: Add an alter hook for adjustment types
- #2905028 by jsacksick, czigor, edwardaa, bojanz, SAVEL, piggito, mitrpaka: Add a per-gateway setting to skip collecting billing information
Task
- #3077908 by bojanz: Update the Address Book service for Profile 1.0
- #3056862 by Marios Anagnostopoulos: Order Log Activity change event from pre to post transition
- #3062208 by andriansyah, jurgenhaas, zaporylie: Missing null return type in ProductVariationTitleWidget
- #3067558 by bojanz: PaymentInformation::submitPaneForm() must duplicate the payment method billing profile
- #3074320 by ilchovuchkov, purvitagupta: Replace t() with $this->t() in AddToCartFormatter
- #3072083 by bojanz: Allow any profile type to be used as a "customer" profile type
- #3061017 by jsacksick, bojanz: Remove the revision_log_message field in CustomerProfile
- #3057558 by amateescu: Add a reverse relationship from the order item to the purchased entity
- #3063344 by sergei_semipiadniy: Replace \Drupal:: typedDataManager() with a service in PriceItem
- #3056167 by bojanz: Rename the payment gateway needsBillingInformation() method to collectsBillingInformation()
- #3043795 by czigor: CheckoutFlowWithPanesBase should not serialize panes
- #3055035 by bojanz, mglaman, rszrama: Finalize the AddressBookManager service.
- #3022850 by mglaman, bojanz: [Addressbook, part 1] Rework the ownership model for customer profiles
- #3051934 by bojanz: Stop excluding the Drupal.Commenting.VariableComment.VarOrder CS rule
- #3050301 by bojanz: Clean up the payment method plugin forms
- #3049884 by bojanz: Improve error when OrderItem::bundleFieldDefinitions can't load the bundle config entity
- #3048190 by eiriksm: DATETIME_DATE_STORAGE_FORMAT is deprecated