Store Management
- Added the ability to suppress order emails when marking an order as complete in the control panel. (#4144)
- PDF download URLs are now generated with time-limited security tokens.
- Anonymous users attempting to download a PDF with an expired or missing token are now shown an email verification form.
- Added a new system message for customizing PDF download emails.
- Added the ability to select multiple products in variant conditions. (#4166)
- Added the ability to select multiple variants in pricing rules’ “Match Variant” conditions. (#4167)
- Added the ability to select multiple users in pricing rules’ “Match Customer” conditions. (#4167)
Administration
- Added billing and shipping address conditions to payment gateways. (#4100)
- Added preview targets for products. (#4128)
- Added slug translation options to product types. (#4088)
- Gateway condition rules now allow multiple gateways to be selected. (#4112)
- Product action menus now have a “Product type settings” action, for admin users on environments that allow admin changes. (#4157)
- Added the “Link Duration” setting to PDF settings.
Development
- Orders now have a
dateFirstPaidproperty that records the date and time when the order was first paid in full. - Improved product and variant query performance.
- Improved the performance of retrieving a line item’s catalog pricing rule ID.
- Added the
children,parent,ancestorsanddescendantsfields to products’ GraphQL data. (#4122) - Added the
productStatusvariant query param. (#4158) - Added the
productStatusGraphQL variant query argument. (#4158) - Added the
--forceoption to thecommerce/reset-datacommand. (#4115)
Extensibility
- Added
craft\commerce\controllers\BaseStoreManagementController::asStoreManagementCpScreen(). - Added
craft\commerce\controllers\DownloadsController::actionEmailChallenge(). - Added
craft\commerce\controllers\DownloadsController::actionPdfChallenge(). - Added
craft\commerce\controllers\DownloadsController::actionPdfSent(). - Added
craft\commerce\elements\Order::$dateFirstPaid. - Added
craft\commerce\elements\Order::getMaskedEmail(). - Added
craft\commerce\elements\conditions\customers\CatalogPricingRuleCustomerConditionRule. - Added
craft\commerce\elements\conditions\variants\CatalogPricingRuleVariantConditionRule. - Added
craft\commerce\elements\conditions\variants\VariantConditionRule. - Added
craft\commerce\elements\db\OrderQuery::$dateFirstPaid. - Added
craft\commerce\elements\db\OrderQuery::dateFirstPaid(). - Added
craft\commerce\events\InventoryMovementEvent. (#4063) - Added
craft\commerce\events\UpdateInventoryLevelEvent. (#4063) - Added
craft\commerce\helpers\Cp::shippingCategoryFieldHtml(). - Added
craft\commerce\helpers\Cp::shippingMethodFieldHtml(). - Added
craft\commerce\helpers\Cp::shippingZoneFieldHtml(). - Added
craft\commerce\helpers\Cp::taxCategoryFieldHtml(). - Added
craft\commerce\helpers\Cp::taxZoneFieldHtml(). - Added
craft\commerce\helpers\Gql::getSchemaContainedProductTypes(). - Added
craft\commerce\helpers\ProductQuery. - Added
craft\commerce\models\Email::$renderSiteId. - Added
craft\commerce\models\Email::getRenderSite(). - Added
craft\commerce\models\Pdf::$linkExpiry. - Added
craft\commerce\queue\jobs\ResaveProductVariants. - Added
craft\commerce\records\Email::$renderSiteId. - Added
craft\commerce\records\Order::$dateFirstPaid. - Added
craft\commerce\services\CatalogPricingRules::hasCatalogPricingRules(). - Added
craft\commerce\services\Discounts::appendCouponCode(). (#4084) - Added
craft\commerce\services\Inventory::EVENT_AFTER_EXECUTE_INVENTORY_MOVEMENT. (#3835) - Added
craft\commerce\services\Inventory::EVENT_AFTER_EXECUTE_UPDATE_INVENTORY_LEVEL. (#3835) - Added
craft\commerce\services\Pdfs::getPdfUrl()now generates secure tokenized URLs with expiry timestamps.
System
- Fixed a bug where purchasables could have a shipping category that was no longer available to their product type. (#4018)
- Fixed a bug where order emails weren’t always getting rendered for the correct site.
- Fixed a bug where variant titles were being incorrectly generated for draft products. (#4173, #4126)
- Fixed a PHP error that occurred when retrieving an order that referenced an archived payment gateway. (#4172)
- Fixed a bug where variants with inactive products were being returned in GraphQL variant queries. (#4158)