Magento Open Source 2.2.9 Release Notes

Patch code and release notes published on June 25 2019.

We are pleased to present Magento Open Source 2.2.9. This release includes 75 critical enhancements to product security, over 100 core code fixes and enhancements, and over 200 community-submitted pull requests.

Highlights

Look for the following highlights in this release:

Substantial security enhancements

This release is focused on substantial security enhancements:

  • 75 security enhancements that help close cross-site scripting (XSS), remote code execution (RCE), and sensitive data disclosure vulnerabilities as well as other security issues. No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. See Magento Security Center for a comprehensive discussion of these issues. All known exploitable security issues fixed in this release (2.2.9) have been ported to 2.3.2, 2.1.18, 1.14.4.2, and 1.9.4.2, as appropriate.

  • Google reCAPTCHA module for PayPal Payflow checkout. The new PaypalRecaptcha module adds Google reCAPTCHA and CAPTCHA to the Payflow Pro checkout form. This enhanced functionality has been added in response to malicious targeting of Magento deployments that implement Payflow Pro. Configuration information can be found in Google reCAPTCHA.

Infrastructure improvements

This release contains 150 enhancements to core quality, which improve the quality of the Framework and these modules: Catalog, Sales, Checkout/One Page Checkout, UrlRewrite, Customer/Customers, and UI. Here are some additional core enhancements:

  • Braintree payment method is now supported for checkout with multiple addresses. Previously, you could not use Braintree and Braintree PayPal when checking out an order that was being shipped to multiple addresses.

  • The CGI URL gateway in UPS module has been updated from HTTP to HTTPS.The CGI URL gateway endpoint in the UPS module has been updated from HTTP to HTTPS in response to the disablement of the HTTP gateway by UPS in mid-2019. See Magento User Guide for a discussion of using the UPS shipment method. Shipping method configuration settings are described in the Shipping methods.

  • Google chart API updated to the Image-Charts. Magento now uses the Image-Charts free service to render static charts in Admin dashboards. Earlier deployments used Google Image Charts, which was deprecated in 2012 and turned off on March 18, 2019.

Functional fixes

In addition to security enhancements, this release contains the following functional fixes.

Installation, setup, and deployment

  • Magento no longer throws an error when executing setup:static-content:deploy in parallel mode if theme or locale deployment takes more than 400 seconds. Previously, Magento threw this error under these conditions, 2436; Status: 0.
  • Magento no longer displays an extraneous blank option in the country drop-down menu on the Country Options page for store configuration settings (Stores > Settings > Configuration > General > Country Options).
  • Magento no longer throws an error when executing setup:static-content:deploy in parallel mode if theme or locale deployment takes more than 400 seconds. Previously, Magento threw the following error under these conditions: 2436; Status: 0Fix submitted by David Alger in pull request 22282. GitHub-15090
  • All fields are now hidden with appropriate dependencies as assigned in the backup configuration settings. Fix submitted by Keyur Kanani in pull request 22499. GitHub-22474
  • Magento now sets the id_prefix option on prefix cache keys for the cache front end during installation. If this option is not set, Magento uses the first 12 bits of the md5 hash of the absolute path to the Magento app/etc directory. But if this value is not exactly the same on all web servers, cache invalidation will not work. Fix submitted by Cash and Carry Furniture in pull request 22439. GitHub-15828

Backend

  • The JavaScript minify field on Stores > Configuration > Advanced > Developer is now disabled as expected. Fix submitted by Ananth Iyer in pull request 21800. GitHub-21384
  • Magento now displays the correct date in the Admin for scheduled design changes. Previously, Magento displayed the current date instead of the scheduled date on Content > Design > Schedule. Fix submitted by Pratik Oza in pull request 21568. GitHub-21425
  • Fixed alignment issue of time fields in Admin > Configuration > General > Advanced Reporting in tablet landscape view. Fix submitted by Amol Chaudhari in pull request 20602. GitHub-20580
  • Magento now displays a success message when you create an order through the Admin and the create shipment and Email copy of invoice checkboxes are checked. Fix submitted by Govind Sharma in pull request 20776. GitHub-19942
  • Fixed alignment of reload CAPTCHA icon on the Admin login page. Fix submitted by Pratik Oza in pull request 21162. GitHub-20911
  • The web setup wizard now uses the correct base path to check if the setup folder exists. Previously, the wizard checked base/data/web/magento2/pubsetup instead of /data/web/magento2/pub/setup. Fix submitted by JeroenVanLeusden in pull request 22369. GitHub-11892, GitHub-7623

Bundle products

  • Fixed alignment of the bundle product radio button on the Product page when you click Customize and Add to cart. Fix submitted by Amol Chaudhari in pull request 20743. GitHub-20518
  • Magento now calculates and displays the correct tier price for bundle products. Fix submitted by Amol Chaudhari in pull request 21844. GitHub-21467
  • Fixed misalignment of the Add to cart button on the bundle product page in portrait orientation in mobile view. Fix submitted by Amol Chaudhari in pull request 20554. GitHub-20193
  • Magento now displays the correct price on the storefront for products whose prices have been updated in a shared catalog. Previously, Magento did not update storefront prices when a price in the shared catalog was updated.

Cache

  • CMS block cache keys now contain the appropriate store ID in deployments with multiple store views. Previously, Magento always loaded the cached version of the block for the first store view. Fix submitted by Amol Chaudhari in pull request 22534. GitHub-22299

Catalog

  • Dates in the Admin are now formatted correctly for French locales (dd/mm/yyyy).
  • You can now use the term configurable as a group name in attribute sets. Previously, Magento threw an error when you used this term as a group name and subsequently tried to add or edit a product. GitHub-6123
  • URLS in Arabic now resolve as expected. Previously, when you created a URL rewrite in Arabic, the browser returned a 404.
  • Magento now creates unique values for product attributes as expected when you duplicate a product. Previously, Magento duplicated a product, but both products had the same attribute values.
  • During product creation, Magento now displays default attribute values from the Admin column on the Manage Options (Values of Your Attribute) window when creating options. Previously, Magento displayed attribute options from the default storeview. GitHub-6507
  • Magento now displays informative messages when you create a new product and try to set its SKU to one that is assigned to an existing product. Previously, under these circumstances, Magento displayed an informative message, but also imported the newly created product’s configurable options to the older product. GitHub-9457
  • Tax recalculation has been moved out of the transaction into the background for negotiable quotes running in an environment where B2B is deployed. This improves performance and helps avoid server timeouts.
  • Catalog Permission rules that are set for a category now remain applied when a new category is created at the same level.
  • You can now use storeview-level attributes to filter products on the products list.
  • The selected store scope view now affects the categories displayed on the product edit page’s category tree.
  • Magento now calculates and displays the correct tier price for bundle products.
  • Magento no longer permits you to change an attribute set if the new set does not have equivalent attributes as the original set. Previously, Magento sometimes threw this exception when you tried to change attribute sets: Attempt to load value of nonexistent EAV attribute.
  • You can now add grouped products to the shopping cart as expected when category permissions are enabled.
  • Magento does not display the Country of Manufacture field under the More Information tab of the product page when this value is empty.
  • Scope assigned to prices in Catalog Price Scope (set in Configuration > Price) are now maintained when price is set to empty. Previously, you could not leave special prices empty.
  • Clicking on a store’s root category now causes only that root category to expand. Previously, Magento expanded all other Root Categories into the top-level categories.
  • Magento now displays breadcrumbs in proper format. Previously, subcategories did not appear in breadcrumbs. Fix submitted by Brandon Brown in pull request 19760. GitHub-7967
  • Fixed misalignment of Schedule Update From field on the Admin category page when displayed in a browser set to 768 x 1147 resolution. Fix submitted by Amol Chaudhari in pull request 20404. GitHub-20402
  • Fixed misalignment of product page tab content in mobile view. Fix submitted by Amol Chaudhari in pull request 20476. GitHub-20468
  • Magento now displays currency symbols as expected for products in the Cost column of the Admin catalog list. Fix submitted by Pratik Oza in pull request 21157. GitHub-20906
  • Corrected the behavior of the Option’s New Option Type drop-down menu for customizable options. Fix submitted by Pratik Oza in pull request 21159. GitHub-20989
  • Magento now correctly calculates multi-currency custom option prices when the option price type is percentage. Previously, when the multi-currency custom option was set to a percentage price type, Magento calculated the price wrong. Fix submitted by Amol Chaudhari in pull request 21263. GitHub-19561
  • You can now create a new product with a special price. Previously, when you saved the newly created product, Magento threw this error, Special price date from" Failed to parse time string. Fix submitted by Milan Osztromok in pull request 21273. GitHub-18158
  • The product_type attribute now contains the correct value in the CVS file that is created during export after you create a custom type_id attribute. Fix submitted by Amol Chaudhari in pull request 21208. GitHub-19891
  • A product’s product:price:amount metatag now contains the price converted to the appropriate base currency in multistore deployments with stores that use different base currencies. Previously, price in this metatag was always calculated in the base currency. Fix submitted by Pratik Oza in pull request 21202. GitHub-20010
  • Magento no longer adds tax twice when adding a new product with tier pricing. Previously, MinimalTierPriceCalculator applied the tax twice when calculating the minimal price. Fix submitted by Eduard Chitoraga in pull request 21527. GitHub-21383
  • The product_types_base.xsd, product_options.xsd, import.xsd, export.xsd files now allow modules with names that contain numbers. Fix submitted by Lisovyi Yevhenii in pull request 21598. GitHub-14882
  • Magento now correctly displays the mass product update attributes page when Minimum Qty Allowed in Shopping Cart is set. Previously, Magento displayed this exception: Exception #0 (Exception): Warning: A non-numeric value encountered in /var/www/html/vendor/magento/module-catalog/view/adminhtml/templates/catalog/product/edit/action/inventory.phtml on line 109 is present. Fix submitted by Nazar Klovanych in pull request 21080. GitHub-21073
  • You can now open a product’s details page from the compare products side bar. Fix submitted by Eduard Chitoraga in pull request 21238. GitHub-21101
  • Magento no longer increments stock for products for which stock managing has been disabled. Previously, Magento increased the product quantity count when an order failed if Manage Stock was disabled. Fix submitted by Amol Chaudhari in pull request 20644. GitHub-19482
  • We have replaced the incorrect proxy resourceStock argument for the \Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver in di.xml. (Specifically, <argument name="resourceStock" xsi:type="object">Magento\CatalogInventory\Model\ResourceModel\Stock\Proxy</argument>

    with the following argument:

    <argument name="resourceStockItem" xsi:type="object">Magento\CatalogInventory\Model\ResourceModel\Stock\Item\Proxy</argument>. ) Fix submitted by VitaliyBoyko in pull request 21793. GitHub-167

  • You can now add a product to an order by using the Add products by SKU button. Previously, when you tried to add a product this way, Magento displayed this message, `The SKU was not found in the catalog.

Cart and checkout

  • Magento now persists the shipping quote in the shopping cart for guest customers when Persistent Shopping Cart is enabled.
  • Magento now applies the correct tier price for a product after a customer who is assigned to a customer group logs in after first adding items to their cart as a guest. Previously, Magento did not apply the tier price after the customer logged in.
  • Magento now correctly updates the minicart if a selected product is disabled during the shopping session.
  • Corrected misalignment of the order item details label and subtotal label in mobile view. Fix submitted by Rajneesh Gupta in pull request 21243. GitHub-20299
  • The title of the shipping method no longer overlaps with Edit on the checkout page. Fix submitted by Amol Chaudhari in pull request 20443. GitHub-20427
  • Fixed issue displaying numbers that exceed two digits in the Qty: box of the Proceed to Checkout pop up. Fix submitted by Amol Chaudhari in pull request 20738. GitHub-20611
  • Fixed problems with the display of the tooltip drop-down pointer on the checkout page in tablet view. Fix submitted by Amol Chaudhari in pull request 20490. GitHub-20487
  • Fixed misalignment of the View and Edit Cart link in the mini cart. Fix submitted by Rajneesh Gupta in pull request 21124. GitHub-20382
  • Magento now persists customer-related values after a guest customer converts her account to a customer account after checkout. Previously, Magento saved these customer-related values as null during account creation after checkout. Fix submitted by Nazar Klovanych in pull request 21325. GitHub-19166
  • Magento now displays an error message as expected when a customer clicks on Add to cart without selecting at least one product from the recently ordered product list. Fix submitted by Prince Patel in pull request 21538. GitHub-21398
  • The Cancel button on the checkout page now works as expected. Fix submitted by Pratik Oza in pull request 21569. GitHub-21327
  • Magento no longer runs UpdateItemQty validation before a Clear Shopping Cart action is triggered. Previously, due to the timing of this validation, you could not empty the shopping cart if any product in the cart was out-of-stock. Fix submitted by Wojtek Naruniec in pull request 21528. GitHub-21294
  • Magento no longer displays the infinite loading indicator when you proceed to check out. Previously, Magento displayed the loading indicator, and threw this JavaScript error, Cannot read property 'quoteData' of undefined. Fix submitted by Amol Chaudhari in pull request 21432. GitHub-14412
  • Magento no longer empties the shopping cart when you click Enter after changing a product’s quantity. Fix submitted by Leandro F. L. in pull request 21512. GitHub-21499
  • Screen readers can now identify the label elements that are linked to input fields for street address fields on the checkout page. Previously, screen readers could not identify these fields because the elements were not populated. Fix submitted by Amol Chaudhari in pull request 22070. GitHub-10893
  • Magento now factors in cart price rule discounts before assessing whether free shipping order minimums have been reached for an order. Previously, Magento assessed free shipping before discounts were applied.
  • Magento now increments product quantity correctly when you add products to your cart first as a guest user, and then logged in. Previously, Magento added items separately instead. Fix submitted by Amol Chaudhari in pull request 22378. GitHub-21375
  • When you configure a price rule for configurable products with swatches, Magento now shows the special price for products that match the price rule. Previously, Magento displayed both the old price and the special price for the matching configurable products. Fix submitted by Pratik Oza in pull request 21695. GitHub-19276
  • Meta Keywords and Meta Description are now defined as textarea throughout product forms. Fix submitted by Amol Chaudhari in pull request 21199. GitHub-20555
  • The Close button on the mini cart no longer overlaps with the shipping section when the checkout page is opened on a mobile device. Fix submitted by Pratik Oza in pull request 20844. GitHub-20614

Cart Price rule

  • Added a new condition type Subtotal (Excl. Tax) to configure discounts that exclude the sales tax when calculating the subtotal on a Total Amount cart rule. See Price rules. Fix submitted by Eduard Chitoraga in pull request 21845. GitHub-12396

Catalog rule

  • Catalog rules are applied as expected after a customer uses Visual Merchandiser to drag and drop products in a category. Previously, discounts that were applied to products through a catalog rule were dropped after the product was dragged and dropped.

Checkout agreements

  • Magento no longer throws SQL errors when table prefixes are used. Fix submitted by Vishal Gelani in pull request 18866. GitHub-18357, GitHub-18954

Clean up and minor refactoring

  • Removed excessive white space from the top of CMS pages when displayed in mobile view. Fix submitted by Amol Chaudhari in pull request 20781. GitHub-20755
  • Corrected rendering of the apply discount code field in the Tab portrait view of the shopping cart. Fix submitted by Amol Chaudhari in pull request 20586. GitHub-20278
  • Added missing bottom border to the list of customizable options on the Product page when accessed from the Admin. Fix submitted by Eduard Chitoraga in pull request 20821. GitHub-20497
  • Fixed misalignment of the Orders and Returns section that is accessed from the footer of the orders page. Fix submitted by Amol Chaudhari in pull request 21163. GitHub-20816
  • Fixed misalignment of reviews under My Recent Reviews area of the My account dashboard. Fix submitted by Amol Chaudhari in pull request 21172. GitHub-20800
  • The Widget Options left navigation block on the Add New widget Page now displays correctly in tablet view. Fix submitted by Amol Chaudhari in pull request 20529. GitHub-20492
  • Added a missing asterix adjacent to the Checkout Agreements checkbox. Fix submitted by Amol Chaudhari in pull request 21838. GitHub-21648

Configurable products

  • Configurable products can no longer be added as a variation of another configurable product in the Admin.
  • Magento no longer describes a configurable product as in-stock in the product list when the product is set to out-of-stock.
  • Fixed misalignment of fields on the Configure Product page that is accessed from the wishlist. Fix submitted by Amol Chaudhari in pull request 21173. GitHub-20760
  • You can now successfully run bin/magento setup:upgrade to upgrade your Magento instance when your deployment lacks the manufacturer attribute. Previously, set up did not complete, and Magento displayed this error, Attribute with ID "Manufacturer" does not exist. Fix submitted by Suneet K. in pull request 19551. GitHub-18134
  • Corrected the position of the labels in the configurable product variations table. Fix submitted by Eduard Chitoraga in pull request 21691. GitHub-20527
  • Configurable products can now be successfully updated through the bulk API using the following API endpoint: rest/async/bulk/V1/configurable-products/bySku/child).  Fix submitted by Amol Chaudhari in pull request 22295. GitHub-20366

CMS

  • We have modified the required permissions for updating the design fieldset of categories, products, and CMS pages:

    • Existing roles that have save permission for these entities can save everything.

    • New roles must be granted permission to edit design manually.

    • If you do not have permission to edit the design fieldset or use web API endpoints to update a category, Magento does not save your changes and the design properties remain unchanged.

  • The HTML source editor Update and Cancel buttons now appear as expected in browsers running Internet Explorer 11.x.
  • Improved the display of images that are uploaded when you click the Insert Image button on a CMS page. Fix submitted by Eduard Chitoraga in pull request 21110. GitHub-20786

Customer

  • Customers who are not logged in can now see the dynamic blocks that have been created for guest accounts. Previously, only customers logged in to the registered guests segment could see these dynamic blocks.
  • Magento now uses the value of the default billing address attribute as expected during checkout. GitHub-8777
  • Custom customer attributes now show as expected in the Admin customer create and edit forms. Previously, these attributes were not displayed unless configured for display on the Customer Registration or Customer Account Edit forms. GitHub-14456
  • Removed an unneeded space from the title of the My Account page in mobile view. Fix submitted by Amol Chaudhari in pull request 20782. GitHub-20723
  • Removed an empty block on the My Account page sidebar. Fix submitted by Pratik Oza in pull request 20845. GitHub-19139
  • The Customer Name Prefix on the customer configuration page no longer displays extraneous white space when an extra separator is added. Fix submitted by Pratik Oza in pull request 21245. GitHub-17861
  • The customer login block (defined as Magento\Customer\Block\Form\Login) no longer sets the page title. Fix submitted by Amol Chaudhari in pull request 21434. GitHub-13982
  • The default sort order for the shopping cart and customer orders page now begins with the latest create date and descends. Fix submitted by Pratik Oza in pull request 21694. GitHub-21493
  • Magento now respects the number of lines permitted in a street address as set in Store > Configuration > Customer > Customer Configuration > Name and Address Options. Previously, Magento displayed the last saved values instead of the default value. Fix submitted by Ievgenii Gryshkun in pull request 20566. GitHub-13675
  • The State/Province field is no longer marked as mandatory in the Admin customer address form. Previously, this field was always marked by an asterisk, even when the field was not required.
  • When loading an order for a customer already assigned to a customer group, Magento now shows the assigned customer group in the order information. Additionally, Magento now saves the group assignment if you change it when creating a customer order. Previously, the customer group reverted to the default configured group assignment for customers with an existing group assignment. On new orders, if you changed the customer group during the ordering process, the new assignment was not saved. When you loaded the customer order, the customer group showed the default group instead of the group assignment applied during the ordering process.

cron

  • Added support for Zookeeper and flock lock providers. We’ve also added new options to configure locks during installation:

    • --lock-provider=LOCK-PROVIDER Lock provider name

    • --lock-db-prefix=LOCK-DB-PREFIX Installation specific lock prefix to avoid lock conflicts

    • --lock-zookeeper-host=LOCK-ZOOKEEPER-HOST Host and port to connect to Zookeeper cluster. For example, 127.0.0.1:2181

    • --lock-zookeeper-path=LOCK-ZOOKEEPER-PATH The path where Zookeeper will save locks. The default path is /magento/locks

    • --lock-file-path=LOCK-FILE-PATH The path where file locks will be saved.

    See Configure the lock provider.

  • crontab now updates all currency rates daily as expected. Previously, crontab updated only a subset of the enabled currencies. Fix submitted by Denis Papec in pull request 18980. GitHub-18580

Customer custom attributes

  • Magento now saves dates that are associated with custom customer attributes of type date. Previously, Magento did not save these dates, but displayed this message, Please enter a valid date.
  • Magento now loads the customer attribute page as expected, and users can edit attributes, when attributes are set to default values. Previously, Magento did not completely load this page when attributes values were set to default.

Directory

  • The Swagger definition for eav-data-attribute-option-interface has been corrected. Previously, when you created a REST call to an endpoint that returns an object of eav-data-attribute-option-interface and is_default is set to true, is_default returns an object instead of the expected Boolean. Fix submitted by Pratik Oza in pull request 21164. GitHub-18525

Downloadable

  • You can now successfully download a downloadable product by clicking the link to the product in your downloadable products list. When you previously clicked this link. the page did not open correctly, and Magento threw this error, Something went wrong while getting the requested content. Fix submitted by Amol Chaudhari in pull request 21262. GitHub-18944
  • Added missing sort order to columns on Downloadable Product links page. Fix submitted by Pratik Oza in pull request 21662. GitHub-21278
  • You can now successfully change the sample file for an existing downloadable product. Previously, when you tried to change this sample file, Magento did not save the new file, and did not display an error message.  Fix submitted by Ravi Chandra in pull request 22471. GitHub-6272
  • A logged-in user’s My Downloads page now displays links to the relevant downloadable products when Order Item Status to Enable Downloads is set to Pending. Previously, Magento displayed only the names of the pending products, and no links for downloadable products were displayed. Fix submitted by James in pull request 22072. GitHub-21753

EAV

  • Initialization has been added to two class variables that can be returned by class methods as parameters of type array. Without this initialization, both variables are returned as null, which can cause Magento to throw an Invalid argument supplied for foreach() warning. Fix submitted by Wojtek Naruniec in pull request 22086. GitHub-21134
  • Magento no longer throws an exception when the fixed-Quantity_and_stock_status attribute has Change Visible on Catalog Pages on Storefront enabled. Fix submitted by Amol Chaudhari in pull request 21802. GitHub-13612
  • The \Magento\Eav\Model\Entity\Collection\AbstractCollection::importFromArray() method now returns a usable collection. Previously, the _isCollectionLoaded property was false, and every interaction threw an exception. Fix submitted by Lorenzo Stramaccia in pull request 22422. GitHub-21868

Email

  • Corrected problems with disabling and enabling order-related emails. Fix submitted by Serhiy Zhovnir in pull request 20954. GitHub-18698
  • Magento no longer sends via asynchronous email sending any sales-related emails that were created when email sending was disabled once email sending is enabled. Fix submitted by Serhiy Zhovnir in pull request 22108. GitHub-21786

Frameworks

  • Magento now sorts media directories alphabetically during image upload.
  • Fixed misalignment of the import successful message icon in the Admin. Fix submitted by Kajal Solanki in pull request 19333. GitHub-19328
  • Added the as attribute to linkType in lib/internal/Magento/Framework/View/Layout/etc/head.xsd with three possible options: style, script, and font. Fix submitted by Amol Chaudhari in pull request 21261. GitHub-18347
  • The use of the SessionManagerInterface class has replaced the direct use of SessionManager. Fix submitted by Pratik Oza in pull request 21357. GitHub-19274
  • The module ranking in app/etc/config now remains consistent when a new module is added but no other changes are made. Previously, a module addition affected the module ranking, which resulted in multiple unnecessary conflicts. Fix submitted by Eduard Chitoraga in pull request 21423. GitHub-8479,GitHub-16116
  • Magento now logs exceptions during autoloading instead of throwing exceptions. This conforms with PSR-4 guidelines. Fix submitted by Amol Chaudhari in pull request 21435. GitHub-20773

Cache framework

  • A syntax error in magento2/lib/internal/Magento/Framework/Cache/Backend/Database.php has been corrected. Fix submitted by Nirav Kadiya in pull request 21078. GitHub-13309

JavaScript framework

  • JavaScript validation on UI form components now works as expected. Previously, adding the validate-per-page-value-list validation rule resulted in a failure for every non-empty value in the field to which it as applied. Fix submitted by Roman Kis in pull request 21813. GitHub-21734

General

  • Sorting on stores from the Admin (Stores > All Stores) now works as expected. Fix submitted by afirlejczyk in pull request 17371. GitHub-7283
  • Product attribute labels are no longer translated but maintain their store-specific valu Fix submitted by Pratik Oza in pull request 21864. GitHub-21750
  • You can now change customer groups when creating a new customer during order creation on the Admin. Fix submitted by Amol Chaudhari in pull request 21239. GitHub-7974
  • The store switcher now redirects users to the correct store.

Import/export

  • The Skip error entries validation method for the import now works as expected. Previously, Magento did not let you skip an invalid entry and prevented import.
  • Magento now correctly saves product URL keys in Arabic. Previously, keys in Arabic returned 404 errors.

Indexers

  • You can now access a list of Admin indexers after creating a custom index. Previously, when you tried to access the Admin indexer list, Magento threw a fatal error. Fix submitted by Cristiano Casciotti in pull request 21576. GitHub-21510

Infrastructure

  • The productAvailabilityChecks argument has been added to Magento\Sales\Model\Order\Reorder\OrderedProductAvailabilityChecker. Previously, this required argument was missing. Fix submitted by Amol Chaudhari in pull request 21920. GitHub-20825
  • Logic has been removed from the constructor of Magento\Sales\Model\Order\Address\Validator. Previously, installation of the product could fail if this class was injected in the constructor through a command in a custom module when this class contained logic. Fix submitted by Bartłomiej Szubert in pull request 21719. GitHub-21692
  • You can now use a period (.) for inline CMS content edits. Previously, if you included a period (.) in your edits, Magento displayed this error, There are 1 messages requires your attention. Please make corrections to the errors in the table below and re-submit. Fix submitted by Hiren Pandya in pull request 21939. GitHub-21374
  • QuoteManagement::submitQuote now logs all root exceptions. Previously, Magento logged only the second exception in exception.log. Fix submitted by Lars Roettig in pull request 22037. GitHub-14926, GitHub-18752
  • Widget parameters can now contain multidimensional arrays. Fix submitted by Stanislav Ilnytskyi in pull request 22214. GitHub-19909

Layered navigation

  • Setting price navigation step calculation for layered navigation to Automatic (equalize product counts) now works as expected. Previously, results were not in the equals range, but omitted products. Fix submitted by Nazar Klovanych in pull request 22453. GitHub-6715, GitHub-21960

Logging

  • Editing a theme now creates an entry in the Admin action log as expected.
  • The downloads report table (Admin > Reports > Downloads) now displays an accurate count of all downloadable products and the number of times they have been downloaded. Fix submitted by Shikha Mishra in pull request 22523. GitHub-22223

MSRP

  • MAP (minimum advertised price) prices for the simple products that belong to a configurable product are now supported. MAP prices for these products are now successfully handled and displayed on the configurable product page and the category page display of the configurable product.

Newsletter

  • The newsletter subscription input box now displays all text in mobile view. Fix submitted by dipti2jcommerce in pull request 20370. GitHub-20163
  • You can now change pages at an expected speed from the Admin newsletter subscribers page (Marketing > Communications > Newsletter Subscribers). Previously, it took excessively long to move off this page

Orders

  • Magento no longer displays a negative number in the dashboard to represent a canceled order. Fix submitted by Eduard Chitoraga in pull request 21944. GitHub-18754, GitHub-21281

Page Cache

  • Page caching is no longer active when maintenance mode is enabled. Previously, Magento cached pages from all IP addresses during maintenance mode.

Payment methods

  • Magento creates an order using PayPal Payflow Pro as expected when a customer enters all the credit card information that PayPal needs to create the transaction. Previously, Magento did not create the order even though all necessary credit card information has been entered.
  • Magento now displays the account owner name that you’ve specified when you add a shipping address when using Braintree through PayPal and are redirected to Magento. Previously, Magento displayed the account owner’s name, not the name you specified.
  • The PayPal securetoken and securetokenid are no longer vulnerable to compromise.
  • The transfer cart line items and transfer shipping options in the the Shipping step of checkout now work for PayPal. GitHub-19064
  • Alt attribute text that describes credit card type or stored payment methods during checkout has been added to support accessibility. Fix submitted by Amol Chaudhari in pull request 21206. GitHub-21089
  • You can now place an order using Cybersource payment from the Admin.
  • Product search results now display the correct special price as set by a scheduled update. Previously, search results displayed the original special price, not the price set by the scheduled update.

Pricing

  • Magento now saves customizable option price input on the store-view level when Catalog Price Scope is set to Global. Previously, customizable option prices were not saved on the store-view level when Catalog Price Scope was set to Global.
  • The quick order form now handles the SKUs that you enter for configurable products as expected. Previously, Magento threw an error when you tried to enter the SKU for a configurable product.
  • Tier pricing for bundle products now works as expected: Magento displays the correct price in the cart, and reminds customers that they can buy a specific quantity of the product for a discount. Previously, Magento did not calculate the price correctly, and did not display any informative messages about tier pricing on the category and product pages.

Reports

  • Reports now include orders from only the websites that the administrator has permissions for in multisite deployments. Previously, a report run by an administrator with access to one website only contained information about products and sales on other websites.
  • The date range in reports no longer displays the same start and end dates. Fix submitted by Pratik Oza in pull request 21589. GitHub-20128
  • The downloads report table (Admin > Reports > Downloads) now displays an accurate count of all downloadable products and the number of times they have been downloaded. Fix submitted by Shikha Mishra in pull request 22523. GitHub-22223

Review

  • Fixed rendering of the Add your text link on the Product page. Fix submitted by Amol Chaudhari in pull request 20257. GitHub-20221
  • Pending Reviews are now correctly labeled under System > User Roles > Add New Role > Role Resources, and Magento now displays a new Pending reviews menu under Marketing > User Content. Previously, Magento displayed the Reviews menu twice. Fix submitted by Eduard Chitoraga in pull request 21849. GitHub-20924

Sales

  • When you place an Admin order for a product with a custom price, the sales_order_item table now behaves the same as it would for an order of a product with a regular price (specifically, the price column contains the custom price excluding tax). Previously, the sales_order_item table’s price column displayed the custom price including tax.
  • Magento now lets you enter new orders in the Admin on non-default websites in multisite deployments where some countries have been restricted.
  • Corrected misalignment of page elements on the Admin product reorder page. Fix submitted by Amol Chaudhari in pull request 21241. GitHub-20919
  • You can now successfully re-order a virtual product. Fix submitted by Shikha Mishra in pull request 21513. GitHub-15059
  • You can now change customer groups when creating a new customer during order creation on the Admin. Fix submitted by Amol Chaudhari in pull request 21239. GitHub-6162
  • Fixed display of the Luma theme My Account Order status tabs in mobile view. Fix submitted by suryakant-krish in pull request 21250. GitHub-21070

Sales rule

  • Magento now displays the Cart Price Rule code on an order details Admin page if free shipping applies. Previously, Magento did not display information about the Sales rule or why shipping was free.
  • Sales rule validation has been refactored to eliminate a leak in the salesrule collection. Previously, a poorly constructed SQL query resulted in poor performance. Fix submitted by David Führ in pull request 21699. GitHub-19117
  • We’ve fixed an error in discount calculations that prevented merchants from creating a rule that set a tex rate and 100% discount. Previously, when a tax rule was applied, and a 100% discount was also applied during check out, the shopping cart displayed a negative grand total. Fix submitted by Stanislav Ilnytskyi in pull request 22227. GitHub-10790
  • Layered navigation results no longer includes price ranges that contain no products.
  • Elasticsearch now correctly returns only products whose SKUs contain dashes when your search criteria specifies SKUs that contain dashes. Previously, search results contained unmatched products as well as products whose SKUs contained dashes. Fix submitted by Nazar Klovanych in pull request 20876. GitHub-20716
  • Fixed misalignment of the advanced search page’s price field in mobile view. Fix submitted by Amol Chaudhari in pull request 21114. GitHub-20157
  • Corrected formatting of the Advance Search link in page footers. Fix submitted by Amol Chaudhari in pull request 21892. GitHub-20809
  • The search icon on Admin page headers now works as expected. Fix submitted by Saphal Jha in pull request 22441. GitHub-22152

Shipping

  • The tracking pop-up window now displays an accurate value for the delivery date for FedEx shipments in transit.
  • Magento now provides quotes for DHL shipments when DHL Content Type is set to Non DocumentsFix submitted by gwharton in pull request 19488. GitHub-19485
  • If you retrieve an order, and then use the getShippingMethod as an object function to retrieve the shipping method, Magento now returns null if no shipping method has been defined. Previously, this function returned an undefined index error if a shipping method was not available. Fix submitted by Mahesh Singh in pull request 20866. GitHub-20380

Swatches

  • Product images now display the color option you chose when you applied a color filter in layered navigation. Previously, wrong colors were randomly displayed.
  • You can now change an attribute type from swatch to dropdown without using data. Previously, changing an attribute type from swatch to dropdown deleted swatch options for all attributes. Fix submitted by Amol Chaudhari in pull request 20745. GitHub-20396
  • When you configure a price rule for configurable products with swatches, Magento now a shows the special price for products that match the price rule. Previously, Magento displayed both the old price and the special price for the matching configurable products. Fix submitted by Pratik Oza in pull request 21695. GitHub-19276

Tax

  • You can now successfully search for a tax rule based on both the Name and Tax Rate fields. Previously, Magento threw an MySQL error. Fix submitted by Tuyen Nguyen in pull request 21535. GitHub-21521
  • The value of product_price_value in the shopping cart data section now includes taxes if the configuration settings are set accordingly (Stores > Configuration > Sales > Tax > Shopping Cart Display Settings > Display Prices > Including Tax). Fix submitted by Pratik Oza in pull request 21570. GitHub-20310
  • The tax that is applied to a simple child product is now based on the tax class of that product. Previously, Magento based the tax for a child product on the tax class of its parent product.
  • The tax that is applied to simple child product is now based on the tax Class of that product. Previously, the tax was based on the tax class of the parent product.
  • The shopping cart full tax summary now displays total tax as expected instead of individual tax values. Fix submitted by Hiren Pandya in pull request 21961. GitHub-19701, GitHub-11358

Testing

  • The Squiz.Operators.ValidLogicalOperators PHP-CS rule has been added to the static test rules. Fix submitted by Maksym Novik in pull request 21543. GitHub-21062
  • Integration and functional tests no longer fail when tests encounter filtered configuration values. Previously, Magento threw an error and tests failed if some configuration values were intentionally excluded. Fix submitted by Bettina in pull request 22415. GitHub-22307

UI

  • Form fields of type multiline now work as expwected on Admin forms. Fix submitted by Vivek Kumar in pull request 21561. GitHub-8086, GitHub-18115
  • The default design of the Edit and Remove items buttons on the wishlist page now match. Fix submitted by Amol Chaudhari in pull request 21118. GitHub-20790
  • Magento no longer throws a console error during a guest checkout when the list of allowed countries is changed from the Admin. Fix submitted by Amol Chaudhari in pull request 20885. GitHub-20631
  • The ui-component validation error event now bubbles upwards when an abstract element is nested in a field set. Fix submitted by Prince Patel in pull request 20510. GitHub-17926
  • Fixed issue where the drop-down toggle arrow did not close as expected on product pages. Fix submitted by Nirav Patel in pull request 20616. GitHub-20240
  • Fixed the misalignment of drop-down menus on the Advanced Pricing page. Fix submitted by Pratik Oza in pull request 21229. GitHub-18775
  • The icon that identifies a drop-down menu throughout the product interface now reflects the changing state of the drop-down menu’s status (expanded or collapsed). Fix submitted by Eduard Chitoraga in pull request 21320. GitHub-21196
  • You can now programmmatically upload an image for the customer attribute. Previously, Magento threw this error, error: Base64 is not defined. Fix submitted by Nazar Klovanych in pull request 21437. GitHub-19983
  • Corrected tabbing issue on the product page. Fix submitted by Amol Chaudhari in pull request 21588. GitHub-21077
  • If you retrieve an order, and then use the getShippingMethod as object function to retrieve the shipping method, Magento now returns null if no shipping method has been defined. Previously, this function returned an undefined index error if a shipping method was not available. Fix submitted by Mahesh Singh in pull request 20866. GitHub-20380
  • Magento now cancels previous scrolling actions as expected when you click Add to cart on a product page. Previously, Magento scrolled back to the qty input box the same number of times as you clicked Add to cart. Fix submitted by Amol Chaudhari in pull request 22358. GitHub-21715
  • Magento now properly renders double hyphens (–) in attribute tags. Previously, Magento replaced the double hyphen (—-) in classes with a single hyphen (-), which caused classes that contained the – to be rewritten. Fix submitted by Amol Chaudhari in pull request 21804. GitHub-10645

URL rewrite

  • Magento now retains filter terms after you’ve applied a filter to the Admin url_rewrites table, then click the back button. Fix submitted by Amol Chaudhari in pull request 21805. GitHub-21805
  • The import process now retains permanent redirects for outdated product URLs as expected. Previously, the import process removed these redirects, and when you tried to open the changed product by the old URL key, Magento displayed a 404 page. Fix submitted by Shikha Mishra in pull request 20737. GitHub-20282
  • The store switcher now works in multistore deployments. Previously, the switcher redirected the user to the home page, not to the alternative store view as expected. Fix submitted by Janak Bhimani in pull request 21140. GitHub-19714
  • Magento no longer lets you create non-human readable URLs for products.

VAT ID

  • Greek VAT numbers can now be validated. Fix submitted by Amol Chaudhari in pull request 21169. GitHub-6960

Web API framework

  • Magento now throws an error as expected when you send an APU request that specifies pageSize and currentPage values that exceed the number of products in the catalog you’re querying. Previously, when you queried a catalog and specified values that exceeded catalog size, the API would ignores the specified currentPage value, and returned the same results as the highest valid currentPage.
  • You can now use REST in scope all to save an existing category that does not have a name attribute. Previously, Magento threw this exception, Could not save category with message. The "Name" attribute value is empty. Set the attribute and try again. Fix submitted by Saphal Jha in pull request 22440. GitHub-22309

  • The PUT /V1/products/:sku/media/:entryId API operation now updates product images as expected. Previously, this operation updated the label, types, and disabled settings, but the actual file-content was not replaced with the values that were provided in base64_encoded_data. Fix submitted by Nirav Patel in pull request 22533. GitHub-22402

Wishlist

  • The quantity field now has limits on both the type and number of characters that can be entered. Previously, you could enter both extremely large number and letters into this field, which resulted in undesirable and inaccurate changes in quantity
  • Customer wishlists now include review summaries for included products. Fix submitted by Amol Chaudhari in pull request 21759. GitHub-21419

Known issue

  • Issue: The Async/Bulk Web APIs support only the default store view. A hot fix for this issue will be available in the near future.

Community contributions

This release includes substantial community contributions: over 100 GitHub issues resolved and over 350 pull requests merged. We are grateful to the wider Magento community for this effort and would like to acknowledge their contributions to this release.

Individual contributor contributions

The following table identifies contributions from our community members. This table lists the external pull requests, the GitHub issue number associated with it (if available), and the community member who contributed the pull request.

Contributing community member Pull Requests Related GitHub Issues
Yamaha32088 #19760 7967
amol2jcommerce #20443 20427
shikhamis11 #20737 20282
amol2jcommerce #20738 20611
amol2jcommerce #20885 20631
torhoehn #19943  
amol2jcommerce #20490 20487
mageprince #20510 17926
amol2jcommerce #20554 20193
amol2jcommerce #20586 20278
amol2jcommerce #20640  
amol2jcommerce #20602 20580
amol2jcommerce #20646  
amol2jcommerce #20745 20396
GovindaSharma #20776 19942
amol2jcommerce #20782 20723
amol2jcommerce #20257 20221
amol2jcommerce #20589  
amol2jcommerce #20644 19482
ccasciotti #18524  
Nazar65 #20876 9988, 20716
ssp58bleuciel #21078 13309
eduard13 #21110 20786
speedy008 #19333 19328
tdgroot #21081  
XxXgeoXxX #20566 13675
mage2pratik #20845 19139
mageprince #21123  
irajneeshgupta #21124 20382
eduard13 #20821 20497
eduard13 #21155  
eduard13 #21156  
amol2jcommerce #20404 20402
niravkrish #20616 20240
amol2jcommerce #21114 20157
janakbhimani #21140 19714
mage2pratik #21160  
mage2pratik #21161  
amol2jcommerce #21163 20816
amol2jcommerce #21169 6960
gelanivishal #18866 18357, 18954
parag2jcommerce #20476 20468
mage2pratik #21157 20906
mage2pratik #21162 20911
mage2pratik #21159 20989
mage2pratik #21168  
amol2jcommerce #21172 20800
amol2jcommerce #21198  
amol2jcommerce #21199 20555
amol2jcommerce #20529 20492
amol2jcommerce #21166  
eduard13 #21224  
eduard13 #21238 21101
amol2jcommerce #21239 6162, 7974, 21144
amol2jcommerce #21240  
mage2pratik #21245 17861
suryakant-krish #21250 21070
irajneeshgupta #20539 20299
amol2jcommerce #21261 18347
amol2jcommerce #21262 18944
amol2jcommerce #21263 19561
tufahu #21273 18158
mage2pratik #21269  
keyuremipro #21282  
mage2pratik #21287  
amol2jcommerce #20781 20755
serhiyzhovnir #20954 18698
mage2pratik #21164 18525
amol2jcommerce #21242  
Dharmeshvaja91 #21247  
dipti2jcommerce #20370 20163
amol2jcommerce #21173 20760
mage2pratik #21229 18775
eduard13 #21320 21196
amol2jcommerce #21243 20299
amol2jcommerce #21206 21089
amol2jcommerce #21208 19891
amol2jcommerce #21241 20919
amol2jcommerce #20743 20518
amol2jcommerce #20970  
amol2jcommerce #21207  
mage2pratik #21202 20010
amol2jcommerce #21213  
mageprince #21317  
yogeshsuhagiya #21344  
mage2pratik #21357 19274
maheshWebkul721 #20866 20380
eduard13 #21423 8479, 16116
Nazar65 #21437 19983
gwharton #18472 11740, 14945, 14952, 16355
Nazar65 #21325 19166
shikhamis11 #21513 15059
dominicfernando #21537  
mageprince #21538 21398
amol2jcommerce #21434 13982
udovicic #19552  
eduard13 #21527 21383
suneet64 #19551 18134
amol2jcommerce #21531  
amol2jcommerce #21532  
mage2pratik #21570 20310
amol2jcommerce #21588 21077
mage2pratik #21568 21425
mage2pratik #21569 21327
lisovyievhenii #21598 14882
amol2jcommerce #21652  
rikwillems #19098  
wojtekn #21528 21294
eduard13 #21691 20527
mage2pratik #21694 21493
mage2pratik #21695 19276
david-fuehr #21699 19117
Nazar65 #21080 21073
mage2pratik #21589 20128
igor-imaginemage #20412  
driskell #21051  
amol2jcommerce #21433  
mage2pratik #21662 21278
david-fuehr #21698  
amol2jcommerce #21759 21419
VitaliyBoyko #21793 167
ananth-iyer #21800 21384
amol2jcommerce #21802 13612
amol2jcommerce #21804 10645
amol2jcommerce #21838 21648
ccasciotti #21037  
amol2jcommerce #21435 20773
eduard13 #21849 20924
eduard13 #21859  
mage2pratik #21872  
novikor #21543 21062
ccasciotti #21576 21510
Cyanoxide #21661  
eduard13 #21845 12396
amol2jcommerce #21844 21467
mage2pratik #21864 21750
amol2jcommerce #21432 14412
iGerchak #21918  
amol2jcommerce #21920 20825
Bartlomiejsz #21719 21692
afirlejczyk #17371 7283
vivekkumarcedcoss #21561 8086, 18115
hiren0241 #21939 21374
eduard13 #21943  
tuyennn #21535 21521
eduard13 #21944 18754, 21281
gwharton #19488 19485
amol2jcommerce #21118 20790
kisroman #21813 21734
amol2jcommerce #21892 20809
amol2jcommerce #22039  
amol2jcommerce #22069 21805
lfluvisotto #21512 21499
larsroettig #22037 14926, 18752
wojtekn #22086 21134
ihor-sviziev #21819  
amol2jcommerce #22070 10893
XxXgeoXxX #20392  
eduard13 #21945  
hostep #22140 15972
denispapec #18980 18580
mage2pratik #20844 20614
amol2jcommerce #22181  
ilnytskyi #22227 10790
Nazar65 #22232 21755
floorz #20107 20078
mage2pratik #21203  
amol2jcommerce #21946 20209
Nazar65 #22078 7906
Nazar65 #22174 18548
Den4ik #22250 21789
VitaliyBoyko #22267 22238
gwharton #18443  
hostep #21340 5021, 13902
hiren0241 #21961 11358, 19701
amol2jcommerce #22295 20366
crankycyclops #22072 21753
JeroenVanLeusden #22369 7623, 11892
davidalger #22282 15090
slackerzz #22422 21868
ilnytskyi #22214 19909
saphaljha #22440 22309
saphaljha #22441 22152
yogeshsuhagiya #22451  
yogeshsuhagiya #22448  
Ctucker9233 #22439 15828
Nazar65 #22453 6715, 21960
serhiyzhovnir #22108 21786
saphaljha #22465  
ravi-chandra3197 #22471 6272
niravkrish #22473  
bcerban #22415 22370
amol2jcommerce #22378 21375
ihor-sviziev #22464  
amol2jcommerce #22358 21715
keyuremipro #22499 22474
shikhamis11 #22523 22223
niravkrish #22533 22402
amol2jcommerce #22534 22299
Wirson #22288 22249
saphaljha #22543 21596
niravkrish #22536 9155
amol2jcommerce #22551  
barbanet #22413  
amol2jcommerce #22579 21978
webkul-deepakkumar #22582 20917

Partner contributions

The following table highlights contributions made by Partners. This table lists the Partner who contributed the pull request, the external pull request, and the GitHub issue number associated with it (if available).

Partner Pull Request Related GitHub Issue
Atwix 22108, 22267, 21944, 21945, 22214 21786, 22238, 21281, 18754, 19909
Krish Technologies 22440, 22441, 22465, 22543, 20844, 21203, 22536, 21961, 22471, 21118, 22473, 22582, 21944, 21961, 22440, 22441, 22465, 22473, 22533, 22536, 22543 22309, 22152, 21596, 20614, 9155, 19701, 11358, 6272, 20790, 20917, 21281, 18754, 19701, 11358, 22309, 22152, 22402
ISM eCompany 20392  
TechDivision 22037, 22037 18752, 14926, 20391
MageSpecialist 22422, 22078 7906, 21868
Vaimo 21203  
Two Jay 21118, 21892, 22039, 22069, 22070, 22181, 21946, 22295, 22378, 22358, 22534, 22551, 22579, 22535 20790, 21611, 21805, 10893, 21375, 20209, 20366, 22270, 21978, 22299, 21715
Mediotype 22282, 22086, 22413 21134, 15090
integer_net GmbH 21946, 22439 20209, 15828
H&O 22369 11892, 7623

System requirements

Our technology stack is built on PHP and MySQL. For details, see Technology stack requirements.

Installation and upgrade instructions

See How to get the Magento software for complete installation and upgrade information.

Migration toolkits

The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see Install the Data Migration Tool. Consider exploring or contributing to the Magento Data Migration repository.

The Code Migration Toolkit helps transfer existing Magento 1.x store extensions and customizations to Magento 2.2.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts.

Updated