Install
Works with Drupal: 8.xUsing Composer to manage Drupal site dependencies
Alternative installation files
Release notes
Important: This release breaks the previous payment gateway API. You won't be able to run update.php until you update your gateways. Consult our list of gateways to see which ones have been fixed already.
We recommend making a full backup of your site, pulling down the latest code with Composer, clearing the cache, then running update.php from the browser.
Major changes
67 commits since beta7, 21 contributors.
We now have a way to install and run Commerce without Composer, via the Ludwig module.
See our previous blog post for more information.
Promotions
- Redesigned conditions API and UI, with conditions for filtering by customer address and role, product, quantity.
- Checkout pane for applying coupons - customizable via Twig, allows 1 or multiple coupons depending on configuration.
- Usage limit settings for coupons
- Fixed amount off offers
- Reworked product-level offers
Payments
- Manual payment gateways are deprecating the commerce_cop D7 contrib, allowing options such as "Cash on delivery", "Cheque", "Bank Transfer" etc.
- Payment gateway conditions (same ones we now have on Promotions)
Taxes
- Updated VAT rates for Slovakia and Poland
- Added a plugin for Swiss VAT
- Added a plugin for Canadian sales tax
Changes since 8.x-2.0-beta7:
- #2873685 by Berdir, mglaman: Order E-Mail is not set when logging in or registering on Login pane
- #2893321 by Neograph734: Entity reference widget not showing for 'limit by product' condition
- #2882861 by mglaman, czigor: Fire an event to filter gateways when loading them for an order
- #2893182 by mglaman, drugan: Multiple add to cart forms with different variation types throws exception (#758)
- #2861181 by vasike, bojanz: Rework the handling of customer remote IDs for payments
- #2883704: Update the payment data model for RC1
- #2893108 by mglaman: Only save changed order items during order refresh process (#757)
- #2886614 by mglaman, bojanz, onedotover, agoradesign: Rework the AddToCartForm form ID handling
- #2886614 by mglaman: Expand test coverage for add to cart forms.
- #2794909 by drugan, mglaman, Frank HH-germany, agoradesign, iampuma: The quantity "step" must be configurable on the widget level
- #2877911 by Thomas Cys, bojanz: Add to cart fails when adding a product without a price
- #2891249 by mitrpaka, bojanz: The payment offsite form should show actions only for the POST redirect method
- #2860102 by sumanthkumarc: PaymentInformation::getDefaultPaymentMethodOption doesn't check if the selected option is still available
- #2878972 by AaronChristian, sorabh.v6: UX (Admin): Currency Symbol Field Size
- #2890670 by GoZ: The OrderSummary pane should skip invalid views
- #2886730 by joachim, bojanz: clarify description of CommerceEntityTrait::$entity_types
- #2885648 by marthinal: Add pager when building the list of promotions
- #2849493 by bojanz, vasike: The PaymentGatewayForm element has incomplete exception handling
- #2892293 by bojanz: Remove usage of deprecated code
- Remove dead code (Commerce doesn't use core actions or conditions anymore).
- Use a 4-space indent for ludwig.json
- #2883654 by mglaman, skitten: Checkout button missing from custom cart form view
- Process more promotions at once in commerce_promotion_post_update_6().
- #2886641: Refactor offers
- #2835574 by jespermb, FatherShawn, bojanz: Add Payment Gateway Conditions
- #2886642 by bojanz: Create a new condition UI
- #2854193 by Oostie, sumanthkumarc, shabana.navas: Author cannot be empty
- #2887426 by bojanz: PluginConfiguration followups
- #2842924 by mglaman, bojanz, jkuma, niko-: Add a product condition
- #2885365 by bojanz: Create customer conditions
- #2885363 by bojanz: Create a commerce_condition plugin type, replacing commerce_promotion_condition
- #2885775 by bojanz: Merge the PluginSelect form element into the widget
- #2885774 by bojanz: Remove the PluginItem/PluginSelect filtering by category
- #2854313 by manojapare, niko-, zvse, josephdpurcell, mglaman, joshmiller, bojanz: Provide a fixed ammount off offer for orders
- #2885575 by bojanz: Switching plugins can crash if both share a configuration element of the same name, but not the same type
- #2885346 by finne: TaxTypePlugin: static typing of functions called by call_user_func_array
- #2884870 by bojanz: Plugin configuration is not validated/submitted by the plugin that built the form
- Add a temporary workaround for #2884870.
- #2884849: UsageLimitWidget should not load usage for unsaved entities
- #2862657 by niko-, SpartyDan, bojanz: Implement usage limiting for coupons
- Don't compare years greater than as string
- #2792653 by mglaman, niko-, bmcclure, Dom., xSDx, padma28, gauravjeet, chishah92, rajeshwari10, a.dmitriiev, andypost, steveoliver, markoshust, bojanz, LotharDesmet, nikathone: Checkout coupon pane implementation
- #2881791 by mglaman, agoradesign: Computed field value for DateTime field causes start time validation error
- #2883597 by bojanz: Reduce payment gateway boilerplate
- #2883599 by bojanz: Replace the checkout pane admin_label with a display_label
- #2881103: Provide a way to install without Composer
- #2880927 by mglaman, drugan, a.dmitriiev, bojanz: Support attribute reference fields created manually
- #2882858 by franksj: Cart settings on the order type form are not saved
- #2828525 followup: Replace payment_information with payment_instructions in the completion message.
- #2828525 by vasike, bojanz: Implement manual payment gateways
- Improve promotion sorting when no weight was specified.
- #2874051 by bojanz, smccabe: Create a tax type plugin for Canadian sales tax
- #2880484 by bojanz: Move TaxTypeInterface::getDisplayLabel() to the tax zone level
- #2880485 by bojanz: Optimize TaxType::getZones()
- Clean up LocalTaxTypeBase::buildRateSummary().
- Fix the phpcs fail.
- #2879205 by marncz: LocalTaxTypeBase::buildRateSummary() should sort zones by label
- #2879886: Create a StoreCountryResolver that sets the country to the store's billing address
- #2874052 by czigor: Create a tax type plugin for Swiss VAT
- #2877537 by edwardaa: Return NULL as main property of PriceItem
- #2879119 by agoradesign: NumberFormatEvent should not inherit from GenericEvent class
- #2879054 by sumanthkumarc: Typo in variable name in Country cache context
- Update for Address 1.0
- Store the cart ID in AddToCartForm::submitForm().
- #2878798 by aby v a: Display label in commerce tax type form not updated
- #2878807 by bojanz: Wrong EU VAT rate for Poland
- Update for latest Address.
- #2878586: Fixed country code for Slovakia in European Union VAT tax type. (#737)