Skip to content

Latest commit

 

History

History
2381 lines (1023 loc) · 240 KB

ReleaseNotes2.3.0Commerce.md

File metadata and controls

2381 lines (1023 loc) · 240 KB
group title
release-notes
Magento Commerce 2.3.0 Release Notes

Release notes published November 28 and last updated on January 9, 2019.

We are pleased to present Magento Commerce 2.3.0 General Availability. This release includes numerous functional fixes and enhancements.

Highlights

Magento Commerce 2.3.0 includes a wealth of new features as well as hundreds of enhancements and fixes to the core product. Look for the following highlights in this release:

Apply patch PRODSECBUG-2198 to address critical SQL injection vulnerability

A critical SQL injection vulnerability has been identified in pre-2.3.1 Magento code. To quickly protect your store from this vulnerability only, install patch PRODSECBUG-2198. However, to protect against this vulnerability and others, you must upgrade to Magento Commerce or Open Source 2.3.1. We strongly suggest that you install these full patches as soon as you can.

See the description of PRODSECBUG-2198 in the Magento Security Center for information on this vulnerability.

Follow these steps to download and apply this patch:

  1. Access My Account.

  2. Navigate to the Downloads tab. Select the Magento edition and version you need.

  3. Select Support Patches and Security Patches, then PRODSECBUG-2198.

  4. Download the patch and upload to a specific directory in your Magento installation such as m2-hotfixes (confirm that the directory is not accessible publicly).

  5. From your project root, apply the patch.
 git apply ./m2-hotfixes/<patch-file-name>.

  6. Refresh the cache from the Admin (System > Cache Management).

Merchant tool enhancements

  • Inventory Management (provided by Multi Source Inventory (MSI)) is now available with Magento 2.3.0. It lets merchants manage inventory for all product types in a single warehouse and across complex shipping networks. Merchants can manage these locations as sources, tracking on-hand inventory quantities per product. Stocks map these sources and sales channels (websites) to provide an accurate, salable quantity as inventory pools for concurrent checkout and product reservations. Inventory Management also updates order and shipment options, giving you full control over your stock.

    MSI is a Magento Community Engineering special project open to contributors. To take part and contribute, see the MSI GitHub repository and wiki to get started. Join us in our Slack channel (or self signup) to discuss the project.

  • CMS enhancements include banner enhancements. You can now create banner content in native Magento WYSIWYG (or Page Builder. See the Page Builder discussion below. (Within the product interface, we now use the term “dynamic block” instead of “banner”.) We've also updated the WYSIWYG editor to use TinyMCE 4.6. (TinyMCE is now integrated into Magento through an adapter that allows it to be replaced with any other WYSIWYG editor.)

  • PageBuilder is a drag-and-drop visual content editing tool that lets merchants customize the appearance of their storefront without writing any HTML or CSS. Registered participants can install PageBuilder Beta on {{site.data.var.ee}} 2.3.0 code. See check Magento 2.3 product availability and Magento blog.

Improved developer experience

  • PWA Studio is a set of tools that support the development, deployment and maintenance of progressive web applications. See Magento PWA documentation for information about this toolset as well as information about contributing to this ongoing project.

  • Declarative schema simplifies installation and upgrade procedures for Magento and extensions. Declarative schema reduce the need for many database scripts, eliminating the need to maintain these scripts. And here's a big advantage: This features enables Magento to roll out database schema changes in patch releases (not currently possible). This feature supports split and shared database structures and database structure validation.

  • GraphQL API is now available with Magento 2.3.0. This API provides an alternative to REST and SOAP web APIs for custom frontend development, including headless storefronts and PWAs. See GraphQL Developer Guide for more information about Magento's implementation of this data query language. GraphQL is a Magento Community Engineering special project open to contributors. To take part and contribute, see the GraphQL GitHub repository and wiki to get started. Join us in our Slack channel (or self signup) to discuss the project.

  • Asynchronous Web APIs allow any previous Magento REST APIs to be called asynchronously. This community-contributed feature includes separate status APIs that have been created to check the status of each request. Developers can now use the asynchronous APIs in conjunction with queues that have also been migrated to Magento Open Source. 
See Asynchronous web endpoints for more information.

  • Bulk Web APIs allow all existing REST APIs to accept payloads with multiple entities. These community-contributed bulk APIs support more efficient and scalable implementations that eliminate round-trip network overhead. Like asynchronous APIs, bulk web APIs can be used in conjunction with queues that have also been migrated to Magento Open Source. See Bulk endpoints for more information.

  • Updates to Magento's tech stack (including upgraded PHP support to maintain PCI compliance) include upgrades to Redis, MySQL, Elasticsearch, and compatibility with PHP 7.2.x.

Substantial security enhancements

  • Over 30 security fixes to core Magento code

  • Cache flush ACL provides granular access to cache management settings to prevent accidental changes that could potentially affect system performance. This ACL also lets merchants control which administrative users can clear site caches.

  • 2FA/CAPTCHA protects the Admin panel against stolen passwords and affects stores against bots.

See Magento Security Center for a comprehensive discussion of these issues. All exploitable security issues fixed in this release (2.3.0) have been ported to 2.2.7, 2.1.16, 1.14.4.0, and 1.9.4.0, as appropriate.

Core bundled extension enhancements

Amazon Payments

  • Added branding to the Amazon Pay configuration section in the Admin

  • Improved extension architecture and performance

dotmailer

  • dotmailer now supports the Magento Commerce split database mode.


Klarna Payments

  • Added descriptive text to the Refund API call 


  • Added a link to the Klarna merchant portal 


  • Added a detailed Klarna message in the Magento Admin where needed 


  • Added an initial Magento Functional Test Framework (MFTF) test and support for future tests 


  • Extended cleanser filtering 


  • Added support for PHP 7.2 and dropped support for PHP 5.6

Magento Shipping

  • The Magento Shipping Click & Collect feature offers merchants the ability to:

    • Provide Click & Collect as a shipping option to customers, enabling them to directly collect shipments from designated source locations or stores

    • Configure source locations available for Click & Collect pick-ups

    • Updates to Shipment Form for UPS (U.S. only)

    • Customers can also select Click & Collect locations during checkout. This feature is supported by workflows and notifications for Click & Collect pick up, packing, and collection.

  • The batch details page now displays collection point addresses, as applicable

  • Activation notices can now be translated.

  • Tracking popups for multi-package shipments are now displayed.

  • The dispatch details page has been enhanced.

Vertex

  • The Magento implementation of Vertex now supports Vertex O Series 7.0.

Other improvements

  • Elasticsearch support for Magento Open Source version. Elasticsearch support was previously provided in Magento Commerce only.

  • Improvements to release packaging plus an increase in test automation, results in a faster, more efficient release process and improved product quality.

  • Change in versioning for B2B product to match the versioning of the core product.

  • Upgrade of Magento Functional Test Framework (MFTF) to 2.3.6.

Fixed issues

We've fixed hundreds of issues in the Magento 2.3.0 core code.

Installation, upgrade, deployment

* Magento backup functionality is no longer enabled by default, and the code has been deprecated. See [Back up and roll back the file system, media, and database](https://devdocs.magento.com/guides/v2.3/install-gde/install/cli/install-cli-backup.html) for more information on backup strategies. * All existing installation and data scripts have been converted into declarative schema data patches for easier deployment. * The `bin/magento setup` command now provides a rollback option that prompts the user to optionally retain files for future rollbacks. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request 11750*. [GitHub-6460](magento/magento2#6460) * The `user.ini` files now recommend the correct values for `php_value memory_limit`.

Fix submitted by Mr. Lewis in pull request 11760. GitHub-11322

* You can now use the `bin/magento cron:install` and `cron:remove` commands to install or uninstall cron across multiple Magento installations with the same crontab. Previously, you could not create different crontab entries for multiple Magento installations that were in different folders because they used the same `#~ MAGENTO START` and `#~ MAGENTO END` suffixes. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11360](magento/magento2#11360. * The default time setting for `cron` success and failure history is now seven days. *Fix submitted by [Max Chadwick](https://github.com/mpchadwick) in pull request [11463](magento/magento2#11463. * In Magento deployments using multiple languages, the `Framework/translation.php` constructor that sets a store's locale now uses the correct locale. *Fix submitted by [Wiard van Rij](https://github.com/wiardvanrij) in pull request [10913](magento/magento2#10913. [GitHub-10673](magento/magento2#10673) * The `.htaccess` template now uses Apache 2.4 syntax. *Fix submitted by [Jonas Hünig](https://github.com/jonashrem) in pull request [11466](magento/magento2#11466. [GitHub-10810](magento/magento2#10810) * When a callback during commit throws an exception, the calling plugin can now distinguish this exception from an unsuccessful commit, and logs an exception. Previously, Magento threw an asymmetric transaction rollback error. *Fix submitted by [Wayne Theisinger](https://github.com/waynetheisinger) in pull request [9955](magento/magento2#9955. [GitHub-6497](magento/magento2#6497) * The links that the Admin panel provides to backup packages now link to the expected packages. Previously, these links permitted you to download only the latest backup package. *Fix submitted by [will-b](https://github.com/will-b) in pull request [10593](magento/magento2#10593. [GitHub-10032](magento/magento2#10032) * All `cron` schedule times are now saved in UTC and then displayed to the user in the expected time zone. Previously, the `cron` schedule times in the database were in local date time formats and not UTC, while the other system dates and times were saved as UTC in the database. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10432](magento/magento2#10432. [GitHub-4237](magento/magento2#4237) * You can install and deploy Magento without first creating an administrator account. * Improved the cron job management process during the deploy phase to prevent database locks and other critical issues. Now, all cron jobs stop during the deploy phase and restart after deployment completes. * Statistics collection for the Reports module is now disabled by default. To enable or partially disable it, see **System Configuration** > **General** > **Reports**. Note that certain product features, such as Magento Commerce dynamic customer segments (specifically the ones based on viewed products), rely on Reports data collection to function properly. * You can now add a new IP address to an existing list by appending the new address with the `- add` flag rather than replacing a former address with a new one. *Fix submitted by [Serhii](https://github.com/serhii-balko) in pull request [13783](magento/magento2#13783. [GitHub-10559](magento/magento2#10559) * Magento now provides an input/output helper object that supports easier access to styling objects in the Symfony console. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13741](magento/magento2#13741. * The `.htaccess` file in the `pub/static` folder now includes a `RewriteBase` directive, which supports the installation of Magento under a directory inside the web root. Note: Setting this directive in the `.htaccess` file in Magento root without setting it in `.htaccess` under `pub/static` will result in a missing file. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13788](magento/magento2#13788. * The list of IP addresses for maintenance status no longer includes commas, which facilitates directly copy and pasting the addresses as needed. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13727](magento/magento2#13727. * `PhpFormatter` has been refactored to recursively return the array representation using short array syntax `[]` instead of long `array()`. If the given variable is not an array, it uses the standard `var_export` behavior. This change supports Magento coding standards. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [1193](magento/magento2#1193. [GitHub-758](magento/magento2#758) * The icons that represent the Extension Manager and Module Manager in the main area and left-hand menu of the Web Setup Wizard have been refactored for consistency with Magento UI guidelines. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12960](magento/magento2#12960. [GitHub-11236](magento/magento2#11236) * You can now deploy static content on demand while in production mode. * Magento now restarts cron jobs as needed after a cron job was terminated during execution. * The `CrontabManager.php` file has been updated as follows: If `crontab` has already been populated, the `bin/magento cron:install` command adds `#~ MAGENTO START` and the rest of code directly to the last row of crontab without any spaces. *Fix submitted by [Michele Fantetti](https://github.com/WaPoNe) in pull request [12609](magento/magento2#12609. * `Zend_Json` in the setup `PackagesAuth` has been replaced with the new `Serializer\Json`. [GitHub-9236](magento/magento2#9236) * Static versioning and minification no longer break email font styles. [GitHub-8241](magento/magento2#8241) * We've fixed an issue with using the command line to install or remove `crontab`. Previously, installing or removing `crontab` via the command line appended `2>&1` to entries, even those not related to Magento. [GitHub-11586](magento/magento2#11586) * The **Back** button that was previously accessible during the first step of installation has been disabled. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14460](magento/magento2#14460. [GitHub-14307](magento/magento2#14307) * Multifields that previously lacked labels in forms now display labels. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14383](magento/magento2#14383. [GitHub-7428](magento/magento2#7428) * The `app:config:dump` command now has an argument that supports dumping only the specified settings that are required to prepare static content on a build system, not all system settings. This new option (`config-types`) makes it possible to dump scopes and themes automatically (which are needed for a build system) while managing system settings manually using `config:set --lock-config`. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [14807](magento/magento2#14807. [GitHub-11396](magento/magento2#11396) * You can now switch to default mode from production mode. Previously, if you tried to switch back to default mode, Magento displayed this error, `Cannot switch into given mode 'default'`. [GitHub-4292](magento/magento2#4292) * The Web Setup wizard now loads successfully when session storage is configured to use memcache in `env.php`. [GitHub-9633](magento/magento2#9633) * Triggers now work as expected during database backup. Previously, triggers were missing, which resulted in incorrect indexing. [GitHub-9036](magento/magento2#9036) * Magento no longer automatically disables maintenance mode during a scheduled back up. [GitHub-9918](magento/magento2#9918) * Database rollback with SSH now works as expected. [GitHub-12064](magento/magento2#12064) * New command-line interface commands that support enabling and disabling the Magento Profiler have been added. See [Enable profiling (MAGE_PROFILER)](https://devdocs.magento.com/guides/v2.2/config-guide/bootstrap/mage-profiler.html) for more information. [GitHub-9277](magento/magento2#9277) * A fatal error no longer occurs when you run `bin/magento sampledata:deploy` before installing Magento. *Fix submitted by [Quaternion](https://github.com/4quaternion) in pull request [13571](magento/magento2#13571.
  • Disabling the Amazon Payments feature while using the Web Wizard to install Magento no longer breaks the checkout process.

Web server configuration

* `web/unsecure/base_url` config has been added to website and store scope. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [13659](magento/magento2#13659. * The `static/` string has been removed from the `resource` parameter, allowing `static.php` to generate the specified resource correctly. *Fix submitted by [Daniel](https://github.com/nieltg) in pull request [13361](magento/magento2#13361. * Fixed an issue with the shared configuration settings in `app/etc/config.php` that caused `recursion detected` errors during deployment. * You can now set a default value to fields with config field type `image` or `file`. [GitHub-10253](magento/magento2#10253) * We’ve removed `Zend_Json` from `Setup/Migration.php`. [GitHub-10341](magento/magento2#10341) * The licenses listed in `composer.json` have been updated for accuracy. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [17268](magento/magento2#17268. [GitHub-17225](magento/magento2#17225) * Magento multi-store installations now use the store view-specific values from the Store Configuration if they differ from the global default configuration settings. Previously, Magento loaded the wrong home page in multi-store deployments. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [16046](magento/magento2#16046. [GitHub-15205](magento/magento2#15205), [GitHub-15245](magento/magento2#15245) * Magento no longer displays deprecated currencies in the currency dropdown menu that is displayed during the setup process. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13782](magento/magento2#13782. [GitHub-13760](magento/magento2#13760) * You can now successfully create a new store view from the Admin. Previously, Magento displayed this message when you attempted to create a new storeview, `Requested store is not found`. *Fix submitted by [Pieter Hoste](https://github.com/hostep) in pull request [14043](magento/magento2#14043. [GitHub-12421](magento/magento2#12421), [GitHub-12405](magento/magento2#12405) * Magento now sends order sent email as expected. *Fix submitted by [pawcioma](https://github.com/pawcioma) in pull request [14051](magento/magento2#14051. [GitHub-13769](magento/magento2#12421), [GitHub-12405](magento/magento2#13769) * The output of the `setup:static-content:deploy` command has been changed to a less alarming color. *Fix submitted by [Pieter Hoste](https://github.com/hostep) in pull request [13975](magento/magento2#13975. [GitHub-12404](magento/magento2#12404) * XML sitemap generation can now be scheduled. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14908](magento/magento2#14908. [GitHub-5768](magento/magento2#5768) * Issues with the database backup command have been resolved. [GitHub-1287](magento/magento2#12877) * Magento now displays a more informative message you update a module and then switch to a different branch of source control that contains a lower version of that module. [GitHub-9981](magento/magento2#9981) * Disabling the **State is Required for** field from **Admin** > **Stores** > **Settings** > **Configuration** > **General** now works as expected. [GitHub-12894](magento/magento2#12894)

AdminGS

* Admin global search preview now works as expected. Previously, this feature worked inconsistently, and search results differed depending on which area was being searched (for example, Products, Categories, or Customers). * Restricted Admin users can now successfully create and save product attributes. * Restricted Admins can now create and edit CMS blocks as expected. Previously, Magento displayed this error message when an administrator with restricted privileges tried to create a new CMS block: `Warning: array_intersect(): Argument #1 is not an array in /var/www/html/magento2ee/app/code/Magento/AdminGws/Model/Models.php on line 1075`. * The `Magento_Authorization` module is now installed after `Magento_Authorization` to satisfy `Magento_Authorization`'s dependency upon authorisation tables. *Fix submitted by [Anton Evers](https://github.com/AntonEvers) in pull request [56](https://github.com/magento-partners/magento2ee/pull/56)*.

Analytics

* PHPDocs have been added as needed for methods throughout the code base. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13337](magento/magento2#13337. * Users are now subscribed by default to the Advanced Reporting service.

Backend

* Customers can now successfully download and export PDFs after logging in. Previously, customers were redirected to the Admin when trying to download or export data to a PDF right after logging in. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15766](magento/magento2#15766. [GitHub-15510](magento/magento2#15510) * Admin tabs are now ordered as expected. Previously, when you used the `addTabAfter` method to add two or more tabs to the Admin (for example, to the order view page), the sort order of the tabs was incorrect. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [16412](magento/magento2#16412. [GitHub-16174](magento/magento2#16174) * The headers of the User Agent Rules table now align as expected with the content of the table's rows. *Fix submitted by [Justin](https://github.com/JRhyne) in pull request [16792](magento/magento2#16792. [GitHub-16703](magento/magento2#16703) * The **Enter** button on the customer grid now filters the table as expected. Previously, clicking **Enter** did not filter contents but simply changed the display to the next page of the grid. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [17650](magento/magento2#17650. [GitHub-17789](magento/magento2#17789) * The **Report an Issue** link on Admin pages now opens in a new tab. *Fix submitted by [Danilo Argentiero](https://github.com/DaniloEmpire) in pull request [14016](magento/magento2#14016. [GitHub-14010](magento/magento2#14010)

Banner (now Dynamic Block)

* The Magento CMS banner has been renamed to dynamic block to better represent this feature. Banners from **Content** > **Banners** have been renamed across the Admin and the code base. Correspondingly, the Magento widget banner rotator type (from **Content** > **Widget** > **Widget type**) has been renamed to dynamic blocks rotator. * You can now create dynamic block (formerly banners) content from the WYSIWYG editor. You can create store-specific content for dynamic blocks by switching between scopes using the Magento Scope Selector.

Bundle

* You can now successfully save updates to bundle products. [GitHub-6916](magento/magento2#6916) * Unused `count()` methods have been removed from template files throughout the code base. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [13138](magento/magento2#13138. * You can now successfully delete an option from a bundle product. * Imported bundle products are now assigned stock status as expected. Previously, when you imported a new or replacement bundle product, Magento did not generate an entry in `cataloginventory_stock_status`, and as a result, Magento could not successfully display the product on the storefront. *Fix submitted by [Adam Paterson](https://github.com/adam-paterson) in pull request [14016](magento-engcom/import-export-improvements#104. [GitHub-12330](magento/magento2#12330) * Magento no longer includes expired special prices for bundle options when displaying product price ranges. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15768](magento/magento2#15768. [GitHub-15457](magento/magento2#15457) * Reports now handle bundle and group products as expected. Previously, when a merchant viewed the Products in cart report, the report gives error if the cart contains a bundle or a grouped product. [GitHub-12079](magento/magento2#12079)

B2B

* Magento now opens a new window for edit purposes when a merchant selects **Edit User in New Tab** from the Company Users page. Previously, when a merchant tried to edit Company users from the storefront by selecting **Edit User in New Tab**, Magento threw a JSON error. * Administrators with appropriate permissions can now change the status of a company to **Rejected**. Previously, Magento did not save the change in status, and threw an error. * Guests can now view products as expected when shared catalogs are enabled. Previously, if a merchant added a product when shared catalogs were enabled, guest users could not view the product, even when shared catalogs were later disabled. * Category pages now display as expected all products whose SKUs contain either single or double quotation marks. Previously, Magento threw an error when trying to set pricing and structure on a shared catalog when product SKUs contained these characters. * You can now successfully search for products when the **Shared Catalog** setting is enabled. * Customers can now use the **Add Product By SKU** button to add configurable products to a sales order. * Access to the Companies resource can now be explicitly set on the Roles Resources page in Admin. Previously, this resource was available only to top-level administrators with all resources selected. * Magento now displays informative messages about both successful and failed actions when a company administrator adds or deletes entries in the Company Users section. Previously, Magento displayed this error message, `Something went wrong` in the response body, and did not display a message. * Tier prices for already added products no longer change when a merchant adds additional products to an order from the Admin. Previously, the tier price of products in an order changed when the merchant added more products to the order, applied a custom price to one of the products, or applied a coupon code to the order. * Merchants can now create a company for which the region or state is not required. Previously, Magento did not create this company, and displayed this error, `Invalid value of "" provided for the region_id field`. * Magento now displays the orders that are associated with customer accounts on the Orders page. Previously, in the Admin display of customer accounts that have orders associated with them, Magento did not display orders on the Orders tab but instead displayed a blank page. * Merchants can now create new user roles that do not have access to Quotes. * Merchants can now successfully update product prices and currencies using **Admin** > **Stores** > **Settings** > **Configuration** > **Currency Setup**.

CAPTCHA

* Customers can now successfully log in when guest checkout is disabled and CAPTCHA is enabled. Previously, Magento threw the `Provided form does not exist` error when a customer tried to log in under these conditions. * CAPTCHA validation now works when the **Website Restrictions** setting is enabled.

Cart and checkout

* Magento no longer displays an integrity constraint violation error after when a customer reorders a product with custom options. [GitHub-12705](magento/magento2#12705) * You can now save emoji in custom product options. [GitHub-12058](magento/magento2#12058) * Magento no longer caches warning messages as often as a customer clicks the **Update Shopping Cart** button while the shopping cart page loads. Previously, Magento cached a warning message each time a customer clicked this button while the page loaded in Firefox or Chrome, and this action resulted in multiple warning messages appearing on the top of the shopping cart page. * Magento now displays the expected state in the Multishipping New Address form when a customer enters information on the Ship to Multiple Addresses page. *Fix submitted by [enriquei4](https://github.com/enriquei4) in pull request [13367](magento/magento2#13367. [GitHub-8069](magento/magento2#8069) * `update button.phtml` has been simplified to optimize translation. *Fix submitted by [Karla Saaremäe](https://github.com/ChuckyK) in pull request 12155*. * You can now enter zip codes that contain no spaces for locations in the Netherlands. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [11961](magento/magento2#11961. [GitHub-11898](magento/magento2#11898) * The text that appears above the billing address field on the checkout page has been edited to remove redundancy. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [11399](magento/magento2#11399 * The One Touch Ordering feature allows users to place orders without going through full checkout. *Fix submitted by [Daniel Korzeniowski](https://github.com/danielkorzeniowski)*. * You can now delete the last product in your shopping cart even when the **Minimum Order Amount** setting (**Admin** > **Sales**) is enabled. Previously, if you tried to delete the last item in your cart under these circumstances, Magento would throw an exception. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10601](magento/magento2#10601 [GitHub-6151](magento/magento2#6151) * The checkout agreements `getList` method was refactored to include a new listing interface that supports the ability to set search criteria. *Fix submitted by [Stanislav Idolov](https://github.com/sidolov) in pull request [13221](magento/magento2#13221. * The shopping cart totals description on the checkout page now displays discount labels as expected. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [13223](magento/magento2#13223. * The checkout controller's JSON usage has been updated to use `$this->resultFactory->create(ResultFactory::TYPE_JSON);` instead of the object manager. * Refreshing the checkout page no longer deletes the shipping address when a guest checks out. Previously, when the persistent shopping cart was enabled, refreshing the check out page affected information entered into form fields for a guest checkout. * Cart price rule condition values now handle commas as expected. * When a customer is on the payment page and tries to reorder or retrace her steps backward through the checkout process, Magento now displays all the relevant shipping methods. Previously, Magento displayed only one shipping method under these circumstances. * You can now successfully change currency for an order before you complete the order. Previously, if you changed currency, when you proceeded to checkout by choosing a Bank Transfer Payment as Payment Method, Magento displayed, **Your credit card will be charged for**. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [993](magento/magento2#993. [GitHub-12526](magento/magento2#12526) * Magento no longer combines the Custom Checkout and Shipping steps when Magento loads the checkout page. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [975](magento/magento2#975. * Magento now alerts customers when a previously applied gift card has been removed during checkout. * 
Guest orders placed with gift cards can now be canceled as expected. * Braintree now permits customers to change the billing address on orders when paying with a saved card. Previously, Braintree used the same address for both billing and shipping. * Customers can now change an existing value in the checkout page’s **State/Province** field to an alphanumeric value. Previously, when a customer tried to edit this field in this way, Magento did not place the order, and displayed a descriptive error message. * Magento now successfully processes an order that contains products that will be shipped to multiple shipping addresses. Previously, Magento did not complete the order, but displayed an error message. * Magento now saves the address that a customer enters during checkout if the customer selects **Save in address book**. Previously, Magento saved the address, but left the default billing address field empty. * Excess requests on the checkout page have been removed. Previously, `customer/section/load` was called four times when Magento loaded the cart for the first time. *Fix submitted by [Andrey Bezyazychnyy](https://github.com/andrewbess) in pull request [14782](magento/magento2#14782. [GitHub-15457](magento/magento2#15457) * The alignment of the **Purchased Order Form** button on the Review & Payments page has been corrected. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [15577](magento/magento2#15577. [GitHub-15334](magento/magento2#15334) * `$.browser` has been deprecated and removed from the code base. *Fix submitted by [Jonathan Kingston](https://github.com/jonathanKingston) in pull request [14270](magento/magento2#14270. [GitHub-14267](magento/magento2#14267) * The minicart now updates as expected when a customer adds a configurable product to the cart while accessing the storefront on a device running Internet Explorer 11.x. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14192](magento/magento2#14192. [GitHub-13820](magento/magento2#13820) * Magento no longer unchecks the **My billing and shipping address are the same** checkbox when a customer uses an offline custom payment method for an order. Previously, when a customer used an offline custom payment method for an order, Magento unchecked this checkbox on payment step if the shipping address was updated. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [17628](magento/magento2#17628. [GitHub-14819](magento/magento2#14819) * Magento no longer displays an undefined string on the Order Summary page. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [17697](magento/magento2#17697. [GitHub-17492](magento/magento2#17492) * Unnecessary blank lines have been removed from `app/code/Magento/Catalog/etc/adminhtml/menu.xml`. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16180](magento/magento2#16180. * Placeholders for the password field no longer suggest that a password is optional. Previously, the placeholder for the password field in the checkout page suggested that the password was optional, but after validation, Magento indicated that the password field was mandatory. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [16521](magento/magento2#16521. [GitHub-16378](magento/magento2#16378) * The minicart now correctly displays product titles that contain special characters. *Fix submitted by [afirlejczyk](https://github.com/afirlejczyk) in pull request [13802](magento/magento2#13802. [GitHub-13652](magento/magento2#13652) * A shipment step has been added to `OnePageCheckoutOfflinePaymentMethodsTest`. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [16164](magento/magento2#16164. [GitHub-1164](magento/magento2#1164) * Newly registered customers can now successfully complete an order after entering a new address. Previously, Magento displayed this message on the checkout page, `An error occurred on the server. Please try to place the order again.` [GitHub-10583](magento/magento2#10583) * Merchants can now successfully add products to the shopping cart using REST. Previously, the shopping cart displayed a total price of zero (0) for products creating from the Admin using REST. [GitHub-2991](magento/magento2#2991) * Customers can now successfully sign in after first clicking the **Checkout** button. [GitHub-10834](magento/magento2#10834) * Magento now successfully processes an order even when the customer quickly double-clicks on the minicart’s **Proceed to checkout** button. Previously, if a customer double-clicked this button while the page was loading, Magento emptied the shopping cart. * Magento now displays a pre-filled edit form for checkout agreements when single-store mode is enabled. *Fix submitted by [gwharton](https://github.com/gwharton) in pull request [15063](magento/magento2#15063. [GitHub-7822](magento/magento2#7822)

Cart Price rules

* The cart price rule now uses specified conditions correctly when applying discounts on configurable products. * Magento no longer throws an error when a customer applies a discount code on the checkout page. [GitHub-9763](magento/magento2#9763)

Catalog

* The `getUrl` method in `Magento\Catalog\Model\Product\Attribute\Frontend\Image` no longer returns an image URL with double slashes. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13635](magento/magento2#13635. [GitHub-13497](magento/magento2#13497) * An incorrect return type in the `StockRegistryInterface` API has been corrected. *Fix submitted by [Burlacu Vasilii](https://github.com/vasilii-b) in pull request [17562](magento/magento2#17562. [GitHub-15085](magento/magento2#15085) * Magento no longer throws an error when you try to create a new URN catalog for a project when a blank one already exists in PHP storm. [GitHub-5188](magento/magento2#5188) * You can now save a product after updating multiple select attributes through mass action. [GitHub-11329](magento/magento2#11329) * Magento now currently handles apostrophes in attribute option values created from the Admin. [GitHub-12127](magento/magento2#12127) * The Save & Duplicate option in the catalog manager now works as expected. [GitHub-11532](magento/magento2#11532) * Magento now displays the default validation message for `validate-item-quantity` as expected. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14508](magento/magento2#14508. [GitHub-13582](magento/magento2#13582) * The `Magento\Catalog\Model\ResourceModel\Category\Collection::joinUrlRewrite` method now uses the `storeId` value set on the actual collection of the store rather than the `storeId` retrieved from the store manager. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14381](magento/magento2#14381. [GitHub-13704](magento/magento2#13704) * Magento no longer displays unused product attributes with a value of N/A or NO on the storefront. * Editing an order with backordered items from the Admin now results in a new order with backordered items correctly marked. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14444](magento/magento2#14444. [GitHub-10057](magento/magento2#10057) * Magento no longer overrides prices with more than two digits after the decimal (for example, 9.4880) by rounding the last two digits. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14461](magento/magento2#14461. [GitHub-14249](magento/magento2#14249) * Magento now throws an exception as expected when a user tries to submit a product review without selecting a star rating. Previously, if a user submitted a product review without selecting a star rating, Magento assigned a one-star rating. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16808](magento/magento2#16808. [GitHub-16764](magento/magento2#16764) * Merchants can now successfully change the default label of the **country of manufacture** attribute for an existing product from the Admin. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14714](magento/magento2#14714. [GitHub-6879](magento/magento2#6879) * You can now sort products by quantity from the category page. *Fix submitted by [Dmytro Paidych](https://github.com/dimonovp) in pull request [14179](magento/magento2#14179. [GitHub-13556](magento/magento2#13556) * Magento no longer creates pagination automatically when a product has more than 20 tier prices in the Advanced Pricing area. *Fix submitted by [saravananvelu](https://github.com/saravananvelu) in pull request [15360](magento/magento2#15360. [GitHub-15210](magento/magento2#15210) * Magento now alerts you to an error when a merchant tries to save a product without completing required fields. * You can now sort products by the store configuration default field even when this value differs from category default sort by setting. [GitHub-10772](magento/magento2#10772) * Magento now displays product alerts in the Admin product edit page when a customer is subscribed to a product's stock or price. [GitHub-10007](magento/magento2#10007) * The `data-container` class name is now based on view mode. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17751](magento/magento2#17751. [GitHub-15319](magento/magento2#15319) * Parent theme image height settings (specified in `view.xml`) no longer override the height settings assigned to individual images. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17725](magento/magento2#17725. [GitHub-15319](magento/magento2#12250) * You can now save a title for a product from the **Product** > **Customizable Options** page. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [17607](magento/magento2#17607. [GitHub-6305](magento/magento2#6305) * You can now add a custom fieldset to the Admin category editor without changing the position of the General section (that is, the section that contains the **Enable category**, **Include in Menu**, and **Category Name** fields). Previously, Magento moved the General section to the last position of the form. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [17604](magento/magento2#17604. [GitHub-15041](magento/magento2#15041) * Magento now maintains product image roles as expected after upgrade. Previously, image roles randomly disappeared from product pages after upgrade. *Fix submitted by [Eduard Chitoraga](https://github.com/eduard13) in pull request [17554](magento/magento2#17554. [GitHub-10687](magento/magento2#10687) * REST search queries in which the `condition_type` is set to `in` or `nin` now return results for all specified values. *Fix submitted by [Eduard Chitoraga](https://github.com/eduard13) in pull request [16742](magento/magento2#16742. [GitHub-14035](magento/magento2#14035) * A type error in the payment void method of the Authorizenet module has been fixed. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [16838](magento/magento2#16838. [GitHub-5067](magento/magento2#5067) * You can now add a product with a price of zero (0) to a wishlist. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16537](magento/magento2#16537. [GitHub-16479](magento/magento2#16479) * Magento now maintains the default products sort order of “newest first” when you upgrade your Magento deployment. Previously, after upgrade, the default products order in categories changed from “newest first” to “oldest first”. [GitHub-15627](magento/magento2#15627) * An error with the template notation for `Magento_CatalogWidget` module has been fixed. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16856](magento/magento2#16856. [GitHub-16529](magento/magento2#16529) * Magento no longer throws an error when you re-save a product attribute with a new name. *Fix submitted by [Raul Mateos](https://github.com/raumatbel) in pull request [11619](magento/magento2#11619. [GitHub-6770](magento/magento2#6770) * The grouped product page now shows the lowest price for a simple product. *Fix submitted by [evgk](https://github.com/evgk) in pull request [9266](magento/magento2#9266. [GitHub-9265](magento/magento2#9265) * You can now add a new product with custom attributes that has the same name and attributes as a previously deleted product. Previously, Magento did not let you add this new product because a `request_path` with the same value already existed in `table url_rewrite` from the previous product. *Fix submitted by [Nickolas Malyovanets](https://github.com/nmalevanec) in pull request [12538](magento/magento2#12538. [GitHub-12110](magento/magento2#12110) * Magento now saves the assigned background color for images correctly. Previously, if you updated the background color of a product image, the background color was always black. *Fix submitted by [Raul Mateos](https://github.com/raumatbel) in pull request 11888 [11888](magento/magento2#11888. [GitHub-8799](magento/magento2#8799) * You can now assign and save a custom option assigned a price of 0. *Fix submitted by [Raul Mateos](https://github.com/raumatbel) in pull request [11842](magento/magento2#11842) * The ProductRepository SKU cache is no longer corrupted when the value assigned to `cacheLimit` is reached. *Fix submitted by [Thomas](https://github.com/heldchen) in pull request 11537*. * The price filter on a product category page now works as expected. Previously, if you applied this filter to a category listing, Magento displayed redundant product listings and unrelated products. *Fix submitted by [Mayank Zalavadia](https://github.com/mayankzalavadia) in pull request 11206*. [GitHub-11139](magento/magento2#11139) * You can now successfully create a product from API Product Management in deployments where the "Update by Schedule" indexer mode is set. * Configurable products are no longer displayed on a category page when all children are disabled by mass action and the **display out-of-stock products** setting is off. * Magento no longer displays a 404 error when you change category permissions from Product Detail pages when multistore view is enabled. * Magento no longer throws an exception when you add a product with a tiered price reduced to $0.00 to your shopping cart. * The **Hide from Product Page** option now works for the child product of a configurable product. * Translation functionality has been added to customer attribute labels in the Admin, making it possible to translate a label as appropriate for the locale of an Admin user. *Fix submitted by [Christian Münch](https://github.com/cmuench) in pull request [13251](magento/magento2#13251. * Magento now displays the Catalog Products List widget on the storefront. *Fix submitted by [Rostislav Sabischenko](https://github.com/RostislavS) in pull request [12765](magento/magento2#12765. * Magento now respects the maximum depth setting for category navigation. *Fix submitted by [Arnoud Beekman](https://github.com/arnoudhgz) in pull request [12640](magento/magento2#12640. * Category page X-Magento-Tags headers no longer contain product cache identities when category display mode is set to **Static block only** when Varnish is selected as the cache engine. * You can now specify a negative value for a product in the orders **Quantity** field when editing the order from the Admin. * You can now create a product date attribute that contains a day value than exceeds 12 (in the format dd/mm/yyyy). Previously, when you created a product attribute with a default date specifying a day greater than 12, Magento did not save the attribute, but instead displayed this error, `Invalid default date`. * Sort by Price now works as expected on the catalog search page. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [929](magento/magento2#929. [GitHub-12468](magento/magento2#12468) * Magento now correctly sets a `product_links` position attribute even when the attribute value is not set in a GET request. Previously, only the first two of each link type was shown in the backend or in a GET request response, even though Magento correctly added the product links to the database. *Fix submitted by [Mohammad Haj-Salem](https://github.com/mohammedsalem) in pull request [12650](magento/magento2#12650. * You can now unset a category image on the store-view level when the image is defined on all store views. * Usage of EAV indexer tables in CatalogWidget module has been removed. * Magento now correctly renders print previews of product compare pages. Previously, the print view did not display text from the right side of the product compare page. * The validation hint on the product custom option page text field now updates as expected with the number of characters left before hitting the maximum. * The `PUT /V1/products/:sku/media/:entryId` call updates a product's media gallery as expected. * Products no longer disappear from the Admin Product grid after you delete its active schedule update. * Single quotation marks in attribute values are no longer auto-converted to HTML when saved. * The SEO-friendly URL for category pages now works as expected. * We've optimized queries on loading product attributes when store scope is used. * Products are no longer automatically assigned to websites based on store scope. If a product is assigned to one website only, that relationship is maintained even after the product is saved from the Admin. * Product Display Pages (PDPs) now load as expected when a product name contains a double quotation mark. Previously, Magento did not load the image if its name contained double quotation marks. * A restricted Admin user who is authorized to access only designated websites can no longer remove products from undesignated websites. * Customers viewing a storefront on a mobile device can now see the text displayed when clicking on the "More Information" accordion anchor without having to scroll back up. Previously, the Mobile PDP accordion widget did not work as expected on mobile devices. * Magento now maintains designated sort order for products after saving a product in a category. Previously, product sort order reverted to sorting by product ID. * You can now filter successfully by date from the Admin on products in multistore environments. Previously, values in the product creation date field (that is, the date set when **Set Product as New from Date** is selected) were arbitrarily changed, and filtering did not work. * Attributes with no assigned values on a product are no longer displayed with a value of N/A in the Compare Products page or block as expected. * Prices are now visible as expected on the category page for a configurable product when you re-enable them from the Admin. Previously, when you re-enabled a previously disabled product and assigned it to a different store, Magento did not display its price on the category or product page. * Category smart rules now work as expected for partial values when conditions include using a dropdown attribute and "contains”. * Magento now correctly sets the default option for the `status` attribute when a merchant creates a product. Previously, Magento changed a default setting of disabled (**No**) to **Yes** during product creation. * `auto_increment` values are now preserved after restarting the MySQL server. * You can now successfully save a product with custom options to a different website in multisite deployments. Previously, when you added another site to a product with customizable options, Magento corrupted these options by splitting into multiple options or duplicating an option. * A product’s **Use Default Value** check box for attributes is now unchecked by default when you add a new website to a product’s scope. * The subcategory URL path is now updated for a store view according to the URL path of its parent category. * Magento now displays drop-down attribute values in the catalog product grid after applying filtering on drop-down/select attributes. *Fix submitted by [Dmytro Paidych](https://github.com/dimonovp) in pull request [14174](magento/magento2#14174. [GitHub-13006](magento/magento2#13006) * The JavaScript address converter no longer mutates the function's `address.street` argument. (The argument remains an array as expected.) *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14250](magento/magento2#14250. * You can now see category changes on the storefront as expected after the changes have been saved. Previously, Magento did not display changes to product categories on the storefront until reindexing occurred even if **update on schedule** was set and the cache had been cleaned. * Product attribute are now displayed as expected in layered navigation with Elasticsearch 5.0+. * Product pages now show the product name as the browser title and include meta title tag in the HTML source. (The title and meta title tags can now be used independently.) *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17771](magento/magento2#17771. [GitHub-15501](magento/magento2#15501)

Catalog Rule

* Catalog rules are now applied as expected when products are sorted by price.

Cleanup and simple code refactoring

* Zoom is no longer abnormally active when a mouse hovers over the category dropdown menu on the product page. [GitHub-5129](magento/magento2#5129) * `getAttributeText($attributeCode)` now returns the correct return type. [GitHub-11691](magento/magento2#11691) * All references to Magento Connect has been removed from the Find Partners & Extensions links. [GitHub-12632](magento/magento2#12632) * Method name `getDispretionPath` has been corrected to `getDispersionPath` in `\lib\internal\Magento\Framework\File\Uploader.php`. [GitHub-12506](magento/magento2#12506) * Unused temporary variable `$data` has been removed from the `app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php` method. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13733](magento/magento2#13733. * addres has been corrected to address in `app/code/Magento/Customer/etc/events.xml`. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13794](magento/magento2#13794. * Code formatting in `app/code/Magento/Swagger/view/frontend/templates/swagger-ui/index.phtml` has been updated. *Fix submitted by [p-bystritsky](https://github.com/p-bystritsky) in pull request [13616](magento/magento2#13616. * The edit cart product input validators have been changed from hardcoded to dynamic in `app/code/Magento/Checkout/view/frontend/templates/cart/item/configure/updatecart.phtml`. *Fix submitted by [p-bystritsky](https://github.com/p-bystritsky) in pull request [13615](magento/magento2#13615. * Typos have been corrected throughout the code base. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13300](magento/magento2#13300. * Redundant code has been removed for clarity in `app/code/Magento/AdminNotification/Model/Feed.php`. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13303](magento/magento2#13303. * Misspellings in method names have been fixed, and deprecated methods removed in several adminhtml files. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13304](magento/magento2#13304. * A typo in the database column comment of `app/code/Magento/Catalog/Setup/InstallSchema.php` has been fixed. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13318](magento/magento2#13318. * Typos throughout the code base have been corrected. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13283](magento/magento2#13283. * A misspelled method name in `\Magento\BundleImportExport\Model\Import\Product\Type\Bundle` has been corrected. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13187](magento/magento2#13187. * A misspelled parameter name in `\Magento\Weee\Test\Unit\Model\TaxTest::testGetWeeeAmountExclTax` has been corrected. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13189](magento/magento2#13189. * Catelog has been corrected to catalog throughout the code base. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [13097](magento/magento2#13097. * Consturctor has been corrected to constructor in the `app/code/Magento/Ui/view/base/web/js/lib/core/class.js` JavaScript class. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12976](magento/magento2#12976. * The syntax of `expectException()` calls has been improved. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14621](magento/magento2#14621. [GitHub-11059](magento/magento2#11059) * JavaScript in the Tav module has been refactored to meet Magento code standards. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15560](magento/magento2#15560. [GitHub-15352](magento/magento2#15352) * Magento no longer unexpectedly empties a customer's shopping cart during checkout when concurrent requests occur. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [14429](magento/magento2#14429. [GitHub-4301](magento/magento2#4301) * `@codingStandardsIgnoreFile` has been removed from the `TypeLocatorTest` file header. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12977](magento/magento2#12977. * Redundant spaces have been removed from the "configure your" phrase throughout the code base. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12961](magento/magento2#12961. * An unused `if` statement has been removed from `app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php`. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [12888](magento/magento2#12888. * Magento no longer displays duplicate element IDs for gift messages in the checkout page. *Fix submitted by [Julien Anquetil](https://github.com/julienanquetil) in pull request [15705](magento/magento2#15705. [GitHub-13415](magento/magento2#13415) * Magento now correctly aligns submenus. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15764](magento/magento2#15764. [GitHub-7897](magento/magento2#7897) * The `app/code/Magento/CurrencySymbol/view/adminhtml/templates/grid.phtml` file has been refactored to remove redundant function calls. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15763](magento/magento2#15763. [GitHub-15355](magento/magento2#15355) * Client-side email validation now works in Internet Explorer 11.x the same way as it does in Chrome. Previously, a leading or trailing space on the following pages resulted in client-side validation failure in Magento stores deployed on Internet Explorer 11.x. *Fix submitted by [Piyush Dankhara](https://github.com/dankhrapiyush) in pull request [15884](magento/magento2#15884. [GitHub-6058](magento/magento2#6058) * Magento now correctly aligns page elements on the home page and category page of the Hot Seller section. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15896](magento/magento2#15896. [GitHub-15213](magento/magento2#15213) * Extraneous margins on the product list and product entries have been removed. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15975](magento/magento2#15975. [GitHub-15308](magento/magento2#15308) * `inline-block` issues with space and font-size in the Name form have been resolved. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [16097](magento/magento2#16097. [GitHub-16047](magento/magento2#16047) * The Shipping and Estimate Tax page now correctly displays country, city, and postal code fields. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16429](magento/magento2#16429. [GitHub-8222](magento/magento2#8222) * Unneeded JavaScript was removed from `logout.phtml` and replaced with a new JavaScript component. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [16993](magento/magento2#16993. [GitHub-13692](magento/magento2#13692) * Template syntax errors in `app/code/Magento/Theme/Block/Html/Breadcrumbs.php` have been corrected. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16805](magento/magento2#16805. [GitHub-15345](magento/magento2#15345) * Magento now disables the **Shop By** button on the search page when a customer sets additional search filters. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17418](magento/magento2#17418. [GitHub-13445](magento/magento2#13445) * Product image zoom now works as expected in stores running on Safari. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17418](magento/magento2#17418. [GitHub-13445](magento/magento2#13445) * The `$keepRation` parameter in the `Magento\Cms\Model\Wysiwyg\Images\Storage` class has been renamed to `$keepRatio`. *Fix submitted by [Eduard Chitoraga](https://github.com/eduard13) in pull request [17596](magento/magento2#17596. [GitHub-17587](magento/magento2#17587) * A typo in `gallery.php` has been fixed. *Fix submitted by [Daniël van der Linden](https://github.com/Spaggel) in pull request [17659](magento/magento2#17659. * The delete operation `entity_manager_delete_before` transaction event is no longer dispatched twice unnecessarily. *Fix submitted by [p-bystritsky](https://github.com/p-bystritsky) in pull request [17720](magento/magento2#17720. [GitHub-17715](magento/magento2#17715) * Unnecessary space has been trimmed from the email address field in the forgot password, check out, log in, and email to a friend forms. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16640](magento/magento2#16640. [GitHub-6058](magento/magento2#6058) * The JavaScript code in the `spli.phtml` template file for the button widget has been refactored. *Fix submitted by [Vijay Golani](https://github.com/vijay-wagento) in pull request [15731](magento/magento2#15731. [GitHub-15354](magento/magento2#15354) * The JavaScript code for the UrlRewrite module edit page has been refactored. *Fix submitted by [Vijay Golani](https://github.com/vijay-wagento) in pull request [15747](magento/magento2#15747. [GitHub-15356](magento/magento2#15356) * The annotation for the `formatDateTime` function in the `lib/internal/Magento/Framework/Stdlib/DateTime/TimezoneInterface.php` file has been corrected. The `locale` and `timezone` have been changed to `param string|null $locale` and `@param string|null $timezone`. [GitHub-15668](magento/magento2#15668) * Magento now displays the Contact Us page on the menu as expected. Previously, Magento displayed unnecessary space between the category page and the main footer. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15726](magento/magento2#15726. [GitHub-12601](magento/magento2#12601) * Magento now displays category images consistently. Previously, category images disappeared then reappeared after every save. * We’ve fixed the display of calculated tax for a logged-in customer when billing and shipping address differed.

CMS content

* Page layout issues that resulted from incorrect module sequencing have been corrected. Previously, the `Magento_theme` module was loaded too late, which resulted in unexpected display issues. * Magento no longer unexpectedly locks up CMS pages when a merchant changes a scheduler end date. Previously, when a merchant updated the end date for a CMS page after the current scheduler ended, Magento generated an error, and the merchant could no longer access any CMS page from the Admin. * We've added `EvenPrefix` and `EventObject` for CMS Collections to instantiate the observer for `$this->_eventPrefix . '_load_after'` and `$this->_eventPrefix . '_load_before'`. [GitHub-9900](magento/magento2#9900) * There is now an API interface for retrieving CMS pages and blocks by identifiers and store ID. [GitHub-10414](magento/magento2#10414) * Disabling a product now removes it from the flat index as expected. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16791](magento/magento2#16791. [GitHub-14966](magento/magento2#14966) * Breadcrumbs now work as expected when a product name contains quotation marks. Previously, the breadcrumbs on the product details page caused this syntax error to be thrown, `SyntaxError: Unexpected token x in JSON`. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [16148](magento/magento2#16148. [GitHub-15037](magento/magento2#15037) * CMS blocks are now validated to prevent multiple blocks from having the same store view and identifier. * You can now configure the native WYSIWYG toolbar to display only applicable controls. See [Using the Editor](https://docs.magento.com/m2/ce/user_guide/cms/editor.html) for more information. * The **Store** > **Attributes** > **Product ** **Input type** field now supports the use of the WYSIWYG editor as an input method when configuring custom product attributes.

Configurable products

* The product configuration creator now warns about invalid SKUs. [GitHub-11953](magento/magento2#11953) * The currency symbol no longer overlaps with an attribute option's price during configurable product creation. [GitHub-12713](magento/magento2#12713) * Magento now displays the price of a configurable product as expected even when its simple products are out-of-stock. Previously, Magento displayed a price of 0 for any configurable product price when its simple products were out-of-stock. [GitHub-12578](magento/magento2#12578) * Magento now displays the correct price for a product when its special-price option has not been selected. Previously, Magento displayed the expired `special_price` value for a configurable product even when you did not select the product option associated with that price. *Fix submitted by [Sergey P](https://github.com/simpleadm) in pull request [9796](magento/magento2#9796. [GitHub-6457](magento/magento2#6457) * Configurable product prices now correctly reflect VAT amounts as set by tax rule settings. Previously, Magento displayed a configurable product's old price without the VAT. *Fix submitted by [Sergey P](https://github.com/simpleadm) in pull request [9796](magento/magento2#9796. [GitHub-6729](magento/magento2#6729) * `LowestPriceOptionsProvider` now works as expected. Previously, Magento displayed expired special prices for configurable products, and displayed other problematic behaviors when working with special prices and configurable products. *Fix submitted by [Sergey P](https://github.com/simpleadm) in pull request [9796](magento/magento2#9796. [GitHub-7362](magento/magento2#7362) * You can now successfully add a new product that contains a custom attribute set with a multiselect attribute from the Admin. *Fix submitted by [Teun Lassche](https://github.com/thlassche) in pull request [10575](magento/magento2#10575. [GitHub-10565](magento/magento2#10565) * Configurable products are now sorted by visible prices as expected. Previously, sorting a catalog by price produced sort results that included the prices of out-of-stock products and disabled child products. * Magento no longer displays an inappropriate product price when a configurable product has two price options. Previously, Magento displayed the out-of-stock price of a configurable product when both an out-of-stock and in-stock price were configured. * Magento now reorders configurable attribute options as expected on the product page. *Fix submitted by [wardcapp](https://github.com/wardcapp) in pull request [12962](magento/magento2#12962. [GitHub-7441](magento/magento2#7441) * Magento now displays a helpful error when a merchant attempts to upload a file in an unsupported file format. * The wishlist now displays the appropriate product image for configurable products with selected options. Previously, Magento displayed the parent image instead of the image of the selected child product. [GitHub-8168](magento/magento2#8168) * The OptionsRepository API test now tests for the use of attribute ID instead of attribute code in the request body. *Fix submitted by [Bettina](https://github.com/bcerban) in pull request [14345](magento/magento2#14345. [GitHub-5580](magento/magento2#5580) * Prices are now readable when you assign prices that use a custom price symbol to a configurable product. Previously, the custom price symbol obscured the product price. [GitHub-12430](magento/magento2#12430) * Magento now saves multiselect attributes for a product in the Admin when it has a related product that uses another attribute set. [GitHub-12699](magento/magento2#12699) * Magento no longer lets a customer select a configurable product with an out-of-stock option to add to their cart. *Fix submitted by [Alexander Shkurko](https://github.com/Coderimus) in pull request [13417](magento/magento2#13417. * You can now add customizable options to a product as expected. [GitHub-11792](magento/magento2#11792) * The orders page now displays the correct URL when you navigate back to it after having viewed a specific order page. Previously, the URL of the orders page displayed the previous order ID when you navigated back to it. *Fix submitted by [Vinay Shah](https://github.com/vinayshah) in pull request [13390](magento/magento2#13390)

Cookies

* Customer data is now fully loaded after restarting the browser during an unexpired user session. Previously, the `section_data_ids` section of the session cookie was not properly completed. [GitHub-14912](magento/magento2#14912) * Cookies can now be modified by extension. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14366](magento/magento2#14366.

Customers

* Magento now uses the correct amounts when creating a credit memo for an order that was placed using store credit, a gift card, or reward points. * Administrators can see all customers when the **Share Customer Accounts** value is set to Global. * Magento now loads customer private data only once when system state changes. Previously, "Directory Data" and "Cart" were loaded twice after a user logged in to the system, which caused additional server load and traffic. * Magento now correctly displays both the default and additional shipping addresses provided during checkout. Previously, Magento displayed attributes with dropdown and multiple select types with incorrect values (option IDs instead of labels) for shipping addresses on checkout. * We have replaced `Zend_Json` with `\Magento\Framework\Serialize\JsonConverter::convert` in customer data. [GitHub-10259](magento/magento2#10259) * In multi-site deployments, a customer requesting a password reset on a non-default store should receive the password reset email from the non-default, not the primary, store. Previously, this password reset email was sent from the default store. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [15095](magento/magento2#15095. [GitHub-5726](magento/magento2#5726) * Unnecessary leading and trailing spaces have been removed from the customer account login page email field. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16956](magento/magento2#16956. [GitHub-6058](magento/magento2#6058) * Table alias prefixes in field mappings for customer group filter and sorting processors that were previously missing have been restored. Previous to this restoration, Magento threw this error when a merchant opened **Admin** > **Customers** > **All Customers**: `SQL Error: ambiguous column 'customer_group_id' in 'All customers' page in admin when extension attribute table is joined`. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15842](magento/magento2#15842. [GitHub-15822](magento/magento2#15822) * Customer accounts are now unlocked as expected after a password reset. [GitHub-15534](magento/magento2#15534) * The `adminhtml` customer edit page now displays any customer address validation errors. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [12937](magento/magento2#12937. * You can now successfully send email to customer email addresses that contain special characters when initiating email but clicking the **Resend Confirmation Mail** button on the customer account page. * Magento no longer displays the `Too many password reset requests` message when an administrator attempts to change a customer’s password from the Admin and the **max wait time between password resets** setting has been disabled in the store configuration settings. [GitHub-11409](magento/magento2#11409) * We’ve added methods to support setting text values for data pulled from the `customer_grid_flat` table during CSV export. [GitHub-10765](magento/magento2#10765) * The Confirmed email and Account Lock columns of the customer table CSV export are now populated with values as expected. [GitHub-10765](magento/magento2#10765) * Customer objects are now properly differentiated from each other after a `customer_save_after_data_object` event. Previously, the `orig_customer_data_object` and`customer_data_object` objects remained identical even after customer information was changed on the storefront. [GitHub-7915](magento/magento2#7915) * We’ve improved the error message that Magento displays when an administrator is redirected to a forced password change from the Admin user account page. *Fix submitted by [dimonovp](https://github.com/dimonovp) in pull request [14199](magento/magento2#14199. [GitHub-13768](magento/magento2#13768) * Customer attributes are now correctly validated on the Admin Order form. Previously, Magento validated attribute length after an order has been submitted, but not on the Admin Order form. * A user who has been denied permissions for negotiable quote editing can now create customer addresses. * Magento now trims trailing and leading spaces when saving the name of a new contact. *Fix submitted by [wardcapp](https://github.com/wardcapp) in pull request [12964](magento/magento2#12964. [GitHub-10415](magento/magento2#10415) * We’ve added cast to string for `GroupInterface::CUST_GROUP_ALL` in the customer group source model. [GitHub-10436](magento/magento2#10436) * Magento now always returns the user data for the current logged user. Previously, you could get another customer’s session information from sections controller without a timestamp. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14661](magento/magento2#14661. [GitHub-14049](magento/magento2#14049) * The PayPal module no longer automatically sets the customer dashboard page to Billing Agreements. *Fix submitted by [Mike Whitby](https://github.com/mikewhitby) in pull request [14322](magento/magento2#14322. [GitHub-7816](magento/magento2#7816) * The Customer group menu is now displayed under Customers when you create a user role for a customer group. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [17574](magento/magento2#17574. [GitHub-16499](magento/magento2#16499) * The welcome email sent to new customers is now based on the ID of the selected store. Previously, Magento did not check if the selected store from which to send the welcome email was associated with website when creating a customer account in the Admin.  *Fix submitted by [Jason Evans](https://github.com/jasonevans1) in pull request [17375](magento/magento2#17375. [GitHub-10411](magento/magento2#10411)

Customer attributes

* You can now clear the **Date of Birth** field in the customer edit page when accessed from the Admin. * Merchants can now create attributes for customer addresses (**Stores** > **Attributes** > **Customer Address**) as expected. Previously, a merchant could create an attribute, but Magento did not save or display it. * Magento now adds the address entered during checkout to a new account when a custom address attribute is required when creating a user account after checkout. * User-defined customer attributes are now copied to the `magento_customercustomattributes_sales_flat_order` table after placing an order as expected. * Magento no longer validates customer address attribute value length when the minimum/maximum length fields are not displayed on the Admin.

Dashboard

* Comments for `StorageInterface.php` have been updated for accuracy. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13729](magento/magento2#13729. * You can now search for configuration settings from the Admin. * Long input field labels now wrap by word, not letter. * The dashboard last order table now shows the correct table for the specified store view in a multisite deployment where storefronts use different currencies. *Fix submitted by [Ankur Raiyani](https://github.com/ankurvr) in pull request [15682](magento/magento2#15682. [GitHub-15660](magento/magento2#15660) * When you edit an Admin user role, Magento now displays the Customer Groups section under the Customers section as expected. Previously, Magento displayed the Customer Groups section under the **Stores** > **Other settings** section..

Directory

* When sorting by price, Magento now displays the same number of products no matter how it sorts products in the Catalog Product list. Previously, Magento reduced the product count by the number of disabled products when sorting by price. *Fix submitted by [AlexWorking](https://github.com/AlexWorking) in pull request [14215](magento/magento2#14215. [GitHub-13899](magento/magento2#13899) * Currency conversion rate services now work as expected in the Admin. * The new Currency Converter API supports retrieving TWD currency rates. Previously, the currency rates services that Magento connected to by default could not retrieve TWD rates. *Fix submitted by [Hirokazu Nishi](https://github.com/HirokazuNishi) in pull request [15542](magento/magento2#15542) * Magento now displays the default country selection when you add a new address as part of creating a new customer from the Admin. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14204](magento/magento2#14204 [GitHub-3483](magento/magento2#3483)

dotmailer

  • dotmailer now displays the first and last purchase categories in the customer sales data fields.

EAV

* The Product Attribute Repository's incorrect return values have been replaced with values that now adhere to `Magento\Catalog\Api\ProductAttributeRepositoryInterface (extends Magento\Framework\Api\MetadataServiceInterface)` as expected. *Fix submitted by [julianvdrielen](https://github.com/julianvdrielen) in pull request [15723](magento/magento2#15723. [GitHub-4803](magento/magento2#4803) * When Elasticsearch is configured as the search engine, you can now enable and disable the EAV indexer from the Enable EAV Indexer field (**Configuration** > **Catalog** > **Catalog Search**). * Magento no longer displays empty product attributes of type `dropdown` or `swatch` as having a value of **no** on the storefront. * You can now perform a mass update on products that have more than 60 attributes. * Magento now displays an error message when it does not save dropdown values as you create them. Previously, Magento did not save the options, and did not alert you in a message. * The `@see` tag now identifies a deprecated property in `app/code/Magento/Eav/Model/AttributeManagement.php`. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13301](magento/magento2#13301. * When a product is saved, the `beforeSave` method now encodes the attribute value only if the value is not encoded already. Previously, if you saved a product multiple times, then the JSON-encoded attribute value was also encoded multiple times, which causes problems during subsequent loads. * Magento no longer displays an SQL query in the browser when an exception occurs. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14223](magento/magento2#14223. [GitHub-13385](magento/magento2#13385) * You can now filter an EAV collection before loading by specifying that the value of the attribute is null. [GitHub-14312](magento/magento2#14312), [GitHub-14355](magento/magento2#14355)

Email

* Nonfunctioning links in the order confirmation email have been corrected. [GitHub-12261](magento/magento2#12261)

Frameworks

* Declared index names in `db_schema.xml` are no longer ignored by declarative schema. Previously, index names were autogenerated based on table and column names. * The `htmlentities` function has been replaced with the `htmlspecialchars` function. * Magnifier now works as expected on any supported operating system and browser. Previously, Magnifier did not hover correctly on devices running Windows Chrome or FireFox. * Magnifier now turns off as expected when a user moves the cursor off an image. * The `ExtensionAttributes` object is now autogenerated. * `ObserverInterface` has been added to @api. Previously, creating an observer that uses `ObserverInterface` triggered a patch-level dependency on `magento/framework`. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13786](magento/magento2#13786. * The doc block of the `walk` method in a collection now correctly reflects that this method will accept an array. *Fix submitted by [bytecreation](https://github.com/ByteCreation) in pull request [13374](magento/magento2#13374. * `getFrontName` has been refactored to return `getModuleName`'s return values. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13299](magento/magento2#13299. * Emogrifier dependency has been updated to ^2.0.0. *Fix submitted by [Oliver Klee](https://github.com/oliverklee) in pull request [13351](magento/magento2#13351. * The log message created when Magento throws an exception when opening an image now tells you which file triggered the exception. *Fix submitted by [Patrick McLain](https://github.com/pmclain) in pull request [13144](magento/magento2#13144. * `Zend_Json` has been removed from the JSON result controller. [GitHub-9236](magento/magento2#9236) * `\Magento\TestFramework\Annotation\AppArea` no longer breaks when it encounters valid values. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [12992](https://github.com/magento-engcom/magento2ce/pull/1194)*. [GitHub-2907](magento/magento2#2907) * `Zend_Service` has been upgraded from v.1 to v.2, including these specific changes:
* Removed `Magento\Framework\Locale\CurrencyInterfac` from the `setService` method and changed it to `\Zend_Currency_CurrencyInterface`, which must be the provider to this function.

* Changed return type to `\Zend_Currency_CurrencyInterface`, the given instance of the service is returned by the `setService` function.

* Removed `\Zend_Service` from the `getService` method and changed it to `\Zend_Currency_CurrencyInterface`.

* Added `@deprecated` tags to both methods and added `@see` annotation to the methods. Referenced the corresponding interface `\Magento\Directory\Model\Currency\Import\ImportInterface`. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12957](https://github.com/magento/magento2/pull/12957)*. [GitHub-9243](https://github.com/magento/magento2/issues/9243)
* The ReleaseNotification module has been added to support the display of new release highlights. * Magento now saves date and time correctly for different timezones and locales. *Fix submitted by [Raul Mateos](https://github.com/raumatbel) in pull request [11306](magento/magento2#11306. [GitHub-10485](magento/magento2#10485), [GitHub-10580](magento/magento2#10580), [GitHub-10686](https://github.com/magentomagento2/issues/10686), [GitHub-10754](magento/magento2#10754) * The `Zend_Feed::importArray` static call has been replaced with a new interface. This concrete class takes the `Zend_Feed` object and returns its own result in the form of a wrapper around `Zend_Feed_Abstract`. *Fix submitted by [Dusan Lukic](https://github.com/ldusan84) in pull request [9347](magento/magento2#9347. [GitHub-9240](magento/magento2#9240) * Customers can now successfully check out when the AdBlock extension and Google Analytics are enabled. * Product records inside the `catalog_product_super_link` table are no longer updated needlessly when you save a configurable product. Previously, saving a configurable product erased and then reinserted records in the `catalog_product_super_link` table even when child products were not changed. This practice quickly resulted in an unnecessarily large `catalog_product_super_link` table, especially in multi-website installations. * Magento now caches popular search results for faster response time on popular searches. A system administrator can configure how many top search queries can be cached. * We’ve replaced the usage of `Zend_Json::encode` in the setup marketplace tests. [GitHub-9236](magento/magento2#9236) * The `Magento\Framework\Json\Helper\Data` class has been deprecated and removed from the` Magento\AdminNotification` module. [GitHub-10329](magento/magento2#10329) * An entry for `compiled_config` cache has been added to the `cache.xml` file. [GitHub-11295](magento/magento2#11295) * The report page now returns a 500 status code (internal server error) instead of a 503 status code when an unexpected error happens, such as an event that generates the report format pages. *Fix submitted by [AlexWorking](https://github.com/AlexWorking) in pull request [14190](magento/magento2#14190. [GitHub-11512](magento/magento2#11512) * You can now use the layout update XML field to include custom CSS in CMS pages. [GitHub-4454](magento/magento2#4454) * The `$params` parameter for the post method of `\Magento\Framework\HTTP\ClientInterface` has been updated to support string type. *Fix submitted by [Sergey P](https://github.com/simpleadm) in pull request [14481](magento/magento2#14481. [GitHub-3489](magento/magento2#3489) * We've added JSON and XML support to the post method in the `\Magento\Framework\HTTP\Client\Socket` class. *Fix submitted by [Sergey P](https://github.com/simpleadm) in pull request [14169](magento/magento2#14169. [GitHub-3489](magento/magento2#3489) * After restart of MySQL, changelog tables now always contain at least one record. Previously, changelog tables were empty, which resulted in a loss of the last 'auro_increment' value for the product 'version_id'. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [14636](magento/magento2#14636. [GitHub-14465](magento/magento2#14465) * Magento now displays two distinct widgets on the homepage as expected when you create two widgets of type `Catalog Product List` to the `CMS homepage` at location `content.bottom` with different titles, but the same condition. Previously, the first widget loaded was displayed twice depending on sort order. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [14816](magento/magento2#14816. [GitHub-4389](magento/magento2#4389) * The Change Password warning message no longer appears twice when Magento prompts you to change your password in the Admin. *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [14897](magento/magento2#14897. [GitHub-14895](magento/magento2#14895) * Pages are now successfully rendered when the `meta title` page configuration parameter is set. *Fix submitted by [Lorenzo Stramaccia](https://github.com/slackerzz) in pull request [11368](magento/magento2#11368. [GitHub-2956](magento/magento2#2956) * CSS code is now automatically updated in the browser. Previously, users had to press **CTRL+F5** to see CSS changes. [GitHub-11354](magento/magento2#11354) * `\Magento\Framework\Encryption\Encryptor::getHash` now uses the specified hashing algorithm version. *Fix submitted by [Mads Nielsen](https://github.com/k4emic) in pull request [13885](magento/magento2#13885. [GitHub-5463](magento/magento2#5463) * The **Multiple Payment Methods Enabled** setting now works as expected. Previously, Magento threw this error when this setting was enabled: `Found 3 Elements with non-unique Id`. [GitHub-15348](magento/magento2#15348) * The `setAttributeFilter` method now specifies a table when calling the `addFieldToFilter` method to add a field to the filter for the collection `Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php`. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14676](magento/magento2#14676. [GitHub-14572](magento/magento2#14572) * Categories are now populated as expected. Previously, `catalog_category_product_index` did not contain all category product relations that are in `catalog_category_product`.The highest category IDs per type were missing from the index. *Fix submitted by [Anton Evers](https://github.com/AntonEvers) in pull request [12624](magento/magento2#12624. * `vendor/magento/framework/composer.json` now declare a dependency on ` \Zend_Db_Select`. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [12992](magento/magento2#12992. [GitHub-12967](magento/magento2#12967) * The Magento Admin no longer falls into a redirect loop when an administrator logs in with a role that has no resources assigned. [GitHub-10611](magento/magento2#10611) * You can now successfully print out an invoice from the Admin without including order details. Previously, Magento threw a fatal error because the `Zend_Pdf_Color_RGB` class was not found in the `_drawHeader` method. [GitHub-11581](magento/magento2#11581) * The **Stores** > **Terms and Conditions** table now displays the names of all store views and conditions as expected. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14868](magento/magento2#14868. [GitHub-13944](magento/magento2#13944) * We’ve fixed backward-incompatible changes to transport variable event parameters that had previously resulted in neither the email or the `$transport` variable being changed as expected. *Fix submitted by [gwharton](https://github.com/gwharton) in pull request [16600](magento/magento2#16600. [GitHub-10210](magento/magento2#10210) * The sodium library now handles all new encryption and decryption while supporting encryption and decryption of legacy values with mcrypt. *Fix submitted by [Patrick McLain](https://github.com/pmclain) in pull request [135](magento/magento2#128), [GitHub-124](magento/magento2#124), [GitHub-129](magento/magento2#129)

Application framework

* We've removed undefined fields from files in `/lib`. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11662](magento/magento2#11662. * The doc block that describes `setValue` in `FilterBuilder` now reflects that this method will accept an array. *Fix submitted by [bytecreation](https://github.com/ByteCreation) in pull request [11855](magento/magento2#11855. * Magento now uses valid ISO language codes in HTML headers. *Fix submitted by [Cristian Sanclemente](https://github.com/crissanclick) in pull request [11644](magento/magento2#11644. [GitHub-11540](magento/magento2#11540) * Magento can now generate unsecure URLs if the current URL is secure. [GitHub-6175](magento/magento2#6175) * The `php bin/magento app:config:dump` command no longer adds an extra space to multiline array values every time it runs. Previously, this command inserted extra spaces, which triggered Github to commit these files as changed. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11452](magento/magento2#11452. [GitHub-11328](magento/magento2#11328) * The `StockItemCriteriaInterface` method `setProductsFilter` now accepts an array of IDs. Previously, this method accepted either a single integer or an array, but returned only one item. *Fix submitted by [Kirill Morozov](https://github.com/kirmorozov) in pull request [11503](magento/magento2#11503) * The Magento application framework has been updated to address a jQuery security issue. * We’ve removed the usage of `Zend_Json` from the JSON controller. [GitHub-10342](magento/magento2#10342) * The `\Magento\Framework\Serialize\Serializer\Json` class has replaced `Zend_Json usage in Framework/Module/PackageInfo.php`. [GitHub-9236](magento/magento2#9236) * `Zend_Json` has been removed from the `DataObject` class. [GitHub-9236](magento/magento2#9236) * We’ve added a declarative mechanism to limit the HTTP methods that a controller can process by implementing one or more `HttpActionInterface`. * `Zend_Json` has been removed from setup and `Webapi` and replaced by `Serializer\Json` in `PackagesAuth`. * Classes that contain a *–* are now rendered as added to the XML. Previously, *–* were replaced with a single *-*. [GitHub-10645](magento/magento2#10645)

Configuration framework

* An order's `relation_child_id` and `relation_child_real_id` fields are now accurately set during edit operations. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [11909](magento/magento2#11909. [GitHub-10195](magento/magento2#10195) * Pages that contain layout files with `block_id` arguments that contain whitespace now load correctly. Previously, Magento threw an error when loading these pages. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [11849](magento/magento2#11849) * The config array can now read all settings from `config`. Previously, the config array was hardcoded to read three settings only. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [11302](magento/magento2#11302. * You can now assign a default value to config fields of type `image` or `file`. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10253](magento/magento2#10253)

Database framework

* The `getSize` function now reflects item and page count totals for filtered product collections on the category page.

JavaScript framework

* Magento now displays video and images as expected when you select a video or click to view a full-screen image for a configurable product. *Fix submitted by [Chumak Roman](https://github.com/roma84) in pull request [12556](magento/magento2#12556. [GitHub-12268](magento/magento2#12268) * We've removed duplicate parameters from a Magento UI LESS library mixin. *Fix submitted by [Bartek Igielski](https://github.com/Igloczek) in pull request [11276](magento/magento2#11276. * You can now disable the full-screen gallery on mobile devices. [GitHub-12490](magento/magento2#12490), [GitHub-12285](magento/magento2#12285) * The calendar widget (`jQuery UI DatePicker`) now correctly displays more than one month. [GitHub-7379](magento/magento2#7379) * JavaScript files are now located inside the `web/js` directory. * Menus with nested elements now align correctly. [GitHub-7897](magento/magento2#7897) * Magento no longer incorrectly overly encodes UTF-8 files when JavaScript Bundling is enabled. Previously, this issue resulted in poor character encoding on the storefront. [GitHub-10562](magento/magento2#10562), [GitHub-6733](magento/magento2#6733) * `jquery.mobile.custom.js` is now compatible with jQuery 3.x. *Fix submitted by [Kirill Morozov](https://github.com/kirmorozov) in pull request [13688](magento/magento2#13688. * The Fotorama gallery now works as expected on Android devices. *Fix submitted by [Danilo Argentiero](https://github.com/DaniloEmpire) in pull request [14123](magento/magento2#14123. [GitHub-7906](magento/magento2#7906) * The dataprovider constructor has been changed to the `RendererInterface`, making it compatible with custom translators (which can be injected as an argument for `\Magento\Framework\Phrase\Renderer\Composite`). *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12007](magento/magento2#12007. [GitHub-2156](magento/magento2#2156) * You can now place an order for a grouped product where the subproducts quantity is less than one. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [14814](magento/magento2#14814. [GitHub-14692](magento/magento2#14692) * A JavaScript error in `dropdowns.js` has been fixed by properly initializing the `el` variable. You can now set `options.autoclose` to `false`. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15607](magento/magento2#15607. [GitHub-15469](magento/magento2#15469)

Session framework

* The `sid` variable (`?sid`) no longer appears in the URL even if it is disabled in the Admin. [GitHub-9453](magento/magento2#9453) * We’ve removed the 30-second timeout limit for the session locking mechanism when Redis is used for session storage. * `colinmollenhour/php-redis-session-abstract` has been updated to support PHP 7.2. *Fix submitted by [Patrick McLain](https://github.com/pmclain) in pull request [39](magento-engcom/php-7.2-support#39. * When you add a product to your wish list after logging out, Magento now redirects you to your account Wish list page and adds the product. Previously, you were redirected to your wishlist page, but Magento did not add the product. [GitHub-11825](magento/magento2#11825) * The shopping cart no longer empties unexpectedly due to concurrent requests during checkout. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [17608](magento/magento2#17608. [GitHub-12362](magento/magento2#12362)

General fixes

* Magento now validates custom layout update XML against the schema file when you save the XML. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11859](magento/magento2#11859. * You can now successfully close full-screen zoomed product images displayed on an iPhone 4s, 5s, 6, or 6s with the Safari browser. Previously, if you chose full screen zoom for any product image, you could not close the full screen zoom. * Deleting a customer from the Admin no longer causes fatal errors upon storefront login or registration. * The **Modified** date field is now updated as expected when you save a page in a deployment running Magento 2.2.1. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [12637](magento/magento2#12637. [GitHub-12625](magento/magento2#12625) * When the **Redirect Customer to Account Dashboard after Logging in** setting is disabled, Magento now includes the login URL (including the referer in base64 encoding) from the `window.checkout` object as expected (for example, https://myshop.com/customer/account/login/referer/aHR0cHM6Ly9teXNob3AuY29tL2NoZWNrb3V0). * Magento now correctly handles `file` or `image` type customer attributes. Previously, when you tried to save customer information when one of these customer attributes were set, Magento threw an exception and did not save the file. *Fix submitted by [Franciszek Wawrzak](https://github.com/fsw) in pull request [11267](magento/magento2#11267. [GitHub-11252](magento/magento2#11252) * You can now use uppercase letters in store codes. *Fix submitted by [Manu Gonzalez Rodriguez](https://github.com/manuelson) in pull request [12010](magento/magento2#12010. [GitHub-11996](magento/magento2#11996) * You can now add a new attribute class to a page's XML root by adding an HTML node. Previously, adding an HTML node caused a validation error. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11862*. [GitHub-11697](magento/magento2#11697) * The `\Magento\Quote\Model\ResourceModel\Quote\Item\Collection` now returns items that have only existing relations in the `catalog_product_entity` table. Previously, Magento loaded quote items with non-existing products. * Magento now correctly renders the download link in invoice emails. *Fix submitted by [Jakob Meissner](https://github.com/skymeissner) in pull request [11024](magento/magento2#11024. * `AuthenticationInterface` now contains API interceptors that enhance user authentication, making it possible (for example) to implement a different hashing algorithm for non-Magento to Magento migrations. *Fix submitted by [Navarr Barnier](https://github.com/navarr) in pull request 11546*. * The Magento UI mixins have been edited to improve performance. Changes include:
* removing all fallbacks to variables that don't exist in the global scope

* defining all variables that are used inside mixins as parameters

* adding all missing parameters to the areas of the code where mixins are invoked

* moving and simplifying mixins used only once. *Fix submitted by [Bartek Igielski](https://github.com/Igloczek) in pull request [11371](https://github.com/magento/magento2/pull/11371)*.
* The dashboard y-axis range has been enhanced by the addition of an index for y-axis range values. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [11752](magento/magento2#11752. [GitHub-7927](magento/magento2#7927) * Lengths for the following fields in the `quote_address` database table have been expanded: `telephone`, `fax`, `region`, and `city`. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [11286](magento/magento2#11286. [GitHub-10869](magento/magento2#10869) * `Magento\Framework\Escaper` now contains the `escapeDollarSign` method, which looks for `${` and replaces `$` with `$` during save actions involving the page and block controller. *Fix submitted by [Lorenzo Stramaccia](https://github.com/slackerzz) in pull request [11286](magento/magento2#11286. [GitHub-10501](magento/magento2#10501) * Magento now displays product review summaries only when a product has at least one review. *Fix submitted by [Jan Schlosser](https://github.com/decius7bc) in pull request [10248](magento/magento2#10248. [GitHub-4530](magento/magento2#4530) * Magento now uses the config field backend model (`system.xml`) to generate default configuration values on the Admin. Previously, the `afterLoad()` method was evoked only after loading the configuration value from the database, and not after loading the configuration from `config.xml`. This caused the default configuration from `config.xml` to be passed to the form element as `string` instead of `Array`, which resulted in empty configuration fields in the Admin. *Fix submitted by [kweij](https://github.com/kweij) in pull request [7742](magento/magento2#7742. [GitHub-4530](magento/magento2#7741) * Magento now selects the `CUST_GROUP_ALL` customer group in `adminhtml` after saving an attribute, and all `$customerGroups['value']` are now of type `string`. *Fix submitted by [Manuel Schmid](https://github.com/mash1t) in pull request [10475](magento/magento2#10475. [GitHub-10436](magento/magento2#10436) * Session cookies now last until the session closes. Previously, Magento interpreted a `form_key` cookie lifetime of 0 to determine the duration of the cookie lifetime, and the cookie expired immediately. *Fix submitted by [Eero Kuusela](https://github.com/ekuusela) in pull request [10528](magento/magento2#10528. [GitHub-10527](magento/magento2#10527) * Google Analytics has improved support of websites that conduct transactions in multiple currencies. Previously, payment providers that required different base currencies were configured as different websites in a multisite deployment, and consequently had to send different base currency in Google Analytics. *Fix submitted by [DominicWatts](https://github.com/DominicWatts) in pull request [10508](magento/magento2#10508. [GitHub-6709](magento/magento2#6709), [GitHub-7471](magento/magento2#7471) * Google Adwords now has the ability to provide transaction-specific conversion values in a conversion tracking tag. *Fix submitted by [DominicWatts](https://github.com/DominicWatts) in pull request [10558](magento/magento2#10558. [GitHub-6708](magento/magento2#6708) * The text in the authentication popup has been corrected to **Checkout as a new customer**. *Fix submitted by [Parker Smith](https://github.com/insanityfarm) in pull request [10627](magento/magento2#10627. [GitHub-9533](magento/magento2#9533) * Customer data is now fully loaded after restarting the browser during an unexpired user session. Previously, the `section_data_ids` section of the session cookie was not properly completed. [GitHub-14912](magento/magento2#14912) * `X-Magento-Vary` and `PHPSESSID` now have the same expiration time. Previously, the `X-Magento-Vary` cookie had an expiration of `session`, which meant it was not considered expired until the browser was closed. In contrast, the `PHPSESSID` cookie had a finite expiration time (not `session`). At times, this resulted in Magento caching the wrong page for the logged-in user. * You can now delete rows in the `dynamicRows` component. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [921](magento/magento2#921. [GitHub-8830](magento/magento2#8830) * Creating new configuration attributes no longer causes naming collisions in the JavaScript UI registry. Previously, when you created a new default attribute and then subsequently created a new product, JavaScript errors occurred. *Fix submitted by [Volodymyr Zaets](https://github.com/VladimirZaets) in pull request [12945](magento/magento2#12945. [GitHub-12555](magento/magento2#12555) * The `\Magento\Test\Php\LiveCodeTest::testCodeStyle` method now uses whitelist files. *Fix submitted by [Adrian Martinez](https://github.com/adrian-martinez-interactiv4) in pull request [11376](magento/magento2#11376. [GitHub-10559](magento/magento2#10559) * Magento now processes the oldest message queue entries first instead of last. * You can successfully save a CMS page with same URL key as another store on a different website but with the same hierarchy. * You can now successfully preview a Registry Update email template. Previously, Magento threw a fatal error when you tried to preview this template. * Enterprise Rewards no longer permit double refunds. Previously, problems with the refund logic permitted the inadvertent creation of a double refund. * Swatch images now resize as expected. Previously, even when a product attribute with Catalog Input Type for Store Owner was set to **Visual swatch**, the image size did not adjust as expected. * Customers with an empty **Date of Birth** field can now be saved even when the field is not marked (or checked on the JavaScript side) as mandatory. [GitHub-12146](magento/magento2#12146) * Store view home pages in multistore deployments no longer display breadcrumbs. Previously, the first store view in a multistore deployment looked fine, but the other store views included unnecessary breadcrumbs on the home page. [GitHub-6504](magento/magento2#6504) * You can now enable logs as expected (through the use of **Stores** > **Settings** > **Configuration** > **Advanced** > **Developer** > **Debug** > **Log to file**) when switching from production mode to developer mode. * `magnifier.js` now works no matter which mode is set. (`magnifier.js` offers the option of setting mode to 'inside' for an in-frame zoom.) [GitHub-4977](magento/magento2#4977) * The `timestamp` fields in `oauth_nonce` now include indexes to avoid deadlocks while erasing old records. [GitHub-10346](magento/magento2#10346) * The search bar now closes as expected when a user enters a search term in the mobile search bar, does not submit the search term, and then taps the search icon to close the search bar. [GitHub-11231](magento/magento2#11231) * Magento now throws a descriptive error as expected when using a negative value that contains an invalid minus symbol to update reward points on a customer account. * The My Invitations page for a customer account now displays the correct reward points amount. * The `404 forbidden` error message has been corrected for accuracy to `404 not found` in `/app/code/Magento/Backend/Controller/Adminhtml/Noroute/Index.php`. [GitHub-10775](magento/magento2#10775) * The Module Manager module grid list is now displayed correctly (**System** > **Tools** > **Web Setup Wizard** > **Module Manager**). *Fix submitted by [Vijay Golani](https://github.com/vijay-wagento) in pull request [15755](magento/magento2#15755. [GitHub-15192](magento/magento2#15192) * Layered navigation now shows the correct product count. Previously, Magento counted only in-stock product. [GitHub-11946](magento/magento2#11946) * DatePicker date format now reflects the user's locale as expected. [GitHub-6858](magento/magento2#6858) * Currency rates are now imported for Allowed Currencies as expected. Previously, selecting `Use system value` for `Base Currency` during currency set up resulted in a configuration error. [GitHub-8003](magento/magento2#8003) * Problems with the double column layout on the home page have been resolved. [GitHub-11796](magento/magento2#11796) * Merchants can now successfully delete the default welcome message. [GitHub-9742](magento/magento2#9742) * The **Track Order** link on the order page in the Admin now works correctly. Previously, the URL that Magento generated for an order did not include the store that the order originated in. [GitHub-12206](magento/magento2#12206) * Magento no longer rounds product quantity to the nearest whole number when trying to invoice an order that has products with quantity decimals. [GitHub-11941](magento/magento2#11941) * `health_check.php` has been added into the `nginx.conf.sample` file. [GitHub-11157](magento/magento2#11157) * The Google Analytics block code has been moved to the tag on the **Stores** > **Settings** > **Configuration** > **Sales** > **Google API** page. [GitHub-8837](magento/magento2#8837) * Magento now displays a more helpful message when you misspell the name of a new module in `registration.php`. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [13731](magento/magento2#13731. * The `Learn More Link` widget option in a Recently Viewed Products widget now respects its setting. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [12947](magento/magento2#12947. * You can now use the WYSIWYG editor to upload images even when the media directory is a symlink. *Fix submitted by [Mike Whitby](https://github.com/mikewhitby) in pull request [14353](magento/magento2#14353. [GitHub-13929](magento/magento2#13929) * Dependency on the `mageMenu` widget dependency in the breadcrumbs component has been removed. Previously, breadcrumbs on the product page were invisible when the `mageMenu` widget was not used. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [15478](magento/magento2#15478. * Magento no longer uses strings in evaluation of `setTimeout`. *Fix submitted by [Jonathan Kingston](https://github.com/jonathanKingston) in pull request [14173](magento/magento2#14173. [GitHub-14172](magento/magento2#14172) * Magento no longer displays the `Something Went Wrong` error whenever an administrator with limited privilege logs into the Admin and tries to navigate to a page. [GitHub-11700](magento/magento2#11700) * The `magento setup:install` command no longer halts with an error at `Magento_Catalog`. *Fix submitted by [Lorenzo Stramaccia](https://github.com/slackerzz) in pull request [15982](magento/magento2#15982. [GitHub-1350](magento/magento2#1350) * Magento no longer throw the `Data key is missing: code-entity` error when you try to create and edit a page. [GitHub-11163](magento/magento2#11163) * Customers are now redirected to the Sign In form as expected when they navigate to this form using the Back arrow on this browser. [GitHub-12715](magento/magento2#12715) * The welcome message now displays the new customer’s first and last name after they have confirmed their account by clicking the Confirm Your Account button in the confirmation email. [GitHub-12719](magento/magento2#12719) * You can now enable debugging (log to file) in production mode. [GitHub-11882](magento/magento2#11882) * Datepicker now uses the store locale as expected. [GitHub-6350](magento/magento2#6350) * When you click on a row with inline editing mode enabled while creating an Admin listing, the date column is now converted to the correct value in the date picker. Previously, the date value displayed in the date picker UI always showed the value of the current date instead of the actual column value. [GitHub-6831](magento/magento2#6831)

Gift cards

* Magento now includes a gift card recipient's email address in the gift card account history. Previously, Magento did not include the gift card recipient's name and email address in the gift card account history, even though Magento successfully sent the email. * Magento no longer permits users to save a new gift card without first completing the required values. Previously, when creating a gift card, users could save the card without having designated an amount, but the card could not be purchased. Magento also created a `report.CRITICAL: Warning` error message in the `system.log`. * Magento now maintains relationships among new gift card accounts when a customer purchases several gift cards in the same order. * You can now save gift cards when the price has been changed on the Admin to an unacceptable format. Previously, Magento tried to save amounts in unacceptable formats (such as the inclusion of a comma in a four-digit price), which triggered an error. * Magento now displays the correct subtotal when a customer adds multiple gift cards of different amounts to his cart. * The password strength meter has been refactored to perform an email comparison only if an email field exists in the same form on which the meter exists. Previously, Magento threw a JavaScript error under these conditions. *Fix submitted by [Serhii](https://github.com/serhii-balko) in pull request [13819](magento/magento2#13819. [GitHub-13429](magento/magento2#13429)

Google Analytics

* The Google Analytics pageview is no longer triggered twice. [GitHub-12221](magento/magento2#12221)

Google Tag Manager

* The `addToCart` event triggers on the Google Task Manager console only when an item is added to the cart. Previously, the event was triggered before the cart was updated. * Google Tag Manager product category data is now fully reported. Previously, the Google Tag Manager product category (Enhanced Ecommerce) data did not report all information. * Magento now correctly displays product titles when displaying Sales information in Google Analytics. Previously, Magento replaced spaces in product names with their HTML values (for example, `\u0020`). *Fix submitted by [Julien ANQUETIL](https://github.com/julienanquetil) in pull request [13907](magento/magento2#13907. [GitHub-13827](magento/magento2#13827), [GitHub-13350](magento/magento2#13350) * All relevant attributes are now populated in the Google Tag Manager when a customer adds a product to their shopping cart. Previously, grouped, bundle, and configurable product attributes were missing in the Google Tag Manager.

HTML

* Magento now displays a newly created Contact Us form on a category page as expected. Previously, you could create a Contact Us form, but Magento did not display it properly. [GitHub-12601](magento/magento2#12601) * You can now change only the primary button `font-weight` without changing regular button `font-weight` with LESS variables. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [16036](magento/magento2#16036. [GitHub-15832](magento/magento2#15832) * HTML minification now works as expected. *Fix submitted by [Lisovyi Yevhenii](https://github.com/lisovyievhenii) in pull request [16332](magento/magento2#16332. [GitHub-5316](magento/magento2#5316) * The `name` attribute is no longer empty when you create custom fields during product creation. [GitHub-9944](magento/magento2#9944)

Image

* You can now set values for `MAX_IMAGE_WIDTH` and `MAX_IMAGE_HEIGHT` in **Stores** > **Settings** > **Configuration** > **Advanced** > **System** > **Images Configuration**, which supports the upload of larger images. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17826](magento/magento2#17826. [GitHub-13747](magento/magento2#13747) * `.png` images from the GD2 image library that have transparent backgrounds now retain their transparent backgrounds after upload. Previously, these transparent backgrounds were rendered black when you displayed these images after upload. *Fix submitted by [Eduard Chitoraga](https://github.com/eduard13) in pull request [17857](magento/magento2#17857. [GitHub-14248](magento/magento2#14248) * Magento now displays the background of transparent product image watermarks correctly. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [16929](magento/magento2#16929. [GitHub-16929](magento/magento2#16929) * Product image zoom now works as expected in stores running on Safari. *Fix submitted by [Danny Nimmo](https://github.com/dannynimmo) in pull request [17426](magento/magento2#17426. [GitHub-17416](magento/magento2#17416) * The cross-sell product placeholder image on the shopping cart page is now the same size as the product listing page placeholder image. [GitHub-12017](magento/magento2#12017) * The WYSIWYG editor now displays image icons as expected. Previously, the WYSIWYG editor showed broken image icons only. [GitHub-10417](magento/magento2#10417)

Import/export

* When you import information about existing customers, Magento now changes only the specific rows for this customer. If rows for other customer attributes (for example, `group_id`, `store_id`, `created_at`) are absent in the import file, these values are included unchanged. * You can now import or export a specific store view that includes custom options and bundle product options. Previously, the import/export feature did not include store view-level edits for custom options. * Import now completes successfully when a product’s CSV entry is split over two import “bunches”. Previously, Magento threw this error, `Cannot add or update a child row: a foreign key constraint fails`, and import failed. * You can now hide an image as expected by using the `hide_from_product_page` attribute during import. * Product import now updates the **Enable Qty Increments** field as expected. [GitHub-14351](magento/magento2#14351) * Magento now displays the correct execution time for an import operation on the **System** > **Import History** page. * The Admin product import feature can now import zero (0) values into the custom attribute field. [GitHub-12083](magento/magento2#12083) * A grammar error in the "What is this" tooltip for the Braintree vault has been corrected. * The export process now correctly handles negative values in the exported XML file. [GitHub-11729](magento/magento2#11729) * Magento no longer throws an exception when importing a product with a category field that begins with a comma. [GitHub-10697](magento/magento2#10697) * `CatalogImportExport categoryProcessor` now supports escaped delimiters in category names. [GitHub-6948](magento/magento2#6948) * The customer import process no longer crashes due to an out-of-memory problem during import of a customer database containing 250,000 or more entries. * Support for multiselect attributes for both product and customer entities has been added. *Fix submitted by [php4umagento](https://github.com/php4umagento) in pull request [98](magento-engcom/import-export-improvements#98. * Images imported by URL now have conventional file paths. *Fix submitted by [Pieter Cappelle](https://github.com/PieterCappelle) in pull request [12872](magento/magento2#12872. [GitHub-12455](magento/magento2#12455) * Grouped products are now imported correctly. Previously, after import, simple products were no longer associated with their grouped products. *Fix submitted by [Pieter Cappelle](https://github.com/PieterCappelle) in pull request [12853](magento/magento2#12853. [GitHub-12793](magento/magento2#12793) * Error reporting for product image import has been improved. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [1201](https://github.com/magento-engcom/magento2ce/pull/1201)*. [GitHub-4711](magento/magento2#4711) * CatalogImportExport now supports empty row values. [GitHub-7468](magento/magento2#7468) * You can now set `selection_can_change_qty` during the export or import of a bundle product with properties. *Fix submitted by [Adam Paterson](https://github.com/adam-paterson) in pull request [100](magento-engcom/import-export-improvements#100. [GitHub-9342](magento/magento2#9342) * Magento no longer throws an exception after successfully validating a .csv for import. Previously, an exception message was mistakenly passed as a exception description argument instead of exception message, which triggered the exception. [GitHub-6924](magento/magento2#6924) * The product export process now correctly considers `hide_for_product_page` setting for images. [GitHub-8255](magento/magento2#8255) * Magento no longer displays a success message when it fails to successfully import all products. [GitHub-5846](magento/magento2#5846) * Magento no longer displays extraneous records for an order into the exported CSV file. [GitHub-12714](magento/magento2#12714) * Product import now fetches the relationship between product SKU and `entity_id` with improved efficiency when inserting attribute data. [GitHub-10920](magento/magento2#10920) * Magento now renames images during a bulk upload of products with images. *Fix submitted by [Umar Chaudhry](https://github.com/umarch06) in pull request [99](magento-engcom/import-export-improvements#99. [GitHub-11324](magento/magento2#11324) * Report error CSV file now works when you try to import a CSV file with a semicolon delimiter. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [1203](https://github.com/magento-engcom/magento2ce/pull/1203)*. [GitHub-5015](magento/magento2#5015) * Magento now provides a validation failure during import when multiselect columns contain duplicate values. *Fix submitted by [carstenpfeifer](https://github.com/pogster) in pull request [117](https://github.com/magento-engcom/magento2ce/pull/1203)*. [GitHub-103](magento/magento2#103)

Indexing

* `indexer:status` now outputs information about the schedule mview backlog. *Fix submitted by [Luke Rodgers](https://github.com/convenient) in pull request [12592](magento/magento2#12592. * Magento no longer reindexes entities that have not been changed. Previously, Magento reindexed entries that were not changed but which had a MySQL UPDATE. *Fix submitted by [Anton Evers](https://github.com/AntonEvers) in pull request [4893](magento/magento2#4893) * The customer grid indexer now works as expected. Previously, this indexer did not work when reindexing using the command-line interface during the upgrade. *Fix submitted by [Leonid Poluyanov](https://github.com/le0n4eg) in pull request [10838](magento/magento2#10838. [GitHub-10838](magento/magento2#10838) * Tier pricing for a single product unit now works as expected. If a tier price is set for one product unit, and this price is lower than the product price or special price, then the product price index table is populated with the tier price.

Infrastructure

* This release provides compatibility with PHP 7.2.x. * You can now configure system logs to write to syslog, which supports subsequent re-streaming and minimizes storage needs. * You can now set access to only integrations for Admin roles (rather than assign full access). Previously, access for integrations could be assigned only when **Role Resources** was set to all. [GitHub-9684](magento/magento2#9684) * `expectException()` calls now accept two parameters (instead of one). *Fix submitted by [Fabian Schmengler](https://github.com/schmengler) in pull request [11099](magento/magento2#11099. [GitHub-11059](magento/magento2#11059) * Several components included by Composer have been updated to the latest patch versions. * Customers can change product status by clicking on the toggle element or by clicking on label text, but not by clicking the area around a toggle element. Previously, if a customer clicked on the area around a toggle element, Magento changed the state of the element. Unintended results could occur if a customer mistakenly clicked on the area around the element and didn't realize that the status had changed. * We’ve removed `Zend_Json` from the data object, test suite, and package information. [GitHub-10306](magento/magento2#10306), [GitHub-10320](magento/magento2#10320), [GitHub-10340](magento/magento2#10340) * Changing the `@tab-content__border` variable in Blank theme now works as expected. [GitHub-14999](magento/magento2#14999) * Corrected sticky footer in `page-main` container height on mobile devices. [GitHub-15118](magento/magento2#15118) * Style groups for mobile devices (`max-width`) are now specified in the correct order. [GitHub-14476](magento/magento2#14476) * The Web Setup wizard icon sidebar shortcut on the Admin now links as expected to the wizard. *Fix submitted by [Arnoud Beekman](https://github.com/arnoudhgz) in pull request [17610](magento/magento2#17610. [GitHub-13948](magento/magento2#13948) * The condition category chooser now handles multiple nested categories as expected. Previously, if a cart rule contained several nested categories, no categories appeared on the page, the page became unresponsive, and Magento eventually crashed. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17816](magento/magento2#17816. [GitHub-15121](magento/magento2#15121) * The `magento/module-widget/etc/widget.xsd` and `magento/module-widget/etc/widget_file.xsd` files have been updated to support multiple `depends` parameters. [GitHub-9783](magento/magento2#9783) * Magento now requires that customers select State/Province when shipping orders to India, and the checkout page now provides a drop-down field with appropriate values. *Fix submitted by [p-bystritsky](https://github.com/p-bystritsky) in pull request [12378](magento/magento2#12378. [GitHub-12378](magento/magento2#12378) * We fixed the invalid parameter configuration that was provided for the `$block` argument of `Magento\\Ui\\Component\\HtmlContent`. *Fix submitted by [Tomasz Gregorczyk](https://github.com/Tomasz-Silpion) in pull request [12665](magento/magento2#12665. [GitHub-12452](magento/magento2#12452) * The`app/code/Magento/Downloadable/Helper/File.php` and `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` files no longer contain duplicate key arrays. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [12520](magento/magento2#12520. * Magento now deselects only the attributes you choose to deselect when you set the **Use Default Value** setting on a store view to **no** for certain attributes. Previously, when you deselected the **Use Default Value** setting on a store view for certain attributes, Magento unselected other attributes as well. * Additional blocks for footer links now line up with default footer links as expected. [GitHub-6712](magento/magento2#6712) * The Psr logger debug method now works by the default in developer mode. [GitHub-11509](magento/magento2#11509) * Proxy/Interceptor generator now works as expected with PHP 7.1 syntax. * Module composer versions are no longer mandatory in the GitHub repository. * The handling fee configuration for shipping methods is now silently casted to float. *Fix submitted by [Serhii](https://github.com/serhii-balko) in pull request [13818](magento/magento2#13818. * The `create_function()` function has been deprecate and removed. *Fix submitted by [Yevhen Sentiabov](https://github.com/joni-jones) in pull request [32](magento-engcom/php-7.2-support#32. * Magento now sets the `trigger_recollect` attribute back to 0 after collecting total amounts for the quote. Previously, Magento timed out if a customer tried to reload a quote. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [14812](magento/magento2#14812. [GitHub-9580](magento/magento2#9580) * You can now add new columns to the item table in the `admin sales_order_view` layout. [GitHub-10824](magento/magento2#10824) * The Admin shipping report now shows the correct currency code. [GitHub-11793](magento/magento2#11793) * `Configurable::getUsedProducts` returns a simple array as expected after product collections are cached [GitHub-11880](magento/magento2#11880) * The input format of customer date of birth has been corrected. [GitHub-11332](magento/magento2#11332) * The **add to cart** checkboxes in Related Products are no longer visible when `$canItemsAddToCart` is set to **false**. [GitHub-6891](magento/magento2#6891) * A responsive design issue with the mobile landing page has been resolved. Previously, the Shop By and other page elements were positioned incorrectly. [GitHub-10941](magento/magento2#10941) * We’ve fixed an issue with `addCrumb()`. [GitHub-11275](magento/magento2#11275) * The `getChildren()` method now returns a list of IDs that is sorted by the `position` attribute. [GitHub-11310](magento/magento2#11310) * Magento now allows the setting of a custom HTTP response status code in a redirection. [GitHub-9028](magento/magento2#9028) * Magento\Search\Helper\getSuggestUrl() is now used as expected in the search template, which supports a custom autosuggest feature. [GitHub-6802](magento/magento2#6802) * XHTML templates now use schema URNs. [GitHub-6661](magento/magento2#6661) * `SymLinksIfOwnerMatch` has replaced `FollowSymLinks` in htaccess templates. [GitHub-10811](magento/magento2#10811) * Magento no longer throws an error when using Magento\Quote\Model\ResourceModel\QuoteItem\Collection::getItems() to load a quote item collection. [GitHub-8954](magento/magento2#8954) * Merchants can now apply styling by changing LESS variables in the Luma theme as expected. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15794](magento/magento2#15794. [GitHub-15608](magento/magento2#15608) * `sjparkinson/static-review` has been removed throughout the code base. * The `@deprecated` tag has been added to `Magento\Store\Model\Store::$_isAdminSecure`. [GitHub-4720](magento/magento2#4720) * A new static test detects blocks without the `name` attribute. * The [Contribution Guide](https://devdocs.magento.com/guides/v2.0/contributor-guide/backward-compatible-development/ ) now suggests that contributors specify possible replacements for deprecated code. [GitHub-10133](magento/magento2#10133) * You can now use the command-line interface to create a new administrator. Previously, Magento did not recognize configured tableprefix, which prevented Magento from creating the new user. [GitHub-11176](magento/magento2#11176) * The `getToolbarBlock()` method has been refactored to permit removal of product_list_toolbar. [GitHub-9413](magento/magento2#9413) * When you use a UI component-based form and add a custom regular expression pattern validation to an input field, Magento now properly converts the supplied pattern from a string to a JavaScript RegEx object. [GitHub-9919](magento/magento2#9919) * The `hasDataChanges` function now returns false as expected when no data has been changed. [GitHub-12374](magento/magento2#12374)

Klarna Payments

  • The Purchase button is now disabled as expected if Klarna authorization is declined. 


  • The unnecessary span element below the onboarding text has been removed.


Locale

* The DatePicker date filter on **Reports** > **Products** > **Ordered** now works as expected for administrators working in Australian English locales. * The zip code pattern for Japan now permits only the seven-digit codes that the Japanese postal service accepts. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [14300](magento/magento2#14300 [GitHub-14072](magento/magento2#14072) * Magento now correctly validates birth dates in stores running French locales. [GitHub-9743](magento/magento2#9743)

Logging

* Admin action logs now list changes to product quantity as expected.

Messages

* The Payment & Shipping Method area of an order now displays an informative message if the payment method previously selected is no longer available. [GitHub-12209](magento/magento2#12209) * Magento now displays an error message as expected when a user submits a registration form without first completing the required date of birth field. [GitHub-4248](magento/magento2#4248) * The error message that Magento displays when a customer submits a product review without selecting a rating can now be translated. [GitHub-10474](magento/magento2#10474) * The message that Magento displays under the following circumstances has been improved:
* You download a database from a staging environment that has code deployed to it that upgrades the schema version, or 

* You are on the master branch in your local environment, which is behind the database. [GitHub-9008](https://github.com/magento/magento2/issues/9008) 
* The exception message in `findAccessorMethodName()` of `Magento\Framework\Reflection\NameFinder` has been improved. [GitHub-9764](magento/magento2#9764)

Newsletter

* Magento now sends confirmation-of-subscription email to new subscribers only. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [11604](magento/magento2#11604. [GitHub-5439](magento/magento2#5439) * Guest users can now sign up for newsletters for multiple stores. Previously, when a guest user signed up for a newsletter from multiple stores, Magento sent a subscription confirmation message, but did not successfully subscribe the user. * A customer subscription on one store no longer depends on the customer’s subscription on another store. * Magento now sends the newsletter subscription success email as expected when a customer successfully subscribes to a newsletter. [GitHub-12439](magento/magento2#12439) * Magento now sends a confirmation request email to the customer when she unsubscribes to a newsletter. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [16995](magento/magento2#16995. [GitHub-15218](magento/magento2#15218) * Magento now displays the newsletter subscription confirmation message as expected after a customer clicks the confirmation link in the subscription confirmation email. *Fix submitted by [Rahul Kachhadiya](https://github.com/rahul-kachhadiya) in pull request [15861](magento/magento2#15861. [GitHub-14747](magento/magento2#14747) * Magento now uses an index to retrieve subscribers from the database instead of the slower `Using where` query. [GitHub-12787](magento/magento2#12787) * Magento no longer sends redundant newsletter subscription confirmation emails to a customer who creates an account after first logging in as a guest user. [GitHub-12876](magento/magento2#12876) * The title of the newsletter **Subscribe** button now wraps correctly. * Newsletter subscriptions status is now specific to each store in a multistore deployment. Previously, when a customer uses the same email address for each account on different stores, changes to the newsletter subscription for an account on one store affected the accounts on other stores. [GitHub-10014](magento/magento2#10014) * Syncing of newsletter subscribers now works correctly. Previously, the newsletter `create-date` and `change_status_at` values did not work as expected. [GitHub-4004](magento/magento2#4004)

Orders

* Magento no longer copies every address that has `save_in_address_book` set to 0 to the customer address book. Previously, if you placed an order as a guest and set the `save_in_address_book` value for an address to 0, Magento still copied that address to the customer address book when it registered a new customer on the checkout success page. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [11903](magento/magento2#11903. [GitHub-7691](magento/magento2#7691) * Magento now displays new orders at the top of the orders list as expected when sorting order by purchase date. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [11931](magento/magento2#11931. * The `getTracksCollection()` method now returns collection objects. Previously, this method returned either collections or arrays. *Fix submitted by [Roman K.](https://github.com/RomaKis) in pull request [11680](magento/magento2#11680. [GitHub-8022](magento/magento2#8022) * When you place an order in the Admin, Magento now displays the form needed to enter information for enabled payment methods. *Fix submitted by [Serhii](https://github.com/serhii-balko) in pull request [11683](magento/magento2#11683. [GitHub-11380](magento/magento2#11380) * The Shipment API now adds a customer note to a shipment if the shipment was created through the API and `appendComment` is set to **true**. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [11519](magento/magento2#11519. [GitHub-11207](magento/magento2#11207) * Magento now displays the State/Province information on **Order View** > **Information** > **Address Information**. *Fix submitted by [Raul Mateos](https://github.com/raumatbel) in pull request [11234](magento/magento2#11234. [GitHub-10441](magento/magento2#10441) * Magento now correctly calculates the value of the `base_shipping_discount_tax_compensation_amnt` field. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10435](magento/magento2#10435. [GitHub-10255](magento/magento2#10255) * The Products Ordered report now shows simple (child) products of configurable products. *Fix submitted by [Ranjith VK](https://github.com/vkranjith) in pull request [9908](magento/magento2#9908. [GitHub-9196](magento/magento2#9196) * The Products in Cart report no longer tries to retrieve the data of deleted products. Previously, when Magento tried to generate this report, it threw an exception. *Fix submitted by [angelo983](https://github.com/angelo983) in pull request [12540](magento/magento2#12540. * Magento no longer throws a fatal error when you search for a customer from **Reports** > Reviews > **By Customers**. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [11524](magento/magento2#11524. [GitHub-10301](magento/magento2#10301) * The cancel order and restore quote methods now accurately calculate the amount of stock to be returned to inventory when an order is canceled. Previously, when you canceled an order, some of these methods did not accurately calculate the amount of restored stock. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [12952](magento/magento2#12952. [GitHub-9969](magento/magento2#9969) * Invoices and orders now show consistent coupon codes and totals. Previously, invoices did not reflect coupon codes as expected. [GitHub-10168](magento/magento2#10168) * Coupon codes now work as expected for orders created from the Admin for guest customers. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16562](magento/magento2#16562. * Magento now sends order confirmation email as expected for orders made using PayPal. Previously, when a customer paid using a credit card, Magento sent email confirmation, but not when an order was paid for by PayPal. *Fix submitted by [Dmytro Paidych](https://github.com/dimonovp) in pull request [14225](magento/magento2#14225. [GitHub-13778](magento/magento2#13778), [GitHub-12792](magento/magento2#12792) * Magento now uses the store values (prefix, suffix, increment ID, and sequence tables ) from the correct store view when placing orders from a non-default store in a multistore deployment. [GitHub-9055](magento/magento2#9055) * Magento no longer throws error on the Admin order edit page when the order address has extension attributes. [GitHub-10438](magento/magento2#10438) * When you place an order as a guest and set the `save_in_address_book` value to 0, Magento no longer copies that address to the customer address book if you subsequently register as a new customer on the checkout success page. * The `cancel` method no longer saves an order and returns **true** if an order canceled with OrderService cannot be canceled. [GitHub-10803](magento/magento2#10803) * You can now access the create order page from the customer edit page as expected. Previously, Magento threw a fatal error. [GitHub-11832](magento/magento2#11832) * New orders are now being saved as expected to the order grid. [GitHub-10128](magento/magento2#10128) * Magento now correctly applies the designated frontend controller when store view URLs contain store codes (**Stores** > **Configuration** > **Settings** > **General** > **Web** > **Add Store Code to Urls** is set to **yes**). *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15759](magento/magento2#15759. [GitHub-15565](magento/magento2#15565) * Magento now checks if an invoice has been previously canceled before canceling it.

Page cache

  • Asynchronous rendering of blocks no longer corrupts layout cache. Previously, when an asynchronous request generated a layout cacheId based on same handle as a CMS page, but without loading the associated CMS page, the CMS page-related layout updates were lost. GitHub-8554, GitHub-9050

Payment methods

* Merchants can now provide customized error messages when a transaction fails at the payment stage. Previously, Magento displayed this default message when an error occurred: `Transaction has been declined. Please try again later.` For more details, please, see http://devdocs.magento.com/guides/v2.3/payments-integrations/payment-gateway/error-code-mapper.html. * Magento no longer throws a validation error at the payments step of check out when an agreements checkbox is present. [GitHub-11885](magento/magento2#11885) * Magento now displays the correct billing address in the order confirmation email when **Paypal Express Checkout** is enabled. Previously, Magento displayed the shipping address instead of the billing address. * Customers can now check out using PayPal when the **Request Billing Information** feature is not enabled. Previously, Magento threw this error when a customer tried to check out with Braintree through Paypal from the shopping cart, `Undefined index: billingAddress in /app/aacdg4mgbgw24/vendor/magento/module-braintree/Model/PayPal/Helper/QuoteUpdater.php on line 138`. * Magento now provides dedicated payment and shipping debug log files to store information specific to those functional areas. * PayPal now works as expected with virtual products such as gift cards. Previously, when you tried to place an order for a virtual product using PayPal, Magento did not display the PayPal popup when you clicked **Continue PayPal** during checkout. * You can now place orders using PayPal when **Payment Action = Order**. Previously, when **Payment Action = Order**, Magento displayed this error when you reached the order review page: `We can't place the order.` * The multi-shipping checkout flow now supports the CyberSource payment method. This payment method is supported by Magento Commerce only. However, as part of the process of adding CyberSource support, we've made improvements to the Multi-shipping module to simplify integration process for other payment methods. Users of the CyberSource payment method should note that CyberSource uses the Magento Vault module only to store and retrieve tokens. Stored CyberSource tokens won't be displayed on the checkout page or customer account. * Default AVS and CVV codes are now mapped as (null or empty string) instead of "U". for Signifyd. * The **Billing Address** field now displays the designated billing address as expected for a registered customer when checking out with Paypal Express Checkout. Previously, Magento displayed the shipping address in the **Billing Address** field in both the order confirmation email and the Admin. * Admin users that are not part of the Administrator group can now complete payment for an order using Braintree. * Magento PayPal integration now supports the Indian Rupee currency (INR). * Magento now validates that the required **Purchase Order Number** field is set as expected during checkout. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17670](magento/magento2#17670. [GitHub-6585](magento/magento2#6585) * A type error in the payment void method of the Authorizenet module has been fixed. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16603](magento/magento2#16603. [GitHub-16184](magento/magento2#16184) * Magento no longer throws an error when you try to add a new shipping address to an order paid with using Braintree from the Admin. * Magento now creates invoices as expected for orders created using Braintree PayPal. Previously, Magento threw an error when a merchant tried to create an invoice for an order from **Admin** > **Sales** > **Order**. * Magento no longer disables the **Place Order** button after an attempt to validate a payment made with PayPal fails. [GitHub-12900](magento/magento2#12900) * Magento no longer throws an error when you try to open an order page from the Admin or when setting the transaction ID in a payment module. Previously, Magento threw this error, `Notice: Undefined index: value in /app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Select.php on line 72`. [GitHub-3596](magento/magento2#3596) * Merchants can now create an invoice for an order placed with PayPal. * The incorrect @return tag (PHPDocs) in the `placeCheckoutOrder` method has been corrected. *Fix submitted by [Aki Ojalehto](https://github.com/akiojalehto) in pull request [13356](magento/magento2#13356. * The `getPaymentMethodList` method no longer sets the value of a group to null in `$labelValues` if it already contains group-related values. Previously, the `Magento\Payment\Model\Config\Source\Allmethods` config source model did not display every available payment method. *Fix submitted by [Matthias Zeis](https://github.com/mzeis) in pull request [15134](magento/magento2#15134. [GitHub-13460](magento/magento2#13460)

Performance

* The price indexer is now scoped and multithreaded, which improves layered navigation, search, and indexing actions for complex sites with multiple websites and that have many price books. * You can change store locale without the exporting and importing configuration data. While Magento is in production mode and the `SCD_ON_DEMAND` is enabled, the Magento store and admin locale options are available. See [Change locales](https://devdocs.magento.com/guides/v2.2/cloud/live/sens-data-over.html#change-locales). * The catalog rule re-indexing operation has been optimized, and average re-indexing time (which depends on rule conditions) has improved by more than 80%. Previously, a full catalog rule re-index operation on a medium B2C store took more than 20 minutes.

Pricing

* Magento now uses the current date as expected when setting the start date for a special price. Previously, Magento set the start date for a special price a few years in the future, which prevented the special price for being active. * Tiered pricing and quantity increments now work as expected with decimal-based inventories. * You can now add a bundle product that includes a simple product with a price of 0 (zero) to your cart. Previously, Magento threw an error. [GitHub-8969](magento/magento2#8969) * Magento now displays the correct price on the product page for storefronts running Japanese locales. *Fix submitted by [Hirokazu Nishi](https://github.com/HirokazuNishi) in pull request [15540](magento/magento2#15540. [GitHub-11711](magento/magento2#11711) * Issues with configurable products with custom options and tier prices have been resolved. Previously, the product page did not display the correct product price, but the shopping cart did. [GitHub-5774](magento/magento2#5774)

Product video

* Magento now populates the YouTube video URL and Title fields with the same values as are populated on the default store view on multisite deployments. (These fields are global scope attributes and should be the same on all storefronts.) Previously, Magento left these fields blank in multisite deployments. * The product video embedding feature is now GDPR-complaint and allows the domain `youtube-nocookie.com`. Previously, when you tried to embed this URL, Magento threw an error.

Quote

* You can now implement a product attribute that sets **Catalog Input Type for Store Owner** equal to **Fixed Product Tax** in a multi-store environment. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request 13019 [13019](magento/magento2#13019) * Magento now successfully saves the value of `REMOTE_IP` when a customer uses an IPV6 (Internet Protocol version 6) address. Previously, this value was only partially saved in the `sales_order` and `quote` tables. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15142](magento/magento2#15142. [GitHub-10395](magento/magento2#10395) * A type error in `CartTotalRepository` has been resolved. Previously, `CartTotalRepository` could not handle extension attributes in quote addresses, and Magento threw a `PHP Fatal error: Uncaught TypeError`. [GitHub-12993](magento/magento2#12993), [GitHub-12819](magento/magento2#12819) * Magento now displays the correct product price for an order created from the Admin in multisite deployments. Previously, when an order was created from the Admin in a multisite deployment where products were assigned different prices per store view, Magento defaulted to the product price of the primary storeview if the order was edited or updated. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16893](magento/magento2#16893. [GitHub-14869](magento/magento2#14869) * An integrity constraint violation error no longer occurs after you reorder a product with custom options. *Fix submitted by [Vinay Shah](https://github.com/vinayshah) in pull request [13394](magento/magento2#13394. [GitHub-12705](magento/magento2#12705)

Reports

* You can now successfully export the Ordered Products report to a CSV file. Previously, the export file contained no report data. * The scope selector for reports now works as expected. Previously, when a merchant set the scope to **All Websites**, the generated report showed sales from only a subset of websites. * The `.csv` export of Coupon reports now shows the correct total for selected coupons. Previously, the total line in the `.csv` file showed the totals for all coupons in the selected time period, rather than just the selected coupons. * Wishlist reports are available on the Admin as expected. * The Low Stock report now accurately lists all out-of-stock products. Previously, this report was not accurate when the All Websites view was selected. [GitHub-10595](magento/magento2#10595) * The Admin's Most Viewed Products tab now displays all the products in all attribute sets, not simply the default attribute set. [GitHub-9768](magento/magento2#9768) * The timezone has been removed from the date when Magento retrieves the current month from a UTC timestamp. *Fix submitted by [Michael Wylde](https://github.com/michaelwylde) in pull request [16492](magento/magento2#16492. [GitHub-15940](magento/magento2#15940) * The **Year-to-date** dropdown accessed from **Stores** > **Settings** > **Configuration** > **General** > **Reports** > **Dashboard** now displays a numerical list that ranges from 01 to 12 as expected. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [17495](magento/magento2#17495. [GitHub-17289](magento/magento2#17289) * A valid XML layout update handle is now preinstalled in the home page. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11891](magento/magento2#11891.

Review

* Magento now displays a `404 page not found` error when a customer tries to navigate to a product review that is not accessible. Previously, Magento displayed a PHP error code. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17721](magento/magento2#17721. [GitHub-13102](magento/magento2#13102) * Magento no longer throws an error when a merchant edits a product from the Admin when reviews are disabled. *Fix submitted by [Oleksandr Kravchuk](https://github.com/swnsma) in pull request [71](https://github.com/magento-partners/magento2ee/pull/71)*. [GitHub-6264](magento/magento2#6264) * When a customer creates a product review, the link to the product from the review in the customer's **My Account** > **My Product Review** is now SEO-friendly. * The **Save and Next** and **Save and Previous** buttons on **Marketing** > **Reviews** now work as expected. * Magento now checks if a product is assigned to a current website before displaying the write a review page. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14528](magento/magento2#14528. [GitHub-13010](magento/magento2#13010)

Return Merchandise Authorizations (RMA)

  • GET V1/returns/:id calls return tracks objects as expected.
* The `GET /V1/returns/:id` endpoint retrieves `tracks` arrays as expected. * The `GET /V1/returns?searchCriteria` endpoint retrieves `tracks` arrays as expected. * The RMA status label now shows on the email that Magento sends to customers when the status of an RMA changes. * Magento now sends email when the status of a Return Merchandise Authorization (RMA) changes to Return Received, Approved, or Rejected. Previously, no email was sent to the customer who created the order. * Return Merchandise Authorization (RMA) calls now return order items and comments as expected. * Magento now sends email when the status of a Return Merchandise Authorization (RMA) changes to Return Received, Approved, or Rejected. Previously, no email was sent to the customer who created the order. * `Magento/Rma/Block/Adminhtml/Rma/Edit/Item/Form/Element/Boolean` is a new block element that allows rendering ability for the Boolean RMA attributes on the Admin. * The **Show/Hide** details button now works as expected on the Returns (RMA) page.

Rule

* Cart Price rules now correctly display nesting levels for categories with nesting levels that exceed three levels.

Sales

* Magento has added verification for previously set filters in `Magento/Ui/Component/Filters`, which has eliminated duplication of filters in the collection `where` conditions. * Magento now shows all products as expected in the Recently Ordered list when a customer places an order that contains products from multiple stores. Previously, in installations with two storefronts, if a customer added products from both stores to the same shopping cart, and placed a single order, the recently ordered product list would not show all ordered products. * The grand total for a credit memo now matches the invoiced total when a discount is applied to shipping charges. * The Items Ordered list now updates as expected when the user clicks **OK** when changing the options of a configurable product during creation of an order from the Admin. Previously, the update did not occur until the user clicked **Update Items and Quantities**. * 
Admin orders are no longer restricted by a minimum order amount. Previously, Magento required this minimum for both Admin and storefront users. * Orders exported to a CSV file now display dates in a consistent format. * Magento now displays text on the New Cart Rules page correctly. Previously, labels listed in the Store View Specific Labels section of this page was sometimes truncated or duplicated. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14231](magento/magento2#14231. [GitHub-12231](magento/magento2#12231) * Magento now removes unneeded PDF files after generation. Previously, Magento saved a copy of every generated invoice PDF in `/var`. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [17280](magento/magento2#17280. [GitHub-3535](magento/magento2#3535), [GitHub-14517](magento/magento2#14517) * 
Magento no longer throws an error when a merchant sends an invoice for an order that contains grouped products. Previously, Magento invoiced the order but threw an error, and did not send the email. [GitHub-5105](magento/magento2#5105) * Sales PDFs now support unicode fonts (GNU Free Font), which broadens language support in these PDFs. *Fix submitted by [Ross](https://github.com/rossmc) in pull request [14710](magento/magento2#14710. [GitHub-9666](magento/magento2#9666), [GitHub-12323](magento/magento2#12323) * Magento now creates invoice numbers using the correct store view ID in a multistore environment. Previously, Magento always used the default store ID for all invoices created in a multistory environment. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15665](magento/magento2#15665. [GitHub-14063](magento/magento2#14063) * 
Disabling invoice emails no longer degrades product performance. * The invoice grid now shows the correct subtotal for a partial invoice. Previously, it showed the entire order’s subtotal. *Fix submitted by [AlexWorking](https://github.com/AlexWorking) in pull request [14209](magento/magento2#14209. [GitHub-13804](magento/magento2#13804) * Magento now handles decimals properly in order quantities. *Fix submitted by [Barbazul](https://github.com/barbazul) in pull request [14346](magento/magento2#14346. [GitHub-14328](magento/magento2#14328) * You can now filter orders by customer email. Previously, Magento threw an error when you tried to filter orders by customer email from **Sales** > **Orders**. * The wrong entity_model for `invoice` has been corrected in the `eav_entity_type` table. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [997](https://github.com/magento-engcom/magento2ce/pull/997)*. * An incorrect return type in PHPdoc has been corrected. Previously, this return type resulted in multiple warnings in IDEs. *Fix submitted by [julianvdrielen](https://github.com/julianvdrielen) in pull request [14304](magento/magento2#14304. [GitHub-13992](magento/magento2#13992) * Magento now syncs an order’s shipping and billing addresses as expected when a customer edits the billing address. [GitHub-10856](magento/magento2#10856) * The transport variable can now be altered in the `email_invoice_set_template_vars_before` event. *Fix submitted by [gwharton](https://github.com/gwharton) in pull request [15039](https://github.com/magento-engcom/magento2ce/pull/15039)*. [GitHub-10210](magento/magento2#10210)

SalesRule

* Cart price rules with associated coupons are no longer affected by edits to scheduled updates. * You can now use wildcard values in coupon codes. * 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](https://github.com/ilnytskyi) in pull request [14468](magento/magento2#14468. [GitHub-10790](magento/magento2#10790)

Sample data

* The `sampledata:deploy` and `remove` commands now have `no-update` options. *Fix submitted by [Fabian Schmengler](https://github.com/schmengler) in pull request [12663](magento/magento2#12663.

Search

* The **Catalog > Products** page now contains a keyword search. *Fix submitted by [Josef Behr](https://github.com/josefbehr) in pull request [10089](magento/magento2#10089. [GitHub-5785](magento/magento2#5785) * Magento no longer throws an asymmetric transaction error when you reindex in Magento deployments running Elasticsearch. *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [10610](magento/magento2#10610. [GitHub-9930](magento/magento2#9930) * You can now submit search criteria by clicking enter when initiating a product search from the Admin. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [1197](magento/magento2#1197. [GitHub-4696](magento/magento2#4696) * Elasticsearch is now the default search engine in Magento. MySQL search has been deprecated. * Elasticsearch now works as expected in Chinese locales. * Elasticsearch no longer includes out-of-stock product options in search results. * Support for Elasticsearch 5.x has been added. See [Install and configure Elasticsearch]({{ site.baseurl }}/guides/v2.2/config-guide/elasticsearch/es-overview.html) for more information about using Elasticsearch with Magento. *Fix submitted by [Aurélien Foucret](https://github.com/afoucret) in pull request [2202](https://github.com/magento/magento2ce/pull/2202)*. * Magento no longer throws an error when a customer uses quick search to search on a term that does not exist in the search database. Previously, Magento returned this error, `TypeError: this._getFirstVisibleElement(...).addClass is not a function`. *Fix submitted by [Dragan Atanasov](https://github.com/drashmk) in pull request [14301](magento/magento2#14301. [GitHub-14274](magento/magento2#14274) * Magento no longer throws an error when you submit the search form in the header with an empty value. *Fix submitted by [Dmytro Paidych](https://github.com/dimonovp) in pull request [14185](magento/magento2#14185. [GitHub-13791](magento/magento2#13791) * Elasticsearch now correctly calculates the relevance of quick search results according to selected attribute search weights. * Out-of-stock options for configurable products no longer show up in search and layered navigation results. * You can now use an asterix when searching on customer names. Previously, if you used an asterix in a search query, Magento displayed this message, `Something went wrong with processing the default view and we have restored the filter to its original state.` *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [15077](magento/magento2#15077. [GitHub-14855](magento/magento2#14855) * Search synonyms are now available for all search engines deployed in your Magento store. Previously, search synonyms did not appear in the Admin menu when Elasticsearch 5.0+ was deployed. * You can now limit the number of results in the search autocomplete. *Fix submitted by [Max Chadwick](https://github.com/mpchadwick) in pull request [11572](magento/magento2#11572. * The mini search field no longer loses focus after JavaScript is initialized. Previously, after mini search component's JavaScript loaded and initialized, search input lost focus. *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14180](magento/magento2#14180. [GitHub-13988](magento/magento2#13988) * CatalogSearch has been deprecated and replace with Elasticsearch. * Sort by Product Name on the category page now works with all available filters. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [13468](magento/magento2#13468. * An unnecessary `saveHandler` in the CatalogSearch indexer declaration has been removed. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11626](magento/magento2#11626. * Search synonyms in a group now can declare several words as synonyms. For example, "Elon Musk,tesla" is a valid synonym group, and a search on the phrase "Elon Musk" will also show results for the "tesla" keyword. Previously, you could declare synonyms for each word (for example, "Elon,Musk,Tesla"), but these words didn't work as a phrase. Synonyms are also now case-insensitive. * Searching for a value of an attribute set on the store-view level of a product now returns results. Previously, Magento returned results only if the attribute value was entered on the all store-view levels. * Search terms from the same synonym group now return the same results. * You can now use the **Enter** key to submit a search form. *Fix submitted by [Vishal Gelani](https://github.com/vgelani) in pull request [15696](magento/magento2#15696. [GitHub-13793](magento/magento2#13793) * Search on MySQL-based entities has been improved. (This improvment does not provide a fulltext search, but simply the best way to search when a `SearchCriteria` with `fulltext` condition is provided over a MySQL table.) *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [15685](magento/magento2#15685. [GitHub-1221](magento/magento2#1221) * Magento now displays validation messages as needed on advanced searches. Previously, Magento did not display a message even after a customer submitted the advanced search form with no entries. *Fix submitted by [Torben Höhn](https://github.com/torhoehn) in pull request [17210](magento/magento2#17210. [GitHub-8131](magento/magento2#8131)

Shipping

* The free shipping cart price rule now works as expected when **UPS shipping method** is enabled and **Free Shipping** is set to "For matching items only". * The Magento UPS module has been updated to support new UPS API endpoints. * You can now use `GET .V1/shipments` to search for shipments that contain a shipping label. Previously, using this call caused Magento to throw an exception. [GitHub-6668](magento/magento2#6668) * Magento now successfully creates shipping labels for a return merchandise authorization (RMA) when using FedEx Smart Post as the shipping option. Previously, Magento threw an error under these circumstances. * Multishipping checkout now works as expected. Previously, Magento displayed the `Shipping address is not set` error message when checking out an order with multiple addresses. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [16784](magento/magento2#16784. [GitHub-16555](magento/magento2#16555) * Merchants can now ship the remaining items in an order in which some items require a credit memo. * Customers can now view their completed order from the success page for orders that will be shipped to multiple addresses. Previously, when a customer took a link from the order success page to view their just-completed order, Magento displayed this error, **There has been an error processing your request**. * The Shipment grid now displays the status of completed orders correctly. Previously, the Order Status column of the Shipment grid indicated that a completed was being processed. * The checkout page now displays address fields when the number of address lines has been left at the default. Previously, when the default value was configured, Magento did not display any ship-to address fields. [GitHub-7995](magento/magento2#7995) * Shipping method radio buttons no longer have duplicate element IDs on the cart page, making it possible for customers to select a second shipping method. [GitHub-10795](magento/magento2#10795)

Sitemap

* Magento now correctly processes global product attributes when generating the sitemap. *Fix submitted by [Ričards Zālītis](https://github.com/therool) in pull request [8999](magento/magento2#8999. [GitHub-5941](magento/magento2#5941) * The sitemap no longer contains `/home` in the URL generated for your store domain. [GitHub-12446](magento/magento2#12446) * When an error is created during sitemap generation, Magento now sends an informative email to administrators. Previously, Magento threw a fatal error. [GitHub-10502](magento/magento2#10502) * The lastmod value in the sitemap.xml file for a category now contains the created_at timestamp. Previously, this timestamp contained invalid dates. [GitHub-9151](magento/magento2#9151) * It's now easier to add additional items to a sitemap. Previously, `SitemapPlugin` worked inconsistently with large sitemaps. *Fix submitted by [Piotr Kwiecinski](https://github.com/piotrkwiecinski) in pull request [10442](magento/magento2#10442. [GitHub-10045](magento/magento2#10045) * Sitemap no longer crashes if the scope of the name attribute is set to global. [GitHub-5941](magento/magento2#5941), [GitHub-8999](magento/magento2#8999) * Sitemap no longer crashes if the scope of the name attribute is set to global. [GitHub-5941](magento/magento2#5941), [GitHub-8999](magento/magento2#8999) * Images in XML sitemap are no longer always linked to the primary store in a multistore deployment. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16813](magento/magento2#16813. [GitHub-15588](magento/magento2#15588) * Magento now generates correct product URLS when you generate a sitemap of categories and products with **Use Categories Path for Product URLs** set to **no** ( **Configuration** > **Catalog** > **Search Engine Optimization**). *Fix submitted by [Mastiuhin Oleksandr](https://github.com/mastiuhin-olexandr) in pull request [14786](magento/magento2#14786. [GitHub-4788](magento/magento2#4788)

Staging

* Magento now rolls back updated changes to their pre-update state when a merchant deletes an active scheduled update. Previously, some products were removed from their assigned categories (and categories were removed from the Amdin) when an active product update was deleted. * You can now successfully re-order a configurable product. Previously, a schedule update for one configurable product affected other ordered configurable products. * Magento no longer deletes products from the Admin product list after a merchant deletes its active schedule update. This deletion appeared only after the scheduled update time.

Store

* Returns from REST endpoint `/V1/store/storeViews` calls now include `is_active` values for stores. [GitHub-10922](magento/magento2#10922) * The `getUrlInStore()` method no longer returns URLs that contain the store code, which has shortened the extremely long URLs it previously returned. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17261](magento/magento2#17261. [GitHub-16273](magento/magento2#16273) * You can now use an `admin_system_config_changed_section` event to subscribe to changes for all sections in **Stores** > **Settings** > **Configuration**. [GitHub-5035](magento/magento2#5035) * TinyMCE now loads successfully due to a refactoring of the use of `minify_exclude` configuration. *Fix submitted by [Pieter Hoste](https://github.com/hostep) in pull request [13687](magento/magento2#13687. [GitHub-11577](magento/magento2#11577)

Swagger

* Swagger now correctly renders POST/PUT operations. Previously, in Swagger, the text area that contained the payload structure of some POST and PUT operations was not displayed. * Swagger now works as expected when JavaScript minification is enabled. Previously, when JavaScript minification was enabled, the swagger-ui-bundle.js became corrupted, although Swagger worked fine when minification was subsequently disabled, and the files were redeployed. *Fix submitted by [Pieter Hoste](https://github.com/hostep) in pull request [17627](magento/magento2#17627. [GitHub-16927](magento/magento2#16927) * Swagger now handles `searchCriteria`-related requests as expected. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15946](magento/magento2#15946. [GitHub-11477](magento/magento2#11477) * Swagger now works as expected when JavaScript minification and merging are enabled.

Swatches

* Visual swatches now display swatch color in the Admin as expected. [GitHub-11828](magento/magento2#11828) * The dropdown menu that Magento displays when a user clicks on the **Add Swatch** button on the Manage Swatch tab now displays all possible options. [GitHub-11534](magento/magento2#11534) * Color attribute swatches are now visible when sorting is enabled. [GitHub-10628](magento/magento2#10628) * You can now use REST to import visual swatch attribute options. Previously, you could not add swatch options using service contracts unless a swatch option already existed for the attribute. *Fix submitted by [gonzalopelon](https://github.com/gomencal) in pull request [12044](magento/magento2#12044. [GitHub-9410](magento/magento2#9410), [GitHub-10707](magento/magento2#10707), [GitHub-10737](magento/magento2#10737), [GitHub-11032](magento/magento2#11032) * The load and merge order of `view.xml` configuration in `\Magento\Swatches\Helper\Media` now matches `\Magento\Catalog\Helper\Image.` *Fix submitted by [Patrick McLain](https://github.com/pmclain) in pull request [13506](magento/magento2#13506. [GitHub-12647](magento/magento2#12647) * We've replaced `.size()` with `.length` to be compatible with jQuery 3.*. *Fix submitted by [Kirill Morozov](https://github.com/kirmorozov) in pull request [13686](magento/magento2#13686. * Swatch functionality that has been extended using JavaScript mixins now works as expected in Safari and Microsoft Edge. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14247](magento/magento2#14247. [GitHub-10559](magento/magento2#10559) * You can now save a swatch attribute that has an empty option. *Fix submitted by [enriquei4](https://github.com/enriquei4) in pull request [13220](magento/magento2#13220. [GitHub-13117](magento/magento2#13117) * You can now change attribute type from `swatch` to `dropdown`. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17750](magento/magento2#17750. [GitHub-12695](magento/magento2#12695), [GitHub-11703](magento/magento2#11703), [GitHub-9307](magento/magento2#9307), [GitHub-11403](magento/magento2#11403), [GitHub-9923](magento/magento2#9923)

Tax

* Tax total amount is now equal to the sum of the tax details amounts. Previously, Magento displayed the wrong order tax amounts when using specific tax configurations. *Fix submitted by [Pieter Cappelle](https://github.com/PieterCappelle) in pull request [11594](magento/magento2#11594. [GitHub-10347](magento/magento2#10347) * `\Magento\Framework\Data\OptionSourceInterface::getAllOptions()` and `\Magento\Framework\Data\OptionSourceInterface::toOptionArray()` are now compatible with parent classes. *Fix submitted by [Yevhen Sentiabov](https://github.com/joni-jones) in pull request [34](magento-engcom/php-7.2-support#34. * Double tags have been removed from the `config.xml` of the `Magento_Tax` module. * Magento no longer performs redundant tax calculations for every price on category page, which has improved product performance. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [15200](magento/magento2#15200. [GitHub-14941](magento/magento2#14941) * Magento now uses the correct table rate shipment when creating a merchant creates an order through the Admin. Previously, when a merchant created an order through the Admin and selected the shipping method table rate, Magento took the shipping rate table from the wrong website ID.

Testing

* Integrations tests no longer throw `Cannot instantiate interface Magento\Framework\Interception\ObjectManager\ConfigInterface` errors. [GitHub-12844](magento/magento2#12844) * Integration tests now reset the integration test database as expected. [GitHub-10025](magento/magento2#10025) * A typo in `dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml` has been fixed. [GitHub-7591](magento/magento2#7591) * Static tests now check for the deprecated `each()` function. *Fix submitted by [Yevhen Sentiabov](https://github.com/joni-jones) in pull request [31](magento-engcom/php-7.2-support#31. * The `functional.suite.dist.yml` has been updated to handle custom backend names. (This value was previously hard-coded.) *Fix submitted by [scribam](https://github.com/scribam) in pull request [12848](magento/magento2#12848. * THe `validate_image_info_rollback.php` test suite has been updated. *Fix submitted by [Harry Mumford-Turner](https://github.com/harrymt) in pull request [12800](magento/magento2#12800. * `phpunit.xml` is now blacklisted during schema validation static tests, particularly `Magento/Test/Integrity/Xml/SchemaTest.php`. * The `\Magento\Test\Php\LiveCodeTest::testCodeStyle` method now uses whitelist files. *Fix submitted by [Adrian Martinez](https://github.com/adrian-martinez-interactiv4) in pull request [11376](magento/magento2#11376. [GitHub-10559](magento/magento2#10559) * Integration test coverage for the new extension point for New Shipment Controller has been added. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [14634](magento/magento2#14634. [GitHub-788](magento/magento2#788) * `sjparkinson/static-review` and other obsolete tools (including `dev/tools/Magento/Tools/Layout`, `dev/tools/Magento/Tools/StaticReview/pre-commit`, and `dev/tools/Magento/Tools/psr/phpcs_precommit_hook.sh`) have been removed from the test code base. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14368](magento/magento2#14368. [GitHub-14138](magento/magento2#14138) * Integration tests for product URL rewrite generation have been added. *Fix submitted by [Rostyslav](https://github.com/rostyslav-hymon) in pull request [14252](magento/magento2#14252. * The `ProcessCronQueueObserverTest.php` integration test now works correctly. *Fix submitted by [Eino Keskitalo](https://github.com/evktalo) in pull request [16253](magento/magento2#16253. [GitHub-16243](magento/magento2#16243) * `setCateroryIds([])` has been corrected to `setCategoryIds([])` throughout the test suites. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16926](magento/magento2#16926. [GitHub-15590](magento/magento2#15590) * CreateOrderBackendTest has been refactored to support the **Reorder** button when Inventory Management is enabled. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [16006](magento/magento2#16006. [GitHub-680](magento/magento2#680) * Unit tests have been refactored to no longer check for deleted file `app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php`. [GitHub-11230](magento/magento2#11230) * `CreateCreditMemoEntityTest` has been refactored to support the Inventory Management reservation mechanism. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [16170](magento/magento2#16170. * `CreateOrderBackendPartOneTest` has been refactored to support the Inventory Management reservation mechanism. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [16153](magento/magento2#16153.

Theme

* Customers can now successfully close full-screen zoomed product images displayed on an iPhone 4s, 5s, 6, or 6s with the Safari browser. Previously, if a customer chose full-screen zoom for any product image, he could not close the full-screen zoom. * The forced setting of `cache_lifetime` to `false` has been changed to a default `cache_lifetime` value of 3600 for `Magento\Theme\Block\Html\Footer`. [GitHub-13595](magento/magento2#13595) * The default storefront welcome message now works as expected when the **Translate Inline** (**Stores > Settings > Configuration > Advanced > Developer >**) setting is enabled. *Fix submitted by [Dmytro Paidych](https://github.com/dimonovp) in pull request [14177](magento/magento2#14177. [GitHub-12711](magento/magento2#12711) * We've improved the display of the Payment Methods section of the checkout page on mobile devices. Previously, the layout of page elements was not correctly spaced. *Fix submitted by [Marcin Kwiatkowski](https://github.com/Frodigo) in pull request [13979](magento/magento2#13979. [GitHub-13315](magento/magento2#13315)

Translation and locales

* The `` statement in `system.xml` now works as expected. *Fix submitted by [Nickolas Malyovanets](https://github.com/nmalevanec) in pull request [11679](magento/magento2#11679. [GitHub-7767](magento/magento2#7767) * The JavaScript translation for validation messages now works for customer account pages. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10445](magento/magento2#10445. [GitHub-5820](magento/magento2#5820) * Messages on password strength are now translatable. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10445](magento/magento2#10445. [GitHub-5509](magento/magento2#5509) * The JavaScript translation regex no longer leads to unexpected results and untranslatable strings. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10445](magento/magento2#10445. [GitHub-7403](magento/magento2#7403) * All messages in Customer Account Create are now translatable. Previously, warning messages about password validation appeared in locale language only. *Fix submitted by [Anton Evers](https://github.com/ajpevers) in pull request [10445](magento/magento2#10445. [GitHub-9967](magento/magento2#9967) * We've added client-side caching of `js-translation.js`. * The datepicker date filter on **Reports** > **Products** > **Ordered** now works as expected for administrators working in Australian English locales. * Magento now supports Malaysian locales. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [14305](magento/magento2#14305. [GitHub-14089](magento/magento2#14089) * The string for `moreButtonText` in `app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js` can now be translated. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16228](magento/magento2#16228. [GitHub-16079](magento/magento2#16079) * Magento now displays the correct price on the product page for storefronts running Japanese locales. *Fix submitted by [Volodymyr Kublytskyi](https://github.com/vkublytskyi) in pull request [16588](magento/magento2#16588. [GitHub-11717](magento/magento2#11717) * The module responsible for generating the `js-translations.json` file now contains a routine that translates strings in tags. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16892](magento/magento2#16892. [GitHub-12081](magento/magento2#12081) * Magento now displays the correct payment method title on the payments page during checkout in multistore deployments where storeviews implement different locales. [GitHub-7582](magento/magento2#7582) * The hint provided for the global configuration field on the Admin configuration page has been corrected. [GitHub-8958](magento/magento2#8958) * `region_id` is no longer overridden when a customer edits their billing address from a country that requires a value for state to a country where one is not required. [GitHub-10317](magento/magento2#10317)

UI

* Magento no longer sends duplicate delete requests as a result of an unstable Internet connection. Previously, unintentional mass deletion of products sometimes occurred as a result of an unstable Internet connection. * As you type additional characters into the text field for a product's custom option, the hint showing the number of characters left before reaching the maximum now decreases as expected. * Previously missing translation strings have been added to the UI module. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request 11440*. [GitHub-5956](magento/magento2#5956) * Administrators who lack access to the CatalogRule module can now perform operations as expected in the Admin cart price rule edit page. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [16664](magento/magento2#16664. [GitHub-15009](magento/magento2#15009), [GitHub-12285](magento/magento2#12285) * The UI component configuration XSD file (`ui-configuration.xsd`) now constrains settings so that `abstractSettings`, such as ``, can only be placed and read from the top-level `` nodes, while component-specific settings, such as ``, can only be placed and read from the appropriate `` descendent of ``. *Fix submitted by [Neill Robson](https://github.com/neillrobson) in pull request 15161*. [GitHub-14140](magento/magento2#14140) * Users can now press the **Esc** button on the delete-from-cart confirmation pop-up window without generating a `jQuery` UI error. Previously, when a customer added a product to the shopping cart, then pressed the trash icon to delete it, Magento displayed this confirmation pop-up window, but threw an error when the customer pressed the window's **Esc** button. [GitHub-14593](magento/magento2#14593) * The `font-size` variable has been updated and standardized. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [16664](magento/magento2#16664. [GitHub-7399](magento/magento2#7399) * We've added the `@navigation-level0-item__hover__color` missing variable for mobile and tablet view. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [16796](magento/magento2#16796. [GitHub-15848](magento/magento2#15848) * Footers now behave as expected when displaying Magento on a mobile device. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17809](magento/magento2#17809. [GitHub-15118](magento/magento2#15118) * The unused totalbar block has been removed from the invoice create and credit memo create layouts. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request 17414*. [GitHub-16653](magento/magento2#16653), [GitHub-16655](magento/magento2#16655) * The JavaScript validation rule used to validate AM/PM time settings now works as expected when JavaScript is minified. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [17688](magento/magento2#17688) * The message list component message type now has a message type of success. Previously, this type was always `error` when the `parameters` property was specified. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [17703](magento/magento2#17703. [GitHub-17700](magento/magento2#17700) * Magento now displays the wishlist icon on the shopping cart page on mobile devices. Previously, Magento cut off the wishlist icon on this page when viewed on a mobile device. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [17911](magento/magento2#17911. [GitHub-17851](magento/magento2#17851) * JavaScript validation rules no longer require validation of fields where completion is not required. Previously, customers could not complete forms unless non-required fields were completed. *Fix submitted by [Malyovanets Nickolas](https://github.com/nmalevanec) in pull request [17724](magento/magento2#17724) * When a user scrolls a page, the datepicker now retains its position relative to other page elements as expected. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request 16776*. [GitHub-7903](magento/magento2#7903) * The confirmation modal buttons that Magento displays when a customer sends a product to the trash are now translated as expected. *Fix submitted by [torhoehn](https://github.com/torhoehn) in pull request [17359](magento/magento2#17359) * The dropdown menu is now positioned as expected under the link on the UI Component listing. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15746](magento/magento2#15746. [GitHub-15660](magento/magento2#15660) * Magento no longer displays the current date for a product when the `date` attribute is empty. [GitHub-9869](magento/magento2#9869) * Magento no longer throws a JavaScript error when a user enters a special character (for example, `/` or `&`) while adding the `stripped-min-length` validation to a UI component. [GitHub-9920](magento/magento2#9920) * Magento no longer throws an `Uncaught Error: Script error for: trackingCode` error on storefront pages. [GitHub-12828](magento/magento2#12828) * `range-word` validation for form fields now works as expected. [GitHub-6113](magento/magento2#6113)

URL rewrites

* Magento now sets the value of `Store_Code` from the current store when this information is included in a URL. *Fix submitted by [Oscar Recio](https://github.com/osrecio) in pull request [12545](magento/magento2#12545. [GitHub-12450](magento/magento2#12450) * Magento now loads `urlrewrite` router before the Magento base router. Previously, the Magento custom URL rewrite functionality did not work when you added an additional redirection (for example, a custom redirection from `/customer/account/create` to another page). *Fix submitted by [Marc Rodriguez](https://github.com/mrodespin) in pull request [11471](magento/magento2#11471. [GitHub-10231](magento/magento2#10231) * Switching store views now works as expected. Previously, under some conditions, users were redirected to a 404 page.[GitHub-5416](magento/magento2#5416) * You can now reset a form by clicking **Reset** in **Marketing** > **SEO & Search** > **URL Rewrites**. [GitHub-10459](magento/magento2#10459) * Categories of the Main menu in the different store view are now updated when Varnish is enabled. * Magento no longer throws a 404 error when a customer navigates from the Catalog page of the default store to a custom Catalog page on a different store. * The **Reset** button no longer causes a JavaScript error on the URL rewrite creation page. [GitHub-10462](magento/magento2#10462) * The Magento URL rewrite functionality now supports the use of special characters in category names. Previously, the category tree did not load if a category name contained a special character. *Fix submitted by [Vinay Shah](https://github.com/vinayshah) in pull request [13402](magento/magento2#13402. [GitHub-13296](magento/magento2#13296)

Visual Merchandiser

* Visual Merchandiser now includes website scope when displaying the correct prices and availability of configurable products. * We’ve improved the performance of editing or saving products in large categories (more than 18,000 products per category).

Web API

* When you use REST to update an existing product, Magento assigns the update only to the websites that they were assigned to before the update. Previously, updating a product using the REST API (`PUT /rest/all/V1/products/example_sku`) assigned the product update to all websites automatically. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [11443](magento/magento2#11443. [GitHub-11324](magento/magento2#11324) * When you create a credit memo comment with `POST /V1/creditmemo/:id/comments`, Magento now sends credit memo update emails as expected. Previously, Magento did not send this email, and no other transaction emails were sent to the customer. * Magento no longer creates duplicate shipments for orders created via API. Previously, Magento created duplicate shipments when a merchant created a shipment via the API under certain conditions (mainly with bundled products). * Product searches using `GET V1/products` return `extension_attributes` for configurable products as expected. * You can now include custom attributes when filtering the responses of REST calls. * Magento now returns a 404 error and includes a descriptive error message when a  REST search is performed on a non-existent cart. * Magento now includes the filter groups and the sort order of the `$searchCriteria` parameter in the `searchCriteria` object that is provided for the EAV set repository. [GitHub-11022](magento/magento2#11022) * Updating a product with the REST API (`PUT /rest/all/V1/products/example_sku`) no longer assigns the product to all websites automatically. (Automatic assignment to all websites now occurs only when you create the product in All Store Views scope.) [GitHub-11324](magento/magento2#11324) * A generated Admin API token no longer expires immediately. Previously, when you created a token for an Admin user and have set **Admin Token Lifetime (hours))** to empty, Magento denied access because the token immediately expired. *Fix submitted by [Vijay Golani](https://github.com/vijay-wagento) in pull request [15564](magento/magento2#15564. [GitHub-15564](magento/magento2#15564) * Magento now checks for the uniqueness of attribute option values for attributes created via REST. [GitHub-8846](magento/magento2#8846) * `salesRefundInvoiceV1` now saves the invoice ID as expected for a credit memo. [GitHub-11669](magento/magento2#11669)

Wishlist

* Magento now displays an error message if you try to add products to a wishlist without first logging in. *Fix submitted by [Pieter Cappelle](https://github.com/PieterCappelle) in pull request [12681](magento/magento2#12681. * Magento now stores product IDs and SKUs to locally stored customer data for wishlists. *Fix submitted by [James Halsall](https://github.com/jameshalsall) in pull request [12896](magento/magento2#12896. * `SearchCriteriaBuilder` now has a check to determine if sort order should be applied. Previously, `SearchCriteriaBuilder` built the wrong criteria (`ORDER BY part`). *Fix submitted by [Nickolas Malyovanets](https://github.com/nmalevanec) in pull request [1003](https://github.com/magento/magento2ce/pull/1003)*. [GitHub-5738](magento/magento2#5738) * Registered users can now create new wishlists as expected when multiple wishlists are enabled. Previously, Magento displayed an error. * Magento no longer changes the grid view to list view on the product list page when a customer adds a product from the wishlist section to the cart, and now displays the appropriate success message.

Known issues

Known issue: After installing a module and running setup:upgrade, you must run cache:clean config.

Known issue: When installing or upgrading Magento and upgrading PHP to 7.2, you must specify an encryption key value of 32 symbols (256 bits) or Magento will throw an error, and any sensitive, unsaved configuration data will be lost. When upgrading Magento and upgrading PHP to 7.2, make sure that your encryption key is exactly 32 symbols. To do this, navigate to System > **Other Settings ** > Manage Encryption Key and either enter a new key or generate a new one. To change the key, make sure that app/etc/env.php is writable.

Known issue: Magento throws the following error when you try to use the API to create two products with the same name without specifying the URL key: URL key for specified store already exists. However, when you try to create these products through the Admin, Magento does not throw an error, but instead appends a number to the converted URL key if two products have the same name.

**Known issue:** Currently, ElasticSearch is supported only in Single Source mode for the Default Source. It is not supported in Multi Source mode with custom sources.

Known issue: For Inventory Management, Single Source merchants may experience performance degradation with all products assigned to the Default Source and Default Stock. As a workaround for best performance, we recommend creating and assigning all products to one custom source and stock. This will affect bundled products support. To continue with bundled products, continue using Default Source and Stock in Single Source mode. We plan to have a resolution and bundled product multi-sourcing support in a later release. This does not affect Multi Source merchants. For details, see Inventory Management.

Known issue: For B2B merchants, please assign products to the Default Source and Default Stock for complete support. We will provide complete B2B support in a later release.

Known issue: The bin/magento setup:install — convert-old-scripts command, which is used to create declarative schema files, has the following limitations. These limitations will be addressed in a future release:

  • Only tables and columns are currently supported.

  • Renaming of tables is not supported.

Community contributions

We are grateful to the wider Magento community and would like to acknowledge their contributions to this release. Check out the following ways you can learn about the community contributions to our current releases:

  • If a community member has provided a fix for this release, we identify the fix in the Fixed Issue section of these notes with the phrase, "Fix provided by community member @member_name".

  • The Magento Community Engineering team Magento Contributors maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub.

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).

{% include release-notes/engcomm-2-3-0-partner.md %}

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.

{% include release-notes/engcomm-2-3-0-issues.md %}

System requirements

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

For more information, see System Requirements.

Installation and upgrade instructions

You can install Magento Commerce 2.3.0 using Composer.

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.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts.