diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e793e3033a2..847bce00e80 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -127,18 +127,18 @@ We use symbolic links for topics that are the same across versions of Magento. A When you create a new topic (create a new `.md` file) and its content is the same for 2.2 and 2.3 versions, create a symbolic link. -For example, if you created a new file for v.2.2---`guides/v2.2/install-gde/new-doc-topic.md`---and its content is the same for v.2.3, use the command below to create the symbolic link. +For example, if you created a new file for v.2.2: `guides/v2.2/install-gde/new-doc-topic.md` and its content is the same for v.2.3, use the command below to create the symbolic link. ```bash -cd +cd /guides/v2.3/install-gde ``` ```bash -ln -s guides/v2.2/install-gde/new-doc-topic.md guides/v2.3/install-gde/new-doc-topic.md +ln -s ../../v2.2/install-gde/new-doc-topic.md new-doc-topic.md ``` If you have an image that is identical between versions, it should placed in `/common/images`. Please optimize images before committing them to the repository. -If done correctly, the symbolic link path will start with 3 or 4 instances of `../`, as the above example shows. +If done correctly, the symbolic link path will start with 2-4 instances of `../`, as the above example shows. If possible, check a symlinked file within the same folder to ensure the proper pathing. ### Remove a symbolic link @@ -149,11 +149,15 @@ The removal should use the `git rm` command specifically. Deleting the file thro For example: ```bash -git rm guides/v2.3/install-gde/composer.md +cd +``` + +```bash +git rm guides/v2.3/install-gde/new-doc-topic.md ``` ```bash -cp guides/v2.2/install-gde/composer.md guides/v2.3/install-gde/composer.md +cp guides/v2.2/install-gde/new-doc-topic.md guides/v2.3/install-gde/new-doc-topic.md ``` Once you have the copy in place, you can edit it with the version-specific information. diff --git a/.gitignore b/.gitignore index 6d9a8a4e818..8c90cb93d01 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ _config.local.yml .jekyll-metadata +.jekyll-cache .whatsup.yml *.bat @@ -26,12 +27,5 @@ _algolia_api_key /mbi/ /page-builder/ /page-builder-migration/ -/page-builder-types/ /guides/m1x/ /mftf/ - -# Docs from different branches # -################################### - -/guides/v2.0/ -/guides/v2.1/ diff --git a/Gemfile b/Gemfile index 6b68fa2c7dd..8c9bcb0ce67 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,6 @@ gem 'wdm', platform: :mswin group :test do gem 'html-proofer' - gem 'mdl' gem 'launchy' end diff --git a/Gemfile.lock b/Gemfile.lock index 178ba974119..ee2d7128a88 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,7 +13,7 @@ GEM algolia_html_extractor (2.6.2) json (~> 2.0) nokogiri (~> 1.10.4) - algoliasearch (1.27.0) + algoliasearch (1.27.1) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) colorator (1.1.0) @@ -25,13 +25,13 @@ GEM ffi (>= 1.3.0) eventmachine (1.2.7) exifr (1.3.6) - faraday (0.15.4) + faraday (0.17.0) multipart-post (>= 1.2, < 3) ffi (1.11.1) filesize (0.2.0) forwardable-extended (2.6.0) fspath (3.1.2) - html-proofer (3.12.2) + html-proofer (3.13.0) addressable (~> 2.3) mercenary (~> 0.3) nokogiri (~> 1.10) @@ -41,7 +41,7 @@ GEM yell (~> 2.0) http_parser.rb (0.6.0) httpclient (2.8.3) - i18n (0.9.5) + i18n (1.7.0) concurrent-ruby (~> 1.0) image_optim (0.26.5) exifr (~> 1.2, >= 1.2.2) @@ -54,20 +54,22 @@ GEM image_optim (~> 0.19) image_size (2.0.2) in_threads (1.5.3) - jekyll (3.8.6) + jekyll (4.0.0) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) + i18n (>= 0.9.5, < 2) + jekyll-sass-converter (~> 2.0) jekyll-watch (~> 2.0) - kramdown (~> 1.14) + kramdown (~> 2.1) + kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (~> 3.0) safe_yaml (~> 1.0) - jekyll-algolia (1.5.0) + terminal-table (~> 1.8) + jekyll-algolia (1.6.0) algolia_html_extractor (~> 2.6) algoliasearch (~> 1.26) filesize (~> 0.1) @@ -76,44 +78,39 @@ GEM nokogiri (~> 1.6) progressbar (~> 1.9) verbal_expressions (~> 0.1.5) - jekyll-optional-front-matter (0.3.0) - jekyll (~> 3.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) jekyll-redirect-from (0.15.0) jekyll (>= 3.3, < 5.0) - jekyll-relative-links (0.6.0) - jekyll (~> 3.3) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-sass-converter (2.0.1) + sassc (> 2.0.1, < 3.0) jekyll-sitemap (1.3.1) jekyll (>= 3.7, < 5.0) - jekyll-titles-from-headings (0.5.1) - jekyll (~> 3.3) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) json (2.2.0) - kramdown (1.17.0) + kramdown (2.1.0) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) launchy (2.4.3) addressable (~> 2.3) liquid (4.0.3) listen (3.2.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - mdl (0.5.0) - kramdown (~> 1.12, >= 1.12.0) - mixlib-cli (~> 1.7, >= 1.7.0) - mixlib-config (~> 2.2, >= 2.2.1) mercenary (0.3.6) mini_portile2 (2.4.0) - mixlib-cli (1.7.0) - mixlib-config (2.2.18) - tomlrb multipart-post (2.1.1) netrc (0.11.0) nokogiri (1.10.4) mini_portile2 (~> 2.4.0) octokit (4.14.0) sawyer (~> 0.8.0, >= 0.5.3) - parallel (1.17.0) + parallel (1.18.0) pathutil (0.16.2) forwardable-extended (~> 2.6) progress (3.5.2) @@ -125,18 +122,17 @@ GEM ffi (~> 1.0) rouge (3.12.0) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) + sassc (2.2.1) + ffi (~> 1.9) sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) thor (0.20.3) - tomlrb (1.2.8) typhoeus (1.3.1) ethon (>= 0.9.0) + unicode-display_width (1.6.0) verbal_expressions (0.1.5) wdm (0.1.1) whatsup_github (0.0.1) @@ -162,7 +158,6 @@ DEPENDENCIES jekyll-sitemap jekyll-titles-from-headings launchy - mdl wdm whatsup_github diff --git a/_checks/md_check_hook.rb b/_checks/md_check_hook.rb deleted file mode 100644 index 47a19f1b254..00000000000 --- a/_checks/md_check_hook.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -# This Jekyll hook runs Markdown linter (https://github.com/markdownlint/markdownlint) -# on modified '.md' files. -# '_checks/styles/style-rules-dev' sets a style (https://github.com/markdownlint/markdownlint/blob/master/docs/creating_styles.md) -# that is a set of rules to be applied when linting (https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md). -# '.mdlrc' sets linting configuration (https://github.com/markdownlint/markdownlint/blob/master/docs/configuration.md). -# -# The plugin runs in serving mode only. -# -Jekyll::Hooks.register :site, :post_write do |site| - next unless site.config['serving'] - - modified_files = `git ls-files --modified --others --exclude-standard`.split("\n") - modified_md_files = modified_files.select { |file| File.extname(file) == '.md' } - next if modified_md_files.empty? - - puts 'Checking Markdown syntax...'.blue - modified_md_files_as_a_string = modified_md_files.join(' ') - report = `bin/mdl #{modified_md_files_as_a_string}` - puts report.yellow - puts 'The style is defined in _checks/styles/style-rules-dev'.yellow -end diff --git a/_checks/styles/style-rules-prod b/_checks/styles/style-rules-prod index c7b2c7dc894..92b0c6e27b4 100644 --- a/_checks/styles/style-rules-prod +++ b/_checks/styles/style-rules-prod @@ -25,7 +25,7 @@ exclude_rule 'MD028' rule 'MD029' rule 'MD030', :ul_single => 2, :ol_single => 1, :ul_multi => 2, :ol_multi => 1 exclude_rule 'MD031' -exclude_rule 'MD032' +rule 'MD032' exclude_rule 'MD033' exclude_rule 'MD034' rule 'MD035' diff --git a/_data/actiongroups.yml b/_data/actiongroups.yml new file mode 100644 index 00000000000..c4cbe49ad45 --- /dev/null +++ b/_data/actiongroups.yml @@ -0,0 +1,5673 @@ + +- filename: "AdminGridFilterResetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminGridFilterResetActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminGridFilterResetActionGroup" + description: "Scrolls to the top of the page. Clicks on the 'Clear Filters' link, if present, in the Admin Grid 'Filters' section." + +- filename: "AdminGridFilterFillInputFieldActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminGridFilterFillInputFieldActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminGridFilterFillInputFieldActionGroup" + description: "Expands the 'Filters' section of an Admin Grid page. Fills in the provided Filter Value for the provided Filter Name." + +- filename: "AdminSaveAndCloseActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminSaveAndCloseActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminFormSaveAndClose" + description: "Clicks on 'Save and Close'. Validates that the Success Message is present." + + - name: "AdminFormSaveAndDuplicate" + description: "Clicks on 'Save and Duplicate'. Validates that the Success Message is present and correct." + +- filename: "AdminGridFilterSearchResultsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminGridFilterSearchResultsActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminGridFilterSearchResultsByInput" + description: "Filters an Admin Grid page using the provided Filter Selector and Search Value." + +- filename: "AdminDataGridFilterActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminDataGridFilterActionGroup.xml" + module: "Ui" + actiongroups: + - name: "searchAdminDataGridByKeyword" + description: "Fills 'Search by keyword' on an Admin Grid page. Clicks on Submit Search." + + - name: "resetAdminDataGridToDefaultView" + description: "Resets an Admin Grid page to the 'Default View'." + + - name: "clearFiltersAdminDataGrid" + description: "Clicks on 'Clear Filters' on an Admin Grid page." + +- filename: "AdminDataGridPaginationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminDataGridPaginationActionGroup.xml" + module: "Ui" + actiongroups: + - name: "adminDataGridSelectPerPage" + description: "Sets the provided preset 'per page' display setting on an Admin Grid page." + + - name: "adminDataGridSelectCustomPerPage" + description: "Sets the provided custom 'per page' display setting on an Admin Grid page." + + - name: "adminDataGridDeleteCustomPerPage" + description: "Sets the provided custom 'per page' display setting on an Admin Grid page. Deletes the Items listed in a grid. Validates that the 'per page' count in NOT present." + +- filename: "AdminClickSearchInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminClickSearchInGridActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminClickSearchInGridActionGroup" + description: "" + +- filename: "AdminGridFilterApplyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminGridFilterApplyActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminGridFilterApplyActionGroup" + description: "Clicks on 'Apply Filters' in the 'Filters' section of an Admin Grid page." + +- filename: "AdminFillInputFilterFieldActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminFillInputFilterFieldActionGroup.xml" + module: "Ui" + actiongroups: + - name: "AdminFillInputFilterFieldActionGroup" + description: "" + +- filename: "AdminUserActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml" + module: "Braintree" + actiongroups: + - name: "GoToAllUsers" + description: "Navigate to the Users page via Backend Admin Side Menu. PLEASE NOTE: Use the amOnPage action instead." + + - name: "AdminCreateUserAction" + description: "Creates a User using the NewAdmin User Entity and User Role Entity. PLEASE NOTE: The Action Group values are Hardcoded." + +- filename: "StorefrontFillCartDataActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Braintree/Test/Mftf/ActionGroup/StorefrontFillCartDataActionGroup.xml" + module: "Braintree" + actiongroups: + - name: "StorefrontFillCartDataActionGroup" + description: "Fills Cart Data with Braintree using the provided Data Entity." + +- filename: "ConfigureBraintreeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Braintree/Test/Mftf/ActionGroup/ConfigureBraintreeActionGroup.xml" + module: "Braintree" + actiongroups: + - name: "ConfigureBraintree" + description: "Sets up the Braintree configuration setting using the BraintreeConfigurationSection Data Entity. PLEASE NOTE: The Action Group values are Hardcoded." + + - name: "DisableBrainTree" + description: "Disables the Braintree and BraintreePaypal configuration settings via the CLI." + +- filename: "AdminRoleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminRoleActionGroup.xml" + module: "Braintree" + actiongroups: + - name: "GoToUserRoles" + description: "Navigate to the User Roles page via Backend Admin Side Menu. PLEASE NOTE: Use the amOnPage action instead." + + - name: "AdminCreateNewRole" + description: "Creates a User Role using the provided Data." + + - name: "AdminDeleteRoleActionGroup" + description: "Deletes a User Role that contains the text 'Role'. PLEASE NOTE: The Action Group values are Hardcoded." + +- filename: "AdminOrderBraintreeFillActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminOrderBraintreeFillActionGroup.xml" + module: "Braintree" + actiongroups: + - name: "AdminOrderBraintreeFillActionGroup" + description: "Fills in the Payment Method using Braintree details. PLEASE NOTE: The Braintree details are Hardcoded using 'PaymentAndShippingInfo'." + +- filename: "AdminProductAddFPTValueActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Weee/Test/Mftf/ActionGroup/AdminProductAddFPTValueActionGroup.xml" + module: "Weee" + actiongroups: + - name: "AdminProductAddFPTValueActionGroup" + description: "Adds the provided FPT details (Attribute Code, Country, State and Value) on the Admin Product creation/edit page." + +- filename: "StorefrontFillContactUsFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Contact/Test/Mftf/ActionGroup/StorefrontFillContactUsFormActionGroup.xml" + module: "Contact" + actiongroups: + - name: "StorefrontFillContactUsFormActionGroup" + description: "Fills Name, Email and Comment on the Storefront 'Contact Us' page." + +- filename: "StorefrontSubmitContactUsFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Contact/Test/Mftf/ActionGroup/StorefrontSubmitContactUsFormActionGroup.xml" + module: "Contact" + actiongroups: + - name: "StorefrontSubmitContactUsFormActionGroup" + description: "Clicks on the 'Submit' button on the Storefront 'Contact Us' page." + +- filename: "AssertMessageContactUsFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Contact/Test/Mftf/ActionGroup/AssertMessageContactUsFormActionGroup.xml" + module: "Contact" + actiongroups: + - name: "AssertMessageContactUsFormActionGroup" + description: "Validates that the provided Message appears in the correct Message Type on the Storefront 'Contact Us' page." + +- filename: "StorefrontOpenContactUsPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Contact/Test/Mftf/ActionGroup/StorefrontOpenContactUsPageActionGroup.xml" + module: "Contact" + actiongroups: + - name: "StorefrontOpenContactUsPageActionGroup" + description: "Goes to the Storefront 'Contact Us' page." + +- filename: "AdminCreateWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Widget/Test/Mftf/ActionGroup/AdminCreateWidgetActionGroup.xml" + module: "Widget" + actiongroups: + - name: "AdminCreateWidgetActionGroup" + description: "Goes to the Admin Widget creation page. Creates the provided Widget." + + - name: "AdminCreateProductsListWidgetActionGroup" + description: "EXTENDS: AdminCreateWidgetActionGroup. Creates a Product List Widget. Validates that the Success Message is present and correct." + + - name: "AdminCreateDynamicBlocksRotatorWidgetActionGroup" + description: "EXTENDS: AdminCreateWidgetActionGroup. Creates a Dynamic Block Rotate Widget." + + - name: "AdminDeleteWidgetActionGroup" + description: "Goes to the Admin Widget grid page. Deletes the provided Widget. Validates that the Success Message is present and correct." + + - name: "AdminCreateProductLinkWidgetActionGroup" + description: "EXTENDS: AdminCreateWidgetActionGroup. Creates a Product List Widget using the provided Product. Validates that the Success Message is present and correct." + +- filename: "AdminWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Widget/Test/Mftf/ActionGroup/AdminWidgetActionGroup.xml" + module: "Widget" + actiongroups: + - name: "AdminCreateWidgetWithBlockActionGroup" + description: "Goes to the Admin Widgets creation page. Creates the provided Widget which includes the provided Block. Clicks on Save. Validates that the Success Message is preset and correct." + +- filename: "AdminCreateAndSaveWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Widget/Test/Mftf/ActionGroup/AdminCreateAndSaveWidgetActionGroup.xml" + module: "Widget" + actiongroups: + - name: "AdminCreateAndSaveWidgetActionGroup" + description: "EXTENDS: AdminCreateWidgetActionGroup. Clicks on Save. Validates that the Success Message is present and correct." + +- filename: "ClearCacheActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/PageCache/Test/Mftf/ActionGroup/ClearCacheActionGroup.xml" + module: "PageCache" + actiongroups: + - name: "ClearCacheActionGroup" + description: "Goes to the Admin Cache Management page. Clicks on 'Flush Magento Cache'." + + - name: "clearPageCache" + description: "Goes to the Admin Cache Management page. Selects 'Refresh'. Checks the 'Page Cache' row. Clicks on Submit." + +- filename: "ClearPageCacheActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/PageCache/Test/Mftf/ActionGroup/ClearPageCacheActionGroup.xml" + module: "PageCache" + actiongroups: + - name: "ClearPageCacheActionGroup" + description: "Goes to the Admin Cache Management page. Selects 'Refresh'. Checks the 'Page Cache' row. Clicks on Submit." + +- filename: "CreateOrderToPrintPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/CreateOrderToPrintPageActionGroup.xml" + module: "Sales" + actiongroups: + - name: "CreateOrderToPrintPageActionGroup" + description: "Goes to the provided Storefront Category page. Adds the Product to the Cart. Places the Order. Clicks on Print Order." + + - name: "CreateOrderToPrintPageWithSelectedPaymentMethodActionGroup" + description: "EXTENDS: CreateOrderToPrintPageActionGroup. Clicks on 'Check / Money Order'." + +- filename: "AdminAddToOrderConfigurableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAddToOrderConfigurableProductActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAddToOrderConfigurableProductActionGroup" + description: "" + +- filename: "AssertOrderButtonsAvailableActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AssertOrderButtonsAvailableActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AssertOrderButtonsAvailableActionGroup" + description: "Validates that the primary buttons appear on the Admin Order edit page." + +- filename: "AdminSubmitOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminSubmitOrderActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminSubmitOrderActionGroup" + description: "" + +- filename: "AdminAssertRefundOrderStatusInCommentsHistoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAssertRefundOrderStatusInCommentsHistoryActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAssertRefundOrderStatusCommentsHistoryActionGroup" + description: "Clicks on the 'Comments History' on Admin View Order page. Validates that the provided Order Status and Refund message are present and correct." + +- filename: "AdminCreditMemoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminCreditMemoActionGroup.xml" + module: "Sales" + actiongroups: + - name: "verifyBasicCreditMemoInformation" + description: "Validates that the provided Customer, Shipping/Billing Address and Customer Group are present and correct on the Admin Credit Memo view page." + + - name: "seeProductInItemsRefunded" + description: "Validates that the provided Product appears in the 'Product' column on the Admin Credit Memo view page." + + - name: "StartToCreateCreditMemoActionGroup" + description: "" + + - name: "SubmitCreditMemoActionGroup" + description: "" + + - name: "UpdateCreditMemoTotalsActionGroup" + description: "" + +- filename: "AdminSelectFlatRateShippingMethodActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminSelectFlatRateShippingMethodActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminSelectFlatRateShippingMethodActionGroup" + description: "" + +- filename: "FilterShipmentGridByOrderIdActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/FilterShipmentGridByOrderIdActionGroup.xml" + module: "Sales" + actiongroups: + - name: "FilterShipmentGridByOrderIdActionGroup" + description: "" + +- filename: "StorefrontFillOrdersAndReturnsFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/StorefrontFillOrdersAndReturnsFormActionGroup.xml" + module: "Sales" + actiongroups: + - name: "StorefrontFillOrdersAndReturnsFormActionGroup" + description: "" + +- filename: "AdminOrderFilterByOrderIdAndStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOrderFilterByOrderIdAndStatusActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminOrderFilterByOrderIdAndStatusActionGroup" + description: "" + +- filename: "AdminOrderActionOnGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOrderActionOnGridActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminOrderActionOnGridActionGroup" + description: "" + + - name: "AdminTwoOrderActionOnGridActionGroup" + description: "" + +- filename: "AdminOrderGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOrderGridActionGroup.xml" + module: "Sales" + actiongroups: + - name: "filterOrderGridById" + description: "Goes to the Admin Orders page. Filters the grid based on the provided Order ID." + + - name: "filterOrderGridByBillingName" + description: "Goes to the Admin Orders page. Filters the grid based on the provided Customer." + + - name: "filterOrderGridByBaseTotalRange" + description: "Goes to the Admin Orders page. Filters the grid based on the provided Grand Total From/To values." + + - name: "filterOrderGridByPurchaseDate" + description: "Goes to the Admin Orders page. Filters the grid based on the provided Purchased Date From/To values." + + - name: "filterOrderGridByStatus" + description: "Filters the Admin Orders grid based on the provided Order Status." + + - name: "AdminOrdersGridClearFiltersActionGroup" + description: "Goes to the Admin Orders grid page. Clicks on 'Clear Filters', if present." + + - name: "OpenOrderById" + description: "EXTENDS: filterOrderGridById. Clicks on the 1st row of the Admin Orders grid." + +- filename: "AdminOrderStatusFormFillAndSaveActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOrderStatusFormFillAndSaveActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminOrderStatusFormFillAndSave" + description: "Fills in the provided Status and Label on the Admin Order Status section." + +- filename: "AdminAssertRefundInRefundsGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAssertRefundInRefundsGridActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAssertRefundInRefundsGridActionGroup" + description: "Goes to the Admin Credit Memo grid page. Filters the grid for the provided Order ID, Memo ID, Refund Status and Refunded Total. Validates that the provided details are present and correct." + +- filename: "CreateNewOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/CreateNewOrderActionGroup.xml" + module: "Sales" + actiongroups: + - name: "useBraintreeForMasterCard" + description: "Selects 'Braintree' as the Payment Method on the Admin New Order creation page. Enters Credit Card details. PLEASE NOTE: The Credit Card details used are Hardcoded using 'PaymentAndShippingInfo'." + +- filename: "StorefrontAssertSalesPrintOrderBillingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/StorefrontAssertSalesPrintOrderBillingAddressActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AssertSalesPrintOrderBillingAddress" + description: "" + +- filename: "AdminAddToOrderDownloadableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAddToOrderDownloadableProductActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAddToOrderDownloadableProductActionGroup" + description: "" + +- filename: "AssertOrderStatusFormSaveSuccessActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AssertOrderStatusFormSaveSuccessActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AssertOrderStatusFormSaveSuccess" + description: "Validates that the Success Message is present and correct." + +- filename: "FilterOrderStatusByLabelAndCodeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/FilterOrderStatusByLabelAndCodeActionGroup.xml" + module: "Sales" + actiongroups: + - name: "FilterOrderStatusByLabelAndCodeActionGroup" + description: "" + +- filename: "AssertOrderStatusExistsInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AssertOrderStatusExistsInGridActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AssertOrderStatusExistsInGrid" + description: "Validates that the provided Order Status and Label are present in the Admin Orders grid." + +- filename: "AdminApplyCouponToOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminApplyCouponToOrderActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminApplyCouponToOrderActionGroup" + description: "" + +- filename: "SelectActionForOrdersActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/SelectActionForOrdersActionGroup.xml" + module: "Sales" + actiongroups: + - name: "SelectActionForOrdersActionGroup" + description: "" + +- filename: "AdminAssertOrderAvailableButtonsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAssertOrderAvailableButtonsActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAssertOrderAvailableButtonsActionGroup" + description: "" + +- filename: "AdminOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOrderActionGroup.xml" + module: "Sales" + actiongroups: + - name: "navigateToNewOrderPageNewCustomer" + description: "Goes to the Admin Orders grid page. Clicks on 'Create New Order'. Clicks on 'Create New Customer'. Select the provided Store View, if present. Validates that Page Title is present and correct." + + - name: "navigateToNewOrderPageNewCustomerSingleStore" + description: "Goes to the Admin Orders grid page. Clicks on 'Create New Order'. Clicks on 'Create New Customer'. Validates that Page Title is present and correct." + + - name: "navigateToNewOrderPageExistingCustomer" + description: "Goes tot he Admin Orders grid page. Clicks on 'Create New Order'. Filters the grid for the provided Customer. Clicks on the Customer. Selects the provided Store View, if present. Validates that the Page Title is present and correct." + + - name: "NavigateToNewOrderPageExistingCustomerAndStoreActionGroup" + description: "EXTENDS: navigateToNewOrderPageExistingCustomer. Clicks on the provided Store View." + + - name: "checkRequiredFieldsNewOrderForm" + description: "Clears the Email, First Name, Last Name, Street Line 1, City, Postal Code and Phone fields when adding an Order and then verifies that they are required after attempting to Save." + + - name: "addSimpleProductToOrder" + description: "Adds the provided Simple Product to an Order. Fills in the provided Product Qty. Clicks on 'Add Selected Product(s) to Order'." + + - name: "AddSimpleProductWithQtyToOrderActionGroup" + description: "" + + - name: "addConfigurableProductToOrder" + description: "Adds the provided Configurable Product with the provided Option to an Order. Fills in the provided Product Qty. Clicks on 'Add Selected Product(s) to Order'." + + - name: "newAddConfigurableProductToOrder" + description: "" + + - name: "addConfigurableProductToOrderFromAdmin" + description: "EXTENDS: addConfigurableProductToOrder. Selects the provided Option to the Configurable Product." + + - name: "configureOrderedConfigurableProduct" + description: "Clicks on 'Configure' for a Product in the 'Please select products' under the 'Create New Order for' page. Selects the provided Option and Attribute. Fills in the provided Qty. Clicks on Ok." + + - name: "addBundleProductToOrder" + description: "Adds the provided Bundled Product with the provided Option to an Order. Fills in the provided Product Qty. Clicks on 'Add Selected Product(s) to Order'." + + - name: "addBundleProductToOrderAndCheckPriceInGrid" + description: "EXTENDS: addBundleProductToOrder. Validates that the provided Product Price is present and correct in the 'Items Ordered' section." + + - name: "addDownloadableProductToOrder" + description: "Adds a Downloadable Product to an Order. Clicks on 'Add Selected Product(s) to Order'." + + - name: "addGroupedProductOptionToOrder" + description: "Adds the provided Grouped Product with the provided Option to an Order. Fills in the provided Product Qty. Clicks on 'Add Selected Product(s) to Order'." + + - name: "fillOrderCustomerInformation" + description: "Fills in the provided Customer and Address details on the Admin 'Create New Order for' page." + + - name: "orderSelectFlatRateShipping" + description: "Selects the 'Flat Rate' Shipping Method on the Admin 'Create New Order for' page." + + - name: "orderSelectFreeShipping" + description: "Selects the 'Free Shipping' Shipping Method on the Admin 'Create New Order for' page." + + - name: "verifyBasicOrderInformation" + description: "Validates that the provided Customer, Shipping/Billing Address and Customer Group are present and correct on the Admin Orders view page." + + - name: "AssertOrderAddressInformationActionGroup" + description: "" + + - name: "verifyCreatedOrderInformation" + description: "Validates that the Success Message, Order Status (Pending) and Order ID are present and correct." + + - name: "seeProductInItemsOrdered" + description: "Validates that the provided Product is present and correct in the 'Items Ordered' section on the Admin Orders view page." + + - name: "CreateOrderInStoreActionGroup" + description: "Goes to the Admin Create Order page. Creates an Order based on the provided Customer, Store View and Product. Validates that the Success Message is present and correct." + + - name: "CreateOrderInStoreChoosingPaymentMethodActionGroup" + description: "Goes to the Admin Create Order page. Creates an Order based on the provided Customer, Store View and Product. Validates that the Success Message is present and correct." + + - name: "cancelPendingOrder" + description: "Cancels the Pending Order on the Admin Orders view page. Validates that the provided Order Status is present and correct." + + - name: "dontSeeProductInItemsOrdered" + description: "" + + - name: "SelectCheckMoneyPaymentMethod" + description: "Selects the 'Check / Money Order' Payment Method on the Admin Create New Order page." + + - name: "SelectBankTransferPaymentMethodActionGroup" + description: "" + + - name: "SelectCashOnDeliveryPaymentMethodActionGroup" + description: "" + + - name: "SelectPurchaseOrderPaymentMethodActionGroup" + description: "" + + - name: "CreateOrderActionGroup" + description: "Goes to the Admin Create New Order page. Selects the provided Customer. Adds the provided Product to the Order. Clicks on Submit Order. Validates that the Success Message is present and correct." + +- filename: "AdminAssertProductQtyInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAssertProductQtyInGridActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAssertProductQtyInGridActionGroup" + description: "Goes tot he Admin Catalog Product grid page. Filters the grid based on the provided Product SKU. Validates that the provided Product Qty is present." + +- filename: "AdminCreateInvoiceActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminCreateInvoiceActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminCreateInvoiceActionGroup" + description: "" + + - name: "AdminCreateInvoiceAndShipmentActionGroup" + description: "" + + - name: "AdminCreateInvoiceAndCreditMemoActionGroup" + description: "" + +- filename: "AdminInvoiceActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminInvoiceActionGroup.xml" + module: "Sales" + actiongroups: + - name: "verifyBasicInvoiceInformation" + description: "Validates that the provided Customer, Address and Customer Group details are present and correct on the Admin View Invoice page." + + - name: "seeProductInInvoiceItems" + description: "Validates that the provided Product appears under the 'SKU' column in the Admin Invoices edit page." + + - name: "adminFastCreateInvoice" + description: "Clicks on 'Invoice' on the Admin Orders view page. Clicks on 'Submit Invoice'. Clicks on 'View Invoice'." + + - name: "clearInvoicesGridFilters" + description: "Goes to the Admin Invoices grid page. Clicks on 'Clear Filters', if present." + + - name: "goToInvoiceIntoOrder" + description: "Clicks on 'Invoice' on the Admin Orders view page. Validates that the URL and Page Title are correct." + + - name: "StartCreateInvoiceFromOrderPage" + description: "Clicks on 'Invoice' on the Admin Orders view page. Validates that the URL and Page Title are correct." + + - name: "SubmitInvoice" + description: "Clicks on 'Submit Invoice' on the Admin 'New Invoice' page. Validates that the Success Message is present and correct. Validates that the Order ID appears in the URL." + + - name: "filterInvoiceGridByOrderId" + description: "Goes to the Admin Invoices grid page. Filters the grid for the provided Order ID." + + - name: "FilterInvoiceGridByOrderIdWithCleanFiltersActionGroup" + description: "" + +- filename: "AdminAddToOrderCouponCodeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAddToOrderCouponCodeActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAddToOrderCouponCodeActionGroup" + description: "" + +- filename: "AdminShipThePendingOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminShipThePendingOrderActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminShipThePendingOrderActionGroup" + description: "" + +- filename: "AssertOrderStatusFormSaveDuplicateErrorActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AssertOrderStatusFormSaveDuplicateErrorActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AssertOrderStatusFormSaveDuplicateError" + description: "Validates that the 'Duplicate Order' Error Message is present and correct." + +- filename: "AdminOpenAndFillCreditMemoRefundActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOpenAndFillCreditMemoRefundActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminOpenAndFillCreditMemoRefundActionGroup" + description: "Clicks on the 'Credit Memos' section on the Admin Orders edit page. Fills in the provided Refund details (Qty to Refund, Shipping Refund, Adjustment Refund, Adjustment Fee and Row number)." + + - name: "AdminOpenAndFillCreditMemoRefundAndBackToStockActionGroup" + description: "EXTENDS: AdminOpenAndFillCreditMemoRefundActionGroup. Checks 'Return to Stock'." + +- filename: "AdminFilterProductInCreateOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminFilterProductInCreateOrderActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminFilterProductInCreateOrderActionGroup" + description: "" + +- filename: "AdminAddToOrderBundleProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminAddToOrderBundleProductActionGroup.xml" + module: "Sales" + actiongroups: + - name: "AdminAddToOrderBundleProductActionGroup" + description: "" + +- filename: "StorefrontOrderActionGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Sales/Test/Mftf/ActionGroup/StorefrontOrderActionGroupActionGroup.xml" + module: "Sales" + actiongroups: + - name: "StorefrontSearchGuestOrderActionGroup" + description: "Goes to the Storefront Customer Orders and Returns page. Fills in the provided Order ID, Billing Last Name and Email. Clicks on Continue. Validates that the URL is correct." + +- filename: "StorefrontProductVideoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ProductVideo/Test/Mftf/ActionGroup/StorefrontProductVideoActionGroup.xml" + module: "ProductVideo" + actiongroups: + - name: "assertProductVideoStorefrontProductPage" + description: "Validates that the provided Video is present on the Storefront Product page." + + - name: "assertProductVideoNotInStorefrontProductPage" + description: "Validates that the provided Video is NOT present on the Storefront Product page." + +- filename: "AdminProductVideoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ProductVideo/Test/Mftf/ActionGroup/AdminProductVideoActionGroup.xml" + module: "ProductVideo" + actiongroups: + - name: "addProductVideo" + description: "Expands the 'Images And Videos' section on the Admin Product creation/edit page. Adds the provided Video to the Product. Clicks on Save." + + - name: "removeProductVideo" + description: "Expands the 'Images And Videos' section on the Admin Product creation/edit page. Clicks on the Remove Video button." + + - name: "assertProductVideoAdminProductPage" + description: "Validates that the provided Video is present on the Admin Product creation/edit page." + + - name: "assertProductVideoNotInAdminProductPage" + description: "Validates that the provided Video is NOT present on the Admin Product creation/edit page." + +- filename: "AdminChangeInstantPurchaseButtonTextActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/InstantPurchase/Test/Mftf/ActionGroup/AdminChangeInstantPurchaseButtonTextActionGroup.xml" + module: "InstantPurchase" + actiongroups: + - name: "AdminChangeInstantPurchaseButtonTextActionGroup" + description: "" + +- filename: "AdminOpenInstantPurchaseConfigPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/InstantPurchase/Test/Mftf/ActionGroup/AdminOpenInstantPurchaseConfigPageActionGroup.xml" + module: "InstantPurchase" + actiongroups: + - name: "AdminOpenInstantPurchaseConfigPageActionGroup" + description: "" + +- filename: "AdminChangeInstantPurchaseStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/InstantPurchase/Test/Mftf/ActionGroup/AdminChangeInstantPurchaseStatusActionGroup.xml" + module: "InstantPurchase" + actiongroups: + - name: "AdminChangeInstantPurchaseStatusActionGroup" + description: "" + +- filename: "StorefrontPersistentAssertCustomerWelcomeMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Persistent/Test/Mftf/ActionGroup/StorefrontPersistentAssertCustomerWelcomeMessageActionGroup.xml" + module: "Persistent" + actiongroups: + - name: "StorefrontAssertPersistentCustomerWelcomeMessageActionGroup" + description: "" + + - name: "StorefrontAssertPersistentCustomerWelcomeMessageNotPresentActionGroup" + description: "" + +- filename: "StorefrontAssertPersistentRegistrationPageFieldsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Persistent/Test/Mftf/ActionGroup/StorefrontAssertPersistentRegistrationPageFieldsActionGroup.xml" + module: "Persistent" + actiongroups: + - name: "StorefrontAssertPersistentRegistrationPageFields" + description: "" + +- filename: "StorefrontCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Persistent/Test/Mftf/ActionGroup/StorefrontCustomerActionGroup.xml" + module: "Persistent" + actiongroups: + - name: "CustomerLoginOnStorefrontWithRememberMeChecked" + description: "EXTENDS: LoginToStorefrontActionGroup. Checks the 'Remember Me' checkbox." + + - name: "CustomerLoginOnStorefrontWithRememberMeUnChecked" + description: "EXTENDS: LoginToStorefrontActionGroup. Uncheck the 'Remember Me' checkbox." + + - name: "StorefrontRegisterCustomerRememberMe" + description: "" + + - name: "StorefrontCreateCustomerOnRegisterPageDoNotRememberMe" + description: "" + +- filename: "AssertElementInTranslateInlineModeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Translation/Test/Mftf/ActionGroup/AssertElementInTranslateInlineModeActionGroup.xml" + module: "Translation" + actiongroups: + - name: "AssertElementInTranslateInlineModeActionGroup" + description: "" + +- filename: "AdminTranslateElementActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Translation/Test/Mftf/ActionGroup/AdminTranslateElementActionGroup.xml" + module: "Translation" + actiongroups: + - name: "AdminTranslateElementActionGroup" + description: "" + +- filename: "AdminOpenNewVariablePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AdminOpenNewVariablePageActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AdminOpenNewVariablePageActionGroup" + description: "" + +- filename: "AdminFilterVariableGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AdminFilterVariableGridActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AdminFilterVariableGridActionGroup" + description: "" + +- filename: "AdminNavigateToVariablePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AdminNavigateToVariablePageActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AdminNavigateToVariablePageByCodeActionGroup" + description: "" + +- filename: "AdminOpenVariablesGridPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AdminOpenVariablesGridPageActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AdminOpenVariablesGridPageActionGroup" + description: "" + +- filename: "CreateCustomVariableActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/CreateCustomVariableActionGroup.xml" + module: "Variable" + actiongroups: + - name: "CreateCustomVariableActionGroup" + description: "Goes to the Custom Variable creation page. Fills in the Custom Variable details. PLEASE NOTE: The Custom Variable details are Hardcoded using 'customVariable'." + + - name: "DeleteCustomVariableActionGroup" + description: "Goes to the Custom Variable grid page. Deletes the Custom Variable. PLEASE NOTE: The Custom Variable that is deleted is Hardcoded using 'customVariable'." + +- filename: "AdminFillVariableFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AdminFillVariableFormActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AdminFillVariableFormActionGroup" + description: "" + +- filename: "AssertAdminCustomVariableFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AssertAdminCustomVariableFormActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AssertAdminCustomVariableFormActionGroup" + description: "" + +- filename: "AssertAdminCustomVariableInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Variable/Test/Mftf/ActionGroup/AssertAdminCustomVariableInGridActionGroup.xml" + module: "Variable" + actiongroups: + - name: "AssertAdminCustomVariableInGridActionGroup" + description: "" + +- filename: "ConfigWebUrlOptionsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/ConfigWebUrlOptionsActionGroup.xml" + module: "Config" + actiongroups: + - name: "EnableWebUrlOptions" + description: "Goes to the 'Configuration' page for 'Url Options'. Enables 'Add Store Code to Urls'. Clicks on the Save button." + + - name: "ResetWebUrlOptions" + description: "Goes to the 'Configuration' page for 'Url Options'. Disables 'Add Store Code to Urls'. Clicks on the Save button." + +- filename: "AdminConfigCreateNewAccountActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/AdminConfigCreateNewAccountActionGroup.xml" + module: "Config" + actiongroups: + - name: "SetGroupForValidVATIdIntraUnionActionGroup" + description: "Goes to the 'Configuration' page for 'Customer Configuration'. Sets the 'Group For Valid VAT ID Intra Union' option. Clicks on the Save button. Validates the the Save message is present." + +- filename: "SwitcherActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/SwitcherActionGroup.xml" + module: "Config" + actiongroups: + - name: "SwitchToVersion4ActionGroup" + description: "Goes to the 'Configuration' page for 'Content Management'. Sets the 'WYSIWYG Editor' to 'TinyMCE 4'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + +- filename: "GeneralConfigurationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/GeneralConfigurationActionGroup.xml" + module: "Config" + actiongroups: + - name: "NavigateToDefaultLayoutsSetting" + description: "Goes to the 'Configuration' page for 'Web'. Expands the 'Default Layouts' section." + + - name: "NavigateToConfigurationGeneralPage" + description: "Goes to the 'Configuration' page for 'General'." + + - name: "SelectTopDestinationsCountry" + description: "Selects the provided Countries under 'Top destinations' on the 'General' section of the 'Configuration' page. Clicks on the Save button." + + - name: "UnSelectTopDestinationsCountry" + description: "Un-selects the provided Countries under 'Top destinations' on the 'General' section of the 'Configuration' page. Clicks on the Save button." + + - name: "SelectCountriesWithRequiredRegion" + description: "Goes to the 'Configuration' page for 'General'. Selects the provided Countries under 'State is Required for'. Clicks on the Save button." + +- filename: "ConfigWYSIWYGActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/ConfigWYSIWYGActionGroup.xml" + module: "Config" + actiongroups: + - name: "EnabledWYSIWYG" + description: "Enables the WYSIWYG Editor via the CLI." + + - name: "SwitchToTinyMCE3" + description: "Goes to the 'Configuration' page for 'Content Management'. Sets 'WYSIWYG Editor' to 'TinyMCE 3'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + + - name: "DisabledWYSIWYG" + description: "Disables the WYSIWYG Editor via the CLI." + + - name: "UseStaticURLForMediaContentInWYSIWYG" + description: "Goes to the 'Configuration' page for 'Content Management'. Sets 'Use Static URLs for Media Content in WYSIWYG' to the provided value. Clicks on the Save button." + + - name: "EnabledWYSIWYGEditor" + description: "Goes to the 'Configuration' page for 'Content Management'. Sets 'Enable WYSIWYG Editor' to 'Enabled by Default'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + +- filename: "RestoreLayoutSettingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/RestoreLayoutSettingActionGroup.xml" + module: "Config" + actiongroups: + - name: "RestoreLayoutSetting" + description: "Goes to the 'Configuration' page for 'Web'. Clicks on the Save button." + +- filename: "AdminSaveConfigActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/AdminSaveConfigActionGroup.xml" + module: "Config" + actiongroups: + - name: "AdminSaveConfigActionGroup" + description: "" + +- filename: "ConfigSalesTaxClassActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/ConfigSalesTaxClassActionGroup.xml" + module: "Config" + actiongroups: + - name: "SetTaxClassForShipping" + description: "Goes to the 'Configuration' page for 'Tax'. Sets 'Tax Class for Shipping' to 'Taxable Goods'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + + - name: "ResetTaxClassForShipping" + description: "Goes to the 'Configuration' page for 'Tax'. Sets 'Tax Class for Shipping' to 'None'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + + - name: "SetTaxApplyOnSetting" + description: "Goes to the 'Configuration' page for 'Tax'. Sets 'Apply Tax On' to the provided value. Clicks on the Save button" + + - name: "DisableTaxApplyOnOriginalPrice" + description: "Goes to the 'Configuration' page for 'Tax'. Sets 'Apply Tax On' to the provided value. Clicks on the Save button." + +- filename: "ConfigAdminCatalogSearchActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/ConfigAdminCatalogSearchActionGroup.xml" + module: "Config" + actiongroups: + - name: "ChooseElasticSearchAsSearchEngine" + description: "Goes to the 'Configuration' page for 'Catalog'. Sets the 'Search Engine' to 'elasticsearch5'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + + - name: "ResetSearchEngineConfiguration" + description: "Goes to the 'Configuration' page for 'Catalog'. Sets the 'Search Engine' to 'mysql'. Clicks on the Save button. PLEASE NOTE: The value is Hardcoded." + +- filename: "ConfigAdminAccountSharingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Config/Test/Mftf/ActionGroup/ConfigAdminAccountSharingActionGroup.xml" + module: "Config" + actiongroups: + - name: "ConfigAdminAccountSharingActionGroup" + description: "Goes to the 'Configuration' page for 'Admin'. Enables 'Admin Account Sharing'. Clicks on the Save button." + + - name: "EnableAdminAccountSharingActionGroup" + description: "Enabled 'Admin Account Sharing' via the API." + + - name: "DisableAdminAccountSharingActionGroup" + description: "Disables 'Admin Account Sharing' via the API." + +- filename: "AdminFillIntegrationFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Integration/Test/Mftf/ActionGroup/AdminFillIntegrationFormActionGroup.xml" + module: "Integration" + actiongroups: + - name: "AdminFillIntegrationFormActionGroup" + description: "" + +- filename: "AdminOpenNewIntegrationPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Integration/Test/Mftf/ActionGroup/AdminOpenNewIntegrationPageActionGroup.xml" + module: "Integration" + actiongroups: + - name: "AdminOpenNewIntegrationPageActionGroup" + description: "" + +- filename: "AdminSaveIntegrationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Integration/Test/Mftf/ActionGroup/AdminSaveIntegrationActionGroup.xml" + module: "Integration" + actiongroups: + - name: "AdminClickSaveButtonIntegrationFormActionGroup" + description: "" + +- filename: "ApplyCouponOnPaymentPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Payment/Test/Mftf/ActionGroup/ApplyCouponOnPaymentPageActionGroup.xml" + module: "Payment" + actiongroups: + - name: "ApplyCouponOnPaymentPageActionGroup" + description: "Adds the provided Coupon Code on the Storefront Shopping Cart page. Validates that the Discount Verification Message is present and correct." + +- filename: "AdminSetBaseCurrencyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CurrencySymbol/Test/Mftf/ActionGroup/AdminSetBaseCurrencyActionGroup.xml" + module: "CurrencySymbol" + actiongroups: + - name: "AdminSetBaseCurrencyActionGroup" + description: "" + +- filename: "AdminCatalogSearchTermActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogSearch/Test/Mftf/ActionGroup/AdminCatalogSearchTermActionGroup.xml" + module: "CatalogSearch" + actiongroups: + - name: "AssertSearchTermSaveSuccessMessage" + description: "Goes to the Catalog Search Term grid page. Adds the provided Search Term. Validates that the Success Message is present and correct." + + - name: "AssertSearchTermSuccessDeleteMessage" + description: "Goes to the Catalog Search Term grid page. Deletes the provided Search Term. Validates that the Success Message is present and correct." + + - name: "AssertSearchTermNotInGrid" + description: "Goes to the Catalog Search Term grid page. Searches for the provided Search Term. Validates that it is NOT present in the grid." + +- filename: "AdminSetMinimalQueryLengthActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogSearch/Test/Mftf/ActionGroup/AdminSetMinimalQueryLengthActionGroup.xml" + module: "CatalogSearch" + actiongroups: + - name: "SetMinimalQueryLengthActionGroup" + description: "Goes to the 'Configuration' page for 'Catalog'. Sets the Minimal Query Length. CLicks on the Save button." + +- filename: "StorefrontCatalogSearchTermActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogSearch/Test/Mftf/ActionGroup/StorefrontCatalogSearchTermActionGroup.xml" + module: "CatalogSearch" + actiongroups: + - name: "AssertSearchTermNotOnFrontend" + description: "Goes to the Storefront. Fills the Search field with the provided Search Query. Clicks on Search. Validates that there are no results." + + - name: "AssertSearchTermOnFrontend" + description: "Fills the Storefront Search field with the provided Search Query. Clicks on Search. Validates that the URL is correct." + +- filename: "StorefrontCatalogSearchActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogSearch/Test/Mftf/ActionGroup/StorefrontCatalogSearchActionGroup.xml" + module: "CatalogSearch" + actiongroups: + - name: "StorefrontCheckQuickSearchActionGroup" + description: "Submits Form POST for the Storefront Search feature. Validates that the URL is correct. Validates that the Title is present and correct." + + - name: "StorefrontCheckQuickSearchStringActionGroup" + description: "Fill the Storefront Search field. Submits the Form. Validates that the provided Search Phrase is present and correct." + + - name: "StorefrontOpenProductFromQuickSearch" + description: "Clicks on the provided Product Name from the Storefront Quick Search Results page." + + - name: "StorefrontAddToCartFromQuickSearch" + description: "Adds the provided Product Name to the Shopping Cart from the Storefront Quick Search Results page. Validates that the Success Message is present and correct." + + - name: "StorefrontQuickSearchCheckProductNameInGrid" + description: "Validates that the provided Product Name appears at the correct index on the Storefront Quick Search page." + + - name: "StorefrontQuickSearchSeeProductByName" + description: "" + + - name: "StorefrontQuickSearchCheckProductNameNotInGrid" + description: "Validates that the provided Product Name does NOT appear on the Storefront Quick Search page." + + - name: "StorefrontOpenAdvancedSearchActionGroup" + description: "Clicks on 'Advanced Search' in the Storefront Footer. Validates that the URL and Title are present and correct." + + - name: "StorefrontCheckAdvancedSearchResultActionGroup" + description: "Validates that the URL and Title are present and correct on the Storefront Advanced Search Results page." + + - name: "StorefrontSelectSearchFilterCategoryActionGroup" + description: "Clicks on Category Filter. Clicks on the provided Category." + + - name: "GoToStoreViewAdvancedCatalogSearchActionGroup" + description: "Goes to the Storefront 'Advanced Search' page." + + - name: "StorefrontAdvancedCatalogSearchByProductNameActionGroup" + description: "Fills the Product Name field on the Storefront 'Advanced Search' page. Clicks on the Submit button." + + - name: "StorefrontAdvancedCatalogSearchByProductSkuActionGroup" + description: "Fills the Product SKU field on the Storefront 'Advanced Search' page. Clicks on the Submit button." + + - name: "StorefrontAdvancedCatalogSearchByDescriptionActionGroup" + description: "Fills the Product Description field on the Storefront 'Advanced Search' page. Clicks on the Submit button." + + - name: "StorefrontAdvancedCatalogSearchByShortDescriptionActionGroup" + description: "Fills the Product Short Description field on the Storefront 'Advanced Search' page. Clicks on the Submit button." + + - name: "StorefrontAdvancedCatalogSearchByProductNameAndPriceActionGroup" + description: "Fills the Product Name, Price From and Price To fields on the Storefront 'Advanced Search' page. Clicks on the Submit button." + + - name: "StorefrontAdvancedCatalogSearchByProductNameAndDescriptionActionGroup" + description: "Fills the Product Name and Description fields on the Storefront 'Advanced Search' page. Clicks on the Submit button." + + - name: "StorefrontCheckSearchIsEmpty" + description: "Validates that the 'No Results' message is present and correct on the Storefront Search Results page. PLEASE NOTE: The expected message is Hardcoded." + +- filename: "AdminProductGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductGridActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "resetProductGridToDefaultView" + description: "Sets the Admin Products grid view to the 'Default View'." + + - name: "filterProductGridBySku" + description: "Filters the Admin Products grid by the provided Product (SKU)." + + - name: "filterProductGridBySku2" + description: "Filters the Admin Products grid by the provided Product SKU." + + - name: "filterProductGridByName" + description: "Filters the Admin Products grid by the provided Product (Name)." + + - name: "filterProductGridByName2" + description: "Filters the Admin Products grid by the provided Product Name." + + - name: "filterProductGridBySetNewFromDate" + description: "Filters the Admin Products grid by the New From Data field. PLEASE NOTE: The Start Date is Hardcoded." + + - name: "filterProductGridByPriceRange" + description: "Filters the Admin Products grid by the provided Price Filter." + + - name: "filterProductGridByEnabledStatus" + description: "Filters the Admin Products grid by the 'Enabled' Status. PLEASE NOTE: The Filter is Hardcoded." + + - name: "filterProductGridByDisabledStatus" + description: "Filters the Admin Products grid by the 'Disabled' Status. PLEASE NOTE: The Filter is Hardcoded." + + - name: "searchProductGridByKeyword" + description: "Searches the Admin Products grid for the provided Keyword." + + - name: "searchProductGridByKeyword2" + description: "Searches the Admin Products grid for the provided Keyword." + + - name: "viewProductInAdminGrid" + description: "Filters the Admin Products grid by the provided Product (Name, SKU and Type)." + + - name: "filterProductGridBySkuAndName" + description: "Filters the Admin Products grid by the provided Product (Name and SKU)." + + - name: "deleteProductUsingProductGrid" + description: "Deletes the provided Product from the Admin Products grid page." + + - name: "deleteAllDuplicateProductUsingProductGrid" + description: "EXTENDS: deleteProductUsingProductGrid. Removes 'seeProductSkuInGrid'." + + - name: "deleteProductBySku" + description: "Goes to the Admin Products grid page. Deletes the provided Product SKU." + + - name: "deleteProductByName" + description: "EXTENDS: deleteProductBySku. Deletes the provided Product Name." + + - name: "openProducForEditByClickingRowXColumnYInProductGrid" + description: "Clicks on the 'Edit' button in the Admin Products grid by the provided Grid coordinates (X, Y)." + + - name: "sortProductsByIdDescending" + description: "Filters the ID column in Descending Order." + + - name: "sortProductsByIdAscending" + description: "Filters the ID column in Ascending Order." + + - name: "ChangeStatusProductUsingProductGridActionGroup" + description: "Goes to the Admin Products grid page. Changes the Product Status to the provided Status. Validates that the Success Message is present and correct." + + - name: "NavigateToAndResetProductGridToDefaultView" + description: "EXTENDS: resetProductGridToDefaultView. Adds an action to go to the Admin Products grid page." + + - name: "NavigateToAndResetProductAttributeGridToDefaultView" + description: "Goes to the Product Attributes grid. Clicks on 'Clear Filters'." + + - name: "filterAndSelectProduct" + description: "Goes to the Admin Products grid. Filters the Product grid by the provided Product SKU." + + - name: "deleteProductsIfTheyExist" + description: "Deletes all Products in the Admin Products grid." + +- filename: "DeleteProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/DeleteProductActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "DeleteProductActionGroup" + description: "Deletes the provided Product Name from the Product grid page." + +- filename: "AssertDontSeeProductDetailsOnStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertDontSeeProductDetailsOnStorefrontActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertDontSeeProductDetailsOnStorefrontActionGroup" + description: "Validates that the provided Product Info does NOT appear in the Product Number on a Storefront Category page." + +- filename: "StorefrontAssertProductNameOnProductMainPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductNameOnProductMainPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductNameOnProductMainPageActionGroup" + description: "Validates that the provided Product Name is present and correct on a Storefront Category page." + +- filename: "CustomOptionsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CustomOptionsActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "CreateCustomRadioOptions" + description: "Adds a custom Radio Product Option with 3 Radio Options to a Product based on the provided Options." + + - name: "AddProductCustomOptionFile" + description: "Add a custom File Product Option to a Product based on the provided File." + + - name: "AddProductCustomOptionField" + description: "Add a custom Field Product Option to a Product based on the provided Option." + + - name: "importProductCustomizableOptions" + description: "Import custom Product Options for the provided Product Name." + + - name: "resetImportOptionFilter" + description: "Click on the Reset Filters button for the Import Options filters on the Product grid page." + + - name: "checkCustomizableOptionImport" + description: "Validate that the Custom Product Option Import value is present and correct." + + - name: "AdminDeleteAllProductCustomOptions" + description: "" + + - name: "AdminAssertProductHasNoCustomOptions" + description: "" + + - name: "AdminAssertProductHasNoCustomOption" + description: "" + + - name: "AdminAssertProductCustomOptionVisible" + description: "" + + - name: "AdminDeleteProductCustomOption" + description: "" + +- filename: "StorefrontCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontCategoryActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "GoToStorefrontCategoryPageByParameters" + description: "Goes to the Storefront Category page using URI Search Parameters." + + - name: "VerifyCategoryPageParameters" + description: "Validate that the Category Page parameters are present and correct." + + - name: "StorefrontCheckCategoryActionGroup" + description: "Validate that the Storefront Category is present and correct." + + - name: "StorefrontCheckCategorySimpleProduct" + description: "Validate that the provided Simple Product is present and correct on a Category page." + + - name: "StorefrontCheckAddToCartButtonAbsence" + description: "" + + - name: "StorefrontSwitchCategoryViewToListMode" + description: "Switch the Storefront Category view to List." + + - name: "GoToSubCategoryPage" + description: "Goes to the Storefront page. Open the Parent Category menu in the Top Nav Menu. Click on a Subcategory. Validate that the Subcategory is present and correct." + +- filename: "AssertProductInStorefrontProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertProductInStorefrontProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertProductInStorefrontProductPage" + description: "Goes to the Storefront page. Validates that the provided Product details are present." + + - name: "AssertProductNameAndSkuInStorefrontProductPage" + description: "Goes to the Storefront Product page for the provided Product. Validates that the Product details are present and correct." + + - name: "AssertProductNameAndSkuInStorefrontProductPageByCustomAttributeUrlKey" + description: "Goes to the Storefront Product page for the provided Product. Validates that the Product details are present and correct." + +- filename: "AssertProductInStorefrontCategoryPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertProductInStorefrontCategoryPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertProductInStorefrontCategoryPage" + description: "Goes to Storefront Category page for the provided Category. Validates that the Product details are present and correct." + +- filename: "OpenStoreFrontProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/OpenStoreFrontProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "OpenStoreFrontProductPageActionGroup" + description: "" + +- filename: "AddProductToCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddProductToCartActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AddSimpleProductToCart" + description: "Navigates to the Storefront Product page. Then adds the Product to the Cart. Validates that the Success Message is present and correct." + + - name: "StorefrontAddSimpleProductWithQtyActionGroup" + description: "" + +- filename: "AdminAddTitleAndPriceValueToCustomOptionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAddTitleAndPriceValueToCustomOptionActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAddTitleAndPriceValueToCustomOptionActionGroup" + description: "Clicks on 'Add Option'. Fills in the provided Custom Option Title/Type on the Admin Product creation/edit page under the 'Customizable Options' section." + +- filename: "StorefrontOpenProductPageUsingStoreCodeInUrlActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontOpenProductPageUsingStoreCodeInUrlActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontOpenProductPageUsingStoreCodeInUrlActionGroup" + description: "" + +- filename: "AdminOpenAttributeSetGridPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminOpenAttributeSetGridPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminOpenAttributeSetGridPageActionGroup" + description: "" + +- filename: "AssertSubTotalOnStorefrontMinicartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertSubTotalOnStorefrontMinicartActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertSubTotalOnStorefrontMiniCartActionGroup" + description: "Validates that the provided Sub Total is present in the Storefront Mini Shopping Cart." + +- filename: "AdminSetProductDesignSettingsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminSetProductDesignSettingsActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminSetProductDesignSettingsActionGroup" + description: "" + +- filename: "AdminCreateRootCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminCreateRootCategoryActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminCreateRootCategory" + description: "Requires navigation to Category creation. Adds a new root category and asserts on creation." + +- filename: "StorefrontSelectCustomOptionDropDownAndAssertPricesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontSelectCustomOptionDropDownAndAssertPricesActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontSelectCustomOptionDropDownAndAssertPricesActionGroup" + description: "EXTENDS: AssertStorefrontProductPricesActionGroup. Selects the provided Custom Product Option on a Storefront Product page." + +- filename: "AdminUnassignProductInWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminUnassignProductInWebsiteActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminUnassignProductInWebsiteActionGroup" + description: "" + +- filename: "AdminAddAdvancedPricingToTheProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAddAdvancedPricingToTheProductActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAddAdvancedPricingToTheProductActionGroup" + description: "Clicks 'Advanced Pricing' on the Admin Product creation/edit page. Fills in the provided Group Price at the provided Index for CE/EE. Clicks on Done." + + - name: "AdminAddAdvancedPricingToTheProductExtendedActionGroup" + description: "EXTENDS: AdminAddAdvancedPricingToTheProductActionGroup. Removes 'selectProductTierPriceCustomerGroupInput'. Selects the provided Group Price at the provided Index for B2B." + +- filename: "AssertStorefrontProductPricesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertStorefrontProductPricesActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertStorefrontProductPricesActionGroup" + description: "Validates that the provided Product Price and Final Product Price are present on the Storefront Product page." + +- filename: "StorefrontAssertProductSpecialPriceOnProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductSpecialPriceOnProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductSpecialPriceOnProductPageActionGroup" + description: "Goes to the provided Storefront Product page. Validates that the provided Special Price is present and correct." + +- filename: "StorefrontOpenProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontOpenProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontOpenProductPageActionGroup" + description: "Goes to the Storefront Product page for the provided Product URL." + +- filename: "AssertErrorMessageAfterDeletingWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertErrorMessageAfterDeletingWebsiteActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertErrorMessageAfterDeletingWebsiteActionGroup" + description: "Goes to the Admin Products grid page. Clicks on Ok. Validates that the provided Error Message is present and correct." + +- filename: "AdminCreateCustomDropDownOptionsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminCreateCustomDropDownOptionsActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminCreateCustomDropDownOptionsActionGroup" + description: "Clicks on 'Add Option'. Adds the 2 provided Options under the provided Custom Option Name to a Product on the Admin Product creation/edit page under the 'Customizable Options' section." + +- filename: "AssertProductOnAdminGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertProductOnAdminGridActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertProductOnAdminGridActionGroup" + description: "EXTENDS: viewProductInAdminGrid. Removes the 'clickClearFiltersAfter' step from the Action Group." + +- filename: "AdminAddProductCustomOptionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAddProductCustomOptionActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAddProductCustomOptionActionGroup" + description: "Adds the provided Custom Option Title/Type to a Product on the Admin Product creation/edit page under the 'Customizable Options' section." + +- filename: "AdminAddMinimumAdvertisedPriceActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAddMinimumAdvertisedPriceActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAddMinimumAdvertisedPriceActionGroup" + description: "Clicks 'Advanced Pricing' on the Admin Product creation/edit page. Fills in the provided MSRP details. Clicks on Done." + +- filename: "StorefrontNavigateCategoryPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontNavigateCategoryPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontNavigateCategoryPageActionGroup" + description: "" + +- filename: "SearchForProductOnBackendActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/SearchForProductOnBackendActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "SearchForProductOnBackendActionGroup" + description: "Goto the Product grid page. Search for the provided Product." + + - name: "SearchForProductOnBackendByNameActionGroup" + description: "Search for the provided Product Name." + + - name: "ClearProductsFilterActionGroup" + description: "Goto the Product grid page. Clear the Search Filters for the grid." + +- filename: "AdminSubmitAdvancedInventoryFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminSubmitAdvancedInventoryFormActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminSubmitAdvancedInventoryFormActionGroup" + description: "Clicks on Done on the Admin Product creation/edit page on the 'Advanced Inventory' panel." + +- filename: "StorefrontOpenHomePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontOpenHomePageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontOpenHomePageActionGroup" + description: "Goes to the Storefront Homepage." + +- filename: "AdminUnassignCategoryOnProductAndSaveActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminUnassignCategoryOnProductAndSaveActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminUnassignCategoryOnProductAndSaveActionGroup" + description: "" + +- filename: "OpenProductFromCategoryPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/OpenProductFromCategoryPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "OpenProductFromCategoryPageActionGroup" + description: "Goto the provided Category page. Click on the provided Product page." + +- filename: "StorefrontProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontProductActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontCheckSimpleProduct" + description: "Validates that the provided Simple Product information is present and correct." + + - name: "assertProductImageStorefrontProductPage" + description: "Validates that the provided Product Image is present." + + - name: "assertProductImageStorefrontProductPage2" + description: "Validates that the provided Product Image is present." + + - name: "assertProductImageNotInStorefrontProductPage" + description: "Validates that the provided Product Image is not present." + + - name: "assertProductImageNotInStorefrontProductPage2" + description: "Validates that the provided Product Image is not present." + +- filename: "AdminCreateWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminCreateWidgetActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminCreateRecentlyProductsWidgetActionGroup" + description: "EXTENDS: AdminCreateWidgetActionGroup. Adds Product Attributes/Buttons to a Widget. Clicks on the Save button." + +- filename: "AdminProductAttributeSetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeSetActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssignAttributeToGroup" + description: "Assign the provided Attribute to an Attribute Set from the Attribute Sets creation/edit page." + + - name: "UnassignAttributeFromGroup" + description: "Unassign the provided Attribute from an Attribute Set from the Attribute Sets creation/edit page." + + - name: "SaveAttributeSet" + description: "Save an Attribute Set on the Attribute Set creation/edit page." + + - name: "CreateDefaultAttributeSet" + description: "Goes to the Attribute Sets grid page. Clicks on Add. Fill Name. Clicks on Save." + + - name: "goToAttributeGridPage" + description: "Goes to the Attribute Sets grid page." + + - name: "goToAttributeSetByName" + description: "Searches for the provided Attribute Sets Name. Clicks on the 1st row." + + - name: "filterProductAttributeByAttributeLabel" + description: "Searches the Attribute Sets grid page for the provided Attribute Set Name." + + - name: "FilterProductAttributeSetGridByAttributeSetName" + description: "Filters the Attribute Sets grid page for the provided Attribute Set Name." + + - name: "deleteAttributeSetByLabel" + description: "Deletes the provided Attribute Set Name from the Attribute Sets grid page." + +- filename: "CreateNewProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CreateNewProductActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "CreateNewProductActionGroup" + description: "Goes to the Product creation/edit page. Fills in Product Name, Price and Quantity. Then Saves the work." + +- filename: "OpenStorefrontProductPageByProductNameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/OpenStorefrontProductPageByProductNameActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "OpenStorefrontProductPageByProductNameActionGroup" + description: "" + +- filename: "AdminOpenNewProductFormPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminOpenNewProductFormPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminOpenNewProductFormPageActionGroup" + description: "Goes to the Product creation/edit page for the provided Product Type and Attribute Set ID." + +- filename: "AssertProductDetailsOnStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertProductDetailsOnStorefrontActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertProductDetailsOnStorefrontActionGroup" + description: "Validates that the provided Product Info does NOT appear in the Product Number on a Storefront Category page." + +- filename: "RestoreLayoutSettingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/RestoreLayoutSettingActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "RestoreLayoutSetting" + description: "Goes to the 'Configuration' page for 'Web'. Selects 'No layout updates' for the Default Product/Category Layouts." + +- filename: "AdminProductAttributeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "navigateToCreatedProductAttribute" + description: "Goes to the Product Attributes grid page. Filters the grid based on the provided Product Attribute. Clicks on the 1st row." + + - name: "navigateToEditProductAttribute" + description: "Goes to the Product Attributes grid page. Filters the grid based on the provided Product Attribute. Clicks on the 1st row." + + - name: "AdminCreateAttributeFromProductPage" + description: "From the Product creation/edit page, under 'Configurations', Clicks on 'Create Configurations'. Clicks on 'Create New Attribute'. Fills Label. Selects Type. Clicks on Save." + + - name: "AdminCreateAttributeFromProductPageWithScope" + description: "" + + - name: "AdminCreateAttributeWithValueWithTwoStoreViesFromProductPage" + description: "EXTENDS: AdminCreateAttributeFromProductPage. Adds the 2 provided Store Views to a Product. Clicks on Save." + + - name: "AdminProductPageCreateAttributeSetWithAttribute" + description: "Adds the provided Product Attribute Set to a Product on the Product creation/edit page." + + - name: "AdminCreateAttributeWithSearchWeight" + description: "EXTENDS: AdminProductPageCreateAttributeSetWithAttribute. Sets the provided Search Weight and Default Values." + + - name: "AdminProductPageSelectAttributeSet" + description: "Selects the provided Attribute Set from the Admin Product creation/edit page." + + - name: "AdminProductPageFillTextAttributeValueByName" + description: "Fills in the Attribute Name field with the provided value." + + - name: "changeUseForPromoRuleConditionsProductAttribute" + description: "Select the provided value for the 'Use for Promo Rule Conditions' dropdown menu. Clicks on Save. Validates that the Save message is present." + + - name: "deleteProductAttribute" + description: "EXTENDS: navigateToCreatedProductAttribute. Deletes the Product Attribute. Validates that the success message is present." + + - name: "deleteProductAttributeByLabel" + description: "Goes to the Admin Product Attributes grid page. Filters the grid for the provided Product Attribute (Label). Deletes the Product Attribute from the grid. Validates that the Success Message is present." + + - name: "deleteProductAttributeByAttributeCode" + description: "Goes to the Admin Product Attributes grid page. Filters the grid for the provided Product Attribute Code. Deletes the Product Attribute from the grid. Validates that the Success Message is present." + + - name: "filterProductAttributeByAttributeCode" + description: "Filters the Product Attributes grid by the provided Product Attribute Code." + + - name: "filterProductAttributeByDefaultLabel" + description: "Filters the Product Attributes grid by the provided Product Attribute Label." + + - name: "saveProductAttribute" + description: "Clicks on Save. Validates that the Success Message is present." + + - name: "confirmChangeInputTypeModal" + description: "Clicks on the Confirm button for the 'Product Data My Be Lost' modal." + + - name: "saveProductAttributeInUse" + description: "Clicks on Save. Validates that the Success Message is present." + + - name: "addProductAttributeInProductModal" + description: "Adds the provided Attribute Code to the Product on the Admin Product creation/edit page." + + - name: "createProductAttribute" + description: "Clicks on 'Add New Attribute'. Fills in the Attribute Details (Label, Input Type and Value Required). Clicks on Save." + + - name: "createProductAttributeWithTextField" + description: "EXTENDS: createProductAttribute. Fills in the Attribute Code and Default Value (Attribute Type: Text Field)." + + - name: "createProductAttributeWithDateField" + description: "EXTENDS: createProductAttribute. Fills in the Attribute Code and Default Value (Attribute Type: Date Field)." + + - name: "createAttributeDropdownNthOption" + description: "Creates an Option for a Product Attribute (Attribute Type: Dropdown)." + + - name: "createAttributeDropdownNthOptionAsDefault" + description: "EXTENDS: createAttributeDropdownNthOption. Checks the 'Is Default' option." + +- filename: "AdminProductAttributeMassUpdateActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeMassUpdateActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminUpdateProductNameAndDescriptionAttributes" + description: "" + +- filename: "StorefrontAddProductToCartWithQtyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAddProductToCartWithQtyActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAddProductToCartWithQtyActionGroup" + description: "Fills in the provided Product Quantity. Clicks on Add To Cart. Validates that the Success Message is present." + +- filename: "SearchAndMultiselectActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/SearchAndMultiselectActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "searchAndMultiSelectActionGroup" + description: "Search for and select multiple items in the Magento dropdown UI component." + +- filename: "AdminCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminCategoryActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "CreateCategory" + description: "Requires navigation to the Category creation page. Adds a new Subcategory. Validates that the Category was created." + + - name: "goToCreateCategoryPage" + description: "Goes to the Category grid page. Clicks the Add Subcategory button." + + - name: "goToAdminCategoryPageById" + description: "Goes to the Category edit page for a specified Category ID." + + - name: "fillCategoryForm" + description: "Requires navigation to the Subcategory creation/edit page. Fills the Subcategory Name. Fills the Search Engine Optimization." + + - name: "saveCategoryForm" + description: "Requires navigation to the Category creation/edit page. Checks that the url contains the AdminCategoryPage url. Saves the Category." + + - name: "addCategoryImage" + description: "Requires navigation to the Category creation/edit page. Adds the provided image to a Category. Validates that the Image exists." + + - name: "removeCategoryImage" + description: "Requires navigation to the Category creation/edit page. Removes the current Category image. Validates that the Image does not exist." + + - name: "checkCategoryImageInAdmin" + description: "Requires navigation to the Category creation/edit page. Click on the Upload button. Validates that the Image exists." + + - name: "navigateToMediaGallery" + description: "Navigates to the category page and Opens the Media Gallery." + + - name: "CheckCategoryOnStorefront" + description: "Navigates to the category page on the storefront and asserts that the title is correct for page and browser." + + - name: "DeleteCategory" + description: "Navigates to the category page and deletes the specified category." + + - name: "FillNewProductCategory" + description: "Actions to fill out a new category from the product page with specified category and parent category names." + + - name: "DeleteMostRecentCategory" + description: "Actions to delete the category last made (the last category on the list)." + + - name: "CategoryPresent" + description: "Navigates to category page, asserts category is there. Navigates to storefront category page and asserts category is there. This action group will not work categories where name does NOT equal SEO." + + - name: "CheckCategoryNameIsRequiredField" + description: "Navigates to category page, attempts to add subcategory without name. Expects required field prompt." + + - name: "switchCategoryStoreView" + description: "Navigates to category page, selects a category and changes store view to specified store." + + - name: "switchCategoryToAllStoreView" + description: "Navigates to category page, selects a category and changes store view to all stores." + + - name: "navigateToCreatedCategory" + description: "Navigates to category page, selects a category by specified category." + + - name: "ChangeSeoUrlKey" + description: "Requires navigation to category creation/edit. Updates the Search Engine Optimization." + + - name: "ChangeSeoUrlKeyForSubCategory" + description: "Requires navigation to subcategory creation/edit. Updates the Search Engine Optimization." + + - name: "OpenCategoryFromCategoryTree" + description: "Navigates to category page, selects a category by specified category. Replicates actionGroup:navigateToCreatedCategory." + + - name: "AdminAssignProductToCategory" + description: "Navigates to existing product page. Changes the category and saves the product." + + - name: "FillCategoryNameAndUrlKeyAndSave" + description: "Requires navigation to subcategory creation/edit. Fills the name, and sets the Search Engine Optimization for the category." + +- filename: "AssertAttributeDeletionErrorMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertAttributeDeletionErrorMessageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertAttributeDeletionErrorMessageActionGroup" + description: "Validates that the Error Message is present and correct on the Backend Admin Attribute Sets creation/edit page when you try to delete an Attribute Set assigned to a Configurable Product. PLEASE NOTE: The Error Message is hardcoded." + +- filename: "AssertStorefrontCustomProductAttributeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertStorefrontCustomProductAttributeActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertStorefrontCustomProductAttributeActionGroup" + description: "" + +- filename: "StorefrontCheckProductIsMissingInCategoryProductsPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontCheckProductIsMissingInCategoryProductsPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontCheckProductIsMissingInCategoryProductsPageActionGroup" + description: "" + + - name: "StorefrontCheckProductPositionActionGroup" + description: "" + +- filename: "DeleteProductAttributeByAttributeCodeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/DeleteProductAttributeByAttributeCodeActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "DeleteProductAttributeByAttributeCodeActionGroup" + description: "Delete a Product Attribute from the Product Attribute creation/edit page." + +- filename: "AssertProductAttributePresenceInCatalogProductGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertProductAttributePresenceInCatalogProductGridActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertProductAttributePresenceInCatalogProductGridActionGroup" + description: "Validates that the provided Attributes Sets is present on the Backend Attribute Sets grid." + +- filename: "AdminProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "goToCreateProductPage" + description: "Clicks on the 'Add Product' toggle on the Admin Products grid page. Clicks on the provided Product (Type)." + + - name: "goToProductPageViaID" + description: "Goes to the Product edit page for the provided Product ID." + + - name: "fillMainProductForm" + description: "Fills in the provided Product details (Name, SKU, Price, Quantity, Stock Status, Weight Type and Weight) on the Admin Products creation/edit page." + + - name: "FillMainProductFormByString" + description: "Fills in the provided Product Name, SKU, Price, Quantity, Stock Status and Weight on the Admin Products creation/edit page." + + - name: "fillMainProductFormNoWeight" + description: "Fills in the provided Product details (Name, SKU, Price, Quantity, Stock Status and Weight Type) on the Admin Products creation/edit page." + + - name: "fillProductNameAndSkuInProductForm" + description: "Fills in the provided Product details (Name and SKU) on the Admin Products creation and edit page." + + - name: "checkRequiredFieldsInProductForm" + description: "Validates that the 'Required Field' error message is present and correct for the Product Name, SKU and Price fields." + + - name: "saveProductForm" + description: "Clicks on the Save button. Validates that the Success Message is present and correct." + + - name: "toggleProductEnabled" + description: "Clicks on the Enable Product toggle." + + - name: "SaveProductFormNoSuccessCheck" + description: "EXTENDS: saveProductForm. Removes 'seeSaveConfirmation'." + + - name: "addProductImage" + description: "Adds the provided Product Image on the Admin Products creation/edit page." + + - name: "removeProductImage" + description: "Removes a Product Image on the Admin Products creation/edit page." + + - name: "assertProductImageAdminProductPage" + description: "Validates that the provided Product Image is present and correct." + + - name: "assertProductImageNotInAdminProductPage" + description: "Validates that the provided Product Image is NOT present." + + - name: "FillAdminSimpleProductForm" + description: "Goes to the Admin Product grid page. Clicks on Add. Fills the provided Product details (Name, SKU, Price, Quantity, Category and URL). Clicks on Save. Validates that the Product details are present and correct." + + - name: "AdminCreateSimpleProductWithTextOptionCharLimit" + description: "Goes to the Admin Product grid page. Clicks on Add. Fills the provided Product details (Name, SKU, Price, Quantity, Category and URL). Adds a Text Product Option with the provided Char Limits. Clicks on Save. Validates that the Product details are present and correct." + + - name: "ProductSetWebsite" + description: "Sets the provided Website on the Admin Product creation/edit page." + + - name: "ProductSetAdvancedPricing" + description: "Sets the provided Advanced Pricing on the Admin Product creation/edit page." + + - name: "ProductSetAdvancedTierFixedPricing" + description: "" + + - name: "AssertTextInAdminProductRelatedUpSellCrossSellSection" + description: "Validates that provided Text appears in the provided Element on the Admin Product creation/edit page under 'Related Products, Up-Sells, and Cross-Sells' section." + + - name: "addRelatedProductBySku" + description: "Adds the provided Product SKU as a Related Product on the Admin Product creation/edit page." + + - name: "addCrossSellProductBySku" + description: "Adds the provided Product SKU as a Cross Sell Product on the Admin Product creation/edit page." + + - name: "AddSpecialPriceToProductActionGroup" + description: "Sets the provided Special Price on the Admin Product creation/edit page." + + - name: "SelectProductInWebsitesActionGroup" + description: "Sets the provided Website on the Admin Product creation/edit page." + + - name: "AdminProductAddSpecialPrice" + description: "Sets the provided Special Price on the Admin Product creation/edit page. Clicks on Save." + + - name: "SwitchToTheNewStoreView" + description: "Switches the New Store View." + + - name: "createSimpleProductAndAddToWebsite" + description: "Goes to the Admin Product grid page. Clicks on Add Product. Fills the provided Product Details (Name, SKU, Price, Quantity and Website). Clicks on Save." + + - name: "CreatedProductConnectToWebsite" + description: "Clicks on 'Edit' for the provided Product. Clicks on the provided Website. Clicks on Save." + + - name: "AdminProcessProductWebsitesActionGroup" + description: "" + + - name: "AssertDiscountsPercentageOfProducts" + description: "Validates that the provided Product Tier Price is present and correct." + + - name: "GoToSpecifiedCreateProductPage" + description: "Goes to the Admin Product grid page. Clicks on the Add Product toggle. Clicks on the provided Product Type." + + - name: "GoToProductCatalogPage" + description: "Goes to the Admin Products grid page." + + - name: "SetProductUrlKey" + description: "Fills the Product details (URL) for the SEO section." + + - name: "SetProductUrlKeyByString" + description: "Fills the Product SEO URL Key." + + - name: "SetCategoryByName" + description: "Sets the provided Category Name for a Product on the Product creation/edit page." + + - name: "removeCategoryFromProduct" + description: "" + + - name: "expandAdminProductSection" + description: "Expand the provided Section Selector based on the provided dependant Section Selector." + + - name: "navigateToCreatedProductEditPage" + description: "Goes to the Admin Product grid page. Filters the Product grid based on the provided Product details (SKU). Edits the provided Product. Validates that the Product SKU is present and correct." + + - name: "addUpSellProductBySku" + description: "EXTENDS: addRelatedProductBySku. Add the provided Product as an Up Sell Product." + + - name: "adminProductAdvancedPricingNewCustomerGroupPrice" + description: "" + + - name: "AdminSetProductDisabled" + description: "" + + - name: "AssertWebsiteIsAvailableInProductWebsites" + description: "" + + - name: "AssertWebsiteIsNotAvailableInProductWebsites" + description: "" + + - name: "AssertProductIsAssignedToWebsite" + description: "" + + - name: "AssertProductIsNotAssignedToWebsite" + description: "" + + - name: "AssertProductNameInProductEditForm" + description: "" + + - name: "AssertProductDescriptionInProductEditForm" + description: "" + + - name: "StorefrontAssertActiveProductImage" + description: "" + +- filename: "AdminFillAdvancedInventoryQtyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminFillAdvancedInventoryQtyActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminFillAdvancedInventoryQtyActionGroup" + description: "Fills in the provided Quantity for the 'Qty' option in 'Advanced Inventory' panel on the Admin Product creation/edit page." + +- filename: "AdminFillProductAttributePropertiesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminFillProductAttributePropertiesActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminFillProductAttributePropertiesActionGroup" + description: "" + + - name: "AdminSwitchScopeForProductAttributeActionGroup" + description: "" + +- filename: "AssertProductInfoOnEditPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AssertProductInfoOnEditPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AssertProductInfoOnEditPageActionGroup" + description: "Validate that the provided Product details are correct on the Product creation/edit page." + +- filename: "AdminClickOnAdvancedInventoryLinkActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminClickOnAdvancedInventoryLinkActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminClickOnAdvancedInventoryLinkActionGroup" + description: "Clicks on the 'Advanced Inventory' link on the Admin Product creation/edit page." + +- filename: "StorefrontAssertProductPriceOnProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductPriceOnProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductPriceOnProductPageActionGroup" + description: "Validate that the provided Product Price is present and correct." + +- filename: "AdminSwitchProductGiftMessageStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminSwitchProductGiftMessageStatusActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminSwitchProductGiftMessageStatusActionGroup" + description: "" + +- filename: "StorefrontCheckProductPriceInCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontCheckProductPriceInCategoryActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontCheckProductPriceInCategoryActionGroup" + description: "EXTENDS: StorefrontCheckCategorySimpleProduct. Removes 'AssertProductPrice'. Validates that the provided Product Price is present and correct on a Storefront Product page." + +- filename: "StorefrontAssertProductInWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductInWidgetActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductInRecentlyViewedWidgetActionGroup" + description: "Validate that the provided Product appears in the Recently Viewed Products widget." + + - name: "StorefrontAssertProductInRecentlyComparedWidgetActionGroup" + description: "Validate that the provided Product appears in the Recently Compared Products widget." + + - name: "StorefrontAssertProductInRecentlyOrderedWidgetActionGroup" + description: "Validate that the provided Product appears in the Recently Ordered Products widget." + +- filename: "StorefrontSelectCustomOptionRadioAndAssertPricesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontSelectCustomOptionRadioAndAssertPricesActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontSelectCustomOptionRadioAndAssertPricesActionGroup" + description: "EXTENDS: AssertStorefrontProductPricesActionGroup. Clicks on the provided Custom Option on a Storefront Product page." + +- filename: "StorefrontAssertProductSkuOnProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductSkuOnProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductSkuOnProductPageActionGroup" + description: "Validate that the provided Product Sku is present and correct." + +- filename: "AdminAssignCategoryToProductAndSaveActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAssignCategoryToProductAndSaveActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAssignCategoryToProductAndSaveActionGroup" + description: "" + +- filename: "AdminOpenProductAttributePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminOpenProductAttributePageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminOpenProductAttributePageActionGroup" + description: "" + +- filename: "StorefrontAssertCustomOptionByTitleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertCustomOptionByTitleActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertCustomOptionByTitleActionGroup" + description: "Validates that the provided Product Option Title is present on the Storefront Product page." + +- filename: "AddWebsiteToProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddWebsiteToProductActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AddWebsiteToProductActionGroup" + description: "Adds the provided Website to a Product on the Admin Product creation/edit page. Clicks on Save. Validates that the Success Message is present and correct." + +- filename: "AdminOpenAttributeSetByNameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminOpenAttributeSetByNameActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminOpenAttributeSetByNameActionGroup" + description: "" + +- filename: "AdminFillAdvancedInventoryOutOfStockThresholdActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminFillAdvancedInventoryOutOfStockThresholdActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminFillAdvancedInventoryOutOfStockThresholdActionGroup" + description: "Unchecks 'Use Config Setting' for the 'Minimum Qty Allowed in Shopping Cart' option in 'Advanced Inventory' panel on the Admin Product creation/edit page. Fills in the provided Quantity." + +- filename: "SearchAttributeByCodeOnProductAttributeGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/SearchAttributeByCodeOnProductAttributeGridActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "SearchAttributeByCodeOnProductAttributeGridActionGroup" + description: "Goto the Product Attribute grid page. Search for the provided Product Attribute Code." + +- filename: "StorefrontAssertPageNotFoundErrorOnProductDetailPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertPageNotFoundErrorOnProductDetailPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertPageNotFoundErrorOnProductDetailPageActionGroup" + description: "" + +- filename: "AdminAnchorCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAnchorCategoryActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAnchorCategoryActionGroup" + description: "" + +- filename: "AdminChangeProductSEOSettingsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminChangeProductSEOSettingsActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminChangeProductSEOSettingsActionGroup" + description: "" + +- filename: "CheckItemInLayeredNavigationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CheckItemInLayeredNavigationActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "CheckItemInLayeredNavigationActionGroup" + description: "Expands the Product Filters on a Storefront Category page if it is not expanded." + +- filename: "AdminAssignProductInWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAssignProductInWebsiteActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAssignProductInWebsiteActionGroup" + description: "" + +- filename: "OpenProductAttributeFromSearchResultInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/OpenProductAttributeFromSearchResultInGridActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "OpenProductAttributeFromSearchResultInGridActionGroup" + description: "EXTENDS: SearchAttributeByCodeOnProductAttributeGridActionGroup. Click on Edit for the provided Product Attribute Code." + +- filename: "AdminOpenProductIndexPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminOpenProductIndexPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminOpenProductIndexPageActionGroup" + description: "" + +- filename: "StorefrontProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "addToCartFromStorefrontProductPage" + description: "Click on the Add to Cart button. Validates that the Success Message is present." + + - name: "AddProductWithQtyToCartFromStorefrontProductPage" + description: "EXTENDS: addToCartFromStorefrontProductPage. Fills in the provided Product Quantity for the provided Product Name." + + - name: "testDynamicValidationHint" + description: "Validates that the Product Text Option Text Length Hint displays the correct Count for multiple inputs based on the provided Character Limit." + + - name: "checkAttributeInMoreInformationTab" + description: "Validates that the Product More Information area contains the provided Text." + + - name: "checkAttributeNotInMoreInformationTab" + description: "Validate that the More Information area does not contain the provided Text." + +- filename: "StorefrontCompareActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontCompareActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAddCategoryProductToCompareActionGroup" + description: "Add a Product to the Compare Product list from a Category page." + + - name: "StorefrontAddProductToCompareActionGroup" + description: "Add a Product to the Compare Product list. Validate that the Success Message is present." + + - name: "StorefrontCheckCompareSidebarProductActionGroup" + description: "Validate that the Product Name is present and correct in the Compare Product list." + + - name: "StorefrontOpenAndCheckComparisionActionGroup" + description: "Open the Storefront Compare Product page. Validate that the Compare Product fields are present." + + - name: "StorefrontCheckCompareSimpleProductActionGroup" + description: "Validate that the Simple Product is present and correct in the Compare Product area." + + - name: "StorefrontClearCompareActionGroup" + description: "Clear the Compare Products list. Validate that the Compare Products list is empty." + +- filename: "StorefrontClickAddToCartOnProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontClickAddToCartOnProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontClickAddToCartOnProductPageActionGroup" + description: "Adds a Product to the Cart. Validate that the Success Message is present." + +- filename: "AdminAssertProductsGridIsEmptyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAssertProductsGridIsEmptyActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAssertProductsGridIsEmptyActionGroup" + description: "" + +- filename: "VerifyProductTypeOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/VerifyProductTypeOrderActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "VerifyProductTypeOrder" + description: "Clicks on the 'Add Product' toggle. Validates that the Simple/Virtual Products are listed in the correct order." + +- filename: "MoveCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/MoveCategoryActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "MoveCategoryActionGroup" + description: "Move a Category on the Backend Category page." + +- filename: "StorefrontAssertGiftMessageFieldsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertGiftMessageFieldsActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertGiftMessageFieldsActionGroup" + description: "" + +- filename: "FilterProductInGridByStoreViewAndNameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/FilterProductInGridByStoreViewAndNameActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "FilterProductInGridByStoreViewAndNameActionGroup" + description: "Goes to the Admin Products grid page. Filters the grid based on the provided Store View. Validates that the Product Name is present in the 1st row of the grid." + +- filename: "StorefrontAssertProductNameOnProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductNameOnProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductNameOnProductPageActionGroup" + description: "Validate that the provided Product Price is present and correct." + +- filename: "StorefrontAddProductReviewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAddProductReviewActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAddProductReviewActionGroup" + description: "" + +- filename: "StorefrontAddToCartCustomOptionsProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAddToCartCustomOptionsProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAddToCartCustomOptionsProductPageActionGroup" + description: "Add a Product to the Cart. Validate that the Success Message is present." + +- filename: "AdminAssignImageRolesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminAssignImageRolesActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminAssignImageRolesActionGroup" + description: "Requires the navigation to the Product Creation page. Checks the Base, Small, Thumbnail, and Swatch Roles areas for images." + +- filename: "CheckProductsOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CheckProductsOrderActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "CompareTwoProductsOrder" + description: "Goes to the Storefront. Validates that the 2 provided Products appear in the correct order." + +- filename: "AdminCheckProductsInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminCheckProductsInGridActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "AdminCheckProductIsMissingInCategoryProductsGrid" + description: "" + + - name: "AdminCheckProductPositionInCategoryProductsGrid" + description: "" + +- filename: "StorefrontAssertProductImagesOnProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontAssertProductImagesOnProductPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontAssertProductImagesOnProductPageActionGroup" + description: "Validate that the Product Image is present and correct. Validate that the Fullscreen Product Image is present and correct." + + - name: "StorefrontAssertFotoramaImageAvailablity" + description: "" + +- filename: "StorefrontGoToCategoryPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/StorefrontGoToCategoryPageActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "StorefrontGoToCategoryPageActionGroup" + description: "" + + - name: "StorefrontGoToSubCategoryPageActionGroup" + description: "" + +- filename: "OpenEditProductOnBackendActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Catalog/Test/Mftf/ActionGroup/OpenEditProductOnBackendActionGroup.xml" + module: "Catalog" + actiongroups: + - name: "OpenEditProductOnBackendActionGroup" + description: "Click on Edit for the provided Product SKU." + +- filename: "AdminDeleteTaxRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Tax/Test/Mftf/ActionGroup/AdminDeleteTaxRuleActionGroup.xml" + module: "Tax" + actiongroups: + - name: "AdminDeleteTaxRule" + description: "Goes to the Admin Tax Rule grid page. Deletes the provided Tax Rule Code." + +- filename: "AdminTaxActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Tax/Test/Mftf/ActionGroup/AdminTaxActionGroup.xml" + module: "Tax" + actiongroups: + - name: "editTaxConfigurationByUI" + description: "Goes to the 'Configuration' page for 'Tax'. Enables the display of Taxes in the Storefront Shopping Cart and Checkout page." + + - name: "changeToDefaultTaxConfigurationUI" + description: "Goes to the 'Configuration' page for 'Tax'. Set the Tax Configuration Settings to the Default values. Clicks on Save. Validates that the Success Message is present and correct." + + - name: "addCustomTaxRate" + description: "EXTENDS: addNewTaxRateNoZip. Removes 'fillZipCode' and 'fillRate'. Fills in the Zip Code and Rate. PLEASE NOTE: The values are Hardcoded." + + - name: "addNewTaxRateNoZip" + description: "Goes to the Admin Tax Rules grid page. Adds the provided Tax Code." + + - name: "changeShippingTaxClass" + description: "Goes to the 'Configuration' page for 'Tax'. Sets the 'Tax Class for Shipping' configuration setting to 'Taxable Goods'. Clicks on Save. Validates that the Success Message is present and correct." + + - name: "setDefaultShippingTaxClass" + description: "Goes to the 'Configuration' page via the Admin Side Menu. Sets the 'Tax Class for Shipping' to the System Default. Clicks on Save. Validates that the Success Message is present and correct." + + - name: "addProductTaxClass" + description: "Adds the provided Product Tax Class to a Tax Rule. Clicks on Save." + + - name: "addNewTaxRuleActionGroup" + description: "Goes to the Admin Tax Rules grid page. Clicks on the Add New Tax Rule button." + + - name: "deleteProductTaxClass" + description: "Goes to the Admin Tax Rule creation page. Deletes the provided Tax Class." + +- filename: "AdminCreateTaxRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Tax/Test/Mftf/ActionGroup/AdminCreateTaxRuleActionGroup.xml" + module: "Tax" + actiongroups: + - name: "AdminCreateTaxRuleActionGroup" + description: "" + +- filename: "AdminCustomerTaxClassActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Tax/Test/Mftf/ActionGroup/AdminCustomerTaxClassActionGroup.xml" + module: "Tax" + actiongroups: + - name: "addCustomerTaxClass" + description: "Adds the provided Customer Tax Class on the Admin Tax Rule creation/edit page." + + - name: "deleteCustomerTaxClass" + description: "Goes to the Admin New Tax Rule page. Deletes the provided Tax Class Name." + +- filename: "StorefrontSelectCustomizeAndAddToTheCartButtonActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/StorefrontSelectCustomizeAndAddToTheCartButtonActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "StorefrontSelectCustomizeAndAddToTheCartButtonActionGroup" + description: "Clicks 'Customize and Add to Cart' on a Storefront Bundled Product page." + +- filename: "BundleProductFilterActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/BundleProductFilterActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "BundleProductFilter" + description: "Applies a Backend Admin Grid filter for Bundle Products." + +- filename: "StoreFrontAddProductToCartFromBundleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/StoreFrontAddProductToCartFromBundleActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "StoreFrontAddProductToCartFromBundleWithCurrencyActionGroup" + description: "Adds a Bundled Product to the Cart with a specified Currency Value." + +- filename: "AdminBundleProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/AdminBundleProductActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "fillMainBundleProductForm" + description: "Fills the Name, SKU and Stock Status fields." + + - name: "checkRequiredFieldsInBundleProductForm" + description: "Clears the Name and SKU fields when adding a Product and then verifies that they are required after attempting to Save." + + - name: "viewBundleProductInAdminGrid" + description: "Clears the Grid Filters on the Catalog Grid page and applies Filter by Name and Sku. Then checks to see if the Product exists in the 1st row. Then clears the Grid Filters again for future Tests." + +- filename: "AdminOrderBundleProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/AdminOrderBundleProductActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "AdminOrderConfigureBundleProduct" + description: "" + +- filename: "StorefrontProductCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/StorefrontProductCartActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "StorefrontAddCategoryBundleProductToCartActionGroup" + description: "Adds a Bundled Product to the Cart from the Category page." + + - name: "StorefrontAddBundleProductFromCategoryToCartActionGroup" + description: "Adds a Bundled Product to the Cart from the Product page. PLEASE NOTE: The Quantity selection is not available in the Action Group." + + - name: "StorefrontAddBundleProductFromProductToCartActionGroup" + description: "Adds a Bundled Product to the Cart from the Product page. PLEASE NOTE: The Quantity selection is not available in the Action Group." + + - name: "StorefrontAddBundleProductFromProductToCartWithMultiOption" + description: "Selects a Bundled Product option on the Bundled Product page. PLEASE NOTE: The Quantity selection is not available in the Action Group." + +- filename: "EnableDisableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/EnableDisableProductActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "AncillaryPrepBundleProduct" + description: "Requires Navigation to the Product Creation page. Fills out Name, Sku, and SEO information using the BundleProduct Data Entity. PLEASE NOTE: The Action Group values are Hardcoded." + + - name: "FindProductToEdit" + description: "Clears the Backend Admin Grid Filters on the Backend Admin Product Grid page. Searches for the BundleProduct Data Entity. Then clicks on the first item in the Admin Grid. PLEASE NOTE: The Action Group values are Hardcoded." + +- filename: "AdminCreateApiBundleProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/AdminCreateApiBundleProductActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "AdminCreateApiDynamicBundleProductActionGroup" + description: "Creates 4 products with varying prices. Creates the bundle product with specified name. Adds the multiple select and checkbox options and 4 links to the created products. Uses the 'ApiBundleProduct' entity." + + - name: "AdminCreateApiFixedBundleProductActionGroup" + description: "Creates 4 products with varying prices. Creates the bundle product with specified name. Adds the multiple select and checkbox options and 4 links to the created products. Uses the 'ApiFixedBundleProduct' entity." + + - name: "AdminCreateApiDynamicBundleProductAllOptionTypesActionGroup" + description: "Creates 3 products with varying prices. Creates the dynamic bundle product with specified name. Adds the multiple select, checkbox options and links to the created products. Uses the 'ApiBundleProduct' entity." + +- filename: "SetBundleProductAttributesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/SetBundleProductAttributesActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "SetBundleProductAttributes" + description: "Requires navigation to the Product Creation page. Fills in the arguments listed below on the product page. Saves the changes." + +- filename: "AdminClearFiltersActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/AdminClearFiltersActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "AdminClearFiltersActionGroup" + description: "Goes to the Catalog Backend Admin Grid page. Then clears the Grid Filters." + +- filename: "VerifyProductTypeOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/VerifyProductTypeOrderActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "VerifyProductTypeOrder" + description: "Checks that Bundle is in the correct order in comparison to other product types on the add product dropdown." + +- filename: "CreateBundleProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/CreateBundleProductActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "CreateBasicBundleProduct" + description: "Requires Navigation to the Product Creation page. Fills out Name, Sku, and SEO information using the BundleProduct Data Entity. PLEASE NOTE: The Action Group values are Hardcoded." + + - name: "addBundleOptionWithTwoProducts" + description: "Requires Navigation to the Product Creation page. Adds Bundle Option with Two Products using the provided arguments. 'x' refers to Bundle option number. 'n' refers to the first number after x." + + - name: "addBundleOptionWithOneProduct" + description: "Requires Navigation to the Product Creation page. Adds Bundle Option with One Product as specified in arguments. 'x' refers to Bundle option number. 'n' refers to the first number after x." + + - name: "addBundleOptionWithTreeProducts" + description: "Requires Navigation to the Product Creation page. Adds Bundle Option with Three Products using the provided arguments. 'x' refers to Bundle option number. 'n' refers to the first number after x." + + - name: "addBundleOptionWithSixProducts" + description: "Requires Navigation to Product Creation page. Adds Bundle Option with Six Products as specified in arguments. 'x' refers to Bundle option number. 'n' refers to the first number after x." + +- filename: "StorefrontSelectBundleProductDropDownOptionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Bundle/Test/Mftf/ActionGroup/StorefrontSelectBundleProductDropDownOptionActionGroup.xml" + module: "Bundle" + actiongroups: + - name: "StorefrontSelectBundleProductDropDownOptionActionGroup" + description: "Selects the provided Product Name on a Storefront Bundled Product page." + +- filename: "AdminUserActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminUserActionGroup.xml" + module: "User" + actiongroups: + - name: "LoginNewUser" + description: "Goes to the Backend Admin Login page. Fill Username and Password. Click on Sign In." + +- filename: "AdminDeleteUserRoleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserRoleActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminDeleteUserRoleActionGroup" + description: "" + +- filename: "AdminClickSaveButtonOnUserFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminClickSaveButtonOnUserFormActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminClickSaveButtonOnUserFormActionGroup" + description: "Clicks on the Save button on the Admin User creation/edit page." + +- filename: "AdminCreateUserActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateUserActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminCreateUserActionGroup" + description: "Goes to the Admin Users grid page. Clicks on Create User. Fills in the provided Role and User." + + - name: "AdminCreateUserWithRoleActionGroup" + description: "Goes to the Admin Users grid page. Clicks on Create User. Fills in the provided Role and User." + + - name: "AdminCreateUserWithApiRoleActionGroup" + description: "" + +- filename: "AdminAddNewUserRoleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminAddNewUserRoleActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminAddNewUserRoleActionGroup" + description: "" + + - name: "AdminAddNewUserRoleWithCustomRoleScopes" + description: "" + +- filename: "AdminDeleteUserActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminDeleteUserActionGroup" + description: "Goes to the Admin Users grid page. Deletes the provided User. Validates that the Success Message is present and correct." + + - name: "AdminDeleteCustomUserActionGroup" + description: "Goes to the Admin Users grid page. Deletes the provided User. Validates that the Success Message is present and correct." + +- filename: "AdminDeleteUserViaCurlActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserViaCurlActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminDeleteUserViaCurlActionGroup" + description: "" + +- filename: "AdminCreateRoleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminCreateRoleActionGroup" + description: "Goes to the Admin Edit Role page. Fills in the provided User details. Add the provided Role. Clicks on Save." + + - name: "AdminFillUserRoleRequiredData" + description: "" + + - name: "AdminAddRestrictedRole" + description: "" + + - name: "AdminCreateRole" + description: "Clicks on 'Add New Role'. Fills in the provided details (Role, Resource, Scope and Websites). Clicks on Save. Validates that the Success Message is present and correct." + +- filename: "AdminFillUserRoleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminFillUserRoleFormActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminFillUserRoleFormActionGroup" + description: "Fills in the provided Role and Current Admin Password on the Admin Roles creation/edit page." + +- filename: "AdminOpenNewUserPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminOpenNewUserPageActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminOpenNewUserPageActionGroup" + description: "Goes to the Admin New User page." + +- filename: "AssertAdminUserSaveMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AssertAdminUserSaveMessageActionGroup.xml" + module: "User" + actiongroups: + - name: "AssertAdminUserSaveMessageActionGroup" + description: "Validates that the provided Save Message is present and correct." + +- filename: "AdminFillNewUserFormRequiredFieldsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminFillNewUserFormRequiredFieldsActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminFillNewUserFormRequiredFieldsActionGroup" + description: "Fills in the provided User details on the New User creation page." + +- filename: "AdminClickSaveButtonOnUserRoleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminClickSaveButtonOnUserRoleFormActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminClickSaveButtonOnUserRoleFormActionGroup" + description: "Clicks on Save on the Admin Roles creation/edit page." + +- filename: "AdminDeleteCreatedUserActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedUserActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminDeleteCreatedUserActionGroup" + description: "Goes to the Admin Users grid page. Edits the provided User. Deletes the User. Validates that the Success Message is present and correct." + + - name: "AdminDeleteNewUserActionGroup" + description: "Deletes a User that contains the name 'John'. PLEASE NOTE: The Action Group values are Hardcoded." + +- filename: "AdminOpenUserEditPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminOpenUserEditPageActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminOpenUserEditPageActionGroup" + description: "" + +- filename: "AdminOpenForgotPasswordPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminOpenForgotPasswordPageActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminOpenForgotPasswordPageActionGroup" + description: "Goes to the Admin Login page. Clicks on the 'Forgot Password' link." + +- filename: "AdminSubmitForgotPasswordFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminSubmitForgotPasswordFormActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminSubmitForgotPasswordFormActionGroup" + description: "Clicks on the Retrieve Password button." + +- filename: "AdminDeleteCreatedRoleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedRoleActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminDeleteCreatedRoleActionGroup" + description: "" + + - name: "AdminDeleteRoleByRoleNameActionGroup" + description: "" + +- filename: "AdminFillForgotPasswordFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminFillForgotPasswordFormActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminFillForgotPasswordFormActionGroup" + description: "Fills in the provided Email Address on the Admin Forgot Password page." + +- filename: "AdminOpenCreateRolePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/User/Test/Mftf/ActionGroup/AdminOpenCreateRolePageActionGroup.xml" + module: "User" + actiongroups: + - name: "AdminOpenCreateRolePageActionGroup" + description: "Goes to the Admin Roles edit page." + +- filename: "AdminClickFormActionButtonActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AdminClickFormActionButtonActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AdminClickFormActionButtonActionGroup" + description: "" + +- filename: "AssertMessageInAdminPanelActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AssertMessageInAdminPanelActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AssertMessageInAdminPanelActionGroup" + description: "Validates that the provided Message appears in the provided Message Type on an Admin page." + +- filename: "LogoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/LogoutActionGroup.xml" + module: "Backend" + actiongroups: + - name: "logout" + description: "Logout of the Backend Admin. PLEASE NOTE: This Action Group does NOT validate that you are Logged Out." + +- filename: "LoginAsAdminActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/LoginAsAdminActionGroup.xml" + module: "Backend" + actiongroups: + - name: "LoginAsAdmin" + description: "Login to Backend Admin using provided User Data. PLEASE NOTE: This Action Group does NOT validate that you are Logged In." + +- filename: "LoginAdminWithCredentialsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/LoginAdminWithCredentialsActionGroup.xml" + module: "Backend" + actiongroups: + - name: "LoginAdminWithCredentialsActionGroup" + description: "Login to Backend Admin using provided Admin credentials. PLEASE NOTE: This Action Group does NOT validate that you are Logged In." + +- filename: "ClickSaveActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/ClickSaveActionGroup.xml" + module: "Backend" + actiongroups: + - name: "ClickSaveButtonActionGroup" + description: "" + +- filename: "AssertAdminSuccessLoginActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AssertAdminSuccessLoginActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AssertAdminSuccessLoginActionGroup" + description: "Wait for the current Admin Name to appear in the Backend Admin." + +- filename: "SecondaryGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/SecondaryGridActionGroup.xml" + module: "Backend" + actiongroups: + - name: "deleteEntitySecondaryGrid" + description: "This Action Group deletes an item from a grid based on provided Name. After Searching, the First Row is clicked." + +- filename: "LoginActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/LoginActionGroup.xml" + module: "Backend" + actiongroups: + - name: "LoginActionGroup" + description: "Login to Backend Admin using ENV Admin credentials. PLEASE NOTE: This Action Group does NOT validate that you are Logged In." + +- filename: "AdminNavigateMenuActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AdminNavigateMenuActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AdminNavigateMenuActionGroup" + description: "Open Backend Admin side Navigation Menu. Click on Sub-Navigation Menu item." + +- filename: "AssertMessageOnAdminLoginActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AssertMessageOnAdminLoginActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AssertMessageOnAdminLoginActionGroup" + description: "Validate Backend Admin Login status message is present and correct." + +- filename: "AdminAssertPageTitleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AdminAssertPageTitleActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AdminAssertPageTitleActionGroup" + description: "Validate Backend Admin Grid Page Title is present and correct." + +- filename: "AdminFilterLegacyGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AdminFilterLegacyGridActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AdminFilterLegacyGridActionGroup" + description: "" + +- filename: "AssertAdminDashboardPageIsVisibleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AssertAdminDashboardPageIsVisibleActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AssertAdminDashboardPageIsVisibleActionGroup" + description: "Validate the Backend Admin Dashboard URI is correct. Validate the Backend Admin Dashboard Title is present and correct." + +- filename: "AssertAdminPageIsNot404ActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AssertAdminPageIsNot404ActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AssertAdminPageIsNot404ActionGroup" + description: "Validates that the '404 Error' message is present and correct in the Admin Page Header." + +- filename: "AdminResetLegacyGridFilterActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AdminResetLegacyGridFilterActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AdminResetLegacyGridFilterActionGroup" + description: "" + +- filename: "SetWebsiteCountryOptionsToDefaultActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/SetWebsiteCountryOptionsToDefaultActionGroup.xml" + module: "Backend" + actiongroups: + - name: "SetWebsiteCountryOptionsToDefaultActionGroup" + description: "Sets the Website Country configuration setting to the Default values." + +- filename: "AssertOrderGraphImageOnDashboardActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/AssertOrderGraphImageOnDashboardActionGroup.xml" + module: "Backend" + actiongroups: + - name: "AssertOrderGraphImageOnDashboardActionGroup" + description: "" + +- filename: "SetAdminAccountActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/SetAdminAccountActionGroup.xml" + module: "Backend" + actiongroups: + - name: "SetAdminAccountActionGroup" + description: "Update the Interface Language configuration setting using provided Interface Language." + +- filename: "SortByIdDescendingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backend/Test/Mftf/ActionGroup/SortByIdDescendingActionGroup.xml" + module: "Backend" + actiongroups: + - name: "SortByIdDescendingActionGroup" + description: "Sorts a Backend Admin Grid by descending order for the ID column." + +- filename: "AdminImportProductsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ImportExport/Test/Mftf/ActionGroup/AdminImportProductsActionGroup.xml" + module: "ImportExport" + actiongroups: + - name: "AdminImportProductsActionGroup" + description: "Goes to the Admin Import page. Imports the provided File. Validates that the Success Message is present and correct." + +- filename: "AssertStoreFrontNoQuotesMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AssertStoreFrontNoQuotesMessageActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "AssertStoreFrontNoQuotesMessageActionGroup" + description: "" + +- filename: "AdminChangeTableRatesShippingMethodStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AdminChangeTableRatesShippingMethodStatusActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "AdminChangeTableRatesShippingMethodStatusActionGroup" + description: "" + +- filename: "AssertStoreFrontShippingMethodAvailableActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AssertStoreFrontShippingMethodAvailableActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "AssertStoreFrontShippingMethodAvailableActionGroup" + description: "" + +- filename: "AdminOpenShippingMethodsConfigPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AdminOpenShippingMethodsConfigPageActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "AdminOpenShippingMethodsConfigPageActionGroup" + description: "" + +- filename: "AdminShipmentActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AdminShipmentActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "verifyBasicShipmentInformation" + description: "Validates that the provided Customer, Shipping Address, Billing Address and Customer Group are present and correct on the view Admin Order page." + + - name: "seeProductInShipmentItems" + description: "Validates that the provided Product is present and correct on the view Admin Order Shipment page under the 'Items Shipped' section." + + - name: "goToShipmentIntoOrder" + description: "Clicks on the 'Ship' button on the view Admin Order page. Validates that the URL and Page Title are present and correct." + + - name: "submitShipmentIntoOrder" + description: "Clicks on the 'Submit Shipment' button on the view Admin Order Shipment page. Validates that the URL and Page Title are present and correct." + +- filename: "AdminChangeFlatRateShippingMethodStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AdminChangeFlatRateShippingMethodStatusActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "AdminChangeFlatRateShippingMethodStatusActionGroup" + description: "" + +- filename: "AssertStoreFrontShippingMethodUnavailableActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Shipping/Test/Mftf/ActionGroup/AssertStoreFrontShippingMethodUnavailableActionGroup.xml" + module: "Shipping" + actiongroups: + - name: "AssertStoreFrontShippingMethodUnavailableActionGroup" + description: "" + +- filename: "AdminAddDownloadableLinkInformationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Downloadable/Test/Mftf/ActionGroup/AdminAddDownloadableLinkInformationActionGroup.xml" + module: "Downloadable" + actiongroups: + - name: "AdminAddDownloadableLinkInformationActionGroup" + description: "Checks 'Is this downloadable Product?'. Fills in the provided Downloadable details under the 'Downloadable Information'." + +- filename: "AdminDownloadableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Downloadable/Test/Mftf/ActionGroup/AdminDownloadableProductActionGroup.xml" + module: "Downloadable" + actiongroups: + - name: "fillMainDownloadableProductForm" + description: "Fills the Name, SKU, Price and Quantity on the Product creation/edit page." + + - name: "addDownloadableProductLinkWithMaxDownloads" + description: "Clicks on 'Add Link'. Fills in the provided Link details including a Max Downloads limit." + + - name: "addDownloadableProductLink" + description: "Clicks on 'Add Link', under the 'Links' section. Fills in the provided Link details including Unlimited Downloads." + + - name: "addDownloadableSampleFile" + description: "Clicks on 'Add Link' under the 'Samples' section. Fills in the provided Downloadable Sample File details." + + - name: "addDownloadableSampleUrl" + description: "Clicks on 'Add Link' under the 'Samples' section. Fills in the provided Downloadable Sample URL details." + +- filename: "StorefrontAssertDownloadableProductIsPresentInCustomerAccountActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Downloadable/Test/Mftf/ActionGroup/StorefrontAssertDownloadableProductIsPresentInCustomerAccountActionGroup.xml" + module: "Downloadable" + actiongroups: + - name: "StorefrontAssertDownloadableProductIsPresentInCustomerAccount" + description: "Goes to the Storefront Customer Dashboard page. Clicks on 'My Downloadable Products'. Validates that the provided Product is present." + +- filename: "VerifyProductTypeOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Downloadable/Test/Mftf/ActionGroup/VerifyProductTypeOrderActionGroup.xml" + module: "Downloadable" + actiongroups: + - name: "VerifyProductTypeOrder" + description: "Validates that the 'Downloadable Product' option is present in the 'Add Product' dropdown menu on the Products grid page." + +- filename: "AdminExportActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogImportExport/Test/Mftf/ActionGroup/AdminExportActionGroup.xml" + module: "CatalogImportExport" + actiongroups: + - name: "exportProductsFilterByAttribute" + description: "Filters Products by the provided Attribute. Exports the filtered Products list. Validates that the Success Message is present." + + - name: "exportAllProducts" + description: "Exports the unfiltered Products list. Validates that the Success Message is present." + + - name: "downloadFileByRowIndex" + description: "Downloads the provided Grid Index on the Exports grid page." + + - name: "deleteExportedFile" + description: "Deletes the provided Grid Index on the Exports grid page." + + - name: "deleteAllExportedFiles" + description: "" + +- filename: "OpenStoreFrontCheckoutShippingPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/OpenStoreFrontCheckoutShippingPageActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "OpenStoreFrontCheckoutShippingPageActionGroup" + description: "" + +- filename: "StorefrontAssertCheckoutEstimateShippingInformationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertCheckoutEstimateShippingInformationActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertCheckoutEstimateShippingInformationActionGroup" + description: "Validates that the provided Customer details (Country, State and Zip Code) are present and correct on the Storefront Checkout page." + +- filename: "StorefrontAddSimpleProductToShopingCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddSimpleProductToShopingCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddSimpleProductToShoppingCartActionGroup" + description: "" + +- filename: "StorefrontCheckoutAndAssertOrderSummaryDisplayActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCheckoutAndAssertOrderSummaryDisplayActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCheckoutAndAssertOrderSummaryDisplayActionGroup" + description: "Clicks on 'Go To Checkout' in the Storefront Mini Shopping Cart modal. Validates that the provided Items in Cart Text is present and correct on the Storefront Checkout page under the 'Summary' section." + +- filename: "FillGuestCheckoutShippingAddressFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/FillGuestCheckoutShippingAddressFormActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "FillGuestCheckoutShippingAddressFormActionGroup" + description: "" + + - name: "FillGuestCheckoutShippingAddressWithCountryActionGroup" + description: "" + +- filename: "FillShippingZipFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/FillShippingZipFormActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "FillShippingZipForm" + description: "Fills in the provided Address details (Country, State and Zip Code) in the 'Estimate Shipping and Tax' section of the Storefront Shopping Cart page." + +- filename: "AssertStorefronElementVisibleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefronElementVisibleActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontElementVisibleActionGroup" + description: "Validates that the provided Selector contains the provided Value on a Storefront page." + +- filename: "DeleteProductFromShoppingCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/DeleteProductFromShoppingCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "DeleteProductFromShoppingCartActionGroup" + description: "Removes the provided Product Name from the Storefront Mini Shopping Cart. Validates that the Success Message is present and correct." + +- filename: "StorefrontCustomerSignInPopUpActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCustomerSignInPopUpActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCustomerSignInPopUpActionGroup" + description: "" + +- filename: "StorefrontAssertGuestShippingInfoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertGuestShippingInfoActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertGuestShippingInfoActionGroup" + description: "Validates that the provided Customer details are present and correct in the 'Shipping Address' section on the Storefront Check page." + +- filename: "StorefrontOpenCheckoutPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontOpenCheckoutPageActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontOpenCheckoutPageActionGroup" + description: "Goes to the Storefront Checkout page." + +- filename: "CustomerCheckoutFillNewShippingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/CustomerCheckoutFillNewShippingAddressActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "CustomerCheckoutFillNewShippingAddressActionGroup" + description: "Fills in the provided Address details in the 'Shipping Address' section on the Storefront Checkout page." + +- filename: "StorefrontCheckCartDiscountAndSummaryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCheckCartDiscountAndSummaryActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCheckCartDiscountAndSummaryActionGroup" + description: "Validates that the provided Order Total and Discount Totals are present and correct under the 'Summary' section of the Storefront Shopping Cart page." + +- filename: "AssertAdminEmailValidationMessageOnCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertAdminEmailValidationMessageOnCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertAdminEmailValidationMessageOnCheckoutActionGroup" + description: "" + +- filename: "LoginAsCustomerOnCheckoutPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/LoginAsCustomerOnCheckoutPageActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "LoginAsCustomerOnCheckoutPageActionGroup" + description: "Fills in the provided Customer (Email and Password) details in the 'Sign In' modal on the Storefront Checkout page." + +- filename: "StorefrontSelectOptionDateTimeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionDateTimeActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionDateTimeActionGroup" + description: "Selects the provided Month, Day, Year, Hour, Minute and Part of Day for the provided Product Option on a Storefront product page." + +- filename: "StorefrontUpdateProductQtyMiniShoppingCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontUpdateProductQtyMiniShoppingCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontUpdateProductQtyMiniShoppingCartActionGroup" + description: "Clicks on the Storefront Mini Shopping Cart icon in the Header. Fills in the provided Quantity for the provided Product in the Mini Shopping Cart. Clicks on Update." + +- filename: "FillNewShippingAddressModalActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/FillNewShippingAddressModalActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "FillNewShippingAddressModalActionGroup" + description: "EXTENDS: FillShippingAddressOneStreetActionGroup. Selects the provided State in the 'Shipping Address' section of the Storefront Checkout page." + +- filename: "StorefrontAssertShippingAddressPageDisplayActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertShippingAddressPageDisplayActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertShippingAddressPageDisplayActionGroup" + description: "Goes to the Storefront Checkout page. Validates that the 'Shipping Address' Title and Main Area are present." + +- filename: "AssertShoppingCartIsEmptyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertShoppingCartIsEmptyActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertShoppingCartIsEmptyActionGroup" + description: "Goes to the Storefront Shopping Cart page. Validates that the Empty Shopping Cart message is present and correct. PLEASE NOTE: The message is Hardcoded." + +- filename: "StorefrontCartEstimateShippingAndTaxActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCartEstimateShippingAndTaxActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCartEstimateShippingAndTaxActionGroup" + description: "Fills in the provided Address details (Country, State and Zip Code) under the 'Summary' section on the Storefront Shopping Cart page." + +- filename: "StorefrontAddToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddToTheCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddToTheCartActionGroup" + description: "Scrolls to the Add To Cart button. Clicks on Add To Cart." + +- filename: "AssertStorefrontEmailTooltipContentOnCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontEmailTooltipContentOnCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontEmailTooltipContentOnCheckoutActionGroup" + description: "Clicks on the Email Address tooltip. Validates that the provided Message appears in the Email Address Tooltip." + +- filename: "StorefrontAddProductWithSelectedConfigurableAndCustomOptionsToCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddProductWithSelectedConfigurableAndCustomOptionsToCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddProductWithSelectedConfigurableAndCustomOptionsToCartActionGroup" + description: "Selects the provided Customizable Option in the Product Options drop down on a Storefront Configurable product page. Clicks on Add to Cart. Validates that the Success Message is present and correct." + +- filename: "FillShippingAddressOneStreetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/FillShippingAddressOneStreetActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "FillShippingAddressOneStreetActionGroup" + description: "Fills in the provided Address details in the 'Shipping Address' (Fills in Street Address 1 only) section of the Storefront Checkout page." + +- filename: "StorefrontSelectOptionDateActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionDateActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionDateActionGroup" + description: "Selects the provided Month, Day and Year for the provided Product Option on a Storefront Product page." + +- filename: "StorefrontCheckoutCheckProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCheckoutCheckProductActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCheckoutCheckProductActionGroup" + description: "Validates that the provided Product and Cart Item are present and correct on the Storefront Shopping Cart page." + +- filename: "GuestCheckoutFillNewShippingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/GuestCheckoutFillNewShippingAddressActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "GuestCheckoutFillNewShippingAddressActionGroup" + description: "Fills in the provided Customer/Address details in the 'Shipping Address' section on the Storefront Checkout page." + +- filename: "StorefrontAddProductToCartFromCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddProductToCartFromCategoryActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddProductToCartFromCategoryActionGroup" + description: "" + +- filename: "StorefrontAssertProductDetailsInOrderSummaryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertProductDetailsInOrderSummaryActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertProductDetailsInOrderSummaryActionGroup" + description: "Validates that the provided Product Name, Quantity and Price are present in the 'Order Summary' section on the Storefront Checkout page." + +- filename: "StorefrontAssertCheckoutShippingMethodSelectedActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertCheckoutShippingMethodSelectedActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertCheckoutShippingMethodSelectedActionGroup" + description: "Validates that the provided Shipping Method is checked on the Storefront Checkout page." + +- filename: "StorefrontMiniCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontMiniCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "clickViewAndEditCartFromMiniCart" + description: "Clicks on the Storefront Mini Shopping Cart icon. Clicks on the 'View and Edit Cart' link. Validates that the URL is present and correct. PLEASE NOTE: The URL is Hardcoded." + + - name: "assertOneProductNameInMiniCart" + description: "Validates that the provided Product Name is present in the Storefront Mini Shopping Cart." + + - name: "removeProductFromMiniCart" + description: "Removed the provided Product from the Storefront Mini Shopping Cart." + + - name: "assertMiniCartEmpty" + description: "Validates that the provided Product Count appears in the Storefront Header next to the Shopping Cart icon. Clicks on the Mini Shopping Cart icon. Validates that the 'No Items' message is present and correct in the Storefront Mini Shopping Cart." + +- filename: "StorefrontFillGuestShippingInfoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontFillGuestShippingInfoActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontFillGuestShippingInfoActionGroup" + description: "Fills in the provided Customer details on the Storefront Checkout page under the 'Shipping Address' section." + +- filename: "AssertStorefrontSeeElementActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontSeeElementActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontSeeElementActionGroup" + description: "Scrolls to the provided Selector. Validates that the provided Selector is present." + +- filename: "StorefrontSelectOptionCheckBoxActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionCheckBoxActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionCheckBoxActionGroup" + description: "Checks the provided Product Option Title on a Storefront Product page." + +- filename: "StorefrontSelectOptionDropDownActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionDropDownActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionDropDownActionGroup" + description: "Selects the provided Product Option Value under the provided Product Option Title on a Storefront Product page." + +- filename: "AssertStorefrontElementInvisibleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontElementInvisibleActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontElementInvisibleActionGroup" + description: "" + +- filename: "StorefrontRegisterCustomerAfterCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontRegisterCustomerAfterCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontRegisterCustomerAfterCheckoutActionGroup" + description: "" + +- filename: "StorefrontFillOptionFieldInputActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontFillOptionFieldInputActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontFillOptionFieldInputActionGroup" + description: "Fills in the provided Option Title with the provided Value on a Storefront product page." + +- filename: "CheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/CheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "CheckoutSelectFlatRateShippingMethodActionGroup" + description: "Clicks on the 'Flat Rate' Shipping Method on the Storefront Checkout page." + + - name: "GoToCheckoutFromMinicartActionGroup" + description: "Clicks on the Storefront Mini Shopping Cart icon. Clicks on 'Proceed to Checkout'." + + - name: "GoToCheckoutFromCartActionGroup" + description: "Clicks on the 'View and Edit Cart' link in the Storefront Mini Shopping Cart. Validates that the Storefront Shopping Cart URL is present and correct. Clicks on 'Proceed to Checkout'." + + - name: "GuestCheckoutFillingShippingSectionActionGroup" + description: "Fills in the provided Customer/Address (Including Region) details on the Storefront Checkout page under the 'Shipping Address' section. Selects the provided Shipping Method. Clicks on Next. Validates that the URL is present and correct." + + - name: "GuestCheckoutFillShippingNoWaitForPaymentActionGroup" + description: "EXTENDS: GuestCheckoutFillingShippingSectionActionGroup. Removed 'waitForPaymentSectionLoaded' and 'assertCheckoutPaymentUrl'." + + - name: "GuestCheckoutFillingShippingSectionWithoutRegionActionGroup" + description: "Fills in the provided Customer/Address (Excluding Region) details on the Storefront Checkout page under the 'Shipping Address' section. Selects the provided Shipping Method. Clicks on Next. Validates that the URL is present and correct." + + - name: "GuestCheckoutFillingShippingSectionUnavailablePaymentActionGroup" + description: "Fills in the provided Customer/Address (Including Region) details on the Storefront Checkout page under the 'Shipping Address' section. Selects the 1st Shipping Method. Clicks on Next. Validates that the Payment Error Message and URL are present and correct." + + - name: "GuestCheckoutWithSpecificCountryOptionForPaymentMethodActionGroup" + description: "EXTENDS: GuestCheckoutFillingShippingSectionUnavailablePaymentActionGroup. Removes 'checkMessage'. Validates that the provided Payment Method Name is NOT present on the Storefront Checkout page." + + - name: "LoggedInUserCheckoutFillingShippingSectionActionGroup" + description: "Fills in the provided Customer/Address (Including Region) details on the Storefront Checkout page under the 'Shipping Address' section. Selects the 1st Shipping Method. Clicks on Next. Validates that the Payment Error Message and URL are present and correct." + + - name: "LoggedInUserCheckoutAddNewShippingSectionWithoutRegionActionGroup" + description: "Fills in the provided Customer/Address (Excluding Region) details on the Storefront Checkout page under the 'Shipping Address' section. Selects the 1st Shipping Method. Clicks on Next. Validates that the Payment Error Message and URL are present and correct." + + - name: "PlaceOrderWithLoggedUserActionGroup" + description: "Clicks on 'Proceed to Checkout' on the Storefront Shopping Cart page. Selects the provided Shipping Method. Clicks on Next. Clicks on Place Order. Validates that the Success Message is present and correct." + + - name: "CheckProductInCheckoutCartItemsActionGroup" + description: "Validates the the provided Product appears in the Storefront Checkout 'Order Summary' section." + + - name: "CheckOrderSummaryInCheckoutActionGroup" + description: "Validates that the provided Subtotal, Shipping Total, Shipping Method and Total are present and correct on the Storefront Checkout page under the 'Order Summary' section." + + - name: "CheckTotalsSortOrderInSummarySection" + description: "Validates that the provided Element Name appears at the provided Position in the Storefront Checkout 'Order Summary' section." + + - name: "CheckShipToInformationInCheckoutActionGroup" + description: "Validates that the provided Customer and Address details are present and correct on the Storefront Checkout page under the 'Ship To' section." + + - name: "CheckShippingMethodInCheckoutActionGroup" + description: "Validates that the provided Shipping Method Name is present on the Storefront Checkout page under the 'Shipping Method' section." + + - name: "CheckoutSelectCheckMoneyOrderPaymentActionGroup" + description: "Selects the 'Check / Money Order' Payment Method on the Storefront Checkout page." + + - name: "CheckSelectedShippingAddressInCheckoutActionGroup" + description: "Validates that the provided Customer and Address details are listed on the Storefront Checkout page under the 'Shipping Address' section when multiple Addresses are present for a Customer." + + - name: "CheckBillingAddressInCheckoutActionGroup" + description: "Validates that the provided Customer and Address details are present on the Storefront Checkout page under the 'Payment Method' section." + + - name: "CheckBillingAddressInCheckoutWithBillingAddressOnPaymentPageActionGroup" + description: "Validates that the provided Customer and Address details appear on the Storefront Checkout page under the 'Billing Address' section." + + - name: "CheckoutPlaceOrderActionGroup" + description: "Clicks on 'Place Order'. Validates that the provided Order ID and Email You messages are present and correct." + + - name: "VerifyTopDestinationsCountry" + description: "Validates that the provided Country is listed at the provided Index in 'Country' drop down menu on the Storefront Shopping Cart page under the 'Summary' section." + + - name: "StorefrontSignOutActionGroup" + description: "Clicks on the Customer Account link. Clicks on 'Sign Out'. Validates that the Signed Out message is present and correct." + + - name: "ClickPlaceOrderActionGroup" + description: "Clicks on the 'Place Order' button. Validates that the Success Message is present and correct." + +- filename: "StorefrontProductCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontProductCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddCategoryProductToCartActionGroup" + description: "Adds the provided Product to the Cart from a Storefront Category page. Validates that the Success Message is present and correct. Validates that the Mini Shopping Cart contains the provided Product Count." + + - name: "StorefrontAddCategoryProductToCartWithQuantityActionGroup" + description: "Adds the provided Product to the Cart from a Storefront Category page. Validates that the Success Message is present and correct. Updates the Product Quantity using the provided Product Quantity. Validates that the provided Quantity is present and correct in the Mini Shopping Cart." + + - name: "StorefrontAddProductToCartActionGroup" + description: "Clicks on Add to Cart on a Storefront Product page. Validates that the Success Message is present and correct. Validates that the provided Product Count is present and correct in the Mini Shopping Cart." + + - name: "StorefrontOpenMinicartAndCheckSimpleProductActionGroup" + description: "Clicks on the Storefront Mini Shopping Cart icon. Validates that the provided Product is present and correct in the Mini Shopping Cart." + + - name: "StorefrontCheckCartSimpleProductActionGroup" + description: "Validates that the provided Product details (Name and Price) are present and correct in the Mini Shopping Cart. Validates that the provided Product Quantity is present and correct in the Mini Shopping Cart." + + - name: "StorefrontCheckCartActionGroup" + description: "Goes to the Storefront Shopping Cart page. Validates that the provided Subtotal, Shipping, Shipping Method and Total are present and correct." + + - name: "StorefrontOpenCartFromMinicartActionGroup" + description: "Clicks on the Storefront Mini Shopping Cart icon. Click on 'View and Edit Cart'." + + - name: "changeSummaryQuoteAddress" + description: "Fills in the provided Address details (Country, State and Zip Code) under the 'Summary' section on the Storefront Shopping Cart page." + +- filename: "ClearShippingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/ClearShippingAddressActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "ClearShippingAddressActionGroup" + description: "Clears all of the fields for the Shipping Address section on the Storefront Checkout page." + +- filename: "AssertStorefrontShoppingCartSummaryItemsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontShoppingCartSummaryItemsActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontShoppingCartSummaryItemsActionGroup" + description: "Goes to the Storefront Shopping Cart page. Validates that the provided Subtotal/Total are present and correct." + +- filename: "AssertMiniShoppingCartSubTotalActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertMiniShoppingCartSubTotalActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertMiniShoppingCartSubTotalActionGroup" + description: "Validates that the provided Subtotal (Price and Store Currency) is present and correct." + +- filename: "StorefrontShippmentFromActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontShippmentFromActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "ShipmentFormFreeShippingActionGroup" + description: "Fills in the Customer details for the 'Shipping Address' section of the Storefront Checkout page. Selects 'Free Shipping'. Clicks on Next. Validates that the URL is present and correct." + +- filename: "StorefrontCheckThatCartIsEmptyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCheckThatCartIsEmptyActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCheckThatCartIsEmptyActionGroup" + description: "Clicks on the Mini Shopping Cart icon in the Storefront Header. Validates that the 'Empty Cart' message is present and correct." + +- filename: "StorefrontSelectOptionTimeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionTimeActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionTimeActionGroup" + description: "Selects the provided Hour, Minute and Part of Day under the provided Product Option Title on a Storefront Product page." + +- filename: "StorefrontAddBundleProductToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddBundleProductToTheCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddBundleProductToTheCartActionGroup" + description: "Clicks on 'Customize and Add to Cart' button on a Storefront Bundled product page. Adds the provided Product Name/Quantity. Clicks on Add to Cart." + +- filename: "StorefrontFillOptionTextAreaActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontFillOptionTextAreaActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontFillOptionTextAreaActionGroup" + description: "Fills in the provided Option Title with the provided Value on a Storefront product page." + +- filename: "AssertStorefrontCheckoutCartItemsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontCheckoutCartItemsActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontCheckoutCartItemsActionGroup" + description: "Validates that the provided Product details (Name, SKU, Price, Subtotal and Quantity) are present and correct on the Storefront Shopping Cart page." + +- filename: "AdminCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AdminCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AdminCheckoutSelectCheckMoneyOrderBillingMethodActionGroup" + description: "Selects the Billing Method 'Check Money order' on the Admin 'Create New Order for' page." + +- filename: "VerifyCheckoutPaymentOrderSummaryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/VerifyCheckoutPaymentOrderSummaryActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "VerifyCheckoutPaymentOrderSummaryActionGroup" + description: "Validates that the provided Subtotal, Shipping Total and Summary Total prices are present and correct on the Storefront Checkout page." + + - name: "AssertStorefrontCheckoutPaymentSummarySubtotalActionGroup" + description: "" + + - name: "AssertStorefrontCheckoutPaymentSummaryTotalActionGroup" + description: "" + + - name: "AssertStorefrontCheckoutPaymentSummaryTotalMissingActionGroup" + description: "" + +- filename: "StorefrontSelectOptionRadioButtonActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionRadioButtonActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionRadioButtonActionGroup" + description: "Checks the provided Product Option radio button for the provided Product Option Price on a Storefront Product page." + +- filename: "StorefrontAssertCartEstimateShippingAndTaxActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertCartEstimateShippingAndTaxActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertCartEstimateShippingAndTaxActionGroup" + description: "Validates that the provided Customer details (Country, State and Zip Code) are present and correct in the 'Estimate Shipping and Tax' section on the Storefront Shopping Cart page." + +- filename: "StorefrontSelectOptionMultiSelectActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontSelectOptionMultiSelectActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontSelectOptionMultiSelectActionGroup" + description: "Selects the provided Product Option under the provided Product Option Title on a Storefront Product page." + +- filename: "StorefrontAssertMiniCartItemCountActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertMiniCartItemCountActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertMiniCartItemCountActionGroup" + description: "Validates that the provided Product Count appears in the Storefront Header next to the Shopping Cart icon. Validates that the provided Product Count Text appears in the Storefront Mini Shopping Cart." + +- filename: "StorefrontFillEmailFieldOnCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontFillEmailFieldOnCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontFillEmailFieldOnCheckoutActionGroup" + description: "Fills in the provided Email Address on the Storefront Checkout page. Double clicks on the Email tooltip." + +- filename: "StorefrontAssertShippingMethodOptionPresentInCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertShippingMethodOptionPresentInCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertShippingMethodOptionPresentInCartActionGroup" + description: "" + +- filename: "StorefrontClickOnMiniCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontClickOnMiniCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontClickOnMiniCartActionGroup" + description: "Scrolls to the Top of the Page. Clicks on the Mini Shopping Cart icon in the Storefront Header." + +- filename: "StorefrontAssertNoValidationErrorForCheckoutAddressFieldsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertNoValidationErrorForCheckoutAddressFieldsActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertNoValidationErrorForCheckoutAddressFieldsActionGroup" + description: "" + +- filename: "StorefrontAddSimpleProductToCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddSimpleProductToCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddSimpleProductToCartActionGroup" + description: "Adds the provided Product to the Storefront Shopping Cart from a Storefront Category page. Validates that the provided Success Message is present and correct." + +- filename: "AssertStorefrontMiniCartItemsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontMiniCartItemsActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontMiniCartItemsActionGroup" + description: "Validates that the provided Product details (Name, Price, Subtotal and Quantity) are present and correct in the Storefront Mini Shopping Cart." + +- filename: "StorefrontAttachOptionFileActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAttachOptionFileActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAttachOptionFileActionGroup" + description: "Attaches the provided File to the provided Product Option on a Storefront Product page." + +- filename: "StorefrontOpenMiniCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontOpenMiniCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontOpenMiniCartActionGroup" + description: "Clicks on the Mini Shopping Cart icon in the Storefront Header." + +- filename: "LoginAsCustomerUsingSignInLinkActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/LoginAsCustomerUsingSignInLinkActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "LoginAsCustomerUsingSignInLinkActionGroup" + description: "Clicks on 'Sign In' on the Storefront Checkout page. Fills in the provided Customer details (Email and Password). Clicks on Sign In." + +- filename: "AssertStorefrontShoppingCartSummaryWithShippingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontShoppingCartSummaryWithShippingActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontShoppingCartSummaryWithShippingActionGroup" + description: "EXTENDS: AssertStorefrontShoppingCartSummaryItemsActionGroup. Waits for the Storefront Checkout 'Shipping Methods' section to appear." + +- filename: "StorefrontAssertShippingMethodPresentInCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertShippingMethodPresentInCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertShippingMethodPresentInCartActionGroup" + description: "Validates that the provided Shipping Method Name is present in the 'Summary' section of the Storefront Shopping Cart page." + +- filename: "StorefrontAddProductWithSelectedOptionToCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAddProductWithSelectedOptionToCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAddProductWithSelectedConfigurableOptionToCartActionGroup" + description: "Selects the provided Product Option in the drop down on a Storefront Configurable product page. Clicks on Add to Cart. Validates that the Success Message is present and correct." + +- filename: "GuestCheckoutFillNewBillingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/GuestCheckoutFillNewBillingAddressActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "GuestCheckoutFillNewBillingAddressActionGroup" + description: "Fills in the provided Customer and Address details on the Storefront Checkout page." + + - name: "LoggedInCheckoutFillNewBillingAddressActionGroup" + description: "Fills in the provided Address details on the Storefront Checkout Address sections based on the provided Class Prefix (i.e. '._show', '[aria-hidden=false]')." + + - name: "LoggedInCheckoutWithOneAddressFieldWithoutStateField" + description: "EXTENDS: LoggedInCheckoutFillNewBillingAddressActionGroup. Removes 'fillStreetAddress2' and 'selectState'." + + - name: "clearCheckoutAddressPopupFieldsActionGroup" + description: "Clears the fields for the Customer/Address fields on the Storefront Checkout Address sections based on the provided Class Prefix (i.e. '._show', '[aria-hidden=false]')." + + - name: "GuestCheckoutSelectPaymentAndFillNewBillingAddressActionGroup" + description: "EXTENDS: GuestCheckoutFillNewBillingAddressActionGroup. Clicks on the provided Payment Method on the Storefront Checkout page." + +- filename: "StorefrontEnterProductQuantityAndAddToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontEnterProductQuantityAndAddToTheCartActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontEnterProductQuantityAndAddToTheCartActionGroup" + description: "Fills in the provided Product Quantity on a Storefront Bundled product page. Clicks on Add to Cart." + +- filename: "StorefrontCheckoutCheckOutOfStockProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCheckoutCheckOutOfStockProductActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontCheckoutCheckOutOfStockProductActionGroup" + description: "Validates that the 'Out of Stock' Error Message is present and correct on the Storefront Checkout page for the provided Product." + +- filename: "AssertStorefrontEmailNoteMessageOnCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontEmailNoteMessageOnCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontEmailNoteMessageOnCheckoutActionGroup" + description: "Validates that the provided 'Email Address' message is present on the Storefront Checkout page under the 'Email Address' field." + +- filename: "AssertStorefrontEmailValidationMessageOnCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontEmailValidationMessageOnCheckoutActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertStorefrontEmailValidationMessageOnCheckoutActionGroup" + description: "Validates that the provided Error Message appears on the Storefront Checkout page after an invalid Email Addressed is inputted." + +- filename: "StorefrontAssertCartShippingMethodSelectedActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontAssertCartShippingMethodSelectedActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "StorefrontAssertCartShippingMethodSelectedActionGroup" + description: "Validates that the provided Shipping Method Carrier/Method Code is checked on the Storefront Shopping Cart page." + +- filename: "CheckoutFillEstimateShippingAndTaxActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/CheckoutFillEstimateShippingAndTaxActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "CheckoutFillEstimateShippingAndTaxActionGroup" + description: "" + +- filename: "IdentityOfDefaultBillingAndShippingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Checkout/Test/Mftf/ActionGroup/IdentityOfDefaultBillingAndShippingAddressActionGroup.xml" + module: "Checkout" + actiongroups: + - name: "AssertThatShippingAndBillingAddressTheSame" + description: "Validates that the Shipping and Billing Addresses are the same." + +- filename: "CaptchaFormsDisplayingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/CaptchaFormsDisplayingActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "CaptchaFormsDisplayingActionGroup" + description: "Navigates to store configuration page through UI and expands the CAPTCHA section under Customers > Customer Configuration." + +- filename: "StorefrontCustomerChangeEmailWithCaptchaActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/StorefrontCustomerChangeEmailWithCaptchaActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "StorefrontCustomerChangeEmailWithCaptchaActionGroup" + description: "EXTENDS: StorefrontCustomerChangeEmailActionGroup. Fills in the Captcha field on the Storefront Customer Information page." + +- filename: "AssertCaptchaVisibleOnCustomerAccountCreatePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AssertCaptchaVisibleOnCustomerAccountCreatePageActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AssertCaptchaVisibleOnCustomerAccountCreatePageActionGroup" + description: "Validate that the Captcha IS present on the Storefront Create Customer page." + +- filename: "AssertCaptchaVisibleOnCustomerAccountInfoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AssertCaptchaVisibleOnCustomerAccountInfoActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AssertCaptchaVisibleOnCustomerAccountInfoActionGroup" + description: "Validate that the Captcha IS present on the Storefront Customer Account Information page." + +- filename: "StorefrontFillContactUsFormWithCaptchaActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/StorefrontFillContactUsFormWithCaptchaActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "StorefrontFillContactUsFormWithCaptchaActionGroup" + description: "EXTENDS: StorefrontFillContactUsFormActionGroup. Fills in the Captcha field on the Storefront Contact Us page." + +- filename: "StorefrontFillCustomerLoginFormWithCaptchaActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/StorefrontFillCustomerLoginFormWithCaptchaActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "StorefrontFillCustomerLoginFormWithCaptchaActionGroup" + description: "EXTENDS: StorefrontFillCustomerLoginFormActionGroup. Fills in the Captcha field on the Storefront Customer Login page." + +- filename: "AssertCaptchaVisibleOnContactUsFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AssertCaptchaVisibleOnContactUsFormActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AssertCaptchaVisibleOnContactUsFormActionGroup" + description: "Validate that the Captcha IS present on the Storefront Contact Us page." + +- filename: "AssertCaptchaVisibleOnAdminLoginFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AssertCaptchaVisibleOnAdminLoginFormActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AssertCaptchaVisibleOnAdminLoginFormActionGroup" + description: "Validate that the Captcha IS present on the Backend Admin Login page." + +- filename: "AdminLoginWithCaptchaActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AdminLoginWithCaptchaActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AdminLoginWithCaptchaActionGroup" + description: "EXTENDS: LoginAsAdmin. Fills in the Captcha field on the Backend Admin Login page." + +- filename: "AssertCaptchaNotVisibleOnCustomerLoginFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AssertCaptchaNotVisibleOnCustomerLoginFormActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AssertCaptchaNotVisibleOnCustomerLoginFormActionGroup" + description: "Validate that the Captcha is NOT present on the Backend Admin Login page." + +- filename: "StorefrontFillCustomerAccountCreationFormWithCaptchaActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/StorefrontFillCustomerAccountCreationFormWithCaptchaActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "StorefrontFillCustomerAccountCreationFormWithCaptchaActionGroup" + description: "EXTENDS: StorefrontFillCustomerAccountCreationFormActionGroup. Fills in the Captcha field on the Storefront Create Customer page." + +- filename: "AssertCaptchaVisibleOnCustomerLoginFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Captcha/Test/Mftf/ActionGroup/AssertCaptchaVisibleOnCustomerLoginFormActionGroup.xml" + module: "Captcha" + actiongroups: + - name: "AssertCaptchaVisibleOnCustomerLoginFormActionGroup" + description: "Validate that the Captcha IS present on the Storefront Customer Login page." + +- filename: "StoreFrontSelectDropDownSearchSuggestionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Search/Test/Mftf/ActionGroup/StoreFrontSelectDropDownSearchSuggestionActionGroup.xml" + module: "Search" + actiongroups: + - name: "StoreFrontSelectDropDownSearchSuggestionActionGroup" + description: "Fills the Storefront Quick Search field. Validates that the provided Search Suggestion is present and correct." + +- filename: "AdminSearchTermActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Search/Test/Mftf/ActionGroup/AdminSearchTermActionGroup.xml" + module: "Search" + actiongroups: + - name: "searchTermFilterBySearchQuery" + description: "Fills in the provided Search Query on the Admin Search Term grid page." + + - name: "deleteSearchTerm" + description: "Deletes the Search Terms in the Admin Search Term grid." + +- filename: "AdminEditSearchTermActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Search/Test/Mftf/ActionGroup/AdminEditSearchTermActionGroup.xml" + module: "Search" + actiongroups: + - name: "AdminFillAllSearchTermFieldsActionGroup" + description: "Fills in the provided Search Term on the Admin Search Terms grid page." + +- filename: "AdminGroupedProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/GroupedProduct/Test/Mftf/ActionGroup/AdminGroupedProductActionGroup.xml" + module: "GroupedProduct" + actiongroups: + - name: "checkRequiredFieldsInGroupedProductForm" + description: "Clears the Product Name and SKU fields when adding a Grouped Product and then verifies that they are required after attempting to Save." + + - name: "fillGroupedProductForm" + description: "Fills in the provided Product Name and SKU on the Grouped Product creation/edit page." + + - name: "viewGroupedProductInAdminGrid" + description: "Goes to the Admin Products grid page. Filters the grid for the provided Product. Validates that the provided Product appears in the grid." + + - name: "fillDefaultQuantityForLinkedToGroupProductInGrid" + description: "Fills the provided Qty for a Product linked to a Grouped Product." + + - name: "AdminAssignProductToGroup" + description: "Adds the provided Product to a Grouped Product on an Admin Grouped Product creation/edit page." + +- filename: "StorefrontAddThreeGroupedProductToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/GroupedProduct/Test/Mftf/ActionGroup/StorefrontAddThreeGroupedProductToTheCartActionGroup.xml" + module: "GroupedProduct" + actiongroups: + - name: "StorefrontAddThreeGroupedProductToTheCartActionGroup" + description: "Goes to the provided URL for a Grouped Product. Validates that the provided Products and Quantities are present and correct." + +- filename: "AssertLinkPresenceOnGroupedProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/GroupedProduct/Test/Mftf/ActionGroup/AssertLinkPresenceOnGroupedProductPageActionGroup.xml" + module: "GroupedProduct" + actiongroups: + - name: "AssertLinkPresenceOnGroupedProductPage" + description: "Validates that the provided Product Name is present and correct on a Storefront Grouped Product page." + +- filename: "AdminOrderGroupedProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/GroupedProduct/Test/Mftf/ActionGroup/AdminOrderGroupedProductActionGroup.xml" + module: "GroupedProduct" + actiongroups: + - name: "AdminOrderConfigureGroupedProduct" + description: "" + +- filename: "VerifyProductTypeOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/GroupedProduct/Test/Mftf/ActionGroup/VerifyProductTypeOrderActionGroup.xml" + module: "GroupedProduct" + actiongroups: + - name: "VerifyProductTypeOrder" + description: "Checks that Grouped is in the correct order in comparison to other product types on the add product dropdown." + +- filename: "AdminOpenCMSPagesGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminOpenCMSPagesGridActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AdminOpenCMSPagesGridActionGroup" + description: "Goes to the Admin Pages grid page." + +- filename: "AssertCMSBlockContentActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AssertCMSBlockContentActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AssertBlockContent" + description: "Validates that the Block details are present and correct. PLEASE NOTE: The Block data is Hardcoded, using '_defaultBlock'." + +- filename: "AdminOpenCmsBlockActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminOpenCmsBlockActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AdminOpenCmsBlockActionGroup" + description: "" + +- filename: "StorefrontGoToCMSPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/StorefrontGoToCMSPageActionGroup.xml" + module: "Cms" + actiongroups: + - name: "StorefrontGoToCMSPageActionGroup" + description: "Goes to the provided Storefront CMS Page." + +- filename: "ClearWidgetsFromCMSContentActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml" + module: "Cms" + actiongroups: + - name: "ClearWidgetsFromCMSContent" + description: "Goes to the Admin CMS Page Edit page for the Page ID number 2. Clears the Widget and replaces it with Text. PLEASE NOTE: The Page ID/Text are Hardcoded." + + - name: "ClearWidgetsForCMSHomePageContentWYSIWYGDisabled" + description: "" + +- filename: "AssertCMSPageNotFoundOnStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AssertCMSPageNotFoundOnStorefrontActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AssertCMSPageNotFoundOnStorefrontActionGroup" + description: "Validates that the 'Whoops, our bad' error message is present and correct for a Storefront CMS Page that doesn't exist." + +- filename: "AdminCMSPageMassActionSelectActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminCMSPageMassActionSelectActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AdminCMSPageMassActionSelectActionGroup" + description: "Selects the provided Action in the 'Mass Action' drop down menu on the Admin Pages grid." + +- filename: "FillOutCMSPageContentActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/FillOutCMSPageContentActionGroup.xml" + module: "Cms" + actiongroups: + - name: "FillOutCMSPageContent" + description: "Fills out the Page details (Page Title, Content and URL Key) on the Admin Page creation/edit page. PLEASE NOTE: The values are Hardcoded using '_duplicatedCMSPage'." + +- filename: "CMSActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/CMSActionGroup.xml" + module: "Cms" + actiongroups: + - name: "navigateToCreatedCMSPage" + description: "Goes to the Admin CMS Pages page. " + + - name: "navigateToCreatedCMSBlockPage" + description: "Goes to the Admin Blocks page. Clicks on 'Edit' for the provided Block." + + - name: "DeleteCMSBlockActionGroup" + description: "Goes to the Admin CMS Blocks page. Deletes the '_defaultBlock' Block. Validates that the Success Message is present and correct. PLEASE NOTE: The Block that is deleted it Hardcoded." + + - name: "AddStoreViewToCmsPage" + description: "EXTENDS: navigateToCreatedCMSPage. Adds the provided Store View to a Page." + + - name: "saveAndCloseCMSBlockWithSplitButton" + description: "Clicks on the Save and Close button." + + - name: "navigateToStorefrontForCreatedPage" + description: "Goes to the provided Page on the Storefront." + + - name: "saveCMSBlock" + description: "Clicks on the Save button. Validates that the Save message is present and correct. PLEASE NOTE: The message is Hardcoded." + + - name: "saveAndContinueEditCmsPage" + description: "Clicks on the Save and Continue button." + + - name: "saveCmsPage" + description: "Clicks on the Save button. Validates that the Success Message is present." + + - name: "setLayout" + description: "Sets the provided option for 'Layout', under 'Design' on the Page creation/edit page. " + +- filename: "AssignBlockToCMSPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AssignBlockToCMSPageActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AssignBlockToCMSPage" + description: "Goes to the Admin Pages grid page. Adds a Block to a CMS Page. Clicks on Save." + +- filename: "FillOutBlockContentActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/FillOutBlockContentActionGroup.xml" + module: "Cms" + actiongroups: + - name: "FillOutBlockContent" + description: "Fills in the Block Title, Identifier, Store View and Content. PLEASE NOTE: The values are Hardcoded using '_defaultBlock'." + +- filename: "AdminOpentCmsBlockActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminOpentCmsBlockActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AdminOpenCmsBlockActionGroup" + description: "" + +- filename: "RestoreLayoutSettingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/RestoreLayoutSettingActionGroup.xml" + module: "Cms" + actiongroups: + - name: "RestoreLayoutSetting" + description: "Sets the 'Default Page Layout' to '1 column'. PLEASE NOTE: The value is Hardcoded." + +- filename: "VerifyTinyMCEActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/VerifyTinyMCEActionGroup.xml" + module: "Cms" + actiongroups: + - name: "VerifyTinyMCEActionGroup" + description: "Goes to Admin CMS Page creation page. Validates that all of the Tiny MCE buttons are present." + + - name: "VerifyMagentoEntityActionGroup" + description: "Validates that the Insert Widget and Insert Variables buttons are present." + +- filename: "SearchBlockOnGridPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/SearchBlockOnGridPageActionGroup.xml" + module: "Cms" + actiongroups: + - name: "searchBlockOnGridPage" + description: "Searches the Admin CMS Blocks grid based on the provided Block." + + - name: "deleteBlock" + description: "Goes to the Admin CMS Blocks page. Filters the grid based on the provided Block. Deletes the Block via the grid." + +- filename: "AssertCMSPageContentActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AssertCMSPageContentActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AssertCMSPageContent" + description: "Validates that the CMS Page details are present and correct. PLEASE NOTE: The CMS Page data is Hardcoded, using '_duplicatedCMSPage'." + + - name: "AssertStoreFrontCMSPage" + description: "Validates that the provided CMS Page Title, Content and Heading are present and correct on a Storefront CMS Page." + +- filename: "AssertCMSPageInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AssertCMSPageInGridActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AssertCMSPageInGridActionGroup" + description: "Validates that the provided CMS Page is present in the Admin Pages grid." + +- filename: "NavigateToMediaFolderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/NavigateToMediaFolderActionGroup.xml" + module: "Cms" + actiongroups: + - name: "NavigateToMediaFolderActionGroup" + description: "Clicks on the provided Folder Name in the Storage folder tree." + +- filename: "AdminSelectCMSPageInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminSelectCMSPageInGridActionGroup.xml" + module: "Cms" + actiongroups: + - name: "AdminSelectCMSPageInGridActionGroup" + description: "Checks the Row for the provided Identifier on the Admin Pages grid page." + +- filename: "SelectImageFromMediaStorageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/SelectImageFromMediaStorageActionGroup.xml" + module: "Cms" + actiongroups: + - name: "clickBrowseBtnOnUploadPopup" + description: "Clicks on the Browse button in the 'Insert/edit image' model." + + - name: "VerifyMediaGalleryStorageActions" + description: "Validates that the Media Gallery 'Cancel'/'Create Folder' buttons are present." + + - name: "CreateImageFolder" + description: "Creates a folder in the Media Gallery based on the provided Folder." + + - name: "attachImage" + description: "Uploads the provided Image to Media Gallery." + + - name: "deleteImage" + description: "Deletes the selected Image from the Media Gallery." + + - name: "saveImage" + description: "Clicks on Insert File in the Media Gallery." + + - name: "fillOutUploadImagePopup" + description: "Fills in the Image Description and Height fields. PLEASE NOTE: The values are Hardcoded using 'ImageUpload'." + + - name: "verifyOversizeValidationMsg" + description: "Validates that the Oversize validation message is present and correct." + + - name: "verifyWrongExtensionValidationMsg" + description: "Validates that the Wrong Extensions validation message is present and correct." + +- filename: "DeletePageByUrlKeyActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/DeletePageByUrlKeyActionGroup.xml" + module: "Cms" + actiongroups: + - name: "DeletePageByUrlKeyActionGroup" + description: "Goes to the Admin CMS Pages page. Deletes a Page based on the provided URL Key. Validates that the Success Message is present and correct." + +- filename: "CreateNewPageWithAllValuesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithAllValuesActionGroup.xml" + module: "Cms" + actiongroups: + - name: "CreateNewPageWithAllValues" + description: "Goes to the Admin CMS creation page. Fills in the provided Page details (Title, Heading, URL, Store View and Hierarchy)." + + - name: "CreateNewPageWithAllValuesAndContent" + description: "" + +- filename: "CreateNewPageWithWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithWidgetActionGroup.xml" + module: "Cms" + actiongroups: + - name: "CreateNewPageWithWidget" + description: "Goes to Admin CMS Page creation page. Adds the provided Title, Category, Conditions and Widget. Clicks on Save. Validates that the Success Message is present and correct." + +- filename: "DeleteImageFromStorageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Cms/Test/Mftf/ActionGroup/DeleteImageFromStorageActionGroup.xml" + module: "Cms" + actiongroups: + - name: "DeleteImageFromStorageActionGroup" + description: "Deletes the provided Image from Storage." + +- filename: "StorefrontClickOnHeaderLogoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Theme/Test/Mftf/ActionGroup/StorefrontClickOnHeaderLogoActionGroup.xml" + module: "Theme" + actiongroups: + - name: "StorefrontClickOnHeaderLogoActionGroup" + description: "Goes to the Storefront. Clicks on the Logo." + +- filename: "NavigateToFaviconMediaFolderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Theme/Test/Mftf/ActionGroup/NavigateToFaviconMediaFolderActionGroup.xml" + module: "Theme" + actiongroups: + - name: "NavigateToFaviconMediaFolderActionGroup" + description: "Navigates to the Favicon Media folder in the 'Media Gallery'. Clicks on the provided Store Folder." + +- filename: "AdminUrlRewriteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/UrlRewrite/Test/Mftf/ActionGroup/AdminUrlRewriteActionGroup.xml" + module: "UrlRewrite" + actiongroups: + - name: "AdminAddUrlRewrite" + description: "Goes to the Admin Add URL Rewrite edit page. Fills in the provided URL details. Clicks on Save. Validates that the Success Message is present." + + - name: "AdminAddUrlRewriteForProduct" + description: "Adds the provided URL Rewrite details for a Product." + + - name: "AdminAddCustomUrlRewrite" + description: "Goes to the Admin URL Rewrite edit page. Adds the provided Custom URL Rewrite details. Clicks on Save. Validates that the Success Message is present." + + - name: "AdminUpdateUrlRewrite" + description: "Updates the URL Rewrite fields with the provided details." + + - name: "AdminUpdateCustomUrlRewrite" + description: "Updates the Custom URL Rewrite fields with the provided details." + +- filename: "StorefrontUrlRewriteRedirectActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/UrlRewrite/Test/Mftf/ActionGroup/StorefrontUrlRewriteRedirectActionGroup.xml" + module: "UrlRewrite" + actiongroups: + - name: "AssertStorefrontUrlRewriteRedirect" + description: "Goes to the provided New URL. Validates that the redirect works and the provided Category is present." + + - name: "AssertStorefrontProductRedirect" + description: "Goes to the provided New Product URL. Validates that the redirect works and the provided Product is present and correct." + +- filename: "AdminUrlRewriteGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/UrlRewrite/Test/Mftf/ActionGroup/AdminUrlRewriteGridActionGroup.xml" + module: "UrlRewrite" + actiongroups: + - name: "AdminSearchByRequestPath" + description: "Goes to the Admin URL Rewrite grid page. Searches the grid based on the provided Redirect Path. Validates that the provided Redirect Path, Type and Target Path are present and correct in the grid." + + - name: "AdminSearchUrlRewriteProductBySku" + description: "Goes to the Admin URL Rewrite grid page. Searches the grid based on the provided Product SKU. Clicks on the 1st row in the grid." + + - name: "AdminSearchDeletedUrlRewrite" + description: "Goes to the Admin URL Rewrite grid page. Searches the grid for the provided Request Path. Validates that it does NOT appear in the grid." + + - name: "AdminDeleteUrlRewrite" + description: "Goes to the Admin URL Rewrite grid page. Deletes the provided Request Path. Validates that the Success Message is present and correct." + + - name: "AssertPageByUrlRewriteIsNotFound" + description: "Validates that the provided Request Path does NOT exist on the Storefront. Validates that the 'Whoops' message is present and correct." + + - name: "AdminSearchAndSelectUrlRewriteInGrid" + description: "Goes to the Admin URL Rewrite grid page. Searches the grid for the provided Request Path. Clicks on Edit." + +- filename: "OpenPayPalButtonCheckoutPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Paypal/Test/Mftf/ActionGroup/OpenPayPalButtonCheckoutPageActionGroup.xml" + module: "Paypal" + actiongroups: + - name: "OpenPayPalButtonCheckoutPage" + description: "Clicks on 'Configure' for 'PayPal Express Checkout' on the Admin Configuration page. Expands the 'Advanced Settings' tab. Expands the 'Frontend Experience Settings' tab. Expands the 'Checkout Page' tab." + +- filename: "PayPalExpressCheckoutConfigurationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Paypal/Test/Mftf/ActionGroup/PayPalExpressCheckoutConfigurationActionGroup.xml" + module: "Paypal" + actiongroups: + - name: "ConfigPayPalExpressCheckout" + description: "Goes to the 'Configuration' page for 'Payment Methods'. Fills in the provided PayPal credentials and other details. Clicks on Save." + + - name: "CreatePayPalOrderWithSelectedPaymentMethodActionGroup" + description: "EXTENDS: CreateOrderToPrintPageActionGroup. Clicks on PayPal. Fills the PayPay details in the modal. PLEASE NOTE: The PayPal Payment credentials are Hardcoded using 'Payer'." + + - name: "addProductToCheckoutPage" + description: "Goes to the provided Category page on the Storefront. Adds the 1st Product to the Cart. Goes to Checkout. Select the Shipping Method. Selects PayPal as the Payment Method." + +- filename: "OtherPayPalConfigurationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Paypal/Test/Mftf/ActionGroup/OtherPayPalConfigurationActionGroup.xml" + module: "Paypal" + actiongroups: + - name: "EnablePayPalConfiguration" + description: "Expands the 'OTHER PAYPAL PAYMENT SOLUTIONS' tab on the Admin Configuration page. Enables the provided PayPal Config type for the provided Country Code." + + - name: "CheckEnableOptionPayPalConfiguration" + description: "Expands the 'OTHER PAYPAL PAYMENT SOLUTIONS' tab on the Admin Configuration page. Enables the provided PayPal Config type for the provided Country Code." + +- filename: "AdminSaveReviewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/AdminSaveReviewActionGroup.xml" + module: "Review" + actiongroups: + - name: "AdminSaveReviewActionGroup" + description: "" + +- filename: "AdminOpenReviewByUserNicknameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/AdminOpenReviewByUserNicknameActionGroup.xml" + module: "Review" + actiongroups: + - name: "AdminOpenReviewByUserNicknameActionGroup" + description: "" + +- filename: "StorefrontAssertReviewAtProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/StorefrontAssertReviewAtProductPageActionGroup.xml" + module: "Review" + actiongroups: + - name: "StorefrontAssertReviewAtProductPageActionGroup" + description: "" + +- filename: "AdminOpenReviewsPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/AdminOpenReviewsPageActionGroup.xml" + module: "Review" + actiongroups: + - name: "AdminOpenReviewsPageActionGroup" + description: "" + +- filename: "AdminOpenPendingReviewsPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/AdminOpenPendingReviewsPageActionGroup.xml" + module: "Review" + actiongroups: + - name: "AdminOpenPendingReviewsPageActionGroup" + description: "" + +- filename: "AdminDeleteReviewsByUserNicknameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/AdminDeleteReviewsByUserNicknameActionGroup.xml" + module: "Review" + actiongroups: + - name: "AdminDeleteReviewsByUserNicknameActionGroup" + description: "" + +- filename: "AdminChangeReviewStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Review/Test/Mftf/ActionGroup/AdminChangeReviewStatusActionGroup.xml" + module: "Review" + actiongroups: + - name: "AdminChangeReviewStatusActionGroup" + description: "" + +- filename: "StorefrontProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Swatches/Test/Mftf/ActionGroup/StorefrontProductActionGroup.xml" + module: "Swatches" + actiongroups: + - name: "StorefrontSelectSwatchOptionOnProductPage" + description: "" + + - name: "StorefrontSelectSwatchOptionOnProductPageAndCheckImage" + description: "" + +- filename: "AdminEditPropertiesTabForSwatchProductAtributeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Swatches/Test/Mftf/ActionGroup/AdminEditPropertiesTabForSwatchProductAtributeActionGroup.xml" + module: "Swatches" + actiongroups: + - name: "AdminAddSwatchOptionAndFillFieldsActionGroup" + description: "" + + - name: "AdminUpdateProductPreviewImageActionGroup" + description: "" + +- filename: "ColorPickerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Swatches/Test/Mftf/ActionGroup/ColorPickerActionGroup.xml" + module: "Swatches" + actiongroups: + - name: "setColorPickerByHex" + description: "Sets the provided HEX value in the provided Color Picker." + + - name: "assertSwatchColor" + description: "Validates that the provided Color Picker contains the provided Style." + + - name: "assertStorefrontSwatchColor" + description: "Validates that the Storefront Product has the provided Swatch with the provided Color." + + - name: "openSwatchMenuByIndex" + description: "Options the Swatch Menu based on the provided Index." + +- filename: "AddSwatchToProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Swatches/Test/Mftf/ActionGroup/AddSwatchToProductActionGroup.xml" + module: "Swatches" + actiongroups: + - name: "AddVisualSwatchToProductActionGroup" + description: "Adds the provided Visual Swatch Attribute and Options (2) to a Product on the Admin Product creation/edit page. Clicks on Save. Validates that the Success Message is present." + + - name: "AddVisualSwatchToProductWithStorefrontConfigActionGroup" + description: "EXTENDS: AddVisualSwatchToProductActionGroup. Add the provided Visual Swatch Attribute and Options (2) to a Product with Storefront Configurations." + +- filename: "StorefrontAddProductWithSwatchAttributeToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Swatches/Test/Mftf/ActionGroup/StorefrontAddProductWithSwatchAttributeToTheCartActionGroup.xml" + module: "Swatches" + actiongroups: + - name: "StorefrontAddProductWithSwatchesToTheCartActionGroup" + description: "" + + - name: "StorefrontUpdateCartConfigurableProductWithSwatches" + description: "" + +- filename: "DisplayOutOfStockProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogInventory/Test/Mftf/ActionGroup/DisplayOutOfStockProductActionGroup.xml" + module: "CatalogInventory" + actiongroups: + - name: "displayOutOfStockProduct" + description: "Goes to the 'Configuration' page for 'Inventory'. Enables 'Display Out of Stock Products'. Clicks on the Save button." + + - name: "noDisplayOutOfStockProduct" + description: "Goes to the 'Configuration' page for 'Inventory'. Disables 'Display Out of Stock Products'. Clicks on the Save button." + +- filename: "StorefrontAssertProductStockStatusActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogInventory/Test/Mftf/ActionGroup/StorefrontAssertProductStockStatusActionGroup.xml" + module: "CatalogInventory" + actiongroups: + - name: "StorefrontCheckProductStockStatus" + description: "" + +- filename: "FillPaymentInformationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/AuthorizenetAcceptjs/Test/Mftf/ActionGroup/FillPaymentInformationActionGroup.xml" + module: "AuthorizenetAcceptjs" + actiongroups: + - name: "FillPaymentInformation" + description: "Fill Payment Method with Authorize.net" + + - name: "GuestCheckoutAuthorizenetFillBillingAddress" + description: "Fill Billing Address as Guest with Authorize.net" + +- filename: "ConfigureAuthorizenetAcceptjsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/AuthorizenetAcceptjs/Test/Mftf/ActionGroup/ConfigureAuthorizenetAcceptjsActionGroup.xml" + module: "AuthorizenetAcceptjs" + actiongroups: + - name: "ConfigureAuthorizenetAcceptjs" + description: "Sets up the Authorize.net Accept JS configuration setting with a specified Payment action." + + - name: "DisableAuthorizenetAcceptjs" + description: "Disables the Authorize.net Accept JS configuration setting via the CLI." + + - name: "EnableAuthorizenetAcceptjs" + description: "" + + - name: "AssertAuthorizenetAcceptjsRequiredFieldsValidationIsPresentOnSave" + description: "" + +- filename: "ViewAndValidateOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/AuthorizenetAcceptjs/Test/Mftf/ActionGroup/ViewAndValidateOrderActionGroup.xml" + module: "AuthorizenetAcceptjs" + actiongroups: + - name: "ViewAndValidateOrderActionGroup" + description: "Validate the Order is Correct. Then Submit the Invoice." + + - name: "ViewAndValidateOrderActionGroupNoSubmit" + description: "Validate the Order is Correct. Do Not Submit the Invoice." + +- filename: "CheckingGiftOptionsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/GiftMessage/Test/Mftf/ActionGroup/CheckingGiftOptionsActionGroup.xml" + module: "GiftMessage" + actiongroups: + - name: "CheckingGiftOptionsActionGroup" + description: "Clicks on Checkout with Multiple Addresses. Clicks on Add Gift option. Validates that the Success Message is present and correct. PLEASE NOTE: The message is Hardcoded." + +- filename: "AdminDeleteCatalogRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminDeleteCatalogRuleActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminDeleteCatalogRuleActionGroup" + description: "Clicks on the Delete button on a Admin Catalog Price Rule edit page. Clicks on Ok. Validates that the provided Success Message is present and correct." + +- filename: "AssertCustomerGroupNotOnCatalogPriceRuleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AssertCustomerGroupNotOnCatalogPriceRuleFormActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AssertCustomerGroupNotOnCatalogPriceRuleFormActionGroup" + description: "Validate that the provided Customer Group is not present on the Catalog Price Rules creation/edit page." + +- filename: "AdminAssertCustomerGroupOnCatalogPriceRuleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminAssertCustomerGroupOnCatalogPriceRuleFormActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminAssertCustomerGroupOnCatalogPriceRuleForm" + description: "" + +- filename: "SaveAndApplyCatalogPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/SaveAndApplyCatalogPriceRuleActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "SaveAndApplyCatalogPriceRuleActionGroup" + description: "Clicks on Save and Apply. Validates that the Success Message is present and correct on the Admin Catalog Price Rule creation/edit page." + +- filename: "AssertCatalogPriceRuleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AssertCatalogPriceRuleFormActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AssertCatalogPriceRuleFormActionGroup" + description: "Validates that the provided Catalog Rule, Status, Websites and Customer Group details are present and correct on a Admin Catalog Price Rule creation/edit page." + +- filename: "AdminCreateNewCatalogPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminCreateNewCatalogPriceRuleActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminCreateNewCatalogPriceRuleActionGroup" + description: "Goes to the Admin Catalog Price Rule creation page. Fills in the provided Catalog Rule details. Selects the provided Customer Group." + +- filename: "AssertCatalogRuleInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AssertCatalogRuleInGridActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AssertCatalogRuleInGridActionGroup" + description: "Validates that the provided Catalog Rule Name, Status, Websites and Catalog Rule ID are present in the 1st row of the Admin Catalog Price Rule grid." + +- filename: "AdminOpenCatalogPriceRulePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminOpenCatalogPriceRulePageActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminOpenCatalogPriceRulePageActionGroup" + description: "" + +- filename: "CreateCatalogPriceRuleConditionWithAttributeAndOptionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/CreateCatalogPriceRuleConditionWithAttributeAndOptionActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "CreateCatalogPriceRuleConditionWithAttributeAndOptionActionGroup" + description: "Adds the provided Attribute Name, Select Value, Index A and Index B details to the 'Conditions' section on the Admin Catalog Price Rule creation/edit page." + +- filename: "CatalogSelectCustomerGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/CatalogSelectCustomerGroupActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "CatalogSelectCustomerGroupActionGroup" + description: "Selects the provided Customer Group Name on the Admin Catalog Price Rule creation/edit page." + +- filename: "CatalogPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/CatalogPriceRuleActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "newCatalogPriceRuleByUI" + description: "Goes to the Catalog Price Rule grid. Clicks on Add. Fills in the provided Catalog Rule details." + + - name: "createCatalogPriceRule" + description: "Clicks on the Add button. Fills Rule Name, Description, Website and Discount Value." + + - name: "CreateCatalogPriceRuleViaTheUi" + description: "" + + - name: "CreateCatalogPriceRuleConditionWithAttribute" + description: "Add Conditional Requirements to a Catalog Price Rule from the creation/edit page." + + - name: "applyCatalogPriceRules" + description: "Goes to the Catalog Price Rule grid page. Clicks on Apply Rules. Validates that the Success Message is present and correct." + + - name: "newCatalogPriceRuleByUIWithConditionIsSKU" + description: "EXTENDS: newCatalogPriceRuleByUI. Add a Catalog Price Rule Condition based on the provided SKU." + + - name: "newCatalogPriceRuleByUIWithConditionIsCategory" + description: "EXTENDS: newCatalogPriceRuleByUI. Add a Catalog Price Rule Condition based on the provided Category ID." + + - name: "selectGeneralCustomerGroupActionGroup" + description: "Selects the 'General' Customer Group for a Catalog Price Rule on the creation/edit page." + + - name: "selectNotLoggedInCustomerGroupActionGroup" + description: "Selects the 'NOT LOGGED IN' Customer Group for a Catalog Price Rule on the creation/edit page." + + - name: "OpenCatalogPriceRule" + description: "" + + - name: "RemoveCatalogPriceRule" + description: "" + +- filename: "AdminSearchCatalogRuleInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminSearchCatalogRuleInGridActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminSearchCatalogRuleInGridActionGroup" + description: "Goes to the Admin Catalog Price Rules grid page. Searches the grid for the provided Catalog Price Rule name." + +- filename: "AdminSaveAndApplyRulesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminSaveAndApplyRulesActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminSaveAndApplyRulesActionGroup" + description: "Clicks Save on a Admin Catalog Price Rule creation/edit page. Validates that the Success Message is present. Clicks Apply Rules. Validates that the Success Message is present." + +- filename: "AdminOpenNewCatalogPriceRuleFormPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminOpenNewCatalogPriceRuleFormPageActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminOpenNewCatalogPriceRuleFormPageActionGroup" + description: "Goes to the create Catalog Price Rule page." + +- filename: "AdminSelectCatalogRuleFromGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/AdminSelectCatalogRuleFromGridActionGroup.xml" + module: "CatalogRule" + actiongroups: + - name: "AdminSelectCatalogRuleFromGridActionGroup" + description: "Clicks on the Admin Catalog Price Rule row that contains the provided Catalog Price Rule name." + +- filename: "VerifySubscribedNewsletterDisplayedActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Newsletter/Test/Mftf/ActionGroup/VerifySubscribedNewsletterDisplayedActionGroup.xml" + module: "Newsletter" + actiongroups: + - name: "StorefrontCreateNewAccountNewsletterChecked" + description: "EXTENDS: SignUpNewUserFromStorefrontActionGroup. Clicks on 'Sign Up for Newsletter'. Validates that the Subscription Confirmation message is present and correct." + + - name: "StorefrontCreateNewAccountNewsletterUnchecked" + description: "EXTENDS: SignUpNewUserFromStorefrontActionGroup. Validates that the you are NOT subscribed message is present and correct." + + - name: "CheckSubscribedNewsletterActionGroup" + description: "Goes to the Storefront Newsletter Management page. Validates that the 'Subscription' checkbox is checked." + +- filename: "AdminNewsletterTemplateActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Newsletter/Test/Mftf/ActionGroup/AdminNewsletterTemplateActionGroup.xml" + module: "Newsletter" + actiongroups: + - name: "SwitchToPreviewIframeActionGroup" + description: "" + +- filename: "StorefrontCheckCategoryConfigurableProductWithUpdatedPriceActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontCheckCategoryConfigurableProductWithUpdatedPriceActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "StorefrontCheckCategoryConfigurableProductWithUpdatedPriceActionGroup" + description: "Validates that the provided Product Name and Price for a Configurable Product are present on a Storefront Category page." + +- filename: "ConfigurableProductAttributeNameDesignActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/ConfigurableProductAttributeNameDesignActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "GotoCatalogProductsPage" + description: "Goes to the Admin Products grid via the Admin Side Menu." + + - name: "GotoConfigurableProductPage" + description: "Clicks on create Configurable Product from the Admin Products grid page." + + - name: "FillAllRequiredFields" + description: "Fills the Product Name, Price and Weight fields. Clicks on 'Create Configurations'. Clicks on 'Create New Attribute'." + + - name: "CreateNewAttribute" + description: "Creates a new Product Attribute via the Admin Products creation/edit page. PLEASE NOTE: The Product Attributes are Hardcoded." + + - name: "DeleteCreatedAttribute" + description: "Deletes the Configurable Product Attribute." + +- filename: "StorefrontCategoryActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontCategoryActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "StorefrontCheckCategoryConfigurableProduct" + description: "Validates that the provided Configurable Product is present and correct on a Category page." + + - name: "StorefrontCheckCategoryOutOfStockConfigurableProduct" + description: "Validates that the provided Configurable Product is present and correct on a Category page." + +- filename: "AdminCreateApiConfigurableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminCreateApiConfigurableProductActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "AdminCreateApiConfigurableProductActionGroup" + description: "Creates a Configurable Product with 2 Product Options via the API." + + - name: "AdminCreateApiConfigurableProductWithHiddenChildActionGroup" + description: "EXTENDS: AdminCreateApiConfigurableProductActionGroup. Adds 2 Hidden Product Options." + +- filename: "ConfigurableProductCheckoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/ConfigurableProductCheckoutActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "CheckConfigurableProductInCheckoutCartItemsActionGroup" + description: "Validates that the Configurable Product is present and correct in the Cart area on the Checkout page." + +- filename: "StorefrontAddConfigurableProductToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontAddConfigurableProductToTheCartActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "StorefrontAddConfigurableProductToTheCartActionGroup" + description: "Goes to the provided Storefront URL. Selects the provided Product Option under the Product Attribute. Fills in the provided Quantity. Clicks Add to Cart. Validates that the Success Message is present." + +- filename: "StorefrontProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontProductActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "StorefrontCheckConfigurableProduct" + description: "Goes to the provided Storefront Product page. Validates that the Product details are present and correct." + + - name: "VerifyOptionInProductStorefront" + description: "Validates that the provided Option Code and Option Name are present and correct on a Configurable Product page." + + - name: "SelectSingleAttributeAndAddToCart" + description: "Selects a Product Option. Clicks 'Add to Cart'. Validates that the Product Added Success message appears." + + - name: "storefrontCheckConfigurableProductOptions" + description: "Validates that the Options for a Configurable Product are present and correct." + + - name: "assertOptionImageInStorefrontProductPage" + description: "Validates that the provided Product Image is present when the provided Product Option is selected." + + - name: "AssertOptionImageAndPriceInStorefrontProductActionGroup" + description: "Validates that the provided Product Image and Price are present when the provided Product Option is selected." + + - name: "assertConfigurableProductWithSpecialPriceOnStorefrontProductPage" + description: "Validates that Special Price for a Configurable Product is present and correct when the provided Product Option is selected." + +- filename: "StorefrontProductCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontProductCartActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "StorefrontCheckCartConfigurableProductActionGroup" + description: "Validates that the provided Option Price and Option Quantity is present and correct in the Mini Shopping Cart on the Storefront." + + - name: "StorefrontOpenMinicartAndCheckConfigurableProductActionGroup" + description: "Validates that the provided Option Price is present and correct in the Mini Shopping Cart on the Storefront." + +- filename: "AdminAddOptionsToAttributeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminAddOptionsToAttributeActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "addOptionsToAttributeActionGroup" + description: "Adds 5 provided Options to a new Attribute on the Configurable Product creation/edit page." + +- filename: "StorefrontProductAttributeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontProductAttributeActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "SelectStorefrontSideBarAttributeOption" + description: "Goes to the provided Storefront Category page. Validates that the provided Attribute Label is present and correct." + +- filename: "StorefrontCompareActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/StorefrontCompareActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "StorefrontCheckCompareConfigurableProductActionGroup" + description: "Validates that the Configurable Product is present and correct in the Compare Product area." + +- filename: "VerifyProductTypeOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/VerifyProductTypeOrderActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "VerifyProductTypeOrder" + description: "Validates that the 'Configurable Product' option is present in the 'Add Product' dropdown menu on the Products grid page." + +- filename: "AdminConfigurableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "viewConfigurableProductInAdminGrid" + description: "Goes to the Admin Product grid page. Validates the provided Configurable Product is present and correct in the grid." + + - name: "createConfigurableProduct" + description: "Goes to the Admin Product grid page. Creates a Configurable Product using the default Product Options." + + - name: "generateConfigurationsByAttributeCode" + description: "Generates the Product Configurations for the provided Attribute Code on the Configurable Product creation/edit page." + + - name: "createOptionsForAttribute" + description: "" + + - name: "createConfigurationsForAttribute" + description: "EXTENDS: generateConfigurationsByAttributeCode. Clicks on the Save button. Clicks on the Confirm button." + + - name: "createConfigurationsForAttributeWithImages" + description: "EXTENDS: generateConfigurationsByAttributeCode. Adds the provided Attribute Image to the provided Attribute Code." + + - name: "createConfigurationsForTwoAttribute" + description: "EXTENDS: generateConfigurationsByAttributeCode. Generates the Product Configurations for the 2 provided Attribute Codes on the Configurable Product creation/edit page." + + - name: "saveConfiguredProduct" + description: "Save the Configurable Product on the Configurable Product creation/edit page. Validates that the Success Message is present." + + - name: "GenerateAndSaveConfiguredProductAfterSettingOptions" + description: "" + + - name: "addNewProductConfigurationAttribute" + description: "Generates the Product Configurations for the 2 provided Attribute Names on the Configurable Product creation/edit page." + + - name: "selectCreatedAttributeAndCreateTwoOptions" + description: "" + + - name: "changeProductConfigurationsInGrid" + description: "Edit the Product Configuration via the Admin Product grid page." + + - name: "changeProductConfigurationsInGridExceptSku" + description: "EXTENDS: changeProductConfigurationsInGrid. Removes 'fillFieldSkuForFirstAttributeOption' and 'fillFieldSkuForSecondAttributeOption'." + + - name: "addProductToConfigurationsGrid" + description: "Adds the provided Product SKU to the provided Product Name." + + - name: "addUniqueImageToConfigurableProductOption" + description: "Adds the provided Image to a Configurable Product on the Admin Product creation/edit page." + + - name: "addUniquePriceToConfigurableProductOption" + description: "On the 'Step 3: Bulk Images, Price and Quantity' page of the 'Create Product Configurations' model click on 'Apply unique prices...'. Select provided Option. Fill price." + + - name: "addUniqueQuantityToConfigurableProductOption" + description: "" + + - name: "saveConfigurableProductWithNewAttributeSet" + description: "Clicks on 'Save'. Clicks radio for '...new Attribute Set...' in the 'Choose Affected Attribute Set' modal. Clicks on 'Confirm' in the model on the Configurable Product creation/edit page." + + - name: "saveConfigurableProductAddToCurrentAttributeSet" + description: "Clicks on 'Save'. Clicks on 'Confirm' in the 'Choose Affected Attribute Set' model on the Configurable Product creation/edit page." + + - name: "assertConfigurableProductOnAdminProductPage" + description: "Validates that the provided Configurable Product Name, SKU and Price are present and correct on the Configurable Product creation/edit page. PLEASE NOTE: The Product Data is Hardcoded." + + - name: "AdminConfigurableWizardMoveToNextStepActionGroup" + description: "Click on the 'Next' button in the 'Create Product Configurations' panel on the Configurable Product creation/edit page." + + - name: "AdminConfigurableProductDisableConfigurationsActionGroup" + description: "" + + - name: "StartCreateConfigurationsForAttribute" + description: "" + +- filename: "AdminOrderConfigurableProductActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminOrderConfigurableProductActionGroup.xml" + module: "ConfigurableProduct" + actiongroups: + - name: "AdminOrderConfigureConfigurableProduct" + description: "" + +- filename: "CreateBackupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backup/Test/Mftf/ActionGroup/CreateBackupActionGroup.xml" + module: "Backup" + actiongroups: + - name: "createSystemBackup" + description: "Creates a System Backup using provided Backup Entity." + + - name: "createMediaBackup" + description: "Creates a Media Backup using provided Backup Entity." + + - name: "createDatabaseBackup" + description: "Creates a Database Backup using provided Backup Entity." + +- filename: "DeleteBackupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Backup/Test/Mftf/ActionGroup/DeleteBackupActionGroup.xml" + module: "Backup" + actiongroups: + - name: "deleteBackup" + description: "Deletes a Backup using provided Backup Entity." + +- filename: "AdminCreateBlockWithWidgetActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogWidget/Test/Mftf/ActionGroup/AdminCreateBlockWithWidgetActionGroup.xml" + module: "CatalogWidget" + actiongroups: + - name: "AdminCreateBlockWithWidget" + description: "Inserts a Widget into a Block on the Block creation/edit page." + +- filename: "AdminSwitchIndexerToActionModeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Indexer/Test/Mftf/ActionGroup/AdminSwitchIndexerToActionModeActionGroup.xml" + module: "Indexer" + actiongroups: + - name: "AdminSwitchIndexerToActionModeActionGroup" + description: "" + +- filename: "IndexerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Indexer/Test/Mftf/ActionGroup/IndexerActionGroup.xml" + module: "Indexer" + actiongroups: + - name: "updateIndexerBySchedule" + description: "Goes to the Index Management page. Checks the provided Indexer Name. Selects 'Update by Schedule'. Clicks on Submit." + + - name: "updateIndexerOnSave" + description: "Goes to the Index Management page. Checks the provided Indexer Name. Selects 'Update on Save'. Clicks on Submit." + +- filename: "AdminSwitchAllIndexerToActionModeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Indexer/Test/Mftf/ActionGroup/AdminSwitchAllIndexerToActionModeActionGroup.xml" + module: "Indexer" + actiongroups: + - name: "AdminSwitchAllIndexerToActionModeActionGroup" + description: "" + +- filename: "EmailTemplateActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Email/Test/Mftf/ActionGroup/EmailTemplateActionGroup.xml" + module: "Email" + actiongroups: + - name: "CreateNewTemplate" + description: "Clicks on Add New Template. Fills the Template details. Clicks on Save. PLEASE NOTE: The values are Hardcoded." + + - name: "CreateCustomTemplate" + description: "" + + - name: "FindAndOpenEmailTemplate" + description: "" + + - name: "DeleteEmailTemplate" + description: "Clicks on Delete Template. Accepts the Popup. Validates that the Email Template is NOT present in the Email Templates Grid." + + - name: "PreviewEmailTemplate" + description: "" + + - name: "AssertEmailTemplateContent" + description: "" + +- filename: "AdminCreateCustomerGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminCreateCustomerGroupActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminCreateCustomerGroupActionGroup" + description: "Goes to the Customer Groups creation page. Fills Name. Selects Tax Class. Clicks on Save. Validate that the Success Message is present and correct." + +- filename: "StorefrontCustomerAddressBookNumberOfAddressesActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerAddressBookNumberOfAddressesActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerAddressBookNumberOfAddresses" + description: "Validate that the Customer Address count is present and correct on the Storefront Customer Dashboard page." + +- filename: "CreateCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/CreateCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "CreateCustomerActionGroup" + description: "Goes to the Add Customers page via the Admin Nav Menu. Fills in the Customer details. Clicks on Save. PLEASE NOTE: The Customer data is Hardcoded using 'NewCustomerData'." + +- filename: "AssertStorefrontPasswordAutocompleteOffActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertStorefrontPasswordAutocompleteOffActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertStorefrontPasswordAutoCompleteOffActionGroup" + description: "Goes to the Storefront Customer Sign-In page. Validates that the Password field does NOT contain the 'autocomplete' attribute." + +- filename: "AssertMessageCustomerCreateAccountActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertMessageCustomerCreateAccountActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertMessageCustomerCreateAccountActionGroup" + description: "Validates that the provided Message/Message Type are present and correct." + +- filename: "AdminAssertCustomerNoDefaultShippingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerNoDefaultShippingAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerNoDefaultShippingAddress" + description: "Validates that a Customer does NOT have a Default Shipping Address assigned. PLEASE NOTE: The error message is hardcoded." + +- filename: "AdminAssertCustomerNoDefaultBillingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerNoDefaultBillingAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerNoDefaultBillingAddress" + description: "Validates that a Customer does NOT have a Default Billing Address assigned. PLEASE NOTE: The error message is hardcoded." + +- filename: "AdminCustomerShopingCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminCustomerShopingCartActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAddProductToShoppingCartActionGroup" + description: "Adds the provided Product Name to the Cart on the Admin Customer creation/edit page." + +- filename: "AdminAssertCustomerDefaultBillingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerDefaultBillingAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerDefaultBillingAddress" + description: "Validates that the provided Default Customer Billing Address details are present and correct on the Customer creation/edit page. Under the section 'Addresses'." + +- filename: "AssertCustomerGroupNotInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertCustomerGroupNotInGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertCustomerGroupNotInGridActionGroup" + description: "Filters the Admin Customers grid for the Customer Group (Code). Validates that the grid is empty." + +- filename: "StorefrontClickCreateAnAccountCustomerAccountCreationFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontClickCreateAnAccountCustomerAccountCreationFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontClickCreateAnAccountCustomerAccountCreationFormActionGroup" + description: "Clicks on the Storefront Header 'Create Account' link." + +- filename: "AdminCustomerGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminCustomerGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminFilterCustomerByEmail" + description: "Goes to the Customer grid page. Filter results based on provided Customer Email Address." + +- filename: "StorefrontClickSignInButtonActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontClickSignInButtonActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontClickSignInButtonActionGroup" + description: "Click on the Storefront Header 'Sign-In' link." + +- filename: "AdminAssertCustomerAccountInformationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerAccountInformationActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerAccountInformation" + description: "Validates that the provided Customer details are present and correct on the Customer creation/edit page. Under the 'Account Information' section." + +- filename: "AdminAssertCustomerGroupOnProductFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerGroupOnProductFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerGroupOnProductForm" + description: "" + +- filename: "StorefrontOpenCustomerLoginPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontOpenCustomerLoginPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontOpenCustomerLoginPageActionGroup" + description: "Goes to the Storefront Customer Sign-In page." + +- filename: "SetGroupCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/SetGroupCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "SetCustomerGroupForSelectedCustomersViaGrid" + description: "Clicks on the 'Actions' dropdown menu. Clicks on 'Assign a Customer Group'. Clicks on 'Ok'." + +- filename: "AdminFilterCustomerGroupByNameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminFilterCustomerGroupByNameActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminFilterCustomerGroupByNameActionGroup" + description: "Filters the Admin Customers grid by the provided Customer Group Name." + +- filename: "AssertMessageCustomerLoginActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertMessageCustomerLoginActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertMessageCustomerLoginActionGroup" + description: "Validates that the provided Message/Message Type are present and correct." + +- filename: "AdminEditCustomerAddressSetDefaultShippingAndBillingActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminEditCustomerAddressSetDefaultShippingAndBillingActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminEditCustomerAddressSetDefaultShippingAndBilling" + description: "EXTENDS: AdminEditCustomerAddressesFrom. Removes 'selectState' and 'fillZipCode'." + +- filename: "StorefrontAssertSuccessLoginToStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontAssertSuccessLoginToStorefrontActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontAssertSuccessLoginToStorefront" + description: "EXTENDS: LoginToStorefrontActionGroup. Validates that the provided Customer name is present and correct." + +- filename: "SignUpNewUserFromStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/SignUpNewUserFromStorefrontActionGroup.xml" + module: "Customer" + actiongroups: + - name: "SignUpNewUserFromStorefrontActionGroup" + description: "Goes to the Storefront. Clicks on 'Create Account'. Fills in the provided Customer details, excluding Newsletter Sign-Up. Clicks on 'Create Account' button. Validate that the Customer details are present and correct." + + - name: "StorefrontCreateCustomerSignedUpNewsletterActionGroup" + description: "Goes to the Storefront. Clicks on 'Create Account'. Fills in the provided Customer details, including Newsletter Sign-Up. Clicks on 'Create Account' button." + + - name: "StorefrontFillRegistrationFormActionGroup" + description: "" + + - name: "SaveRegistrationFormActionGroup" + description: "" + + - name: "AssertSignedUpNewsletterActionGroup" + description: "Validates that the provided Customer details are present and correct on the Storefront Customer Dashboard page." + + - name: "EnterCustomerAddressInfo" + description: "Fills in the provided Customer details (First/Last Name, Company, Phone # and Address) on the Admin Customer creation/edit page. Clicks on the Save button." + + - name: "EnterCustomerAddressInfoFillState" + description: "EXTENDS: EnterCustomerAddressInfo. Fills the State field." + + - name: "VerifyCustomerBillingAddress" + description: "Goes to the Storefront Customer Dashboard Address area. Validates that the provided Customer Billing Address is present and correct on the Storefront Customer Dashboard Address section." + + - name: "VerifyCustomerShippingAddress" + description: "Goes to the Storefront Customer Dashboard Address area. Validates that the provided Customer Shipping Address is present and correct." + + - name: "VerifyCustomerBillingAddressWithState" + description: "Goes to the Storefront Customer Dashboard Address area. Validates that the provided Customer Billing Address, including the State, is present and correct." + + - name: "VerifyCustomerShippingAddressWithState" + description: "Goes to the Storefront Customer Dashboard Address area. Validates that the provided Customer Shipping Address, including the State, is present and correct." + + - name: "VerifyCustomerNameOnFrontend" + description: "Goes to the Storefront Customer Dashboard page. Validates that the Customer First/Last Name is present and correct." + + - name: "SignUpNewCustomerStorefrontActionGroup" + description: "EXTENDS: SignUpNewUserFromStorefrontActionGroup. Adds a waitForPageLoad action to the Action Group. Removes the action for 'seeThankYouMessage'." + +- filename: "AssertCustomerGroupNotOnProductFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertCustomerGroupNotOnProductFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertCustomerGroupNotOnProductFormActionGroup" + description: "Clicks on 'Advanced Pricing' on the Admin Customers creation/edit page. Validates that the provided Customer Group does NOT appear in the dropdown menu." + +- filename: "VerifyGroupCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/VerifyGroupCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "VerifyCustomerGroupForCustomer" + description: "Clicks on the Edit link for the provided Customer Email Address." + +- filename: "AdminDeleteAddressInCustomersAddressGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminDeleteAddressInCustomersAddressGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminDeleteAddressInCustomersAddressGrid" + description: "Deletes a Customer Address from the Customer creation/edit page under the 'Addresses' section." + +- filename: "AssertStorefrontCustomerSavedCardActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertStorefrontCustomerSavedCardActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertStorefrontCustomerSavedCardActionGroup" + description: "" + +- filename: "NavigateCustomerGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/NavigateCustomerGroupActionGroup.xml" + module: "Customer" + actiongroups: + - name: "NavigateToCustomerGroupPage" + description: "Goes to the Admin Customer Groups page." + +- filename: "StorefrontFillBillingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontFillBillingAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontFillBillingAddressActionGroup" + description: "" + +- filename: "StorefrontRegisterCustomerFromOrderSuccessPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontRegisterCustomerFromOrderSuccessPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontRegisterCustomerFromOrderSuccessPage" + description: "Clicks on 'Create Account' on the Storefront Checkout Success page. Fills in the provided Customer details. Clicks on 'Create Account'. Validates that the Success Message is present and correct." + +- filename: "AssertMessageCustomerChangeAccountInfoActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertMessageCustomerChangeAccountInfoActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertMessageCustomerChangeAccountInfoActionGroup" + description: "Validates that the provided Message/Message Type are present and correct." + +- filename: "StorefrontOpenCustomerAccountInfoEditPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontOpenCustomerAccountInfoEditPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontOpenCustomerAccountInfoEditPageActionGroup" + description: "Goes to the Storefront Customer Edit page." + +- filename: "AdminFilterCustomerByNameActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminFilterCustomerByNameActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminFilterCustomerByName" + description: "Filters the Admin Customers grid by the provided Name." + +- filename: "AssertCustomerAccountPageTitleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertCustomerAccountPageTitleActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertCustomerAccountPageTitleActionGroup" + description: "Validates that the provided Page Title is present and correct on the Storefront Customer Dashboard." + +- filename: "AdminAssertNumberOfRecordsInCustomersAddressGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertNumberOfRecordsInCustomersAddressGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertNumberOfRecordsInCustomersAddressGrid" + description: "Validates that the Number of Records listed on the Customer grid page is present and correct." + +- filename: "AdminCreateCustomerWithDefaultAddressWithoutPhoneActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminCreateCustomerWithDefaultAddressWithoutPhoneActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminCreateCustomerWithDefaultAddressWithoutPhoneActionGroup" + description: "" + +- filename: "AssertCustomerResetPasswordActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertCustomerResetPasswordActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertCustomerResetPasswordActionGroup" + description: "Validates that the provided URL is present and correct. Validates that the provided Message/Message Type is present and correct." + +- filename: "AdminUpdateCustomerGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminUpdateCustomerGroupActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminUpdateCustomerGroupByEmailActionGroup" + description: "Goes to the Admin Customers grid page. Filters the grid for the provided Email Address. Edits the Customer. Updates the Customer Group with the provided Customer Group. Clicks on Save." + +- filename: "AdminConfigCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminConfigCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "SetCustomerDataLifetimeActionGroup" + description: "Goes to the Customer Configuration page. Fills Customer Data Lifetime. Clicks on Save. Validates that the Success message is present." + +- filename: "DeleteCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/DeleteCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "DeleteCustomerActionGroup" + description: "Goes to the Admin Customers grid page. Deletes a Customer based on the provided Last Name." + + - name: "DeleteCustomerByEmailActionGroup" + description: "Goes to the Admin Customers grid page. Deletes a Customer based on the provided Email Address." + +- filename: "AdminResetFilterInCustomerAddressGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerAddressGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminResetFilterInCustomerAddressGrid" + description: "Clears the Admin Customer Address grid Filters. Sets the grid view to 'Default View'." + +- filename: "StorefrontCustomerLogoutActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerLogoutActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerLogoutActionGroup" + description: "Goes to the Storefront Customer Logout page." + + - name: "StorefrontSignOutActionGroup" + description: "Clicks on Customer Account. Clicks on 'Sign-Out'. Validates that the success message is present and correct. PLEASE NOTE: The Success Message is hardcoded." + +- filename: "FillNewCustomerAddressRequiredFieldsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/FillNewCustomerAddressRequiredFieldsActionGroup.xml" + module: "Customer" + actiongroups: + - name: "FillNewCustomerAddressRequiredFieldsActionGroup" + description: "" + +- filename: "AdminAssertErrorMessageCustomerGroupAlreadyExistsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertErrorMessageCustomerGroupAlreadyExistsActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertErrorMessageCustomerGroupAlreadyExists" + description: "" + +- filename: "AdminSaveCustomerAndAssertSuccessMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminSaveCustomerAndAssertSuccessMessageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminSaveCustomerAndAssertSuccessMessage" + description: "Clicks on the Save button. Validates that the Success Message is present and correct. PLEASE NOTE: The message is Hardcoded." + +- filename: "AdminAssertCustomerGroupOnCustomerFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerGroupOnCustomerFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerGroupOnCustomerForm" + description: "" + +- filename: "AssertCustomerGroupOnCustomerFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertCustomerGroupOnCustomerFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertCustomerGroupOnCustomerFormActionGroup" + description: "Validates that the provided Customer Group is selected on the Admin Customer edit page." + +- filename: "StorefrontAddCustomerAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontAddCustomerAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontAddNewCustomerAddressActionGroup" + description: "Goes to the Storefront Customer Add New Address page. Fills in the provided Address details. Clicks on Save." + + - name: "StorefrontAddCustomerDefaultAddressActionGroup" + description: "Goes to the Storefront Customer Add New Default Address page. Fills in the provided Address details. Clicks on Save." + +- filename: "AdminFilterCustomerGridByEmailActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminFilterCustomerGridByEmailActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminFilterCustomerGridByEmail" + description: "Filters the Admin Customers grid by the provided Email Address." + +- filename: "AdminSaveCustomerAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminSaveCustomerAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminSaveCustomerAddressActionGroup" + description: "" + +- filename: "AdminDeleteCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminDeleteCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminDeleteCustomerActionGroup" + description: "Goes to the Customers grid page. Check the row for the provided Customer Email Address. Delete the Customer." + +- filename: "AssertAuthorizationPopUpPasswordAutoCompleteOffActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertAuthorizationPopUpPasswordAutoCompleteOffActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertAuthorizationPopUpPasswordAutoCompleteOffActionGroup" + description: "Validates that the Storefront Customer Sign-In popup form does NOT contain the 'autocomplete=off' attribute." + +- filename: "AdminEditCustomerAddressesFromActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminEditCustomerAddressesFromActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminEditCustomerAddressesFrom" + description: "Adds the provided Address to a Customer from the Admin Customers creation/edit page." + + - name: "AdminEditCustomerAddressSetDefaultShippingAndBilling" + description: "EXTENDS: AdminEditCustomerAddressesFrom. Clicks on 'Set Default' for Billing/Shipping." + + - name: "AdminEditCustomerAddressNoZipNoState" + description: "EXTENDS: AdminEditCustomerAddressesFrom. Removes 'selectState' and 'fillZipCode'. Clicks on 'Set Default' for Billing/Shipping." + + - name: "SelectDropdownCustomerAddressAttributeValueActionGroup" + description: "Selects the provided Option in the provided Customer Address Attribute drop down menu. Clicks on Save." + +- filename: "AssertCustomerLoggedInActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AssertCustomerLoggedInActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AssertCustomerWelcomeMessageActionGroup" + description: "Validates that the Welcome message is present and correct, including the provided Customers Full Name." + +- filename: "SwitchAccountActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml" + module: "Customer" + actiongroups: + - name: "SignOut" + description: "Click on the Backend Admin current Admin User menu. Click on 'Logout'. Validate that you are logged out." + +- filename: "StorefrontAssertRegistrationPageFieldsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontAssertRegistrationPageFieldsActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontAssertRegistrationPageFields" + description: "" + +- filename: "AdminAssertCustomerGroupPresentInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerGroupPresentInGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerGroupPresentInGrid" + description: "" + +- filename: "OpenStorefrontStoredPaymentMethodsPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/OpenStorefrontStoredPaymentMethodsPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "OpenStorefrontCustomerStoredPaymentMethodsPageActionGroup" + description: "" + +- filename: "StorefrontFillCustomerLoginFormWithWrongPasswordActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontFillCustomerLoginFormWithWrongPasswordActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontFillCustomerLoginFormWithWrongPasswordActionGroup" + description: "EXTENDS: StorefrontFillCustomerLoginFormActionGroup. Removes 'fillPassword'. Fills in an invalid Password." + +- filename: "StorefrontClickSignOnCustomerLoginFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontClickSignOnCustomerLoginFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontClickSignOnCustomerLoginFormActionGroup" + description: "Click on the Customer Sign In button on the Storefront Customer Sign-In page." + +- filename: "StorefrontCustomerAddressBookNotContainsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerAddressBookNotContainsActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerAddressBookNotContains" + description: "Validate that the provided Address does NOT appear in the Storefront Customer Address list." + +- filename: "StorefrontOpenMyAccountPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontOpenMyAccountPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontOpenMyAccountPageActionGroup" + description: "" + +- filename: "AdminDeleteCustomerGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminDeleteCustomerGroupActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminDeleteCustomerGroupActionGroup" + description: "Goes to the Customer Groups grid page. Filter results based on provided Customer Group Name. Delete Customer from grid page." + +- filename: "FillCustomerSignInPopupFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/FillCustomerSignInPopupFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "FillCustomerSignInPopupFormActionGroup" + description: "Fills in the provided Customer details (Email and Password) in the Customer Sign In modal on the Storefront Checkout page. Clicks on Sign In." + +- filename: "LoginToStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/LoginToStorefrontActionGroup.xml" + module: "Customer" + actiongroups: + - name: "LoginToStorefrontActionGroup" + description: "Goes to the Storefront Customer Sign In page. Logs in using the provided Customer." + +- filename: "StorefrontFillCustomerAccountCreationFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontFillCustomerAccountCreationFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontFillCustomerAccountCreationFormActionGroup" + description: "Fills in the provided Customer details on the Storefront Customer creation page." + +- filename: "OpenEditCustomerFromAdminActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/OpenEditCustomerFromAdminActionGroup.xml" + module: "Customer" + actiongroups: + - name: "OpenEditCustomerFromAdminActionGroup" + description: "Goes to the Admin Customers grid page. Filters the grid based on the provided Customer. Clicks on Edit." + + - name: "OpenEditCustomerAddressFromAdminActionGroup" + description: "Filters the Admin Customers Addresses based on the provided Address. Clicks on Edit." + + - name: "DeleteCustomerFromAdminActionGroup" + description: "Goes to the Admin Customers grid page. Deletes the provided Customer from the grid. Validates that the Success message is present and correct." + + - name: "AdminClearCustomersFiltersActionGroup" + description: "Goes to the Admin Customers grid page. Clicks on 'Clear Filters'." + +- filename: "AdminEditCustomerAddressNoZipNoStateActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminEditCustomerAddressNoZipNoStateActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminEditCustomerAddressNoZipNoState" + description: "EXTENDS: AdminEditCustomerAddressesFrom. Removes 'selectState' and 'fillZipCode'. Clicks on 'Set Default' for Billing/Shipping." + +- filename: "OpenMyAccountPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/OpenMyAccountPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "OpenMyAccountPageActionGroup" + description: "Clicks on the Storefront Customer menu in the Header. Clicks on 'My Account'." + +- filename: "StorefrontCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "CustomerLogoutStorefrontByMenuItemsActionGroup" + description: "Click on the Storefront Current Customer menu. Click on Logout." + +- filename: "StorefrontCustomerChangeEmailActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerChangeEmailActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerChangeEmailActionGroup" + description: "Change the Customer Email Address for a Customer Account via the Storefront Customer Dashboard page." + +- filename: "LoginToStorefrontWithEmailAndPasswordActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/LoginToStorefrontWithEmailAndPasswordActionGroup.xml" + module: "Customer" + actiongroups: + - name: "LoginToStorefrontWithEmailAndPassword" + description: "Goes to the Storefront Customer Sign In page. Logs in using the provided Email and Password." + +- filename: "NavigateThroughCustomerTabsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/NavigateThroughCustomerTabsActionGroup.xml" + module: "Customer" + actiongroups: + - name: "NavigateThroughCustomerTabsActionGroup" + description: "Clicks on the provided Storefront Customer Dashboard Side Bar tab names." + +- filename: "StorefrontOpenCustomerAccountCreatePageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontOpenCustomerAccountCreatePageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontOpenCustomerAccountCreatePageActionGroup" + description: "Goes to the Storefront Customer Create page." + +- filename: "AdminResetFilterInCustomerGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminResetFilterInCustomerGrid" + description: "Clears the Admin Customer grid Filters. Sets the grid view to 'Default View'." + +- filename: "AdminAssertCustomerDefaultShippingAddressActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerDefaultShippingAddressActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerDefaultShippingAddress" + description: "Validates that the provided Default Customer Shipping Address details are present and correct on the Customer creation/edit page. Under the section 'Addresses'." + +- filename: "AdminAssertAddressInCustomersAddressGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertAddressInCustomersAddressGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertAddressInCustomersAddressGrid" + description: "Validates that the provided Customer Address is present in the Customer Address grid on the Customer creation/edit page. Under the 'Addresses' section." + +- filename: "StorefrontCustomerAddressBookContainsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerAddressBookContainsActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerAddressBookContains" + description: "Validate that the provided Address appears in the Storefront Customer Address list." + +- filename: "AdminOpenCustomerEditPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminOpenCustomerEditPageActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminOpenCustomerEditPageActionGroup" + description: "Goes to the Admin Customer Edit page for the provided Customer ID #." + +- filename: "EditCustomerAddressesFromAdminActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/EditCustomerAddressesFromAdminActionGroup.xml" + module: "Customer" + actiongroups: + - name: "EditCustomerAddressesFromAdminActionGroup" + description: "Adds the provided Address to a Customer from the Admin Customers creation/edit page." + +- filename: "AdminFilterCustomerAddressGridByPhoneNumberActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminFilterCustomerAddressGridByPhoneNumberActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminFilterCustomerAddressGridByPhoneNumber" + description: "Filters the Admin Customers grid by the provided Phone Number." + +- filename: "NavigateCustomerActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/NavigateCustomerActionGroup.xml" + module: "Customer" + actiongroups: + - name: "NavigateToAllCustomerPage" + description: "Goes to the Admin Customers grid page." + +- filename: "AdminCustomerSaveAndContinueActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminCustomerSaveAndContinueActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminCustomerSaveAndContinue" + description: "Clicks on 'Save and Continue' on the Customer creation/edit page." + +- filename: "AdminEditCustomerInformationFromActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminEditCustomerInformationFromActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminEditCustomerAccountInformationActionGroup" + description: "Fills in the Customer First Name, Last Name and Email. Clicks on Save and Continue." + +- filename: "StorefrontCustomerGoToSidebarMenuActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerGoToSidebarMenuActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerGoToSidebarMenu" + description: "Click on the Storefront Customer Account Dashboard sub-menu based on the provided Menu Name." + +- filename: "AdminCreateCustomerWithWebsiteAndStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminCreateCustomerWithWebsiteAndStoreViewActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminCreateCustomerWithWebsiteAndStoreViewActionGroup" + description: "Goes to the Customer grid page. Click on 'Add New Customer'. Fills provided Customer Data. Fill provided Customer Address data. Assigns Product to Website and Store View. Click on Save Address." + + - name: "AdminCreateCustomerWithWebSiteAndGroup" + description: "Goes to the Customer grid page. Click on 'Add New Customer'. Fills provided Customer Data. Fill provided Customer Address data. Assigns Product to Website and Store View. Clicks on Save." + +- filename: "StorefrontFillCustomerLoginFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontFillCustomerLoginFormActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontFillCustomerLoginFormActionGroup" + description: "Fills Storefront Customer Login Email Address. Fills Storefront Customer Login Password." + +- filename: "AdminSelectCustomerByEmailActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminSelectCustomerByEmailActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminSelectCustomerByEmail" + description: "Checks the Customer for the provided Customer Email Address in the Admin Customers grid." + +- filename: "AdminSelectAllCustomersActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminSelectAllCustomersActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminSelectAllCustomers" + description: "Selects All of the Customers in the Admin Customers grid." + +- filename: "StorefrontCustomerResetPasswordActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/StorefrontCustomerResetPasswordActionGroup.xml" + module: "Customer" + actiongroups: + - name: "StorefrontCustomerResetPasswordActionGroup" + description: "Goes to the Storefront Customer Sign-In page. Clicks on 'Forgot Password'. Fills Email Address. Clicks on Reset Password." + +- filename: "AdminAssertCustomerInCustomersGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminAssertCustomerInCustomersGridActionGroup.xml" + module: "Customer" + actiongroups: + - name: "AdminAssertCustomerInCustomersGrid" + description: "Validates that the provided Customer is present and correct in the Backend Customer grid page." + +- filename: "StorefrontCustomerWishlistActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Wishlist/Test/Mftf/ActionGroup/StorefrontCustomerWishlistActionGroup.xml" + module: "Wishlist" + actiongroups: + - name: "StorefrontCustomerAddCategoryProductToWishlistActionGroup" + description: "Adds the provided Product to the Wish List from a Storefront Category page. Validates that the Success Message is present and correct." + + - name: "StorefrontCustomerAddProductToWishlistActionGroup" + description: "Adds the provided Product to the Wish List from the Storefront Product page. Validates that the Success Message is present and correct." + + - name: "StorefrontCustomerCheckProductInWishlist" + description: "Validates that the provided Product details (Price and Name) are present in the Storefront Customer Dashboard Wish List." + + - name: "StorefrontCustomerCheckProductInWishlistSidebar" + description: "Validates that the provided Product details (Name) are present in the Wish List side bar menu." + + - name: "StorefrontCustomerRemoveProductFromWishlistUsingSidebar" + description: "Removes the provided Product from the Wish List side bar menu. Validates that the Success Message is present and correct." + + - name: "StorefrontCustomerAddProductToCartFromWishlistUsingSidebar" + description: "Add the provided Product to the Cart from the Wish List side bar menu. Validates that the Success Message is present and correct." + + - name: "StorefrontCustomerEditProductInWishlist" + description: "Edits the provided Product on the Storefront Wish List page. Fills in the provided Description and Quantity. Validates that the Success Message is present and correct." + + - name: "StorefrontCustomerShareWishlistActionGroup" + description: "Shares the Wish List from the Storefront Wish List page. PLEASE NOTE: The details for sharing are Hardcoded using 'Wishlist'." + + - name: "StorefrontAssertCustomerWishlistIsEmpty" + description: "" + +- filename: "GenerateOrderReportActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Reports/Test/Mftf/ActionGroup/GenerateOrderReportActionGroup.xml" + module: "Reports" + actiongroups: + - name: "GenerateOrderReportActionGroup" + description: "Clicks on 'here' to refresh the grid data. Enters the provided Order From/To Dates. Clicks on 'Show Report'." + + - name: "GenerateOrderReportForNotCancelActionGroup" + description: "Clicks on 'here' to refresh the grid data. Enters the provided Order From/To Dates and provided Order Status. Clicks on 'Show Report'." + +- filename: "AdminReviewOrderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Reports/Test/Mftf/ActionGroup/AdminReviewOrderActionGroup.xml" + module: "Reports" + actiongroups: + - name: "AdminReviewOrderActionGroup" + description: "Clicks on 'REPORTS' in the Admin side menu. Clicks on 'Ordered'. Clicks on 'Refresh'. Validates that the provided Product name appears in the list." + +- filename: "EditCustomStoreGroupAcceptWarningMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/EditCustomStoreGroupAcceptWarningMessageActionGroup.xml" + module: "Store" + actiongroups: + - name: "EditCustomStoreGroupAcceptWarningMessageActionGroup" + description: "EXTENDS: CreateCustomStore. Removes 'selectCreateStore'. Clicks on the 1st row. Clicks on Ok." + +- filename: "AssertStorefrontStoreCodeInUrlActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStorefrontStoreCodeInUrlActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStorefrontStoreCodeInUrlActionGroup" + description: "Validates that the provided Store Code is present in the Storefront URL." + +- filename: "DeleteCustomStoreActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/DeleteCustomStoreActionGroup.xml" + module: "Store" + actiongroups: + - name: "DeleteCustomStoreActionGroup" + description: "Goes to the Admin Stores grid page. Deletes the provided Store Group Name." + + - name: "DeleteCustomStoreBackupEnabledYesActionGroup" + description: "Goes to the Admin Stores grid page. Deletes the provided Store Group Name while creating a DB backup. Validates that the Success Messages are present and correct." + + - name: "AssertStoreNotInGrid" + description: "Goes to the Admin Stores grid page. Validates that the provided Store Group Name is NOT present in the grid." + +- filename: "StoreFrontProductValidationActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/StoreFrontProductValidationActionGroup.xml" + module: "Store" + actiongroups: + - name: "StoreFrontProductValidationActionGroup" + description: "Goes to the provided Storefront Product page. Validates that the provided Product details are present and correct." + +- filename: "AdminSwitchStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminSwitchStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminSwitchStoreViewActionGroup" + description: "Selects the provided Website from the 'Store View' dropdown menu on the Admin Grid pages." + + - name: "AdminSwitchToAllStoreViewActionGroup" + description: "EXTENDS: AdminSwitchStoreViewActionGroup. Clicks on the 'All Store Views' drop down menu. Validates that the 'All Store Views' options is present and correct." + +- filename: "AssertStoreGroupFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStoreGroupFormActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStoreGroupFormActionGroup" + description: "Clicks on the 1st row of the Admin Store grid page. Validates that the provided Website, Store Group Name/Code and Root Category are present and correct." + +- filename: "DeleteCustomWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/DeleteCustomWebsiteActionGroup.xml" + module: "Store" + actiongroups: + - name: "DeleteCustomWebsiteActionGroup" + description: "Goes to the Admin Stores grid page. Searches the grid for the provided Website Name. Deletes the provided Website Name. Validates that the Success Message is present and correct." + +- filename: "AdminSwitchWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminSwitchWebsiteActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminSwitchWebsiteActionGroup" + description: "Selects the provided Website from the 'Store View' dropdown menu on the Admin Grid pages." + +- filename: "AdminFilterStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminFilterStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminFilterStoreViewActionGroup" + description: "Filters the Admin Catalog Product page based on the provided Store Group and Custom Store." + +- filename: "CreateCustomStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/CreateCustomStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "CreateCustomStoreViewActionGroup" + description: "Goes to the Admin Store Views creation page. Fills in the provided Store View Name. Clicks on Save." + + - name: "CreateStoreView" + description: "Goes to the Admin Store Views creation page. Fills in the provided Store View, Store Group Name and Store View Status. Clicks on Save. Validates that the Success Message is present and correct." + +- filename: "AssertStoreFrontendActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStoreFrontendActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStoreFrontendActionGroup" + description: "Goes to the Storefront. Selects the provided Store in the Store View dropdown menu. Validates that the provided Store View #1 is selected. Validates that the provided Store View 2 is present in the dropdown menu." + +- filename: "StorefrontSwitchStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/StorefrontSwitchStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "StorefrontSwitchStoreViewActionGroup" + description: "Switch the Storefront to the provided Store View." + + - name: "StorefrontSwitchDefaultStoreViewActionGroup" + description: "EXTENDS: StorefrontSwitchStoreViewActionGroup. Clicks on the Default Store View." + +- filename: "AdminCreateWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminCreateWebsiteActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminCreateWebsiteActionGroup" + description: "Goes to the Admin Website creation page. Fills in the provided Website Name and Code. Clicks on Save. Validates that the Success Message is present and correct." + + - name: "AdminGetWebsiteIdActionGroup" + description: "Goes to the Admin Stores grid page. Filters the grid for the provided Website. Grabs the Website ID from the URL." + + - name: "AssertWebsiteInGrid" + description: "Goes to the Admin Stores grid page. Searches the grid for the provided Website Name. Validates that the Website appears in the grid." + + - name: "AssertWebsiteForm" + description: "Clicks on the provided Website Name in the Admin Stores grid. Validates that the URL, Website Name/Code are present and correct." + +- filename: "AssertStoreViewFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStoreViewFormActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStoreViewFormActionGroup" + description: "Validates that the provided Store, Name, Code and Status are present and correct on the Admin Stores creation/edit page." + +- filename: "AdminCreateStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminCreateStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminCreateStoreViewActionGroup" + description: "Goes to the Admin Store View creation page. Fills in the provided Store View and Store details. Clicks on Save. Validates that the Success Message is present and correct." + + - name: "AdminCreateStoreViewWithoutCheckActionGroup" + description: "EXTENDS: AdminCreateStoreViewActionGroup. Removes 'waitForPageReload' and 'seeSavedMessage'." + + - name: "AdminCreateStoreViewActionSaveGroup" + description: "Validates that the Success Message is present and correct." + + - name: "navigateToAdminContentManagementPage" + description: "Goes to the 'Configuration' page for 'Content Management'." + + - name: "saveStoreConfiguration" + description: "Clicks on the Save button." + + - name: "saveStoreConfigurationAndValidateFieldError" + description: "Clicks on Save. Validates that the fields are required." + +- filename: "AssertStorefrontStoreVisibleInFooterActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStorefrontStoreVisibleInFooterActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStorefrontStoreVisibleInFooterActionGroup" + description: "Goes to the Storefront. Validates that the provided Store is present in the Footer Switch Store View drop down menu on the Storefront." + +- filename: "StoreViewDisabledErrorSaveMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/StoreViewDisabledErrorSaveMessageActionGroup.xml" + module: "Store" + actiongroups: + - name: "StoreViewDisabledErrorSaveMessageActionGroup" + description: "Goes to the Admin Store View creation page. Fills in the provided Details (Store Group Name, Store View and Store View Status). Validates that the Error Message is present and correct." + +- filename: "AdminDeleteWebsiteActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminDeleteWebsiteActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminDeleteWebsiteActionGroup" + description: "Goes to the Admin Stores grid page. Deletes the provided Website Name." + +- filename: "AdminDeleteStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminDeleteStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminDeleteStoreViewActionGroup" + description: "Goes to the Admin Stores grid page. Deletes the provided Store without creating a Backup. Validates that the Success Message is present and correct." + + - name: "DeleteCustomStoreViewBackupEnabledYesActionGroup" + description: "Goes to the Admin Stores grid page. Deleted the provided Store while creating a Backup. Validates that the Success Messages (Delete/Backup) are present and correct." + + - name: "AssertStoreViewNotInGrid" + description: "Goes to the Admin Stores grid page. Searches the grid for the provided Store View name. Validates that it does NOT appear in the grid." + +- filename: "AssertStoreGroupInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStoreGroupInGridActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStoreGroupInGridActionGroup" + description: "Goes to the Admin Stores grid page. Searches the grid for the provided Store Group Name. Validates that the provided Store Group Name is present and correct in the grid." + +- filename: "ChangeStoreInStoreViewActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/ChangeStoreInStoreViewActionGroup.xml" + module: "Store" + actiongroups: + - name: "ChangeStoreInStoreViewActionGroup" + description: "Clicks on the 1st row 'Store View' on the Admin Stores grid page. Selects the provided Store drop down menu. Clicks on Save. Validates that the Warning Message is present and correct." + +- filename: "AdminStoreGroupCreateActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminStoreGroupCreateActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminStoreGroupCreateActionGroup" + description: "Fills in the provided Website and Store Group details. Clicks on Save. Validates that the Success Message is present and correct." + + - name: "AdminAddCustomWebSiteToStoreGroup" + description: "Goes to the Admin Stores grid page. Searches the grid for the provided Store Group. Edits the Store. Adds the provided Website to the Store. Clicks on Save. Validates that the Success Message is present and correct." + +- filename: "AdminCreateNewStoreGroupActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AdminCreateNewStoreGroupActionGroup.xml" + module: "Store" + actiongroups: + - name: "AdminCreateNewStoreGroupActionGroup" + description: "Goes to the Admin Stores creation page. Fills in the provided Details (Website, Store Group Name and Store Group Code). Clicks on Save. Validates that the Success Message is present and correct." + + - name: "CreateCustomStore" + description: "Goes to the Admin Stores grid page. Clicks on 'Create Store'. Fills in the provided Details (Website, Store Group Name and Store Group Code). Clicks on Save. Validates that the Success Message is present and correct." + + - name: "AssertStoreGroupInGrid" + description: "Goes to the Admin Stores grid page. Searches for the provided Store Group Name. Validates that the provided Store Group Name is present in the grid." + + - name: "AssertStoreGroupForm" + description: "Clicks on the 1st Store in the 'Stores' grid. Validates that the provided Details (Website, Store Group Name, Store Group Code and Root Category) are present and correct." + +- filename: "AssertStorefrontStoreNotVisibleInFooterActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStorefrontStoreNotVisibleInFooterActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStorefrontStoreNotVisibleInFooterActionGroup" + description: "Goes to the Storefront. Validates that the provided Store is NOT present in the Footer Switch Store View drop down menu." + +- filename: "AssertStoreConfigurationBackendActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStoreConfigurationBackendActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStoreConfigurationBackendActionGroup" + description: "Goes to the 'Configuration' page. Clicks on the 'Store View' dropdown menu. Validates that the provided Website, Store, Store View 1 and Store View 2 are present and correct." + +- filename: "AssertStoreViewInGridActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStoreViewInGridActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStoreViewInGridActionGroup" + description: "Goes the Admin Stores grid page. Searches the grid for the provided Store View Name. Validates that the provided Store View Name is present and correct in the grid." + +- filename: "AssertStorefrontStoreVisibleInHeaderActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Store/Test/Mftf/ActionGroup/AssertStorefrontStoreVisibleInHeaderActionGroup.xml" + module: "Store" + actiongroups: + - name: "AssertStorefrontStoreVisibleInHeaderActionGroup" + description: "Goes to the Storefront. Validates that the provided Store is present in the Header Switch Store View drop down menu on the Storefront." + +- filename: "AdminCreateCartPriceRuleLabelsSectionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminCreateCartPriceRuleLabelsSectionActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminCreateCartPriceRuleLabelsSectionActionGroup" + description: "Fills in the provided Rule details on a Admin Cart Price Rule creation/edit page." + +- filename: "StorefrontAddToTheCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/StorefrontAddToTheCartActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "StorefrontAddToTheCartActionGroup" + description: "" + +- filename: "AdminCartPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminCartPriceRuleActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "selectNotLoggedInCustomerGroup" + description: "Selects 'NOT LOGGED IN' from the 'Customer Groups' list (Magento 2 B2B). PLEASE NOTE: The value is Hardcoded." + + - name: "selectRetailerCustomerGroup" + description: "Selects 'Retailer' from the 'Customer Groups' list (Magento 2 B2B). PLEASE NOTE: The value is Hardcoded." + + - name: "SetCartAttributeConditionForCartPriceRuleActionGroup" + description: "Sets the provided Cart Attribute Condition (Attribute Name, Operator Type and Value) on the Admin Cart Price Rule creation/edit page." + + - name: "SetConditionForActionsInCartPriceRuleActionGroup" + description: "Sets the provided Condition (Actions Aggregator/Value, Child Attribute and Action Value) for Actions on the Admin Cart Price Rule creation/edit page." + +- filename: "AssertCustomerGroupNotOnCartPriceRuleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AssertCustomerGroupNotOnCartPriceRuleFormActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AssertCustomerGroupNotOnCartPriceRuleFormActionGroup" + description: "Validates that the 'Customer Groups' section does NOT contain the provided Customer Group on the Admin Cart Price Rule creation/edit page." + +- filename: "AssertCartPriceRuleSuccessSaveMessageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AssertCartPriceRuleSuccessSaveMessageActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AssertCartPriceRuleSuccessSaveMessageActionGroup" + description: "Clicks on the Save button on the Admin Cart Price Rule creation/edit page. Validates that the Success Message is present and correct." + +- filename: "AdminDeleteCartPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminDeleteCartPriceRuleActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminDeleteCartPriceRuleActionGroup" + description: "Goes to the Admin Cart Price Rules grid page. Filters the grid for the provided Rule Name. Deletes the Rule via the grid." + +- filename: "AdminCreateCartPriceRuleActionsSectionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminCreateCartPriceRuleActionsSectionActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminCreateCartPriceRuleActionsSectionDiscountFieldsActionGroup" + description: "Clicks on the 'Actions' section on the Admin Cart Price Rule creation/edit page. Fills in the provided Cart Price Rule details." + + - name: "AdminCreateCartPriceRuleActionsSectionShippingAmountActionGroup" + description: "Clicks on the 'Apply to Shipping Amount' toggle." + + - name: "AdminCreateCartPriceRuleActionsSectionSubsequentRulesActionGroup" + description: "Clicks on the 'Discard subsequent rules' toggle." + + - name: "AdminCreateCartPriceRuleActionsSectionFreeShippingActionGroup" + description: "Selects the provided option in the 'Free Shipping' dropdown menu." + +- filename: "StorefrontSalesRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/StorefrontSalesRuleActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "StorefrontApplyCouponActionGroup" + description: "Applies the provided Coupon Code to the Storefront Shopping Cart." + + - name: "StorefrontCancelCouponActionGroup" + description: "Cancels the Coupon that is applied to the Storefront Shopping Cart." + + - name: "StorefrontCheckCouponAppliedActionGroup" + description: "Validates that the provided Rule and Discount Amount is present and correct on the Storefront Checkout page." + + - name: "VerifyDiscountAmount" + description: "Goes to the provided Storefront Product URL. Fills in provided Quantity. Clicks Add to Cart. Goes to Checkout. Validates that the provided Discount Amount is present and correct." + +- filename: "AdminSalesRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminSalesRuleActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "DeleteCartPriceRuleByName" + description: "Goes to the Admin Cart Price Rules grid page. Filters the grid based on the provided Rule Name. Deletes the Price Rule via the grid." + +- filename: "AdminCreateCartPriceRuleRuleInfoSectionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminCreateCartPriceRuleRuleInfoSectionActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminCreateCartPriceRuleRuleInfoSectionActionGroup" + description: "Goes to the Admin Cart Price Rule grid page. Clicks on Add New Rule. Fills in the provided Rule details." + +- filename: "StorefrontClickOnMiniCartActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/StorefrontClickOnMiniCartActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "StorefrontClickOnMiniCartActionGroup" + description: "" + +- filename: "AdminFilterCartPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminFilterCartPriceRuleActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminFilterCartPriceRuleActionGroup" + description: "Filters the Admin Cart Price Rule grid based on the provided Rule Name. Clicks on the 1st row in the grid." + + - name: "AdminCartPriceRuleNotInGridActionGroup" + description: "EXTENDS: AdminFilterCartPriceRuleActionGroup. Removes 'goToEditRulePage'. Validates that the Empty Grid message is present and correct." + +- filename: "AdminCreateCartPriceRuleActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminCreateCartPriceRuleActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminCreateCartPriceRuleActionGroup" + description: "Goes to the Admin Cart Price Rule grid page. Adds the provided Rule. Validates that the Success Message is present and correct." + + - name: "AdminCreateCartPriceRuleAndStayOnEditActionGroup" + description: "EXTENDS: AdminCreateCartPriceRuleActionGroup. Clicks on Save and Continue." + + - name: "AdminCreateCartPriceRuleWithCouponCode" + description: "EXTENDS: AdminCreateCartPriceRuleActionGroup. Removes 'selectActionType' and 'fillDiscountAmount'. Adds the provided Coupon Code to a Cart Price Rule." + + - name: "AdminDeleteCartPriceRuleForRetailerActionGroup" + description: "Goes to the Admin Cart Price Rules grid page. Removes the 1st Cart Price Rule in the Grid." + + - name: "AdminCreateCartPriceRuleWithConditions" + description: "EXTENDS: AdminCreateCartPriceRuleActionGroup. Removes 'fillDiscountAmount'. Adds the 2 provided Conditions (Name, Rule, Rule to Change and Category Name) to a Cart Price Rule." + + - name: "CreateCartPriceRuleSecondWebsiteActionGroup" + description: "Goes to the Admin Cart Price Rule grid page. Clicks on Add New Rule. Fills the provided Rule (Name). Selects 'Second Website' from the 'Websites' menu." + + - name: "AdminInactiveCartPriceRuleActionGroup" + description: "EXTENDS: AdminCreateCartPriceRuleActionGroup. Clicks on 'Active'." + +- filename: "AdminOpenNewCartPriceRuleFormPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminOpenNewCartPriceRuleFormPageActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminOpenNewCartPriceRuleFormPageActionGroup" + description: "Goes to the Admin Cart Price Rule creation page." + +- filename: "AssertStorefrontMiniCartItemsActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AssertStorefrontMiniCartItemsActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AssertStorefrontMiniCartItemsActionGroup" + description: "" + +- filename: "StorefrontApplyDiscountCodeActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/StorefrontApplyDiscountCodeActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "StorefrontApplyDiscountCodeActionGroup" + description: "" + +- filename: "AdminAssertCustomerGroupOnCartPriceRuleFormActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/AdminAssertCustomerGroupOnCartPriceRuleFormActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "AdminAssertCustomerGroupOnCartPriceRuleForm" + description: "" + +- filename: "ApplyCartRuleOnStorefrontActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/SalesRule/Test/Mftf/ActionGroup/ApplyCartRuleOnStorefrontActionGroup.xml" + module: "SalesRule" + actiongroups: + - name: "ApplyCartRuleOnStorefrontActionGroup" + description: "Clicks on Add to Cart on a Storefront Product page. Validates that the Success Message is present and correct. Goes to the Storefront Shopping Cart page. Applies the provided Coupon Code to the Shopping Cart." + +- filename: "StorefrontAssertUpdatedProductPriceInStorefrontProductPageActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRuleConfigurable/Test/Mftf/ActionGroup/StorefrontAssertUpdatedProductPriceInStorefrontProductPageActionGroup.xml" + module: "CatalogRuleConfigurable" + actiongroups: + - name: "StorefrontAssertUpdatedProductPriceInStorefrontProductPageActionGroup" + description: "Validates that the provided Product Name and Price are present on a Storefront Product page." + +- filename: "StorefrontAssertCatalogPriceRuleAppliedToProductOptionActionGroup.xml" + repo: "https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogRuleConfigurable/Test/Mftf/ActionGroup/StorefrontAssertCatalogPriceRuleAppliedToProductOptionActionGroup.xml" + module: "CatalogRuleConfigurable" + actiongroups: + - name: "StorefrontAssertCatalogPriceRuleAppliedToProductOptionActionGroup" + description: "Selects the provided Product Option on a Storefront Product page. Validates the provided Expected Price is present and correct." diff --git a/_data/compatibility.yml b/_data/compatibility.yml index 19fbaf55fdb..6008fb18371 100644 --- a/_data/compatibility.yml +++ b/_data/compatibility.yml @@ -83,30 +83,6 @@ extension: 2.3.1: general availability 2.3.2: general availability 2.3.3: general availability - - - name: Magento Shipping - versions: - - - name: 1.5.3 - support: - 2.2.4+: not supported - 2.3.0: not supported - 2.3.1: not supported - 2.3.2: general availability - - - name: 1.5.1 - support: - 2.2.4+: not supported - 2.3.0: not supported - 2.3.1: general availability - 2.3.2: not supported - - - name: 1.4.6 - support: - 2.2.4+: not supported - 2.3.0: general availability - 2.3.1: not supported - 2.3.2: not supported - name: Magento Inventory versions: diff --git a/_data/main-nav.yml b/_data/main-nav.yml index 69248d0b000..722af640b60 100644 --- a/_data/main-nav.yml +++ b/_data/main-nav.yml @@ -138,7 +138,8 @@ include_versions: ['2.3'] - label: Marketplace EQP API Reference - url: /marketplace/eqp/api.html + url: /marketplace/eqp/v1/api.html + versionless: true exclude_versions: ['2.0'] - label: Business Intelligence Import API diff --git a/_data/toc/cloud-guide.yml b/_data/toc/cloud-guide.yml index c5ef3b11600..beddf82ec06 100644 --- a/_data/toc/cloud-guide.yml +++ b/_data/toc/cloud-guide.yml @@ -182,7 +182,7 @@ pages: url: /cloud/cdn/cloud-vcl-custom-snippets.html exclude_versions: ["2.0"] children: - - label: Set up redirects to WordPress + - label: Reroute requests to a CMS backend url: /cloud/cdn/fastly-vcl-wordpress.html - label: Block referral spam diff --git a/_data/toc/configuration-guide.yml b/_data/toc/configuration-guide.yml index ade3f827791..392fa3652e5 100644 --- a/_data/toc/configuration-guide.yml +++ b/_data/toc/configuration-guide.yml @@ -5,28 +5,29 @@ pages: - label: Security settings children: - - label: Secure cron.php to run in a browser - url: /config-guide/secy/secy-cron.html - - label: X-Frame-Options header - url: /config-guide/secy/secy-xframe.html + - label: Google reCAPTCHA + url: /security/google-recaptcha.html + + - label: Password hashing + url: /config-guide/secy/hashing.html - label: Prevent cache poisoning url: /config-guide/secy/secy-headers.html + - label: Secure cron.php to run in a browser + url: /config-guide/secy/secy-cron.html + - label: Two-Factor Authentication url: /security/two-factor-authentication.html - - label: Google reCAPTCHA - url: /security/google-recaptcha.html + - label: X-Frame-Options header + url: /config-guide/secy/secy-xframe.html - label: Magento application initialization and bootstrap url: /config-guide/bootstrap/magento-bootstrap.html children: - - label: Set the value of bootstrap parameters - url: /config-guide/bootstrap/magento-how-to-set.html - - label: About Magento modes url: /config-guide/bootstrap/magento-modes.html @@ -36,6 +37,9 @@ pages: - label: Enable profiling (MAGE_PROFILER) url: /config-guide/bootstrap/mage-profiler.html + - label: Set the value of bootstrap parameters + url: /config-guide/bootstrap/magento-how-to-set.html + - label: Pipeline Deployment include_versions: ["2.2", "2.3"] url: /config-guide/deployment/ diff --git a/_data/toc/frontend-developer-guide.yml b/_data/toc/frontend-developer-guide.yml index 3d4d5449ad2..98925e45955 100644 --- a/_data/toc/frontend-developer-guide.yml +++ b/_data/toc/frontend-developer-guide.yml @@ -87,16 +87,16 @@ pages: url: /frontend-dev-guide/templates/template-overview.html children: - - label: Templates customization walkthrough - url: /frontend-dev-guide/templates/template-walkthrough.html - - label: Templates basic concepts url: /frontend-dev-guide/templates/template-override.html - - label: Illustration of customizing templates + - label: Templates customization walkthrough + url: /frontend-dev-guide/templates/template-walkthrough.html + + - label: Templates customization sample url: /frontend-dev-guide/templates/template-sample.html - - label: Customize email templates + - label: Email templates url: /frontend-dev-guide/templates/template-email.html - label: Cascading style sheets (CSS) diff --git a/_data/toc/javascript-developer-guide.yml b/_data/toc/javascript-developer-guide.yml index f95fcd09c2c..d296c4ccea9 100644 --- a/_data/toc/javascript-developer-guide.yml +++ b/_data/toc/javascript-developer-guide.yml @@ -13,9 +13,8 @@ pages: - label: JavaScript resources in Magento url: /javascript-dev-guide/javascript/js-resources.html - - label: About AMD modules and RequireJS - include_versions: ["2.0", "2.1"] - url: /javascript-dev-guide/javascript/requirejs_concept.html + - label: RequireJS in Magento + url: /javascript-dev-guide/javascript/requirejs.html - label: Calling and initializing JavaScript url: /javascript-dev-guide/javascript/js_init.html diff --git a/_data/toc/marketplace-api.yml b/_data/toc/marketplace-api.yml index c0872659d80..0351194a6e2 100644 --- a/_data/toc/marketplace-api.yml +++ b/_data/toc/marketplace-api.yml @@ -1,20 +1,31 @@ label: Marketplace EQP API -include_versions: ["2.1","2.2","2.3"] +versionless: true pages: - label: Introduction - url: /marketplace/eqp/api.html + url: /marketplace/eqp/v1/api.html + versionless: true - label: Authentication - url: /marketplace/eqp/auth.html + url: /marketplace/eqp/v1/auth.html + versionless: true - label: Users - url: /marketplace/eqp/users.html + url: /marketplace/eqp/v1/users.html + versionless: true - label: Files - url: /marketplace/eqp/files.html + url: /marketplace/eqp/v1/files.html + versionless: true - label: Packages - url: /marketplace/eqp/packages.html + url: /marketplace/eqp/v1/packages.html + versionless: true - label: Reports - url: /marketplace/eqp/reports.html + url: /marketplace/eqp/v1/reports.html + versionless: true + + - label: Filtering + url: /marketplace/eqp/v1/filtering.html + versionless: true + diff --git a/_data/toc/mftf.yml b/_data/toc/mftf.yml index 84ff9236fe4..c5c078d2e43 100644 --- a/_data/toc/mftf.yml +++ b/_data/toc/mftf.yml @@ -29,6 +29,10 @@ pages: url: /mftf/docs/extending.html versionless: true + - label: Git vs. Composer installation + url: /mftf/docs/guides/git-vs-composer-install.html + versionless: true + - label: Merge points for extensions url: /mftf/docs/merge_points/introduction.html versionless: true diff --git a/_data/whats-new.yml b/_data/whats-new.yml index 26574d4146c..7d8ad7eb593 100644 --- a/_data/whats-new.yml +++ b/_data/whats-new.yml @@ -4,8 +4,178 @@ description: | We exclude from this list proofreading, spelling checks, and all minor updates. link: /whats-new.html thread: /whatsnew-feed.xml -updated: Tue Oct 8 10:14:57 2019 +updated: Mon Nov 4 13:09:57 2019 entries: +- description: Updated the [Marketplace EQP API](https://devdocs.magento.com/marketplace/eqp/v1/api.html) + documentation for the Early Access Program. + versions: '' + type: New topic + date: November 4, 2019 + link: https://github.com/magento/devdocs/pull/5918 +- description: Added the [RequireJS in Magento](https://devdocs.magento.com/guides/v2.3/javascript-dev-guide/javascript/requirejs.html) + topic to the _JavaScript Developer Guide_. + versions: 2.2.x, 2.3.x + type: New topic + date: October 31, 2019 + link: https://github.com/magento/devdocs/pull/5840 +- description: Added an example for retrieving the IP address of a particular Cloud + instance to the [Integration environment IP address](https://devdocs.magento.com/guides/v2.2/cloud/env/environments-start.html#ipaddress) + section in the _Cloud Guide_. + versions: 2.2.x, 2.3.x + type: Technical changes + date: October 31, 2019 + link: https://github.com/magento/devdocs/pull/5883 +- description: Added the [Password Hashing](https://devdocs.magento.com/guides/v2.3/config-guide/secy/hashing.html) + topic to the _Configuration Guide_. + versions: 2.2.x, 2.3.x + type: New topic + date: October 29, 2019 + link: https://github.com/magento/devdocs/pull/5874 +- description: Added the following information to the [Set up Elasticsearch](https://devdocs.magento.com/guides/v2.3/cloud/project/project-conf-files_services-elastic.html)
topic + in the _Cloud Guide_–
- Recommendation to always set up
Elasticsearch + as a fallback option if using a third-party search tool
- Instructions for + checking Elasticsearch software compatibility
- "Additional Search Configuration"
section + with details about customizing search options and testing Elasticsearch + versions: 2.x + type: Major update + date: October 26, 2019 + link: https://github.com/magento/devdocs/pull/5823 +- description: Updated the [Multiline component](https://devdocs.magento.com/guides/v2.3/ui_comp_guide/components/ui-multiline.html) + documentation in the _UI Components Guide_
- Adjusted the markup for the options + table
- Fixed the wrong default values for some options
- Added the "Source + files", "Example", and "Results" sections + versions: 2.2.x, 2.3.x + type: Major update + date: October 24, 2019 + link: https://github.com/magento/devdocs/pull/5636 +- description: Updated the [Deployment best practices](https://devdocs.magento.com/guides/v2.2/cloud/reference/discover-deploy.html) + topic in the _Cloud Guide_:
- Added additional validation and tasks to address + common Support issues
- Added additional links to supporting information and + instructions
- Added a new "Upgrade best practices" subsection to provide + specific upgrade steps + versions: 2.x + type: Major update + date: October 22, 2019 + link: https://github.com/magento/devdocs/pull/5703 +- description: Updated the [Cloud launch modes](https://devdocs.magento.com/guides/v2.2/cloud/docker/docker-config.html) documentation + to configure Varnish as a http-cache-host so that Varnish purges with a Magento + cache clean. + versions: 2.x + type: Technical changes + date: October 22, 2019 + link: https://github.com/magento/devdocs/pull/5721 +- description: Added the documentation for the [DynamicRowsRecord](https://devdocs.magento.com/guides/v2.2/ui_comp_guide/components/ui-dynamicrows-record.html) + UI component to the _UI Components Guide_. + versions: 2.2.x, 2.3.x + type: New topic + date: October 21, 2019 + link: https://github.com/magento/devdocs/pull/5634 +- description: Updated the [Plugins (Interceptors)](https://devdocs.magento.com/guides/v2.2/frontend-dev-guide/layouts/xml-manage.html) + topic in the _Frontend Developer Guide_ to clarify that these plugins are for + updating layouts. Also, removed incorrect information and clarified descriptions + and examples. + versions: 2.2.x, 2.3.x + type: Major update + date: October 21, 2019 + link: https://github.com/magento/devdocs/pull/5547 +- description: Changes to the status of Magento Shipping are now described in the + [Magento Commerce 2.3.3 Release Notes](https://devdocs.magento.com/guides/v2.3/release-notes/release-notes-2-3-3-commerce.html) and + the [Magento Open Source 2.3.3 Release Notes](https://devdocs.magento.com/guides/v2.3/release-notes/release-notes-2-3-3-open-source.html). + versions: 2.3.3 + type: Major update + date: October 20, 2019 + link: https://github.com/magento/devdocs/pull/5807 +- description: Updated the [Magento Commerce Release Notes](https://devdocs.magento.com/guides/v2.3/release-notes/release-notes-2-3-3-commerce.html) + to add information about a known issue with method chaining that has been identified + in the 2.3.3 code base and the patch that was released on October 18 to address + this issue. + versions: '' + type: Major update + date: October 18, 2019 + link: https://github.com/magento/devdocs/pull/5800 +- description: Moved the `CategoryInterface` attributes to a separate [topic](https://devdocs.magento.com/guides/v2.3/graphql/product/category-interface.html) + in the _GraphQL Developer Guide_. + versions: 2.3.x + type: New topic + date: October 16, 2019 + link: https://github.com/magento/devdocs/pull/5718 +- description: Added an "Errors" section to the [changeCustomerPassword mutation](https://devdocs.magento.com/guides/v2.3/graphql/mutations/change-customer-password.html) + topic in the _GraphQL Developer Guide_. + versions: 2.3.x + type: Technical changes + date: October 15, 2019 + link: https://github.com/magento/devdocs/pull/5633 +- description: Added [Backward incompatible changes reference](https://devdocs.magento.com/guides/v2.2/release-notes/backward-incompatible-changes/reference.html#releases-2_2_9-2_2_10) + for the Magento 2.2.10 release. + versions: 2.2.10 + type: Major update + date: October 14, 2019 + link: https://github.com/magento/devdocs/pull/5640 +- description: Clarified the use of a static content deployment command for [troubleshooting + theme deployment](https://devdocs.magento.com/guides/v2.2/frontend-dev-guide/themes/theme-create.html#trouble). + versions: 2.2.x, 2.3.x + type: Technical changes + date: October 14, 2019 + link: https://github.com/magento/devdocs/pull/5565 +- description: Added [Backward incompatible changes reference](https://devdocs.magento.com/guides/v2.3/release-notes/backward-incompatible-changes/reference.html) + for the Magento 2.3.3 release. + versions: 2.3.3 + type: Major update + date: October 14, 2019 + link: https://github.com/magento/devdocs/pull/5686 +- description: Added a warning to ensure that the [CRYPT_KEY](https://devdocs.magento.com/guides/v2.3/cloud/env/variables-deploy.html#crypt_key) deploy + variable for Magento Commerce Cloud environments is set in the Project Web UI + to avoid exposing sensitive data. + versions: 2.x + type: Technical changes + date: October 11, 2019 + link: https://github.com/magento/devdocs/pull/5663 +- description: Added documentation for the [Folder tree widget](https://devdocs.magento.com/guides/v2.3/javascript-dev-guide/widgets/widget-folder-tree.html) + to the _Javascript Developer Guide_. + versions: 2.2.x, 2.3.x + type: New topic + date: October 11, 2019 + link: https://github.com/magento/devdocs/pull/5503 +- description: Added the "Execute data-mage-init and x-magento-init in dynamic content" + section to the [Calling and initializing JavaScript](https://devdocs.magento.com/guides/v2.3/javascript-dev-guide/javascript/js_init.html) + topic in the _Javascript Developer Guide_. + versions: 2.2.x, 2.3.x + type: Major update + date: October 11, 2019 + link: https://github.com/magento/devdocs/pull/5481 +- description: Added the [Manage disk space topic](https://devdocs.magento.com/guides/v2.3/cloud/project/manage-disk-space.html) + to the _Cloud Guide_. + versions: 2.x + type: New topic + date: October 10, 2019 + link: https://github.com/magento/devdocs/pull/5641 +- description: Updated the _Command-line tools reference_:
- Regenerated [bin/magento + (Open Source)](https://devdocs.magento.com/guides/v2.3/reference/cli/magento.html)
- + Added [bin/magento (Commerce)](https://devdocs.magento.com/guides/v2.3/reference/cli/magento-commerce.html)
- + Added [magento-cloud]( https://devdocs.magento.com/guides/v2.3/reference/cli/magento-cloud.html) + versions: 2.2.10, 2.3.3 + type: New topic + date: October 10, 2019 + link: https://github.com/magento/devdocs/pull/5642 +- description: Added Amazon Sales Channel version 3.0.0 [Release Notes](https://devdocs.magento.com/extensions/amazon-sales/release-notes/). + versions: 3.0.0 Amazon Sales Channel + type: Major update + date: October 9, 2019 + link: https://github.com/magento/devdocs/pull/5612 +- description: Added the [Custom widget](https://devdocs.magento.com/guides/v2.3/ext-best-practices/tutorials/custom-widget.html) + tutorial to the _Extensions Best Practices Guide_. + versions: 2.2.x, 2.3.x + type: New topic + date: October 9, 2019 + link: https://github.com/magento/devdocs/pull/5424 +- description: Added the following new topics to the _Magento Functional Testing Framework Guide_
- [Selectors](https://devdocs.magento.com/mftf/docs/guides/selectors.html)
- + [Using Suites](https://devdocs.magento.com/mftf/docs/guides/using-suites.html)
- + [Test Modularity](https://devdocs.magento.com/mftf/docs/guides/test-modularity.html)
- + [Test Isolation](https://devdocs.magento.com/mftf/docs/guides/test-isolation.html). + versions: '' + type: New topic + date: October 9, 2019 + link: https://github.com/magento/devdocs/pull/5637 - description: Added the new topic [CSS Critical Path](https://devdocs.magento.com/guides/v2.2/frontend-dev-guide/css-topics/css-critical-path.html) to the _Frontend Developer Guide_. versions: 2.2.10, 2.3.3 @@ -2740,7 +2910,7 @@ entries: versions: 2.1.x, 2.2.x, 2.3.x type: New date: Apr 24 2018 -- description: Added [Marketplace EQP API](https://devdocs.magento.com/guides/v2.2/marketplace/eqp/api.html) +- description: Added [Marketplace EQP API](https://devdocs.magento.com/marketplace/eqp/v1/api.html) reference documentation. versions: 2.x type: New topic diff --git a/_includes/cloud/cloud-elasticsearch-client-compatibility.md b/_includes/cloud/cloud-elasticsearch-client-compatibility.md new file mode 100644 index 00000000000..3005bcb2963 --- /dev/null +++ b/_includes/cloud/cloud-elasticsearch-client-compatibility.md @@ -0,0 +1,7 @@ +The following table lists compatible versions of the Elasticsearch software supported by {{ site.data.var.ee }}. + +Elasticsearch service | Elasticsearch composer package | Status +--------- | ------------- | ------------------------- +1.7 – 2.4.x| 2.x.x | deprecated +5.2.x | 5.x.x | default versions for {{ site.data.var.ee }} versions 2.2.x - 2.2.7 and 2.3.0 +6.x | 6.x | recommended, default versions for {{ site.data.var.ee }} versions 2.2.8 and 2.3.1 and later. diff --git a/_includes/config/setup-cron_2.2_about.md b/_includes/config/setup-cron_2.2_about.md index 13e00ccc4b0..5e65f7e96e3 100644 --- a/_includes/config/setup-cron_2.2_about.md +++ b/_includes/config/setup-cron_2.2_about.md @@ -9,5 +9,6 @@ Magento uses cron for two sets of tasks, and for each, cron can run with a diffe * Web server PHP plug-in configuration: Two other cron jobs are used by the [Component Manager and System Upgrade utilities]({{ page.baseurl }}/comp-mgr/bk-compman-upgrade-guide.html). {: .bs-callout-warning } + * To avoid issues during installation and upgrade, we strongly recommend you apply the same PHP settings to both the PHP command-line configuration and to the PHP web server plug-in's configuration. For more information, see [Required PHP settings]({{ page.baseurl }}/install-gde/prereq/php-settings.html). * In a multi-node system, crontab can run on only one node. This applies to you only if you set up more than one webnode for reasons related to performance or scalability. diff --git a/_includes/config/setup-cron_2.2_how-to.md b/_includes/config/setup-cron_2.2_how-to.md index ca0b07affd5..ad03dbb5a8d 100644 --- a/_includes/config/setup-cron_2.2_how-to.md +++ b/_includes/config/setup-cron_2.2_how-to.md @@ -17,6 +17,7 @@ To create the Magento crontab: Use `--force` to rewrite an existing Magento crontab. {: .bs-callout-info } + * `magento cron:install` does not rewrite an existing crontab inside `#~ MAGENTO START` and `#~ MAGENTO END` comments in your crontab. * `magento cron:install --force` has no effect on any cron jobs outside the Magento comments. diff --git a/_includes/config/setup-cron_2.3_how-to.md b/_includes/config/setup-cron_2.3_how-to.md index ca0b07affd5..ad03dbb5a8d 100644 --- a/_includes/config/setup-cron_2.3_how-to.md +++ b/_includes/config/setup-cron_2.3_how-to.md @@ -17,6 +17,7 @@ To create the Magento crontab: Use `--force` to rewrite an existing Magento crontab. {: .bs-callout-info } + * `magento cron:install` does not rewrite an existing crontab inside `#~ MAGENTO START` and `#~ MAGENTO END` comments in your crontab. * `magento cron:install --force` has no effect on any cron jobs outside the Magento comments. diff --git a/_includes/contributor/labels.md b/_includes/contributor/labels.md index 73b8a520920..8abff189c28 100644 --- a/_includes/contributor/labels.md +++ b/_includes/contributor/labels.md @@ -48,7 +48,7 @@ Example labels: ### Components {:.no_toc} -Component labels indicate the components affected by the Pull Request. To learn more about available components and assigned architects, see [Magento Components Assignment](https://github.com/magento/magento2/wiki/Magento-Components-Assignment). +Component labels indicate the components affected by the Pull Request. To learn more about available components and assigned architects, see [Magento Components Assignment](https://github.com/magento/architecture/wiki/Component-Assignments). Example labels: diff --git a/_includes/install/paypal-tls1-2.md b/_includes/install/paypal-tls1-2.md index e4387c83bfd..1d181f6f145 100644 --- a/_includes/install/paypal-tls1-2.md +++ b/_includes/install/paypal-tls1-2.md @@ -5,7 +5,7 @@ PayPal recently announced they will require Transport Layer Security (TLS) versi More information: * [Details (PayPal security bulletin)](https://www.paypal.com/uk/webapps/mpp/ssl-security-update) -* [PayPal live payments switching in June 2016 (PayPal technical blog)](https://devblog.paypal.com/upcoming-security-changes-notice/#tls) +* [PayPal live payments switching in June 2016 (PayPal technical blog)](https://medium.com/paypal-engineering/security-related-changes-required-to-avoid-service-disruption-82caf7778328#0422) ### Symptom diff --git a/_includes/layout/page-header.html b/_includes/layout/page-header.html index 614009035ad..243fc5860e7 100644 --- a/_includes/layout/page-header.html +++ b/_includes/layout/page-header.html @@ -15,5 +15,11 @@

{{ page.subtitle }}

{% endif %} +{% if page.title == "How to Add a New Table to a Database" %} +
+ This tutorial applies to Magento 2.2.x only. For Magento 2.3.x, see Declarative Schema. +
+{% endif %} +

{{ page.title }}

diff --git a/_includes/release-notes/engcomm-2-3-3-issues.md b/_includes/release-notes/engcomm-2-3-3-issues.md index 3d3cef6ab6e..24eb6b6a5cd 100644 --- a/_includes/release-notes/engcomm-2-3-3-issues.md +++ b/_includes/release-notes/engcomm-2-3-3-issues.md @@ -1,181 +1,181 @@ | Contributing community member | Related GitHub Issues | Pull Requests | | ------- | ------- | ------- | -| [airbone42](https://github.com/airbone42) | [#533](https://github.com/magento/magento2/issues/533) | [magento/graphql-ce#578](https://github.com/magento/graphql-ce/pull/578) | -| [tzyganu](https://github.com/tzyganu) | [#601](https://github.com/magento/magento2/issues/601) | [magento/graphql-ce#632](https://github.com/magento/graphql-ce/pull/632) | -| [pmclain](https://github.com/pmclain) | [#631](https://github.com/magento/magento2/issues/631) | [magento/graphql-ce#634](https://github.com/magento/graphql-ce/pull/634) | -| [dipti2jcommerce](https://github.com/dipti2jcommerce) | [#20124](https://github.com/magento/magento2/issues/20124) | [magento/magento2#20135](https://github.com/magento/magento2/pull/20135) | -| [WalterSmulders](https://github.com/WalterSmulders) | [#21978](https://github.com/magento/magento2/issues/21978) | [magento/magento2#22020](https://github.com/magento/magento2/pull/22020) | -| [afavata](https://github.com/afavata) | [#22045](https://github.com/magento/magento2/issues/22045) | [magento/magento2#22260](https://github.com/magento/magento2/pull/22260) | -| [Userr017](https://github.com/Userr017) | [#22134](https://github.com/magento/magento2/issues/22134) | [magento/magento2#22260](https://github.com/magento/magento2/pull/22260) | -| [sjb9774](https://github.com/sjb9774) | [#22249](https://github.com/magento/magento2/issues/22249) | [magento/magento2#22287](https://github.com/magento/magento2/pull/22287) | -| [bhavik43](https://github.com/bhavik43) | [#22527](https://github.com/magento/magento2/issues/22527) | [magento/magento2#22532](https://github.com/magento/magento2/pull/22532) | -| [tzyganu](https://github.com/tzyganu) | [#628](https://github.com/magento/magento2/issues/628) | [magento/graphql-ce#636](https://github.com/magento/graphql-ce/pull/636) | -| [fzaninotto](https://github.com/fzaninotto) | [#640](https://github.com/magento/magento2/issues/640) | [magento/graphql-ce#648](https://github.com/magento/graphql-ce/pull/648) | -| [akulkarni9](https://github.com/akulkarni9) | [#603](https://github.com/magento/magento2/issues/603) | [magento/graphql-ce#653](https://github.com/magento/graphql-ce/pull/653) | -| [abrarpathan19](https://github.com/abrarpathan19) | [#22406](https://github.com/magento/magento2/issues/22406) | [magento/magento2#22423](https://github.com/magento/magento2/pull/22423) | -| [justinharris1986](https://github.com/justinharris1986) | [#19515](https://github.com/magento/magento2/issues/19515) | [magento/magento2#19767](https://github.com/magento/magento2/pull/19767) | -| [mam08ixo](https://github.com/mam08ixo) | [#21473](https://github.com/magento/magento2/issues/21473) | [magento/magento2#21992](https://github.com/magento/magento2/pull/21992) | -| [vishal-7037](https://github.com/vishal-7037) | [#22641](https://github.com/magento/magento2/issues/22641) | [magento/magento2#22643](https://github.com/magento/magento2/pull/22643) | -| [cedarvinda](https://github.com/cedarvinda) | [#22647](https://github.com/magento/magento2/issues/22647) | [magento/magento2#22656](https://github.com/magento/magento2/pull/22656) | -| [MichaelThessel](https://github.com/MichaelThessel) | [#22395](https://github.com/magento/magento2/issues/22395) | [magento/magento2#22720](https://github.com/magento/magento2/pull/22720) | -| [gfxguru](https://github.com/gfxguru) | [#198](https://github.com/magento/magento2/issues/198) | [magento/graphql-ce#371](https://github.com/magento/graphql-ce/pull/371) | -| [ed29](https://github.com/ed29) | [#436](https://github.com/magento/magento2/issues/436) | [magento/graphql-ce#445](https://github.com/magento/graphql-ce/pull/445) | -| [vigentocommerce](https://github.com/vigentocommerce) | [#309](https://github.com/magento/magento2/issues/309) | [magento/graphql-ce#504](https://github.com/magento/graphql-ce/pull/504) | -| beckindesigns | [#535](https://github.com/magento/magento2/issues/535) | [magento/graphql-ce#650](https://github.com/magento/graphql-ce/pull/650) | -| [tzyganu](https://github.com/tzyganu) | [#658](https://github.com/magento/magento2/issues/658) | [magento/graphql-ce#665](https://github.com/magento/graphql-ce/pull/665), [magento/graphql-ce#744](https://github.com/magento/graphql-ce/pull/744) | -| [tzyganu](https://github.com/tzyganu) | [#657](https://github.com/magento/magento2/issues/657) | [magento/graphql-ce#666](https://github.com/magento/graphql-ce/pull/666) | -| [fwolfst](https://github.com/fwolfst) | [#12612](https://github.com/magento/magento2/issues/12612) | [magento/magento2#22558](https://github.com/magento/magento2/pull/22558) | -| [Leone](https://github.com/Leone) | [#22556](https://github.com/magento/magento2/issues/22556) | [magento/magento2#22558](https://github.com/magento/magento2/pull/22558) | -| [VincentMarmiesse](https://github.com/VincentMarmiesse) | [#20843](https://github.com/magento/magento2/issues/20843) | [magento/magento2#22560](https://github.com/magento/magento2/pull/22560) | -| [cedarvinda](https://github.com/cedarvinda) | [#22636](https://github.com/magento/magento2/issues/22636) | [magento/magento2#22644](https://github.com/magento/magento2/pull/22644) | -| [Surabhi-Cedcoss](https://github.com/Surabhi-Cedcoss) | [#22640](https://github.com/magento/magento2/issues/22640) | [magento/magento2#22655](https://github.com/magento/magento2/pull/22655) | -| [mage2pratik](https://github.com/mage2pratik) | [#20906](https://github.com/magento/magento2/issues/20906) | [magento/magento2#22739](https://github.com/magento/magento2/pull/22739) | -| [Patelcc](https://github.com/Patelcc) | [#22771](https://github.com/magento/magento2/issues/22771) | [magento/magento2#22779](https://github.com/magento/magento2/pull/22779) | -| [DigitalStartupUK](https://github.com/DigitalStartupUK) | [#22788](https://github.com/magento/magento2/issues/22788) | [magento/magento2#22791](https://github.com/magento/magento2/pull/22791) | -| [Hoszi](https://github.com/Hoszi) | [#18651](https://github.com/magento/magento2/issues/18651) | [magento/magento2#19584](https://github.com/magento/magento2/pull/19584) | -| [gwharton](https://github.com/gwharton) | [#21672](https://github.com/magento/magento2/issues/21672) | [magento/magento2#21675](https://github.com/magento/magento2/pull/21675), [magento/magento2#21674](https://github.com/magento/magento2/pull/21674) | -| [mtwegrzycki](https://github.com/mtwegrzycki) | [#22028](https://github.com/magento/magento2/issues/22028) | [magento/magento2#22575](https://github.com/magento/magento2/pull/22575) | -| [Dharmeshvaja91](https://github.com/Dharmeshvaja91) | [#21558](https://github.com/magento/magento2/issues/21558) | [magento/magento2#22794](https://github.com/magento/magento2/pull/22794) | -| [jhruehl](https://github.com/jhruehl) | [#22127](https://github.com/magento/magento2/issues/22127) | [magento/magento2#22186](https://github.com/magento/magento2/pull/22186) | -| [magesanjay](https://github.com/magesanjay) | [#22639](https://github.com/magento/magento2/issues/22639) | [magento/magento2#22724](https://github.com/magento/magento2/pull/22724) | -| [cedarvinda](https://github.com/cedarvinda) | [#22676](https://github.com/magento/magento2/issues/22676) | [magento/magento2#22742](https://github.com/magento/magento2/pull/22742) | -| [JacobDrummond](https://github.com/JacobDrummond) | [#6659](https://github.com/magento/magento2/issues/6659) | [magento/magento2#22850](https://github.com/magento/magento2/pull/22850) | -| [BenSpace48](https://github.com/BenSpace48) | [#4628](https://github.com/magento/magento2/issues/4628) | [magento/magento2#22854](https://github.com/magento/magento2/pull/22854) | -| [samtay](https://github.com/samtay) | [#3795](https://github.com/magento/magento2/issues/3795) | [magento/magento2#21397](https://github.com/magento/magento2/pull/21397) | -| [serhiyzhovnir](https://github.com/serhiyzhovnir) | [#22786](https://github.com/magento/magento2/issues/22786) | [magento/magento2#22787](https://github.com/magento/magento2/pull/22787) | -| [eduard13](https://github.com/eduard13) | [#22822](https://github.com/magento/magento2/issues/22822) | [magento/magento2#22823](https://github.com/magento/magento2/pull/22823) | -| [talset](https://github.com/talset) | [#21852](https://github.com/magento/magento2/issues/21852) | [magento/magento2#22607](https://github.com/magento/magento2/pull/22607) | -| [hostep](https://github.com/hostep) | [#22563](https://github.com/magento/magento2/issues/22563) | [magento/magento2#22607](https://github.com/magento/magento2/pull/22607) | -| [bhavik43](https://github.com/bhavik43) | [#22736](https://github.com/magento/magento2/issues/22736) | [magento/magento2#22795](https://github.com/magento/magento2/pull/22795) | -| [amitvishvakarma](https://github.com/amitvishvakarma) | [#22875](https://github.com/magento/magento2/issues/22875) | [magento/magento2#22876](https://github.com/magento/magento2/pull/22876) | -| [abrarpathan19](https://github.com/abrarpathan19) | [#21214](https://github.com/magento/magento2/issues/21214) | [magento/magento2#21215](https://github.com/magento/magento2/pull/21215) | -| [mikelevy300](https://github.com/mikelevy300) | [#22143](https://github.com/magento/magento2/issues/22143) | [magento/magento2#22307](https://github.com/magento/magento2/pull/22307) | -| [p-bystritsky](https://github.com/p-bystritsky) | [#22317](https://github.com/magento/magento2/issues/22317) | [magento/magento2#22444](https://github.com/magento/magento2/pull/22444) | -| [MichaelThessel](https://github.com/MichaelThessel) | [#22396](https://github.com/magento/magento2/issues/22396) | [magento/magento2#22513](https://github.com/magento/magento2/pull/22513) | -| [GrishmaNayee](https://github.com/GrishmaNayee) | [#22506](https://github.com/magento/magento2/issues/22506) | [magento/magento2#22520](https://github.com/magento/magento2/pull/22520) | -| [808brinks](https://github.com/808brinks) | [#22869](https://github.com/magento/magento2/issues/22869) | [magento/magento2#22893](https://github.com/magento/magento2/pull/22893) | -| [speedy008](https://github.com/speedy008) | [#22924](https://github.com/magento/magento2/issues/22924) | [magento/magento2#22926](https://github.com/magento/magento2/pull/22926) | -| [ipascual](https://github.com/ipascual) | [#20186](https://github.com/magento/magento2/issues/20186) | [magento/magento2#22947](https://github.com/magento/magento2/pull/22947) | -| [steadweb](https://github.com/steadweb) | [#574](https://github.com/magento/magento2/issues/574) | [magento/graphql-ce#694](https://github.com/magento/graphql-ce/pull/694) | -| [tzyganu](https://github.com/tzyganu) | [#686](https://github.com/magento/magento2/issues/686) | [magento/graphql-ce#695](https://github.com/magento/graphql-ce/pull/695) | -| [daniel-ifrim](https://github.com/daniel-ifrim) | [#22380](https://github.com/magento/magento2/issues/22380) | [magento/magento2#22387](https://github.com/magento/magento2/pull/22387) | -| [Cristiano81](https://github.com/Cristiano81) | [#18183](https://github.com/magento/magento2/issues/18183) | [magento/magento2#22718](https://github.com/magento/magento2/pull/22718) | -| [eduan](https://github.com/eduan) | [#22899](https://github.com/magento/magento2/issues/22899) | [magento/magento2#22914](https://github.com/magento/magento2/pull/22914) | -| [milindsingh](https://github.com/milindsingh) | [#22686](https://github.com/magento/magento2/issues/22686) | [magento/magento2#22687](https://github.com/magento/magento2/pull/22687) | -| [Sharkozp](https://github.com/Sharkozp) | [#22767](https://github.com/magento/magento2/issues/22767) | [magento/magento2#22772](https://github.com/magento/magento2/pull/22772) | -| [speedy008](https://github.com/speedy008) | [#20788](https://github.com/magento/magento2/issues/20788) | [magento/magento2#22931](https://github.com/magento/magento2/pull/22931) | -| [matin73](https://github.com/matin73) | [#23030](https://github.com/magento/magento2/issues/23030) | [magento/magento2#23033](https://github.com/magento/magento2/pull/23033) | -| [Den4ik](https://github.com/Den4ik) | [#23034](https://github.com/magento/magento2/issues/23034) | [magento/magento2#23035](https://github.com/magento/magento2/pull/23035) | -| [Vinai](https://github.com/Vinai) | [#12696](https://github.com/magento/magento2/issues/12696) | [magento/magento2#18459](https://github.com/magento/magento2/pull/18459) | -| [arnoudhgz](https://github.com/arnoudhgz) | [#13266](https://github.com/magento/magento2/issues/13266) | [magento/magento2#22071](https://github.com/magento/magento2/pull/22071) | -| [ihor-sviziev](https://github.com/ihor-sviziev) | [#22882](https://github.com/magento/magento2/issues/22882) | [magento/magento2#22884](https://github.com/magento/magento2/pull/22884) | -| [ashsmith](https://github.com/ashsmith) | [#23045](https://github.com/magento/magento2/issues/23045) | [magento/magento2#23046](https://github.com/magento/magento2/pull/23046) | -| [LouNik1984](https://github.com/LouNik1984) | [#16446](https://github.com/magento/magento2/issues/16446) | [magento/magento2#19184](https://github.com/magento/magento2/pull/19184) | -| [victortodoran](https://github.com/victortodoran) | [#14492](https://github.com/magento/magento2/issues/14492) | [magento/magento2#21394](https://github.com/magento/magento2/pull/21394) | -| [gwharton](https://github.com/gwharton) | [#21671](https://github.com/magento/magento2/issues/21671) | [magento/magento2#21674](https://github.com/magento/magento2/pull/21674) | -| [ketan-krish](https://github.com/ketan-krish) | [#22425](https://github.com/magento/magento2/issues/22425) | [magento/magento2#22426](https://github.com/magento/magento2/pull/22426) | -| [squeegy06](https://github.com/squeegy06) | [#22511](https://github.com/magento/magento2/issues/22511) | [magento/magento2#22521](https://github.com/magento/magento2/pull/22521) | -| alexeya-ven | [#23080](https://github.com/magento/magento2/issues/23080) | [magento/magento2#23081](https://github.com/magento/magento2/pull/23081) | -| [aasim110](https://github.com/aasim110) | [#19872](https://github.com/magento/magento2/issues/19872) | [magento/magento2#21131](https://github.com/magento/magento2/pull/21131) | -| [jasonkcarter](https://github.com/jasonkcarter) | [#22092](https://github.com/magento/magento2/issues/22092) | [magento/magento2#21131](https://github.com/magento/magento2/pull/21131) | -| [nicholasscottfish](https://github.com/nicholasscottfish) | [#22087](https://github.com/magento/magento2/issues/22087) | [magento/magento2#22646](https://github.com/magento/magento2/pull/22646) | -| [gwharton](https://github.com/gwharton) | [#21546](https://github.com/magento/magento2/issues/21546) | [magento/magento2#21605](https://github.com/magento/magento2/pull/21605) | -| [gwharton](https://github.com/gwharton) | [#21604](https://github.com/magento/magento2/issues/21604) | [magento/magento2#21605](https://github.com/magento/magento2/pull/21605) | -| [fetzi](https://github.com/fetzi) | [#4247](https://github.com/magento/magento2/issues/4247) | [magento/magento2#21876](https://github.com/magento/magento2/pull/21876) | -| [renard123](https://github.com/renard123) | [#22940](https://github.com/magento/magento2/issues/22940) | [magento/magento2#23007](https://github.com/magento/magento2/pull/23007) | -| [TomashKhamlai](https://github.com/TomashKhamlai) | [#23053](https://github.com/magento/magento2/issues/23053) | [magento/magento2#23118](https://github.com/magento/magento2/pull/23118) | -| [tzyganu](https://github.com/tzyganu) | [#675](https://github.com/magento/magento2/issues/675) | [magento/graphql-ce#677](https://github.com/magento/graphql-ce/pull/677) | -| [joshdifabio](https://github.com/joshdifabio) | [#682](https://github.com/magento/magento2/issues/682) | [magento/graphql-ce#700](https://github.com/magento/graphql-ce/pull/700) | -| [tzyganu](https://github.com/tzyganu) | [#681](https://github.com/magento/magento2/issues/681) | [magento/graphql-ce#711](https://github.com/magento/graphql-ce/pull/711) | -| [cdiacon](https://github.com/cdiacon) | [#22484](https://github.com/magento/magento2/issues/22484) | [magento/magento2#22637](https://github.com/magento/magento2/pull/22637) | -| [atwixfirster](https://github.com/atwixfirster) | [#23138](https://github.com/magento/magento2/issues/23138) | [magento/magento2#23140](https://github.com/magento/magento2/pull/23140) | -| [huyenvk2017](https://github.com/huyenvk2017) | [#22004](https://github.com/magento/magento2/issues/22004) | [magento/magento2#22704](https://github.com/magento/magento2/pull/22704) | -| [ioweb-gr](https://github.com/ioweb-gr) | [#22870](https://github.com/magento/magento2/issues/22870) | [magento/magento2#22933](https://github.com/magento/magento2/pull/22933) | -| [ioweb-gr](https://github.com/ioweb-gr) | [#22808](https://github.com/magento/magento2/issues/22808) | [magento/magento2#23005](https://github.com/magento/magento2/pull/23005) | -| [tzyganu](https://github.com/tzyganu) | [#674](https://github.com/magento/magento2/issues/674) | [magento/graphql-ce#709](https://github.com/magento/graphql-ce/pull/709) | -| [thecaligarmo](https://github.com/thecaligarmo) | [#683](https://github.com/magento/magento2/issues/683) | [magento/graphql-ce#717](https://github.com/magento/graphql-ce/pull/717) | -| [MagePsycho](https://github.com/MagePsycho) | [#9113](https://github.com/magento/magento2/issues/9113) | [magento/graphql-ce#721](https://github.com/magento/graphql-ce/pull/721) | -| [BezV8](https://github.com/BezV8) | [#18337](https://github.com/magento/magento2/issues/18337) | [magento/magento2#22942](https://github.com/magento/magento2/pull/22942) | -| [amitvishvakarma](https://github.com/amitvishvakarma) | [#23213](https://github.com/magento/magento2/issues/23213) | [magento/magento2#23216](https://github.com/magento/magento2/pull/23216) | -| [renard123](https://github.com/renard123) | [#23238](https://github.com/magento/magento2/issues/23238) | [magento/magento2#23250](https://github.com/magento/magento2/pull/23250) | -| [teokolo](https://github.com/teokolo) | [#4788](https://github.com/magento/magento2/issues/4788) | [magento/magento2#23129](https://github.com/magento/magento2/pull/23129) | -| [AlexWorking](https://github.com/AlexWorking) | [#22934](https://github.com/magento/magento2/issues/22934) | [magento/magento2#23129](https://github.com/magento/magento2/pull/23129) | -| [JeroenVanLeusden](https://github.com/JeroenVanLeusden) | [#23266](https://github.com/magento/magento2/issues/23266) | [magento/magento2#23267](https://github.com/magento/magento2/pull/23267) | -| [nishantjariwala](https://github.com/nishantjariwala) | [#23285](https://github.com/magento/magento2/issues/23285) | [magento/magento2#23286](https://github.com/magento/magento2/pull/23286) | -| [jamiemck](https://github.com/jamiemck) | [#486](https://github.com/magento/magento2/issues/486) | [magento/graphql-ce#714](https://github.com/magento/graphql-ce/pull/714) | -| [Dorn-](https://github.com/Dorn-) | [#716](https://github.com/magento/magento2/issues/716) | [magento/graphql-ce#723](https://github.com/magento/graphql-ce/pull/723) | -| [gstaniforthsessiondigital](https://github.com/gstaniforthsessiondigital) | [#687](https://github.com/magento/magento2/issues/687) | [magento/graphql-ce#749](https://github.com/magento/graphql-ce/pull/749) | -| [bharanikonda](https://github.com/bharanikonda) | [#20038](https://github.com/magento/magento2/issues/20038) | [magento/magento2#22675](https://github.com/magento/magento2/pull/22675) | -| [Vishrootways](https://github.com/Vishrootways) | [#23074](https://github.com/magento/magento2/issues/23074) | [magento/magento2#23309](https://github.com/magento/magento2/pull/23309) | -| [gfxguru](https://github.com/gfxguru) | [#622](https://github.com/magento/magento2/issues/622) | [magento/graphql-ce#626](https://github.com/magento/graphql-ce/pull/626) | -| [tzyganu](https://github.com/tzyganu) | [#732](https://github.com/magento/magento2/issues/732) | [magento/graphql-ce#734](https://github.com/magento/graphql-ce/pull/734) | -| [novakivskiy](https://github.com/novakivskiy) | [#13227](https://github.com/magento/magento2/issues/13227) | [magento/magento2#22650](https://github.com/magento/magento2/pull/22650) | -| [magesanjay](https://github.com/magesanjay) | [#22638](https://github.com/magento/magento2/issues/22638) | [magento/magento2#22800](https://github.com/magento/magento2/pull/22800) | -| [ilnytskyi](https://github.com/ilnytskyi) | [#22266](https://github.com/magento/magento2/issues/22266) | [magento/magento2#23218](https://github.com/magento/magento2/pull/23218) | -| [OleksiiBulba](https://github.com/OleksiiBulba) | [#23230](https://github.com/magento/magento2/issues/23230) | [magento/magento2#23247](https://github.com/magento/magento2/pull/23247) | -| alexeya-ven | [#23333](https://github.com/magento/magento2/issues/23333) | [magento/magento2#23338](https://github.com/magento/magento2/pull/23338) | -| [TomashKhamlai](https://github.com/TomashKhamlai) | [#23346](https://github.com/magento/magento2/issues/23346) | [magento/magento2#23367](https://github.com/magento/magento2/pull/23367) | -| [udovicic](https://github.com/udovicic) | [#21380](https://github.com/magento/magento2/issues/21380) | [magento/magento2#23312](https://github.com/magento/magento2/pull/23312) | -| [oleksii-lisovyi](https://github.com/oleksii-lisovyi) | [#21136](https://github.com/magento/magento2/issues/21136) | [magento/magento2#22116](https://github.com/magento/magento2/pull/22116) | -| [eduard13](https://github.com/eduard13) | [#23233](https://github.com/magento/magento2/issues/23233) | [magento/magento2#23234](https://github.com/magento/magento2/pull/23234) | -| [AndreasMueller75](https://github.com/AndreasMueller75) | [#21974](https://github.com/magento/magento2/issues/21974) | [magento/magento2#23393](https://github.com/magento/magento2/pull/23393) | -| [iamckindia](https://github.com/iamckindia) | [#23377](https://github.com/magento/magento2/issues/23377) | [magento/magento2#23394](https://github.com/magento/magento2/pull/23394) | -| [YurySk](https://github.com/YurySk) | [#22998](https://github.com/magento/magento2/issues/22998) | [magento/magento2#23048](https://github.com/magento/magento2/pull/23048) | -| [ankurvr](https://github.com/ankurvr) | [#23522](https://github.com/magento/magento2/issues/23522) | [magento/magento2#23523](https://github.com/magento/magento2/pull/23523) | -| [CNanninga](https://github.com/CNanninga) | [#8298](https://github.com/magento/magento2/issues/8298) | [magento/magento2#23528](https://github.com/magento/magento2/pull/23528) | -| [gwharton](https://github.com/gwharton) | [#22103](https://github.com/magento/magento2/issues/22103) | [magento/magento2#23535](https://github.com/magento/magento2/pull/23535) | -| [msawyers](https://github.com/msawyers) | [#23199](https://github.com/magento/magento2/issues/23199) | [magento/magento2#23535](https://github.com/magento/magento2/pull/23535) | -| [sunilit42](https://github.com/sunilit42) | [#23538](https://github.com/magento/magento2/issues/23538) | [magento/magento2#23541](https://github.com/magento/magento2/pull/23541) | -| [speedy008](https://github.com/speedy008) | [#21126](https://github.com/magento/magento2/issues/21126) | [magento/magento2#21128](https://github.com/magento/magento2/pull/21128) | -| [dipeshrangani](https://github.com/dipeshrangani) | [#23471](https://github.com/magento/magento2/issues/23471) | [magento/magento2#23474](https://github.com/magento/magento2/pull/23474) | -| [nirmalraval18](https://github.com/nirmalraval18) | [#23466](https://github.com/magento/magento2/issues/23466) | [magento/magento2#23477](https://github.com/magento/magento2/pull/23477) | -| [vrajesh-patel1993](https://github.com/vrajesh-patel1993) | [#23467](https://github.com/magento/magento2/issues/23467) | [magento/magento2#23494](https://github.com/magento/magento2/pull/23494) | -| [stkrelax](https://github.com/stkrelax) | [#23222](https://github.com/magento/magento2/issues/23222) | [magento/magento2#23310](https://github.com/magento/magento2/pull/23310) | -| [bhavik43](https://github.com/bhavik43) | [#23354](https://github.com/magento/magento2/issues/23354) | [magento/magento2#23360](https://github.com/magento/magento2/pull/23360) | -| [engcom-Golf](https://github.com/engcom-Golf) | [#23424](https://github.com/magento/magento2/issues/23424) | [magento/magento2#23427](https://github.com/magento/magento2/pull/23427) | -| [molovo](https://github.com/molovo) | [#16234](https://github.com/magento/magento2/issues/16234) | [magento/magento2#23496](https://github.com/magento/magento2/pull/23496) | -| [troublediehard](https://github.com/troublediehard) | [#9798](https://github.com/magento/magento2/issues/9798) | [magento/magento2#23529](https://github.com/magento/magento2/pull/23529) | -| [alexgoodey](https://github.com/alexgoodey) | [#6287](https://github.com/magento/magento2/issues/6287) | [magento/magento2#20918](https://github.com/magento/magento2/pull/20918) | -| [kanduvisla](https://github.com/kanduvisla) | [#8258](https://github.com/magento/magento2/issues/8258) | [magento/magento2#15383](https://github.com/magento/magento2/pull/15383) | -| [craigcarnell](https://github.com/craigcarnell) | [#13561](https://github.com/magento/magento2/issues/13561) | [magento/magento2#18075](https://github.com/magento/magento2/pull/18075) | -| [KooTjoo](https://github.com/KooTjoo) | [#22545](https://github.com/magento/magento2/issues/22545) | [magento/magento2#22658](https://github.com/magento/magento2/pull/22658) | -| [diamondavocado](https://github.com/diamondavocado) | [#23383](https://github.com/magento/magento2/issues/23383) | [magento/magento2#23500](https://github.com/magento/magento2/pull/23500) | -| [bhavik43](https://github.com/bhavik43) | [#22950](https://github.com/magento/magento2/issues/22950) | [magento/magento2#23226](https://github.com/magento/magento2/pull/23226) | -| [rogyar](https://github.com/rogyar) | [#23606](https://github.com/magento/magento2/issues/23606) | [magento/magento2#23607](https://github.com/magento/magento2/pull/23607) | -| [tzyganu](https://github.com/tzyganu) | [#736](https://github.com/magento/magento2/issues/736) | [magento/graphql-ce#747](https://github.com/magento/graphql-ce/pull/747) | -| [Vinai](https://github.com/Vinai) | [#739](https://github.com/magento/magento2/issues/739) | [magento/graphql-ce#753](https://github.com/magento/graphql-ce/pull/753) | -| [bst2002git](https://github.com/bst2002git) | [#23435](https://github.com/magento/magento2/issues/23435) | [magento/magento2#23444](https://github.com/magento/magento2/pull/23444) | -| [AleksLi](https://github.com/AleksLi) | [#12817](https://github.com/magento/magento2/issues/12817) | [magento/magento2#20579](https://github.com/magento/magento2/pull/20579) | -| [swnsma](https://github.com/swnsma) | [#23386](https://github.com/magento/magento2/issues/23386) | [magento/magento2#23387](https://github.com/magento/magento2/pull/23387) | -| [pavdan](https://github.com/pavdan) | [#23345](https://github.com/magento/magento2/issues/23345) | [magento/magento2#23358](https://github.com/magento/magento2/pull/23358) | -| [davidpixie](https://github.com/davidpixie) | [#22814](https://github.com/magento/magento2/issues/22814) | [magento/magento2#23459](https://github.com/magento/magento2/pull/23459) | -| [gwharton](https://github.com/gwharton) | [#23594](https://github.com/magento/magento2/issues/23594) | [magento/magento2#23598](https://github.com/magento/magento2/pull/23598) | -| [gwharton](https://github.com/gwharton) | [#23595](https://github.com/magento/magento2/issues/23595) | [magento/magento2#23598](https://github.com/magento/magento2/pull/23598) | -| [gwharton](https://github.com/gwharton) | [#23596](https://github.com/magento/magento2/issues/23596) | [magento/magento2#23598](https://github.com/magento/magento2/pull/23598) | -| [ffauvel](https://github.com/ffauvel) | [#23643](https://github.com/magento/magento2/issues/23643) | [magento/magento2#23649](https://github.com/magento/magento2/pull/23649) | -| [gwharton](https://github.com/gwharton) | [#23597](https://github.com/magento/magento2/issues/23597) | [magento/magento2#23710](https://github.com/magento/magento2/pull/23710) | -| [shinoamakusa](https://github.com/shinoamakusa) | [#23510](https://github.com/magento/magento2/issues/23510) | [magento/magento2#23524](https://github.com/magento/magento2/pull/23524) | -| [kassner](https://github.com/kassner) | [#22890](https://github.com/magento/magento2/issues/22890) | [magento/magento2#22891](https://github.com/magento/magento2/pull/22891) | -| [QuentinFarizon](https://github.com/QuentinFarizon) | [#23054](https://github.com/magento/magento2/issues/23054) | [magento/magento2#23125](https://github.com/magento/magento2/pull/23125) | -| [roma84](https://github.com/roma84) | [#23135](https://github.com/magento/magento2/issues/23135) | [magento/magento2#23173](https://github.com/magento/magento2/pull/23173) | -| [navarr](https://github.com/navarr) | [#23211](https://github.com/magento/magento2/issues/23211) | [magento/magento2#23688](https://github.com/magento/magento2/pull/23688) | -| [simonlandry0](https://github.com/simonlandry0) | [#23624](https://github.com/magento/magento2/issues/23624) | [magento/magento2#23718](https://github.com/magento/magento2/pull/23718) | -| [ioweb-gr](https://github.com/ioweb-gr) | [#23717](https://github.com/magento/magento2/issues/23717) | [magento/magento2#23753](https://github.com/magento/magento2/pull/23753) | -| [tzyganu](https://github.com/tzyganu) | [#758](https://github.com/magento/magento2/issues/758) | [magento/graphql-ce#759](https://github.com/magento/graphql-ce/pull/759) | -| [patelnimesh1988](https://github.com/patelnimesh1988) | [#14071](https://github.com/magento/magento2/issues/14071) | [magento/magento2#22984](https://github.com/magento/magento2/pull/22984) | -| [delyriand](https://github.com/delyriand) | [#22112](https://github.com/magento/magento2/issues/22112) | [magento/magento2#23656](https://github.com/magento/magento2/pull/23656) | -| [shilpambb](https://github.com/shilpambb) | [#23654](https://github.com/magento/magento2/issues/23654) | [magento/magento2#23681](https://github.com/magento/magento2/pull/23681) | -| [gwharton](https://github.com/gwharton) | [#23751](https://github.com/magento/magento2/issues/23751) | [magento/magento2#23752](https://github.com/magento/magento2/pull/23752) | -| [textarea](https://github.com/textarea) | [#23678](https://github.com/magento/magento2/issues/23678) | [magento/magento2#23679](https://github.com/magento/magento2/pull/23679) | -| [edenduong](https://github.com/edenduong) | [#23777](https://github.com/magento/magento2/issues/23777) | [magento/magento2#23779](https://github.com/magento/magento2/pull/23779) | -| [p-bystritsky](https://github.com/p-bystritsky) | [#23789](https://github.com/magento/magento2/issues/23789) | [magento/magento2#23790](https://github.com/magento/magento2/pull/23790) | -| [nehaguptacedcoss](https://github.com/nehaguptacedcoss) | [#22702](https://github.com/magento/magento2/issues/22702) | [magento/magento2#23803](https://github.com/magento/magento2/pull/23803) | -| [clockworkgeek](https://github.com/clockworkgeek) | [#167](https://github.com/magento/magento2/issues/167) | [magento/graphql-ce#351](https://github.com/magento/graphql-ce/pull/351) | -| [ihor-sviziev](https://github.com/ihor-sviziev) | [#438](https://github.com/magento/magento2/issues/438) | [magento/graphql-ce#699](https://github.com/magento/graphql-ce/pull/699) | -| [fatihky](https://github.com/fatihky) | [#702](https://github.com/magento/magento2/issues/702) | [magento/graphql-ce#779](https://github.com/magento/graphql-ce/pull/779) | -| [Vinai](https://github.com/Vinai) | [#738](https://github.com/magento/magento2/issues/738) | [magento/graphql-ce#789](https://github.com/magento/graphql-ce/pull/789) | -| [pmsteil](https://github.com/pmsteil) | [#23405](https://github.com/magento/magento2/issues/23405) | [magento/magento2#23866](https://github.com/magento/magento2/pull/23866) | -| [edenduong](https://github.com/edenduong) | [#23900](https://github.com/magento/magento2/issues/23900) | [magento/magento2#23901](https://github.com/magento/magento2/pull/23901) | -| [edenduong](https://github.com/edenduong) | [#23904](https://github.com/magento/magento2/issues/23904) | [magento/magento2#23905](https://github.com/magento/magento2/pull/23905) | -| [edenduong](https://github.com/edenduong) | [#23916](https://github.com/magento/magento2/issues/23916) | [magento/magento2#23917](https://github.com/magento/magento2/pull/23917) | -| [mfickers](https://github.com/mfickers) | [#23932](https://github.com/magento/magento2/issues/23932) | [magento/magento2#23933](https://github.com/magento/magento2/pull/23933) | +| Vitaliy Boyko | [#533](https://github.com/magento/magento2/issues/533) | [magento/graphql-ce#578](https://github.com/magento/graphql-ce/pull/578) | +| Patrick McLain | [#601](https://github.com/magento/magento2/issues/601) | [magento/graphql-ce#632](https://github.com/magento/graphql-ce/pull/632) | +| Oscar Recio | [#631](https://github.com/magento/magento2/issues/631) | [magento/graphql-ce#634](https://github.com/magento/graphql-ce/pull/634) | +| Arvinda Kumar | [#20124](https://github.com/magento/magento2/issues/20124) | [magento/magento2#20135](https://github.com/magento/magento2/pull/20135) | +| dudzio12 | [#21978](https://github.com/magento/magento2/issues/21978) | [magento/magento2#22020](https://github.com/magento/magento2/pull/22020) | +| Nazar Klovanych | [#22045](https://github.com/magento/magento2/issues/22045) | [magento/magento2#22260](https://github.com/magento/magento2/pull/22260) | +| Nazar Klovanych | [#22134](https://github.com/magento/magento2/issues/22134) | [magento/magento2#22260](https://github.com/magento/magento2/pull/22260) | +| Mateusz Wira | [#22249](https://github.com/magento/magento2/issues/22249) | [magento/magento2#22287](https://github.com/magento/magento2/pull/22287) | +| sanjaychouhan-webkul | [#22527](https://github.com/magento/magento2/issues/22527) | [magento/magento2#22532](https://github.com/magento/magento2/pull/22532) | +| Oscar Recio | [#628](https://github.com/magento/magento2/issues/628) | [magento/graphql-ce#636](https://github.com/magento/graphql-ce/pull/636) | +| Vitaliy Boyko | [#640](https://github.com/magento/magento2/issues/640) | [magento/graphql-ce#648](https://github.com/magento/graphql-ce/pull/648) | +| vovsky | [#603](https://github.com/magento/magento2/issues/603) | [magento/graphql-ce#653](https://github.com/magento/graphql-ce/pull/653) | +| Sudhanshu Bajaj | [#22406](https://github.com/magento/magento2/issues/22406) | [magento/magento2#22423](https://github.com/magento/magento2/pull/22423) | +| Patrick McLain | [#19515](https://github.com/magento/magento2/issues/19515) | [magento/magento2#19767](https://github.com/magento/magento2/pull/19767) | +| Roman Kis | [#21473](https://github.com/magento/magento2/issues/21473) | [magento/magento2#21992](https://github.com/magento/magento2/pull/21992) | +| Vishal Sutariya | [#22641](https://github.com/magento/magento2/issues/22641) | [magento/magento2#22643](https://github.com/magento/magento2/pull/22643) | +| Arvinda Kumar | [#22647](https://github.com/magento/magento2/issues/22647) | [magento/magento2#22656](https://github.com/magento/magento2/pull/22656) | +| Satya Prakash | [#22395](https://github.com/magento/magento2/issues/22395) | [magento/magento2#22720](https://github.com/magento/magento2/pull/22720) | +| Vitaliy Boyko | [#198](https://github.com/magento/magento2/issues/198) | [magento/graphql-ce#371](https://github.com/magento/graphql-ce/pull/371) | +| Yogesh Suhagiya | [#436](https://github.com/magento/magento2/issues/436) | [magento/graphql-ce#445](https://github.com/magento/graphql-ce/pull/445) | +| Vitaliy Boyko | [#309](https://github.com/magento/magento2/issues/309) | [magento/graphql-ce#504](https://github.com/magento/graphql-ce/pull/504) | +| Vitaliy Boyko | [#535](https://github.com/magento/magento2/issues/535) | [magento/graphql-ce#650](https://github.com/magento/graphql-ce/pull/650) | +| Patrick McLain | [#658](https://github.com/magento/magento2/issues/658) | [magento/graphql-ce#665](https://github.com/magento/graphql-ce/pull/665), [magento/graphql-ce#744](https://github.com/magento/graphql-ce/pull/744) | +| Patrick McLain | [#657](https://github.com/magento/magento2/issues/657) | [magento/graphql-ce#666](https://github.com/magento/graphql-ce/pull/666) | +| Grzegorz Bogusz | [#12612](https://github.com/magento/magento2/issues/12612) | [magento/magento2#22558](https://github.com/magento/magento2/pull/22558) | +| Grzegorz Bogusz | [#22556](https://github.com/magento/magento2/issues/22556) | [magento/magento2#22558](https://github.com/magento/magento2/pull/22558) | +| Mark van der Sanden | [#20843](https://github.com/magento/magento2/issues/20843) | [magento/magento2#22560](https://github.com/magento/magento2/pull/22560) | +| Arvinda Kumar | [#22636](https://github.com/magento/magento2/issues/22636) | [magento/magento2#22644](https://github.com/magento/magento2/pull/22644) | +| Surabhi Cedcoss | [#22640](https://github.com/magento/magento2/issues/22640) | [magento/magento2#22655](https://github.com/magento/magento2/pull/22655) | +| Vlad Veselov | [#20906](https://github.com/magento/magento2/issues/20906) | [magento/magento2#22739](https://github.com/magento/magento2/pull/22739) | +| Serhiy Zhovnir | [#22771](https://github.com/magento/magento2/issues/22771) | [magento/magento2#22779](https://github.com/magento/magento2/pull/22779) | +| Gaurav Agarwal | [#22788](https://github.com/magento/magento2/issues/22788) | [magento/magento2#22791](https://github.com/magento/magento2/pull/22791) | +| Maksym Novik | [#18651](https://github.com/magento/magento2/issues/18651) | [magento/magento2#19584](https://github.com/magento/magento2/pull/19584) | +| gwharton | [#21672](https://github.com/magento/magento2/issues/21672) | [magento/magento2#21675](https://github.com/magento/magento2/pull/21675), [magento/magento2#21674](https://github.com/magento/magento2/pull/21674) | +| Mateusz Wegrzycki | [#22028](https://github.com/magento/magento2/issues/22028) | [magento/magento2#22575](https://github.com/magento/magento2/pull/22575) | +| sanjaychouhan-webkul | [#21558](https://github.com/magento/magento2/issues/21558) | [magento/magento2#22794](https://github.com/magento/magento2/pull/22794) | +| David Verholen | [#22127](https://github.com/magento/magento2/issues/22127) | [magento/magento2#22186](https://github.com/magento/magento2/pull/22186) | +| Mahesh Singh | [#22639](https://github.com/magento/magento2/issues/22639) | [magento/magento2#22724](https://github.com/magento/magento2/pull/22724) | +| Arvinda Kumar | [#22676](https://github.com/magento/magento2/issues/22676) | [magento/magento2#22742](https://github.com/magento/magento2/pull/22742) | +| Torben Höhn | [#6659](https://github.com/magento/magento2/issues/6659) | [magento/magento2#22850](https://github.com/magento/magento2/pull/22850) | +| Karla Saaremäe | [#4628](https://github.com/magento/magento2/issues/4628) | [magento/magento2#22854](https://github.com/magento/magento2/pull/22854) | +| Ravi Chandra | [#3795](https://github.com/magento/magento2/issues/3795) | [magento/magento2#21397](https://github.com/magento/magento2/pull/21397) | +| Serhiy Zhovnir | [#22786](https://github.com/magento/magento2/issues/22786) | [magento/magento2#22787](https://github.com/magento/magento2/pull/22787) | +| Eduard Chitoraga | [#22822](https://github.com/magento/magento2/issues/22822) | [magento/magento2#22823](https://github.com/magento/magento2/pull/22823) | +| David Alger | [#21852](https://github.com/magento/magento2/issues/21852) | [magento/magento2#22607](https://github.com/magento/magento2/pull/22607) | +| David Alger | [#22563](https://github.com/magento/magento2/issues/22563) | [magento/magento2#22607](https://github.com/magento/magento2/pull/22607) | +| sanjaychouhan-webkul | [#22736](https://github.com/magento/magento2/issues/22736) | [magento/magento2#22795](https://github.com/magento/magento2/pull/22795) | +| Amit Vishvakarma | [#22875](https://github.com/magento/magento2/issues/22875) | [magento/magento2#22876](https://github.com/magento/magento2/pull/22876) | +| Abrar Pathan | [#21214](https://github.com/magento/magento2/issues/21214) | [magento/magento2#21215](https://github.com/magento/magento2/pull/21215) | +| Nazar Klovanych | [#22143](https://github.com/magento/magento2/issues/22143) | [magento/magento2#22307](https://github.com/magento/magento2/pull/22307) | +| Pavel Bystritsky | [#22317](https://github.com/magento/magento2/issues/22317) | [magento/magento2#22444](https://github.com/magento/magento2/pull/22444) | +| Shikha Mishra | [#22396](https://github.com/magento/magento2/issues/22396) | [magento/magento2#22513](https://github.com/magento/magento2/pull/22513) | +| webkul-ajaysaini | [#22506](https://github.com/magento/magento2/issues/22506) | [magento/magento2#22520](https://github.com/magento/magento2/pull/22520) | +| Mateusz Wira | [#22869](https://github.com/magento/magento2/issues/22869) | [magento/magento2#22893](https://github.com/magento/magento2/pull/22893) | +| Kajal Solanki | [#22924](https://github.com/magento/magento2/issues/22924) | [magento/magento2#22926](https://github.com/magento/magento2/pull/22926) | +| Nazar Klovanych | [#20186](https://github.com/magento/magento2/issues/20186) | [magento/magento2#22947](https://github.com/magento/magento2/pull/22947) | +| Oscar Recio | [#574](https://github.com/magento/magento2/issues/574) | [magento/graphql-ce#694](https://github.com/magento/graphql-ce/pull/694) | +| Oscar Recio | [#686](https://github.com/magento/magento2/issues/686) | [magento/graphql-ce#695](https://github.com/magento/graphql-ce/pull/695) | +| Karan Shah | [#22380](https://github.com/magento/magento2/issues/22380) | [magento/magento2#22387](https://github.com/magento/magento2/pull/22387) | +| Adarsh Shukla | [#18183](https://github.com/magento/magento2/issues/18183) | [magento/magento2#22718](https://github.com/magento/magento2/pull/22718) | +| Serhiy Zhovnir | [#22899](https://github.com/magento/magento2/issues/22899) | [magento/magento2#22914](https://github.com/magento/magento2/pull/22914) | +| Milind Singh | [#22686](https://github.com/magento/magento2/issues/22686) | [magento/magento2#22687](https://github.com/magento/magento2/pull/22687) | +| Mahesh Singh | [#22767](https://github.com/magento/magento2/issues/22767) | [magento/magento2#22772](https://github.com/magento/magento2/pull/22772) | +| Hitesh | [#20788](https://github.com/magento/magento2/issues/20788) | [magento/magento2#22931](https://github.com/magento/magento2/pull/22931) | +| Milind Singh | [#23030](https://github.com/magento/magento2/issues/23030) | [magento/magento2#23033](https://github.com/magento/magento2/pull/23033) | +| Denis Kopylov | [#23034](https://github.com/magento/magento2/issues/23034) | [magento/magento2#23035](https://github.com/magento/magento2/pull/23035) | +| Andreas von Studnitz | [#12696](https://github.com/magento/magento2/issues/12696) | [magento/magento2#18459](https://github.com/magento/magento2/pull/18459) | +| Arnoud Beekman | [#13266](https://github.com/magento/magento2/issues/13266) | [magento/magento2#22071](https://github.com/magento/magento2/pull/22071) | +| Ihor Sviziev | [#22882](https://github.com/magento/magento2/issues/22882) | [magento/magento2#22884](https://github.com/magento/magento2/pull/22884) | +| Ash Smith | [#23045](https://github.com/magento/magento2/issues/23045) | [magento/magento2#23046](https://github.com/magento/magento2/pull/23046) | +| Ravi Chandra | [#16446](https://github.com/magento/magento2/issues/16446) | [magento/magento2#19184](https://github.com/magento/magento2/pull/19184) | +| Maksym Novik | [#14492](https://github.com/magento/magento2/issues/14492) | [magento/magento2#21394](https://github.com/magento/magento2/pull/21394) | +| gwharton | [#21671](https://github.com/magento/magento2/issues/21671) | [magento/magento2#21674](https://github.com/magento/magento2/pull/21674) | +| Ravi chandra | [#22425](https://github.com/magento/magento2/issues/22425) | [magento/magento2#22426](https://github.com/magento/magento2/pull/22426) | +| Mahesh Singh | [#22511](https://github.com/magento/magento2/issues/22511) | [magento/magento2#22521](https://github.com/magento/magento2/pull/22521) | +| Alexey Arendarenko | [#23080](https://github.com/magento/magento2/issues/23080) | [magento/magento2#23081](https://github.com/magento/magento2/pull/23081) | +| Bartłomiej Szubert | [#19872](https://github.com/magento/magento2/issues/19872) | [magento/magento2#21131](https://github.com/magento/magento2/pull/21131) | +| Bartłomiej Szubert | [#22092](https://github.com/magento/magento2/issues/22092) | [magento/magento2#21131](https://github.com/magento/magento2/pull/21131) | +| Surabhi Srivastava | [#22087](https://github.com/magento/magento2/issues/22087) | [magento/magento2#22646](https://github.com/magento/magento2/pull/22646) | +| gwharton | [#21546](https://github.com/magento/magento2/issues/21546) | [magento/magento2#21605](https://github.com/magento/magento2/pull/21605) | +| gwharton | [#21604](https://github.com/magento/magento2/issues/21604) | [magento/magento2#21605](https://github.com/magento/magento2/pull/21605) | +| Nazar Klovanych | [#4247](https://github.com/magento/magento2/issues/4247) | [magento/magento2#21876](https://github.com/magento/magento2/pull/21876) | +| Nirav Patel | [#22940](https://github.com/magento/magento2/issues/22940) | [magento/magento2#23007](https://github.com/magento/magento2/pull/23007) | +| Mateusz Wira | [#23053](https://github.com/magento/magento2/issues/23053) | [magento/magento2#23118](https://github.com/magento/magento2/pull/23118) | +| Alexander Taranovsky | [#675](https://github.com/magento/magento2/issues/675) | [magento/graphql-ce#677](https://github.com/magento/graphql-ce/pull/677) | +| Sergiy Vasiutynskyi | [#682](https://github.com/magento/magento2/issues/682) | [magento/graphql-ce#700](https://github.com/magento/graphql-ce/pull/700) | +| Sergiy Vasiutynskyi | [#681](https://github.com/magento/magento2/issues/681) | [magento/graphql-ce#711](https://github.com/magento/graphql-ce/pull/711) | +| Shikha Mishra | [#22484](https://github.com/magento/magento2/issues/22484) | [magento/magento2#22637](https://github.com/magento/magento2/pull/22637) | +| Alexander Taranovsky | [#23138](https://github.com/magento/magento2/issues/23138) | [magento/magento2#23140](https://github.com/magento/magento2/pull/23140) | +| Shikha Mishra | [#22004](https://github.com/magento/magento2/issues/22004) | [magento/magento2#22704](https://github.com/magento/magento2/pull/22704) | +| Pavel Bystritsky | [#22870](https://github.com/magento/magento2/issues/22870) | [magento/magento2#22933](https://github.com/magento/magento2/pull/22933) | +| Timon de Groot | [#22808](https://github.com/magento/magento2/issues/22808) | [magento/magento2#23005](https://github.com/magento/magento2/pull/23005) | +| Vitaliy Boyko | [#674](https://github.com/magento/magento2/issues/674) | [magento/graphql-ce#709](https://github.com/magento/graphql-ce/pull/709) | +| Yaroslav Rogoza | [#683](https://github.com/magento/magento2/issues/683) | [magento/graphql-ce#717](https://github.com/magento/graphql-ce/pull/717) | +| Ievgenii Gryshkun | [#9113](https://github.com/magento/magento2/issues/9113) | [magento/graphql-ce#721](https://github.com/magento/graphql-ce/pull/721) | +| Geeta Modi | [#18337](https://github.com/magento/magento2/issues/18337) | [magento/magento2#22942](https://github.com/magento/magento2/pull/22942) | +| Amit Vishvakarma | [#23213](https://github.com/magento/magento2/issues/23213) | [magento/magento2#23216](https://github.com/magento/magento2/pull/23216) | +| Gaurav Agarwal | [#23238](https://github.com/magento/magento2/issues/23238) | [magento/magento2#23250](https://github.com/magento/magento2/pull/23250) | +| Sergiy Vasiutynskyi | [#4788](https://github.com/magento/magento2/issues/4788) | [magento/magento2#23129](https://github.com/magento/magento2/pull/23129) | +| Sergiy Vasiutynskyi | [#22934](https://github.com/magento/magento2/issues/22934) | [magento/magento2#23129](https://github.com/magento/magento2/pull/23129) | +| Jeroen VanLeusden | [#23266](https://github.com/magento/magento2/issues/23266) | [magento/magento2#23267](https://github.com/magento/magento2/pull/23267) | +| Nishant Jariwala | [#23285](https://github.com/magento/magento2/issues/23285) | [magento/magento2#23286](https://github.com/magento/magento2/pull/23286) | +| vovsky | [#486](https://github.com/magento/magento2/issues/486) | [magento/graphql-ce#714](https://github.com/magento/graphql-ce/pull/714) | +| Patrick McLain | [#716](https://github.com/magento/magento2/issues/716) | [magento/graphql-ce#723](https://github.com/magento/graphql-ce/pull/723) | +| Lars Roettig | [#687](https://github.com/magento/magento2/issues/687) | [magento/graphql-ce#749](https://github.com/magento/graphql-ce/pull/749) | +| Kunal Soni | [#20038](https://github.com/magento/magento2/issues/20038) | [magento/magento2#22675](https://github.com/magento/magento2/pull/22675) | +| Alastair Mucklow | [#23074](https://github.com/magento/magento2/issues/23074) | [magento/magento2#23309](https://github.com/magento/magento2/pull/23309) | +| Patrick McLain | [#622](https://github.com/magento/magento2/issues/622) | [magento/graphql-ce#626](https://github.com/magento/graphql-ce/pull/626) | +| Patrick McLain | [#732](https://github.com/magento/magento2/issues/732) | [magento/graphql-ce#734](https://github.com/magento/graphql-ce/pull/734) | +| Atish Goswami | [#13227](https://github.com/magento/magento2/issues/13227) | [magento/magento2#22650](https://github.com/magento/magento2/pull/22650) | +| sanjaychouhan-webkul | [#22638](https://github.com/magento/magento2/issues/22638) | [magento/magento2#22800](https://github.com/magento/magento2/pull/22800) | +| Arjen Miedema | [#22266](https://github.com/magento/magento2/issues/22266) | [magento/magento2#23218](https://github.com/magento/magento2/pull/23218) | +| Shankar Konar | [#23230](https://github.com/magento/magento2/issues/23230) | [magento/magento2#23247](https://github.com/magento/magento2/pull/23247) | +| Alexey Arendarenko | [#23333](https://github.com/magento/magento2/issues/23333) | [magento/magento2#23338](https://github.com/magento/magento2/pull/23338) | +| Shankar Konar | [#23346](https://github.com/magento/magento2/issues/23346) | [magento/magento2#23367](https://github.com/magento/magento2/pull/23367) | +| Udovicic | [#21380](https://github.com/magento/magento2/issues/21380) | [magento/magento2#23312](https://github.com/magento/magento2/pull/23312) | +| Oleksii Lisovyi | [#21136](https://github.com/magento/magento2/issues/21136) | [magento/magento2#22116](https://github.com/magento/magento2/pull/22116) | +| Eduard Chitoraga | [#23233](https://github.com/magento/magento2/issues/23233) | [magento/magento2#23234](https://github.com/magento/magento2/pull/23234) | +| Geeta Modi | [#21974](https://github.com/magento/magento2/issues/21974) | [magento/magento2#23393](https://github.com/magento/magento2/pull/23393) | +| Geeta Modi | [#23377](https://github.com/magento/magento2/issues/23377) | [magento/magento2#23394](https://github.com/magento/magento2/pull/23394) | +| Yury Skanavy | [#22998](https://github.com/magento/magento2/issues/22998) | [magento/magento2#23048](https://github.com/magento/magento2/pull/23048) | +| Ankur Raiyani | [#23522](https://github.com/magento/magento2/issues/23522) | [magento/magento2#23523](https://github.com/magento/magento2/pull/23523) | +| bobemoe | [#8298](https://github.com/magento/magento2/issues/8298) | [magento/magento2#23528](https://github.com/magento/magento2/pull/23528) | +| gwharton | [#22103](https://github.com/magento/magento2/issues/22103) | [magento/magento2#23535](https://github.com/magento/magento2/pull/23535) | +| gwharton | [#23199](https://github.com/magento/magento2/issues/23199) | [magento/magento2#23535](https://github.com/magento/magento2/pull/23535) | +| Sunil | [#23538](https://github.com/magento/magento2/issues/23538) | [magento/magento2#23541](https://github.com/magento/magento2/pull/23541) | +| Kajal Solanki | [#21126](https://github.com/magento/magento2/issues/21126) | [magento/magento2#21128](https://github.com/magento/magento2/pull/21128) | +| Dipesh Rangani | [#23471](https://github.com/magento/magento2/issues/23471) | [magento/magento2#23474](https://github.com/magento/magento2/pull/23474) | +| Nirmal Raval | [#23466](https://github.com/magento/magento2/issues/23466) | [magento/magento2#23477](https://github.com/magento/magento2/pull/23477) | +| Kazim Noorani | [#23467](https://github.com/magento/magento2/issues/23467) | [magento/magento2#23494](https://github.com/magento/magento2/pull/23494) | +| Simon Frost | [#23222](https://github.com/magento/magento2/issues/23222) | [magento/magento2#23310](https://github.com/magento/magento2/pull/23310) | +| Shankar Konar | [#23354](https://github.com/magento/magento2/issues/23354) | [magento/magento2#23360](https://github.com/magento/magento2/pull/23360) | +| jeysmook | [#23424](https://github.com/magento/magento2/issues/23424) | [magento/magento2#23427](https://github.com/magento/magento2/pull/23427) | +| Sarfaraz Bheda | [#16234](https://github.com/magento/magento2/issues/16234) | [magento/magento2#23496](https://github.com/magento/magento2/pull/23496) | +| Lieven Pouwelse | [#9798](https://github.com/magento/magento2/issues/9798) | [magento/magento2#23529](https://github.com/magento/magento2/pull/23529) | +| Rav | [#6287](https://github.com/magento/magento2/issues/6287) | [magento/magento2#20918](https://github.com/magento/magento2/pull/20918) | +| Jay Ghosh | [#8258](https://github.com/magento/magento2/issues/8258) | [magento/magento2#15383](https://github.com/magento/magento2/pull/15383) | +| Bünyamin | [#13561](https://github.com/magento/magento2/issues/13561) | [magento/magento2#18075](https://github.com/magento/magento2/pull/18075) | +| Shikha Mishra | [#22545](https://github.com/magento/magento2/issues/22545) | [magento/magento2#22658](https://github.com/magento/magento2/pull/22658) | +| manishgoswamij | [#23383](https://github.com/magento/magento2/issues/23383) | [magento/magento2#23500](https://github.com/magento/magento2/pull/23500) | +| Amjad M | [#22950](https://github.com/magento/magento2/issues/22950) | [magento/magento2#23226](https://github.com/magento/magento2/pull/23226) | +| Yaroslav Rogoza | [#23606](https://github.com/magento/magento2/issues/23606) | [magento/magento2#23607](https://github.com/magento/magento2/pull/23607) | +| Minesh Mitha | [#736](https://github.com/magento/magento2/issues/736) | [magento/graphql-ce#747](https://github.com/magento/graphql-ce/pull/747) | +| Patrick McLain | [#739](https://github.com/magento/magento2/issues/739) | [magento/graphql-ce#753](https://github.com/magento/graphql-ce/pull/753) | +| Matti Vapa | [#23435](https://github.com/magento/magento2/issues/23435) | [magento/magento2#23444](https://github.com/magento/magento2/pull/23444) | +| Pavel Bystritsky | [#12817](https://github.com/magento/magento2/issues/12817) | [magento/magento2#20579](https://github.com/magento/magento2/pull/20579) | +| Oleksandr Kravchuk | [#23386](https://github.com/magento/magento2/issues/23386) | [magento/magento2#23387](https://github.com/magento/magento2/pull/23387) | +| Pavel Bystritsky | [#23345](https://github.com/magento/magento2/issues/23345) | [magento/magento2#23358](https://github.com/magento/magento2/pull/23358) | +| Yurii | [#22814](https://github.com/magento/magento2/issues/22814) | [magento/magento2#23459](https://github.com/magento/magento2/pull/23459) | +| gwharton | [#23594](https://github.com/magento/magento2/issues/23594) | [magento/magento2#23598](https://github.com/magento/magento2/pull/23598) | +| gwharton | [#23595](https://github.com/magento/magento2/issues/23595) | [magento/magento2#23598](https://github.com/magento/magento2/pull/23598) | +| gwharton | [#23596](https://github.com/magento/magento2/issues/23596) | [magento/magento2#23598](https://github.com/magento/magento2/pull/23598) | +| gwharton | [#23643](https://github.com/magento/magento2/issues/23643) | [magento/magento2#23649](https://github.com/magento/magento2/pull/23649) | +| gwharton | [#23597](https://github.com/magento/magento2/issues/23597) | [magento/magento2#23710](https://github.com/magento/magento2/pull/23710) | +| Sunil | [#23510](https://github.com/magento/magento2/issues/23510) | [magento/magento2#23524](https://github.com/magento/magento2/pull/23524) | +| Rafael Kassner | [#22890](https://github.com/magento/magento2/issues/22890) | [magento/magento2#22891](https://github.com/magento/magento2/pull/22891) | +| Quentin Farizon | [#23054](https://github.com/magento/magento2/issues/23054) | [magento/magento2#23125](https://github.com/magento/magento2/pull/23125) | +| Mahesh Singh | [#23135](https://github.com/magento/magento2/issues/23135) | [magento/magento2#23173](https://github.com/magento/magento2/pull/23173) | +| Eden Duong | [#23211](https://github.com/magento/magento2/issues/23211) | [magento/magento2#23688](https://github.com/magento/magento2/pull/23688) | +| Eden Duong | [#23624](https://github.com/magento/magento2/issues/23624) | [magento/magento2#23718](https://github.com/magento/magento2/pull/23718) | +| Eden Duong | [#23717](https://github.com/magento/magento2/issues/23717) | [magento/magento2#23753](https://github.com/magento/magento2/pull/23753) | +| Tobias Westfeld | [#758](https://github.com/magento/magento2/issues/758) | [magento/graphql-ce#759](https://github.com/magento/graphql-ce/pull/759) | +| Maxim Tkachuk | [#14071](https://github.com/magento/magento2/issues/14071) | [magento/magento2#22984](https://github.com/magento/magento2/pull/22984) | +| rsimmons07 | [#22112](https://github.com/magento/magento2/issues/22112) | [magento/magento2#23656](https://github.com/magento/magento2/pull/23656) | +| Eden Duong | [#23654](https://github.com/magento/magento2/issues/23654) | [magento/magento2#23681](https://github.com/magento/magento2/pull/23681) | +| gwharton | [#23751](https://github.com/magento/magento2/issues/23751) | [magento/magento2#23752](https://github.com/magento/magento2/pull/23752) | +| Andrea Parmeggiani | [#23678](https://github.com/magento/magento2/issues/23678) | [magento/magento2#23679](https://github.com/magento/magento2/pull/23679) | +| Eden Duong | [#23777](https://github.com/magento/magento2/issues/23777) | [magento/magento2#23779](https://github.com/magento/magento2/pull/23779) | +| Pavel Bystritsky | [#23789](https://github.com/magento/magento2/issues/23789) | [magento/magento2#23790](https://github.com/magento/magento2/pull/23790) | +| Pavel Bystritsky | [#22702](https://github.com/magento/magento2/issues/22702) | [magento/magento2#23803](https://github.com/magento/magento2/pull/23803) | +| Vitaliy Boyko | [#167](https://github.com/magento/magento2/issues/167) | [magento/graphql-ce#351](https://github.com/magento/graphql-ce/pull/351) | +| Patrick McLain | [#438](https://github.com/magento/magento2/issues/438) | [magento/graphql-ce#699](https://github.com/magento/graphql-ce/pull/699) | +| vovsky | [#702](https://github.com/magento/magento2/issues/702) | [magento/graphql-ce#779](https://github.com/magento/graphql-ce/pull/779) | +| Vitaliy Boyko | [#738](https://github.com/magento/magento2/issues/738) | [magento/graphql-ce#789](https://github.com/magento/graphql-ce/pull/789) | +| Matei Stefanescu | [#23405](https://github.com/magento/magento2/issues/23405) | [magento/magento2#23866](https://github.com/magento/magento2/pull/23866) | +| Eden Duong | [#23900](https://github.com/magento/magento2/issues/23900) | [magento/magento2#23901](https://github.com/magento/magento2/pull/23901) | +| Eden Duong | [#23904](https://github.com/magento/magento2/issues/23904) | [magento/magento2#23905](https://github.com/magento/magento2/pull/23905) | +| Eden Duong | [#23916](https://github.com/magento/magento2/issues/23916) | [magento/magento2#23917](https://github.com/magento/magento2/pull/23917) | +| Max Fickers | [#23932](https://github.com/magento/magento2/issues/23932) | [magento/magento2#23933](https://github.com/magento/magento2/pull/23933) | diff --git a/_includes/release-notes/engcomm-2-3-3-partner.md b/_includes/release-notes/engcomm-2-3-3-partner.md index 79e84b00260..6202943c61f 100644 --- a/_includes/release-notes/engcomm-2-3-3-partner.md +++ b/_includes/release-notes/engcomm-2-3-3-partner.md @@ -22,6 +22,6 @@ | Vaimo | [magento/magento2#22854](https://github.com/magento/magento2/pull/22854), [magento/magento2#23248](https://github.com/magento/magento2/pull/23248), [magento/magento2#22213](https://github.com/magento/magento2/pull/22213) | [magento/magento2#4628](https://github.com/magento/magento2/issues/4628) | | Limesharp | [magento/graphql-ce#747](https://github.com/magento/graphql-ce/pull/747) | [magento/graphql-ce#736](https://github.com/magento/graphql-ce/issues/736) | | Brandung | [magento/magento2#22186](https://github.com/magento/magento2/pull/22186), [magento/magento2#23099](https://github.com/magento/magento2/pull/23099) | [magento/magento2#22127](https://github.com/magento/magento2/issues/22127) | -| MageSpecialist | [magento/partners-magento2ee#18](https://github.com/magento/partners-magento2ee/pull/18), [magento/magento2#23353](https://github.com/magento/magento2/pull/23353) | | +| MageSpecialist | magento/partners-magento2ee#18, [magento/magento2#23353](https://github.com/magento/magento2/pull/23353) | | | Crimson Agility | [magento/magento2#23656](https://github.com/magento/magento2/pull/23656) | [magento/magento2#22112](https://github.com/magento/magento2/issues/22112) | | Space 48 | [magento/magento2#22844](https://github.com/magento/magento2/pull/22844), [magento/magento2#23244](https://github.com/magento/magento2/pull/23244) | | \ No newline at end of file diff --git a/_plugins/generators/mrg_pages.rb b/_plugins/generators/mrg_pages.rb index 5df084f219e..a332b95df4f 100644 --- a/_plugins/generators/mrg_pages.rb +++ b/_plugins/generators/mrg_pages.rb @@ -19,7 +19,6 @@ def generate(site) # Data from '_data/codebase/mrg' as a Hash where # the filename is a key and its content is a value. mrg_data = @site.data['codebase']['mrg'] - # Loop through the hash where a key is assigned to a 'mod' (module is a # special token in Ruby and should not be used) and value is assigned to # 'metadata'. diff --git a/_plugins/page-params/last-modified-at.rb b/_plugins/page-params/last-modified-at.rb index 8990ed01f51..86b8359da40 100644 --- a/_plugins/page-params/last-modified-at.rb +++ b/_plugins/page-params/last-modified-at.rb @@ -8,23 +8,31 @@ # the original file. # For available date formats, refer to https://git-scm.com/docs/git-log#git-log---dateltformatgt # -Jekyll::Hooks.register :pages, :pre_render do |page| +Jekyll::Hooks.register :pages, :post_init do |page| # Do nothing in serving mode next if page.site.config['serving'] - # Do nothing if the date is already set - next if page.data['last_modified_at'] + # Process only files with 'md' and 'html' extensions next unless File.extname(page.path).match?(/md|html/) - # Do nothing for redirects + + # Skip redirects next if page.name == 'redirect.html' + # Skip pages where the parameter is already set + next if page.data['last_modified_at'] + + # Skip pages created by custom generators like 'mrg_pages' + next if page.kind_of? Jekyll::PageWithoutAFile + + # Read real path of the page. If this is a symlink read it to get path of the real file with content. real_filepath = File.realpath page.path dir = File.dirname real_filepath - filename = File.basename real_filepath - # Read date of the last commit and assign it to last_modified_at parameter - # of the page. - page.data['last_modified_at'] = - `cd #{dir} && git log -1 --format=%cd --date=iso -- #{filename}`.strip + # Change directory to the parent directory of the page to read from the corresponding git history. + Dir.chdir(dir) do + # Read date of the last commit and assign it to last_modified_at parameter + # of the page. + page.data['last_modified_at'] = `git log -1 --format=%cd --date=iso -- #{page.name}`.strip + end end diff --git a/bin/mdl b/bin/mdl deleted file mode 100755 index ec5a264e868..00000000000 --- a/bin/mdl +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -# -# This file was generated by Bundler. -# -# The application 'mdl' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -bundle_binstub = File.expand_path("../bundle", __FILE__) - -if File.file?(bundle_binstub) - if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ - load(bundle_binstub) - else - abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. -Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") - end -end - -require "rubygems" -require "bundler/setup" - -load Gem.bin_path("mdl", "mdl") diff --git a/common/images/archi_hash_upgrade_algorithm.png b/common/images/archi_hash_upgrade_algorithm.png new file mode 100644 index 00000000000..7e353b47602 Binary files /dev/null and b/common/images/archi_hash_upgrade_algorithm.png differ diff --git a/common/images/archi_hash_upgrade_strategy.png b/common/images/archi_hash_upgrade_strategy.png new file mode 100644 index 00000000000..64e0a377eb8 Binary files /dev/null and b/common/images/archi_hash_upgrade_strategy.png differ diff --git a/common/images/ui_comps/action-delete-result.png b/common/images/ui_comps/action-delete-result.png new file mode 100644 index 00000000000..27019a799d5 Binary files /dev/null and b/common/images/ui_comps/action-delete-result.png differ diff --git a/common/images/ui_comps/actions-column-result.png b/common/images/ui_comps/actions-column-result.png new file mode 100644 index 00000000000..6bbad6c6a31 Binary files /dev/null and b/common/images/ui_comps/actions-column-result.png differ diff --git a/common/images/ui_comps/bookmarks-result.png b/common/images/ui_comps/bookmarks-result.png new file mode 100644 index 00000000000..d39029620e0 Binary files /dev/null and b/common/images/ui_comps/bookmarks-result.png differ diff --git a/common/images/ui_comps/columns-controls-result.png b/common/images/ui_comps/columns-controls-result.png new file mode 100644 index 00000000000..5eaa4059461 Binary files /dev/null and b/common/images/ui_comps/columns-controls-result.png differ diff --git a/common/images/ui_comps/multiline-component-result.png b/common/images/ui_comps/multiline-component-result.png new file mode 100644 index 00000000000..dee27415aa5 Binary files /dev/null and b/common/images/ui_comps/multiline-component-result.png differ diff --git a/common/images/ui_comps/ui-date-expanded-result.png b/common/images/ui_comps/ui-date-expanded-result.png new file mode 100644 index 00000000000..1a7fc5b9d2c Binary files /dev/null and b/common/images/ui_comps/ui-date-expanded-result.png differ diff --git a/common/images/ui_comps/ui-date-result.png b/common/images/ui_comps/ui-date-result.png new file mode 100644 index 00000000000..80fc66a2470 Binary files /dev/null and b/common/images/ui_comps/ui-date-result.png differ diff --git a/common/images/ui_comps/ui-image-uploader-example.png b/common/images/ui_comps/ui-image-uploader-example.png new file mode 100644 index 00000000000..69cf07d042d Binary files /dev/null and b/common/images/ui_comps/ui-image-uploader-example.png differ diff --git a/common/images/ui_comps/ui-search-result.png b/common/images/ui_comps/ui-search-result.png new file mode 100644 index 00000000000..e08bd3144bb Binary files /dev/null and b/common/images/ui_comps/ui-search-result.png differ diff --git a/common/images/ui_comps/ui-select-options-result.png b/common/images/ui_comps/ui-select-options-result.png new file mode 100644 index 00000000000..e1b8d8e7112 Binary files /dev/null and b/common/images/ui_comps/ui-select-options-result.png differ diff --git a/common/images/ui_comps/ui-select-result.png b/common/images/ui_comps/ui-select-result.png new file mode 100644 index 00000000000..7e854fdb6d4 Binary files /dev/null and b/common/images/ui_comps/ui-select-result.png differ diff --git a/extensions/b2b/index.md b/extensions/b2b/index.md index fed6d5d94af..485bc3d750e 100644 --- a/extensions/b2b/index.md +++ b/extensions/b2b/index.md @@ -120,7 +120,7 @@ After installing the {{site.data.var.b2b}} extension and starting message consum {: .bs-callout-info } If you enable the **Shared Catalog** module, you must also enable the **Company** module. The **Quick Order** and **Requisition Lists** modules can be enabled/disabled independently. -1. Access the Magento Admin and click **Stores** > **Settings** > **Configuration** > **General** > **B2B Features**. +1. Access the Magento Admin and click **Stores** > Settings > **Configuration** > General > **B2B Features**. 1. Select **Yes** from the drop-down menus to enable B2B features: diff --git a/guides/v2.2/architecture/archi_perspectives/components/modules/mod_and_areas.md b/guides/v2.2/architecture/archi_perspectives/components/modules/mod_and_areas.md index 3935eb218d1..9516cf13dce 100644 --- a/guides/v2.2/architecture/archi_perspectives/components/modules/mod_and_areas.md +++ b/guides/v2.2/architecture/archi_perspectives/components/modules/mod_and_areas.md @@ -20,7 +20,7 @@ Magento is organized into these main areas: * **Basic** (`base`): used as a fallback for files absent in `adminhtml` and `frontend` areas. -* **Cron** (`crontab`): In `cron.php`, the [`\Magento\Framework\App\Cron`]({{ site.mage2bloburl }}/{{ page.guide_version }}/lib/internal/Magento/Framework/App/Cron.php#L68-L70){:target="_blank"} class always loads the 'crontab' area. +* **Cron** (`crontab`): In `pub/cron.php`, the [`\Magento\Framework\App\Cron`]({{ site.mage2bloburl }}/{{ page.guide_version }}/lib/internal/Magento/Framework/App/Cron.php#L68-L70){:target="_blank"} class always loads the 'crontab' area. You can also send requests to Magento using the SOAP and REST APIs. These two areas @@ -57,4 +57,4 @@ Note that only the **execute()** method of any given controller is executed. {:.ref-header} Related topics -[Module overview]({{page.baseurl}}/architecture/archi_perspectives/components/modules/mod_intro.html) \ No newline at end of file +[Module overview]({{page.baseurl}}/architecture/archi_perspectives/components/modules/mod_intro.html) diff --git a/guides/v2.2/cloud/architecture/cloud-architecture.md b/guides/v2.2/cloud/architecture/cloud-architecture.md index a61b95661ea..869fb1fab03 100644 --- a/guides/v2.2/cloud/architecture/cloud-architecture.md +++ b/guides/v2.2/cloud/architecture/cloud-architecture.md @@ -41,7 +41,7 @@ For comparison, each plan includes the following infrastructure features and sup
  • Continuous cloud integration tools with unlimited users
  • -
  • Fastly Content Delivery Network (CDN), Image Optimization (IO), and added security with generous bandwidth allowances
  • +
  • Fastly Content Delivery Network (CDN), Image Optimization (IO), and added security with generous bandwidth allowances. The Web Application Firewall (WAF) service is available on Production environments only.
  • New Relic APM (Performance Monitoring) on 3 branches: master and 2 of your choice
  • @@ -54,7 +54,7 @@ For comparison, each plan includes the following infrastructure features and sup
    • Continuous cloud integration tools with unlimited users
    • -
    • Fastly Content Delivery Network (CDN), Web Application Firewall (WAF), Image Optimization (IO), and added security with generous bandwidth allowances
    • +
    • Fastly Content Delivery Network (CDN), Image Optimization (IO), and added security with generous bandwidth allowances. The Web Application Firewall (WAF) service is available on Production environments only.
    • New Relic Infrastructure on Production + APM (Performance Monitoring) on Staging and Production
    • diff --git a/guides/v2.2/cloud/cdn/cloud-fastly.md b/guides/v2.2/cloud/cdn/cloud-fastly.md index 60a230aed56..0611968ea06 100644 --- a/guides/v2.2/cloud/cdn/cloud-fastly.md +++ b/guides/v2.2/cloud/cdn/cloud-fastly.md @@ -29,7 +29,7 @@ Fastly provides the following services to optimize and secure content delivery o - **Security**—After you set up your {{ site.data.var.ece }} project to use the Fastly CDN, additional security features are available to protect your sites and network. - [**DDoS protection**](#ddos-protection)—Built-in protection against common attacks like Ping of Death, Smurf attacks, as well as other ICMP-based floods. - - **[Web Application Firewall]({{ page.baseurl }}/cloud/cdn/fastly-waf-service.html)**—Managed web application firewall service that provides PCI-compliant protection to block malicious traffic before it can damage your production {{ site.data.var.ece }} sites and network. + - **[Web Application Firewall]({{ page.baseurl }}/cloud/cdn/fastly-waf-service.html)**—Managed web application firewall service that provides PCI-compliant protection to block malicious traffic before it can damage your production {{ site.data.var.ece }} sites and network. The WAF service is available on Pro and Starter Production environments only. - **Image optimization**—Offloads image processing and resizing load to the Fastly service freeing servers to process orders and conversions efficiently. See [Fastly image optimization]({{ page.baseurl }}/cloud/cdn/fastly-image-optimization.html). We highly recommend using Fastly for your CDN, security, and image optimization needs, unless you are using {{ site.data.var.ee}} in a headless deployment. diff --git a/guides/v2.2/cloud/cdn/fastly-vcl-wordpress.md b/guides/v2.2/cloud/cdn/fastly-vcl-wordpress.md index b3547ebab9e..16f833e4aa4 100644 --- a/guides/v2.2/cloud/cdn/fastly-vcl-wordpress.md +++ b/guides/v2.2/cloud/cdn/fastly-vcl-wordpress.md @@ -1,6 +1,6 @@ --- group: cloud-guide -title: Set up redirects to WordPress using Fastly +title: Reroute requests to a CMS backend redirect_from: - /guides/v2.2/cloud/configure/fastly-vcl-wordpress.html - /guides/v2.3/cloud/configure/fastly-vcl-wordpress.html @@ -9,151 +9,45 @@ functional_areas: - Setup --- -The following example shows how to use a [Fastly Edge Dictionary](https://docs.fastly.com/guides/edge-dictionaries/working-with-dictionaries-using-the-api) with a custom VCL snippet to redirect incoming requests from a {{ site.data.var.ee }} store (`staging.example.com`) to a separate WordPress site (`customer.example.com`) that hosts related content like blog posts and customer stories. +The following procedure describes how to reroute incoming requests from a {{ site.data.var.ee }} store to a separate WordPress site using the Fastly edge module _Other CMS/backend integration_ with an Edge dictionary. You can follow a similar process to reroute requests to other CMS backends. -{: .bs-callout-info } -We recommend adding custom VCL configurations to a Staging environment where you can test them before running against Production. - -**Prerequisites** - -- Configure the {{ site.var.data.ece }} environment for Fastly services. See [Set up Fastly]({{ page.baseurl }}/cloud/cdn/configure-fastly.html). - -- Get credentials to access both the Fastly API and the Magento Admin UI for your {{ site.data.var.ece }} environment. - -- Identify the URL paths to redirect to the WordPress backend. - -- Submit a support ticket requesting the following Fastly service configuration changes required to use the custom VCL snippet for the WordPress redirects: - - - Add the WordPress host to the Fastly backend configuration. Include the domain name for the WordPress host. - - - Attach the following request condition to the Wordpress backend. - - ```json - req.http.X-WP == “1” - ``` - - Incoming requests that match this request condition, which is set through the [custom VCL snippet](#vcl), redirect to the WordPress backend. - -## Create an Edge Dictionary of WordPress paths {#edge-dictionary} - -Edge Dictionaries create key-value pairs accessible to VCL functions during VCL snippet processing. In this example, you create an edge dictionary that provides the list of URL paths that to redirect from your store to the WordPress backend. - -{% include cloud/admin-ui-login-step.md %} - -1. Click **Stores** > **Settings** > **Configuration** > **Advanced** > **System**. - -1. Expand **Full Page Cache** > **Fastly Configuration** > **Edge dictionaries**. - -1. Create the Dictionary container: - - - Click **Add container**. - - - On the *Container* page, enter a **Dictionary name**—`wordpress_urls`. - - - Select **Activate after the change** to enable the dictionary after you create it. - - - Click **Upload** to attach the dictionary to your Fastly service configuration. - -1. Add the list of URLs for redirection to the the `wordpress_urls` dictionary: - - - Click the Settings icon for the `wordpress_urls` dictionary. - - ![Configure Edge Dictionary] +Edge modules help you create and upload custom VCL code from the Magento Admin UI instead of manually writing the VCL code and uploading it using the Fastly API. - - Add and save key-value pairs in the new dictionary. For this example, each **Key** is a URL path to redirect to the WordPress backend, and the **Value** is 1. - - ![Add Edge Dictionary Items] - - - Click **Cancel** to return to the system configuration page. - -1. Click **Save Config**. - -1. Refresh the cache according to the notification at the top of the page. - -For more information about Edge Dictionaries, see [Creating and using Edge Dictionaries](https://docs.fastly.com/guides/edge-dictionaries/working-with-dictionaries-using-the-api) and [custom VCL snippets](https://docs.fastly.com/guides/edge-dictionaries/working-with-dictionaries-using-the-api#custom-vcl-examples) in the Fastly documentation. - -## Create a VCL snippet for the WordPress redirect {#vcl} - -The following custom VCL snippet code (JSON format) evaluates incoming requests and redirects those matching a path in the `wordpress_urls` edge dictionary to the WordPress backend specified in the Fastly service configuration. - -```json -{ - "name": "wordpress_redirect", - "dynamic": "0", - "type": "recv", - "priority": "5", - "content": "if ( req.url.path ~ \"^\\/?([^\\/?]+)\") { if ( table.lookup(wordpress_urls, re.group.1, \"NOTFOUND\") != \"NOTFOUND\" ) { set req.http.X-WP = \"1\"; } }" -} -``` - -Review the example code and change values as needed: - -- `name` — Name for the VCL snippet. For this example, we used `wordpress_redirect`. - -- `dynamic` — Value 0 indicates a [regular snippet](https://docs.fastly.com/guides/vcl-snippets/using-regular-vcl-snippets) to upload to the versioned VCL for the Fastly configuration. - -- `priority` — Determines when the VCL snippet runs. The priority is `5` to run this snippet code runs before any of the default Magento VCL snippets (`magentomodule_*`) assigned a priority of 50. - -- `type` — Specifies a location to insert the snippet in the versioned VCL code. This VCL is a `recv` snippet type which adds the snippet code to the `vcl_recv` subroutine below the default Fastly VCL code and above any objects. - -- `content` — The snippet of VCL code to run in one line, without line breaks. - - In this example, the VCL code logic extracts the first segment of the path `/mypath/someotherpath`, and then compares the path (`mypath`) to the paths in the `wordpress_urls` dictionary. Requests with matching paths are redirected to the WordPress backend. See the [Fastly VCL reference](https://docs.fastly.com/vcl/reference/) for information about creating Fastly VCL code snippets. - -Add the custom VCL snippet to your Fastly service configuration from the Admin UI (requires Fastly module 1.2.58 or later). If you cannot access the Admin UI, save the JSON code example in a file and upload it using the Fastly API. See [Creating a VCL snippet using the Fastly API]({{ page.baseurl }}/cloud/cdn/cloud-vcl-custom-snippets.html#manage-custom-vcl-snippets-using-the-api). - -## Add the custom VCL snippet - -{% include cloud/admin-ui-login-step.md %} - -1. Click **Stores** > **Settings** > **Configuration** > **Advanced** > **System**. - -1. Expand **Full Page Cache** > **Fastly Configuration** > **Custom VCL Snippets**. - -1. Click **Create Custom Snippet**. +{: .bs-callout-info } +We recommend adding custom VCL configurations to a Staging environment where you can test them before updating the Fastly service configuration in the Production environment. -1. Add the VCL snippet values: +{:.procedure} +Prerequisites - - **Name** — `wordpress_redirect` +- Ensure that you are running the latest version of the Fastly CDN module for Magento 2. See [Upgrade the Fastly Module]({{ page.baseurl }}/cloud/cdn/configure-fastly.html#upgrade). - - **Type** — `recv` +- Verify the environment configuration for the Fastly service. See [Check Fastly caching]({{ page.baseurl }}/cloud/live/stage-prod-test.html#fastly). - - **Priority** — `5` +- You must have Admin credentials to access the Magento Cloud Staging and Production environments. - - **VCL** snippet content: +{:.procedure} +To reroute requests from {{ site.data.var.ee }} to WordPress: - ``` - if ( req.url.path ~ "^/?([^/?]+)") - { - if ( table.lookup(wordpress_urls, re.group.1, "NOTFOUND") != "NOTFOUND" ) - { - set req.http.X-WP = "1"; - } - } - ``` +1. Enable Fastly Edge Modules in the Staging or Production environment. -1. Click **Create** to generate the VCL snippet file with the name pattern `type_priority_name.vcl`, for example `recv_5_wordpress_redirect.vcl` + - Log in to the Magento Admin. - ![Create VCL Snippet] + - Navigate to **Stores** > **Configuration** > **Advanced** > **System** > **Full Page Cache** > **Fastly Configuration** > **Advanced**. -1. After the page reloads, click **Upload VCL to Fastly** in the *Fastly Configuration* section to add the file to the Fastly service configuration. + - Set the value for **Fastly Edge Modules** to **Yes**. -1. After the upload completes, refresh the cache according to the notification at the top of the page. + - Save the configuration. -Fastly validates the updated version of the VCL code during the upload process. If the validation fails, edit the custom VCL snippet to fix the issue. Then, upload the VCL again. +1. Identify the URL paths to reroute to the WordPress backend. -{% include cloud/cloud-fastly-manage-vcl-from-admin.md %} +1. Complete the following tasks to configure the Fastly service and create the custom VCL code to reroute the requests to the WordPress backend. -{: .bs-callout-info } -Instead of manually uploading custom VCL snippets, you can add snippets to the `$MAGENTO_CLOUD_APP_DIR/var/vcl_snippets_custom` directory in your environment. Snippets in this directory upload automatically when you click *upload VCL to Fastly* in the Magento Admin UI. See [Automated custom VCL snippets deployment](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/CUSTOM-VCL-SNIPPETS.md#automated-custom-vcl-snippets-deployment) in the Fastly CDN for Magento 2 module documentation. + - Create an Edge Dictionary that specifies the paths to reroute from the {{ site.data.var.ee }} store to the backend. - + - Add the WordPress backend to the Fastly service configuration and attach the request condition for the URL rewrites. -[Configure Edge Dictionary]: {{site.baseurl}}/common/images/cloud/cloud-fastly-edge-dictionary-configure.png -{: width="550px"} + - Configure the *Other CMS/backend integration* Edge Module to handle the URL rewrites from {{ site.data.var.ee }} to the WordPress backend. -[Add Edge Dictionary Items]: {{site.baseurl}}/common/images/cloud/cloud-fastly-edge-dictionary-add-items.png -{: width="550px"} + For detailed instructions, see [Fastly Edge Modules - Other CMS/Backend integration](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/Edge-Modules/EDGE-MODULE-OTHER-CMS-INTEGRATION.md) in the _Fastly CDN module for Magento 2_ documentation. -[Create VCL Snippet]: {{site.baseurl}}/common/images/cloud/cloud-fastly-create-vcl-snippet.png -{: width="550px"} +1. After updating the Fastly service configuration, test your {{ site.var.data.ee }} store to ensure that the specified URL requests for WordPress are rerouted correctly. \ No newline at end of file diff --git a/guides/v2.2/cloud/cdn/fastly-waf-service.md b/guides/v2.2/cloud/cdn/fastly-waf-service.md index 65afb323314..7d534d06276 100644 --- a/guides/v2.2/cloud/cdn/fastly-waf-service.md +++ b/guides/v2.2/cloud/cdn/fastly-waf-service.md @@ -6,7 +6,7 @@ functional_areas: - Install --- -Powered by Fastly, the web application firewall (WAF) service for {{ site.data.var.ece }} detects, logs, and blocks malicious request traffic before it can damage your sites or network. +Powered by Fastly, the web application firewall (WAF) service for {{ site.data.var.ece }} detects, logs, and blocks malicious request traffic before it can damage your sites or network. The WAF service is available on production environments only. The WAF service provides the following benefits: @@ -18,9 +18,7 @@ The WAF service provides the following benefits: - Magento triages customer support tickets related to WAF service issues that block legitimate traffic as Priority 1 issues. - Automated upgrades to the WAF service version ensure immediate coverage for new or evolving exploits. See [WAF maintenance and upgrades](#waf-maintenance-and-updates). -The WAF service is available on Production environments for all {{ site.data.var.ece }} Pro and Starter plans at no additional cost. - -{:.bs-callout .bs-callout-tip} +{:.bs-callout-tip} For additional information about maintaining PCI compliance for your {{ site.var.data.ece }} stores, see [Magento Approach to PCI compliance](https://magento.com/pci-compliance). ### Enabling the WAF diff --git a/guides/v2.2/cloud/cdn/trouble-fastly.md b/guides/v2.2/cloud/cdn/trouble-fastly.md index eb281b3b55a..7fcaa67d6e8 100644 --- a/guides/v2.2/cloud/cdn/trouble-fastly.md +++ b/guides/v2.2/cloud/cdn/trouble-fastly.md @@ -212,14 +212,17 @@ Verify that the returned response contains the following information: The following excerpt from the cURL command output shows the correct values for the `Pragma`, `X-Magento-Tags`, and `Fastly-Module-Enabled` headers: ```terminal + * STATE: INIT => CONNECT handle 0x600057800; line 1402 (connection #-5000) * Rebuilt URL to: https://www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud/ * Added connection 0. The cache now contains 1 members * Trying 192.0.2.31... * STATE: CONNECT => WAITCONNECT handle 0x600057800; line 1455 (connection #0) + % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud (54.229.163.31) port 443 (#0) + * STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x600057800; line 1562 (connection #0) 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* ALPN, offering h2 @@ -242,6 +245,7 @@ The following excerpt from the cURL command output shows the correct values for * multi_done 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0 * Connection #0 to host www.mymagento.biz.c.sv7gVom4qrpek.ent.magento.cloud left intact + ``` {: .bs-callout-info } diff --git a/guides/v2.2/cloud/composer-packages/ece-patches.md b/guides/v2.2/cloud/composer-packages/ece-patches.md index 8a552e343b8..7852b63f942 100644 --- a/guides/v2.2/cloud/composer-packages/ece-patches.md +++ b/guides/v2.2/cloud/composer-packages/ece-patches.md @@ -45,9 +45,11 @@ Implemented version-based patching. Now the package is compatible with {{site.da ### Fixed issues + - Removed patch; fixing bug in `colinmollenhour/credis` v1.6 to enable support for {{site.data.var.ece}} 2.2.1. ## v102.0.0 + {:.bs-callout .bs-callout-warning} This package is no longer compatible with other versions of {{site.data.var.ece}} and **should not** be used. diff --git a/guides/v2.2/cloud/docker/docker-config.md b/guides/v2.2/cloud/docker/docker-config.md index ea2831e178c..3eef34db8ee 100644 --- a/guides/v2.2/cloud/docker/docker-config.md +++ b/guides/v2.2/cloud/docker/docker-config.md @@ -132,9 +132,9 @@ Continue launching your Docker environment in the default _production_ mode. - Build Magento in the Docker container: - ```bash - docker-compose run build cloud-build - ``` + ```bash + docker-compose run build cloud-build + ``` - Deploy Magento in the Docker container: @@ -142,8 +142,8 @@ Continue launching your Docker environment in the default _production_ mode. docker-compose run deploy cloud-deploy ``` - {: .bs-callout-info } - For `{{site.data.var.ct}}` v2002.0.12, install Magento with the `docker-compose run cli magento-installer` command. + {:.bs-callout-info } + For `{{site.data.var.ct}}` v2002.0.12, install Magento with the `docker-compose run cli magento-installer` command. 1. Configure and connect Varnish. @@ -221,23 +221,21 @@ The `{{site.data.var.ct}}` version 2002.0.18 and later supports developer mode. docker-compose up -d ``` -1. Start the file synchronization with `mutagen.io`. +1. Start the file synchronization with mutagen.io. If you use docker-sync for file synchronization, skip this step. ```bash bash ./mutagen.sh ``` - {: .bs-callout-info} - If you use `docker-sync` for file synchronization, skip this step. + {:.bs-callout-info} + If you host your Docker environment on Windows and the session start fails, update the `mutagen.sh` file to change the value for the `--symlink-mode` option to `portable`. -1. Install Magento in your Docker environment. +1. Deploy Magento in the Docker container: - - Deploy Magento in the Docker container: - - ```bash - docker-compose run deploy cloud-deploy && \ - docker-compose run deploy magento-command deploy:mode:set developer - ``` + ```bash + docker-compose run deploy cloud-deploy && \ + docker-compose run deploy magento-command deploy:mode:set developer + ``` {: .bs-callout-info } Developer mode does not require the `build` operation. diff --git a/guides/v2.2/cloud/env/environments-start.md b/guides/v2.2/cloud/env/environments-start.md index 8a8f836684d..8acb4d788b7 100644 --- a/guides/v2.2/cloud/env/environments-start.md +++ b/guides/v2.2/cloud/env/environments-start.md @@ -226,6 +226,25 @@ If you have a corporate firewall that blocks outgoing SSH connections, you can a +### Get IP address of Cloud instance + +Use `ping` command for retrieving IP address for particular Cloud instance. + +Example of usage: + +```bash +ping integration-abcd123-abcd78910.us-3.magentosite.cloud +``` + +Sample response: + +```console +PING integration-abcd123-abcd78910.us-3.magentosite.cloud (34.210.133.187): 56 data bytes +Request timeout for icmp_seq 0 +Request timeout for icmp_seq 1 +Request timeout for icmp_seq 2 +``` + ## Interact with environments via the Magento Cloud CLI {#commands} After you [setup SSH keys]({{ page.baseurl }}/cloud/env/environments-ssh.html), you can connect from your local workspace to a remote environment and use Magento Cloud CLI commands to interact with your {{site.data.var.ece}} project services and modify settings. diff --git a/guides/v2.2/cloud/project/project-conf-files_services-elastic.md b/guides/v2.2/cloud/project/project-conf-files_services-elastic.md index d40e113f754..d12e086694a 100644 --- a/guides/v2.2/cloud/project/project-conf-files_services-elastic.md +++ b/guides/v2.2/cloud/project/project-conf-files_services-elastic.md @@ -16,8 +16,8 @@ functional_areas: {% include cloud/service-config-integration-starter.md %} -{: .bs-callout-warning} -Staging and Production environments that are in the same cluster share a single Elasticsearch instance, so you must specify a unique Elasticsearch prefix for each of these environments. +{:.bs-callout-tip} +Magento recommends that you always set up Elasticsearch for your {{ site.data.var.ece }} project even if you plan to configure a third-party search tool for your {{ site.data.var.ee }} application. Setting up Elasticsearch provides a fallback option in the event that the third-party search tool fails. {:.procedure} To enable Elasticsearch: @@ -30,6 +30,9 @@ To enable Elasticsearch: disk: 1024 ``` + {:.bs-callout-info} + For details on determining the correct version to install, see [Elasticsearch software compatibility](#elasticsearch-software-compatibility). + 1. Set the `relationships` property in the `.magento.app.yaml` file. ```yaml @@ -59,11 +62,120 @@ To enable Elasticsearch: bin/magento cache:clean ``` +## Elasticsearch software compatibility + +When you install or upgrade your {{ site.data.var.ece }} project, always check for compatibility between the Elasticsearch service version and the [Elasticsearch PHP](https://github.com/elastic/elasticsearch-php) client for {{ site.data.var.ee }}. + +- **First time setup**–Confirm that the Elasticsearch version specified in the `services.yaml` file is compatible with the Elasticsearch PHP client configured for {{ site.data.var.ee }}. + +- **Project upgrade**–Verify that the Elasticsearch PHP client in the new Magento version is compatible with the Elasticsearch service version installed on the Cloud infrastructure. + +{% include cloud/cloud-elasticsearch-client-compatibility.md %} + +{:.procedure} +To check Elasticsearch software compatibility: + +1. Use SSH to log in to the remote environment. + +1. Check the Composer package version for `elasticsearch/elasticsearch`. + + ```bash + composer show elasticsearch/elasticsearch + ``` + + In the response, check the installed version in the `versions` property. + + ```terminal + name : elasticsearch/elasticsearch + descrip. : PHP Client for Elasticsearch + keywords : client, elasticsearch, search + versions : * v6.7.1 + type : library + license : Apache License 2.0 (Apache-2.0) (OSI approved) https://spdx.org licensesApache-2.0.html#licenseText + source : [git] https://github.com/elastic elasticsearch-php.git7be453dd36d1b141b779f2cb956715f8e04ac2f4 + dist : [zip] https://api.github.com/repos/elastic/elasticsearch-php/zipball/ 7be453dd36d1b141b779f2cb956715f8e04ac2f4 7be453dd36d1b141b779f2cb956715f8e04ac2f4 + path : /app/vendor/elasticsearch/elasticsearch + names : elasticsearch/elasticsearch + ``` + + Also, you can find the Elasticsearch PHP client version in the `composer.lock` file in the environment root directory. + +1. From the command line, retrieve the Elasticsearch service connection details. + + ```bash + vendor/bin/ece-tools env:config:show services + ``` + + In the response, find the IP address for the Elasticsearch service endpoint: + + ```terminal + | elasticsearch: | + +------------------------------------------+----------------------------------------------------------------------+ + | username | null | + | scheme | http | + | service | elasticsearch | + | fragment | null | + | ip | 169.254.220.11 | + | hostname | dzggu33f75wi3sd24lgwtoupxm.elasticsearch.service._.magentosite.cloud | + | public | false | + | cluster | fo3qdoxtla4j4-master-7rqtwti | + | host | elasticsearch.internal | + | rel | elasticsearch | + | query | | + | path | null | + | password | null | + | type | elasticsearch:6.5 | + | port | 9200 | + +------------------------------------------+----------------------------------------------------------------------+ + ``` + +1. Retrieve the installed Elasticsearch service `version:number` from the service endpoint. + + ```bash + curl -XGET :9200/ + ``` + + ```terminal + { + "name" : "-AqGi9D", + "cluster_name" : "elasticsearch", + "cluster_uuid" : "_yze6-ywSEW1MaAF8ZPWyQ", + "version" : { + "number" : "6.5.4", + "build_flavor" : "default", + "build_type" : "deb", + "build_hash" : "82a8aa7", + "build_date" : "2019-01-23T12:07:18.760675Z", + "build_snapshot" : false, + "lucene_version" : "7.5.0", + "minimum_wire_compatibility_version" : "5.6.0", + "minimum_index_compatibility_version" : "5.0.0" + }, + " tagline" : "You Know, for Search" + } + ``` + +1. Check version compatibility between the Elasticsearch service and the PHP client. + + If the versions are incompatible, make one of the following updates to your environment configuration: + + - Change the Elasticsearch service version in the `services.yaml` file to a version that is compatible with the Elasticsearch PHP client. On Pro Staging and Production environments, you must submit a support ticket to change the Elasticsearch service version. + + - [Change the Elasticsearch PHP client]({{ page.baseurl }}/config-guide/elasticsearch/es-downgrade.html) to a version that is compatible with the Elasticsearch service version. + ## Restart the Elasticsearch service If you need to restart the [Elasticsearch](https://www.elastic.co) service, you must contact Magento support. -## Elasticsearch plugins +## Additional search configuration + +- By default, the search configuration for Cloud environments regenerates each time you deploy. You can use the `SEARCH_CONFIGURATION` deploy variable to retain custom search settings between deployments. See [Deploy variables]({{ page.baseurl }}/cloud/env/variables-deploy.html#search_configuration). + +- {{ site.data.var.ece }} projects provisioned with a shared Production and Staging environment use a single Elasticsearch instance, so you must specify a unique _Elasticsearch Index prefix_ for each of these environments. See [Configure Magento to use Elasticsearch]({{ page.baseurl}}/config-guide/elasticsearch/configure-magento.html) in the _Configuration Guide_. + +- After you set up the Elasticsearch service for your project, use the Magento Admin UI to test the Elasticsearch connection and customize Elasticsearch settings for {{ site.data.var.ee }}. + +### Elasticsearch plugins Optionally, you can add Elasticsearch plugins by adding the `configuration:plugins` section to the `.magento/services.yaml` file. For example, the following code enables the ICU analysis plugin and Python script support plugins. @@ -77,4 +189,4 @@ elasticsearch: - lang-python ``` -If you use the ElasticSuite third-party plugin, you must [update the `{{site.data.var.ct}}` package]({{page.baseurl}}/cloud/project/ece-tools-update.html) to version 2002.0.19 or later. \ No newline at end of file +If you use the ElasticSuite third-party plugin, you must [update the `{{site.data.var.ct}}` package]({{page.baseurl}}/cloud/project/ece-tools-update.html) to version 2002.0.19 or later. diff --git a/guides/v2.2/cloud/project/project-conf-files_services-mysql.md b/guides/v2.2/cloud/project/project-conf-files_services-mysql.md index c54697df6d7..341f0d2cb36 100644 --- a/guides/v2.2/cloud/project/project-conf-files_services-mysql.md +++ b/guides/v2.2/cloud/project/project-conf-files_services-mysql.md @@ -42,7 +42,7 @@ MySQL errors such as `PDO Exception: MySQL server has gone away` may be a result Optionally, you can set up multiple databases as well as multiple users with different permissions. -An _endpoint_ is a set of credentials (or users) with specific privileges. By default, there is one endpoint named `mysql` that has administrator access to all defined databases. To set up multiple databases and users, you must define multiple endpoints in the services.yaml file and declare the relationships in the .magento.app.yaml file. +An _endpoint_ is a set of credentials (or users) with specific privileges. By default, there is one endpoint named `mysql` that has administrator access to all defined databases. To set up multiple database users, you must define multiple endpoints in the services.yaml file and declare the relationships in the .magento.app.yaml file. {: .bs-callout-warning} You cannot use multiple _databases_ with {{site.data.var.ee}} at this time, but you **can** create multiple endpoints to restrict access to the `main` database. diff --git a/guides/v2.2/cloud/project/project-conf-files_services.md b/guides/v2.2/cloud/project/project-conf-files_services.md index be334dbec78..937b5861c1c 100644 --- a/guides/v2.2/cloud/project/project-conf-files_services.md +++ b/guides/v2.2/cloud/project/project-conf-files_services.md @@ -135,7 +135,6 @@ To verify relationships in local environment: type: 'mysql:10.0' port: 3306 ``` - {:.no-copy} {:.procedure} To verify relationships in remote environments: @@ -170,3 +169,6 @@ Service | Magento 2.3 | Magento 2.2 `rabbitmq`| 3.5, 3.7 | 3.5 `redis` | 3.2, 4.0, 5.0 | 3.2, 4.0, 5.0 `varnish` | Magento 2.3.3 and later—4.0, 5.0, 6.2
      Magento 2.3.0 to 2.3.2—4.0, 5.0 | 4.0, 5.0 + +{:.bs-callout-info} +When you set up the Elasticsearch service, check to ensure that you use a version that is compatible with the installed [Elasticsearch PHP](https://github.com/elastic/elasticsearch-php) client. See [Check Elasticsearch software compatibility]({{ page.baseurl }}/cloud/project/project-conf-files_services-elastic.html#elasticsearch-software-compatibility). \ No newline at end of file diff --git a/guides/v2.2/cloud/project/projects.md b/guides/v2.2/cloud/project/projects.md index b461038d18a..fa7027c6a7e 100644 --- a/guides/v2.2/cloud/project/projects.md +++ b/guides/v2.2/cloud/project/projects.md @@ -44,7 +44,7 @@ With your {{site.data.var.ece}} account created, you can log into the Project We Your project includes [Fastly]({{ page.baseurl }}/cloud/cdn/cloud-fastly.html), [New Relic]({{ page.baseurl }}/cloud/project/new-relic.html), and [Blackfire]({{ page.baseurl }}/cloud/project/project-integrate-blackfire.html) services. The project details display information for your project plan and important licenses and tokens for these integrations. Only the Account Owner has initial access to the credentials and services. You should provide these credentials to technical and developer resources as needed. -- [Fastly](https://https://www.fastly.com/) provides content delivery (CDN), image optimization, and security services (DDoS and WAF) for your {{ site.data.var.ece }} projects. See [Get Fastly credentials]({{ page.baseurl }}/cloud/cdn/configure-fastly.html). +- [Fastly](https://www.fastly.com/) provides content delivery (CDN), image optimization, and security services (DDoS and WAF) for your {{ site.data.var.ece }} projects. See [Get Fastly credentials]({{ page.baseurl }}/cloud/cdn/configure-fastly.html). - [Blackfire.io Profiler](https://blackfire.io/magento) provides tools for reviewing and optimizing Magento and your store in your environments. The profiler checks every method and call, determining what occurs with performance metrics per step. diff --git a/guides/v2.2/cloud/reference/discover-deploy.md b/guides/v2.2/cloud/reference/discover-deploy.md index f3f1fc371ef..7744c48d75f 100644 --- a/guides/v2.2/cloud/reference/discover-deploy.md +++ b/guides/v2.2/cloud/reference/discover-deploy.md @@ -23,7 +23,7 @@ You can track build and deploy actions in real-time using the terminal or the Pr If you are using external GitHub repositories, the log of operations does not display in the GitHub session. However, you can still follow activity in the interface for the external repository and the Project Web Interface. See [Integrations]({{ page.baseurl }}/cloud/integrations/cloud-integrations.html). {:.bs-callout-info} -In Integration environments, you cannot view the deploy logs from the Project Web Interface. This feature is available only for Production and Staging environments. However, you can view logs for every phase of the deployment in any environment using the Magento [build and deploy]({{ page.baseurl }}/cloud/project/log-locations.html#build-and-deploy-logs). +In Integration environments, you cannot view the deploy logs from the Project Web Interface. This feature is available only for Production and Staging environments. However, you can view logs for every phase of the deployment in any environment using the Magento [build and deploy]({{ page.baseurl }}/cloud/project/log-locations.html#build-and-deploy-logs) logs. ## Project configuration {#cloud-deploy-conf} @@ -72,7 +72,7 @@ We highly recommend the following best practices and considerations for your dep - Use the `magento-cloud local:build` command to test the build in your local environment. Identify and fix any issues related to composer dependencies and environment and application configuration before deploying to a remote environment. See [Test build your code locally before deployment]({{ page.baseurl }}/cloud/live/live-sanity-check.html#test-build). - - Run the {{ site.data.var.ece }} smart wizard to ensure that your Cloud project configuration follows best practices for build and deployment. See [Smart wizard]({{ page.baseurl }}/cloud/deploy/smart-wizards.html). + - Run the {{ site.data.var.ece }} smart wizard to ensure that your Cloud project configuration follows best practices for build and deployment including static content deployment (SCD) strategy. See [Smart wizard]({{ page.baseurl }}/cloud/deploy/smart-wizards.html). - **After completing testing in local and Integration environments, deploy and test in the Staging environment**–See [Deploy code to Staging and Production]({{ page.baseurl }}/cloud/live/stage-prod-migrate.html#code). @@ -106,6 +106,8 @@ Follow best practices for builds and deployment, and use the [Upgrades and patch - Make any required updates to environment-specific settings before deploying to the remote environment. + - Ensure that the Elasticsearch service version is compatible with the Elasticsearch PHP client version. See [Set up Elasticsearch]({{ page.baseurl }}/cloud/project/project-conf-files_services-elastic.html). + - **Check database connectivity and available storage in remote environments**– - Use SSH to log in to the remote server and verify the connection to the MySQL database. See [Connect to the database]({{ page.baseurl }}/cloud/project/project-conf-files_services-mysql.html#connect-to-the-database). diff --git a/guides/v2.2/cloud/release-notes/CloudReleaseNotes2.2.1.md b/guides/v2.2/cloud/release-notes/CloudReleaseNotes2.2.1.md index 524cf9a8e30..166a1f95bd6 100644 --- a/guides/v2.2/cloud/release-notes/CloudReleaseNotes2.2.1.md +++ b/guides/v2.2/cloud/release-notes/CloudReleaseNotes2.2.1.md @@ -33,11 +33,13 @@ In general, we’ve removed serialize/unserialize from most the code to improve ### New Updates + * Magento Commerce (Cloud) supports scopes and [static content deployment strategies]({{ site.baseurl }}/guides/v2.2/config-guide/cli/config-cli-subcommands-static-deploy-strategies.html). We have added the `–s` parameter with a default setting of quick for the static content deployment strategy. You can use the environment variable [SCD_STRATEGY]({{ site.baseurl }}/guides/v2.2/cloud/env/environment-vars_magento.html) to customize and use these strategies with your build and deploy actions. This variable supports the options standard quick, or compact. If you select compact, we override the `STATIC_CONTENT_THREADS` value with 1, which can slow deployment, especially in production environments. * When you create a new project, we automatically provision the project with the latest Magento Commerce (Cloud) code. The steps include cloning the latest code repository, adding an environment variable for `ADMIN_EMAIL` using the License Owner’s email, setting a default randomized Magento Admin password, and sending emails to the License Owner to access the project and reset the default Magento Admin password. For details, see [Onboarding tasks]({{ site.baseurl }}/guides/v2.2/cloud/onboarding/onboarding-tasks.html). + * We have created a new log file on environments to capture and compile build and deploy actions. The file is located in the `app/var/log/cloud.log` file inside the Magento root application directory. ## Known issues {#known} @@ -47,9 +49,11 @@ For all known {{site.data.var.ee}} 2.2.1 issues, see [Magento Commerce 2.2.1 Re ## Fixed issues {#fixed} + * You can now [manually reset stuck Magento cron jobs]({{ site.baseurl }}/guides/v2.2/cloud/trouble/reset-cron-jobs.html) using a CLI command in all environments via SSH access. The deployment process automatically resets cron jobs. You must [patch magento/ece-tools]({{ site.baseurl }}/guides/v2.2/cloud/project/project-patch.html) to get this update. + * We resolved an issue with the ElasticSearch option being added and saved to `app/etc/env.php`. When ElasticSearch is configured and activated in your environment, the setting properly saves in the `env.php` file. For example: + * We removed `var/view_preprocessed` symlinking to fix an issue that was causing JavaScript minification conflicts. + * You can now [manually reset stuck Magento cron jobs]({{ site.baseurl }}/guides/v2.2/cloud/trouble/reset-cron-jobs.html) using a CLI command in all environments via SSH access. The deployment process automatically resets cron jobs. You must [patch magento/ece-tools]({{ site.baseurl }}/guides/v2.2/cloud/project/project-patch.html) to get this update. + * You can now generate sitemap.xml and robots.txt normally through the Magento Admin panel, without needing to move the file and have a redirect entered. If you are upgrading to 2.2, please enter a [Support ticket] to have any redirects removed for sitemap and robots.txt. + * Newly provisioned {{site.data.var.ece}} receive an email to change the Magento Admin password. For enhanced security, we generate a random password for the username "admin" and send an email to the Project Owner to properly set up Admin access for Starter `master` Production environment and the Pro Integration `master` environment. + * We added additional environment variables and updated build and deploy hooks to [`.magento.app.yaml`]({{ site.baseurl }}/guides/v2.2/cloud/project/project-conf-files_magento-app.html). * When upgrading to {{site.data.var.ece}} 2.2.0, you will need to update your `.magento.app.yaml` file and Configuration Management `config.local.php` file. See [Upgrade Magento Commerce (Cloud)]({{ site.baseurl }}/guides/v2.2/cloud/project/project-upgrade.html). @@ -79,12 +84,15 @@ This release contains numerous fixes and enhancements. This section includes onl * We’ve added support for the latest version of Redis and for PHP-Redis 3.1.3. For more information on this update, and for guidance on Redis troubleshooting on {{site.data.var.ece}}, see [Redis troubleshooting]({{ site.baseurl }}/guides/v2.2/cloud/trouble/redis-troubleshooting.html). + * Magento now correctly displays customer address during account creation. Previously, when you selected a default billing address during creation of a new customer account, Magento would not display the address. + * When you delete an image in Admin, Magento no longer deletes it on the server. Previously, Magento deleted it from the server as well, which caused errors for other products (example error message: `Cannot gather stats! Warning!stat(): stat failed for`). + * We’ve fixed errors in processing valid orders using a PayPal account that had been previously used to pay for a valid order that had problems during checkout. ## Changes in Deployment {#deploy} diff --git a/guides/v2.2/coding-standards/technical-guidelines.md b/guides/v2.2/coding-standards/technical-guidelines.md index 0b891db8564..f4a0ab9f678 100644 --- a/guides/v2.2/coding-standards/technical-guidelines.md +++ b/guides/v2.2/coding-standards/technical-guidelines.md @@ -574,6 +574,8 @@ You need to read configuration from different sources (like database or filesyst 6.4.3.8. Data objects returned by service contracts SHOULD be fully loaded to ensure consistency. +6.4.3.9. Service contracts SHOULD allow client side generated IDs. A service SHOULD accept an ID instead of generating it. See [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) as an example of client side generated ID. + 6.4.4. Service Implementation 6.4.4.1. Service data interfaces SHOULD extend from `Magento\Framework\Api\ExtensibleDataInterface`. The only exception is when extensibility is not desired, such as in case of value-objects. @@ -584,7 +586,7 @@ You need to read configuration from different sources (like database or filesyst 6.4.4.4. Replacement strategy SHOULD be used to persist main entity fields/attributes, child entities, and relation links. -6.4.4.5. During update operations, web APIs using the`PATCH` HTTP method and all action controllers that accept entities SHOULD pre-load them first, then merge the request data, and provide the full data to the service. +6.4.4.5. During update operations, web APIs using the `PATCH` HTTP method and all action controllers that accept entities SHOULD pre-load them first, then merge the request data, and provide the full data to the service. 6.4.4.6. If a service method needs to modify the argument, the original argument object MUST NOT be modified and its copy SHOULD be modified instead. diff --git a/guides/v2.2/comp-mgr/cli/cli-upgrade.md b/guides/v2.2/comp-mgr/cli/cli-upgrade.md index af727d683bd..e000a55d5df 100644 --- a/guides/v2.2/comp-mgr/cli/cli-upgrade.md +++ b/guides/v2.2/comp-mgr/cli/cli-upgrade.md @@ -67,20 +67,20 @@ To enable maintenance mode: composer update ``` - For example, to upgrade to {{ site.data.var.ce }} version {{ page.guide_version }}.4, enter: + For example, to upgrade to {{ site.data.var.ce }} version {{ page.guide_version }}.10, enter: ```bash - composer require magento/product-community-edition {{ page.guide_version }}.4 --no-update + composer require magento/product-community-edition {{ page.guide_version }}.10 --no-update ``` ```bash composer update ``` - To upgrade to Magento EE version {{ page.guide_version }}.4, enter: + To upgrade to Magento EE version {{ page.guide_version }}.10, enter: ```bash - composer require magento/product-enterprise-edition {{ page.guide_version }}.4 --no-update + composer require magento/product-enterprise-edition {{ page.guide_version }}.10 --no-update ``` ```bash diff --git a/guides/v2.2/config-guide/cli/config-cli-subcommands-mode.md b/guides/v2.2/config-guide/cli/config-cli-subcommands-mode.md index 349d31c2925..f3a960c050a 100644 --- a/guides/v2.2/config-guide/cli/config-cli-subcommands-mode.md +++ b/guides/v2.2/config-guide/cli/config-cli-subcommands-mode.md @@ -16,11 +16,8 @@ To improve security and ease-of-use, we added a command that switches [Magento m Production mode also has better performance because static view files are populated in the `pub/static` directory and because of code compilation. {:.bs-callout .bs-callout-info} - -- In version 2.0.6 and later, Magento does not explicitly set file or directory permissions when you switch between default, develop, and production modes. -- Unlike other Magento modes, developer and production modes are set in `env.php`. -- [{{site.data.var.ece}}]({{ page.baseurl }}/cloud/bk-cloud.html) supports production and maintenance modes only. - +In version 2.0.6 and later, Magento does not explicitly set file or directory permissions when you switch between default, develop, and production modes. +Unlike other Magento modes, developer and production modes are set in `env.php`. [{{site.data.var.ece}}]({{ page.baseurl }}/cloud/bk-cloud.html) supports production and maintenance modes only. Refer to [Magento ownership and permissions in development and production]({{ page.baseurl }}/config-guide/prod/prod_file-sys-perms.html) for more information. When you change to developer or production mode, we clear the contents of following directories: diff --git a/guides/v2.2/config-guide/mq/manage-message-queues.md b/guides/v2.2/config-guide/mq/manage-message-queues.md index c30293bb88a..8aa1d0d348b 100644 --- a/guides/v2.2/config-guide/mq/manage-message-queues.md +++ b/guides/v2.2/config-guide/mq/manage-message-queues.md @@ -9,15 +9,15 @@ functional_areas: - Setup --- -If you don't want to implement the RabbitMQ solution, you can manage message queues with cron jobs (or an external process manager) and the command line to ensure that consumers are retrieving messages. +You can manage message queues from the command line using cron jobs or an external process manager to ensure that consumers are retrieving messages. ## Process management Cron jobs are the default mechanism to restart consumers. Processes started by `cron` consume the specified number of messages and then terminate. Re-running `cron` restarts the consumer. -The following shows a `crontab` configuration for running consumers in our implementation, it is the example for understanding how it works: +The following example shows the Magento `crontab` configuration for running consumers: -*/app/code/Magento/MessageQueue/etc/crontab.xml* +> /app/code/Magento/MessageQueue/etc/crontab.xml ```xml ... @@ -40,6 +40,9 @@ You can also use a process manager such as [Supervisor](http://supervisord.org/i * Cron job `consumers_runner` runs all defined consumers * Each consumer processes 10000 messages and then terminates +{:.bs-callout-info} +If your {{ site.data.var.ee }} store is hosted on the Cloud platform, use the [`CRON_CONSUMERS_RUNNER`]({{ page.baseurl }}/cloud/env/variables-deploy.html#cron_consumers_runner) deploy variable to configure the `consumers_runner` cron job. + #### Specific configuration Edit */app/etc/env.php* file for configure cron job `consumers_runner` @@ -63,7 +66,7 @@ Edit */app/etc/env.php* file for configure cron job `consumers_runner` ## Command line interface -### Start consumers +### Start message queue consumers Use the `magento` command to start message queue consumers. You can start multiple consumers simultaneously. diff --git a/guides/v2.2/config-guide/prod/config-reference-gitignore.md b/guides/v2.2/config-guide/prod/config-reference-gitignore.md index 734617df14a..909cb332fa3 100644 --- a/guides/v2.2/config-guide/prod/config-reference-gitignore.md +++ b/guides/v2.2/config-guide/prod/config-reference-gitignore.md @@ -7,155 +7,8 @@ functional_areas: - Setup --- -This reference shows suggested `.gitignore` files to use in a development system and in a build or production system. +We include a base `.gitignore` file with the {{site.data.var.ce}} project repository. See [the latest Magento `.gitignore`](https://raw.githubusercontent.com/magento/magento2/2.2/.gitignore) file. If you need to add a file that is in the `.gitignore` list, you can use the -f (force) option when staging a commit: -## .gitignore for development -We recommend you use the `.gitignore` provided with Magento in a development system with the following changes—comment out the following so they are included in source control: - -* `pub/media/*` -* `pub/media/wysiwyg/*.*` - -{% collapsible Show `.gitignore` for development %} - -
      /.buildpath
      -/.cache
      -/.metadata
      -/.project
      -/.settings
      -atlassian*
      -/nbproject
      -/sitemap
      -/sitemap.xml
      -/.idea
      -/.gitattributes
      -/app/config_sandbox
      -/app/etc/env.php
      -/app/code/Magento/TestModule*
      -/lib/internal/flex/uploader/.actionScriptProperties
      -/lib/internal/flex/uploader/.flexProperties
      -/lib/internal/flex/uploader/.project
      -/lib/internal/flex/uploader/.settings
      -/lib/internal/flex/varien/.actionScriptProperties
      -/lib/internal/flex/varien/.flexLibProperties
      -/lib/internal/flex/varien/.project
      -/lib/internal/flex/varien/.settings
      -/node_modules
      -/.grunt
      -/Gruntfile.js
      -/package.json
      -/.php_cs
      -/.php_cs.cache
      -/grunt-config.json
      -/dev/tools/grunt/configs/local-themes.js
      -
      -# /pub/media/*.*
      -!/pub/media/.htaccess
      -/pub/media/attribute/*
      -!/pub/media/attribute/.htaccess
      -/pub/media/analytics/*
      -/pub/media/catalog/*
      -!/pub/media/catalog/.htaccess
      -/pub/media/customer/*
      -!/pub/media/customer/.htaccess
      -/pub/media/downloadable/*
      -!/pub/media/downloadable/.htaccess
      -/pub/media/import/*
      -!/pub/media/import/.htaccess
      -/pub/media/theme/*
      -/pub/media/theme_customization/*
      -!/pub/media/theme_customization/.htaccess
      -# /pub/media/wysiwyg/*
      -!/pub/media/wysiwyg/.htaccess
      -/pub/media/tmp/*
      -!/pub/media/tmp/.htaccess
      -/pub/media/captcha/*
      -/pub/static/*
      -!/pub/static/.htaccess
      -
      -/var/*
      -!/var/.htaccess
      -/vendor/*
      -!/vendor/.htaccess
      -/generated/*
      -!/generated/.htaccess
      -
      - -{% endcollapsible %} - -For reference, here is a [link to the latest Magento `.gitignore`](https://raw.githubusercontent.com/magento/magento2/2.2/.gitignore) - -## .gitignore for build and production -You should use the same `.gitignore` in both your build and production systems so they have the same files in source control. - -Changes compared to the default `.gitignore`: - -* The `/pub/media/*.*` directory is included in source control -* The `/pub/media/wysiwyg` directory is included in source control -* The `/pub/static/*.*` directory is included in source control -* The `/generated` directory and subdirectories are included in source control - -{% collapsible Show .gitignore for build and production %} - -
      /.buildpath
      -/.cache
      -/.metadata
      -/.project
      -/.settings
      -atlassian*
      -/nbproject
      -/sitemap
      -/sitemap.xml
      -/.idea
      -/.gitattributes
      -/app/config_sandbox
      -/app/etc/env.php
      -/app/code/Magento/TestModule*
      -/lib/internal/flex/uploader/.actionScriptProperties
      -/lib/internal/flex/uploader/.flexProperties
      -/lib/internal/flex/uploader/.project
      -/lib/internal/flex/uploader/.settings
      -/lib/internal/flex/varien/.actionScriptProperties
      -/lib/internal/flex/varien/.flexLibProperties
      -/lib/internal/flex/varien/.project
      -/lib/internal/flex/varien/.settings
      -/node_modules
      -/.grunt
      -/Gruntfile.js
      -/package.json
      -/.php_cs
      -/.php_cs.cache
      -/grunt-config.json
      -/dev/tools/grunt/configs/local-themes.js
      -
      -# /pub/media/*.*
      -!/pub/media/.htaccess
      -/pub/media/attribute/*
      -!/pub/media/attribute/.htaccess
      -/pub/media/analytics/*
      -/pub/media/catalog/*
      -!/pub/media/catalog/.htaccess
      -/pub/media/customer/*
      -!/pub/media/customer/.htaccess
      -/pub/media/downloadable/*
      -!/pub/media/downloadable/.htaccess
      -/pub/media/import/*
      -!/pub/media/import/.htaccess
      -/pub/media/theme/*
      -/pub/media/theme_customization/*
      -!/pub/media/theme_customization/.htaccess
      -# /pub/media/wysiwyg/*
      -!/pub/media/wysiwyg/.htaccess
      -/pub/media/tmp/*
      -!/pub/media/tmp/.htaccess
      -/pub/media/captcha/*
      -# /pub/static/*
      -!/pub/static/.htaccess
      -
      -/var/*
      -!/var/.htaccess
      -/vendor/*
      -!/vendor/.htaccess
      -# /generated/*
      -!/generated/.htaccess
      - -{% endcollapsible %} +```bash +git add -f +``` diff --git a/guides/v2.2/config-guide/secy/hashing.md b/guides/v2.2/config-guide/secy/hashing.md new file mode 100644 index 00000000000..91a4f99c04c --- /dev/null +++ b/guides/v2.2/config-guide/secy/hashing.md @@ -0,0 +1,55 @@ +--- +group: configuration-guide +title: Password hashing +--- + +Currently Magento uses its own strategy for password hashing, based on different native PHP hashing algorithms. Magento supports multiple algorithms like `MD5`, `SHA256`, or `Argon 2ID13`. If the Sodium extension is installed (installed by default in PHP 7.2), then `Argon 2ID13` will be chosen as the default hashing algorithm. Otherwise, `SHA256` will be as default. As Magento still supports PHP 7.1.x, we cannot use the native PHP `password_hash` function with Argon 2i algorithm support, which was added in the PHP 7.2 release. + +To avoid compromising older passwords that have been hashed with outdated algorithms like `MD5`, the current implementation provides a method to upgrade the hash without changing the original password. In general, the password hash has the following format: + +```text +password_hash:salt:version:version +``` + +where `version`...`version` represents all the hash algorithms versions used on the password. Also, the salt is always stored together with the password hash, so we can restore the entire chain of algorithms. An example looks like: + +```text +a853b06f077b686f8a3af80c98acfca763cf10c0e03597c67e756f1c782d1ab0:8qnyO4H1OYIfGCUb:1:2 +``` + +The first part represents the password hash. The second, `8qnyO4H1OYIfGCUb` is the salt. The last two are the different hash algorithms: 1 is `SHA256` and 2 is `Argon 2ID13`. This means that the customer's password was originally hashed with `SHA256` and after that, the algorithm was updated with `Argon 2ID13` and the hash was re-hashed with Argon. + +## Upgrade hash strategy + +Consider what the hash upgrade mechanism looks like. Assume that originally, a password was hashed with `MD5` and then the algorithm was updated multiple times with Argon 2ID13. The following diagram shows the hash upgrade flow. + +![Hash upgrade workflow]({{ site.baseurl }}/common/images/archi_hash_upgrade_algorithm.png) + +Each hash algorithm uses the previous password hash to generate a new hash. Magento does not store the original, raw password. + +![Hash upgrade strategy]({{ site.baseurl }}/common/images/archi_hash_upgrade_strategy.png) + +As discussed above, the password hash might have multiple hash versions applied to the original password. +Here is how the password verification mechanism works during a customer authentication. + +```php +def verify(password, hash): + restored = password + + hash_map = extract(hash) + # iterate through all versions specified in the received hash [md5, sha256, argon2id13] + for version in hash_map.get_versions(): + # generate new hash based on password/previous hash, salt and version + restored = hash_func(salt . restored, version) + + # extract only password hash from the hash:salt:version chain + hash = hash_map.get_hash() + + return compare(restored, hash) +``` + +Since Magento stores all used password hashes versions together with the password hash, we can restore the whole hash chain during the password verification. The hash verification mechanism is similar to the hash upgrade strategy: based on versions stored together with the password hash, the algorithm generates hashes from the provided password and returns the comparison result between hashed password and the database stored hash. + +## Implementation + +The `\Magento\Framework\Encryption\Encryptor` class is responsible for password hash generation and verification. The [`bin/magento customer:hash:upgrade`](https://devdocs.magento.com/guides/v2.3/reference/cli/magento.html#customerhashupgrade) command upgrades a customer password hash to the latest hash algorithm. diff --git a/guides/v2.2/config-guide/secy/secy.md b/guides/v2.2/config-guide/secy/secy.md index 69dab87f033..300dce6d310 100644 --- a/guides/v2.2/config-guide/secy/secy.md +++ b/guides/v2.2/config-guide/secy/secy.md @@ -9,7 +9,8 @@ functional_areas: ## Enhanced password management -Magento has strengthened the hashing algorithms (SHA-256) used in password management. +Magento has strengthened the hashing algorithms used in password management. +Read more about [Password Hashing][]. ## Improved prevention of cross-site scripting (XSS) attacks by making escaped data the default @@ -51,3 +52,4 @@ Related topics [umask]: http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html [Security measures against XSS attacks]: {{page.baseurl}}/extension-dev-guide/xss-protection.html [Configuration Guide]: {{page.baseurl}}/config-guide/bk-config-guide.html +[Password Hashing]: ./hashing.html diff --git a/guides/v2.2/contributor-guide/contributing_dod.md b/guides/v2.2/contributor-guide/contributing_dod.md index 73df820c387..d648a6ab653 100644 --- a/guides/v2.2/contributor-guide/contributing_dod.md +++ b/guides/v2.2/contributor-guide/contributing_dod.md @@ -6,7 +6,7 @@ title: Magento Definition of Done ## Overview The "Definition of Done" (DoD) is a collective term for a set of acceptance criteria that is applied to any changes in the product code base. -The requirements that result from our DoD are applied by default to all user stories and to each task within this user story. +The requirements that result from our DoD are applied by default to all Magento-owned repositories. Internally, the Magento development teams follow the DoD to ensure that all work meets consistent release criteria. We encourage our community contributors to also follow the Magento DoD. @@ -19,7 +19,7 @@ The following sections provide additional details about each of these criteria: ### Functional Backward Compatibility -**Functional backward compatibility** means behaviour of the application is preserved. +**Functional backward compatibility** means the behaviour of the application is preserved. Existing product features and functionality must be retained during any changes to the code. Any backward-incompatible functional changes must be approved by a product owner. @@ -27,10 +27,11 @@ The documentation should explain the justification and provide the "business val ### Technical Backward Compatibility -**Technical backward compatibility** means technical interfaces are preserved. -Technical interfaces include PHP interfaces or classes, CLI commands, URLs or any other interfaces that can be used by 3rd-party developer, system integrator or user of Magento. -Any change in the interfaces that can lead to a broken integration is a breaking technical change. -Technical interfaces and corresponding level of change is described in [Code Changes][6] and [Module Version Dependencies][7] documents in more details. +**Technical backward compatibility** means the technical interfaces are preserved. + +Technical interfaces include PHP interfaces or classes, CLI commands, URLs or any other interfaces that can be used by 3rd-party developer, system integrator, or user of Magento. +Any change to an interface that can lead to a broken integration is a breaking technical change. +Technical interfaces and the corresponding level of change is described in [Code Changes][6] and [Module Version Dependencies][7] documents in more details. Technical backward compatibility must be retained between PATCH (marketing) versions of Magento products. It should also be retained between MINOR (marketing) releases if possible. Any breaking changes must be approved by an architect, product owner and release manager. @@ -42,89 +43,122 @@ For more information, see [Magento's backward compatibility policy][1] and [Vers All changes, additions, and extensions to the product should be documented by the author. The documentation should provide an overview of the change, and information about standard use cases, audience, and procedural instructions for implementing the feature. -Ideally, the information about the submitted code should be added to the official Magento DevDocs [library](https://glossary.magento.com/library). -Contributors are asked to submit the doc as a Pull Request to the [DevDocs GitHub repo][4]. +Documentation for the submitted code should be submitted as a pull request to the official Magento DevDocs [repository](https://github.com/magento/devdocs). When submitting either code or documentation, a brief summary of the work should be included in the commit message. Additionally, the code itself should follow our [DocBlock standard][0] and contain high-quality comments and descriptions for all classes and methods. -Any backward-incompatible changes must also be recorded in the accompanying documentation, using the following format: - -| Change | Was in Magento 1.x | Became in Magento 2.x | -| ----------- | ------------------ | --------------------- | -| description | example | example | +For documenting backward-incompatible changes, please see [Backwards Compatible Development][8]. ## Tests +### Understanding Black, White, and Gray tests + +* A black box test does not have any knowledge of how the subject of the test is built. +* A white box has knowledge of how the subject of the test is built. The test logic is usually coupled to the implementation and will typically be sensitive to changes. +* A gray box is similar to black box testing where the test is not directly coupled to the subject's implementation but the test cases may be designed in a way to assert that sensitive portions of the implementation will work correctly. + +For example: + +Assume there is a method with the signature `function removeLetterFromString(string $letter, string $string): string` + +* A black box test would test the obvious cases both normal cases such as `removeLetterFromString('a', 'fooabar') === 'foobr'` and edge cases such as when `$letter` or `$string` are empty or `$letter` contains multiple or multibyte characters. It would probably test several variations of string lengths. Notice there is no knowledge of how this function is written. +* A white box test would look into the implementation of the method and see that it calls a microservice API and make sure that each condition of the code has test coverage. For example, this test may force the microservice client to return an error and have a test for the expected handling of that scenario. This wouldn't be a reusable test and it's directly coupled to the implementation. +* A gray box test would look at the implementation of the method and see that it calls a microservice API and injects the `$string` into the URL so it may add some extra test coverage for strings that contain unsafe URL characters such as `&?=%/`. This is not coupled to the implementation as the implementation could be changed and the test should still pass. + ### Automated Tests Code changes must be covered by automated tests according to Classification of Magento Automated Tests. When choosing how to cover your changes, pick the most lightweight (execution time wise) test type that will provide sufficient coverage. If you encounter an existing test that insufficiently covers your changes, you can delete that test but you must write a proper test to replace it. For example, a method that interacts with database has a unit test. You can replace it with an integration test. -Before committing code changes, author must ensure successful execution of all tests by running all tests or at least those which might be affected by code changes. -Continuous integration enforces execution of all tests and author is accountable for broken builds. +Be aware that while high-level tests may provide coverage to code, it is only indirect coverage. Tests with more direct usage of the changed code will likely still needs to be written to ensure that regardless of the which components are actually used in the black box, the individual components still have coverage. + +High level testing policy: + +* Any code that is added or changed must have explicit tests to validate the behavior. To clarify, this policy is intended to prove that the integrity of the code is verified regardless of which implementations are loaded in a black box environment. This may be done through unit or integration testing as appropriate. +* Code must be also shown to work with known collaborators. This must be done through integration tests and ideally should involve as few components as possible per test case. This level of tests ensures that the code will work with its known associates. Specific examples can be subject but such associates would include composites, chains, pools, etc. but also include cases like a Template filter working with a specific processor loaded. +* In addition, regardless of the interpretation of the testing strategy below: Any class marked with an `@api` annotation MUST be covered with explicit test coverage via integration or unit tests. + + These tests must test the concrete implementation's behavior in a way that can not be inadvertently changed outside of the test itself. + + For example: testing a concrete class through DI preference is not safe because it could be overridden via configuration of another loaded module. The test should not ask for the interface but rather the concrete implementation. + +### Integration Tests + +An integration test should be used to cover any code that does not meet the requirements of a unit test or functional test and should be thought of as essentially the default test type. + +Integration tests come in many forms and can drastically vary in definition depending on what the intention of the test is. Generally speaking an integration test verifies that two or more things work together correctly. i.e. We are testing the _integration_ of one thing with another thing. +For the purpose of Magento testing, there are essentially two broad categories of integration tests: narrow-form and broad-form. + +* Narrow-form integration tests focus on testing something mostly in isolation an can be as simple as a unit test as described in this guide except without mocked dependencies. +* Broad-form integration tests focus on testing something with less isolation and will involve multiple components explicitly collaborating. (compared to narrow-form where the dependencies are implicit collaborating) + +Integration test policy: + +* Methods and classes must have black box or gray box test coverage, including all variations for normal use, as well as edge-cases. +* SPIs must have test coverage. Often times Magento has extension points that may only be utilized by extension developers. Use TestModules to implement those SPI extension points and verify they are used correctly. +* As mentioned above, classes marked with `@api` must contain coverage. Integration tests must be used cover these classes unless a unit test is more appropriate. This includes JS modules and components. +* Consumers of default SPI implementations should have at least basic coverage that ensures the default implementations of the SPI are correctly configured and loaded. + + For example, `Magento\Framework\SomeClassFilter` may contain a `FilterPool` that comes with default `FilterInterface`'s from `Magento\Framework`. Each of these implementations would have their own coverage pursuant to this document. However, there should also be some basic assertions within the test coverage for `Magento\Framework\SomeClassFilter` that ensure each of the default filters are loaded correctly. + This should not be explicit coverage such as `$filter->isLoaded('someDefaultFilter')`. + +See: [Running Integration Tests][3]. ### Functional Tests -Must cover new or changed application behavior (functional). -Added/updated functionality should be covered by a functional autotest(s) related to previous sprint commitment in scope of current sprint. +UI functional tests are inherently unstable regardless of platform or testing framework. For this reason, along with reasons of maintainability and quality assurance delivery time, these tests should be prioritized below all other tests types. + +Functional test policy: + +* Web API endpoints must have functional test coverage via api-functional tests. These tests should ensure that the endpoints behave in accordance to their service contracts regardless of the actual concrete implementation that may be loaded. +* For UI-related code, there are some circumstances where it is not possible to cover changes with unit or integration tests. In these cases the appropriate type of coverage would be a functional test but this is a last resort only. + However, aside from those cases UI functional tests should only be used to cover P0/P1 testing scenarios. If there are no scenarios available to make this decision, a product owner must be consulted for approval of new tests. + +If there is a scenario that is not classified as a P0/P1 but should be, have a discussion with the product owner to get it elevated. See [Functional Tests][2]. ### Unit Tests -Cover classes and methods that: +There are a small number of use cases for unit tests in Magento. The nature of our code and development practices make it increasingly hard to write and maintain high-quality unit tests. +Many of them end up being replaced by integration tests or are practically useless from the beginning due to how much mocking is needed to make them pass. +Generally, an integration test is the preferred test type. + +A unit test may be preferred when you have classes or methods that: -* Have little to no dependencies -* Do not interact with resources like database, file system, 3rd party systems etc. -* Underlying functionality cannot be properly covered indirectly by an integration test -* Can be covered by a [black box test](https://en.wikipedia.org/wiki/Black-box_testing) +* Have few or no dependencies. + * The test must not be directly coupled to the collaborators of the test subject. If the collaborators are solely responsible for the behavior of the tested subject, it will not be a good unit test. +* Do not interact with resources such as databases, the file system, 3rd party systems, etc. +* Can be covered by a black box test. + * The test must not be a mirror of the code. Instead, the test must validate that the contract of the method or class is upheld by the implementation. Specific implementations may be weak in certain areas so specific corner cases could cover that logic while still being a black box test. +* Would not be easily foreseen to have dependencies in the future. + * This can be hard to predict but a good example of when it would be unlikely is a simple utility class that performs some standalone operation. By contrast, a helper would be very likely to have dependencies by nature. Examples: -* Utils (like `\Magento\Framework\Math\Random`) -* Simple classes that can also be used (at least initiated) independently (like `\Magento\Framework\Api\SortOrder`) -* Algorithms that perform calculation, parsing +* Utility classes such as `\Magento\Framework\Math\Random`. +* Simple classes that can also be used independently such as `\Magento\Framework\Api\SortOrder`. +* Algorithms that perform calculation or parsing. -Code NOT to cover: +And by explicit contrast here are some things NOT to cover: * Classes/methods with numerous dependencies. - * Creation of Unit tests for such classes will result in creation of a lot of mocks and writing complex test logic (that most likely follows code to large extend and as a result we will have fragile and hard to maintain tests) + * Creation of unit tests for such classes will result in the creation of many mocks and writing complex test logic (that most likely follows code to large extend and as a result we will have fragile and hard to maintain tests) * Classes/methods interacting with resources directly or indirectly. - * It is impossible to test the resources affected within a Unit test. -* Glue code. +* Glue/wiring * Mostly passing data between collaborators and has no or small amount of logic so it can be covered indirectly by integration/functional tests. Examples: -* Controllers - They can only be properly covered by functional tests because they are the "glue" that connects different app layers. Only controller final result matter. -* Most models - They usually have many dependencies and interact with resources. -* Simple DTOs +* Controllers + * They are the "glue" that connects different app layers. They should not contain any business logic and should only be responsible for directing request/response information to/from services. They can be tested via integration or functional tests. Also, controller-specific tests will likely be rendered useless and ultimately deleted at some point in the context of the service isolation initiative which makes this idea much more important. +* Model triad classes (Model/Resource Model/Collection) + * They have many dependencies and interact with resources. * Factories -### Integration Tests - -Cover classes and methods that: - -* Cannot be covered with a black box unit test -* Have many dependencies (unit test would require complex mocking) -* Interact with resources (database, file system, 3rd party systems etc.) - -Examples: - -* APIs: - * Cover only an interface if it suggests a single active implementation (thus the active implementation will be used implicitly). - * Cover each implementation if an interface suggests multiple implementations. -* SPIs: - * Same as APIs. - * We recommend creating tests with fake implementations and execution of methods that are using the SPI you’re covering to make sure the interface’s implementations can be swapped without breaking the application. -* Models/Resource Models: - * Usually have numerous dependencies, interacting with resources (database, cache, file system, 3rd party systems etc.) and sometimes can substitute an API - -See: [Running Integration Tests][3]. - ### Integrity Tests Code to cover: @@ -152,17 +186,18 @@ Expected code coverage: must cover all applicable files in entire code base. Code to cover: -* Must cover any formal backward-incompatible changes on code level. For more information, see [Magento's backward compatibility policy]({{ page.baseurl }}/contributor-guide/backward-compatible-development/). +* Must cover any formal backward-incompatible changes on code level. + For more information, see [Magento's backward compatibility policy]({{ page.baseurl }}/contributor-guide/backward-compatible-development/). A failure in a legacy test must provide comprehensive explanation of an alternative, if there is any. Expected code coverage: -* Must cover majority of occurrences of the backward-incompatible change -* Should cover 100% of occurrences +* Must cover the majority of occurrences of the backward-incompatible change. +* Should cover 100% of occurrences. Not all changes can be covered. -For example, it is possible to scan a file for literals, but it is unfeasible to analyze string concatenation or any other dynamic way of building variable. +For example, it is possible to scan a file for literals, but it is unfeasible to analyze string concatenation or any other dynamic way of building a variable. ### Functional Manual Tests @@ -183,4 +218,5 @@ The work cannot be considered as complete unless all the criteria are verified. [4]:https://github.com/magento/devdocs [5]:{{ page.baseurl }}/extension-dev-guide/versioning/index.html [6]:{{ page.baseurl }}/extension-dev-guide/versioning/codebase-changes.html -[7]:{{ page.baseurl }}/extension-dev-guide/versioning/dependencies.html \ No newline at end of file +[7]:{{ page.baseurl }}/extension-dev-guide/versioning/dependencies.html +[8]:{{ page.baseurl }}/contributor-guide/backward-compatible-development/index.html#where-to-document diff --git a/guides/v2.2/ext-best-practices/tutorials/dynamic-row-system-config.md b/guides/v2.2/ext-best-practices/tutorials/dynamic-row-system-config.md index e51ac225520..3b56a2fb00f 100644 --- a/guides/v2.2/ext-best-practices/tutorials/dynamic-row-system-config.md +++ b/guides/v2.2/ext-best-practices/tutorials/dynamic-row-system-config.md @@ -17,7 +17,7 @@ This tutorial shows you how to add a new dynamic rows system configuration in th ```xml -
      +
      diff --git a/guides/v2.2/extension-dev-guide/events-and-observers.md b/guides/v2.2/extension-dev-guide/events-and-observers.md index 092e3a874d2..33a226ed3e8 100644 --- a/guides/v2.2/extension-dev-guide/events-and-observers.md +++ b/guides/v2.2/extension-dev-guide/events-and-observers.md @@ -142,6 +142,8 @@ In the preceding example, we assign the observer `MyObserver` to the custom even Observer names must be unique per event definition. This means that you cannot have two observers with the same name in the same event definition. In the example, both observers have the name `myObserverName`. This is acceptable because each of those observers belong to different event definitions. +If you declare an observer with a name that is already in use within the same event, Magento merges these declaration nodes into a single observer declaration, respecting the module load order as defined in the `app/etc/config.php` file. This is useful when disabling an observer declared in another module. + ### Disabling an observer Existing observers can be disabled, if you do not want to have them running. It is a good practice to disable the obsever if you want to change its logic rather than override it. diff --git a/guides/v2.2/extension-dev-guide/extension_attributes/adding-attributes.md b/guides/v2.2/extension-dev-guide/extension_attributes/adding-attributes.md index 0207b8fa8e6..bf6643c6f72 100644 --- a/guides/v2.2/extension-dev-guide/extension_attributes/adding-attributes.md +++ b/guides/v2.2/extension-dev-guide/extension_attributes/adding-attributes.md @@ -47,7 +47,7 @@ The response to these requests will return objects with the following structure: ## Add plugin to product repository In order to add extension attributes, we need to use an after plugin on Product Repository. -The plugin should follow the methods: save, get, getList. +The plugin should be declared for the methods: `save`, `get` and `getList`. We can add scalar and non-scalar extension attributes. Scalar is a simple attribute. @@ -75,7 +75,31 @@ This is the simplest way to add extension attributes without causing a conflict: - We add our [extension attribute](https://glossary.magento.com/extension-attribute). - Finally set the extension attribute on the entity with ours included. -AfterGetList is similar to afterGet. +Function `afterGetList` is similar to `afterGet`: + +```php +public function afterGetList( + \Magento\Catalog\Api\ProductRepositoryInterface $subject, + \Magento\Catalog\Api\Data\ProductSearchResultsInterface $searchCriteria +) : \Magento\Catalog\Api\Data\ProductSearchResultsInterface +{ + $products = []; + foreach ($searchCriteria->getItems() as $entity) { + $ourCustomData = $this->customDataRepository->get($entity->getId()); + + $extensionAttributes = $entity->getExtensionAttributes(); + $extensionAttributes->setOurCustomData($ourCustomData); + $entity->setExtensionAttributes($extensionAttributes); + + $products[] = $entity; + } + $searchCriteria->setItems($products); + return $searchCriteria; +} +``` + +{: .bs-callout-info } +To add extension attributes to an entity without plugins, use the `extensionActions` argument of `\Magento\Framework\EntityManager\Operation\ExtensionPool`. See [\Magento\Catalog\Model\ProductRepository::getList()]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Catalog/Model/ProductRepository.php) as an example of an implementation. Likewise, the `afterSave` plugin should manipulate the entity data before returning it: @@ -93,7 +117,7 @@ public function afterSave } ``` -But if some entity doesn't have implementation to fetch extension attributes, we will always retrieve `null` and each time when we fetch extension attributes we need to check if they are `null`. If so, then we need to create them. To avoid such code duplication, we need to create `afterGet` plugin for our entity with extension attributes. +But if some entity doesn't have implementation to fetch extension attributes, we will always retrieve `null` and each time when we fetch extension attributes we need to check if they are `null`. If so, then we need to create them. To avoid such code duplication, we need to create `afterGetExtensionAttributes` plugin for our entity with extension attributes. Let's assume the product entity doesn't have any implementation of extension attributes, so our plugin might look like this: @@ -156,8 +180,8 @@ For scalar attributes we can use next configuration: ```xml - - + + ``` @@ -167,12 +191,24 @@ For non-scalar attributes: ```xml - + + + +``` + +For array extension attributes: + +```xml + + + ``` -In first case we will get the next result: +The array indicator `[]` can also be appended to non-scalar types. + +In first - scalar - case we will get the next result: ```xml @@ -181,12 +217,13 @@ In first case we will get the next result: 1 - 2 + foo ``` -In second one: +In second, non-scalar one: + ```xml 1 @@ -194,11 +231,23 @@ In second one: - 1 - 2 + ``` +In third, array one (in JSON for a change): + +```js +{ + "id": 1, + "sku": "some-sku", + "custom_attributes": { /* ... custom attribute data ... */ }, + "extension_attributes": { + "some_custom_data": ["value1", "value2", "value3"] + } +} +``` + [Sample module on GitHub](https://github.com/magento/magento2-samples/tree/master/sample-external-links) diff --git a/guides/v2.2/extension-dev-guide/versioning/codebase-changes.md b/guides/v2.2/extension-dev-guide/versioning/codebase-changes.md index 832f793828b..e6e0e3be0df 100644 --- a/guides/v2.2/extension-dev-guide/versioning/codebase-changes.md +++ b/guides/v2.2/extension-dev-guide/versioning/codebase-changes.md @@ -141,7 +141,9 @@ Any change not listed below is considered a PATCH level change. | | Obligatory node/attribute added| MAJOR| | | Node/attribute removed | MAJOR| | | New optional node/attribute added| MINOR| -| **Structure of System Configuration fields used by module** | Config path removed/renamed| MAJOR| +| **Structure of System Configuration fields used by module** +| | Config path added| MINOR| +| | Config path removed/renamed| MAJOR| | **Database structure**| Table removed| MAJOR| | | Table added| MINOR| | | Column removed | MAJOR| diff --git a/guides/v2.2/extension-dev-guide/view-models.md b/guides/v2.2/extension-dev-guide/view-models.md index 8ee0e3d6051..5e35d830216 100644 --- a/guides/v2.2/extension-dev-guide/view-models.md +++ b/guides/v2.2/extension-dev-guide/view-models.md @@ -39,8 +39,8 @@ class MyClass implements \Magento\Framework\View\Element\Block\ArgumentInterface { public function getTitle() { - return 'Hello World' - { + return 'Hello World'; + } } ``` diff --git a/guides/v2.2/frontend-dev-guide/conventions.md b/guides/v2.2/frontend-dev-guide/conventions.md index 0a3bf8fde06..c194b8acb9d 100644 --- a/guides/v2.2/frontend-dev-guide/conventions.md +++ b/guides/v2.2/frontend-dev-guide/conventions.md @@ -11,7 +11,7 @@ Magento application components, including modules, themes, and language packages The following relative paths are used for modules and themes: -**- ``** +### `` [Theme](https://glossary.magento.com/theme) directory. Usually used when talking about custom themes, or any theme in general. @@ -20,7 +20,7 @@ For Magento out of the box [frontend](https://glossary.magento.com/frontend) the - `app/design/frontend//` - `vendor/magento/theme-frontend-` -**- ``** +### `` Module directory. When talking about a particular Magento module, the following notation is used: ``, where `X` would indicate the module's name. The directory for module `X` in the Magento installation directory would be one of the following: diff --git a/guides/v2.2/frontend-dev-guide/css-topics/css-critical-path.md b/guides/v2.2/frontend-dev-guide/css-topics/css-critical-path.md index 8552709b28a..1d68bda33c7 100644 --- a/guides/v2.2/frontend-dev-guide/css-topics/css-critical-path.md +++ b/guides/v2.2/frontend-dev-guide/css-topics/css-critical-path.md @@ -27,7 +27,7 @@ Make sure that there is a `critical.css` file for your theme. Other non-critical The 'critical' CSS file should be located in `app/design/frontend///web/css/critical.css` The default Luma theme critical CSS file is located in `app/design/frontend/Magento/luma/web/css/critical.css` If there is not a `critical.css` file for the custom theme, but there is one for the Luma theme, Luma's `critical.css` will be used. -THe critical css file path can also be configured in `di.xml` as a constructor `filePath` argument in the `Magento\Theme\Block\Html\Header\CriticalCss` block. +The critical css file path can also be configured in `di.xml` as a constructor `filePath` argument in the `Magento\Theme\Block\Html\Header\CriticalCss` block. To generate a critical CSS for your theme, critical path CSS generators like [Penthouse](https://www.npmjs.com/package/penthouse) or [Critical](https://www.npmjs.com/package/critical) can be used, or you can create it yourself. While creating critical CSS, adhere to the following principles: diff --git a/guides/v2.2/frontend-dev-guide/layouts/layout-override.md b/guides/v2.2/frontend-dev-guide/layouts/layout-override.md index 5889c07f0d4..c721e493162 100644 --- a/guides/v2.2/frontend-dev-guide/layouts/layout-override.md +++ b/guides/v2.2/frontend-dev-guide/layouts/layout-override.md @@ -61,6 +61,8 @@ These files override the following layouts: * `/view/frontend/layout/.xml` * `/view/frontend/layout/.xml` +For example, `/Magento_Checkout/layout/override/base/checkout_cart_index.xml` will override `Magento_Checkout/view/frontend/layout/checkout_cart_index.xml`. + ### Override theme layouts {#fedg_layout_override_theme} To add an overriding theme file (to override a parent theme layout): @@ -84,6 +86,8 @@ These files override the following layouts: * `/_/layout/.xml` * `/_/layout/.xml` +For example, `/Magento_Checkout/layout/override/theme/Magento/luma/checkout_cart_index.xml` will override `app/design/frontend/Magento/luma/Magento_Checkout/layout/checkout_cart_index.xml`. + {:.bs-callout .bs-callout-info} To override page layout files, use the `page_layout` directory name instead of `layout`. @@ -109,4 +113,4 @@ Related topics [generic layouts]: {{page.baseurl}}/frontend-dev-guide/layouts/layout-types.html#layout-types-gen [handles]: {{page.baseurl}}/frontend-dev-guide/layouts/layout-overview.html#layout-over-terms [Base layout]: {{page.baseurl}}/frontend-dev-guide/layouts/layout-overview.html#layout-loc -[Theme layout]: {{page.baseurl}}/frontend-dev-guide/layouts/layout-overview.html#layout-loc \ No newline at end of file +[Theme layout]: {{page.baseurl}}/frontend-dev-guide/layouts/layout-overview.html#layout-loc diff --git a/guides/v2.2/frontend-dev-guide/layouts/layout-overview.md b/guides/v2.2/frontend-dev-guide/layouts/layout-overview.md index 7c106202e11..f9d49451c26 100644 --- a/guides/v2.2/frontend-dev-guide/layouts/layout-overview.md +++ b/guides/v2.2/frontend-dev-guide/layouts/layout-overview.md @@ -108,14 +108,15 @@ Layout validations and error handling depends on the [application mode] in which * production or default modes: syntax is validated in `.xml` and `.xsd` files. If validation fails, errors are logged to the `var/log` directory without throwing an exception. The validation according to the xsd schema is not performed. -{:.ref-header} -Related topics +## Guide contents -* [Layout instructions] -* [Common layout customization tasks] +* [Layout instructions][] +* [Layout file types][] +* [Product layouts][] * [Extend a layout][extend] * [Override a layout][override] -* [Customizing layout - step-by-step illustration] +* [Common layout customization tasks][] +* [Customizing layout - step-by-step illustration][] [extend]: {{ page.baseurl }}/frontend-dev-guide/layouts/layout-extend.html @@ -124,6 +125,7 @@ Related topics [inherited]: {{ page.baseurl }}/frontend-dev-guide/themes/theme-inherit.html [application mode]: {{ page.baseurl }}/config-guide/bootstrap/magento-modes.html [Layout instructions]: {{ page.baseurl }}/frontend-dev-guide/layouts/xml-instructions.html +[Product layouts]: {{ page.baseurl }}/frontend-dev-guide/layouts/product-layouts.html [Common layout customization tasks]: {{ page.baseurl }}/frontend-dev-guide/layouts/xml-manage.html [Customizing layout - step-by-step illustration]: {{ page.baseurl }}/frontend-dev-guide/layouts/layout-practice.html diff --git a/guides/v2.2/frontend-dev-guide/layouts/layout-types.md b/guides/v2.2/frontend-dev-guide/layouts/layout-types.md index e97e9da3f85..12b054381dd 100644 --- a/guides/v2.2/frontend-dev-guide/layouts/layout-types.md +++ b/guides/v2.2/frontend-dev-guide/layouts/layout-types.md @@ -9,10 +9,10 @@ functional_areas: For a particular page, its layout is defined by two major layout components: *page layout* file and *page configuration* file. -A page layout file defines the page wireframe, for example, one-column layout. Technically page layout is an .xml file defining the structure inside the `` section of the HTML page markup. Page layouts feature only [containers]({{ page.baseurl }}/frontend-dev-guide/layouts/layout-overview.html). +A page layout file defines the page wireframe, for example, one-column layout. Technically page layout is an .xml file defining the structure inside the `` section of the HTML page markup. Page layouts feature only [containers]({{ page.baseurl }}/frontend-dev-guide/layouts/xml-instructions.html#fedg_layout_xml-instruc_ex_cont). All page layouts used for page rendering should be declared in the page layout declaration file. -Page configuration is also an .xml file. It defines the detailed structure (page header, footer, etc.), contents and page meta information, including the page layout used. Page configuration features both main elements, [blocks of particular classes]({{ page.baseurl }}/frontend-dev-guide/layouts/layout-overview.html) and containers. +Page configuration is also an .xml file. It defines the detailed structure (page header, footer, etc.), contents and page meta information, including the page layout used. Page configuration features both main elements, [blocks]({{ page.baseurl }}/frontend-dev-guide/layouts/xml-instructions.html#fedg_layout_xml-instruc_ex_block) and [containers]({{ page.baseurl }}/frontend-dev-guide/layouts/xml-instructions.html#fedg_layout_xml-instruc_ex_cont). We also distinguish the third type of layout files, *generic layouts*. They are .xml files which define the contents and detailed structure inside the `` section of the HTML page markup. These files are used for pages returned by AJAX requests, emails, HTML snippets and so on. @@ -87,7 +87,7 @@ Sample page layout declaration file: `/view/frontend/l ``` -Use the `layout` attribute in the `page` section to define a layout type for the page. The following example shows how to use the `3 columns` page layout type for the [Wish List Sharing]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_share.xml#L8) page: +Use the `layout` attribute in the `page` node of a page configuration file to define a layout type for the page. The following example shows how to use the `3 columns` page layout type for the [Wish List Sharing]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_share.xml#L8) page: ```xml @@ -466,7 +466,7 @@ none
    -  Mandatory element + Mandatory element diff --git a/guides/v2.2/frontend-dev-guide/layouts/xml-instructions.md b/guides/v2.2/frontend-dev-guide/layouts/xml-instructions.md index ef3d96d0447..5956a416573 100644 --- a/guides/v2.2/frontend-dev-guide/layouts/xml-instructions.md +++ b/guides/v2.2/frontend-dev-guide/layouts/xml-instructions.md @@ -140,7 +140,7 @@ The following tables give a detailed description of the results you can get usin | Situation | Result | |:------- |:------ | | Both `before` and `after` attributes are present | `after` takes precedence. | -| Both `before` and `after` attributes are absent or empty | The element is considered as non-positioned. All other elements are positioned at their specified locations. The missing element displays at a random position that doesn't violate requirements for the positioned elements. | +| Both `before` and `after` attributes are absent or empty | The element is considered as non-positioned. All other elements are positioned at their specified locations. The non-positioned element displays at a random position that doesn't violate requirements for the positioned elements. | | Several elements have `before` or `after` set to dash (-) | All elements display at the top (or bottom, in case of the after attribute), but the ordering of group of these elements is undefined. | | The `before` or `after` attribute's value refers to an element that is not located in the parent node of the element being defined. | The element displays at a random location that doesn't violate requirements for the correctly positioned elements. | @@ -355,40 +355,49 @@ There are examples of all argument types. ```xml - paramName + firstValue + secondValue ... ``` -The *helper* can use only public methods. In this example the `someMethod()` method should be public. +The *helper* can only use public methods. In this example the `someMethod()` method should be public. The argument with *helper* type can contain `param` items which can be passed as a helper method parameters. -#### Obtain arguments examples in template +#### Obtain arguments in template examples -These argument examples can be taken in the template like in the following example: +These argument examples are taken in the template by the `getData` method. Another way to take these arguments is using the magic method `get` followed by the name of argument in CamelCase format. Here is an example to retrieve the arguments from above example: ```php getData('some_string'); +$someString = $block->getData('some_string'); //or $block->getSomeString() + /** @var bool $isActive */ -$isActive = $block->getData('is_active'); +$isActive = $block->getData('is_active'); //or $block->getIsActive() + /** @var Vendor\CustomModule\ViewModel\Class|\Magento\Framework\View\Element\Block\ArgumentInterface $viewModel */ -$viewModel = $block->getData('viewModel'); +$viewModel = $block->getData('viewModel'); //or $block->getViewModel() + /** @var string|int|float $someNumber */ -$someNumber = $block->getData('some_number'); +$someNumber = $block->getData('some_number'); //or $block->getSomeNumber() + /** @var null $nullValue */ -$nullValue = $block->getData('null_value'); +$nullValue = $block->getData('null_value'); //or $block->getNullValue() + /** @var array $customArray */ -$customArray = $block->getData('custom_array'); +$customArray = $block->getData('custom_array'); //or $block->getCustomArray() + /** @var array $options */ -$options = $block->getData('options'); +$options = $block->getData('options'); //or $block->getoptions() + /** @var string $shoppingCartUrl */ -$shoppingCartUrl = $block->getData('shopping_cart_url'); +$shoppingCartUrl = $block->getData('shopping_cart_url'); //or $block->getShoppingCartUrl() + /** @var mixed $helperMethodResult */ -$helperMethodResult = $block->getData('helper_method_result'); +$helperMethodResult = $block->getData('helper_method_result'); // or $block->getHelperMethodResult() ``` ### arguments {#arguments} diff --git a/guides/v2.2/frontend-dev-guide/templates/template-email.md b/guides/v2.2/frontend-dev-guide/templates/template-email.md index 2c03b777179..862aaeddb32 100644 --- a/guides/v2.2/frontend-dev-guide/templates/template-email.md +++ b/guides/v2.2/frontend-dev-guide/templates/template-email.md @@ -1,6 +1,6 @@ --- group: frontend-developer-guide -title: Customize email templates +title: Email templates functional_areas: - Frontend --- diff --git a/guides/v2.2/frontend-dev-guide/templates/template-override.md b/guides/v2.2/frontend-dev-guide/templates/template-override.md index 0a741f1e6eb..07ac4e38e5c 100644 --- a/guides/v2.2/frontend-dev-guide/templates/template-override.md +++ b/guides/v2.2/frontend-dev-guide/templates/template-override.md @@ -61,9 +61,21 @@ Unlike other templates, `root.phtml` contains the `doctype` specification and co ## Getting argument values from layout {#getter} -Arguments values set in a layout file are accessed in templates using the `get{ArgumentName}()` and `has{ArgumentName}()` methods. +Arguments values set in a layout file are accessed in templates using the block's `get{ArgumentName}()` and `has{ArgumentName}()` methods. -See [Layout instructions] +For example, set an argument in the block: `OrangeCompany`. + +* Get the argument value, in the template: + + * `$block->getData('store_name')` + * `$block->getStoreName()` + +* Check if the argument exists: + + * `$block->hasData('store_name')` + * `$block->hasStoreName()` + +See [Block arguments] for more information. ## Using PHP short tags in template PHTML files {#short-tags} @@ -88,4 +100,4 @@ is the same as writing [`app/code/Magento/Catalog/view/frontend/layout/catalog_category_view.xml`]: {{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Catalog/view/frontend/layout/catalog_category_view.xml [Child theme]: {{ page.baseurl }}/frontend-dev-guide/themes/theme-inherit.html [Theme inheritance]: {{ page.baseurl }}/frontend-dev-guide/themes/theme-inherit.html#theme-inherit-templates -[Layout instructions]: {{ page.baseurl }}/frontend-dev-guide/layouts/xml-instructions.html \ No newline at end of file +[Block arguments]: {{ page.baseurl }}/frontend-dev-guide/layouts/xml-instructions.html#argument diff --git a/guides/v2.2/frontend-dev-guide/templates/template-sample.md b/guides/v2.2/frontend-dev-guide/templates/template-sample.md index facadf0138e..1d88b40d791 100644 --- a/guides/v2.2/frontend-dev-guide/templates/template-sample.md +++ b/guides/v2.2/frontend-dev-guide/templates/template-sample.md @@ -1,11 +1,11 @@ --- group: frontend-developer-guide -title: Illustration of customizing templates +title: Templates customization sample functional_areas: - Frontend --- -This topic contains a step-by-step illustration of solving a typical design customization task using templates. +This topic contains a step-by-step guide to solving a typical design customization task using templates. ## Sample template customization: changing a layout of the mini shopping cart diff --git a/guides/v2.2/frontend-dev-guide/themes/debug-theme.md b/guides/v2.2/frontend-dev-guide/themes/debug-theme.md index 2d59643c21e..dc1adc93847 100644 --- a/guides/v2.2/frontend-dev-guide/themes/debug-theme.md +++ b/guides/v2.2/frontend-dev-guide/themes/debug-theme.md @@ -68,7 +68,7 @@ Since it is not recommended to edit the default files, you need to add overridin ## Locate layouts {#debug-theme-layout} -Just like templates, layouts are saved on a per-module basis. You can easily locate the [layout](https://glossary.magento.com/layout) file by determining in which module the templates for the element you are interested in reside in. To locate the template, you can use Template Hints or text search in the app directory, as described previously . +Just like templates, layouts are saved on a per-module basis. You can easily locate the [layout](https://glossary.magento.com/layout) file by determining in which module the templates for the element you are interested in reside in. After you have determined the module, you can search for the layout in the following locations: diff --git a/guides/v2.2/frontend-dev-guide/themes/theme-create.md b/guides/v2.2/frontend-dev-guide/themes/theme-create.md index 056992d1ffc..d3e1c3fa33f 100644 --- a/guides/v2.2/frontend-dev-guide/themes/theme-create.md +++ b/guides/v2.2/frontend-dev-guide/themes/theme-create.md @@ -54,7 +54,7 @@ The folder name conventionally matches naming used in the theme's code: any alph ## Declare your theme {#fedg_create_theme_how-to_declare} -After you create a directory for your theme, you must create `theme.xml` containing at least the theme name and the parent theme name (if the theme [inherits]({{page.baseurl}}/frontend-dev-guide/themes/theme-inherit.html) from one). Optionally you can specify where the theme preview image is stored. +After you create a directory for your theme, you must create `theme.xml` containing at least the theme name. Optionally, you can specifiy the parent theme name (if the theme [inherits]({{page.baseurl}}/frontend-dev-guide/themes/theme-inherit.html) from one) and, if necessary, where the theme preview image is stored. 1. Add or copy from an existing `theme.xml` file to your theme directory `app/design/frontend//`. diff --git a/guides/v2.2/frontend-dev-guide/themes/theme-inherit.md b/guides/v2.2/frontend-dev-guide/themes/theme-inherit.md index bc2f0a6d533..66d2f52ba6b 100644 --- a/guides/v2.2/frontend-dev-guide/themes/theme-inherit.md +++ b/guides/v2.2/frontend-dev-guide/themes/theme-inherit.md @@ -135,7 +135,7 @@ The layouts processing mechanism does not involve fallback. The system collects * Layout files for the `base` area: `/view/base/layout/` * Layout files for the `frontend` area: `/view/frontend/layout/` -1. Ancestor theme layouts, starting from the most distant ancestor, recursively until a theme with no parent is reached: `/_/layout/` +1. Ancestor theme layouts, starting from the most distant ancestor, recursively until a theme with no child is reached: `/_/layout/` 1. Current theme layouts: `/_/layout/` Unlike templates or images, layout can be not only overridden, but also extended. And the recommended way to customize layout is to extend it by creating theme extending layout files. diff --git a/guides/v2.2/frontend-dev-guide/themes/theme-structure.md b/guides/v2.2/frontend-dev-guide/themes/theme-structure.md index 674730f6f29..0b2137df6ec 100644 --- a/guides/v2.2/frontend-dev-guide/themes/theme-structure.md +++ b/guides/v2.2/frontend-dev-guide/themes/theme-structure.md @@ -83,7 +83,7 @@ The directories and files structure described below is the most extended one. It optional - Module-specific styles (.css and/or .less files). General styles for the module are in the _module.less file, and styles for widgets are in _widgets.less

    Ex: [Module_Theme]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Theme/view/frontend/web/css) or description field should be corrected. + Module-specific styles (.css and/or .less files). General styles for the module are in the _module.less file, and styles for widgets are in _widgets.less. @@ -150,7 +150,7 @@ The directories and files structure described below is the most extended one. It /media - Optional + optional This directory contains a theme preview (a screenshot of your theme). diff --git a/guides/v2.2/frontend-dev-guide/translations/theme_dictionary.md b/guides/v2.2/frontend-dev-guide/translations/theme_dictionary.md index 5006d108d47..e8c21e36d75 100644 --- a/guides/v2.2/frontend-dev-guide/translations/theme_dictionary.md +++ b/guides/v2.2/frontend-dev-guide/translations/theme_dictionary.md @@ -10,16 +10,19 @@ Modify default strings in your custom [theme](https://glossary.magento.com/theme ## How Magento applies locales -When the [locale](https://glossary.magento.com/locale) is changed for a store, Magento searches for and applies translations in the corresponding dictionaries: +When the [locale](https://glossary.magento.com/locale) is changed for a store, Magento searches and applies translations in the corresponding dictionaries in the following sequence: 1. Module translations: `/i18n/` +1. Translation package: `app/i18n/` 1. Theme translations: 1. `/i18n/` (iterated through all ancestor themes) 1. `/i18n/` -1. Translation package: `app/i18n/` 1. Magento database (translations located in this database take precedence and override translations stored in other locations.) Refer to the [user guide](https://docs.magento.com/m2/ce/user_guide/system/translate-inline.html) for more information. -If there are different translations for one string, the theme dictionary translations have priority over the [module](https://glossary.magento.com/module) translations, and child theme translations have priority over parent theme translations. +{:.bs-callout .bs-callout-info} +Translation priority follows the inverse sequence, with "module translations" having the lowest priority and "magento database" having the hightest priority. + +If there are competing translations for one string, the theme dictionary translations have priority over the [module](https://glossary.magento.com/module) translations, and child theme translations have priority over parent theme translations. ## Creating a theme dictionary to override parent strings for default locale diff --git a/guides/v2.2/frontend-dev-guide/translations/translate_theory.md b/guides/v2.2/frontend-dev-guide/translations/translate_theory.md index 5ec099c5c98..ee80ad3ccd3 100644 --- a/guides/v2.2/frontend-dev-guide/translations/translate_theory.md +++ b/guides/v2.2/frontend-dev-guide/translations/translate_theory.md @@ -18,13 +18,13 @@ To ensure that your new string is added to the dictionary and translated, use th For example: ```php -### + ``` If your string contains a variable, to add a placeholder for this variable in the dictionary, use syntax similar to the following: ```php -### + ``` In this example, the _'Hello %1'_ string is added to the dictionary when the i18n tool is run. @@ -58,18 +58,26 @@ For example: To ensure that the text you add in `.html` templates of UI components is added to the dictionary, mark the text using the `i18n` custom binding. The following code samples illustrate how to use custom bindings: -- When a string is added in the scope of an HTML element: +- When a string is added in the scope of an HTML element, both of the following examples result in the same output: ```html ``` -- When a string is added with no binding to an HTML element: + ```html + + ``` + +- When a string is added with no binding to an HTML element, both of the following examples result in the same output: ```html ``` + ```html + + ``` + - When a string is added as an attribute of an HTML element: ```html @@ -86,8 +94,7 @@ In this example, the *Delete* string is added to the dictionary when the i18n to Delete ``` -Translated strings that originate from `.xml` files will not render unless they are called with a `__()` method. -In this example, you would use a call similar to the following to display the translated *Delete* string. +Translated strings that originate from `.xml` files will not render unless they are called with a `__()` method in `.php` files. In this example, you would use a call similar to the following to display the translated *Delete* string. ```php __($this->config->getData('label')) diff --git a/guides/v2.2/howdoi/checkout/checkout_order.md b/guides/v2.2/howdoi/checkout/checkout_order.md index b66ad89f98d..7c67399283e 100644 --- a/guides/v2.2/howdoi/checkout/checkout_order.md +++ b/guides/v2.2/howdoi/checkout/checkout_order.md @@ -28,18 +28,18 @@ Following is a sample of the validator `.js` file. It must necessarily implement ```js define( - [], - function () { + ['mage/translate', 'Magento_Ui/js/model/messageList'], + function ($t, messageList) { 'use strict'; return { - /** - * Validate something - * - * @returns {boolean} - */ - validate: function() { - //Put your validation logic here - return true; + validate: function () { + const isValid = false; //Put your validation logic here + + if (!isValid) { + messageList.addErrorMessage({ message: $t('a possible failure message ... ') }); + } + + return isValid; } } } diff --git a/guides/v2.2/install-gde/install/cli/dev_options.md b/guides/v2.2/install-gde/install/cli/dev_options.md index 587fc1f85ec..0cf498514b4 100644 --- a/guides/v2.2/install-gde/install/cli/dev_options.md +++ b/guides/v2.2/install-gde/install/cli/dev_options.md @@ -18,4 +18,4 @@ If you clone the Magento 2 GitHub repository, you cannot use the Magent * To [reinstall the Magento software]({{ page.baseurl }}/install-gde/install/cli/dev_reinstall.html), modify the product version in `composer.json`, run `composer update`, then reinstall the Magento software {: .bs-callout-info } -If you are not a contributing developer, you perform upgrades and upgrades as discussed in[Updating the Magento application and components]({{ page.baseurl }}/comp-mgr/bk-compman-upgrade-guide.html). +If you are not a contributing developer, you perform upgrades and upgrades as discussed in [Updating the Magento application and components]({{ page.baseurl }}/comp-mgr/bk-compman-upgrade-guide.html). diff --git a/guides/v2.2/install-gde/prereq/install-rabbitmq.md b/guides/v2.2/install-gde/prereq/install-rabbitmq.md index ca84868638f..3347ba6f1f4 100644 --- a/guides/v2.2/install-gde/prereq/install-rabbitmq.md +++ b/guides/v2.2/install-gde/prereq/install-rabbitmq.md @@ -24,8 +24,8 @@ The message queue system must be established before you install Magento. The bas 1. Install RabbitMQ and any prerequisites. 1. Connect RabbitMQ and Magento. -{:.bs-callout .bs-callout-info} -A basic message queue system can be implemented on {{site.data.var.ee}} using cron instead of RabbitMQ. See [Configure message queues]({{ page.baseurl }}/config-guide/mq/manage-mysql.html) for more information. +{:.bs-callout-info} +You can use MySQL or RabbitMQ for message queue processing. For details on setting up the message queue system, see [Message queues overview]({{ page.baseurl }}/extension-dev-guide/message-queues/message-queues.html). If you are using the Bulk API with {{ site.data.var.ee }}, the message queue system configuration defaults to using RabbitMQ as the message broker. See [Start message queue consumers]({{page.baseurl}}/config-guide/mq/manage-message-queues.html#start-message-queue-consumers) for more information. ## Install RabbitMQ on Ubuntu {#ubuntu-install} @@ -133,7 +133,7 @@ To configure support for SSL, edit the `ssl` and `ssl_options` parameters in the ## Start the message queue consumers -After you have connected {{site.data.var.ee}} and RabbitMQ, you must start the message queue consumers. See [Configure message queues]({{ page.baseurl }}/config-guide/mq/manage-mysql.html) for details. +After you have connected {{site.data.var.ee}} and RabbitMQ, you must start the message queue consumers. See [Configure message queues]({{page.baseurl}}/config-guide/mq/manage-message-queues.html#start-message-queue-consumers) for details. {:.ref-header} Related topics diff --git a/guides/v2.2/javascript-dev-guide/javascript/requirejs.md b/guides/v2.2/javascript-dev-guide/javascript/requirejs.md new file mode 100644 index 00000000000..fc38e586e09 --- /dev/null +++ b/guides/v2.2/javascript-dev-guide/javascript/requirejs.md @@ -0,0 +1,108 @@ +--- +group: javascript-developer-guide +title: RequireJS in Magento +contributor_name: Adarsh Manickam +contributor_link: https://github.com/drpayyne +--- + +This topic describes general concepts of how the [RequireJS library](http://requirejs.org){: target="_blank"} is used in Magento, with examples. Please refer to official RequireJS documentation for in-depth explanation. + +RequireJS is a JavaScript file and module loader. It improves perceived page load times because it allows JavaScript to load in the background. In particular, it enables asynchronous JavaScript loading. + +## RequireJS configuration in Magento {#requirejs-config} + +All configuration is done in the `requirejs-config.js` file. It has a single root object `config` which contains the configuration options described below. All the configuration settings are optional and are used only when required. The following snippet is a sample `requirejs-config.js` describing the structure of the file. Example [`requirejs-config.js` file]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Theme/view/base/requirejs-config.js) + +```javascript +var config = { + 'map': {...}, + 'paths': {...} + 'shim': {...}, + 'config': { + 'mixins': {...} + } +} +``` + +### map {#requirejs-config-map} + +The `map` configuration maps (connects) any real AMD modules that calls `define()`, to the specified alias. In the snippet below, `*` means all loaded RequireJS modules can use the specified alias. + +```javascript +map: { + '*': { + alias: 'Vendor_Module/js/complex/path/amd-module' + } +} +``` + +Now we can use our `Vendor_Module/js/complex/path/module` using `alias` in any RequireJS module or config file without needing to type the entire path. For example, in Magento, `catalogAddToCart` is mapped to `Magento_Catalog/js/catalog-add-to-cart` and can be used anywhere as a RequireJS module name. + +```javascript +map: { + '*': { + catalogAddToCart: 'Magento_Catalog/js/catalog-add-to-cart' + } +} +``` + +### paths {#requirejs-config-paths} + +The `paths` configuration, similar to `map`, is used for aliasing not just any real AMD module that calls `define()`, but also any JS file (event from a URL), HTML templates, etc. Magento uses this to alias URLs and third party libraries. + +```javascript +paths: { + 'alias': 'library/file', + 'another-alias': 'https://some-library.com/file' +} +``` + +### deps {#requirejs-config-deps} + +The `deps` configuration is used to add a dependency. It can either be used directly under `var config = {}` or under a [shim configuration](#requirejs-config-shim). Adding modules under an independent `deps` configuration will load the specified modules in all pages. + +In this snippet, the custom `Vendor_Module/js/module` will be loaded in all pages. + +```javascript +deps: ['Vendor_Module/js/module'] +``` + +### shim {#requirejs-config-shim} + +The `shim` configuration is used to build a dependency on a third party library, since we cannot modify it. + +When to use the `shim` configuration: + +- To add a new dependency to a third party library +- To add a new dependency to a third party library which does not use an AMD module +- To change load order by adding a dependency to a third party library + +In this snippet, dependencies are added directly in an array, or it can be specified as an array under the `deps` key. The `exports` key is used to specify under what identifier the module is exported into. This export identifier can be used to access it. + +```javascript +shim: { + '3rd-party-library': ['myJSFile'], + 'another-3rd-party-library': { + deps: ['myJSFile'], + exports: 'another3rdPartyLibrary' + } +} +``` + +### mixins {#requirejs-config-mixin} + +The `mixins` configuration is used to overwrite component methods of an AMD module which returns either a UI component,a jQuery widget, or a JS object. Unlike the above configuration properties, the `mixins` property is under the `config` property, apart from the parent object called **config**. + +In this snippet, `Vendor_Module/js/module-mixin` will overwrite the existing component methods in `Vendor_Module/js/module` with the specified component methods. It is a convention to name the mixin by appending a `-mixin` to the original `path/to/js`, although not required. + +```javascript +'config': { + 'mixins': { + 'Vendor_Module/js/module': { + 'Vendor_Module/js/module-mixin': true + } + } +} +``` + +The concept of Javascript mixins itself is explained in depth in [Using Javascript Mixins]({{ page.baseurl }}/javascript-dev-guide/javascript/js_mixins.html). diff --git a/guides/v2.2/javascript-dev-guide/widgets/widget-row-builder.md b/guides/v2.2/javascript-dev-guide/widgets/widget-row-builder.md index 21bedafa960..e5d7d351655 100644 --- a/guides/v2.2/javascript-dev-guide/widgets/widget-row-builder.md +++ b/guides/v2.2/javascript-dev-guide/widgets/widget-row-builder.md @@ -199,9 +199,9 @@ Max number of rows. The message selector of an element which appears when the max number of rows has been exceeded. -**Type**: Integer +**Type**: String -**Default value**: `1000` +**Default value**: `#max-registrant-message` ## Code sample diff --git a/guides/v2.2/javascript-dev-guide/widgets/widget_collapsible.md b/guides/v2.2/javascript-dev-guide/widgets/widget_collapsible.md index b0325bad39e..82a147c093b 100644 --- a/guides/v2.2/javascript-dev-guide/widgets/widget_collapsible.md +++ b/guides/v2.2/javascript-dev-guide/widgets/widget_collapsible.md @@ -6,11 +6,11 @@ title: Collapsible widget The Magento collapsible widget converts a header/content pair into an accordion, where the content is collapsed or expanded on the header click. -Unlike the accordion widget is that collapsible is initialized for one title/content pair, while accordion can be initialized for a set of title/contents pairs. +Unlike the accordion widget which is initialized for a set of title/contents pairs, the collapsible widget is initialized for one title/content pair. To "bind" several instances of collapsible widget, the [`collateral`] option is used. -Once it is expanded, the content can be updated using Ajax. The collapsed/expanded state can be saved into local storage or cookies, if the browser does not support local storage. +Once it is expanded, the content can be updated using Ajax. The collapsed/expanded state can be saved into local storage, or cookies if the browser does not support local storage. The collapsible widget source is [lib/web/mage/collapsible.js]. diff --git a/guides/v2.2/javascript-dev-guide/widgets/widget_gallery.md b/guides/v2.2/javascript-dev-guide/widgets/widget_gallery.md index 302c15ed2a2..0b5c9ab19ba 100644 --- a/guides/v2.2/javascript-dev-guide/widgets/widget_gallery.md +++ b/guides/v2.2/javascript-dev-guide/widgets/widget_gallery.md @@ -497,25 +497,25 @@ api.%method_name%(); All available methods are listed in the following paragraph. -### Methods {#gallery_methods} +## Methods {#gallery_methods} -* [first](#gallery_first) -* [last](#gallery_last) -* [next](#gallery_next) -* [prev](#gallery_prev) -* [seek](#gallery_seek) -* [updateData](#gallery_updateData) -* [updateOptions](#gallery_updateData) +* [first()](#gallery_first) +* [last()](#gallery_last) +* [next()](#gallery_next) +* [prev()](#gallery_prev) +* [seek()](#gallery_seek) +* [updateData()](#gallery_updateData) +* [updateOptions()](#gallery_updateData) -#### `first()` {#gallery_first} +### `first()` {#gallery_first} Displays the first preview image. -#### `last()` {#gallery_last} +### `last()` {#gallery_last} Displays the last preview image. -#### `next()` {#gallery_next} +### `next()` {#gallery_next} Image ID is passed as an argument. Displays the next preview image. @@ -524,7 +524,7 @@ If the last image ID is passed, the behavior depends on whether [loop](#gallery_ * if loop is enabled, the first image is displayed. * if loop is disabled, does not change the displayed image. -#### `prev()` {#gallery_prev} +### `prev()` {#gallery_prev} Displays the previous preview image. @@ -533,7 +533,7 @@ If the first image ID is passed, the behavior depends on whether [loop](#gallery * if loop is enabled, the last image is displayed. * if loop is disabled, does not change the displayed image. -#### `seek()` {#gallery_seek} +### `seek()` {#gallery_seek} Displays the image with the specified `index`. @@ -546,7 +546,7 @@ Behavior: * `seek(-1)` displays the last image. * If the argument is a number bigger than the number of items, or less than "-(number of items)" the gallery shows the modulus of the following division: total images number divided by the argument number. -#### `updateData()` {#gallery_updateData} +### `updateData()` {#gallery_updateData} Add new items to the gallery. @@ -560,7 +560,7 @@ api.updateData([{ }]); ``` -#### `updateOptions()` {#gallery_updateOptions} +### `updateOptions()` {#gallery_updateOptions} Updates options of active breakpoint or default gallery options, if there is no active breakpoint. Example: diff --git a/guides/v2.2/javascript-dev-guide/widgets/widget_modal.md b/guides/v2.2/javascript-dev-guide/widgets/widget_modal.md index 0c1c00ec457..342629dcd41 100644 --- a/guides/v2.2/javascript-dev-guide/widgets/widget_modal.md +++ b/guides/v2.2/javascript-dev-guide/widgets/widget_modal.md @@ -53,7 +53,7 @@ The modal widget has the following options: - [trigger](#modal_trigger) - [type](#modal_type) -### autoOpen {#modal_autoopen} +### `autoOpen` {#modal_autoopen} Automatically open the modal window when the widget is initialized. @@ -72,7 +72,7 @@ Array of buttons for action pane. buttons: [{ text: '', class: '', - click: function() {} //handler on button click + click: function () {} //handler on button click }] ``` @@ -82,13 +82,13 @@ buttons: [{ buttons: [{ text: $.mage.__('Ok'), class: '', - click: function() { + click: function () { this.closeModal(); } }] ``` -### clickableOverlay {#modal_clickableOverlay} +### `clickableOverlay` {#modal_clickableOverlay} Close the modal window when a user clicks on the overlay. @@ -215,8 +215,8 @@ You can listen to these events in two ways: Use jQuery's [`on`](http://api.jquery.com/on/) function: ```javascript -var modal = $( "#modal_content").modal({...}); -modal.on( "modalclosed", function() { +var modal = $('#modal_content').modal({...}); +modal.on('modalclosed', function () { // Do some action when modal closed }); ``` @@ -226,7 +226,7 @@ Or assign a callback as a property when creating a modal instance: ```javascript $('#modal_content').modal({ ... - closed: function(){ + closed: function (){ // Do some action when modal closed } }); diff --git a/guides/v2.2/marketplace/eqp/auth.md b/guides/v2.2/marketplace/eqp/auth.md deleted file mode 100644 index e9adf07dad9..00000000000 --- a/guides/v2.2/marketplace/eqp/auth.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -group: marketplace-api -title: Authentication ---- - -All API requests must be authenticated using [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication). The REST APIs use a two-step process to authenticate a client application and authorize access to resources: - -1. Obtain a session token using an application ID and secret. -1. Provide the session token as an HTTP Authorization Bearer header to access a resource. - -First, you must create an application on the [Developer Portal](https://developer.magento.com) to obtain an application ID and secret for sandbox and production endpoints. - -{: .bs-callout-info } -Information about how to create applications will be announced when the EQP REST API is publicly released. - -## Session Token - -You must use an application ID and secret to obtain a session token. See the following list for examples of an application ID and secret: - -* **id**—AQ17NZ49WC -* **secret**—8820c99614d65f923df7660276f20e029d73e2ca - -The following endpoint grants an application session token: - -```http -POST /rest/v1/apps/session/token -``` - -You must specify the grant type in the request body: - -```json -{ - “grant_type”: “session” -} -``` - -{: .bs-callout-info } -The API supports the `session` grant type only. - -The following example shows a request and expected response: - -**Request** - -```bash -curl -X POST \ - -u 'AQ17NZ49WC:8820c99614d65f923df7660276f20e029d73e2ca' \ - -H 'Content-Type: application/json' \ - -d '{ "grant_type" : "session" }' \ - https://developer-api.magento.com/rest/v1/apps/session/token -``` - -**Response** - -A successful HTTP 200 OK response will be sent for a valid application ID and secret: - -```json -{ - "mage_id": "MAG123456789", - "ust": "baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7", - "expires_in": 3600 -} -``` - -* The `mage_id` value will identify the user account associated with the client application. -* The `ust` value (user session token) must be used as the `Authorization Bearer` header for all subsequent API calls. -* The session token is valid only for the time specified in `expires_in` (seconds). -* When session token expires, a new token must be obtained as described above. - -## Authorization Bearer - -After obtaining a valid session token, you must use it as a bearer token in all subsequent API calls. - -For example, to access a user profile with a session token: - -```bash -curl -X GET \ - -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \ - https://developer-api.magento.com/rest/v1/users/MAG123456789 -``` diff --git a/guides/v2.2/marketplace/eqp/files.md b/guides/v2.2/marketplace/eqp/files.md deleted file mode 100644 index 2c20cb7dc0d..00000000000 --- a/guides/v2.2/marketplace/eqp/files.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -group: marketplace-api -title: Files ---- - -Use `files` resources to manage all code artifacts and assets associated with an extension or a theme: - -* Magento 1 tarball (.tgz) -* Magento 2 ZIP files -* Image files for logos and galleries -* Product Icons -* PDF documents for User Guides, Installation Guides, and Reference Guides - -Each file upload receives a unique ID. You must associate these IDs with your submission later using the [packages API]({{ page.baseurl }}/marketplace/eqp/packages.html). - -You can associate a file with multiple products. This allows for asset sharing across different packages. For example, you can share an image file for a gallery with different packages by associating it with the same file upload ID. - -All files that you upload are inspected for malware. We only accept packages if all of its associated files have passed the malware inspection. - -## File uploads - -Use this API to upload files, retrieve file upload status, and remove files. - -```http -GET /rest/v1/files/uploads/:file_upload_id -POST /rest/v1/files/uploads -DELETE /rest/v1/files/uploads/:file_upload_id -``` - -### Get a file upload - -Use the upload ID to retrieve details about a file upload. - -```http -GET /rest/v1/files/uploads/:file_upload_id -``` - -**Request** - -```bash -curl -X GET \ - -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \ - https://developer-api.magento.com/rest/v1/files/uploads/dhsiXjdksW17623 -``` - -**Response** - -```json -{ - "file_upload_id" : "dhsiXjdksW17623", - "filename" : “acme_one-click-checkout.zip”, - "content_type" : "application/zip", - "size" : 182934, - "malware_status" : "pass’, - “file_hash” : “f53f5db985b8815f1ce6fd4b48a0439a”, - “submission_ids” : [ - ], - “is_profile_image” : false -} -``` - -Details on the response fields: - -|Field|Type|Description| -|-----|----|-----------| -|filename|string|The name of the file sent in the request.| -|content-type|string|The mime-type of the uploaded file.| -|size|integer|The size of the file in bytes.| -|malware_status|string|Indicates the malware check result for this file. Valid values include `pass`, `fail`, and, `in-progress`.| -|file_hash|string|Hash of the file; currently using md5.| -|submission_ids|array|The list of package submissions associated with this file.| -{:.style="table-layout: auto;"} - -### Upload files - -You upload files in bulk upload using the **multipart/form-data** encoding type. With this approach, binary files can be uploaded without the need for additional encoding, which can result in an increase in overall upload size. - -```http -POST /rest/v1/files/uploads -``` - -A sample request body of mime type, [multipart/form-data](https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2) with a boundary string of `----------287032381131322` -is shown below: - -```text -------------287032381131322 -Content-Disposition: form-data; name="file[]"; filename=“acme_one-click-checkout.zip" -Content-Type: application/zip - - - -------------287032381131322 -Content-Disposition: form-data; name="file[]"; filename=“one-click-icon.png" -Content-Type: image/png - - - -------------287032381131322 -Content-Disposition: form-data; name="file[]"; filename=“acme-logo.png" -Content-Type: image/png - - - -------------287032381131322 -Content-Disposition: form-data; name="file[]"; filename="user.pdf" -Content-Type: application/pdf - - - -------------287032381131322-- -``` - -* Each part has a header and body with `Content-Disposition` header always set to `form-data`. -* The `name` value must be set to `file[]` for all parts. -* The original filename must be supplied in the `filename` parameter. -* The `Content-Type` header must be set to the appropriate mime-type for the file. -* The body of each part is the full contents of the raw file. - -For example, if you save the previous request body is saved to a temporary file at `/tmp/files-payload`, you can use it in your POST request to upload the file: - -**Request** - -```bash -curl -X POST \ - -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \ - -H "Content-Type: multipart/form-data; boundary=----------287032381131322" \ - --data-binary @/tmp/files-payload \ - https://developer-api.magento.com/rest/v1/files/uploads -``` - -**Response** - -```json -[ - { - "filename" : “acme_one-click-checkout.zip”, - "content_type" : "application/zip", - "size" : 182934, - "file_upload_id" : “dhsiXjdksW17623” - }, - - { - "filename" : “one-click-icon.png”, - "content_type" : "image/png", - "size" : 37492, - "file_upload_id" : “gAdh628bzXv” - }, - - { - "filename" : “acme-logo.png”, - "content_type" : "image/png", - "size" : 6825, - "file_upload_id" : “fur7284XcgdcV” - }, - - { - "filename" : “user.pdf”, - "content_type" : "application/pdf", - "size" : 48392, - "file_upload_id" : “j47dVbsFgkl” - } -] -``` - -{: .bs-callout-info } -The response is the list of files in the same order sent during the upload request. - -Each record in the list has the following fields: - -|Field|Type|Description| -|-----|----|-----------| -|filename|string|The name of the file sent in the request.| -|content-type|string|The mime-type of the uploaded file.| -|size|integer|The size of the file in bytes.| -|file_upload_id|string|A unique identifier for the file.| -{:.style="table-layout: auto;"} - -The `file_upload_id` must be tracked for subsequent package submission APIs. - -### Delete an uploaded file - -You can only dissociate files from packages that have not been published on the Magento Marketplace. Removing a file without the optional `submission_ids` parameter disassociates it from all linked packages. If no packages are associated with a file, it will be removed. - -```http -DELETE /rest/v1/files/uploads/:file_upload_id -``` - -Available parameters: - -|Parameter|Type|Required|Description| -|---------|----|--------|-----------| -|submission_ids|array|no|A list of submission IDs to disassociate the file from the specified package.| -{:.style="table-layout: auto;"} - -**Request** - -```bash -curl -X DELETE \ - -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \ - https://developer-api.magento.com/rest/v1/files/uploads/fur7284XcgdcV -``` - -**Response** - -```json -[ - { - “submission_id” : “ad6834ffec”, - “code” : 200, - “message” : “Success” - }, - - { - “submission_id” : “3684dafecb”, - “code” : 200, - “message” : “Success” - }, - - { - “submission_id” : “7ffcdea458”, - “code” : 1500 - “message” : “Package live in store” - } -] -``` - -* The API returns a batch response for each item, which includes a `code` and `message`. -* A 200 OK HTTP response code indicates a successful upload. -* Any non-200 HTTP response code indicates an error. -* If no packages are associated with a file, the API returns an empty list and the file is removed. diff --git a/guides/v2.2/mrg/ce/Signifyd.md b/guides/v2.2/mrg/ce/Signifyd.md index db891cb3a52..d381160753a 100644 --- a/guides/v2.2/mrg/ce/Signifyd.md +++ b/guides/v2.2/mrg/ce/Signifyd.md @@ -45,6 +45,7 @@ The following interfaces (marked with the `@api` annotation) extend the Signifyd - send a request through the Signifyd API to create a new case guarantee `Magento\Signifyd\Api\GuaranteeCancelingServiceInterface`: + - send a request through the Signifyd API to cancel the Signifyd case guarantee `Magento\Signifyd\Api\Data\CaseSearchResultsInterface`: diff --git a/guides/v2.2/pattern-library/general/accessibilityguideline/accessibilityGuideline.md b/guides/v2.2/pattern-library/general/accessibilityguideline/accessibilityGuideline.md index afa10596467..b9cf4249c91 100644 --- a/guides/v2.2/pattern-library/general/accessibilityguideline/accessibilityGuideline.md +++ b/guides/v2.2/pattern-library/general/accessibilityguideline/accessibilityGuideline.md @@ -8,9 +8,7 @@ The Magento application should be accessible for all people, whatever their hard - **Be mindful of text length**—Don't make textual content too long or too short. -- **Provide adequate contrast**—Be extra careful with light shades of gray, orange, and yellow. Check your contrast levels here: -[http://webaim.org/resources/contrastchecker/](http://webaim.org/resources/contrastchecker/){:target="_blank"} -or here: [http://www.paciellogroup.com/resources/contrastAnalyser](http://www.paciellogroup.com/resources/contrastAnalyser){:target="_blank"} +- **Provide adequate contrast**—Be extra careful with light shades of gray, orange, and yellow. Check your contrast levels here: [http://webaim.org/resources/contrastchecker/](http://webaim.org/resources/contrastchecker/){:target="_blank"} or here: [http://www.paciellogroup.com/resources/contrastAnalyser](http://www.paciellogroup.com/resources/contrastAnalyser){:target="_blank"} **Acceptable** diff --git a/guides/v2.2/payments-integrations/payment-gateway/payment-gateway-intro.md b/guides/v2.2/payments-integrations/payment-gateway/payment-gateway-intro.md index a15f55c36e9..2eb1c21c10d 100644 --- a/guides/v2.2/payments-integrations/payment-gateway/payment-gateway-intro.md +++ b/guides/v2.2/payments-integrations/payment-gateway/payment-gateway-intro.md @@ -75,7 +75,7 @@ Data used for a transaction. Might include the following:
  • shipping, billing addresses
  • customer details
  • taxes
  • -
  • merchant's payment provider [API](https://glossary.magento.com/api) credentials
  • +
  • merchant's payment provider API credentials
diff --git a/guides/v2.2/payments-integrations/vault/enabler.md b/guides/v2.2/payments-integrations/vault/enabler.md index 9eff6778b3d..4ac7c7f418e 100644 --- a/guides/v2.2/payments-integrations/vault/enabler.md +++ b/guides/v2.2/payments-integrations/vault/enabler.md @@ -55,12 +55,12 @@ The payment component must process the state of the vault-enabling control and u Magento has a default vault enabler [UI component](https://glossary.magento.com/ui-component) (`Magento_Vault/js/view/payment/vault-enabler`). In the payment component, you just need to call its `visitAdditionalData` to update the `additional_data` property. The rest is done by the [`\Magento\Vault\Observer\VaultEnableAssigner`]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Vault/Observer/VaultEnableAssigner.php) observer. -Example: [the Braintree payment UI component]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/hosted-fields.js) +Example: [the Braintree payment UI component]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js) ```javascript define([ ... - 'Magento_Braintree/js/view/payment/method-renderer/cc-form', + 'Magento_Payment/js/view/payment/cc-form', 'Magento_Vault/js/view/payment/vault-enabler' ], function (... Component, VaultEnabler) { 'use strict'; @@ -71,39 +71,48 @@ define([ * @returns {exports.initialize} */ initialize: function () { - this._super(); + var self = this; - ... + self._super(); this.vaultEnabler = new VaultEnabler(); this.vaultEnabler.setPaymentCode(this.getVaultCode()); - - return this; + ... + return self; }, /** * @returns {Object} */ getData: function () { - var data = this._super(); - + var data = { + 'method': this.getCode(), + 'additional_data': { + 'payment_method_nonce': this.paymentPayload.nonce + } + }; + + data['additional_data'] = _.extend(data['additional_data'], this.additionalData); this.vaultEnabler.visitAdditionalData(data); return data; }, /** - * @returns {Bool} + * @returns {Boolean} */ isVaultEnabled: function () { return this.vaultEnabler.isVaultEnabled(); }, + /** + * Returns vault code. + * * @returns {String} */ getVaultCode: function () { - return window.checkoutConfig.payment[this.getCode()].vaultCode; - } + return window.checkoutConfig.payment[this.getCode()].ccVaultCode; + }, }); }); ``` diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.0CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.0CE.md index 554ac515375..09776e5af38 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.0CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.0CE.md @@ -60,562 +60,740 @@ This release contains hundreds of fixes and enhancements. ### Installation, upgrade, deployment + * You can now run `magento setup:upgrade --keep-generated` in production mode. Previously, Magento would throw an error when you ran `setup:upgrade` after compiling dependency injection. (This significantly curtailed your ability to deploy continuous integration.) [GitHub-4795](https://github.com/magento/magento2/issues/4795) + * You can now upgrade your Magento installation when using multiple master databases for checkout, order management, and product data. + * We fixed an issue that blocked using the web installer to successfully set up Magento. Previously, if you tried to install Magento with the web installer, Magento would indicate that the readiness check failed, and installation would not complete. + * You can now deploy build processes on a different staging machine than the one you're running your production environment on. + * Magento 2.0.x and 2.1.x now support the use of table prefixing during installation. Previously, when you used table prefixing, your Magento installation failed with this error: "Duplicate key on write or update". [GitHub-5688](https://github.com/magento/magento2/issues/5688) + * Third-party command line tools no longer fail when you run `setup:di:compile`. + * Magento now correctly applies [website](https://glossary.magento.com/website) configuration parameters to the corresponding [store view](https://glossary.magento.com/store-view). [GitHub-7943](https://github.com/magento/magento2/issues/7943) + * Fixed HTML inline style used when sending emails when implementing the upgraded `emorgifier` library. [GitHub-8241](https://github.com/magento/magento2/issues/8241) + * We’ve changed how Magento displays status updates during a product upgrade. Previously, potentially vulnerable information such as full paths and module names were displayed in the product GUI, potentially exposing this information to a malicious user. Magento now restricts this potentially vulnerable information to logs that are available to administrators only. + * The `cron:install` command now works as expected in Magento 2.2.0. Previously, the configuration for `crontab` commands contained double quotes that were not escaped, which caused invalid commands to be written to the `crontab` file. [GitHub-10040](https://github.com/magento/magento2/issues/10040) + * Magento now moves the `sequence_*` table to the correct database after implementing a split database. + * Magento no longer throws an exception when the configuration checksum is absent on a new installation. + * Custom themes now inherit parent [XML](https://glossary.magento.com/xml) configuration information as expected. + * We've removed the sample password from the Setup Wizard + * You can now enable JavaScript minification without error. Previously, after enabling JS minification, the Magento Admin displayed 404 errors when accessing JavaScript elements. + * Magento no longer displays console errors after CSS merging and minification is enabled. Previously, when CSS merging and minification was enabled, the storefront was not displayed as expected, and the `styles-l.min.css` and `print.min.css` files could not be found. + * You can now successfully use the `config:set` command to set allowed or default currencies. + * Nginx now redirects to the setup page when using port 81. + * We've added the `dev:template-hints:enable` and `dev:template-hints:disable` commands to manage template hints. *Fix submitted by community member Miguel Balparda in pull request [9778](https://github.com/magento/magento2/pull/9778){: target="_blank"}.* + * We've added the `dev:query-log:enable` and `dev:query-log:disable` to manage database query logging. *Fix submitted by community member Federico Rivollier in pull request [9264](https://github.com/magento/magento2/pull/9264){: target="_blank"}.* + * We've added the `varnish:vcl:generate` command to create the Varnish VCL file. *Fix submitted by community member Piotr Kwiecinski in pull request [9286](https://github.com/magento/magento2/pull/9286){: target="_blank"}.* + * Magento now adds a new record to the quote table and adds the current date and time to the `created_at` field. Previously, this field was not updated. + * The installation script no longer creates files in the root directory for missing modules when you install a community-created language pack. Translation packs created by the community often include translations for Magento Commerce modules. When you install these translation packs on an Open Source installation, the Commerce modules are missing. Previously, the installation script creates a file in the root directory for these Commerce modules instead of skipping them. [GitHub-6260](https://github.com/magento/magento2/issues/6260) + * We've fixed issues with upgrading installations with split databases. + * The import URL directive now contains base URL and locale placeholders instead of the real URL. + * Magento now works as expected on an Apache `php-fpm` environment. + * The `DOCUMENT_ROOT` directory is now writable. Previously, installation failed because this directory was not writable. + * When upgrading Magento from 2.1.x to 2.2, the `quote_address.free_shipping` column is the same whether you upgraded from a previous installation of Magento or performed a fresh installation. Previously, different upgrade/installation options affected the contents of this column. + * Command-line users now have read and write permissions to the `var/generation` directory. [GitHub-7933](https://github.com/magento/magento2/issues/7933) + * The Magento command-line interface now sets the correct exit codes when an upgrade task fails. [GitHub-7576](https://github.com/magento/magento2/issues/7576) + * You can now disable the Review module without incurring an error in the Product Edit page. Previously, if you tried to edit a product after disabling the review module, Magento displayed this error: "Something went wrong". [GitHub-6704](https://github.com/magento/magento2/issues/6704) + * You can now use Component Manager to enable a previously disabled module. Previously, when you ran `bin/magento module:disable Magento_AnyModule`, then tried to re-enable that module, Magento fails to enable it and any previously enabled cache types, and module installation fails. [GitHub-6078](https://github.com/magento/magento2/issues/6078) + * Magento no longer inserts HTTPSS:// for HTTPS in a store address when you install Magento using an HTTPS address over SSL. [GitHub-6262](https://github.com/magento/magento2/issues/6262) + * We’ve fixed problems with the uninstall process. Previously, when Magento tries to uninstall a module using composer, it simultaneously tried to update the `symfony/process` version. However, because the `module:uninstall`  command uses  `symfony/process`, the command stopped running. [GitHub-5797](https://github.com/magento/magento2/issues/5797) ### Cart and checkout + * Magento now implements the minicart maximum display recently added item setting to your [shopping cart](https://glossary.magento.com/shopping-cart). Previously, Magento displayed all the items in the shopping cart, even when the number of items exceeded this limit. [GitHub-4750](https://github.com/magento/magento2/issues/4750) + * You can now reload a page during [checkout](https://glossary.magento.com/checkout) without unintentionally changing shipping information. + * Custom address attributes now appear in the Checkout summary. + * Lengthy [Order Status](https://glossary.magento.com/order-status) tables are now paginated as expected. + * Magento now displays the product add validation message ("Product was added to the cart") only after you have successfully added a product to your cart. + * We've resolved an issue that prevented you from adding more than one product to a [shopping cart](https://glossary.magento.com/shopping-cart) from a wishlist. [GitHub-5282](https://github.com/magento/magento2/issues/5282) + * The number of items in the minicart is now updated correctly when you run Magento in mixed HTTP/HTTPS mode. [GitHub-6487](https://github.com/magento/magento2/issues/6487) + * The minicart now performs as expected in deployments that span multiple websites. Previously, in a Magento installation that had multiple websites, products that you added to one [website](https://glossary.magento.com/website) appeared in the other websites' minicarts. + * A cart rule with a coupon code no longer overrides a cart rule without a coupon code when multiple [cart rules](https://glossary.magento.com/cart-rules) are applied. Previously, when you created two cart rules and applied them to a cart, the rule with a coupon was applied, but the second rule was not. [GitHub-6294](https://github.com/magento/magento2/issues/6294) + * Refreshing your browser page while on the Review and Payments page of the checkout process no longer clears information from form fields. Previously, Magento cleared information from the **Ship to** field if you refreshed your browser page during this process. + * Magento no longer lets you add a product variation to your shopping cart if the item is out of stock. Previously, Magento permitted you to select an out-of-stock item and when you added it to your cart, displayed the "Product is out of stock" message. + * We've corrected a problem with Magento throwing an HTTP ERROR 500 intermittently during checkout. + * We fixed a [JavaScript](https://glossary.magento.com/javascript) error that occurred on the Checkout page after you changed the country in the **Estimate Shipping and Tax** field. + * Magento now successfully estimates shipping costs. Previously, when you tried to estimate shipping costs, the load indicator would spin indefinitely, and Magento displayed this exception,```Object doesn't support this action```. [GitHub-5358](https://github.com/magento/magento2/issues/5358), [GitHub-7051](https://github.com/magento/magento2/issues/7051) + * Magento now displays the **State/Province** field on the Add New Address page. [GitHub-5279](https://github.com/magento/magento2/issues/5279) + * Credit card information now persists as expected after a user enters a promotion code during checkout. Previously, After an user enters credit card information, then discount code and then click **Place Order**. The credit card information fields are emptied and user has to enter the credit card information again to proceed with the order transaction. + * You can complete your order after entering a new shipping address during checkout. Previously, Magento would not let you place an order if you entered a new shipping address during checkout. -* Magento no longer throws an exception when a customer updates their shopping cart after you've enabled the Minimum Order setting. *Fix submitted by community member Eric Risler - in pull request [8474](https://github.com/magento/magento2/pull/8474){: target="_blank"}.* + +* Magento no longer throws an exception when a customer updates their shopping cart after you've enabled the Minimum Order setting. *Fix submitted by community member Eric Risler in pull request [8474](https://github.com/magento/magento2/pull/8474){: target="_blank"}.* + * You can now translate the FPT label on the checkout page. *Fix submitted by community member Oleksii Korshenko in pull request [9204](https://github.com/magento/magento2/pull/9204){: target="_blank"}.* + * Magento no longer truncates bill-to names and ship-to names to 20 characters in the Admin. *Fix submitted by community member Isolde in pull request [9654](https://github.com/magento/magento2/pull/9654){: target="_blank"}.* + * You can now delete the last item in your cart when the Minimum Order setting is enabled. *Fix submitted by community member storbahn in pull request [9714](https://github.com/magento/magento2/pull/9714){: target="_blank"}.* + * You can now create unique checkbox IDs for the Terms and Conditions part of the checkout process. *Fix submitted by community member Bernhard in pull request [9717](https://github.com/magento/magento2/pull/9717){: target="_blank"}.* + * Magento now correctly displays the coupon label in the shopping cart during checkout. *Fix submitted by community member [Sylvain Rayé](https://github.com/diglin){: target="_blank"} in pull request [9721](https://github.com/magento/magento2/pull/9721){: target="_blank"}.* + * Magento now pre-fills prefixes and suffixes in the quote shipping address *Fix submitted by community member Anton Evers in pull request [9925](https://github.com/magento/magento2/pull/9925){: target="_blank"}.* + * The country drop-down box now correctly shows the countries for which the current store and customer account are configured. *Fix submitted by community member Marcel in pull request [9429](https://github.com/magento/magento2/pull/9429){: target="_blank"}.* + * The shopping cart now handles products with custom options. [GitHub-5612](https://github.com/magento/magento2/issues/5612) + * Magento now requires completion of the State field during the check out process if this field has been configured as required. + * Checkout now loads as expected in Safari private mode. [GitHub-7942](https://github.com/magento/magento2/issues/7942), [GitHub-7329](https://github.com/magento/magento2/issues/7329), [GitHub-8358](https://github.com/magento/magento2/issues/8358) + * Minicart now shows all products you’ve added, whether you added them while signed-in or not. Previously, the minicart contained only products that you added while signed in. [GitHub-7500](https://github.com/magento/magento2/issues/7500) + * Magento now displays the correct error message when you enter an invalid discount code when making a payment. [GitHub-7230](https://github.com/magento/magento2/issues/7230) + * Changing a product price under the website scope now updates the product price across all stores. Previously, any price you set on the store view level overrode the price set in website scope. [GitHub-5133](https://github.com/magento/magento2/issues/5133), [GitHub-7251](https://github.com/magento/magento2/issues/7251) + * You can now directly add a configurable product to your shopping cart from category page. [GitHub-2574](https://github.com/magento/magento2/issues/2574), [GitHub-5850](https://github.com/magento/magento2/issues/5850), [GitHub-5882](https://github.com/magento/magento2/issues/5882), [GitHub-6572](https://github.com/magento/magento2/issues/6572), [GitHub-5558](https://github.com/magento/magento2/issues/5558), [GitHub-4184](https://github.com/magento/magento2/issues/4184) + * Magento now displays out-of-stock products in the shopping cart. Previously, if a product’s status changed between the time you added it to the cart and you proceeded to check out, Magento removed the product from your cart. [GitHub-6583](https://github.com/magento/magento2/issues/6583) + * When you select `New Address` while reviewing order information during check out, Magento now profiles the username and country fields, but leaves the address fields empty. Previously, Magento did not leave the address fields empty, and the checkout process failed. [GitHub-6869](https://github.com/magento/magento2/issues/6869) + * Checkout agreement validation now works as expected after you change payment method. [GitHub-6224](https://github.com/magento/magento2/issues/6224) + * The shopping cart now displays a shipping rate that reflects tax settings. Previously, the prices displayed in your shopping cart were not adjusted to include these settings. [GitHub-6166](https://github.com/magento/magento2/issues/6166) + * Magento now displays the ”Thank you for your purchase!" on the checkout success page. ### Catalog + * Magento no longer locks the `category_product_entity` table. Unlocking this table reduces the potential of lock-related timeouts that can occur when indexing and checkout operations run in parallel. Previously, Magento locked the `category_product_entity` table. + * The [storefront](https://glossary.magento.com/storefront) now displays images that Magento resizes during product save operations, rather than resizing the product on the storefront. Previously, the image path contained `store_id`, and during save operations, Magento resized images for images the default store only. + * The `\Magento\CatalogInventory\Model\Stock\Status\getStockId()` method now returns the correct values. + * The [storefront](https://glossary.magento.com/storefront) gallery now displays all the images associated with a [configurable product](https://glossary.magento.com/configurable-product). Previously, when you clicked on the swatches associated with a configurable product, the gallery displayed only one of several possible images. [GitHub-6195](https://github.com/magento/magento2/issues/6195), [GitHub-4101](https://github.com/magento/magento2/issues/4101) + * Magento now displays the **This is a required field** message immediately adjacent to the product options as needed during [checkout](https://glossary.magento.com/checkout). Previously, Magento displayed this message at the bottom of the checkout form. + * You can now save a product with images multiple times. + * The category page now shows the current price after Magento runs a scheduled update. Previously, the category page would not update the price after running a scheduled update. [GitHub-4945](https://github.com/magento/magento2/issues/4945) + * You can now sort and filter on the New Review page. [GitHub-5391](https://github.com/magento/magento2/issues/5391) + * Magento now displays server-side Ajax error messages. + * Magento now validates the uniqueness of product attribute values as you create or edit them. Previously, you could add identically named values to an attribute. [GitHub-4881](https://github.com/magento/magento2/issues/4881) + * Magento now displays the price of out-of-stock products on the product page. + * If you remove an item from the Compare Items list that is displayed on any [Category](https://glossary.magento.com/category) page, Magento no longer redirects you to the Compare Products page. + * Subcategories no longer show up in the menu when the parent category is disabled or hidden from the menu. [GitHub-10664](https://github.com/magento/magento2/issues/10664) + * We've corrected a problem with Magento throwing an HTTP ERROR 500 intermittently during checkout. + * The product attribute `category_ids` can have only **Global** scope. Previously, you could change the scope value of `category_ids` to **Store**. + * A price change to a custom option affects only that option. Previously, changing the price of a custom option also affected the price of related products. [GitHub-4588](https://github.com/magento/magento2/issues/4588), [GitHub-5798](https://github.com/magento/magento2/issues/5798), [GitHub-6041](https://github.com/magento/magento2/issues/6041), [GitHub-6097](https://github.com/magento/magento2/issues/6097) + * The prices you assign to custom options no longer change unexpectedly after you save them. [GitHub-6116](https://github.com/magento/magento2/issues/6116) + * You can now create a blank attribute option using the drop-down input option on products that do not require an attribute. [GitHub-3545](https://github.com/magento/magento2/issues/3545), [GitHub-5485](https://github.com/magento/magento2/issues/5485), [GitHub-4910](https://github.com/magento/magento2/issues/4910) + * Magento no longer encounters an error when it cannot find a product image file. [GitHub-5184](https://github.com/magento/magento2/issues/5184), [GitHub-5497](https://github.com/magento/magento2/issues/5497), [GitHub-5871](https://github.com/magento/magento2/issues/5871) + * You can now successfully set an SKU mask to empty. Previously, when a product SKU mask was set to empty, Magento experienced problems loading the Product Add page. [GitHub-5618](https://github.com/magento/magento2/issues/5618) + * Magento now correctly displays custom options at the store-view level. [GitHub-2908](https://github.com/magento/magento2/issues/2908), [GitHub-5885](https://github.com/magento/magento2/issues/5885), [GitHub-5612](https://github.com/magento/magento2/issues/5612) + * Magento now provides swatch input for the Admin Scope, and the attribute fall back mechanism now reverts to the default option value if no values are specified for specific store view. [GitHub-5143](https://github.com/magento/magento2/issues/5143), [GitHub-5142](https://github.com/magento/magento2/issues/5142) + * You can now create a custom attribute for a category that successfully uploads a custom image. Previously, you could create the attribute, but could not save the image. + * Sorting configurable products by price now works as expected when a simple product has a special price. [GitHub-4778](https://github.com/magento/magento2/issues/4778) + * Magento no longer displays an error when you open a product with a Fixed Product Tax attribute enabled. + * We've improved the process of using the WebAPI interface to save a product stock item. Previously, this type of save action worked inconsistently. + * You can no longer change or fake a product price from the Magento [storefront](https://glossary.magento.com/storefront) and then complete an order with that faked price. + * View permissions to high-level product categories now work as expected. Previously, Magento displayed only the product categories that users who belonged to the NOT_LOGGED_IN customer group were permitted to view, no matter which user logged in. Additionally, a user restricted to browse a category could still see the category in the top-level navigation menu if the page were previously cached in FPC. + * You can now successfully add a product to the compare list. Previously, when you tried to add a product to a compare list, Magento displayed an error. + * You can now remove custom options from simple products. Previously, when you tried to remove a custom option from a product, Magento did not remove the options, and displayed an error message. + * You can now successfully set the **Enable Product** attribute to **no**. + * Magento no longer permits a shopper to place a re-order once you've disabled one of items in the order. + * Fixed an issue that occurred in the Catalog Gallery on mobile displays when the `allowfullscreen` setting is enabled. *Fix submitted by community member Dennis van Schaik in pull request [8434](https://github.com/magento/magento2/pull/8434){: target="_blank"}.* + * Magento now successfully loads re-ordered related products when Edge-Mode is activated. *Fix submitted by community member [@kirashet666](https://github.com/kirashet666){: target="_blank"} in pull request [8467](https://github.com/magento/magento2/pull/8467){: target="_blank"}.* + * Magento now displays cross-sells as expected when you use the `product/list/items.phtml` template. *Fix submitted by community member Koen V in pull request [8602](https://github.com/magento/magento2/pull/9662){: target="_blank"}.* + * Magento now displays the **Yes** or **No** attribute value on Product pages. *Fix submitted by community member Timo Klement in pull request [8623](https://github.com/magento/magento2/pull/8623){: target="_blank"}.* + * Setting the **show_out_of_stock** attribute to **No** now works as expected. *Fix submitted by community member Theis Corfixen in pull request [8736](https://github.com/magento/magento2/pull/8736){: target="_blank"}.* + * Magento now uses parent names (instead of SKU-based names) when creating configurable products. *Fix submitted by community member Pascal Brouwers in pull request [9681](https://github.com/magento/magento2/pull/9681){: target="_blank"}.* + * You can now create an `etc/view.xml` file containing an `images` tag with an attribute `module`. *Fix submitted by community member Marius Strajeru in pull request [10052](https://github.com/magento/magento2/pull/10052){: target="_blank"}.* + * Magento now displays the Category selection UI under Conditions when you select a rule for editing. *Fix submitted by community member duckchip in pull request [10094](https://github.com/magento/magento2/pull/10094){: target="_blank"}.* + * Magento now displays the correct image when you switch between a configurable product's options. Previously, Magento loaded product images from a different product. + * The Magento WYSIWYG editor now handles special characters such as percent sign (%). [GitHub-9452](https://github.com/magento/magento2/issues/9452) + * The `indexer:reindex catalog_category_product` process can now handle more than 500 products in a category. + * Magento now displays the price set at store view-level for a product that has different prices set on the global and store view level. + * Out-of-stock options for configurable products no longer show up in search and layered navigation results. + * Magento no longer throws an error when you try to save a product with imported custom options. + * Magento now displays the product price even when the product is out-of-stock. + * `productWebsiteLink` no longer deletes a product’s custom origins. + * Magento now successfully handles purchases of product with minimum quantities of less than one. [GitHub-5570](https://github.com/magento/magento2/issues/5570) + * Magento no longer pre-fills the **Set Product as New From Date** field when you set a special price for a product. [GitHub-4387](https://github.com/magento/magento2/issues/4387) + * When you edit a widget’s existing condition, Magento now loads the SKU grid with all available SKUs. [GitHub-6985](https://github.com/magento/magento2/issues/6985) + * Combine rule conditions now work as expected for product list widgets. [GitHub-7274](https://github.com/magento/magento2/issues/7274) + * Component Manager now handles custom Composer modules. Previously, when you tried to install a custom extension using **System > Tools > Web Setup > Component Manager**, Magento displayed the spinning widget indefinitely. [GitHub-6718](https://github.com/magento/magento2/issues/6718) + * We’ve fixed an issue with sorting products by tier price. Previously, if you enabled the Used for Sorting in Product Listing field in the Edit Tier Price Attribute page. and then selected sort by tier price on the storefront, Magento displayed an error message. [GitHub-6751](https://github.com/magento/magento2/issues/6751) + * Products returned by an API product paginated search now include `category_ids` as a member of `custom_attributes`. [GitHub-6127](https://github.com/magento/magento2/issues/6127) + * Product images in Magento installations with multiple store views are now assigned as expected to each store view. [GitHub-6259](https://github.com/magento/magento2/issues/6259) + * Magento no longer adds an empty product option to each PUT request. Previously, Magento added an empty option even when the options array was empty. [GitHub-5963](https://github.com/magento/magento2/issues/5963) ### Configurable products + * You can now successfully disable the lowest price of a [configurable product](https://glossary.magento.com/configurable-product) and its associated simple products. Previously, Magento displayed a configurable product's lowest price even after you disabled that price. + * Magento no longer applies one simple product's special price to another [simple product](https://glossary.magento.com/simple-product) of the same configurable product. Previously, when you set a regular and special price for a child product, all products associated with the same configurable product displayed a regular and special price, even when these amounts were the same. [GitHub-4442](https://github.com/magento/magento2/issues/4442), [GitHub-5097](https://github.com/magento/magento2/issues/5097), [GitHub-6645](https://github.com/magento/magento2/issues/6645) + * You can now edit a product attribute for multiple configurable products. Previously, when you tried to bulk-edit an attribute on a collection of filtered, configurable products, Magento would complete the process without incorporating your edits, and then incorrectly tell you that the products had been edited. + * Magento no longer throws an [exception](https://glossary.magento.com/exception) when you add a configurable product by [SKU](https://glossary.magento.com/sku) if an associated simple product is out-of-stock. + * Magento now correctly displays a product as out-of-stock if its child products are disabled. Previously, the [category](https://glossary.magento.com/category) page failed to list the product at all, rather than listing it as out-of-stock. + * A price change to a custom option affects only that option. Previously, changing the price of a custom option also affected the price of related products. [GitHub-4588](https://github.com/magento/magento2/issues/4588), [GitHub-5798](https://github.com/magento/magento2/issues/5798), [GitHub-6041](https://github.com/magento/magento2/issues/6041), [GitHub-6097](https://github.com/magento/magento2/issues/6097) + * The check that Magento runs to confirm a configurable product's readiness for sale is now faster. (The `isSalable` method checks that a [configurable product](https://glossary.magento.com/configurable-product) can be sold (that is, is in a salable state)). + * Query optimizations have improved the speed of configurable product price calculation. + * Magento no longer calculates configurable product special prices on the category page. Previously, Magento calculated special prices on the category page, but did not display them. + * Magento now displays configurable products as expected after creation. + * Magento no longer displays a configurable product on the storefront when its child products are deleted and the **show out-of-stock** setting is set to **No**. + * Configurable products no longer show up on category page when all children are set to **enable product = No** and **display out-of-stock products = Off**. + * Magento no longer displays the **as low as** label for a disabled price on the Category page. + * The price you set on the website scope no longer overrides any local settings you set on configurable products at the store view level. + * You can now successfully disable the lowest price of a configurable product and its associated simple products. Previously, Magento displayed a configurable product's lowest price even after you disabled the price. [GitHub-4419](https://github.com/magento/magento2/issues/4419) + * Magento now correctly displays a product as out-of-stock if its child products are disabled. Previously, the [category](https://glossary.magento.com/category) page failed to list the product at all, rather than listing it as out-of-stock. + * Magento now displays the correct drop-down option labels for configurable products when using attributes with custom source. + * Magento now shows the correct price of a configurable product based in installations that run multiple websites. + * We’ve improved the performance of Magento installations that contain configurable products with many (1600+) options. + * We’ve resolved some issues with the display of configurable products on the Magento frontend after product creation. + * Magento now displays only the set price for a configurable product, not its set price and “as low as” price. Previously, Magento showed both prices if a minimum price was not configured. + * Magento no longer removes the simple products associated with a configurable product if you click on the **Save** button more than once while saving the configurable product. Previously, if you clicked on **Save** more than once during an attempt to save a configurable product, Magento removed the simple products that were assigned to it. + * Special prices now display correctly for future discounts [GitHub-8375](https://github.com/magento/magento2/issues/8375) + * Magento no longer applies one simple product's special price to another simple product of the same configurable product. Previously, when you set a regular and special price for a child product, all products associated with the same configurable product displayed a regular and special price, even when these amounts were the same. [GitHub-4442](https://github.com/magento/magento2/issues/4442), [GitHub-5097](https://github.com/magento/magento2/issues/5097), [GitHub-6645](https://github.com/magento/magento2/issues/6645) + * Magento now shows the correct product price for products that you add to the wish list from the category page. [GitHub-6866](https://github.com/magento/magento2/issues/6866) + * Users no longer lose configurable product data when you change the interface locale to Chinese (China) or Arabic (Egypt). + * You can now successfully disable the lowest price of a configurable product and its associated simple products. Previously, Magento displayed a configurable product's lowest price even after you disabled the price. [GitHub-4419](https://github.com/magento/magento2/issues/4419) ### Email + * Magento now successfully loads the New Order Email templates. [GitHub-5101](https://github.com/magento/magento2/issues/5101) + * The **Send Welcome Email From** field now identifies the store that the customer is associated with. + * Magento no longer sends email when the **Disable email communication** setting is set to **yes**. Previously, Magento sent email even when this setting was enabled. [GitHub-5988](https://github.com/magento/magento2/issues/5988) ### Frameworks + * Static file generation is no longer affected by a race condition that affected merging CSS files. Previously, this race condition interfered with the proper generation of the product frontend. + * The ability to disable module output has been removed from Admin. If you disabled module output from Admin in a previous release, you must manually configure these settings. See [Disable module output]({{ page.baseurl }}/config-guide/config/disable-module-output.html) for details. + * Static tests run in a Windows environment no longer fail due to file path mismatches. *Fix submitted by community member barbazul in pull request [9902](https://github.com/magento/magento2/pull/9902){: target="_blank"}.* + * You can now link a simple product to a configurable one. Previously, when you tried to use REST to link a simple product to a configurable one, the products were not linked even though Magento responded, `Status Code: 200 OK`. + * Videos now play as expected on simple products as they do for configurable products. Previously, simple product videos were displayed as thumbnail images only.[GitHub-6360](https://github.com/magento/magento2/issues/6360) + * Magento now displays special characters in store names in email subject lines. Previously, special characters in the store name were converted to numerical character references in the email subject field. [GitHub-8094](https://github.com/magento/magento2/issues/8094) + * Configuration paths `persistent_identifier` & `compression_threshold` for Redis Sessions have been corrected. *Fix submitted by community member Luke Hanley in pull request [9368](https://github.com/magento/magento2/pull/9368){: target="_blank"}.* #### Admin framework + * You can no longer delete a currently logged-in user. + * Inline editing in Admin now includes ACL checks. Previously, the Quick Edit editor did not respect permissions. #### Application framework + * Magento now supports new top level domains for email addresses. [GitHub-4547](https://github.com/magento/magento2/issues/4547) + * Page titles in layout files are not translatable. *Fix submitted by community member Anton Evers in pull request [9992](https://github.com/magento/magento2/pull/9992){: target="_blank"}.* + * The `setup:static-content:deploy`, `setup:di:compile` and `deploy:mode:set` commands now return non-zero exit code if an error occurs. *Fix submitted by community member Pablo Ivulic in pull request [7780](https://github.com/magento/magento2/pull/7780){: target="_blank"}.* + * We've changed the `select` protected property to `query` in the AbstractSearchResult class. *Fix submitted by community member Alex Gusev in pull request [5043](https://github.com/magento/magento2/pull/5043){: target="_blank"}.* + * `\Magento\Framework\Interception\Code\Generator\Interceptor` now supports interceptors for generating for methods that return references. [GitHub-9167](https://github.com/magento/magento2/issues/9167) + * The Magento Framework now makes its dependency upon the `zendframework/zend-stdlib` library explicit in `composer.json`. [(GITHUB-6442)](https://github.com/magento/magento2/issues/6442){: target="_blank"} #### Configuration framework + * The currency setup in Admin no longer throws an `in_array` error when a single value is selected. *Fix submitted by community member Derik Nel in pull request [8077](https://github.com/magento/magento2/pull/8077){: target="_blank"}.* + * Magento now writes all default configuration values to the `config.php` file. #### JavaScript framework + * Customers can now place orders as expected when Magento is running a French locale in production mode. Previously, customers could not complete a transaction in a storefront running a French locale, although they could if they switched to the storefront running the English locale. + * Magento now displays server-side Ajax error messages. + * JavaScript mixins now work when you add a `urlArgs` argument to a `require_js` file. *Fix submitted by community member James Reed in pull request [9665](https://github.com/magento/magento2/pull/9665){: target="_blank"}.* #### Session framework + * The Magento storefront and Admin panel no longer share form keys. Previously, if a user were navigating both a storefront and the Admin simultaneously, he would be unexpectedly redirected to the Admin dashboard. [GitHub-6201](https://github.com/magento/magento2/issues/6201) #### Zend framework @@ -623,364 +801,479 @@ This release contains hundreds of fixes and enhancements. Thanks to our hardworking Magento Open Source community members for the following contributions! + * We’ve removed `Zend_Json` from Magento Theme and replaced it with a new serializer class. *Fix submitted by community member David Manners in pull request [9262](https://github.com/magento/magento2/pull/9262){: target="_blank"}.* + * We’ve removed `Zend_Json` from the Weee module. *Fix submitted by community member David Manners We’ve removed pull request [9261](https://github.com/magento/magento2/pull/9261){: target="_blank"}.* + * We’ve replaced the direct usage of `Zend_Json` with a call to the `Json_Help` class. *Fix submitted by community member David Manners in pull request [9344](https://github.com/magento/magento2/pull/9344){: target="_blank"}.* + * We’ve replaced `Zend_Json` in the configurable product block test. *Fix submitted by community member David Manners in pull request [9753](https://github.com/magento/magento2/pull/9753){: target="_blank"}.* + * We’ve removed `Zend_Json` from form elements. *Fix submitted by community member David Manners in pull request [9754](https://github.com/magento/magento2/pull/9754){: target="_blank"}.* + * We’ve replaced the Magento Framework's `Zend_Session` interface usage with SessionHandlerInterface. *Fix submitted by community member Timon de Groot in pull request [9285](https://github.com/magento/magento2/pull/9285){: target="_blank"}.* + * We’ve removed `Zend_Wildfire` and `Zend_Controller` from the codebase. *Fix submitted by community member Isolde in pull request [9622](https://github.com/magento/magento2/pull/9622){: target="_blank"}.* + * We've resolved issues with selecting widgets in TinyMCE. [GitHub-9655](https://github.com/magento/magento2/issues/9655), [GitHub-9518](https://github.com/magento/magento2/issues/9518) *Fixes submitted by community member Pieter Hoste in pull request [9540](https://github.com/magento/magento2/pull/9540){: target="_blank"} and community member Bernhard in pull request [9711](https://github.com/magento/magento2/pull/9711){: target="_blank"}.* + * We’ve replaced `Zend_Log` with `Psr\Log\LoggerInterface`. *Fix submitted by community member Timon de Groot in pull request [9285](https://github.com/magento/magento2/pull/9285){: target="_blank"}.* + * Magento no longer throws a `Zend_Db_Statement_Exception` when a user opens an empty Category page. *Fix submitted by community member adrian-martinez-interactiv4 in pull request [9400](https://github.com/magento/magento2/pull/9400){: target="_blank"}.* ### General fixes + * You can now save products using the multiple select attribute value. Previously, you could not save values if using this attribute. + * You can now log in successfully after creating a custom attribute. Previously, Magento would display an error message, and you could not log in, after first creating a custom attribute, then logging out. + * Magento now correctly displays customer address during account creation. Previously, when you selected a default billing address during creation of a new customer account, Magento would not display the address. + * Admin users with restricted permissions can now log in successfully as determined by those permissions. Previously, Magento displayed a fatal error when you logged in under these conditions. + * We've removed the duplicated [PHP](https://glossary.magento.com/php) settings from the sample web server configuration files. + * When creating a new page with the Add New Page feature, Magento no longer throws a JavaScript error when [Layout](https://glossary.magento.com/layout) is set to empty. + * We've removed the sample password from the Setup Wizard. + * You can now assign open-ended start and complete dates for product rules. Previously, if you left the start and end date field blanks when creating a rule, Magento would supply the start and end dates based on the save date. + * The Magento Framework now makes its dependency upon the `zendframework/zend-stdlib` library explicit in `composer.json`. [GitHub-6442](https://github.com/magento/magento2/issues/6442) + * You can now upload changes to the `robots.txt` file from the Admin panel. + * We've eliminated difficulties saving product information when logged in as Admin. Previously, the Product Save feature worked erratically for Admin users. + * Custom themes now inherit parent [XML](https://glossary.magento.com/xml) configuration information as expected. + * Information set by the **Default Billing Address** and **Default Shipping Address** checkboxes on the Customer page are now saved correctly. + * [Admin](https://glossary.magento.com/admin) users with appropriate permissions can now reset the passwords of more than one customer at a time. [GitHub-5260](https://github.com/magento/magento2/issues/5260) + * Admin interface forms now load data as expected after initializing all components. Previously, under certain conditions, the load indicator would spin indefinitely, and Magento would not load data. + * Showing reports on the **Reports > Coupons** page no longer throws an error when the user is in a non-default Admin locale. [GitHub-7037](https://github.com/magento/magento2/issues/7037) + * You can now generate static content without a database connection. [GitHub-10041](https://github.com/magento/magento2/issues/10041) + * Static content deployment now generates secure content, whether content included secure or non-secure URLs. + * The Recently Viewed Products block now appears as expected when the full page cache is enabled. [GitHub-3890](https://github.com/magento/magento2/issues/3890) + * We've resolved an issue that prevented you from adding more than one product to a [shopping cart](https://glossary.magento.com/shopping-cart) from a wishlist. [GitHub-5282](https://github.com/magento/magento2/issues/5282) + * Widgets now accept UTF-8 special characters type as input parameters. Previously, you could successfully create a widget, but UTF-8 special characters were broken. [GitHub-4232](https://github.com/magento/magento2/issues/4232) *Fix submitted by community member Pieter Hoste in pull request [9333](https://github.com/magento/magento2/pull/9333){: target="_blank"}.* + * Mass actions now work as expected on the Customer grid. Previously, Magento could not process more than 20 items at a time. + * Customers who subscribe to a newsletter are now subscribed as expected after confirming their account. Previously, Magento unsubscribed customers from the newsletter after confirming their account. + * You can now save products using the multiple select attribute value. Previously, you could not save values if using this attribute. + * You can now assign open-ended start and complete dates for product rules. Previously, if you left the start and end date field blanks when creating a rule, Magento would supply the start and end dates based on the save date. + * Magento no longer generates incorrect URLs in the site map when the **Use Secure URLs in Admin** setting is set to **Yes**. [GitHub-8644](https://github.com/magento/magento2/issues/8644) + * We’ve resolved a conflict that occurred after you changed a base URL. Previously, after you changed a `base_url` value (**Stores->Configuration > General > Web > Base URLs (Secure)**), Magento would update the base URL, then resubscribe, potentially resulting in a failure during the next update secure `base_url` call. + * Magento now displays newly registered customers in the Admin customer list as expected. + * The Customer Segment page no longer shows non-matching customers when a customer logs in and you refresh the Customer Segment page. + * You can now add a `translate` attribute to any String argument in the `di.xml` file for any class. This attribute provides an ability on the level of dependency injection configuration to specify that an argument can be translated. The actual translation of strings is handled by another Magento component. + * Magento frontend scope filters now work as expected. Previously, Magento did not reload product information correctly when you applied a filter using **Catalog > Product**. + * Only users with permission to view a store can view or process the orders placed on it. + * You can render the `tax_class_id` attribute nonsearchable. Previously, Magento displayed a 503 error under these circumstances. + * Fixed the location of the `wishlist.js` file. *Fix submitted by community member [Koen V.](https://github.com/koenner01){: target="_blank"} in pull request [8633](https://github.com/magento/magento2/pull/8633){: target="_blank"}.* + * You can no longer download products after you’ve set order state to `STATE_CANCELED`. *Fix submitted by community member nazarpadalka in pull request [8917](https://github.com/magento/magento2/pull/8917){: target="_blank"}.* + * Fixed a typo in the Pull Request Template. *Fix submitted by community member tomislavsantek in pull request [8908](https://github.com/magento/magento2/pull/8908){: target="_blank"}.* + * You now receive an error message as expected if you try to submit a product review while not logged in. *Fix submitted by community member quienti in pull request [9001](https://github.com/magento/magento2/pull/9001){: target="_blank"}.* + * Fixed grammar error in the customer dashboard. *Fix submitted by community member Petar Sambolek in pull request [9080](https://github.com/magento/magento2/pull/9080){: target="_blank"}.* + * The popup window in the Safari browser now closes properly. *Fix submitted by community member Hans Schouten in pull request [8824](https://github.com/magento/magento2/pull/8824){: target="_blank"}.* + * We've fixed minor performance issues when you use `/pub` as `docroot`. *Fix submitted by community member Joseph Maxwell in pull request [9094](https://github.com/magento/magento2/pull/9094){: target="_blank"}.* + * The Actions dropdown menu is now properly aligned in the Admin when the action column is not the last column. *Fix submitted by community member Marius Strajeru in pull request [10082](https://github.com/magento/magento2/pull/10082){: target="_blank"}.* + * Magento now deletes pending entries in `cron_schedule` when you reconfigure a cron job. *Fix submitted by community member Anton Evers in pull request [9957](https://github.com/magento/magento2/pull/9957){: target="_blank"}.* + * We’ve fixed the cron timestamp method. *Fix submitted by community member Anton Evers in pull request [9943](https://github.com/magento/magento2/pull/9943){: target="_blank"}.* + * You can now save customers with unique attributes. *Fix submitted by community member storbahn in pull request [9712](https://github.com/magento/magento2/pull/9712){: target="_blank"}.* + * The `Magento_Framework/View/Layout/etc/elements.xsd` file `blockReferenceType` definition now allows for the optional argument template. *Fix submitted by community member jissereitsma in pull request [9772](https://github.com/magento/magento2/pull/9772){: target="_blank"}.* + * Customer sessions for different customers are no longer shared on installations on multiple websites. [GitHub-4842](https://github.com/magento/magento2/issues/4842), [GitHub-6468](https://github.com/magento/magento2/issues/6468) + * Magento now handles quotation marks in product names. Previously, quotation marks in product names caused a JSON error on the Product page. [GitHub-8059](https://github.com/magento/magento2/issues/8059) + * When you add an address, new custom attributes are now displayed together, along with other address details. + * You can now edit the default store view and save it under a different name. [GitHub-7349](https://github.com/magento/magento2/issues/7349) + * `.htaccess` deny code execution now works as expected for Apache and php-fpm. [GitHub-6766](https://github.com/magento/magento2/issues/6766) + * Magento now displays the WYSIWYG editor as expected. [GitHub-6222](https://github.com/magento/magento2/issues/6222), [GitHub-4828](https://github.com/magento/magento2/issues/4828), [GitHub-6815](https://github.com/magento/magento2/issues/6815) + * The Admin’s Most Viewed Products tab now displays correct product prices. Previously, prices for products in Most Viewed Products tab were incorrectly listed as $0. [GitHub-5660](https://github.com/magento/magento2/issues/5660) + * Magento now renders images as expected in the product description area. Previously, Magento did not render images in this area, and would display a broken link. [GitHub-6138](https://github.com/magento/magento2/issues/6138) + * When you override `module-directory/etc/zip_codes.xml` from a local module, all country codes are now included as expected. Previously, only the last country code was included, which affected the custom check out process. [GitHub-6694](https://github.com/magento/magento2/issues/6694) ### Google Analytics + * We’ve added the missing single quote (‘) to the Google API Tracking code. *Fix submitted by community member Petar Sambolek in pull request [9084](https://github.com/magento/magento2/pull/9084){: target="_blank"}.* + * Google Analytics tracking now works when Cookie Restriction is enabled. *Fix submitted by community member Bernhard in pull request [9713](https://github.com/magento/magento2/pull/9713){: target="_blank"}.* ### HTML + * The CSS minify option no longer removes the whitespace around the minus (-) sign. Also, this option is now compatible with the `calc()` CSS function. *Fix submitted by community member Petar Sambolek in pull request [9027](https://github.com/magento/magento2/pull/9027){: target="_blank"}.* ### Images + * Magento no longer encounters an error when it cannot find a product image file. [GitHub-5184](https://github.com/magento/magento2/issues/5184), [GitHub-5497](https://github.com/magento/magento2/issues/5497), [GitHub-3545](https://github.com/magento/magento2/issues/3545), [GitHub-5871](https://github.com/magento/magento2/issues/5871) + * Magento now successfully saves images that you edit in a [WYSIWYG](https://glossary.magento.com/wysiwyg) editor. Previously, when you tried to change an image by right-clicking it in a WYSIWYG editor and choosing Insert/Edit Image, Magento did not save your changes. + * You can now preview uploaded images. + * You can now set an image size for product watermarks. [GitHub-5270](https://github.com/magento/magento2/issues/5270) + * Graphics now scroll as expected on mobile devices. [GitHub-5302](https://github.com/magento/magento2/issues/5302) + * Magento now successfully saves images that you edit in a [WYSIWYG](https://glossary.magento.com/wysiwyg) editor. Previously, when you tried to change an image by right-clicking it in a WYSIWYG editor and choosing Insert/Edit Image, Magento did not save your changes. + * Inserted images on the content block of Category no longer reference the Admin URL. Previously, when you used the Wysiwyg editor to insert an image into the Content block of a Category, the image URL on the frontend would reference the Admin location. When you subsequently logged out of the Admin panel, and refreshed the Category page, the image is no longer available. #### Import/Export + * You can now successfully import multiselect attributes that contain special symbols or delimiters. Previously, when you tried to import attributes containing delimiters, data validation (and the import) failed. + * You can now import negative quantities. Previously, when importing a product quantity of '-1', Magento returned an error. + * Magento now imports custom options correctly. Previously, when you tried to import a custom option, the import failed, and Magento displayed this error: `Javascript Error: Uncaught RangeError: Maximum call stack size exceeded`. [GitHub-5573](https://github.com/magento/magento2/issues/5573) + * We’ve added a new way to import images: You can now successfully import images when you set your document root to `your_Magento_install_dir/pub`. Previously, you needed to set document root to `/magento` to import images. Both ways of importing now work. [GitHub-5359](https://github.com/magento/magento2/issues/5359) + * Magento now removes category URL keys from the `url_rewrite` table as expected during import. Previously, Magento did not remove these keys, which triggered a failure during import. This subsequently caused Magento to quickly reach the maximum error count, returning this error: "Maximum error count has been reached or system error is occurred!". [GitHub-1471](https://github.com/magento/magento2/issues/1471) + * You can now export a [bundle product](https://glossary.magento.com/bundle-product) that contains a custom text area attribute. Previously, if you tried to export this type of bundle product, the export would fail, and Magento displayed the message, "There is no data for the export". + * Magento now maintains super attribute ordering of configurable products with multiple super attributes after export or import. Previously, after import or export, the ordering of super attributes was not maintained. [GitHub-6079](https://github.com/magento/magento2/issues/6079) + * Magento now correctly displays both configurable and simple products, their attribute values, and visibility values after import if SKU is an integer. [GitHub-5547](https://github.com/magento/magento2/issues/5547) + * Magento now imports customer data as expected after the data passes the pre-import validation step. Previously, although data passed this validation step, an error would occur during import, and Magento displayed this message: `Invalid data for insert`. [GitHub-4921](https://github.com/magento/magento2/issues/4921), [GitHub-9469](https://github.com/magento/magento2/issues/9469) + * The export process now populates values in the configurable variations column for configurable products as expected. Previously, when exporting more than one product, the values for the configurable variations column for configurable products were not included. + * Magento now displays imported product images in this order: first, the base image, then the additional images in the order in which they were listed in the [CSV](https://glossary.magento.com/csv) file. Previously, Magento displayed images in this unexpected order: first, an additional image, then the base image, and finally, all remaining additional images. + * Magento now runs a selective partial re-indexing operation after import if you enable **Update on Schedule**. Previously, Magento ran a full reindex no matter which index mode was set. + * We've fixed an issue with the correct representation of date and time zones of items in a product [catalog](https://glossary.magento.com/catalog) during import or export. Previously, Magento exported all dates in the default format (UTC-8), including values that you set to be displayed using another standard. + * Magento now successfully imports customer multiselect attributes. Previously, when you imported a CSV file with either the option's ID numbers or the option's values, Magento returned an error. + * Magento now displays more verbose information about duplicated information with links to action for troubleshooting the import process. Previously, Magento displayed duplicated or incomplete information on the product page after import. + * Magento now exports rows only once when product information contains HTML special characters. Previously, Magento exported rows containing product information that included HTML characters at least twice. + * We've improved the import speed of advanced pricing data. Previously, the import process for this information frequently stopped after the import of approximately 300 rows of data, and Magento displayed this message: `Please Wait`. + * The CatalogImportExport uploader now handles HTTPS images as expected. *Fix submitted by community member Clement Beudot in pull request [8278](https://github.com/magento/magento2/pull/8278){: target="_blank"}.* + * You can now successfully import multiselect attributes that contain special symbols or delimiters. Previously, when you tried to import attributes containing delimiters, data validation (and the import) failed. + * When you delete an image in Admin, Magento no longer deletes it on the server. Previously, Magento deleted it from the server as well, which caused errors for other products (example error message: `Cannot gather stats! Warning!stat(): stat failed for`). + * The exported sheet now generates or renders data for columns that indicate associations for configurable products. + * Magento no longer deletes a product after you select the Replace option while importing a product. Previously, Magento deleted the product rather than replacing it. + * Magento can now import `additional_images` that are tagged with labels that contain a comma separator. + * We've fixed an issue where product URL keys (for SKUs) were not auto-generated as expected during import. [GitHub-5188](https://github.com/magento/magento2/issues/5188) + * Magento now updates attribute sets as expected when importing products from CSV. [GitHub-5498](https://github.com/magento/magento2/issues/5498) + * The CatalogImportExport uploader can now handle HTTPS images. Previously, if the URL of a file contained HTTPS, the uploader still used the HTTP provider to retrieve the image, which lead to an error. [GitHub-8277](https://github.com/magento/magento2/issues/8277) #### Integrations + * With valid permissions, you can now regain access to your Admin account after it is temporarily disabled due to invalid credentials. Previously, you could not unlock the account of a valid Admin user if it were disabled due to multiple invalid login attempts. + * Web API tokens now have a default expiration period: 4 hours for Admin tokens and 1 hour for Customer tokens. This can be changed in the [Admin Panel configuration settings]({{ site.baseurl }}/guides/v2.2/get-started/authentication/gs-authentication-token.html#admin-and-customer-access-tokens) + * You can now edit `authentication_lock` from the Admin. *Fix submitted by community member Elias Kotlyar in pull request [9820](https://github.com/magento/magento2/pull/9820){: target="_blank"}.* ### Indexing + * We've improved the performance of the algorithm that Magento uses to calculate batch sizes while indexing categories. + * The category/product indexer now successfully completes a full reindexing of all indexes on large profiles with 500,000 or more products. Previously, Magento successfully generated a large profile, but failed to complete the reindexing of the categories or products, and displayed the following error: "Error 1114: Table is full". + * `IndexerHandlerFactory` no longer tries to cast the `$indexer` object to a String if an error occurs. Since `$indexer` is an object of type `IndexerInterface` and does not have a `__toString()` method, attempting to cast the `$indexer` object to a String previously resulted in an error. [GitHub-5155](https://github.com/magento/magento2/issues/5155) + * The Magento flat indexer now collects correct product data for `ROW_ID`. + * The Magento flat indexer no longer throws an error after flat tables are enabled and reindexed. This fix applies to both product and [catalog](https://glossary.magento.com/catalog) tables. + * Magento now runs a selective partial re-indexing operation after import if you enable **Update on Schedule**. Previously, Magento ran a full reindex no matter which index mode was set. + * `IndexerHandlerFactory` no longer tries to cast the `$indexer` object to a String if an error occurs. Since `$indexer` is an object of type `IndexerInterface` and does not have a `__toString()` method, attempting to cast the `$indexer` object to a String previously resulted in an error. [GitHub-5155](https://github.com/magento/magento2/issues/5155) + * The category/product indexer now successfully completes a full reindexing of all indexes on large profiles with 500,000 or more products. Previously, Magento successfully generated a large profile, but failed to complete the reindexing of the categories or products, and displayed the following error: "Error 1114: Table is full". + * We’ve resolved failures with indexing in installations that implemented catalogs containing at least 5,000 - 6,000 SKUs. + * We've improved the performance of the algorithm that Magento uses to calculate batch sizes while indexing categories. + * Reindexing no longer results in an SQL error that prevents bundle products from being reindexed, and results in wrong product prices. ### Orders + * We’ve added PHP interfaces that add the ability to change the status of a [shipment](https://glossary.magento.com/shipment). The new Creditmemo interface supports tasks you can already do through the Magento Admin, including the ability to: * support returning multiple units of a configurable product. Previously, when you tried to refund an order, you could refund only one unit of a configurable product, not the amount in the original order. @@ -990,117 +1283,153 @@ Thanks to our hardworking Magento Open Source community members for the followin * change order status after a credit memo has been created. + * You can now set the customer group when creating a new order from the Admin interface. [GitHub-6162](https://github.com/magento/magento2/issues/6162) + * You can now print invoices and credit memos from the Order page. + * You can now successfully place orders when the Enable and Configure [Website](https://glossary.magento.com/website) Payments Standard Payment Action attribute is set to Sale. Previously, under these conditions, Magento would display an error message and not allow you to complete the purchase. [GitHub-4785](https://github.com/magento/magento2/issues/4785) + * Attributes of the `salesInvoiceRepository` methods are now more appropriately type cast. (The data type is now a nullable float.) Previously, due to the use of an incorrect data type, Magento would produce an error when calling the `salesInvoiceRepositoryV1GetList` method. [GitHub-3605](https://github.com/magento/magento2/issues/3605) + * The order comments history no longer duplicates the time that a comment was made. Previously, the time that a comment was made was listed twice. + * Magento now uses the address template from store view level of the placed order (similar to how order confirmation email works). Previously, Magento used the wrong address template for order e-mails. + * Magento now correctly identifies an order being processed when it is placed in a store configured for multiple currencies. Previously, these orders always were identified as potentially fraudulent. + * The order comments history no longer duplicates the time that a comment was made. Previously, the time that a comment was made was listed twice. + * The **Print Shipping Label** link now displays on the product frontend. Previously, the layout for the Shipping and Tracking block did not work properly. + * You can now create an order through Admin if there is a `translate csv` for order-header. *Fix submitted by community member Pascal Brouwers in pull request [6856](https://github.com/magento/magento2/pull/6856){: target="_blank"}.* + * You can now use a second credit memo to successfully issue a full refund for a credit memo with adjustment fees. *Fix submitted by community member Max Pronko in pull request [9715](https://github.com/magento/magento2/pull/9715){: target="_blank"}.* + * Coupon codes are now included in invoice print outs. *Fix submitted by community member Belgacem Naoui in pull request [9780](https://github.com/magento/magento2/pull/9780){: target="_blank"}.* + * The Orders grid now displays correct order dates. *Fix submitted by community member Anton Evers in pull request [9941](https://github.com/magento/magento2/pull/9941){: target="_blank"}.* + * Magento now displays the correct order time in the Sales Order grid in the Admin panel. [GitHub-9426](https://github.com/magento/magento2/issues/9426) + * We’ve increased the size of the `sales_order_payment.cc_number_enc` field. [GitHub-7334](https://github.com/magento/magento2/issues/7334) + * We’ve fixed an issue with an undefined offset in the `order\config.php` file. [GitHub-6111](https://github.com/magento/magento2/issues/6111) + * The Create Order page now works as expected after you select **Update items and quantities**. + * Magento no longer creates unnecessary loaders during checkout with an order that contains virtual products. + * New orders no longer stay in the processing state after you click the Place Order button. Previously, new orders stayed in the processing state even after you clicked Place Order. [GitHub-5860](https://github.com/magento/magento2/issues/5860) + * Magento now creates the shipping address as expected when you use REST to create an order. Previously, when you used REST to create an order, then subsequently viewed the order from the Admin, Magento threw an error. + * Magento now displays all tax details as expected on the Admin order page. Previously, Magento did not save the order tax rate information, and the full tax summary was incomplete. + * You can now use either the parent order item ID or child product order item ID when using the REST API (`/V1/order/:orderId/invoice : POST method API`) to create an invoice for an order containing bundle products. [GitHub-6988](https://github.com/magento/magento2/issues/6988) ### Payment methods + * We’ve added support for the change to the USPS API that USPS implemented on September 1, 2017. After installing or upgrading to this release, Magento will display the Domestic rate for USPS, First-Class Mail Parcel as expected. Previously, the USPS First-Class Mail Parcel option was not available after September 1, 2017 on installations running Magento 2.x. + * You can now successfully complete Paypal checkout with products that have custom options. [GitHub-5938](https://github.com/magento/magento2/issues/5938) + * Third-party payment gateways are now visible from the Admin. [GitHub-7891](https://github.com/magento/magento2/issues/7891) + * Magento no longer displays the **No [Payment method](https://glossary.magento.com/payment-method) available** message when a customer tries to ship items to a billing-restricted country. + * Magento no longer displays the **No [Payment method](https://glossary.magento.com/payment-method) available** message when a customer tries to ship items to a billing-restricted country. + * Magento now successfully completes checkout when a custom address attribute is added. Previously, an error occurred during checkout when the user added a required custom address attribute. + * Removed a duplicate method call to the `getLinkField` method in the `Magento\Catalog\Model\ResourceModel\Category` class. *Fixed by will-b in pull request [9057](https://github.com/magento/magento2/pull/9057){: target="_blank"}.* + * During order creation, you can now continue with a payment after clicking the **Back** button to the payment selection window. [GitHub-4580](https://github.com/magento/magento2/issues/4580) + * The expiration year validator now works as expected. [GitHub-8482](https://github.com/magento/magento2/issues/8482) * We've introduced the `Magento\Vault\Block\TokenRendererInterface::getToken` method. This method provides details about payment tokens to renderer components, such as public hash and available card or account details. Third-party developers can use this method to implement this functionality in their payment integrations. + * We’ve fixed an issue with the REST API that previously resulted in the PayPal gateway rejecting requests. [GitHub-10410](https://github.com/magento/magento2/issues/10410) + * Error messages associated with the `Authorize.net` payment method are now translated to fit the configured locale. [GitHub-5934](https://github.com/magento/magento2/issues/5934) + * We’ve increased the size of the `shipping_method` column in the `sales_order` and `quote_address` tables. [GitHub-6475](https://github.com/magento/magento2/issues/6475) #### Braintree + * You can now place orders from the Admin using the Braintree payment method. + * We've enhanced our PayPal and Braintree implementations so that merchants can now: * Save customer PayPal account information in the Braintree Vault when using Braintree as a service. This enhancement provides a secure method for charging my customers without prompting them to enter a payment information for multiple purchases or for purchases from multiple devices. We've also added support for Maestro and Discover BINs added to the credit card form both for Braintree and PayPal solutions. @@ -1108,91 +1437,117 @@ Thanks to our hardworking Magento Open Source community members for the followin * Configure dynamic descriptors (Company Name, Phone and URL) for Braintree. This enhancement supports customers easily identifying a source of transactions in their bank statements. (This will potential simplify the resolution of disputed transactions by supporting the display of the Kount status for Braintree in the Admin interface.) + * Kount and 3D Secure now work as expected for Braintree Vault. + * Magento now updates you as expected on order comments and order history after you initiate a refund using Braintree. Previously, when you clicked the **Refund** button (to initiate a refund), Magento did not redirect you to order comments and history information. + * You can now use Braintree as a payment method when applying reward points or store credit to an order. + * The Braintree payment method now works as expected with Vault table prefixing. + * Magento no longer encounters an error when using the Braintree Vault payment GET order API call. [GitHub-6215](https://github.com/magento/magento2/issues/6215) + * You can now use JCB and Diners Club credit cards with the Authorize.net payment method. + * Fixed issue with credit card capture information failing to remain associated with its first authorization. [GitHub-6716](https://github.com/magento/magento2/issues/6716) + * You can now successfully place orders with Braintree when using an alternative [merchant account](https://glossary.magento.com/merchant-account) ID. (The merchant account does not need to match the 3D Secure authorization merchant account.) [GitHub-5910](https://github.com/magento/magento2/issues/5910) -* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: -`Uncaught Error: [paypal-container] is not a valid DOM Element`. + +* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: `Uncaught Error: [paypal-container] is not a valid DOM Element`. + * The Braintree payment method now works as expected with Vault table prefixing. + * Merchants can now accept payment on a Suspected Fraud order without Magento altering the amount in Total Paid. Previously, when a merchant accepted payment for an order with a status of Suspected Fraud, Magento doubled the payment amount. -* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: -`Uncaught Error: [paypal-container] is not a valid DOM Element`. + +* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: `Uncaught Error: [paypal-container] is not a valid DOM Element`. + * The Braintree PayPal locale now has its own setting. [GitHub-9639](https://github.com/magento/magento2/issues/9639) + * You can now modify the product quantities of a previous order and re-order it using the saved credit card information from the first order. #### PayPal + * We've improved and streamlined the [Magento Admin](https://glossary.magento.com/magento-admin) PayPal configuration interface. + * PayPal Payflow Pro now uses the currency you've specified in your store settings. Previously, Magento converted the total price into U.S. dollars, no matter which currency was specified in the store settings. + * We've fixed an issue with using PayPal Express Checkout to order products with custom options. Previously, although an Admin user could create and configure “File type” custom options, customers could not upload and store files within the order [quote](https://glossary.magento.com/quote). [GitHub-5434](https://github.com/magento/magento2/issues/5434) + * Fixed issue related to incorrect stock quantity calculation for bundle and configurable products during place order flow with PayPal Express Checkout. + * Third-party payment gateways are now visible from the Admin. [GitHub-7891](https://github.com/magento/magento2/issues/7891) + * Fixed issue with credit card capture information failing to remain associated with its first authorization. [GitHub-6716](https://github.com/magento/magento2/issues/6716) + * PayPal Express payments no longer fail when there is adequate product inventory to cover your order. Previously, you'd receive this error message: `We can't place the order`. [GitHub-6296](https://github.com/magento/magento2/issues/6296) + * Paypal errors no longer occur when Fixed Product Tax (FPT) is enabled. Previously, when a product had a FPT, Paypal Express reported an error when you tried to place the order. + * PayPal Payflow Pro now uses the currency you've specified in your store settings. Previously, Magento converted the total price into U.S. dollars, no matter which currency was specified in the store settings. + * When refunding an order from PayPal, Magento now creates a credit memo with the correct status. + * The exported sheet now generates or renders data for columns that indicate associations for configurable products. + * We’ve resolved a loader issue with Payflow Pro. The loader image is now invisible after redirecting to the payment page/success page or error page. [GitHub-7159](https://github.com/magento/magento2/issues/7159), [GitHub-9296](https://github.com/magento/magento2/issues/9296) + * PayPal Express checkout no longer discards address line 2 for billing and shipping addresses. [GitHub-8313](https://github.com/magento/magento2/issues/8313) + * The checkout page no longer freezes when you try to use PayPal to pay for a purchase that contains a downloadable product. Previously, a `PayPal.js` error occurred. [GitHub-7000](https://github.com/magento/magento2/issues/7000) ### Performance @@ -1200,244 +1555,315 @@ Thanks to our hardworking Magento Open Source community members for the followin This release includes substantial improvements to Magento caching, image processing, and re-indexing, among other enhancements. + * We've improved the speed of static asset deployment and now support a variety of asset deployment strategies that can be used to optimize speed and size of assets deployed. Indexers can now be run with 256M of PHP RAM and default MySQL configuration settings. Developers can further tune memory usage to improve indexer performance (in some cases up to 100% improvement). Please see [Magento Optimization Guide]({{ page.baseurl }}/config-guide/prod/prod_perf-optimize.html) for further details. + * We've improved [storefront](https://glossary.magento.com/storefront) performance when creating 2500 or more product variants. + * Opening many products from the Admin interface is now faster. + * Creating many (2500 - 5000) product variants, both simple and complex [product types](https://glossary.magento.com/product-types) is more efficient. + * You can now quickly generate or preview multiple variations of a [configurable product](https://glossary.magento.com/configurable-product). (Saving these variations to the database can be time-consuming, if you have several thousand product options, and our efforts to improve performance continue.) Previously, Magento threw an Invalid Form key error is thrown while you tried to save a configurable product with variations. + * Magento no longer performs unnecessary file check operations (for example, `file_exists`, `is_file`), which improves the performance of the category and product pages. + * We've optimized compiler performance (that is, the [`setup:di:compile`]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-compiler.html) command). + * We’ve improved the performance of the Display Time for Category Edit page for catalogs with many products or categories. [GitHub-7469](https://github.com/magento/magento2/issues/7469) #### Image processing + * We've improved the process of resizing images on the [frontend](https://glossary.magento.com/frontend). + * The process of loading many configurable products with multiple images (for example, configurable products with three attributes and 250 options) is more efficient. [(GITHUB-6979)](https://github.com/magento/magento2/issues/6979){: target="_blank"} #### Caching + * Magento now caches image metadata, which avoids the time-consuming need to read images for [metadata](https://glossary.magento.com/metadata) loading. + * Magento now caches attribute options for the layered navigation feature. This reduces the number of queries to the database, and consequently improves performance. + * We’ve optimized and streamlined how we cache EAV attributes by removing unnecessary SQL queries. ### PHP + * PHPCS can now correctly parse the syntax of PHP 7.x return types. + * Cart Price rules are now applied as expected to [payment method](https://glossary.magento.com/payment-method) conditions. Previously, discounts set in Cart Price rules were not applied during [checkout](https://glossary.magento.com/checkout). ### Sample data + * Magento now handles the `catalog_product_entity_media_gallery_value.position` value the same whether you’ve installed or upgraded the product. Previously, these values differed depending upon whether you upgraded or freshly installed your Magento code. + * You can now successfully install Magento with sample data when **auto_increment_increment** is set to **3** in the `options` file. Previously, installation completed successfully, but Magento displayed this error: `Something went wrong while installing sample data. Please check var/log/system.log for details. You can retry installing the data now or just start using Magento.` ### SalesRule + * You can now select and add a category to a Cart Price rule. Previously, Magento displayed this error: "Uncaught ReferenceError: sales_rule_form is not defined", and did not add the selected category to the condition. [GitHub-5526](https://github.com/magento/magento2/issues/5526) + * A cart rule with a coupon code no longer overrides a cart rule without a coupon code when multiple [cart rules](https://glossary.magento.com/cart-rules) are applied. Previously, when you created two cart rules and applied them to a cart, the rule with a coupon was applied, but the second rule was not. [GitHub-6294](https://github.com/magento/magento2/issues/6294) + * The SalesRule table is the same whether you’ve freshly installed or updated Magento 2.2. + * Magento no longer discounts items that belong to an excluded category. Previously, you were unable to exclude products assigned to a specific category due to the cart price rule. + * The Cart Price rule now affects coupon life as expected. Previously, coupons did not persist longer than the current date if they did not have a designated end-date. + * Customers can no longer apply a coupon code twice. Previously, the "Uses per Coupon" limit did not work for auto-generated coupons. + * Magento now implements free shipping if there is a Cart Price Rule match. [GitHub-6584](https://github.com/magento/magento2/issues/6584) + * SalesRule now applies to auto-generated coupon codes as expected. + * You can now create a cart price rule without any date range restrictions. Previously, if you left the **From** and **To** dates empty, Magento filled them in with the current date. [GitHub-6762](https://github.com/magento/magento2/issues/6762), [GitHub-6122](https://github.com/magento/magento2/issues/6122) + * When you change the currency associated with store, Magento also adjusts the currency in all product listings. [GitHub-6746](https://github.com/magento/magento2/issues/6746) + * Non-administrative users with access rights to Products, Marketing, Promotions, and Cart Price rules can now search for categories in Cart Price rules. GitHub-6168](https://github.com/magento/magento2/issues/6168) ### Scope + * Changing a product price under the website scope now updates the product price across all stores. Previously, any price you set on the [store view](https://glossary.magento.com/store-view) level overrode the price set in website scope. [GitHub-5133](https://github.com/magento/magento2/issues/5133) + * The list of allowed countries is now configured as part of website scope, not store view scope. [GitHub-2946](https://github.com/magento/magento2/issues/2946) + * A restricted user can now change storeview- or website- level attributes that are defined within his scope. + * You can now select the scope for an action that you are running from the Catalog page's product table. + * The price you set on the website scope no longer overrides any local settings you set on configurable products at the store view level. + * The Product page scope selector now displays all related websites associated with a restricted user. ### Search + * Out-of-stock items no longer erroneously appear in results of layered navigation if that product option is out-of-stock. + * Segmentation faults no longer occur when doing a `catalogsearch_fulltext` re-index, and indexing succeeds. Previously, in a large database (more than 70,000 products), the `catalogsearch_fulltext` (MySQL) re-index failed with a `Segmentation fault` message. [GitHub-7963](https://github.com/magento/magento2/issues/7963) + * Magento now factors in the Weight attribute as expected when you use advanced search on grouped products. + * Attribute weighting now works correctly for the MySQL adapter. [GitHub-9020](https://github.com/magento/magento2/issues/9020) ### Shipping + * UPS now generates shipping rates for Puerto Rico postal codes. + * Magento now displays tracking information when selected for the second shipping label created for the DHL shipping method. Previously, when you tried to display a completed DHL shipping label, Magento displayed an exception. + * Refreshing your browser page while on the Review and Payments page of the checkout process no longer clears information from form fields. Previously, Magento cleared information from the **Ship to** field if you refreshed your browser page during this process. + * You can now reload a page during [checkout](https://glossary.magento.com/checkout) without unintentionally changing shipping information. + * You can now save the settings you enter when creating a shipping label on an existing shipment. Previously, clicking the **Save** button resulted in an error, and the shipping label was not saved. + * Added missing translation to label `argument xml`. *Fix submitted by community member Mr Khoa in pull request [9095](https://github.com/magento/magento2/pull/9095){: target="_blank"}.* + * Magento no longer throws a fatal error when you create a new shipment for a placed order. + * The State/Province field now changes to an input field as expected after you select United Kingdom when filling out the shipping address during checkout + * The Free Shipping rule now works as expected with table rate shipping. [GitHub-6346](https://github.com/magento/magento2/issues/6346) + * Magento now passes the correct object to the `\Magento\Shipping\Model\Shipping::collectRatesByAddress` method. [GitHub-7309](https://github.com/magento/magento2/issues/7309) + * Magento now displays the checkout page or cart as expected when you try to edit a virtual item from the multi shipping page. Previously, Magento displayed a 404 error page instead of redirecting to the checkout page or shopping cart. [GitHub-7257](https://github.com/magento/magento2/issues/7257) + * We've resolved an issue where Magento did not display applicable flat-rate USPS box methods during checkout. [GitHub-6798](https://github.com/magento/magento2/issues/6798) ### Sitemap + * Sitemap image URLs now match the URLs on product pages. *Fix submitted by community member Petar Sambolek in pull request [9082](https://github.com/magento/magento2/pull/9082){: target="_blank"}.* + * The sitemap is no longer generated in the wrong folder when `vhost` is connected to `/pub`. *Fix submitted by community member Joseph Maxwell in pull request [9094](https://github.com/magento/magento2/pull/9094){: target="_blank"}.* + * Magento now displays UPS rates on the initial load of the checkout page. Previously, although shipping rates showed up properly at the cart level, the payment page did not load the correct shipping options. [GitHub-6564](https://github.com/magento/magento2/issues/6564) ### Static file processing + * We've corrected a problem with `_requirejs` asset retrieval via `static.php` in [static content](https://glossary.magento.com/static-content) versioning. + * Versioning of [static files](https://glossary.magento.com/static-files) (including CSS, JS, font, and image files) is now enabled by default. + * We've improved the speed of static asset deployment. See [Deploy static view files]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-static-view.html){: target="_blank"} for more information about available options. + * The `setup:static-content:deploy` command now provides flags that you can use to exclude or include individual themes, areas, and locales. For more information, see [GitHub-4294](https://github.com/magento/magento2/issues/4294). ### Swatches + * Magento no longer creates redundant objects when initializing a configurable product on the Category page. + * You can now disable swatches for both the [Catalog](https://glossary.magento.com/catalog) page and search results (quick or advanced). To disable swatches from these requests, disable **Stores > Settings > Configuration > Catalog > Storefront > Show Swatches in Product List**. + * We've optimized the logic that Magento uses to validate swatch attributes. + * Magento now caches swatch data in the block cache, which improves the responsiveness of the configurable product pages. + * Magento now correctly matches images to products. Previously, after you selected a configurable product, Magento displayed the images for another product. + * Magento no longer displays a notice error when you create a text swatch attribute while the **update product preview image** setting is set to **Yes**. *Fix submitted by community member Pascal Brouwers in pull request [6707](https://github.com/magento/magento2/pull/6707){: target="_blank"}.* ### TargetRule + * Magento now displays Up-sells on the Product page. + * We’ve fixed an SQL error that previously caused a logical error during the creation of a TargetRule. (This issue affected the `modifyConditionByCategoryIdsAttribute` function.) ### Tax + * Magento now correctly calculates tax and order totals when a discount is used for prices that include tax and catalog prices excluding tax. Please note this is not a valid tax configuration and can introduce rounding errors. + * We’ve improved the performance of the Tax Rules form in installations containing many tax rates. + * You can now create a tax rule when running Magento in Mozilla Firefox and Internet Explorer. Previously, you could not select a tax rate, and Magento displayed an error. + * The `tax_region_id` value is no longer hard-coded in the `\Magento\Tax\Setup\InstallData` file. ### Testing + * We've fixed a fatal issue that occurred if you executed the CatalogImportExport test before running a subsequent test. Previously, you'd receive this error: ```Failed asserting that false is true```. + * We've fixed a fatal issue that occurred if you ran Travis builds on `imagettfbbox 2.1.2`. Previously, you'd receive this error: ```terminal @@ -1445,108 +1871,139 @@ This release includes substantial improvements to Magento caching, image process ``` + * `StdoTest` is now marked as skipped. *Fix submitted by community member David Manners in pull request [8487](https://github.com/magento/magento2/pull/8487){: target="_blank"}.* ### Tier pricing + * Magento now correctly calculates the tier price percentage when displayed prices include tax. [GitHub-8833](https://github.com/magento/magento2/issues/8833) + * Magento no longer resets the tier price during [quote](https://glossary.magento.com/quote) recalculation. Previously, when you triggered an automatic quote recalculation (by changing the shipping address, for example), the tier price was lost. (This issue occurred only if the product record in the database had values for `row_id` and `entity_id` that didn't match.) + * Magento no longer adds a thousands separator ( , ) to representations of quantities that exceed 1000. [GitHub-5745](https://github.com/magento/magento2/issues/5745) + * Tier pricing now works correctly with full page cache. [GitHub-5364](https://github.com/magento/magento2/issues/5364) ### Translation and locales + * String localizations now work as expected when phrases include text wrapped with single quotation marks. + * Translations now work for layered navigation attribute options. *Fix submitted by community member Pieter Hoste in pull request [9873](https://github.com/magento/magento2/pull/9873){: target="_blank"}.* ### URL rewrites + * You can now successfully create a product and assign it to a store without encountering the following error: `Unique constraint violation found`. [GitHub-6671](https://github.com/magento/magento2/issues/6671) + * The `catalog_url_rewrite_product_category` table is the same whether you’ve freshly installed or updated Magento 2.2. + * The **Use default URL Key** setting now works on the store-view level. + * We've fixed several issues with how Magento processes URLs with trailing slashes. *Fix submitted by community member Ihor Sviziev in pull request [10043](https://github.com/magento/magento2/pull/10043){: target="_blank"}.* + * Admin users can no longer create an empty URL key for a category. Previously, Magento let Admin users create an empty URL key, which lead to category-related errors. + * URL rewrites are now correctly generated for multiple store views during product import. [GitHub-8396](https://github.com/magento/magento2/issues/8396) + * Magento now rewrites URLs as expected when you save a product while running Magento in single-store mode. [GitHub-5929](https://github.com/magento/magento2/issues/5929) + * Magento now rewrites URLs as expected when you save a CMS page while running Magento in single-store mode. [GitHub-5923](https://github.com/magento/magento2/issues/5923) ### Varnish + * We've changed the behavior of the Varnish X-header. Only the parent (meta) SKU is now included in the list -- not the SKUs of all child products. [GitHub-6401](https://github.com/magento/magento2/issues/6401) + * Varnish no longer caches Cookie Restriction Mode Overlay. *Fix submitted by community member *Fix submitted by community member Bernhard in pull request 9711.* * Varnish now supports `grace` and `saint` mode to ensure that customers always see cached pages. + * Viewing the page with HTTPS instead of HTTP no longer causes the Category menu to disappear in installations using Varnish cache. [GitHub-4540](https://github.com/magento/magento2/issues/4540) ### Web API + * You can now use REST to add video to a product description. [GitHub-7153](https://github.com/magento/magento2/issues/7153) + * The `PUT /V1/products/:sku/media/:entryId` correctly updates a product's media gallery and image role. + * A null value may now be specified to unset the `special_price` attribute. + * The Swagger documentation erroneously indicated that search queries can return detailed information about multiple objects. The description of these APIs now state which API to use to return detailed information about a single object. + * You can now use REST to successfully update customer information without unintentionally deleting default billing and shipping address information. + * You can now use a REST request to retrieve a shopping cart that contained a product with custom options. Previously, you could not use a REST request to retrieve a shopping cart that contained a product with custom options. + * The `PUT /V1/products/:sku/media/:entryId` correctly updates a product's media gallery and image role. + * Searching for products via REST API using a store code in the URL returns products from all stores. [GitHub-8121](https://github.com/magento/magento2/issues/8121) + * You can now use the REST API to create a configurable product with a linked child product. [(GITHUB-5243)](https://github.com/magento/magento2/issues/5243){: target="_blank"} + * The REST API now successfully handles attribute options that start with a number. [GitHub-5715](https://github.com/magento/magento2/issues/5715) + * You can now save a billing address using the REST ’useForShipping' parameter. Previously use of the parameter resulted in a Rest API V1 error. [GitHub-6557](https://github.com/magento/magento2/issues/6557), [GitHub-5180](https://github.com/magento/magento2/issues/5180) + * We’ve resolved issues updating `default_frontend_label` using REST. [GitHub-5963](https://github.com/magento/magento2/issues/5963) + * Magento now sends REST multiselect attribute values in compatible formats. Previously, putting an unchanged GET returned errors on the multiselect attribute, and the only way to clear a multi-select field of all selections was to delete the product and re-create it. [GitHub-6120](https://github.com/magento/magento2/issues/6120) ## Community contributions diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.0EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.0EE.md index a1ce291062e..381a638701e 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.0EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.0EE.md @@ -97,119 +97,157 @@ This release contains hundreds of fixes and enhancements. ### Installation, upgrade, deployment + * You can now run `magento setup:upgrade --keep-generated` in production mode. Previously, Magento would throw an error when you ran `setup:upgrade` after compiling dependency injection. (This significantly curtailed your ability to deploy continuous integration.) [GitHub-4795](https://github.com/magento/magento2/issues/4795) + * You can now upgrade your Magento installation when using multiple master databases for checkout, order management, and product data. + * We fixed an issue that blocked using the web installer to successfully set up Magento. Previously, if you tried to install Magento with the web installer, Magento would indicate that the readiness check failed, and installation would not complete. + * You can now deploy build processes on a different staging machine than the one you're running your production environment on. + * Magento 2.0.x and 2.1.x now support the use of table prefixing during installation. Previously, when you used table prefixing, your Magento installation failed with this error: "Duplicate key on write or update". [GitHub-5688](https://github.com/magento/magento2/issues/5688) + * Third-party command line tools no longer fail when you run `setup:di:compile`. + * Magento now correctly applies [website](https://glossary.magento.com/website) configuration parameters to the corresponding [store view](https://glossary.magento.com/store-view). [GitHub-7943](https://github.com/magento/magento2/issues/7943) + * Fixed HTML inline style used when sending emails when implementing the upgraded `emorgifier` library. [GitHub-8241](https://github.com/magento/magento2/issues/8241) + * We’ve changed how Magento displays status updates during a product upgrade. Previously, potentially vulnerable information such as full paths and module names were displayed in the product GUI, potentially exposing this information to a malicious user. Magento now restricts this potentially vulnerable information to logs that are available to administrators only. + * The `cron:install` command now works as expected in Magento 2.2.0. Previously, the configuration for `crontab` commands contained double quotes that were not escaped, which caused invalid commands to be written to the `crontab` file. [GitHub-10040](https://github.com/magento/magento2/issues/10040) + * Magento now moves the `sequence_*` table to the correct database after implementing a split database. + * Magento no longer throws an exception when the configuration checksum is absent on a new installation. + * It is now possible to configure Redis settings for session storage, default cache, and full page cache from the command line. + * Custom themes now inherit parent [XML](https://glossary.magento.com/xml) configuration information as expected. + * We've removed the sample password from the Setup Wizard + * You can now enable JavaScript minification without error. Previously, after enabling JS minification, the Magento Admin displayed 404 errors when accessing JavaScript elements. + * Magento no longer displays console errors after CSS merging and minification is enabled. Previously, when CSS merging and minification was enabled, the storefront was not displayed as expected, and the `styles-l.min.css` and `print.min.css` files could not be found. + * You can now successfully use the `config:set` command to set allowed or default currencies. + * Nginx now redirects to the setup page when using port 81. + * We've added the `dev:template-hints:enable` and `dev:template-hints:disable` commands to manage template hints. *Fix submitted by community member Miguel Balparda in pull request [9778](https://github.com/magento/magento2/pull/9778){: target="_blank"}.* + * We've added the `dev:query-log:enable` and `dev:query-log:disable` to manage database query logging. *Fix submitted by community member Federico Rivollier in pull request [9264](https://github.com/magento/magento2/pull/9264){: target="_blank"}.* + * We've added the `varnish:vcl:generate` command to create the Varnish VCL file. *Fix submitted by community member Piotr Kwiecinski in pull request [9286](https://github.com/magento/magento2/pull/9286){: target="_blank"}.* + * Magento now adds a new record to the quote table and adds the current date and time to the `created_at` field. Previously, this field was not updated. + * The installation script no longer creates files in the root directory for missing modules when you install a community-created language pack. Translation packs created by the community often include translations for Magento Commerce modules. When you install these translation packs on an Open Source installation, the Commerce modules are missing. Previously, the installation script creates a file in the root directory for these Commerce modules instead of skipping them. [GitHub-6260](https://github.com/magento/magento2/issues/6260) + * We've fixed issues with upgrading installations with split databases. + * Static content deployment (SCD) now works when multiple languages are specified. Previously, Magento displayed an error if you tried to deploy static content in more than one language (for example, `bin/magento setup:static-content:deploy en_CA fr_CA de_DE`). + * The import URL directive now contains base URL and locale placeholders instead of the real URL. + * Magento now works as expected on an Apache `php-fpm` environment. + * The `DOCUMENT_ROOT` directory is now writable. Previously, installation failed because this directory was not writable. + * When upgrading Magento from 2.1.x to 2.2, the `quote_address.free_shipping` column is the same whether you upgraded from a previous installation of Magento or performed a fresh installation. Previously, different upgrade/installation options affected the contents of this column. + * Command-line users now have read and write permissions to the `var/generation` directory. [GitHub-7933](https://github.com/magento/magento2/issues/7933) + * The Magento command-line interface now sets the correct exit codes when an upgrade task fails. [GitHub-7576](https://github.com/magento/magento2/issues/7576) + * You can now disable the Review module without incurring an error in the Product Edit page. Previously, if you tried to edit a product after disabling the review module, Magento displayed this error: "Something went wrong". [GitHub-6704](https://github.com/magento/magento2/issues/6704) + * You can now use Component Manager to enable a previously disabled module. Previously, when you ran `bin/magento module:disable Magento_AnyModule`, then tried to re-enable that module, Magento fails to enable it and any previously enabled cache types, and module installation fails. [GitHub-6078](https://github.com/magento/magento2/issues/6078) + * We’ve fixed problems with the uninstall process. Previously, when Magento tries to uninstall a module using composer, it simultaneously tried to update the `symfony/process` version. However, because the `module:uninstall`  command uses  `symfony/process`, the command stopped running. [GitHub-5797](https://github.com/magento/magento2/issues/5797) + * We’ve fixed problems with the uninstall process. Previously, when Magento tries to uninstall a module using composer, it simultaneously tried to update the `symfony/process` version. However, because the `module:uninstall`  command uses  `symfony/process`, the command stopped running. [GitHub-5797](https://github.com/magento/magento2/issues/5797) ### AMQP + * The `magento queue:consumers:start` command now works correctly when you provide the `max-messages` argument. + * Magento no longer indicates errors when you install without AMQP. Previously, Magento displayed the following error: ```text @@ -217,484 +255,636 @@ This release contains hundreds of fixes and enhancements. ``` + * You can now override queue publishers configuration through the `env.php` file. + * Magento now re-processes queue messages if the consumer process is terminated. + * Magento no longer inserts HTTPSS:// for HTTPS in a store address when you install Magento using an HTTPS address over SSL. [GitHub-6262](https://github.com/magento/magento2/issues/6262) ### Cart and checkout + * Magento now implements the minicart maximum display recently added item setting to your [shopping cart](https://glossary.magento.com/shopping-cart). Previously, Magento displayed all the items in the shopping cart, even when the number of items exceeded this limit. [GitHub-4750](https://github.com/magento/magento2/issues/4750) + * You can now reload a page during [checkout](https://glossary.magento.com/checkout) without unintentionally changing shipping information. + * Custom address attributes now appear in the Checkout summary. + * Lengthy [Order Status](https://glossary.magento.com/order-status) tables are now paginated as expected. + * Magento now displays the product add validation message ("Product was added to the cart") only after you have successfully added a product to your cart. + * We've resolved an issue that prevented you from adding more than one product to a [shopping cart](https://glossary.magento.com/shopping-cart) from a wishlist. [GitHub-5282](https://github.com/magento/magento2/issues/5282) + * The number of items in the minicart is now updated correctly when you run Magento in mixed HTTP/HTTPS mode. [GitHub-6487](https://github.com/magento/magento2/issues/6487) + * The minicart now performs as expected in deployments that span multiple websites. Previously, in a Magento installation that had multiple websites, products that you added to one [website](https://glossary.magento.com/website) appeared in the other websites' minicarts. + * A cart rule with a coupon code no longer overrides a cart rule without a coupon code when multiple [cart rules](https://glossary.magento.com/cart-rules) are applied. Previously, when you created two cart rules and applied them to a cart, the rule with a coupon was applied, but the second rule was not. [GitHub-6294](https://github.com/magento/magento2/issues/6294) + * Refreshing your browser page while on the Review and Payments page of the checkout process no longer clears information from form fields. Previously, Magento cleared information from the **Ship to** field if you refreshed your browser page during this process. + * Magento no longer lets you add a product variation to your shopping cart if the item is out of stock. Previously, Magento permitted you to select an out-of-stock item and when you added it to your cart, displayed the "Product is out of stock" message. + * We've corrected a problem with Magento throwing an HTTP ERROR 500 intermittently during checkout. + * We fixed a [JavaScript](https://glossary.magento.com/javascript) error that occurred on the Checkout page after you changed the country in the **Estimate Shipping and Tax** field. + * Magento now successfully estimates shipping costs. Previously, when you tried to estimate shipping costs, the load indicator would spin indefinitely, and Magento displayed this exception,```Object doesn't support this action```. [GitHub-5358](https://github.com/magento/magento2/issues/5358), [GitHub-7051](https://github.com/magento/magento2/issues/7051) + * Magento now displays the **State/Province** field on the Add New Address page. [GitHub-5279](https://github.com/magento/magento2/issues/5279) + * Credit card information now persists as expected after a user enters a promotion code during checkout. Previously, After an user enters credit card information, then discount code and then click **Place Order**. The credit card information fields are emptied and user has to enter the credit card information again to proceed with the order transaction. + * You can complete your order after entering a new shipping address during checkout. Previously, Magento would not let you place an order if you entered a new shipping address during checkout. -* Magento no longer throws an exception when a customer updates their shopping cart after you've enabled the Minimum Order setting. *Fix submitted by community member Eric Risler - in pull request [8474](https://github.com/magento/magento2/pull/8474){: target="_blank"}.* + +* Magento no longer throws an exception when a customer updates their shopping cart after you've enabled the Minimum Order setting. *Fix submitted by community member Eric Risler in pull request [8474](https://github.com/magento/magento2/pull/8474){: target="_blank"}.* + * You can now translate the FPT label on the checkout page. *Fix submitted by community member Oleksii Korshenko in pull request [9204](https://github.com/magento/magento2/pull/9204){: target="_blank"}.* + * Magento no longer truncates bill-to names and shio-to names to 20 characters in the Admin. *Fix submitted by community member Isolde in pull request [9654](https://github.com/magento/magento2/pull/9654){: target="_blank"}.* + * You can now delete the last item in your cart when the Minimum Order setting is enabled. *Fix submitted by community member storbahn in pull request [9714](https://github.com/magento/magento2/pull/9714){: target="_blank"}.* + * You can now create unique checkbox IDs for the Terms and Conditions part of the checkout process. *Fix submitted by community member Bernhard in pull request [9717](https://github.com/magento/magento2/pull/9717){: target="_blank"}.* + * Magento now correctly displays the coupon label in the shopping cart during checkout. *Fix submitted by community member Sylvain Rayé in pull request [9721](https://github.com/magento/magento2/pull/9721){: target="_blank"}.* + * Magento now pre-fills prefixes and suffixes in the quote shipping address *Fix submitted by community member Anton Evers in pull request [9925](https://github.com/magento/magento2/pull/9925){: target="_blank"}.* + * The country drop-down box now correctly shows the countries for which the current store and customer account are configured. *Fix submitted by community member Marcel in pull request [9429](https://github.com/magento/magento2/pull/9429){: target="_blank"}.* + * The shopping cart now handles products with custom options. [GitHub-5612](https://github.com/magento/magento2/issues/5612) + * Magento now requires completion of the State field during the check out process if this field has been configured as required. + * Checkout now loads as expected in Safari private mode. [GitHub-7942](https://github.com/magento/magento2/issues/7942), [GitHub-7329](https://github.com/magento/magento2/issues/7329), [GitHub-8358](https://github.com/magento/magento2/issues/8358) + * Minicart now shows all products you’ve added, whether you added them while signed-in or not. Previously, the minicart contained only products that you added while signed in. [GitHub-7500](https://github.com/magento/magento2/issues/7500) + * Magento now displays the ”Thank you for your purchase!" on the checkout success page. + * Magento now displays the correct error message when you enter an invalid discount code when making a payment. [GitHub-7230](https://github.com/magento/magento2/issues/7230) + * You can now directly add a configurable product to your shopping cart from category page. [GitHub-2574](https://github.com/magento/magento2/issues/2574), [GitHub-5850](https://github.com/magento/magento2/issues/5850), [GitHub-5882](https://github.com/magento/magento2/issues/5882), [GitHub-6572](https://github.com/magento/magento2/issues/6572), [GitHub-5558](https://github.com/magento/magento2/issues/5558), [GitHub-4184](https://github.com/magento/magento2/issues/4184) + * Magento now displays out-of-stock products in the shopping cart. Previously, if a product’s status changed between the time you added it to the cart and you proceeded to check out, Magento removed the product from your cart. [GitHub-6583](https://github.com/magento/magento2/issues/6583) + * When you select `New Address` while reviewing order information during check out, Magento now profiles the username and country fields, but leaves the address fields empty. Previously, Magento did not leave the address fields empty, and the checkout process failed. [GitHub-6869](https://github.com/magento/magento2/issues/6869) + * Checkout agreement validation now works as expected after you change payment method. [GitHub-6224](https://github.com/magento/magento2/issues/6224) + * The shopping cart now displays a shipping rate that reflects tax settings. Previously, the prices displayed in your shopping cart were not adjusted to include these settings. [GitHub-6166](https://github.com/magento/magento2/issues/6166) + * The shopping cart now displays a shipping rate that reflects tax settings. Previously, the prices displayed in your shopping cart were not adjusted to include these settings. [GitHub-6166](https://github.com/magento/magento2/issues/6166) ### Catalog + * Magento no longer locks the `category_product_entity` table. Unlocking this table reduces the potential of lock-related timeouts that can occur when indexing and checkout operations run in parallel. Previously, Magento locked the `category_product_entity` table. + * The [storefront](https://glossary.magento.com/storefront) now displays images that Magento resizes during product save operations, rather than resizing the product on the storefront. Previously, the image path contained `store_id`, and during save operations, Magento resized images for images the default store only. + * The `\Magento\CatalogInventory\Model\Stock\Status\getStockId()` method now returns the correct values. + * The [storefront](https://glossary.magento.com/storefront) gallery now displays all the images associated with a [configurable product](https://glossary.magento.com/configurable-product). Previously, when you clicked on the swatches associated with a configurable product, the gallery displayed only one of several possible images. [GitHub-6195](https://github.com/magento/magento2/issues/6195), [GitHub-4101](https://github.com/magento/magento2/issues/4101) + * Magento now displays the **This is a required field** message immediately adjacent to the product options as needed during [checkout](https://glossary.magento.com/checkout). Previously, Magento displayed this message at the bottom of the checkout form. + * The category page now shows the current price after Magento runs a scheduled update. Previously, the category page would not update the price after running a scheduled update. [GitHub-4945](https://github.com/magento/magento2/issues/4945) + * You can now sort and filter on the New Review page. [GitHub-5391](https://github.com/magento/magento2/issues/5391) + * Magento now displays server-side Ajax error messages. + * Magento now validates the uniqueness of product attribute values as you create or edit them. Previously, you could add identically named values to an attribute. [GitHub-4881](https://github.com/magento/magento2/issues/4881) + * Magento now displays the price of out-of-stock products on the product page. + * If you remove an item from the Compare Items list that is displayed on any [Category](https://glossary.magento.com/category) page, Magento no longer redirects you to the Compare Products page. + * Subcategories no longer show up in the menu when the parent category is disabled or hidden from the menu. [GitHub-10664](https://github.com/magento/magento2/issues/10664) + * We've corrected a problem with Magento throwing an HTTP ERROR 500 intermittently during checkout. + * The product attribute `category_ids` can have only **Global** scope. Previously, you could change the scope value of `category_ids` to **Store**. + * A price change to a custom option affects only that option. Previously, changing the price of a custom option also affected the price of related products. [GitHub-4588](https://github.com/magento/magento2/issues/4588), [GitHub-5798](https://github.com/magento/magento2/issues/5798), [GitHub-6041](https://github.com/magento/magento2/issues/6041), [GitHub-6097](https://github.com/magento/magento2/issues/6097) + * The prices you assign to custom options no longer change unexpectedly after you save them. [GitHub-6116](https://github.com/magento/magento2/issues/6116) + * You can now create a blank attribute option using the drop-down input option on products that do not require an attribute. [GitHub-3545](https://github.com/magento/magento2/issues/3545), [GitHub-5485](https://github.com/magento/magento2/issues/5485), [GitHub-4910](https://github.com/magento/magento2/issues/4910) + * Magento no longer encounters an error when it cannot find a product image file. [GitHub-5184](https://github.com/magento/magento2/issues/5184), [GitHub-5497](https://github.com/magento/magento2/issues/5497), [GitHub-5871](https://github.com/magento/magento2/issues/5871) + * You can now successfully set an SKU mask to empty. Previously, when a product SKU mask was set to empty, Magento experienced problems loading the Product Add page. [GitHub-5618](https://github.com/magento/magento2/issues/5618) + * Magento now correctly displays custom options at the store-view level. [GitHub-2908](https://github.com/magento/magento2/issues/2908), [GitHub-5885](https://github.com/magento/magento2/issues/5885), [GitHub-5612](https://github.com/magento/magento2/issues/5612) + * Magento now provides swatch input for the Admin Scope, and the attribute fall back mechanism now reverts to the default option value if no values are specified for specific store view. [GitHub-5143](https://github.com/magento/magento2/issues/5143), [GitHub-5142](https://github.com/magento/magento2/issues/5142) + * You can now create a custom attribute for a category that successfully uploads a custom image. Previously, you could create the attribute, but could not save the image. + * Sorting configurable products by price now works as expected when a simple product has a special price. [GitHub-4778](https://github.com/magento/magento2/issues/4778) + * Magento no longer displays an error when you open a product with a Fixed Product Tax attribute enabled. + * We've improved the process of using the WebAPI interface to save a product stock item. Previously, this type of save action worked inconsistently. + * You can no longer change or fake a product price from the Magento [storefront](https://glossary.magento.com/storefront) and then complete an order with that faked price. + * You can now save a product with images multiple times. + * View permissions to high-level product categories now work as expected. Previously, Magento displayed only the product categories that users who belonged to the NOT_LOGGED_IN customer group were permitted to view, no matter which user logged in. Additionally, a user restricted to browse a category could still see the category in the top-level navigation menu if the page were previously cached in FPC. + * You can now successfully add a product to the compare list. Previously, when you tried to add a product to a compare list, Magento displayed an error. + * You can now remove custom options from simple products. Previously, when you tried to remove a custom option from a product, Magento did not remove the options, and displayed an error message. + * You can now successfully set the **Enable Product** attribute to **no**. + * Magento no longer permits a shopper to place a re-order once you've disabled one of items in the order. + * Fixed an issue that occurred in the Catalog Gallery on mobile displays when the `allowfullscreen` setting is enabled. *Fix submitted by community member Dennis van Schaik in pull request [8434](https://github.com/magento/magento2/pull/8434){: target="_blank"}.* + * Magento now successfully loads re-ordered related products when Edge-Mode is activated. *Fix submitted by community member [@kirashet666](https://github.com/kirashet666){: target="_blank"} in pull request [8467](https://github.com/magento/magento2/pull/8467){: target="_blank"}.* + * Magento now displays cross-sells as expected when you use the `product/list/items.phtml` template. *Fix submitted by community member Koen V in pull request [8602](https://github.com/magento/magento2/pull/9662){: target="_blank"}.* + * Magento now displays the **Yes** or **No** attribute value on Product pages. *Fix submitted by community member Timo Klement in pull request [8623](https://github.com/magento/magento2/pull/8623){: target="_blank"}.* + * Setting the **show_out_of_stock** attribute to **No** now works as expected. *Fix submitted by community member Theis Corfixen in pull request [8736](https://github.com/magento/magento2/pull/8736){: target="_blank"}.* + * Magento now uses parent names (instead of SKU-based names) when creating configurable products. *Fix submitted by community member Pascal Brouwers in pull request [9681](https://github.com/magento/magento2/pull/9681){: target="_blank"}.* + * You can now create an `etc/view.xml` file containing an `images` tag with an attribute `module`. *Fix submitted by community member Marius Strajeru in pull request [10052](https://github.com/magento/magento2/pull/10052){: target="_blank"}.* + * Magento now displays the Category selection UI under Conditions when you select a rule for editing. *Fix submitted by community member duckchip in pull request [10094](https://github.com/magento/magento2/pull/10094){: target="_blank"}.* + * Magento now displays the correct image when you switch between a configurable product's options. Previously, Magento loaded product images from a different product. + * The Magento WYSIWYG editor now handles special characters such as percent sign (%). [GitHub-9452](https://github.com/magento/magento2/issues/9452) + * The `indexer:reindex catalog_category_product` process can now handle more than 500 products in a category. + * Magento now displays the price set at store view-level for a product that has different prices set on the global and store view level. + * Out-of-stock options for configurable products no longer show up in search and layered navigation results. + * You can render the `tax_class_id` attribute nonsearchable. Previously, Magento displayed a 503 error under these circumstances. + * If you’ve enabled persistent shopping cart, you can now check out even after your session has expired. + * Magento no longer throws an error when you try to save a product with imported custom options. + * Magento now displays the product price even when the product is out-of-stock. + * `productWebsiteLink` no longer deletes a product’s custom origins. + * Magento now successfully handles purchases of product with minimum quantities of less than one. [GitHub-5570](https://github.com/magento/magento2/issues/5570) + * Magento no longer pre-fills the **Set Product as New From Date** field when you set a special price for a product. [GitHub-4387](https://github.com/magento/magento2/issues/4387) + * When you edit a widget’s existing condition, Magento now loads the SKU grid with all available SKUs. [GitHub-6985](https://github.com/magento/magento2/issues/6985) + * Changing a product price under the website scope now updates the product price across all stores. Previously, any price you set on the store view level overrode the price set in website scope. [GitHub-5133](https://github.com/magento/magento2/issues/5133), [GitHub-7251](https://github.com/magento/magento2/issues/7251) + * Combine rule conditions now work as expected for product list widgets. [GitHub-7274](https://github.com/magento/magento2/issues/7274) + * Component Manager now handles custom Composer modules. Previously, when you tried to install a custom extension using **System > Tools > Web Setup > Component Manager**, Magento displayed the spinning widget indefinitely. [GitHub-6718](https://github.com/magento/magento2/issues/6718) + * We’ve fixed an issue with sorting products by tier price. Previously, if you enabled the Used for Sorting in Product Listing field in the Edit Tier Price Attribute page. and then selected sort by tier price on the storefront, Magento displayed an error message. [GitHub-6751](https://github.com/magento/magento2/issues/6751) + * Products returned by an API product paginated search now include `category_ids` as a member of `custom_attributes`. [GitHub-6127](https://github.com/magento/magento2/issues/6127) + * Product images in Magento installations with multiple store views are now assigned as expected to each store view. [GitHub-6259](https://github.com/magento/magento2/issues/6259) + * Products returned by an API product paginated search now include `category_ids` as a member of `custom_attributes`. [GitHub-6127](https://github.com/magento/magento2/issues/6127) + * Product images in Magento installations with multiple store views are now assigned as expected to each store view. [GitHub-6259](https://github.com/magento/magento2/issues/6259) + * Magento now successfully handles purchases of product with minimum quantities of less than one. [GitHub-5570](https://github.com/magento/magento2/issues/5570) + * Magento no longer adds an empty product option to each PUT request. Previously, Magento added an empty option even when the options array was empty. [GitHub-5963](https://github.com/magento/magento2/issues/5963) ### Configurable products + * You can now successfully disable the lowest price of a [configurable product](https://glossary.magento.com/configurable-product) and its associated simple products. Previously, Magento displayed a configurable product's lowest price even after you disabled that price. + * Magento no longer applies one simple product's special price to another [simple product](https://glossary.magento.com/simple-product) of the same configurable product. Previously, when you set a regular and special price for a child product, all products associated with the same configurable product displayed a regular and special price, even when these amounts were the same. [GitHub-4442](https://github.com/magento/magento2/issues/4442), [GitHub-5097](https://github.com/magento/magento2/issues/5097), [GitHub-6645](https://github.com/magento/magento2/issues/6645) + * You can now edit a product attribute for multiple configurable products. Previously, when you tried to bulk-edit an attribute on a collection of filtered, configurable products, Magento would complete the process without incorporating your edits, and then incorrectly tell you that the products had been edited. + * Magento no longer throws an [exception](https://glossary.magento.com/exception) when you add a configurable product by [SKU](https://glossary.magento.com/sku) if an associated simple product is out-of-stock. + * Magento now correctly displays a product as out-of-stock if its child products are disabled. Previously, the [category](https://glossary.magento.com/category) page failed to list the product at all, rather than listing it as out-of-stock. + * A price change to a custom option affects only that option. Previously, changing the price of a custom option also affected the price of related products. [GitHub-4588](https://github.com/magento/magento2/issues/4588), [GitHub-5798](https://github.com/magento/magento2/issues/5798), [GitHub-6041](https://github.com/magento/magento2/issues/6041), [GitHub-6097](https://github.com/magento/magento2/issues/6097) + * The check that Magento runs to confirm a configurable product's readiness for sale is now faster. (The `isSalable` method checks that a [configurable product](https://glossary.magento.com/configurable-product) can be sold (that is, is in a salable state)). + * Query optimizations have improved the speed of configurable product price calculation. + * Magento no longer calculates configurable product special prices on the category page. Previously, Magento calculated special prices on the category page, but did not display them. + * Magento now displays configurable products as expected after creation. + * Magento no longer displays a configurable product on the storefront when its child products are deleted and the **show out-of-stock** setting is set to **No**. + * Configurable products no longer show up on category page when all children are set to **enable product = No** and **display out-of-stock products = Off**. + * Magento no longer displays the **as low as** label for a disabled price on the Category page. + * The price you set on the website scope no longer overrides any local settings you set on configurable products at the store view level. + * You can now successfully disable the lowest price of a configurable product and its associated simple products. Previously, Magento displayed a configurable product's lowest price even after you disabled the price. [GitHub-4419](https://github.com/magento/magento2/issues/4419) + * Magento now correctly displays a product as out-of-stock if its child products are disabled. Previously, the [category](https://glossary.magento.com/category) page failed to list the product at all, rather than listing it as out-of-stock. + * Magento now displays the correct drop-down option labels for configurable products when using attributes with custom source. + * Magento now shows the correct price of a configurable product based in installations that run multiple websites. + * We’ve improved the performance of Magento installations that contain configurable products with many (1600+) options. + * We’ve resolved some issues with the display of configurable products on the Magento frontend after product creation. + * Magento now displays only the set price for a configurable product, not its set price and “as low as” price. Previously, Magento showed both prices if a minimum price was not configured. + * Magento no longer removes the simple products associated with a configurable product if you click on the **Save** button more than once while saving the configurable product. Previously, if you clicked on **Save** more than once during an attempt to save a configurable product, Magento removed the simple products that were assigned to it. + * Special prices now display correctly for future discounts [GitHub-8375](https://github.com/magento/magento2/issues/8375) + * Magento no longer applies one simple product's special price to another simple product of the same configurable product. Previously, when you set a regular and special price for a child product, all products associated with the same configurable product displayed a regular and special price, even when these amounts were the same. [GitHub-4442](https://github.com/magento/magento2/issues/4442), [GitHub-5097](https://github.com/magento/magento2/issues/5097), [GitHub-6645](https://github.com/magento/magento2/issues/6645) + * Magento now shows the correct product price for products that you add to the wish list from the category page. [GitHub-6866](https://github.com/magento/magento2/issues/6866) + * Videos now play as expected on simple products as they do for configurable products. Previously, simple product videos were displayed as thumbnail images only.[GitHub-6360](https://github.com/magento/magento2/issues/6360) + * Users no longer lose configurable product data when you change the interface locale to Chinese (China) or Arabic (Egypt). ### Email + * Magento now successfully loads the New Order Email templates. [GitHub-5101](https://github.com/magento/magento2/issues/5101) + * The **Send Welcome Email From** field now identifies the store that the customer is associated with. + * Magento no longer sends email when the **Disable email communication** setting is set to **yes**. Previously, Magento sent email even when this setting was enabled. [GitHub-5988](https://github.com/magento/magento2/issues/5988) ### Frameworks + * Static file generation is no longer affected by a race condition that affected merging CSS files. Previously, this race condition interfered with the proper generation of the product frontend. + * The ability to disable module output has been removed from Admin. If you disabled module output from Admin in a previous release, you must manually configure these settings. See [Disable module output]({{ page.baseurl }}/config-guide/config/disable-module-output.html) for details. + * Static tests run in a Windows environment no longer fail due to file path mismatches. *Fix submitted by community member barbazul in pull request [9902](https://github.com/magento/magento2/pull/9902){: target="_blank"}.* + * Magento now displays special characters in store names in email subject lines. Previously, special characters in the store name were converted to numerical character references in the email subject field. [GitHub-8094](https://github.com/magento/magento2/issues/8094) + * You can now link a simple product to a configurable one. Previously, when you tried to use REST to link a simple product to a configurable one, the products were not linked even though Magento responded, `Status Code: 200 OK`. #### Admin framework + * You can no longer delete a currently logged-in user. + * Inline editing in Admin now includes ACL checks. Previously, the Quick Edit editor did not respect permissions. #### Application framework + * Magento now supports new top level domains for email addresses. [GitHub-4547](https://github.com/magento/magento2/issues/4547) + * Page titles in layout files are not translatable. *Fix submitted by community member Anton Evers in pull request [9992](https://github.com/magento/magento2/pull/9992){: target="_blank"}.* + * The `setup:static-content:deploy`, `setup:di:compile` and `deploy:mode:set` commands now return non-zero exit code if an error occurs. *Fix submitted by community member Pablo Ivulic in pull request [7780](https://github.com/magento/magento2/pull/7780){: target="_blank"}.* + * We've changed the `select` protected property to `query` in the AbstractSearchResult class. *Fix submitted by community member Alex Gusev in pull request [5043](https://github.com/magento/magento2/pull/5043){: target="_blank"}.* + * `\Magento\Framework\Interception\Code\Generator\Interceptor` now supports interceptors for generating for methods that return references. [GitHub-9167](https://github.com/magento/magento2/issues/9167) + * The Magento Framework now makes its dependency upon the `zendframework/zend-stdlib` library explicit in `composer.json`. [(GITHUB-6442)](https://github.com/magento/magento2/issues/6442){: target="_blank"} #### Configuration framework + * Configuration values no longer return NULL when Redis reaches the limit set in the `max_memory` setting. Previously, when Redis met the limit specified in this setting, `ScopeConfig` returned a value of NULL for configuration options, which resulted in significant damage to data (for example, deleting all prices assigned to a website from the database). + * The currency setup in Admin no longer throws an `in_array` error when a single value is selected. *Fix submitted by community member Derik Nel in pull request [8077](https://github.com/magento/magento2/pull/8077){: target="_blank"}.* + * Magento now writes all default configuration values to the `config.php` file. #### JavaScript framework + * Customers can now place orders as expected when Magento is running a French locale in production mode. Previously, customers could not complete a transaction in a storefront running a French locale, although they could if they switched to the storefront running the English locale. + * Magento now displays server-side Ajax error messages. + * JavaScript mixins now work when you add a `urlArgs` argument to a `require_js` file. *Fix submitted by community member James Reed in pull request [9665](https://github.com/magento/magento2/pull/9665){: target="_blank"}.* #### Session framework + * The Magento storefront and Admin panel no longer share form keys. Previously, if a user were navigating both a storefront and the Admin simultaneously, he would be unexpectedly redirected to the Admin dashboard. [GitHub-6201](https://github.com/magento/magento2/issues/6201) #### Zend framework @@ -702,451 +892,593 @@ This release contains hundreds of fixes and enhancements. Thanks to our hardworking Magento Open Source community members for the following contributions! + * We’ve removed `Zend_Json` from Magento Theme and replaced it with a new serializer class. *Fix submitted by community member David Manners in pull request [9262](https://github.com/magento/magento2/pull/9262){: target="_blank"}.* + * We’ve removed `Zend_Json` from the Weee module. *Fix submitted by community member David Manners We’ve removed pull request [9261](https://github.com/magento/magento2/pull/9261){: target="_blank"}.* + * We’ve replaced the direct usage of `Zend_Json` with a call to the `Json_Help` class. *Fix submitted by community member David Manners in pull request [9344](https://github.com/magento/magento2/pull/9344){: target="_blank"}.* + * We’ve replaced `Zend_Json` in the configurable product block test. *Fix submitted by community member David Manners in pull request [9753](https://github.com/magento/magento2/pull/9753){: target="_blank"}.* + * We’ve removed `Zend_Json` from form elements. *Fix submitted by community member David Manners in pull request [9754](https://github.com/magento/magento2/pull/9754){: target="_blank"}.* + * We’ve replaced the Magento Framework's `Zend_Session` interface usage with SessionHandlerInterface. *Fix submitted by community member Timon de Groot in pull request [9285](https://github.com/magento/magento2/pull/9285){: target="_blank"}.* + * We’ve removed `Zend_Wildfire` and `Zend_Controller` from the codebase. *Fix submitted by community member Isolde in pull request [9622](https://github.com/magento/magento2/pull/9622){: target="_blank"}.* + * We've resolved issues with selecting widgets in TinyMCE. [GitHub-9655](https://github.com/magento/magento2/issues/9655), [GitHub-9518](https://github.com/magento/magento2/issues/9518) *Fixes submitted by community member Pieter Hoste in pull request [9540](https://github.com/magento/magento2/pull/9540){: target="_blank"} and community member Bernhard in pull request [9711](https://github.com/magento/magento2/pull/9711){: target="_blank"}.* + * We’ve replaced `Zend_Log` with `Psr\Log\LoggerInterface`. *Fix submitted by community member Timon de Groot in pull request [9285](https://github.com/magento/magento2/pull/9285){: target="_blank"}.* + * Magento no longer throws a `Zend_Db_Statement_Exception` when a user opens an empty Category page. *Fix submitted by community member adrian-martinez-interactiv4 in pull request [9400](https://github.com/magento/magento2/pull/9400){: target="_blank"}.* ### General fixes + * You can now save products using the multiple select attribute value. Previously, you could not save values if using this attribute. + * You can now log in successfully after creating a custom attribute. Previously, Magento would display an error message, and you could not log in, after first creating a custom attribute, then logging out. + * Magento now correctly displays customer address during account creation. Previously, when you selected a default billing address during creation of a new customer account, Magento would not display the address. + * Admin users with restricted permissions can now log in successfully as determined by those permissions. Previously, Magento displayed a fatal error when you logged in under these conditions. + * We've removed the duplicated [PHP](https://glossary.magento.com/php) settings from the sample web server configuration files. + * You can now make Return Merchandise [Authorization](https://glossary.magento.com/authorization) (RMA) comments visible from the storefront by setting **Stores > Settings > Configuration > Sales > RMA Settings > Enable RMA on Storefront**. + * When creating a new page with the Add New Page feature, Magento no longer throws a JavaScript error when [Layout](https://glossary.magento.com/layout) is set to empty. + * We've removed the sample password from the Setup Wizard. + * You can now assign open-ended start and complete dates for product rules. Previously, if you left the start and end date field blanks when creating a rule, Magento would supply the start and end dates based on the save date. + * The Magento Framework now makes its dependency upon the `zendframework/zend-stdlib` library explicit in `composer.json`. [GitHub-6442](https://github.com/magento/magento2/issues/6442) + * You can now upload changes to the `robots.txt` file from the Admin panel. + * We've eliminated difficulties saving product information when logged in as Admin. Previously, the Product Save feature worked erratically for Admin users. + * Custom themes now inherit parent [XML](https://glossary.magento.com/xml) configuration information as expected. + * Information set by the **Default Billing Address** and **Default Shipping Address** checkboxes on the Customer page are now saved correctly. + * [Admin](https://glossary.magento.com/admin) users with appropriate permissions can now reset the passwords of more than one customer at a time. [GitHub-5260](https://github.com/magento/magento2/issues/5260) + * Admin interface forms now load data as expected after initializing all components. Previously, under certain conditions, the load indicator would spin indefinitely, and Magento would not load data. + * Showing reports on the **Reports > Coupons** page no longer throws an error when the user is in a non-default Admin locale. [GitHub-7037](https://github.com/magento/magento2/issues/7037) + * You can now generate static content without a database connection. [GitHub-10041](https://github.com/magento/magento2/issues/10041) + * Static content deployment now generates secure content, whether content included secure or non-secure URLs. + * The Recently Viewed Products block now appears as expected when the full page cache is enabled. [GitHub-3890](https://github.com/magento/magento2/issues/3890) + * We've resolved an issue that prevented you from adding more than one product to a [shopping cart](https://glossary.magento.com/shopping-cart) from a wishlist. [GitHub-5282](https://github.com/magento/magento2/issues/5282) + * Widgets now accept UTF-8 special characters type as input parameters. Previously, you could successfully create a widget, but UTF-8 special characters were broken. [GitHub-4232](https://github.com/magento/magento2/issues/4232) *Fix submitted by community member Pieter Hoste in pull request [9333](https://github.com/magento/magento2/pull/9333){: target="_blank"}.* + * Magento now sends email that provides updates on the status of RMA authorization. + * Mass actions now work as expected on the Customer grid. Previously, Magento could not process more than 20 items at a time. + * Customers who subscribe to a newsletter are now subscribed as expected after confirming their account. Previously, Magento unsubscribed customers from the newsletter after confirming their account. + * Fixed issue with using the Magento Commerce invitations feature to insert malicious JavaScript and subsequently execute it in the Admin context. + * You can now save products using the multiple select attribute value. Previously, you could not save values if using this attribute. + * You can now assign open-ended start and complete dates for product rules. Previously, if you left the start and end date field blanks when creating a rule, Magento would supply the start and end dates based on the save date. + * Magento no longer generates incorrect URLs in the site map when the **Use Secure URLs in Admin** setting is set to **Yes**. [GitHub-8644](https://github.com/magento/magento2/issues/8644) + * We’ve resolved a conflict that occurred after you changed a base URL. Previously, after you changed a `base_url` value (**Stores->Configuration > General > Web > Base URLs (Secure)**), Magento would update the base URL, then resubscribe, potentially resulting in a failure during the next update secure `base_url` call. + * Magento now displays newly registered customers in the Admin customer list as expected. + * The Customer Segment page no longer shows non-matching customers when a customer logs in and you refresh the Customer Segment page. + * You can now add a `translate` attribute to any String argument in the `di.xml` file for any class. This attribute provides an ability on the level of dependency injection configuration to specify that an argument can be translated. The actual translation of strings is handled by another Magento component. + * Magento frontend scope filters now work as expected. Previously, Magento did not reload product information correctly when you applied a filter using **Catalog > Product**. + * Only users with permission to view a store can view or process the orders placed on it. + * You can render the `tax_class_id` attribute nonsearchable. Previously, Magento displayed a 503 error under these circumstances. + * We fixed an issue where cache-misses sometimes occurred when Fastly cache was implemented. Previously, the header information included in the response sometimes prevented the caching of this page. To minimize this potential problem, Magento now does not include header empty of real content in the response. + * Fixed the location of the `wishlist.js` file. *Fix submitted by community member [Koen V.](https://github.com/koenner01){: target="_blank"} in pull request [8633](https://github.com/magento/magento2/pull/8633){: target="_blank"}.* + * You can no longer download products after you’ve set order state to `STATE_CANCELED`. *Fix submitted by community member nazarpadalka in pull request [8917](https://github.com/magento/magento2/pull/8917){: target="_blank"}.* + * Fixed a typo in the Pull Request Template. *Fix submitted by community member tomislavsantek in pull request [8908](https://github.com/magento/magento2/pull/8908){: target="_blank"}.* + * You now receive an error message as expected if you try to submit a product review while not logged in. *Fix submitted by community member quienti in pull request [9001](https://github.com/magento/magento2/pull/9001){: target="_blank"}.* + * Fixed grammar error in the customer dashboard. *Fix submitted by community member Petar Sambolek in pull request [9080](https://github.com/magento/magento2/pull/9080){: target="_blank"}.* + * The popup window in the Safari browser now closes properly. *Fix submitted by community member Hans Schouten in pull request [8824](https://github.com/magento/magento2/pull/8824){: target="_blank"}.* + * We’ve fixed minor performance issues when you use `/pub` as `docroot`. *Fix submitted by community member Joseph Maxwell in pull request [9094](https://github.com/magento/magento2/pull/9094){: target="_blank"}.* + * The Actions dropdown menu is now properly aligned in the Admin when the action column is not the last column. *Fix submitted by community member Marius Strajeru in pull request [10082](https://github.com/magento/magento2/pull/10082){: target="_blank"}.* + * Magento now deletes pending entries in `cron_schedule` when you reconfigure a cron job. *Fix submitted by community member Anton Evers in pull request [9957](https://github.com/magento/magento2/pull/9957){: target="_blank"}.* + * We’ve fixed the cron timestamp method. *Fix submitted by community member Anton Evers in pull request [9943](https://github.com/magento/magento2/pull/9943){: target="_blank"}.* + * You can now save customers with unique attributes. *Fix submitted by community member storbahn in pull request [9712](https://github.com/magento/magento2/pull/9712){: target="_blank"}.* + * The `Magento_Framework/View/Layout/etc/elements.xsd` file `blockReferenceType` definition now allows for the optional argument template. *Fix submitted by community member jissereitsma in pull request [9772](https://github.com/magento/magento2/pull/9772){: target="_blank"}.* + * Customer sessions for different customers are no longer shared on installations on multiple websites. [GitHub-4842](https://github.com/magento/magento2/issues/4842), [GitHub-6468](https://github.com/magento/magento2/issues/6468) + * Magento now handles quotation marks in product names. Previously, quotation marks in product names caused a JSON error on the Product page. [GitHub-8059](https://github.com/magento/magento2/issues/8059) + * The website column in Customer Segment report now contains correct data. Previously, this column was blank in the **Reports > Customer > Segments** report. + * When you add an address, new custom attributes are now displayed together, along with other address details. + * You can now edit the default store view and save it under a different name. [GitHub-7349](https://github.com/magento/magento2/issues/7349) + * You can now reset a customer password if **website restrictions** is enabled. Previously, you were redirected to `customer/account/login/` with no possibility to reset the password. + * When you override `module-directory/etc/zip_codes.xml` from a local module, all country codes are now included as expected. Previously, only the last country code was included, which affected the custom check out process. [GitHub-6694](https://github.com/magento/magento2/issues/6694) + * `.htaccess` deny code execution now works as expected for Apache and php-fpm. [GitHub-6766](https://github.com/magento/magento2/issues/6766) + * Magento now displays the WYSIWYG editor as expected. [GitHub-6222](https://github.com/magento/magento2/issues/6222), [GitHub-4828](https://github.com/magento/magento2/issues/4828), [GitHub-6815](https://github.com/magento/magento2/issues/6815) + * Magento now renders images as expected in the product description area. Previously, Magento did not render images in this area, and would display a broken link. [GitHub-6138](https://github.com/magento/magento2/issues/6138) ### Gift cards + * Order emails now specify the amount of the [gift card](https://glossary.magento.com/gift-card) that you have purchased. + * The Checkout page no longer freezes when you order a virtual gift card using the Authorize.net Payment Action value set to **Authorize and Capture**. + * You can now complete the purchase of a gift card in environments where you have set the Braintree [payment method](https://glossary.magento.com/payment-method) Payment Action to **Authorize and Capture**. Previously, any order made under these conditions would remain indefinitely in the processing stage. + * You can now add a gift card with an undefined amount to the Items Ordered table. Previously, Magento did not permit you to add a gift card of an open value to this table. + * Customers can no longer exceed a gift card balance by using the gift card twice. + * You can now save the configuration settings of a gift card product. + * Gift card accounts are now automatically generated after an invoice is created, when the Authorize and Capture payment action on Authorize.net Direct Post is enabled. ### Gift registry + * The State/Province dropdown menu now works as expected in the frontend gift registry. + * We’ve fixed inconsistent gift options checkbox labels in both the CSV file (`app\code\Magento\GiftMessage\i18n\en_US.csv`) and PHTML file (`app\code\Magento\GiftMessage\view\frontend\templates\inline.phtml`). *Fix submitted by community member vpiyappan in pull request [9421](https://github.com/magento/magento2/pull/9421){: target="_blank"}.* ### Gift wrapping + * The **Allow Gift Wrapping for Order Items** setting now works as expected. Previously, when **Stores > Settings > Configuration > Sales > Gift Options** was set to **No**, users saw the Gift Option link under each product in their [shopping cart](https://glossary.magento.com/shopping-cart). + * You can now add gift options to an order if logged in using a secure URL + * Your gift wrapping selection now appears in the shopping cart regardless of whether you've selected a shipping method. Previously, Magento did not display your gift wrapping choice until you selected a shipping method. + * Magento no longer displays the gift wrap tax when no gift wrap is selected. + * You can now save products using the multiple select attribute value. Previously, you could not save values if using this attribute. + * We’ve fixed an issue with fetching quote item by ID. *Fix submitted by community member Mladen Ilic in pull request [10059](https://github.com/magento/magento2/pull/10059){: target="_blank"}.* + * We’ve corrected the ACL for the Developer Section resource. *Fix submitted by community member Pascal Brouwers in pull request [10149](https://github.com/magento/magento2/pull/10149){: target="_blank"}.* + * Layout merging no longer fails when you save a widget that contains the grave accent character in the data. *Fix submitted by community member Timon de Groot in pull request [10151](https://github.com/magento/magento2/pull/10151){: target="_blank"}.* + * Magento now uses the correct order when uploading image to the Admin using **Content > Design**. *Fix submitted by community member Ihor Sviziev in pull request [10126](https://github.com/magento/magento2/pull/10126){: target="_blank"}.* ### Google Analytics + * We’ve added the missing single quote (‘) to the Google API Tracking code. *Fix submitted by community member Petar Sambolek in pull request [9084](https://github.com/magento/magento2/pull/9084){: target="_blank"}.* + * Google Analytics tracking now works when Cookie Restriction is enabled. *Fix submitted by community member Bernhard in pull request [9713](https://github.com/magento/magento2/pull/9713){: target="_blank"}.* ### HTML + * The CSS minify option no longer removes the whitespace around the minus (-) sign. Also, this option is now compatible with the `calc()` CSS function. *Fix submitted by community member Petar Sambolek in pull request [9027](https://github.com/magento/magento2/pull/9027){: target="_blank"}.* ### Images + * Magento no longer encounters an error when it cannot find a product image file. [GitHub-5184](https://github.com/magento/magento2/issues/5184), [GitHub-5497](https://github.com/magento/magento2/issues/5497), [GitHub-3545](https://github.com/magento/magento2/issues/3545), [GitHub-5871](https://github.com/magento/magento2/issues/5871) + * Magento now successfully saves images that you edit in a [WYSIWYG](https://glossary.magento.com/wysiwyg) editor. Previously, when you tried to change an image by right-clicking it in a WYSIWYG editor and choosing Insert/Edit Image, Magento did not save your changes. + * You can now preview uploaded images. + * You can now set an image size for product watermarks. [GitHub-5270](https://github.com/magento/magento2/issues/5270) + * Graphics now scroll as expected on mobile devices. [GitHub-5302](https://github.com/magento/magento2/issues/5302) + * Magento now successfully saves images that you edit in a [WYSIWYG](https://glossary.magento.com/wysiwyg) editor. Previously, when you tried to change an image by right-clicking it in a WYSIWYG editor and choosing Insert/Edit Image, Magento did not save your changes. + * Inserted images on the content block of Category no longer reference the Admin URL. Previously, when you used the Wysiwyg editor to insert an image into the Content block of a Category, the image URL on the frontend would reference the Admin location. When you subsequently logged out of the Admin panel, and refreshed the Category page, the image is no longer available. #### Import/Export + * You can now successfully import multiselect attributes that contain special symbols or delimiters. Previously, when you tried to import attributes containing delimiters, data validation (and the import) failed. + * You can now import negative quantities. Previously, when importing a product quantity of '-1', Magento returned an error. + * Magento now imports custom options correctly. Previously, when you tried to import a custom option, the import failed, and Magento displayed this error: `Javascript Error: Uncaught RangeError: Maximum call stack size exceeded`. [GitHub-5573](https://github.com/magento/magento2/issues/5573) + * We’ve added a new way to import images: You can now successfully import images when you set your document root to `your_Magento_install_dir/pub`. Previously, you needed to set document root to `/magento` to import images. Both ways of importing now work. [GitHub-5359](https://github.com/magento/magento2/issues/5359) + * Magento now removes category URL keys from the `url_rewrite` table as expected during import. Previously, Magento did not remove these keys, which triggered a failure during import. This subsequently caused Magento to quickly reach the maximum error count, returning this error: "Maximum error count has been reached or system error is occurred!". [GitHub-1471](https://github.com/magento/magento2/issues/1471) + * You can now export a [bundle product](https://glossary.magento.com/bundle-product) that contains a custom text area attribute. Previously, if you tried to export this type of bundle product, the export would fail, and Magento displayed the message, "There is no data for the export". + * Magento now maintains super attribute ordering of configurable products with multiple super attributes after export or import. Previously, after import or export, the ordering of super attributes was not maintained. [GitHub-6079](https://github.com/magento/magento2/issues/6079) + * Magento now correctly displays both configurable and simple products, their attribute values, and visibility values after import if SKU is an integer. [GitHub-5547](https://github.com/magento/magento2/issues/5547) + * Magento now imports customer data as expected after the data passes the pre-import validation step. Previously, although data passed this validation step, an error would occur during import, and Magento displayed this message: `Invalid data for insert`. [GitHub-4921](https://github.com/magento/magento2/issues/4921), [GitHub-9469](https://github.com/magento/magento2/issues/9469) + * The export process now populates values in the configurable variations column for configurable products as expected. Previously, when exporting more than one product, the values for the configurable variations column for configurable products were not included. + * Magento now displays imported product images in this order: first, the base image, then the additional images in the order in which they were listed in the [CSV](https://glossary.magento.com/csv) file. Previously, Magento displayed images in this unexpected order: first, an additional image, then the base image, and finally, all remaining additional images. + * Magento now runs a selective partial re-indexing operation after import if you enable **Update on Schedule**. Previously, Magento ran a full reindex no matter which index mode was set. + * We've fixed an issue with the correct representation of date and time zones of items in a product [catalog](https://glossary.magento.com/catalog) during import or export. Previously, Magento exported all dates in the default format (UTC-8), including values that you set to be displayed using another standard. + * Magento now successfully imports customer multiselect attributes. Previously, when you imported a CSV file with either the option's ID numbers or the option's values, Magento returned an error. + * Magento now displays more verbose information about duplicated information with links to action for troubleshooting the import process. Previously, Magento displayed duplicated or incomplete information on the product page after import. + * Magento now exports rows only once when product information contains HTML special characters. Previously, Magento exported rows containing product information that included HTML characters at least twice. + * We've improved the import speed of advanced pricing data. Previously, the import process for this information frequently stopped after the import of approximately 300 rows of data, and Magento displayed this message: `Please Wait`. + * The CatalogImportExport uploader now handles HTTPS images as expected. *Fix submitted by community member Clement Beudot in pull request [8278](https://github.com/magento/magento2/pull/8278){: target="_blank"}.* + * You can now successfully import multiselect attributes that contain special symbols or delimiters. Previously, when you tried to import attributes containing delimiters, data validation (and the import) failed. + * When you delete an image in Admin, Magento no longer deletes it on the server. Previously, Magento deleted it from the server as well, which caused errors for other products (example error message: `Cannot gather stats! Warning!stat(): stat failed for`). + * The exported sheet now generates or renders data for columns that indicate associations for configurable products. + * Magento no longer deletes a product after you select the Replace option while importing a product. Previously, Magento deleted the product rather than replacing it. + * Magento can now import `additional_images` that are tagged with labels that contain a comma separator. + * We've fixed an issue where product URL keys (for SKUs) were not auto-generated as expected during import. [GitHub-5188](https://github.com/magento/magento2/issues/5188) + * Magento now updates attribute sets as expected when importing products from CSV. [GitHub-5498](https://github.com/magento/magento2/issues/5498) + * The CatalogImportExport uploader can now handle HTTPS images. Previously, if the URL of a file contained HTTPS, the uploader still used the HTTP provider to retrieve the image, which lead to an error. [GitHub-8277](https://github.com/magento/magento2/issues/8277) + * Magento now displays the WYSIWYG editor as expected. [GitHub-6222](https://github.com/magento/magento2/issues/6222), [GitHub-4828](https://github.com/magento/magento2/issues/4828), [GitHub-6815](https://github.com/magento/magento2/issues/6815) + * The Admin’s Most Viewed Products tab now displays correct product prices. Previously, prices for products in Most Viewed Products tab were incorrectly listed as $0. [GitHub-5660](https://github.com/magento/magento2/issues/5660) + * Magento now renders images as expected in the product description area. Previously, Magento did not render images in this area, and would display a broken link. [GitHub-6138](https://github.com/magento/magento2/issues/6138) #### Integrations + * With valid permissions, you can now regain access to your Admin account after it is temporarily disabled due to invalid credentials. Previously, you could not unlock the account of a valid Admin user if it were disabled due to multiple invalid login attempts. + * Web API tokens now have a default expiration period: 4 hours for Admin tokens and 1 hour for Customer tokens. This can be changed in the [Admin Panel configuration settings]({{ site.baseurl }}/guides/v2.2/get-started/authentication/gs-authentication-token.html#admin-and-customer-access-tokens) + * You can now edit `authentication_lock` from the Admin. *Fix submitted by community member Elias Kotlyar in pull request [9820](https://github.com/magento/magento2/pull/9820){: target="_blank"}.* ### Indexing + * We've improved the performance of the algorithm that Magento uses to calculate batch sizes while indexing categories. + * Magento no longer displays an indexing error when Elasticsearch is enabled. Previously, Magento displayed this indexing error when Elasticsearch was enabled: `mapper_parsing_exception`. + * The category/product indexer now successfully completes a full reindexing of all indexes on large profiles with 500,000 or more products. Previously, Magento successfully generated a large profile, but failed to complete the reindexing of the categories or products, and displayed the following error: "Error 1114: Table is full". + * `IndexerHandlerFactory` no longer tries to cast the `$indexer` object to a String if an error occurs. Since `$indexer` is an object of type `IndexerInterface` and does not have a `__toString()` method, attempting to cast the `$indexer` object to a String previously resulted in an error. [GitHub-5155](https://github.com/magento/magento2/issues/5155) + * The Magento flat indexer now collects correct product data for `ROW_ID`. + * The Magento flat indexer no longer throws an error after flat tables are enabled and reindexed. This fix applies to both product and [catalog](https://glossary.magento.com/catalog) tables. + * Magento now runs a selective partial re-indexing operation after import if you enable **Update on Schedule**. Previously, Magento ran a full reindex no matter which index mode was set. + * `IndexerHandlerFactory` no longer tries to cast the `$indexer` object to a String if an error occurs. Since `$indexer` is an object of type `IndexerInterface` and does not have a `__toString()` method, attempting to cast the `$indexer` object to a String previously resulted in an error. [GitHub-5155](https://github.com/magento/magento2/issues/5155) + * The category/product indexer now successfully completes a full reindexing of all indexes on large profiles with 500,000 or more products. Previously, Magento successfully generated a large profile, but failed to complete the reindexing of the categories or products, and displayed the following error: "Error 1114: Table is full". + * We’ve resolved failures with indexing in installations that implemented catalogs containing at least 5,000 - 6,000 SKUs. + * We've improved the performance of the algorithm that Magento uses to calculate batch sizes while indexing categories. + * Reindexing no longer results in an SQL error that prevents bundle products from being reindexed, and results in wrong product prices. ### Orders + * We’ve added PHP interfaces that add the ability to change the status of a [shipment](https://glossary.magento.com/shipment). The new Creditmemo interface supports tasks you can already do through the Magento Admin, including the ability to: * support returning multiple units of a configurable product. Previously, when you tried to refund an order, you could refund only one unit of a configurable product, not the amount in the original order. @@ -1156,135 +1488,177 @@ Thanks to our hardworking Magento Open Source community members for the followin * change order status after a credit memo has been created. + * You can now set the customer group when creating a new order from the Admin interface. [GitHub-6162](https://github.com/magento/magento2/issues/6162) + * You can now print invoices and credit memos from the Order page. + * You can now successfully place orders when the Enable and Configure [Website](https://glossary.magento.com/website) Payments Standard Payment Action attribute is set to Sale. Previously, under these conditions, Magento would display an error message and not allow you to complete the purchase. [GitHub-4785](https://github.com/magento/magento2/issues/4785) + * Attributes of the `salesInvoiceRepository` methods are now more appropriately type cast. (The data type is now a nullable float.) Previously, due to the use of an incorrect data type, Magento would produce an error when calling the `salesInvoiceRepositoryV1GetList` method. [GitHub-3605](https://github.com/magento/magento2/issues/3605) + * The order comments history no longer duplicates the time that a comment was made. Previously, the time that a comment was made was listed twice. + * Magento now uses the address template from store view level of the placed order (similar to how order confirmation email works). Previously, Magento used the wrong address template for order e-mails. + * Magento now correctly identifies an order being processed when it is placed in a store configured for multiple currencies. Previously, these orders always were identified as potentially fraudulent. + * The order comments history no longer duplicates the time that a comment was made. Previously, the time that a comment was made was listed twice. + * You can now add a gift card with an undefined amount to the Items Ordered table. Previously, Magento did not permit you to add a gift card of an open value to this table. + * The **Print Shipping Label** link now displays on the product frontend. Previously, the layout for the Shipping and Tracking block did not work properly. + * You can now create an order through Admin if there is a `translate csv` for order-header. *Fix submitted by community member Pascal Brouwers in pull request [6856](https://github.com/magento/magento2/pull/6856){: target="_blank"}.* + * You can now use a second credit memo to successfully issue a full refund for a credit memo with adjustment fees. *Fix submitted by community member Max Pronko in pull request [9715](https://github.com/magento/magento2/pull/9715){: target="_blank"}.* + * Coupon codes are now included in invoice print outs. *Fix submitted by community member Belgacem Naoui in pull request [9780](https://github.com/magento/magento2/pull/9780){: target="_blank"}.* + * The Orders grid now displays correct order dates. *Fix submitted by community member Anton Evers in pull request [9941](https://github.com/magento/magento2/pull/9941){: target="_blank"}.* + * Magento now displays the correct order time in the Sales Order grid in the Admin panel. [GitHub-9426](https://github.com/magento/magento2/issues/9426) + * We’ve increased the size of the `sales_order_payment.cc_number_enc` field. [GitHub-7334](https://github.com/magento/magento2/issues/7334) + * We’ve fixed an issue with an undefined offset in the `order\config.php` file. [GitHub-6111](https://github.com/magento/magento2/issues/6111) + * The Create Order page now works as expected after you select **Update items and quantities**. + * Magento no longer creates unnecessary loaders during checkout with an order that contains virtual products. + * New orders no longer stay in the processing state after you click the Place Order button. Previously, new orders stayed in the processing state even after you clicked Place Order. [GitHub-5860](https://github.com/magento/magento2/issues/5860) + * You can now use either the parent order item ID or child product order item ID when using the REST API (`/V1/order/:orderId/invoice : POST method API`) to create an invoice for an order containing bundle products. [GitHub-6988](https://github.com/magento/magento2/issues/6988) + * We’ve increased the size of the `shipping_method` column in the `sales_order` and `quote_address` tables. [GitHub-6475](https://github.com/magento/magento2/issues/6475) + * Magento now creates the shipping address as expected when you use REST to create an order. Previously, when you used REST to create an order, then subsequently viewed the order from the Admin, Magento threw an error. + * Magento now displays all tax details as expected on the Admin order page. Previously, Magento did not save the order tax rate information, and the full tax summary was incomplete. + * You can now cancel an order of a bundle product. [GitHub-5194](https://github.com/magento/magento2/issues/5194) + * We’ve fixed an issue with an undefined offset in the `order\config.php` file. [GitHub-6111](https://github.com/magento/magento2/issues/6111) + * The Admin’s Most Viewed Products tab now displays correct product prices. Previously, prices for products in Most Viewed Products tab were incorrectly listed as $0. [GitHub-5660](https://github.com/magento/magento2/issues/5660) + * New orders no longer stay in the processing state after you click the Place Order button. Previously, new orders stayed in the processing state even after you clicked Place Order. [GitHub-5860](https://github.com/magento/magento2/issues/5860) ### Payment methods + * We’ve added support for the change to the USPS API that USPS implemented on September 1, 2017. After installing or upgrading to this release, Magento will display the Domestic rate for USPS, First-Class Mail Parcel as expected. Previously, the USPS First-Class Mail Parcel option was not available after September 1, 2017 on installations running Magento 2.x. + * You can now successfully complete Paypal checkout with products that have custom options. [GitHub-5938](https://github.com/magento/magento2/issues/5938) + * Third-party payment gateways are now visible from the Admin. [GitHub-7891](https://github.com/magento/magento2/issues/7891) + * Magento no longer displays the **No [Payment method](https://glossary.magento.com/payment-method) available** message when a customer tries to ship items to a billing-restricted country. + * Magento no longer displays the **No [Payment method](https://glossary.magento.com/payment-method) available** message when a customer tries to ship items to a billing-restricted country. + * Magento now successfully completes checkout when a custom address attribute is added. Previously, an error occurred during checkout when the user added a required custom address attribute. + * Removed a duplicate method call to the `getLinkField` method in the `Magento\Catalog\Model\ResourceModel\Category` class. *Fixed by will-b in pull request [9057](https://github.com/magento/magento2/pull/9057){: target="_blank"}.* + * During order creation, you can now continue with a payment after clicking the **Back** button to the payment selection window. [GitHub-4580](https://github.com/magento/magento2/issues/4580) + * The expiration year validator now works as expected. [GitHub-8482](https://github.com/magento/magento2/issues/8482) * We've introduced the `Magento\Vault\Block\TokenRendererInterface::getToken` method. This method provides details about payment tokens to renderer components, such as public hash and available card or account details. Third-party developers can use this method to implement this functionality in their payment integrations. + * Error messages associated with the `Authorize.net` payment method are now translated to fit the configured locale. [GitHub-5934](https://github.com/magento/magento2/issues/5934) + * We’ve increased the size of the `shipping_method` column in the `sales_order` and `quote_address` tables. [GitHub-6475](https://github.com/magento/magento2/issues/6475) + * We’ve fixed an issue with the REST API that previously resulted in the PayPal gateway rejecting requests. [GitHub-10410](https://github.com/magento/magento2/issues/10410) #### Braintree + * You can now place orders from the Admin using the Braintree payment method. + * We've enhanced our PayPal and Braintree implementations so that merchants can now: * Save customer PayPal account information in the Braintree Vault when using Braintree as a service. This enhancement provides a secure method for charging my customers without prompting them to enter a payment information for multiple purchases or for purchases from multiple devices. We've also added support for Maestro and Discover BINs added to the credit card form both for Braintree and PayPal solutions. @@ -1292,94 +1666,121 @@ Thanks to our hardworking Magento Open Source community members for the followin * Configure dynamic descriptors (Company Name, Phone and URL) for Braintree. This enhancement supports customers easily identifying a source of transactions in their bank statements. (This will potential simplify the resolution of disputed transactions by supporting the display of the Kount status for Braintree in the Admin interface.) + * Kount and 3D Secure now work as expected for Braintree Vault. + * Magento now updates you as expected on order comments and order history after you initiate a refund using Braintree. Previously, when you clicked the **Refund** button (to initiate a refund), Magento did not redirect you to order comments and history information. + * You can now use Braintree as a payment method when applying reward points or store credit to an order. + * The Braintree payment method now works as expected with Vault table prefixing. + * Magento no longer encounters an error when using the Braintree Vault payment GET order API call. [GitHub-6215](https://github.com/magento/magento2/issues/6215) + * You can now use JCB and Diners Club credit cards with the Authorize.net payment method. + * Fixed issue with credit card capture information failing to remain associated with its first authorization. [GitHub-6716](https://github.com/magento/magento2/issues/6716) + * You can now successfully place orders with Braintree when using an alternative [merchant account](https://glossary.magento.com/merchant-account) ID. (The merchant account does not need to match the 3D Secure authorization merchant account.) [GitHub-5910](https://github.com/magento/magento2/issues/5910) -* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: -`Uncaught Error: [paypal-container] is not a valid DOM Element`. + +* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: `Uncaught Error: [paypal-container] is not a valid DOM Element`. + * The Braintree payment method now works as expected with Vault table prefixing. + * Merchants can now accept payment on a Suspected Fraud order without Magento altering the amount in Total Paid. Previously, when a merchant accepted payment for an order with a status of Suspected Fraud, Magento doubled the payment amount. -* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: -`Uncaught Error: [paypal-container] is not a valid DOM Element`. + +* Braintree no longer encounters an error during checkout when you apply a 100% discount coupon to a product and enable free shipping. Previously, Magento displayed a spinning loader widget, and your screen froze. The Developer console displayed this error: `Uncaught Error: [paypal-container] is not a valid DOM Element`. + * The Braintree PayPal locale now has its own setting. [GitHub-9639](https://github.com/magento/magento2/issues/9639) + * You can now modify the product quantities of a previous order and re-order it using the saved credit card information from the first order. #### PayPal + * We've improved and streamlined the [Magento Admin](https://glossary.magento.com/magento-admin) PayPal configuration interface. + * PayPal Payflow Pro now uses the currency you've specified in your store settings. Previously, Magento converted the total price into U.S. dollars, no matter which currency was specified in the store settings. + * We've fixed an issue with using PayPal Express Checkout to order products with custom options. Previously, although an Admin user could create and configure “File type” custom options, customers could not upload and store files within the order [quote](https://glossary.magento.com/quote). [GitHub-5434](https://github.com/magento/magento2/issues/5434) + * Fixed issue related to incorrect stock quantity calculation for bundle and configurable products during place order flow with PayPal Express Checkout. + * Third-party payment gateways are now visible from the Admin. [GitHub-7891](https://github.com/magento/magento2/issues/7891) + * Fixed issue with credit card capture information failing to remain associated with its first authorization. [GitHub-6716](https://github.com/magento/magento2/issues/6716) + * PayPal Express payments no longer fail when there is adequate product inventory to cover your order. Previously, you'd receive this error message: `We can't place the order`. [GitHub-6296](https://github.com/magento/magento2/issues/6296) + * Paypal errors no longer occur when Fixed Product Tax (FPT) is enabled. Previously, when a product had a FPT, Paypal Express reported an error when you tried to place the order. + * PayPal Payflow Pro now uses the currency you've specified in your store settings. Previously, Magento converted the total price into U.S. dollars, no matter which currency was specified in the store settings. + * When refunding an order from PayPal, Magento now creates a credit memo with the correct status. + * The exported sheet now generates or renders data for columns that indicate associations for configurable products. + * We’ve fixed errors in processing valid orders using a PayPal account that had been previously used to pay for a valid order that had problems during checkout. + * We’ve resolved a loader issue with Payflow Pro. The loader image is now invisible after redirecting to the payment page/success page or error page. [GitHub-7159](https://github.com/magento/magento2/issues/7159), [GitHub-9296](https://github.com/magento/magento2/issues/9296) + * PayPal Express checkout no longer discards address line 2 for billing and shipping addresses. [GitHub-8313](https://github.com/magento/magento2/issues/8313) + * The checkout page no longer freezes when you try to use PayPal to pay for a purchase that contains a downloadable product. Previously, a `PayPal.js` error occurred. [GitHub-7000](https://github.com/magento/magento2/issues/7000) ### Performance @@ -1387,348 +1788,453 @@ Thanks to our hardworking Magento Open Source community members for the followin This release includes substantial improvements to Magento caching, image processing, and re-indexing, among other enhancements. + * We've improved the speed of static asset deployment and now support a variety of asset deployment strategies that can be used to optimize speed and size of assets deployed. Indexers can now be run with 256M of PHP RAM and default MySQL configuration settings. Developers can further tune memory usage to improve indexer performance (in some cases up to 100% improvement). Please see [Magento Optimization Guide]({{ page.baseurl }}/config-guide/prod/prod_perf-optimize.html) for further details. + * We've improved [storefront](https://glossary.magento.com/storefront) performance when creating 2500 or more product variants. + * The processing speed of category URL rewrites for catalogs containing more than 20,000 products has greatly improved. + * Opening many products from the Admin interface is now faster. + * Creating many (2500 - 5000) product variants, both simple and complex [product types](https://glossary.magento.com/product-types) is more efficient. + * You can now quickly generate or preview multiple variations of a [configurable product](https://glossary.magento.com/configurable-product). (Saving these variations to the database can be time-consuming, if you have several thousand product options, and our efforts to improve performance continue.) Previously, Magento threw an Invalid Form key error is thrown while you tried to save a configurable product with variations. + * Magento no longer performs unnecessary file check operations (for example, `file_exists`, `is_file`), which improves the performance of the category and product pages. + * We've optimized compiler performance (that is, the [`setup:di:compile`]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-compiler.html) command). + * We’ve improved the performance of the Display Time for Category Edit page for catalogs with many products or categories. [GitHub-7469](https://github.com/magento/magento2/issues/7469) #### Image processing + * We've improved the process of resizing images on the [frontend](https://glossary.magento.com/frontend). + * The process of loading many configurable products with multiple images (for example, configurable products with three attributes and 250 options) is more efficient. [(GITHUB-6979)](https://github.com/magento/magento2/issues/6979){: target="_blank"} #### Caching + * Magento now caches image metadata, which avoids the time-consuming need to read images for [metadata](https://glossary.magento.com/metadata) loading. + * Magento now caches attribute options for the layered navigation feature. This reduces the number of queries to the database, and consequently improves performance. + * We’ve optimized and streamlined how we cache EAV attributes by removing unnecessary SQL queries. ### PHP + * PHPCS can now correctly parse the syntax of PHP 7.x return types. + * Cart Price rules are now applied as expected to [payment method](https://glossary.magento.com/payment-method) conditions. Previously, discounts set in Cart Price rules were not applied during [checkout](https://glossary.magento.com/checkout). ### Sample data + * Magento now handles the `catalog_product_entity_media_gallery_value.position` value the same whether you’ve installed or upgraded the product. Previously, these values differed depending upon whether you upgraded or freshly installed your Magento code. + * You can now successfully install Magento with sample data when **auto_increment_increment** is set to **3** in the `options` file. Previously, installation completed successfully, but Magento displayed this error: `Something went wrong while installing sample data. Please check var/log/system.log for details. You can retry installing the data now or just start using Magento.` ### SalesRule + * You can now select and add a category to a Cart Price rule. Previously, Magento displayed this error: "Uncaught ReferenceError: sales_rule_form is not defined", and did not add the selected category to the condition. [GitHub-5526](https://github.com/magento/magento2/issues/5526) + * A cart rule with a coupon code no longer overrides a cart rule without a coupon code when multiple [cart rules](https://glossary.magento.com/cart-rules) are applied. Previously, when you created two cart rules and applied them to a cart, the rule with a coupon was applied, but the second rule was not. [GitHub-6294](https://github.com/magento/magento2/issues/6294) + * The SalesRule table is the same whether you’ve freshly installed or updated Magento 2.2. + * Magento no longer discounts items that belong to an excluded category. Previously, you were unable to exclude products assigned to a specific category due to the cart price rule. + * The Cart Price rule now affects coupon life as expected. Previously, coupons did not persist longer than the current date if they did not have a designated end-date. + * Customers can no longer apply a coupon code twice. Previously, the "Uses per Coupon" limit did not work for auto-generated coupons. + * Magento now implements free shipping if there is a Cart Price Rule match. [GitHub-6584](https://github.com/magento/magento2/issues/6584) + * SalesRule now applies to auto-generated coupon codes as expected. + * You can now create a cart price rule without any date range restrictions. Previously, if you left the **From** and **To** dates empty, Magento filled them in with the current date. [GitHub-6762](https://github.com/magento/magento2/issues/6762), [GitHub-6122](https://github.com/magento/magento2/issues/6122) + * When you change the currency associated with store, Magento also adjusts the currency in all product listings. [GitHub-6746](https://github.com/magento/magento2/issues/6746) + * Non-administrative users with access rights to Products, Marketing, Promotions, and Cart Price rules can now search for categories in Cart Price rules. GitHub-6168](https://github.com/magento/magento2/issues/6168) + * Non-administrative users with access rights to Products, Marketing, Promotions, and Cart Price rules can now search for categories in Cart Price rules. GitHub-6168](https://github.com/magento/magento2/issues/6168) ### Scope + * Changing a product price under the website scope now updates the product price across all stores. Previously, any price you set on the [store view](https://glossary.magento.com/store-view) level overrode the price set in website scope. [GitHub-5133](https://github.com/magento/magento2/issues/5133) + * The list of allowed countries is now configured as part of website scope, not store view scope. [GitHub-2946](https://github.com/magento/magento2/issues/2946) + * A restricted user can now change storeview- or website- level attributes that are defined within his scope. + * You can now select the scope for an action that you are running from the Catalog page's product table. + * The price you set on the website scope no longer overrides any local settings you set on configurable products at the store view level. + * The Product page scope selector now displays all related websites associated with a restricted user. ### Search + * Out-of-stock items no longer erroneously appear in results of layered navigation if that product option is out-of-stock. + * Magento now factors in the Weight attribute as expected when you use advanced search on grouped products. + * The Elasticsearch indexer search-by-attribute functionality now works as expected. + * Elasticsearch does not throw errors when there are more than 100 searchable attributes or when user-defined price attributes are marked searchable. + * ElasticSearch now includes data about composite products in its search index. Previously, search results did not include this data. + * Magento now sends the `parent_id` of a deleted configurable product variation to ElasticSearch. Previously, Magento didn’t send this information to the ElasticSearch server if the simple product associated with a configurable product were changed. + * Segmentation faults no longer occur when doing a `catalogsearch_fulltext` re-index, and indexing succeeds. Previously, in a large database (more than 70,000 products), the `catalogsearch_fulltext` (MySQL) re-index failed with a `Segmentation fault` message. [GitHub-7963](https://github.com/magento/magento2/issues/7963) + * Magento now implements the Attribute Weight Boosting Function for Elasticsearch. + * Magento now handles special characters in an Elasticsearch request as expected. Previously, Magento displayed a MySQL syntax error in search requests that contained special characters. [GitHub-8335](https://github.com/magento/magento2/issues/8335) + * Attribute weighting now works correctly for the MySQL adapter. [GitHub-9020](https://github.com/magento/magento2/issues/9020) + * Magento no longer throws an indexing error when Elastic search is enabled. ### Shipping + * UPS now generates shipping rates for Puerto Rico postal codes. + * Magento now displays tracking information when selected for the second shipping label created for the DHL shipping method. Previously, when you tried to display a completed DHL shipping label, Magento displayed an exception. + * Refreshing your browser page while on the Review and Payments page of the checkout process no longer clears information from form fields. Previously, Magento cleared information from the **Ship to** field if you refreshed your browser page during this process. + * You can now reload a page during [checkout](https://glossary.magento.com/checkout) without unintentionally changing shipping information. + * You can now save the settings you enter when creating a shipping label on an existing shipment. Previously, clicking the **Save** button resulted in an error, and the shipping label was not saved. + * Added missing translation to label `argument xml`. *Fix submitted by community member Mr Khoa in pull request [9095](https://github.com/magento/magento2/pull/9095){: target="_blank"}.* + * Magento no longer throws a fatal error when you create a new shipment for a placed order. + * The State/Province field now changes to an input field as expected after you select United Kingdom when filling out the shipping address during checkout + * The Free Shipping rule now works as expected with table rate shipping.[GitHub-6346](https://github.com/magento/magento2/issues/6346) + * Magento now passes the correct object to the `\Magento\Shipping\Model\Shipping::collectRatesByAddress` method. [GitHub-7309](https://github.com/magento/magento2/issues/7309) + * Magento now displays the checkout page or cart as expected when you try to edit a virtual item from the multi shipping page. Previously, Magento displayed a 404 error page instead of redirecting to the checkout page or shopping cart. [GitHub-7257](https://github.com/magento/magento2/issues/7257) + * Magento now displays UPS rates on the initial load of the checkout page. Previously, although shipping rates showed up properly at the cart level, the payment page did not load the correct shipping options. [GitHub-6564](https://github.com/magento/magento2/issues/6564) + * We've resolved an issue where Magento did not display applicable flat-rate USPS box methods during checkout. [GitHub-6798](https://github.com/magento/magento2/issues/6798) + * The Free Shipping rule now works as expected with table rate shipping. [GitHub-6346](https://github.com/magento/magento2/issues/6346) ### Sitemap + * Sitemap image URLs now match the URLs on product pages. *Fix submitted by community member Petar Sambolek in pull request [9082](https://github.com/magento/magento2/pull/9082){: target="_blank"}.* + * The sitemap is no longer generated in the wrong folder when `vhost` is connected to `/pub`. *Fix submitted by community member Joseph Maxwell in pull request [9094](https://github.com/magento/magento2/pull/9094){: target="_blank"}.* ### Staging + * The [CMS](https://glossary.magento.com/cms) page now refreshes as expected after an update. + * Magento no longer creates extraneous database values when you schedule new Staging updates. + * Magento no longer performs unnecessary staging-related flag operations on the Category page. Previously, Magento performed staging-related flag operations even when the Staging [module](https://glossary.magento.com/module) was not used. + * You can now delete updates from a campaign's page [entity](https://glossary.magento.com/entity) grid. + * You can now create a staging update for a product that contains a unique attribute in its attribute set. Previously, under these conditions, Magento displayed this error: `The value of attribute "test" must be unique’`. + * You can now install Magento Commerce without staging modules. + * The Magento flat indexer no longer throws an error after flat tables are enabled and reindexed. This fix applies to both product and [catalog](https://glossary.magento.com/catalog) tables. It also now collects correct product data for `ROW_ID` + * The staging dashboard now loads without error when you sort by status on the dashboard. Previously, the staging dashboard broke and remained in an infinite loop when you attempted to sort by status on the dashboard. + * You can now preview an update from the dashboard and click on links and see how the entire instance would look like for a store between some dates. Previously, the links from the Preview page were broken. + * Magento now displays the correct content on the preview page for a scheduled update. + * Magento now applies all scheduled product changes to all scopes. + * The view/edit option for a scheduled change is now available for the duration that the scheduled change is in progress. Previously, you could not view or edit a scheduled change when it was in progress, which left no way to edit or remove it. + * You can now create a new scheduled update for a product. Previously. when you tried to create an update, Magento displayed this error: `Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'.` + * Magento now displays the correct date and time for staging updates. Previously, when your current time in Daylight Saving time, and your target time was in Standard time, your target time was incorrect. + * Magento now correctly assigns images to duplicated products. + * Scheduled Update no longer removes simple variations from Configurable products. Previously, if you set up a scheduled update to toggle the **New** setting on a configurable product, Magento removes all simple variations from the configurable product once the update takes effect. + * Content staging values for fields are now saved in database. + * When you import products that exist in the CSV file, but not on the store (including categories), Magento now populates the categories as expected. + * Magento no longer deletes images associated with categories scheduled for update after you modify the image. + * Once the time frame for the scheduled update has passed, Magento removes the special price and displays the original price. + * You can now remove a product or category from a campaign. + * You can now preview a scheduled update for a category that contains a recently viewed block. + * We’ve resolved a scheduling issue that previously resulted in Magento displaying a 404 error on most frontend pages. This occurred if you deleted a Catalog Rule with an end date, then ran an update. + * You can now save simple products created in 2.0.x environments after upgrading to environments running Magento 2.1.x. Previously, you could not successfully save the opened product after upgrading. ### Static file processing + * We've corrected a problem with `_requirejs` asset retrieval via `static.php` in [static content](https://glossary.magento.com/static-content) versioning. + * Versioning of [static files](https://glossary.magento.com/static-files) (including CSS, JS, font, and image files) is now enabled by default. + * We've improved the speed of static asset deployment. See [Deploy static view files]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-static-view.html){: target="_blank"} for more information about available options. + * The `setup:static-content:deploy` command now provides flags that you can use to exclude or include individual themes, areas, and locales. For more information, see [GitHub-4294](https://github.com/magento/magento2/issues/4294). ### Swatches + * Magento no longer creates redundant objects when initializing a configurable product on the Category page. + * You can now disable swatches for both the [Catalog](https://glossary.magento.com/catalog) page and search results (quick or advanced). To disable swatches from these requests, disable **Stores > Settings > Configuration > Catalog > Storefront > Show Swatches in Product List**. + * We've optimized the logic that Magento uses to validate swatch attributes. + * Magento now caches swatch data in the block cache, which improves the responsiveness of the configurable product pages. + * Magento now correctly matches images to products. Previously, after you selected a configurable product, Magento displayed the images for another product. + * Magento no longer displays a notice error when you create a text swatch attribute while the **update product preview image** setting is set to **Yes**. *Fix submitted by community member Pascal Brouwers in pull request [6707](https://github.com/magento/magento2/pull/6707){: target="_blank"}.* ### TargetRule + * Magento now displays Up-sells on the Product page. + * We’ve fixed an SQL error that previously caused a logical error during the creation of a TargetRule. (This issue affected the `modifyConditionByCategoryIdsAttribute` function.) ### Tax + * Magento now correctly calculates tax and order totals when a discount is used for prices that include tax and catalog prices excluding tax. Please note this is not a valid tax configuration and can introduce rounding errors. + * We’ve improved the performance of the Tax Rules form in installations containing many tax rates. + * You can now create a tax rule when running Magento in Mozilla Firefox and Internet Explorer. Previously, you could not select a tax rate, and Magento displayed an error. + * The `tax_region_id` value is no longer hard-coded in the `\Magento\Tax\Setup\InstallData` file. ### Testing + * We've fixed a fatal issue that occurred if you executed the CatalogImportExport test before running a subsequent test. Previously, you'd receive this error: ```Failed asserting that false is true```. + * We've fixed a fatal issue that occurred if you ran Travis builds on `imagettfbbox 2.1.2`. Previously, you'd receive this error: ```terminal @@ -1736,131 +2242,169 @@ This release includes substantial improvements to Magento caching, image process ``` + * `StdoTest` is now marked as skipped. *Fix submitted by community member David Manners in pull request [8487](https://github.com/magento/magento2/pull/8487){: target="_blank"}.* ### Tier pricing + * Magento now correctly calculates the tier price percentage when displayed prices include tax. [GitHub-8833](https://github.com/magento/magento2/issues/8833) + * Magento no longer resets the tier price during [quote](https://glossary.magento.com/quote) recalculation. Previously, when you triggered an automatic quote recalculation (by changing the shipping address, for example), the tier price was lost. (This issue occurred only if the product record in the database had values for `row_id` and `entity_id` that didn't match.) + * Magento no longer adds a thousands separator ( , ) to representations of quantities that exceed 1000. [GitHub-5745](https://github.com/magento/magento2/issues/5745) + * Tier pricing now works correctly with full page cache. [GitHub-5364](https://github.com/magento/magento2/issues/5364) ### Translation and locales + * String localizations now work as expected when phrases include text wrapped with single quotation marks. + * Translations now work for layered navigation attribute options. *Fix submitted by community member Pieter Hoste in pull request [9873](https://github.com/magento/magento2/pull/9873){: target="_blank"}.* ### URL rewrites + * You can now successfully create a product and assign it to a store without encountering the following error: `Unique constraint violation found`. [GitHub-6671](https://github.com/magento/magento2/issues/6671) + * The `catalog_url_rewrite_product_category` table is the same whether you’ve freshly installed or updated Magento 2.2. + * You can now assign products to a category when **Match Products by rule** is enabled. + * The **Use default URL Key** setting now works on the store-view level. + * You no longer need to delete the URL rewrite to force Magento to display links after adding pages to the CMS hierarchy. Previously, when you added new pages to the CMS hierarchy, Magento did not show the links to the new pages until you deleted the URL rewrites. + * We've fixed several issues with how Magento processes URLs with trailing slashes. *Fix submitted by community member Ihor Sviziev in pull request [10043](https://github.com/magento/magento2/pull/10043){: target="_blank"}.* + * Admin users can no longer create an empty URL key for a category. Previously, Magento let Admin users create an empty URL key, which lead to category-related errors. + * Magento now rewrites URLs as expected when you save a product while running Magento in single-store mode. [GitHub-5929](https://github.com/magento/magento2/issues/5929) + * Magento now rewrites URLs as expected when you save a CMS page while running Magento in single-store mode. [GitHub-5923](https://github.com/magento/magento2/issues/5923) + * URL rewrites are now correctly generated for multiple store views during product import. [GitHub-8396](https://github.com/magento/magento2/issues/8396) + * Magento now rewrites URLs as expected when you save a CMS page while running Magento in single-store mode. [GitHub-5923](https://github.com/magento/magento2/issues/5923) ### Varnish + * We've changed the behavior of the Varnish X-header. Only the parent (meta) SKU is now included in the list -- not the SKUs of all child products. [GitHub-6401](https://github.com/magento/magento2/issues/6401) + * Varnish no longer caches Cookie Restriction Mode Overlay. *Fix submitted by community member Bernhard in pull request 9711.* * Varnish now supports `grace` and `saint` mode to ensure that customers always see cached pages. + * Viewing the page with HTTPS instead of HTTP no longer causes the Category menu to disappear in installations using Varnish cache. [GitHub-4540](https://github.com/magento/magento2/issues/4540) ### Visual Merchandiser + * The order of products in a category display no longer changes when you add a new product to the category. + * Visual Merchandiser `Match products by rule` now works as expected. ### Web API + * You can now use REST to add video to a product description. [GitHub-7153](https://github.com/magento/magento2/issues/7153) + * The `PUT /V1/products/:sku/media/:entryId` correctly updates a product's media gallery and image role. + * A null value may now be specified to unset the `special_price` attribute. + * The Swagger documentation erroneously indicated that search queries can return detailed information about multiple objects. The description of these APIs now state which API to use to return detailed information about a single object. + * You can now use REST to successfully update customer information without unintentionally deleting default billing and shipping address information. + * You can now use a REST request to retrieve a shopping cart that contained a product with custom options. Previously, you could not use a REST request to retrieve a shopping cart that contained a product with custom options. + * The `PUT /V1/products/:sku/media/:entryId` correctly updates a product's media gallery and image role. + * Searching for products via REST API using a store code in the URL returns products from all stores. [GitHub-8121](https://github.com/magento/magento2/issues/8121) + * You can now use the REST API to create a configurable product with a linked child product. [(GITHUB-5243)](https://github.com/magento/magento2/issues/5243){: target="_blank"} + * The REST API now successfully handles attribute options that start with a number. [GitHub-5715](https://github.com/magento/magento2/issues/5715) + * We’ve fixed an issue with the REST API that previously resulted in the PayPal gateway rejecting requests. [GitHub-10410](https://github.com/magento/magento2/issues/10410) + * You can now save a billing address using the REST ’useForShipping' parameter. Previously use of the parameter resulted in a Rest API V1 error. [GitHub-6557](https://github.com/magento/magento2/issues/6557), [GitHub-5180](https://github.com/magento/magento2/issues/5180) + * We’ve resolved issues updating `default_frontend_label` using REST. [GitHub-5963](https://github.com/magento/magento2/issues/5963) + * Magento now sends REST multiselect attribute values in compatible formats. Previously, putting an unchanged GET returned errors on the multiselect attribute, and the only way to clear a multi-select field of all selections was to delete the product and re-create it. [GitHub-6120](https://github.com/magento/magento2/issues/6120) + * The REST API now successfully handles attribute options that start with a number. [GitHub-5715](https://github.com/magento/magento2/issues/5715) ## Community contributions diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.1CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.1CE.md index f9d842efc14..11287807c77 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.1CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.1CE.md @@ -33,144 +33,185 @@ See [Magento Security Center](https://magento.com/security/patches/magento-221-2 ### Installation, upgrade, deployment + * We’ve improved the message that Magento displays during upgrade if any schema or data version in the `setup_modules` database is higher than the current module version in the code. *Fix submitted by community member Fabian Schmengler in pull request 11064.* + * 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”. [GitHub-9955](https://github.com/magento/magento2/issues/9955) + * We’ve resolved a fatal error in the repository generator. Both `InputException` and `NoSuchEntityException` now require a Phrase object as their first constructor argument. [GitHub-10601](https://github.com/magento/magento2/issues/10601) ### Catalog + * Magento now displays products that are filtered to a particular store view even when the corresponding store view has been deleted. Previously, Magento displayed a continuously spinning spinner widget and this error message: **A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.** + * `LowestPriceOptionsProvider` now returns products with the `tax_class_id` attribute, which is used for price calculation operations such as tax adjustment. [GitHub-6729](https://github.com/magento/magento2/issues/6729), [GitHub-6457](https://github.com/magento/magento2/issues/6457), [GitHub-7362](https://github.com/magento/magento2/issues/7362) + * The grouped product page now shows the lowest price for a simple product. [GitHub-9266](https://github.com/magento/magento2/issues/9266) + * We’ve fixed an issue with `priceScope` that had resulted in the storefront not displaying product prices that should be displayed. ### Configurable products + * Magento no longer displays the 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. + * Configurable products no longer show up on category page when all children are disabled by a mass action, and the **display out-of-stock products** setting is off. + * If a configurable product is part of a shipment that is being created by REST, only the parent's quantity will count towards the total quantity of shipped items. Previously, Magento counted both child and parent products when calculating quantity. ### Frameworks + * You can now run Magento in an environment where Redis cache is installed and the PHPRedis extension is enabled. + * Magento now properly loads default values for `ArraySerialized` fields. + * You can now set a default value to fields with config field type `image` or `file`. [GitHub-10253](https://github.com/magento/magento2/issues/10253) + * We’ve removed `Zend_Json` from the data object, test suite, and package information. [GitHub-10306](https://github.com/magento/magento2/issues/10306), [GitHub-10320](https://github.com/magento/magento2/issues/10320), [GitHub-10340](https://github.com/magento/magento2/issues/10340) + * We’ve replaced the usage of `Zend_Json::encode` in the setup marketplace tests. [GitHub-10329](https://github.com/magento/magento2/issues/10329) + * We’ve removed the usage of `Zend_Json` from the JSON controller. [GitHub-10342](https://github.com/magento/magento2/issues/10342) + * We’ve removed `Zend_Json` from `Setup/Migration.php`. [GitHub-10341](https://github.com/magento/magento2/issues/10341) + * We have replaced `Zend_Json` with `\Magento\Framework\Serialize\JsonConverter::convert` in customer data. [GitHub-10259](https://github.com/magento/magento2/issues/10259) ### General + * We've fixed JavaScript date validation on the storefront. Previously, validation of the date of birth field during customer registration when changing the default locale did not work. *Fix submitted by community member Joachim Vanthuyne in pull request 11067.* + * We’ve added a CSS selector to remove an additional top-margin that was rendered when you added a link widget to the footer in the Luma theme. Previously, when you added new footer links, the block of footer links did not line up with the default footer links. *Fix submitted by community member Sandro Wagner in pull request 11063.* + * String localizations now work as expected when phrases include text wrapped with single quotation marks. + * PHPCS can now correctly parse the syntax of PHP 7.x return types. + * You can now generate unsecured URLs even when the current URL is secure. + * The Checkout authentication popup now contains the correct message. [GitHub-9533](https://github.com/magento/magento2/issues/9533), [GitHub-10627](https://github.com/magento/magento2/issues/10627) + * The **Reset** button no longer causes a JavaScript error on the URL rewrite creation page. [GitHub-10462](https://github.com/magento/magento2/issues/10462) + * Websites that conduct transactions in multiple currencies can now send currency to Google Analytics. [GitHub-10508](https://github.com/magento/magento2/issues/10508) + * The Products Ordered report now shows the simple (child) products of configurable products. + * Creating a new product with a custom attribute set now works as expected. [GitHub-10565](https://github.com/magento/magento2/issues/10565), [GitHub-10575](https://github.com/magento/magento2/issues/10575) + * Cookie lifetime works as expected when you set the form_key value to zero (0). [GitHub-10528](https://github.com/magento/magento2/issues/10528) + * We’ve fixed an issue where Magento did not retrieve relevant data when displaying reviews if `$displayIfNoReviews` was set to false. [GitHub-4530](https://github.com/magento/magento2/issues/4530) + * You can now remove the system customer address and customer attributes from specific forms and prevent them from displaying on the frontend. ### Indexing + * We’ve fixed multiple issues where indexes were invalidated as a result of typical import, scheduled import, and catalog permission tasks. ### Orders + * You can now use PayPal Express Checkout to place an order in a split-database environment. + * If a credit card error occurs on an order, the user can now correct the error and successfully create a new order. Previously, Magento displayed the following error on any subsequent order, even when you entered accurate credit card information: "A customer with the same email already exists in an associated website”. + * We’ve added a `name` attribute to the layout default renderer, and you can now add a new column to the Admin Sales > Order table . Previously, the layout default renderer lacked a `name` attribute. *Fix submitted by community member Gabriel Somoza in pull request 11076.* ### Payment methods + * Double-clicking the **Place Order** button when using the Braintree payment method to place an order no longer creates duplicate order requests. [GitHub-10767](https://github.com/magento/magento2/issues/10767) + * Magento now completes processing an order if the customer needs to re-enter credit card information during the order process. Previously, Magento returned this error `No such entity with customerId = 0`. ### Search + * Search terms from the same synonym group now return the same results. + * A search query results are now more consistent. Previously, identical search terms entered in different browser tabs resulted in different search results. + * You can now search for attribute values on the store-view level. ### Sitemap + * Sitemap no longer crashes if the scope of the name attribute is set to global. [GitHub-5941](https://github.com/magento/magento2/issues/5941), [GitHub-8999](https://github.com/magento/magento2/issues/8999) ## Community contributions diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.1EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.1EE.md index 007c6358edc..15a544d6a81 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.1EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.1EE.md @@ -33,188 +33,241 @@ See [Magento Security Center](https://magento.com/security/patches/magento-221-2 ### Installation, upgrade, deployment + * We’ve improved the message that Magento displays during upgrade if any schema or data version in the `setup_modules` database is higher than the current module version in the code. *Fix submitted by community member Fabian Schmengler in pull request 11064.* + * If you do not specify `—base_url` during installation, all URLs now use the host and port of the current request to create URLs. + * 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”. [GitHub-9955](https://github.com/magento/magento2/issues/9955) + * We’ve resolved a fatal error in the repository generator. Both `InputException` and `NoSuchEntityException` now require a Phrase object as their first constructor argument. [GitHub-10601](https://github.com/magento/magento2/issues/10601) ### AMQP + * The `inventoryQtyCounter` consumer now works without having RabbitMQ installed. ### Catalog + * Magento now displays products that are filtered to a particular store view even when the corresponding store view has been deleted. Previously, Magento displayed a continuously spinning spinner widget and this error message: **A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.** + * You can now save custom shared catalogs. + * Magento no longer displays a 404 error when you change category permissions from Product Detail pages when multistore view is enabled. + * `LowestPriceOptionsProvider` now returns products with the `tax_class_id` attribute, which is used for price calculation operations such as tax adjustment. [GitHub-6729](https://github.com/magento/magento2/issues/6729), [GitHub-6457](https://github.com/magento/magento2/issues/6457), [GitHub-7362](https://github.com/magento/magento2/issues/7362) + * The grouped product page now shows the lowest price for a simple product. [GitHub-9266](https://github.com/magento/magento2/issues/9266) + * We’ve fixed an issue with `priceScope` that had resulted in the storefront not displaying product prices that should be displayed. ### Cart and checkout + * Magento now provides a **Login** button so that you can resume your checkout process if you return to the check out page after leaving it mid-order. ### Configurable products + * Magento no longer displays the 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. + * Configurable products no longer show up on category page when all children are disabled by a mass action, and the **display out-of-stock products** setting is off. + * If a configurable product is part of a shipment that is being created by REST, only the parent's quantity will count towards the total quantity of shipped items. Previously, Magento counted both child and parent products when calculating quantity. + * Configurable product pricing now reflects only in-stock configurations as expected. ### Frameworks + * You can now run Magento in an environment where Redis cache is installed and the PHPRedis extension is enabled. + * Magento now properly loads default values for `ArraySerialized` fields. + * You can now set a default value to fields with config field type `image` or `file`. [GitHub-10253](https://github.com/magento/magento2/issues/10253) + * We’ve removed `Zend_Json` from the data object, test suite, and package information. [GitHub-10306](https://github.com/magento/magento2/issues/10306), [GitHub-10320](https://github.com/magento/magento2/issues/10320), [GitHub-10340](https://github.com/magento/magento2/issues/10340) + * We’ve replaced the usage of `Zend_Json::encode` in the setup marketplace tests. [GitHub-10329](https://github.com/magento/magento2/issues/10329) + * We’ve removed the usage of `Zend_Json` from the JSON controller. [GitHub-10342](https://github.com/magento/magento2/issues/10342) + * We’ve removed `Zend_Json` from `Setup/Migration.php`. [GitHub-10341](https://github.com/magento/magento2/issues/10341) + * We have replaced `Zend_Json` with `\Magento\Framework\Serialize\JsonConverter::convert` in customer data. [GitHub-10259](https://github.com/magento/magento2/issues/10259) ### General + * We've fixed JavaScript date validation on the storefront. Previously, validation of the date of birth field during customer registration when changing the default locale did not work. *Fix submitted by community member Joachim Vanthuyne in pull request 11067.* + * We’ve added a CSS selector to remove an additional top-margin that was rendered when you added a link widget to the footer in the Luma theme. Previously, when you added new footer links, the block of footer links did not line up with the default footer links. *Fix submitted by community member Sandro Wagner in pull request 11063.* + * You can now remove system customer address and customer attributes from specific forms to prevent them from displaying on the frontend. + * String localizations now work as expected when phrases include text wrapped with single quotation marks. + * PHPCS can now correctly parse the syntax of PHP 7.x return types. + * You can now remove custom attributes from the Use in Forms grid. + * You can now generate unsecured URLs even when the current URL is secure. + * The Checkout authentication popup now contains the correct message. [GitHub-9533](https://github.com/magento/magento2/issues/9533), [GitHub-10627](https://github.com/magento/magento2/issues/10627) + * The **Reset** button no longer causes a JavaScript error on the URL rewrite creation page. [GitHub-10462](https://github.com/magento/magento2/issues/10462) + * Websites that conduct transactions in multiple currencies can now send currency to Google Analytics. [GitHub-10508](https://github.com/magento/magento2/issues/10508) + * The Products Ordered report now shows the simple (child) products of configurable products. + * Creating a new product with a custom attribute set now works as expected. [GitHub-10565](https://github.com/magento/magento2/issues/10565), [GitHub-10575](https://github.com/magento/magento2/issues/10575) + * Cookie lifetime works as expected when you set the form_key value to zero (0). [GitHub-10528](https://github.com/magento/magento2/issues/10528) + * We’ve fixed an issue where Magento did not retrieve relevant data when displaying reviews if `$displayIfNoReviews` was set to false. [GitHub-4530](https://github.com/magento/magento2/issues/4530) + * You can now remove the system customer address and customer attributes from specific forms and prevent them from displaying on the frontend. ### Indexing + * We’ve fixed multiple issues where indexes were invalidated as a result of typical import, scheduled import, and catalog permission tasks. ### Orders + * You can now use PayPal Express Checkout to place an order in a split-database environment. + * If a credit card error occurs on an order, the user can now correct the error and successfully create a new order. Previously, Magento displayed the following error on any subsequent order, even when you entered accurate credit card information: "A customer with the same email already exists in an associated website”. + * We’ve added a `name` attribute to the layout default renderer, and you can now add a new column to the **Admin Sales > Order table**. Previously, the layout default renderer lacked a `name` attribute. *Fix submitted by community member Gabriel Somoza in pull request 11076.* ### Payment methods + * Double-clicking the **Place Order** button when using the Braintree payment method to place an order no longer creates duplicate order requests. [GitHub-10767](https://github.com/magento/magento2/issues/10767) + * Magento now completes processing an order if the customer needs to re-enter credit card information during the order process. Previously, Magento returned this error `No such entity with customerId = 0`. ### Search + * Search terms from the same synonym group now return the same results. + * A search query results are now more consistent. Previously, identical search terms entered in different browser tabs resulted in different search results. + * You can now search for attribute values on the store-view level. + * Magento now displays grouped products in the Shared Catalog page when Elasticsearch is enabled. ### Sitemap + * Sitemap no longer crashes if the scope of the name attribute is set to global. [GitHub-5941](https://github.com/magento/magento2/issues/5941), [GitHub-8999](https://github.com/magento/magento2/issues/8999) ### Staging + * Bundle simple products now reflect expected changes after a scheduled update. ### Visual Merchandiser + * We’ve improved the performance of editing or saving products in large categories (more than 18,000 products per category). + * Visual Merchandiser now retains page view options and position after you remove a product. Previously, when you removed a product from a category, and you weren't on the first page, Magento returned you to the first page. ## Community contributions diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.2CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.2CE.md index e9347c40d13..b4e2e1b1176 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.2CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.2CE.md @@ -48,440 +48,573 @@ Looking for more information on these new features as well as many others? Check ### Installation, setup, and deployment + * We've increased the `memory_limit` of the `.user.ini` files to 2GB. [GitHub-11322](https://github.com/magento/magento2/issues/11322) + * The contents of the `js-translation.json` files are now correct when you deploy static content with multiple locales. + * All cron dates are now saved in a single format and displayed according to user preference or needs. [GitHub-4237](https://github.com/magento/magento2/issues/4237) + * Static versioning and minification no longer break email font styles. [GitHub-8241](https://github.com/magento/magento2/issues/8241) + * You can now successfully upgrade from 2.1.x to 2.2.0. Previously, when you tried to upgrade from 2.1.9 to 2.2.0, Magento displayed the **postcode is a required field** error message, and `setup:upgrade` failed. *Fix submitted by Mr. Lewis in pull request 11651*. [GitHub-11095](https://github.com/magento/magento2/issues/11095) + * We've replaced `FollowSymLinks` with `SymLinksIfOwnerMatch` in the `htaccess` templates. [GitHub-10811](https://github.com/magento/magento2/issues/10811) + * The `htaccess` template now supports `apache2.4` commands. *Fix submitted by Jonas Hünig in pull request 11459*. [GitHub-10810](https://github.com/magento/magento2/issues/10810) [GitHub-10810](https://github.com/magento/magento2/issues/10810) + * `configVariables` now contains a variable for VAT numbers. *Fix submitted by JeroenVanLeusden in pull request 11486*. [GitHub-10996](https://github.com/magento/magento2/issues/10996) + * 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. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11591*. [GitHub-11586](https://github.com/magento/magento2/issues/11586) + * You can now install and uninstall `cron` via the `bin/magento cron:install` command. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11359*. + * The `admin:user:create` command now recognizes the configured table prefix. *Fix submitted by Oscar Recio in pull request 11199*. [GitHub-11176](https://github.com/magento/magento2/issues/11176) + * The default cron success or failure history is now seven days. *Fix submitted by Max Chadwick in pull request 11505*. + * The `admin:user:create` command now asks for the input value if a required option is not passed. *Fix submitted by Christian Münch in pull request 11510*. + * The `.user.ini` files at `/.user.ini` and `/pub/.user.ini` now specify a `memory_limit` value of at least 1G to 2G for debugging purposes. *Fix submitted by Mr. Lewis in pull request 11734*. [GitHub-11322](https://github.com/magento/magento2/issues/11322) + * The `setup:install` command now has an `-i` flag. It validates parameters interactively. *Fix submitted by Denis Ristic in pull request 11425*. + * Magento now restarts cron jobs as needed after a cron job was terminated during execution. ### Catalog + * You can now enter strings that exceed 255 characters in Admin or frontend input fields. Previously, Magento saved only the first 255 characters of a long input string. [GitHub-6238](https://github.com/magento/magento2/issues/6238) + * Magento now renders color attribute swatches correctly for the search result page if sorting for color attribute is enabled. *Fix submitted by Roman K. in pull request 12077*. [GitHub-10628](https://github.com/magento/magento2/issues/10628) + * 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 no longer duplicates attribute option values. Previously, Magento did not confirm the uniqueness of an attribute option value if you created it using REST. [GitHub-8846](https://github.com/magento/magento2/issues/8846) + * Magento now saves the correct background color for images. Previously, product images always had a black background when using the Luma theme. [GitHub-8799](https://github.com/magento/magento2/issues/8799) + * You can now save a product custom option price with a value of 0 (zero) by simply not entering a price. *Fix submitted by Raul Mateos in pull request 11843*. [GitHub-4808](https://github.com/magento/magento2/issues/4808) + * You can now assign products to categories if those products are already assigned to the category tree. [GitHub-8970](https://github.com/magento/magento2/issues/8970) + * The `apply_to` setting for attributes is no longer hard-coded. [GitHub-7225](https://github.com/magento/magento2/issues/7225) + * The **Add-to-cart** checkboxes in Related Products are no longer visible on the storefront when **$canItemsAddToCart** is set to **false**. *Fix submitted by Marc Rodriguez in pull request 11610*. [GitHub-6891](https://github.com/magento/magento2/issues/6891) + * You can now successfully save and duplicate a simple product. Previously, when you clicked the **Save and Duplicate** option for an existing simple product in the Catalog Manager, Magento did not duplicate the product, but threw an error. *Fix submitted by Roman K. in pull request 12001*. [GitHub-11532](https://github.com/magento/magento2/issues/11532) + * The Magento Admin Product Edit page now displays product alerts as expected. *Fix submitted by Raul Mateos in pull request 11445*. [GitHub-10007](https://github.com/magento/magento2/issues/10007) + * 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 in pull request 11500*. [GitHub-7678](https://github.com/magento/magento2/issues/7678) + * The `$sortByPostion` flag has been added to the `getChildren()` method. *Fix submitted by Denis Ristic in pull request 11342*. [GitHub-11310](https://github.com/magento/magento2/issues/11310) + * `ProductRepository` SKU cache is no longer corrupted when `cacheLimit` is reached . *Fix submitted by Thomas in pull request 11553*. + * Magento no longer displays the perpetual spinner when you switch custom options types in the Product Edit page. *Fix submitted by Paul Briscoe in pull request 11824*. [GitHub-10291](https://github.com/magento/magento2/issues/10291) ### Cart and checkout + * The default shipping-save-processor now has a payload extender. This feature allows third party extensions to modify the payload for the shipping address selection process. As a result, developers can now add `extension_attributes` while minimizing potential extension conflicts. *Fix submitted by Navarr Barnier in pull request 11249*. + * You can now view the **Products in cart** report if the cart contains a bundle or a grouped product. Previously, when you viewed the Products in Cart report, Magento threw an exception under these conditions. [GitHub-12079](https://github.com/magento/magento2/issues/12079) + * Magento now recognizes zip codes without spaces for addresses located in the Netherlands. [GitHub-11898](https://github.com/magento/magento2/issues/11898) + * Magento now accepts coupon codes with special characters during checkout. *Fix submitted by Gabriel Queiroz Silva in pull request 11710*. [GitHub-9763](https://github.com/magento/magento2/issues/9763) + * We've improved cache control headers. + * Magento no longer throws an exception when you place an order using a new address. Previously, Magento displayed this error, **An error occurred on the server. Please try to place the order again.**. [GitHub-10583](https://github.com/magento/magento2/issues/10583) + * 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. *Fix submitted by David Verholen in pull request 11421*. [GitHub-11022](https://github.com/magento/magento2/issues/11022) + * Magento no longer sets the product price to zero when you use REST to add a product to an empty cart. Previously, Magento displayed an error when you used REST to populate an empty cart. *Fix submitted by Peter Jaap Blaakmeer in pull request 11458*. [GitHub-2991](https://github.com/magento/magento2/issues/2991), [GitHub-2991](https://github.com/magento/magento2/issues/2991) + * You can now translate the placeholder text for the checkout password field. *Fix submitted by JeroenVanLeusden in pull request 11493*. + * Magento now redirects a user to the checkout page if he logs in after selecting the **Checkout** button. Previously, a user was redirected to the store home page. *Fix submitted by [@p-bystritsky](https://github.com/p-bystritsky) in pull request 11876*. [GitHub-10834](https://github.com/magento/magento2/issues/10834) ### Configurable products + * `Magento\ConfigurableProduct\Model\Product\Type\Configurable:::loadUsedProducts` no longer ignores array keys that are returned by product collections. [GitHub-11880](https://github.com/magento/magento2/issues/11880) ### Frameworks + * The NGINX configuration sample now contains a health check. *Fix submitted by Andrew Howden in pull request 11690*. [GitHub-11157](https://github.com/magento/magento2/issues/11157) + * Magento now allows underscore characters in module names and also permits their use when modules add a block to the layout via XML. Previously, Magento did not support underscore characters in module names to be added to the layout via XML. *Fix submitted by Ben Tideswell in pull request 11765*. + * You can now save using the mass action **Update attributes** option when multiselect attributes are set. *Fix submitted by Manu Gonzalez Rodriguez in pull request 11349*. [GitHub-11329](https://github.com/magento/magento2/issues/11329) #### App framework + * Magento now correctly handles all meta keywords and description in categories and in every product in locales that use non-Latin characters. [GitHub-10682](https://github.com/magento/magento2/issues/10682) + * You can now include negative values in an XML export file and open the file with Office XML handler. Previously, the export files did not open correctly, and an Office XML handler error log was created. *Fix submitted by hauso in pull request 11757*. [GitHub-11729](https://github.com/magento/magento2/issues/11729), [GitHub-11729](https://github.com/magento/magento2/issues/11729) + * The Magento custom URL rewrite functionality now works as expected when you include redirection of Magento controllers. *Fix submitted by Marc Rodriguez in pull request 11470*. [GitHub-10231](https://github.com/magento/magento2/issues/10231), [GitHub-11469](https://github.com/magento/magento2/issues/11469), [GitHub-11471](https://github.com/magento/magento2/issues/11471) + * Magento now supports the setting of HTTP response status code in redirected responses. [GitHub-9028](https://github.com/magento/magento2/issues/9028) + * Magento now throws a meaningful exception when a virtual theme does not have a physical parent theme. *Fix submitted by David Fecke in pull request 11240*. + * `app:config:dump` no longer adds an extra space to multiline array values. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11439*. [GitHub-11328](https://github.com/magento/magento2/issues/11328) + * The TRAVIS_BRANCH variable is now surrounded by double-quotes instead of single-quotes . *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11704*. + * The doc block of `setValue` in FilterBuilder now reflects that the `setValue` method will accept an array. *Fix submitted by ByteCreation in pull request 11854*. + * `htaccess` syntax now uses `Options -Indexes` instead of `Options All -Indexes`. Previously, Magento used `Options All -Indexes`, which resulted in Magento rendering a 500 error page because of high restrictions for Options overrides in shared hosting environments. *Fix submitted by [@Danny Verkade - Cream](https://github.com/dverkade) in pull request 11327*. [GitHub-10812](https://github.com/magento/magento2/issues/10812) #### Configuration framework + * The X-Magento-Tags header can now contain white space. *Fix submitted by Malyovanets Nickolas in pull request 11767*. [GitHub-7640](https://github.com/magento/magento2/issues/7640), [GitHub-7640](https://github.com/magento/magento2/issues/7640) + * 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 in pull request 11643*. #### JavaScript framework + * 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](https://github.com/magento/magento2/issues/10562), [GitHub-6733](https://github.com/magento/magento2/issues/6733) + * Magento now exports the Confirmed email and Account Lock values when you export customer data. Previously, this information was missing from the exported CSV. *Fix submitted by Luke Rodgers in pull request 11437*. [GitHub-10765](https://github.com/magento/magento2/issues/10765), [GitHub-10765](https://github.com/magento/magento2/issues/10765) + * You can now submit the search form from the keyboard. *Fix submitted by Romain Ruaud in pull request 11250*. [GitHub-10275](https://github.com/magento/magento2/issues/10275) #### Session framework + * We've removed the 30-second timeout limit for the session locking mechanism when Redis is used for session storage. + * A typo in `sessionStorage` polyfill has been corrected. *Fix submitted by mszydlo in pull request 11219*. #### Web API framework + * The `customerAccountManagementV1` interface now provides the `POST /V1/customers/resetPassword` endpoint. ### General + * XHTML templates now use schema URNs. [GitHub-6661](https://github.com/magento/magento2/issues/6661) + * The image size used as a cross-sell product placeholder now equals the size of the image used in product listing placeholder images. Previously, the cross-sell product placeholder image was too small. [GitHub-12017](https://github.com/magento/magento2/issues/12017) + * Magento now downloads the backup `.tgz` file that you select for downloading. Previously, no matter which backup you selected, Magento downloaded the most recent backup. *Fix submitted by Pieter Cappelle in pull request 11595*. [GitHub-10032](https://github.com/magento/magento2/issues/10032) + * Magento now leaves a product's date attribute's current date field blank if you do not enter a value. *Fix submitted by [@enriquei4](https://github.com/enriquei4) in pull request 11749*. [GitHub-9869](https://github.com/magento/magento2/issues/9869), [GitHub-11636](https://github.com/magento/magento2/issues/11636), [GitHub-6661](https://github.com/magento/magento2/issues/6661) + * The Magento store code validation `regex` now supports uppercase letters in store code. [GitHub-11996](https://github.com/magento/magento2/issues/11996) + * When you use a UI component-based form and add a custom regular expression pattern validation to an input field, the supplied pattern is now properly converted from a string to a JavaScript RegEx object. *Fix submitted by Brett in pull request 11565*. [GitHub-9919](https://github.com/magento/magento2/issues/9919) + * Magento now sets ISO-valid language code in the HTML header. *Fix submitted by Cristian Sanclemente in pull request 11561*. [GitHub-11540](https://github.com/magento/magento2/issues/11540) + * Magento now validates CMS blocks before creating one. *Fix submitted by thiagolima-bm in pull request 11802*. [GitHub-8236](https://github.com/magento/magento2/issues/8236), [GitHub-4831](https://github.com/magento/magento2/issues/4831) + * A custom field's name attribute no longer remains empty during form creation. *Fix submitted by Paul Briscoe in pull request 11637*. [GitHub-9944](https://github.com/magento/magento2/issues/9944) + * `widget.xml` files can now contain multiple `depends` parameters. *Fix submitted by Raul E Watson in pull request 11495*. [GitHub-9783](https://github.com/magento/magento2/issues/9783) + * You can now use an `adminhtml` URL that differs from `admin` and set **Add Store Code to Urls** to **Yes**. *Fix submitted by Sylvain Rayé in pull request 11460*. [GitHub-11140](https://github.com/magento/magento2/issues/11140), [GitHub-11140](https://github.com/magento/magento2/issues/11140) + * You can now add an HTML node to the page XML root of a theme without causing a validation error. [GitHub-11697](https://github.com/magento/magento2/issues/11697) + * The `customer_data_object` firstname is no longer equal to `orig_customer_data_object` after you save an existing user account with a new name or address. *Fix submitted by Roman K. in pull request 11676*. [GitHub-7915](https://github.com/magento/magento2/issues/7915) + * A typo in `Paypal/Test/TestCase/OnePageCheckoutTest.xml` has been fixed. *Fix submitted by Mr. Lewis in pull request 11673*. [GitHub-7591](https://github.com/magento/magento2/issues/7591) + * We’ve fixed the dashboard graph’s y-axis range. *Fix submitted by Oscar Recio in pull request 11751*. [GitHub-7927](https://github.com/magento/magento2/issues/7927) + * Magento no longer throws an error when you try to load a quote item collection. [GitHub-8954](https://github.com/magento/magento2/issues/8954) + * Customer Groups are now located in the Magento Admin under **Customers > Customer Groups**. *Fix submitted by Mr. Lewis in pull request 11677*. + * Magento now wraps long label text by word instead of letter. *Fix submitted by [@enriquei4](https://github.com/enriquei4) in pull request 11745*. [GitHub-7099](https://github.com/magento/magento2/issues/7099), [GitHub-711727](https://github.com/magento/magento2/issues/11727) + * Magento now displays and expects the format of birth years to match `yyyy` instead of `yy`. *Fix submitted by Manu Gonzalez Rodriguez in pull request 11351*. [GitHub-11332](https://github.com/magento/magento2/issues/11332) + * Magento now displays the State/Province field after you edit the billing address on sales orders. *Fix submitted by Raul Mateos in pull request 11381*. [GitHub-10441](https://github.com/magento/magento2/issues/10441) + * You can now successfully sync billing and shipping addresses on Admin Reorder and Admin Customer Create Order page for selected, existing addresses. *Fix submitted by Ievgen Sentiabov in pull request 11385*. [GitHub-10856](https://github.com/magento/magento2/issues/10856) + * The `FixAccountManagementTest` unit test now works as expected. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11607*. + * You can now submit a form by pressing **Enter**. *Fix submitted by Raul Encinas in pull request 11827*. [GitHub-4696](https://github.com/magento/magento2/issues/4696) + * The Store View switcher now works as expected. *Fix submitted by thiagolima-bm in pull request 11337*. [GitHub-10908](https://github.com/magento/magento2/issues/10908), [GitHub-11211](https://github.com/magento/magento2/issues/11211) + * We've removed object manager references as well as deprecated calls to `$messageManager`. *Fix submitted by Atish Goswami in pull request 12061*. + * Magento now prepares street data to guarantee that the street array will be converted to a string. *Fix submitted by Vova Yatsyuk in pull request 12130*. + * Disabling and enabling the WYSIWYG editor with `ui/form/element/helper/service` checkbox now works as expected. *Fix submitted by Vova Yatsyuk in pull request 12141*. + * The `sitemap.xml` `last mod` time stamp now contains the correct date. [GitHub-9151](https://github.com/magento/magento2/issues/9151) + * The Visual Swatch Attribute drop-down menu (accessible from Manage Swatch tab) now works as expected. Previously, when you clicked the **Add Swatch** button from this tab, the drop-down menu was not displayed. *Fix submitted by [@enriquei4](https://github.com/enriquei4) in pull request 11747*. [GitHub-11534](https://github.com/magento/magento2/issues/11534) + * Users are now subscribed by default to the Advanced Reporting service. + * The design rule hint message no longer includes a typo. *Fix submitted by Javier Villanueva in pull request 11390*. [GitHub-8958](https://github.com/magento/magento2/issues/8958) + * Storefront labels and messages now use the American English spelling of “optimization”. *Fix submitted by David Angel in pull request 11345*. + * The **Add page** button now works as expected. Previously, when you clicked **Add page** while logged in to the Admin, and clicked **Save**, Magento did not create a new page, but returned you to the **Orders** page, and displayed this message: **Data key is missing: code-entity**. *Fix submitted by Tomasz Gregorczyk in pull request 11205*. [GitHub-11163](https://github.com/magento/magento2/issues/11163) ### Import/export + * To improve performance, Magento now loads all relations using one query per bunch. Previously, Magento loaded relations one by one (multiple times for multiple attributes types). [GitHub-10920](https://github.com/magento/magento2/issues/10920) + * Magento now provides more helpful error messages if problems occur during the import of products and images using **System > Import Products**. [GitHub-4711](https://github.com/magento/magento2/issues/4711) + * Magento now provides better error reporting when an error occurs during the import of a CSV file with a semicolon delimiter. Previously, Magento stopped import, but did not provide a link to the error report CSV file. [GitHub-5015](https://github.com/magento/magento2/issues/5015) + * Exception message was passed as a exception description argument instead of exception message. *Fix submitted by Tim Bezhashvyly in pull request 11363*. [GitHub-6924](https://github.com/magento/magento2/issues/6924) + * Importing an import file to update customer data no longer results in the `entity fields` being removed if the columns were not present on the imported file. *Fix submitted by Juan Alonso in pull request 11968*. ### Indexing + * Magento no longer re-indexes entities if they are unchanged, which improves the performance of the refresh index cron job without any loss of functionality. [GitHub-4893](https://github.com/magento/magento2/issues/4893) + * Magento now correctly resets status to `StateInterface::STATUS_INVALID` if a fatal PHP error occurs during indexing. *Fix submitted by Lars Roettig in pull request 11183*. [GitHub-11166](https://github.com/magento/magento2/issues/11166) ### Infrastructure + * New static block tests now detect blocks without a name attribute. We've also added a missing block name to allow block customization, and added a name for the order items grid default renderer block. *Fix submitted by Ihor Sviziev in pull request 11235*. [GitHub-10824](https://github.com/magento/magento2/issues/10824) + * We've ported a fix for the Travis CI builds for the `2.2-develop` branch to the `2.3-develop` branch. *Fix submitted by Ievgen Shakhsuvarov in pull request 11555*. + * Integration tests now reset the integration test database when `TESTS_CLEANUP` is set to enabled. *Fix submitted by Joshua Warren in pull request 11499*. [GitHub-10025](https://github.com/magento/magento2/issues/10025) + * We fixed a typo in the `Paypal/Test/TestCase/OnePageCheckoutTest.xml`. *Fix submitted by Mr. Lewis in pull request 11673*. [GitHub-7591](https://github.com/magento/magento2/issues/7591) + * `FileClassScannerTest` no longer has a dependency upon `Magento_Catalog`. *Fix submitted by WEXO team in pull request 12144*. [GitHub-11230](https://github.com/magento/magento2/issues/11230) ### Newsletters + * Newsletter subscriptions now work as expected. Previously, Magento did not set the `create-date` field, and the `change_status_at` was broken. [GitHub-4004](https://github.com/magento/magento2/issues/4004) + * When a customer with the same email address has an account on different stores in the same Magento installation, changes to the newsletter subscription in one account no longer affects the other subscription. *Fix submitted by Sergio Baixauli in pull request 12035*. [GitHub-10014](https://github.com/magento/magento2/issues/10014) + * Magento now sends email confirmation of newsletter subscription to a user only when the user is newly subscribed. *Fix submitted by Oscar Recio in pull request 11317*. [GitHub-5439](https://github.com/magento/magento2/issues/5439) ### Orders + * Magento now retains an order's `relation_child_id` and `relation_child_real_id` field values when you edit the order. Previously, after you edited an order, the values of the `relation_child_id` and `relation_child_real_id` fields of the old order did not persist. [GitHub-10195](https://github.com/magento/magento2/issues/10195) + * Magento no longer duplicates the **Add Products** button after you change the customer group. [GitHub-11868](https://github.com/magento/magento2/issues/11868) + * New orders now appear as expected in the Order table after migrating data. [GitHub-10185](https://github.com/magento/magento2/issues/10185) + * You can now create an order from the Customer Edit page when working from the Admin. *Fix submitted by Roman K. in pull request 11952*. [GitHub-11832](https://github.com/magento/magento2/issues/11832) + * The `getTracksCollection()` method now returns collection objects. Previously, this method returned either collections or arrays. *Fix submitted by Roman K. in pull request 12173*. [GitHub-8022](https://github.com/magento/magento2/issues/8022) + * References to `Zend_Pdf_Color_RGB`now correctly use the camel-case class name (`Zend_Pdf_Color_Rgb`). Previously, the former class name resulted in references to wrong or nonexistent classes. *Fix submitted by Danny Verkade - Cream in pull request 11830*. [GitHub-11581](https://github.com/magento/magento2/issues/11581) + * The Order table now accurately reflects changes in order status. + * Invoices now display coupon code information. *Fix submitted by Cristian Sanclemente in pull request 11635*. [GitHub-10168](https://github.com/magento/magento2/issues/10168) + * Magento no longer lets you cancel an invoice more than once. *Fix submitted by Oscar Recio in pull request 11261*. [GitHub-9968](https://github.com/magento/magento2/issues/9968) + * `guest.php` now handles breadcrumb performance as expected. *Fix submitted by Juliano Vargas in pull request 11299*. [GitHub-11275](https://github.com/magento/magento2/issues/11275) + * Magento now sends confirmation emails to customers for orders containing a grouped product. Previously, when you tried to submit an invoice for an order containing a grouped product, Magento threw an error and did not send confirmation email to the customer. *Fix submitted by Michiel Gerritsen in pull request 11297*. [GitHub-5105](https://github.com/magento/magento2/issues/5105) ### Payment methods + * Magento PayPal integration now supports the Indian Rupee currency (INR). + * Braintree online refunds now work when you are using two Braintree accounts on two separate websites. Previously, when using two Braintree accounts for two separate websites, Magento did not process the refund, and displayed this message: **Sorry, but something went wrong**. + * Administrators with limited privileges can now log in without errors. Previously, Magento threw an error, but did not log errors in either the server or Magento logs. [GitHub-11700](https://github.com/magento/magento2/issues/11700) + * Corrected a typo in a translatable string. *Fix submitted by Danny Verkade - Cream in pull request 11569*. + * Magento now displays the correct payment method string as displayed during checkout. Previously, the translated string associated the payment method title for a particular store view was not consistently displayed. *Fix submitted by Bernhard in pull request 11165*. [GitHub-7582](https://github.com/magento/magento2/issues/7582) ### Reports + * The search for the Customer Review report now works as expected. *Fix submitted by Oscar Recio in pull request 11522*. [GitHub-10301](https://github.com/magento/magento2/issues/10301) + * Magento now reports handled exceptions to New Relic. Previously, Magento displayed only fatal errors. *Fix submitted by Max Chadwick in pull request 11944*. ### SalesRule + * 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](https://github.com/magento/magento2/issues/8969) + * Cart Price rules are now applied to products if dropdown attributes are present. Previously, Magento checked only the items that were visible in the cart against the specified conditions. *Fix submitted by Marina Gociu in pull request 11274*. [GitHub-10477](https://github.com/magento/magento2/issues/10477) + * The Admin's Most Viewed Products tab now displays all the products in all attribute sets, not simply the default attribute set. [GitHub-9768](https://github.com/magento/magento2/issues/9768) ### Search + * The search template now uses the custom URL specified in `Magento\Search\Helper\getSuggestUrl()` instead of the default. [GitHub-6802](https://github.com/magento/magento2/issues/6802) + * Magento no longer throws an asymmetric transaction error on re-indexing when you use ElasticSearch as your search engine. ### Shipping @@ -490,51 +623,65 @@ Looking for more information on these new features as well as many others? Check can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{ page.baseurl }}/release-notes/ReleaseNotesMagentoShipping2.2.x.html). + * Magento now displays by default of two shipping address lines even when the `street_lines` setting in customer configuration is set to 0 (zero). [GitHub-7995](https://github.com/magento/magento2/issues/7995) + * Magent no longer displays a blank page at the shipping stage of checkout when the user tries to return to the Shipping page from the Payments page by clicking **Back**. [GitHub-11197](https://github.com/magento/magento2/issues/11197) + * The Shipping report available from the Admin now uses the correct currency code. [GitHub-11793](https://github.com/magento/magento2/issues/11793) + * An invoice's `grand_total` and `base_grand_total` now match as expected. Previously, these values differed, leading to a rounding error when calculating the `base_grand_total`. + * Magento now adds a customer note to a shipment invoice when the shipment is created by API and `appendComment` is set to **true**. *Fix submitted by JeroenVanLeusden in pull request 11383*. [GitHub-11207](https://github.com/magento/magento2/issues/11207) + * Shipping method radio buttons no longer have duplicate element IDs on the cart page. Previously, these radio buttons had duplicate IDs, which made it impossible to select the second method. *Fix submitted by Peter Jaap Blaakmeer in pull request 11406*. [GitHub-10795](https://github.com/magento/magento2/issues/10795) + * The **Shop By** button is now rendered as expected on Android platforms. Previously, the **Shop By** button and other contents were positioned incorrectly. *Fix submitted by Lorenzo Stramaccia in pull request 11430*. [GitHub-10941](https://github.com/magento/magento2/issues/10941) + * The `freePackageValue` value is now required to be defined. Previously, this value could be undefined, but in some cases was still accessed. *Fix submitted by Alexander Menk in pull request 11720*. ### Taxes + * We've fixed a problem with the **Ignore this notification** setting. *Fix submitted by Cristian Sanclemente in pull request 11410*. [GitHub-11365](https://github.com/magento/magento2/issues/11365) ### Translations + * You can now implement translations from themes (in contrast to translations from modules). + * Previously missing translation strings have been added to the UI module. *Fix submitted by JeroenVanLeusden in pull request 11440*. [GitHub-5956](https://github.com/magento/magento2/issues/5956) + * We've fixed an issue with the `` translate phrase in the `system.xml` file. [*Fix submitted by Malyovanets Nickolas in pull request 11675*. [GitHub-7767](https://github.com/magento/magento2/issues/7767) + * The update `button.phtml` translation has been simplified. *Fix submitted by Karla Saaremäe in pull request 12136*. ### Varnish + * Cache headers for documents now factor in the cookie for the store code as expected. ## Known issues diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.2EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.2EE.md index e82d014be97..46857e3d3f6 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.2EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.2EE.md @@ -49,440 +49,573 @@ Looking for more information on these new features as well as many others? Check ### Installation, setup, and deployment + * We've increased the `memory_limit` of the `.user.ini` files to 2GB. [GitHub-11322](https://github.com/magento/magento2/issues/11322) + * The contents of the `js-translation.json` files are now correct when you deploy static content with multiple locales. + * All cron dates are now saved in a single format and displayed according to user preference or needs. [GitHub-4237](https://github.com/magento/magento2/issues/4237) + * Static versioning and minification no longer break email font styles. [GitHub-8241](https://github.com/magento/magento2/issues/8241) + * You can now successfully upgrade from 2.1.x to 2.2.0. Previously, when you tried to upgrade from 2.1.9 to 2.2.0, Magento displayed the **postcode is a required field** error message, and `setup:upgrade` failed. *Fix submitted by Mr. Lewis in pull request 11651*. [GitHub-11095](https://github.com/magento/magento2/issues/11095) + * We've replaced `FollowSymLinks` with `SymLinksIfOwnerMatch` in the `htaccess` templates. [GitHub-10811](https://github.com/magento/magento2/issues/10811) + * The `htaccess` template now supports `apache2.4` commands. *Fix submitted by Jonas Hünig in pull request 11459*. [GitHub-10810](https://github.com/magento/magento2/issues/10810) [GitHub-10810](https://github.com/magento/magento2/issues/10810) + * `configVariables` now contains a variable for VAT numbers. *Fix submitted by JeroenVanLeusden in pull request 11486*. [GitHub-10996](https://github.com/magento/magento2/issues/10996) + * 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. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11591*. [GitHub-11586](https://github.com/magento/magento2/issues/11586) + * You can now install and uninstall `cron` via the `bin/magento cron:install` command. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11359*. + * The `admin:user:create` command now recognizes the configured table prefix. *Fix submitted by Oscar Recio in pull request 11199*. [GitHub-11176](https://github.com/magento/magento2/issues/11176) + * The default cron success or failure history is now seven days. *Fix submitted by Max Chadwick in pull request 11505*. + * The `admin:user:create` command now asks for the input value if a required option is not passed. *Fix submitted by Christian Münch in pull request 11510*. + * The `.user.ini` files at `/.user.ini` and `/pub/.user.ini` now specify a `memory_limit` value of at least 1G to 2G for debugging purposes. *Fix submitted by Mr. Lewis in pull request 11734*. [GitHub-11322](https://github.com/magento/magento2/issues/11322) + * The `setup:install` command now has an `-i` flag. It validates parameters interactively. *Fix submitted by Denis Ristic in pull request 11425*. + * Magento now restarts cron jobs as needed after a cron job was terminated during execution. ### Catalog + * You can now enter strings that exceed 255 characters in Admin or frontend input fields. Previously, Magento saved only the first 255 characters of a long input string. [GitHub-6238](https://github.com/magento/magento2/issues/6238) + * Magento now renders color attribute swatches correctly for the search result page if sorting for color attribute is enabled. *Fix submitted by Roman K. in pull request 12077*. [GitHub-10628](https://github.com/magento/magento2/issues/10628) + * 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 no longer duplicates attribute option values. Previously, Magento did not confirm the uniqueness of an attribute option value if you created it using REST. [GitHub-8846](https://github.com/magento/magento2/issues/8846) + * Magento now saves the correct background color for images. Previously, product images always had a black background when using the Luma theme. [GitHub-8799](https://github.com/magento/magento2/issues/8799) + * You can now save a product custom option price with a value of 0 (zero) by simply not entering a price. *Fix submitted by Raul Mateos in pull request 11843*. [GitHub-4808](https://github.com/magento/magento2/issues/4808) + * You can now assign products to categories if those products are already assigned to the category tree. [GitHub-8970](https://github.com/magento/magento2/issues/8970) + * The `apply_to` setting for attributes is no longer hard-coded. [GitHub-7225](https://github.com/magento/magento2/issues/7225) + * The **Add to cart** checkboxes in Related Products are no longer visible on the storefront when **$canItemsAddToCart** is set to **false**. *Fix submitted by Marc Rodriguez in pull request 11610*. [GitHub-6891](https://github.com/magento/magento2/issues/6891) + * You can now successfully save and duplicate a simple product. Previously, when you clicked the **Save and Duplicate** option for an existing simple product in the Catalog Manager, Magento did not duplicate the product, but threw an error. *Fix submitted by Roman K. in pull request 12001*. [GitHub-11532](https://github.com/magento/magento2/issues/11532) + * The Magento Admin Product Edit page now displays product alerts as expected. *Fix submitted by Raul Mateos in pull request 11445*. [GitHub-10007](https://github.com/magento/magento2/issues/10007) + * 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 in pull request 11500*. [GitHub-7678](https://github.com/magento/magento2/issues/7678) + * The `$sortByPostion` flag has been added to the `getChildren()` method. *Fix submitted by Denis Ristic in pull request 11342*. [GitHub-11310](https://github.com/magento/magento2/issues/11310) + * `ProductRepository` SKU cache is no longer corrupted when `cacheLimit` is reached . *Fix submitted by Thomas in pull request 11553*. + * Magento no longer displays the perpetual spinner when you switch custom options types in the Product Edit page. *Fix submitted by Paul Briscoe in pull request 11824*. [GitHub-10291](https://github.com/magento/magento2/issues/10291) ### Cart and checkout + * The default shipping-save-processor now has a payload extender. This feature allows third party extensions to modify the payload for the shipping address selection process. As a result, developers can now add `extension_attributes` while minimizing potential extension conflicts. *Fix submitted by Navarr Barnier in pull request 11249*. + * You can now view the **Products in cart** report if the cart contains a bundle or a grouped product. Previously, when you viewed the Products in Cart report, Magento threw an exception under these conditions. [GitHub-12079](https://github.com/magento/magento2/issues/12079) + * Magento now recognizes zip codes without spaces for addresses located in the Netherlands. [GitHub-11898](https://github.com/magento/magento2/issues/11898) + * Magento now accepts coupon codes with special characters during checkout. *Fix submitted by Gabriel Queiroz Silva in pull request 11710*. [GitHub-9763](https://github.com/magento/magento2/issues/9763) + * We've improved cache control headers. + * Magento no longer throws an exception when you place an order using a new address. Previously, Magento displayed this error, **An error occurred on the server. Please try to place the order again.**. [GitHub-10583](https://github.com/magento/magento2/issues/10583) + * 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. *Fix submitted by David Verholen in pull request 11421*. [GitHub-11022](https://github.com/magento/magento2/issues/11022) + * Magento no longer sets the product price to zero when you use REST to add a product to an empty cart. Previously, Magento displayed an error when you used REST to populate an empty cart. *Fix submitted by Peter Jaap Blaakmeer in pull request 11458*. [GitHub-2991](https://github.com/magento/magento2/issues/2991), [GitHub-2991](https://github.com/magento/magento2/issues/2991) + * You can now translate the placeholder text for the checkout password field. *Fix submitted by JeroenVanLeusden in pull request 11493*. + * Magento now redirects a user to the checkout page if he logs in after selecting the **Checkout** button. Previously, a user was redirected to the store home page. *Fix submitted by [@p-bystritsky](https://github.com/p-bystritsky) in pull request 11876*. [GitHub-10834](https://github.com/magento/magento2/issues/10834) ### Configurable products + * `Magento\ConfigurableProduct\Model\Product\Type\Configurable:::loadUsedProducts` no longer ignores array keys that are returned by product collections. [GitHub-11880](https://github.com/magento/magento2/issues/11880) ### Frameworks + * The NGINX configuration sample now contains a health check. *Fix submitted by Andrew Howden in pull request 11690*. [GitHub-11157](https://github.com/magento/magento2/issues/11157) + * Magento now allows underscore characters in module names and also permits their use when modules add a block to the layout via XML. Previously, Magento did not support underscore characters in module names to be added to the layout via XML. *Fix submitted by Ben Tideswell in pull request 11765*. + * You can now save using the mass action **Update attributes** option when multiselect attributes are set. *Fix submitted by Manu Gonzalez Rodriguez in pull request 11349*. [GitHub-11329](https://github.com/magento/magento2/issues/11329) #### App framework + * Magento now correctly handles all meta keywords and description in categories and in every product in locales that use non-Latin characters. [GitHub-10682](https://github.com/magento/magento2/issues/10682) + * You can now include negative values in an XML export file and open the file with Office XML handler. Previously, the export files did not open correctly, and an Office XML handler error log was created. *Fix submitted by hauso in pull request 11757*. [GitHub-11729](https://github.com/magento/magento2/issues/11729), [GitHub-11729](https://github.com/magento/magento2/issues/11729) + * The Magento custom URL rewrite functionality now works as expected when you include redirection of Magento controllers. *Fix submitted by Marc Rodriguez in pull request 11470*. [GitHub-10231](https://github.com/magento/magento2/issues/10231), [GitHub-11469](https://github.com/magento/magento2/issues/11469), [GitHub-11471](https://github.com/magento/magento2/issues/11471) + * Magento now supports the setting of HTTP response status code in redirected responses. [GitHub-9028](https://github.com/magento/magento2/issues/9028) + * Magento now throws a meaningful exception when a virtual theme does not have a physical parent theme. *Fix submitted by David Fecke in pull request 11240*. + * `app:config:dump` no longer adds an extra space to multiline array values. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11439*. [GitHub-11328](https://github.com/magento/magento2/issues/11328) + * The TRAVIS_BRANCH variable is now surrounded by double-quotes instead of single-quotes . *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11704*. + * The doc block of `setValue` in FilterBuilder now reflects that the `setValue` method will accept an array. *Fix submitted by ByteCreation in pull request 11854*. + * `htaccess` syntax now uses `Options -Indexes` instead of `Options All -Indexes`. Previously, Magento used `Options All -Indexes`, which resulted in Magento rendering a 500 error page because of high restrictions for Options overrides in shared hosting environments. *Fix submitted by [@Danny Verkade - Cream](https://github.com/dverkade) in pull request 11327*. [GitHub-10812](https://github.com/magento/magento2/issues/10812) #### Configuration framework + * The X-Magento-Tags header can now contain white space. *Fix submitted by Malyovanets Nickolas in pull request 11767*. [GitHub-7640](https://github.com/magento/magento2/issues/7640), [GitHub-7640](https://github.com/magento/magento2/issues/7640) + * 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 in pull request 11643*. #### JavaScript framework + * 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](https://github.com/magento/magento2/issues/10562), [GitHub-6733](https://github.com/magento/magento2/issues/6733) + * Magento now exports the Confirmed email and Account Lock values when you export customer data. Previously, this information was missing from the exported CSV. *Fix submitted by Luke Rodgers in pull request 11437*. [GitHub-10765](https://github.com/magento/magento2/issues/10765), [GitHub-10765](https://github.com/magento/magento2/issues/10765) + * You can now submit the search form from the keyboard. *Fix submitted by Romain Ruaud in pull request 11250*. [GitHub-10275](https://github.com/magento/magento2/issues/10275) #### Session framework + * We've removed the 30-second timeout limit for the session locking mechanism when Redis is used for session storage. + * A typo in `sessionStorage` polyfill has been corrected. *Fix submitted by mszydlo in pull request 11219*. #### Web API framework + * The `customerAccountManagementV1` interface now provides the `POST /V1/customers/resetPassword` endpoint. ### General + * XHTML templates now use schema URNs. [GitHub-6661](https://github.com/magento/magento2/issues/6661) + * The image size used as a cross-sell product placeholder now equals the size of the image used in product listing placeholder images. Previously, the cross-sell product placeholder image was too small. [GitHub-12017](https://github.com/magento/magento2/issues/12017) + * Magento now downloads the backup `.tgz` file that you select for downloading. Previously, no matter which backup you selected, Magento downloaded the most recent backup. *Fix submitted by Pieter Cappelle in pull request 11595*. [GitHub-10032](https://github.com/magento/magento2/issues/10032) + * Magento now leaves a product's date attribute's current date field blank if you do not enter a value. *Fix submitted by [@enriquei4](https://github.com/enriquei4) in pull request 11749*. [GitHub-9869](https://github.com/magento/magento2/issues/9869), [GitHub-11636](https://github.com/magento/magento2/issues/11636), [GitHub-6661](https://github.com/magento/magento2/issues/6661) + * The Magento store code validation `regex` now supports uppercase letters in store code. [GitHub-11996](https://github.com/magento/magento2/issues/11996) + * When you use a UI component-based form and add a custom regular expression pattern validation to an input field, the supplied pattern is now properly converted from a string to a JavaScript RegEx object. *Fix submitted by Brett in pull request 11565*. [GitHub-9919](https://github.com/magento/magento2/issues/9919) + * Magento now sets ISO-valid language code in the HTML header. *Fix submitted by Cristian Sanclemente in pull request 11561*. [GitHub-11540](https://github.com/magento/magento2/issues/11540) + * Magento now validates CMS blocks before creating one. *Fix submitted by thiagolima-bm in pull request 11802*. [GitHub-8236](https://github.com/magento/magento2/issues/8236), [GitHub-4831](https://github.com/magento/magento2/issues/4831) + * A custom field's name attribute no longer remains empty during form creation. *Fix submitted by Paul Briscoe in pull request 11637*. [GitHub-9944](https://github.com/magento/magento2/issues/9944) + * `widget.xml` files can now contain multiple `depends` parameters. *Fix submitted by Raul E Watson in pull request 11495*. [GitHub-9783](https://github.com/magento/magento2/issues/9783) + * You can now use an `adminhtml` URL that differs from `admin` and set **Add Store Code to Urls** to **Yes**. *Fix submitted by Sylvain Rayé in pull request 11460*. [GitHub-11140](https://github.com/magento/magento2/issues/11140), [GitHub-11140](https://github.com/magento/magento2/issues/11140) + * You can now add an HTML node to the page XML root of a theme without causing a validation error. [GitHub-11697](https://github.com/magento/magento2/issues/11697) + * The `customer_data_object` firstname is no longer equal to `orig_customer_data_object` after you save an existing user account with a new name or address. *Fix submitted by Roman K. in pull request 11676*. [GitHub-7915](https://github.com/magento/magento2/issues/7915) + * We removed a typo in the Paypal Module. [GitHub-7591](https://github.com/magento/magento2/issues/7591) + * We’ve fixed the dashboard graph’s y-axis range. *Fix submitted by Oscar Recio in pull request 11751*. [GitHub-7927](https://github.com/magento/magento2/issues/7927) + * Magento no longer throws an error when you try to load a quote item collection. [GitHub-8954](https://github.com/magento/magento2/issues/8954) + * Customer Groups are now located in the Magento Admin under **Customers > Customer Groups**. *Fix submitted by Mr. Lewis in pull request 11677*. + * Magento now wraps long label text by word instead of letter. *Fix submitted by [@enriquei4](https://github.com/enriquei4) in pull request 11745*. [GitHub-7099](https://github.com/magento/magento2/issues/7099), [GitHub-711727](https://github.com/magento/magento2/issues/11727) + * Magento now displays and expects the format of birth years to match `yyyy` instead of `yy`. *Fix submitted by Manu Gonzalez Rodriguez in pull request 11351*. [GitHub-11332](https://github.com/magento/magento2/issues/11332) + * Magento now displays the State/Province field after you edit the billing address on sales orders. *Fix submitted by Raul Mateos in pull request 11381*. [GitHub-10441](https://github.com/magento/magento2/issues/10441) + * You can now successfully sync billing and shipping addresses on Admin Reorder and Admin Customer Create Order page for selected, existing addresses. *Fix submitted by Ievgen Sentiabov in pull request 11385*. [GitHub-10856](https://github.com/magento/magento2/issues/10856) + * The `FixAccountManagementTest` unit test now works as expected. *Fix submitted by [@adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request 11607*. + * You can now submit a form by pressing **Enter**. *Fix submitted by Raul Encinas in pull request 11827*. [GitHub-4696](https://github.com/magento/magento2/issues/4696) + * The Store View switcher now works as expected. *Fix submitted by thiagolima-bm in pull request 11337*. [GitHub-10908](https://github.com/magento/magento2/issues/10908), [GitHub-11211](https://github.com/magento/magento2/issues/11211) + * We've removed object manager references as well as deprecated calls to `$messageManager`. *Fix submitted by Atish Goswami in pull request 12061*. + * Magento now prepares street data to guarantee that the street array will be converted to a string. *Fix submitted by Vova Yatsyuk in pull request 12130*. + * Disabling and enabling the WYSIWYG editor with `ui/form/element/helper/service` checkbox now works as expected. *Fix submitted by Vova Yatsyuk in pull request 12141*. + * The `sitemap.xml` `last mod` time stamp now contains the correct date. [GitHub-9151](https://github.com/magento/magento2/issues/9151) + * The Visual Swatch Attribute drop-down menu (accessible from Manage Swatch tab) now works as expected. Previously, when you clicked the **Add Swatch** button from this tab, the drop-down menu was not displayed. *Fix submitted by [@enriquei4](https://github.com/enriquei4) in pull request 11747*. [GitHub-11534](https://github.com/magento/magento2/issues/11534) + * Users are now subscribed by default to the Advanced Reporting service. + * The design rule hint message no longer includes a typo. *Fix submitted by Javier Villanueva in pull request 11390*. [GitHub-8958](https://github.com/magento/magento2/issues/8958) + * Storefront labels and messages now use the American English spelling of “optimization”. *Fix submitted by David Angel in pull request 11345*. + * The **Add page** button now works as expected. Previously, when you clicked **Add page** while logged in to the Admin, and clicked **Save**, Magento did not create a new page, but returned you to the **Orders** page, and displayed this message: **Data key is missing: code-entity**. *Fix submitted by Tomasz Gregorczyk in pull request 11205*. [GitHub-11163](https://github.com/magento/magento2/issues/11163) ### Import/export + * To improve performance, Magento now loads all relations using one query per bunch. Previously, Magento loaded relations one by one (multiple times for multiple attributes types). [GitHub-10920](https://github.com/magento/magento2/issues/10920) + * Magento now provides more helpful error messages if problems occur during the import of products and images using **System > Import Products**. [GitHub-4711](https://github.com/magento/magento2/issues/4711) + * Magento now provides better error reporting when an error occurs during the import of a CSV file with a semicolon delimiter. Previously, Magento stopped import, but did not provide a link to the error report CSV file. [GitHub-5015](https://github.com/magento/magento2/issues/5015) + * Exception message was passed as a exception description argument instead of exception message. *Fix submitted by Tim Bezhashvyly in pull request 11363*. [GitHub-6924](https://github.com/magento/magento2/issues/6924) + * Importing an import file to update customer data no loner results in the `entity fields` being removed if the columns were not present on the imported file. *Fix submitted by Juan Alonso in pull request 11968*. ### Indexing + * Magento no longer re-indexes entities if they are unchanged, which improves the performance of the refresh index cron job without any loss of functionality. [GitHub-4893](https://github.com/magento/magento2/issues/4893) + * Magento now correctly resets status to `StateInterface::STATUS_INVALID` if a fatal PHP error occurs during indexing. *Fix submitted by Lars Roettig in pull request 11183*. [GitHub-11166](https://github.com/magento/magento2/issues/11166) ### Infrastructure + * New static block tests now detect blocks without a name attribute. We've also added a missing block name to allow block customization, and added a name for the order items grid default renderer block. *Fix submitted by Ihor Sviziev in pull request 11235*. [GitHub-10824](https://github.com/magento/magento2/issues/10824) + * We've ported a fix for the Travis CI builds for the `2.2-develop` branch to the `2.3-develop` branch. *Fix submitted by Ievgen Shakhsuvarov in pull request 11555*. + * Integration tests now reset the integration test database when `TESTS_CLEANUP` is set to enabled. *Fix submitted by Joshua Warren in pull request 11499*. [GitHub-10025](https://github.com/magento/magento2/issues/10025) + * A typo in `Paypal/Test/TestCase/OnePageCheckoutTest.xml` has been fixed. *Fix submitted by Mr. Lewis in pull request 11673*. [GitHub-7591](https://github.com/magento/magento2/issues/7591) + * `FileClassScannerTest` no longer has a dependency upon `Magento_Catalog`. *Fix submitted by WEXO team in pull request 12144*. [GitHub-11230](https://github.com/magento/magento2/issues/11230) ### Newsletters + * Newsletter subscriptions now work as expected. Previously, Magento did not set the `create-date` field, and the `change_status_at` was broken. [GitHub-4004](https://github.com/magento/magento2/issues/4004) + * When a customer with the same email address has an account on different stores in the same Magento installation, changes to the newsletter subscription in one account no longer affects the other subscription. *Fix submitted by Sergio Baixauli in pull request 12035*. [GitHub-10014](https://github.com/magento/magento2/issues/10014) + * Magento now sends email confirmation of newsletter subscription to a user only when the user is newly subscribed. *Fix submitted by Oscar Recio in pull request 11317*. [GitHub-5439](https://github.com/magento/magento2/issues/5439) ### Orders + * Magento now retains an order's `relation_child_id` and `relation_child_real_id` field values when you edit the order. Previously, after you edited an order, the values of the `relation_child_id` and `relation_child_real_id` fields of the old order did not persist. [GitHub-10195](https://github.com/magento/magento2/issues/10195) + * Magento no longer duplicates the **Add Products** button after you change the customer group. [GitHub-11868](https://github.com/magento/magento2/issues/11868) + * New orders now appear as expected in the Order table after you migrating data. [GitHub-10185](https://github.com/magento/magento2/issues/10185) + * You can now create an order from the Customer Edit page when working from the Admin. *Fix submitted by Roman K. in pull request 11952*. [GitHub-11832](https://github.com/magento/magento2/issues/11832) + * The `getTracksCollection()` method now returns collection objects. Previously, this method returned either collections or arrays. *Fix submitted by Roman K. in pull request 12173*. [GitHub-8022](https://github.com/magento/magento2/issues/8022) + * References to `Zend_Pdf_Color_RGB`now correctly use the camel-case class name (`Zend_Pdf_Color_Rgb`). Previously, the former class name resulted in references to wrong or nonexistent classes. *Fix submitted by Danny Verkade - Cream in pull request 11830*. [GitHub-11581](https://github.com/magento/magento2/issues/11581) + * The Order table now accurately reflects changes in order status. + * Invoices now display coupon code information. *Fix submitted by Cristian Sanclemente in pull request 11635*. [GitHub-10168](https://github.com/magento/magento2/issues/10168) + * Magento no longer lets you cancel an invoice more than once. *Fix submitted by Oscar Recio in pull request 11261*. [GitHub-9968](https://github.com/magento/magento2/issues/9968) + * `guest.php` now handles breadcrumb performance as expected. *Fix submitted by Juliano Vargas in pull request 11299*. [GitHub-11275](https://github.com/magento/magento2/issues/11275) + * Magento now sends confirmation emails to customers for orders containing a grouped product. Previously, when you tried to submit an invoice for an order containing a grouped product, Magento threw an error and did not send confirmation email to the customer. *Fix submitted by Michiel Gerritsen in pull request 11297*. [GitHub-5105](https://github.com/magento/magento2/issues/5105) ### Payment methods + * Magento PayPal integration now supports the Indian Rupee currency (INR). + * Braintree online refunds now work when you are using two Braintree accounts on two separate websites. Previously, when using two Braintree accounts for two separate websites, Magento did not process the refund, and displayed this message: **Sorry, but something went wrong**. + * Administrators with limited privileges can now log in without errors. Previously, Magento threw an error, but did not log errors in either the server or Magento logs. [GitHub-11700](https://github.com/magento/magento2/issues/11700) + * Corrected a typo in a translatable string. *Fix submitted by Danny Verkade - Cream in pull request 11569*. + * Magento now displays the correct payment method string as displayed during checkout. Previously, the translated string associated the payment method title for a particular store view was not consistently displayed. *Fix submitted by Bernhard in pull request 11165*. [GitHub-7582](https://github.com/magento/magento2/issues/7582) ### Reports + * The search for the Customer Review report now works as expected. *Fix submitted by Oscar Recio in pull request 11522*. [GitHub-10301](https://github.com/magento/magento2/issues/10301) + * Magento now reports handled exceptions to New Relic. Previously, Magento displayed only fatal errors. *Fix submitted by Max Chadwick in pull request 11944*. + * The Admin's Most Viewed Products tab now displays all the products in all attribute sets, not simply the default attribute set. [GitHub-9768](https://github.com/magento/magento2/issues/9768) ### SalesRule + * 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](https://github.com/magento/magento2/issues/8969) + * Cart Price rules are now applied to products if dropdown attributes are present. Previously, Magento checked only the items that were visible in the cart against the specified conditions. *Fix submitted by Marina Gociu in pull request 11274*. [GitHub-10477](https://github.com/magento/magento2/issues/10477) ### Search + * The search template now uses the custom URL specified in `Magento\Search\Helper\getSuggestUrl()` instead of the default. [GitHub-6802](https://github.com/magento/magento2/issues/6802) + * Magento no longer throws an asymmetric transaction error on re-indexing when you use ElasticSearch as your search engine. ### Shipping @@ -491,51 +624,65 @@ Looking for more information on these new features as well as many others? Check You can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{ page.baseurl }}/release-notes/ReleaseNotesMagentoShipping2.2.x.html). + * Magento now displays by default of two shipping address lines even when the `street_lines` setting in customer configuration is set to 0 (zero). [GitHub-7995](https://github.com/magento/magento2/issues/7995) + * Magento no longer displays a blank page at the shipping stage of checkout when the user tries to return to the Shipping page from the Payments page by clicking **Back**. [GitHub-11197](https://github.com/magento/magento2/issues/11197) + * The Shipping report available from the Admin now uses the correct currency code. [GitHub-11793](https://github.com/magento/magento2/issues/11793) + * An invoice's `grand_total` and `base_grand_total` now match as expected. Previously, these values differed, leading to a rounding error when calculating the `base_grand_total`. + * Magento now adds a customer note to a shipment invoice when the shipment is created by API and `appendComment` is set to **true**. *Fix submitted by JeroenVanLeusden in pull request 11383*. [GitHub-11207](https://github.com/magento/magento2/issues/11207) + * Shipping method radio buttons no longer have duplicate element IDs on the cart page. Previously, these radio buttons had duplicate IDs, which made it impossible to select the second method. *Fix submitted by Peter Jaap Blaakmeer in pull request 11406*. [GitHub-10795](https://github.com/magento/magento2/issues/10795) + * The **Shop By** button is now rendered as expected on Android platforms. Previously, the **Shop By** button and other contents were positioned incorrectly. *Fix submitted by Lorenzo Stramaccia in pull request 11430*. [GitHub-10941](https://github.com/magento/magento2/issues/10941) + * The `freePackageValue` value is now required to be defined. Previously, this value could be undefined, but in some cases was still accessed. *Fix submitted by Alexander Menk in pull request 11720*. ### Tax + * We've fixed a problem with the **Ignore this notification** setting. *Fix submitted by Cristian Sanclemente in pull request 11410*. [GitHub-11365](https://github.com/magento/magento2/issues/11365) ### Translations + * You can now implement translations from themes (in contrast to translations from modules). + * Previously missing translation strings have been added to the UI module. *Fix submitted by JeroenVanLeusden in pull request 11440*. [GitHub-5956](https://github.com/magento/magento2/issues/5956) + * We've fixed an issue with the `` translate phrase in the `system.xml` file. [*Fix submitted by Malyovanets Nickolas in pull request 11675*. [GitHub-7767](https://github.com/magento/magento2/issues/7767) + * The update `button.phtml` translation has been simplified. *Fix submitted by Karla Saaremäe in pull request 12136*. ### Varnish + * Cache headers for documents now factor in the cookie for the store code as expected. ## Known issues diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.3CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.3CE.md index 9bfdfb9631f..e459ff58413 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.3CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.3CE.md @@ -18,6 +18,7 @@ Look for the following highlights in this release: * **Enhancements that help close cross-site request forgery (CSRF), unauthorized data leaks, and authenticated Admin user remote code execution vulnerabilities**. See [Magento Security Center](https://magento.com/security/patches/magento-223-2112-and-2018-security-update) for more information. + * **Support for Elasticsearch 5.x**. 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 community member Aurélien Foucret.* * **Change to Magento Admin to support recent USPS shipping changes**. On February 23, 2018, USPS removed APIs that support the creation of shipping labels without postage. In response, we’ve removed this functionality from the Magento Admin. Consequently, you cannot create and print shipping labels that do not have postage applied. If you require USPS postage printing capabilities, please visit [Magento Shipping](https://magento.com/products/shipping) to learn more, and explore various shipping extensions on Magento Marketplace. diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.3EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.3EE.md index 21a19bbaf29..443acb2d02a 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.3EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.3EE.md @@ -18,6 +18,7 @@ Look for the following highlights in this release: * **Enhancements that help close cross-site request forgery (CSRF), unauthorized data leaks, and authenticated Admin user remote code execution vulnerabilities**. See [Magento Security Center](https://magento.com/security/patches/magento-223-2112-and-2018-security-update) for more information. + * **Support for Elasticsearch 5.x**. 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 community member Aurélien Foucret.* * **Change to Magento Admin to support recent USPS shipping changes**. On February 23, 2018, USPS removed APIs that support the creation of shipping labels without postage. In response, we’ve removed this functionality from the Magento Admin. Consequently, you cannot create and print shipping labels that do not have postage applied. If you require USPS postage printing capabilities, please visit [Magento Shipping](https://magento.com/products/shipping) to learn more, and explore various shipping extensions on Magento Marketplace. diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.4CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.4CE.md index 9822de2d08d..7a725205553 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.4CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.4CE.md @@ -31,18 +31,23 @@ Looking for more information on these new features as well as many others? Check This section describes changes in this release that are not full-fledged features or bug fixes, but that add noticeable improvements to product performance or ease-of-use. + * The admin global search is now translatable, extensible, and takes into account the ACL settings for the current user. See [Using global search](http://docs.magento.com/m2/ce/user_guide/stores/admin-global-search.html) for more information. *Fix submitted by Roman K. in pull request 1167*. [GitHub-7698](https://github.com/magento/magento2/issues/7698) + * Magento has an automated checker to enforce the short array syntax convention that we are now enforcing in new code. This standard complies with all requirements of PSR-2. *Fix submitted by Nickolas Malyovanets in pull request 12499*. + * Magento now provides dedicated payment and shipping debug log files to store information specific to those functional areas. + * The Emogrifier dependency has been upgraded to 2.0.0 or later. *Fix submitted by Oliver Klee in pull request 13132*. + * We've replaced `is_null` with strict comparison only for models and block in the following modules: `Catalog`, `Tax`, `Sales`, and `EAV`. *Fixes submitted by Alexander Shkurko in pull requests 13171, 13170, 1163*. #### dotmailer enhancements @@ -74,27 +79,35 @@ We do not recommend upgrading to Magento 2.2.4 if you deploy across multiple web ### Installation, setup, and deployment + * The `backup` command now works as expected. *Fix submitted by Jagriti Joshi in pull request 13066*. [GitHub-12877](https://github.com/magento/magento2/issues/12877) + * Links to Magento installation documentation in `setup/view/magento/readiness-check/progress.html` are now correct. *Fix submitted by Jonas Hünig in pull request 12857*. + * You can now use the `app:config:status` command to check whether configuration propagation is up-to-date. *Fix submitted by Juan Alonso in pull request 12441*. + * The `bin/magento setup:rollback -d filename.sql` command now works as expected. Previously, this database rollback operation failed on certain versions of Magento (for example, 2.1.9). *Fix submitted by Roman K. in pull request 12108*. [GitHub-12064](https://github.com/magento/magento2/issues/12064) + * You can now set API access to integrations for Admin roles, which gives privileged users the ability to grant limited access to users such as third-party integrators. [GitHub-9684](https://github.com/magento/magento2/issues/9684) + * You can now enable or disable the Magento Profiler from the command line. [GitHub-9277](https://github.com/magento/magento2/issues/9277) + * The icons for Extension Manager and Module Manager are now consistent with the main content area and left-hand menu of the Web Setup Wizard. *Fix submitted by Danny Verkade in pull request 11388*. [GitHub-11236](https://github.com/magento/magento2/issues/11236) + * Magento now continues operating in maintenance mode if it was previously enabled. Previously, Magento disabled maintenance mode when you used one of these commands: * `bin\magento module:uninstall` @@ -106,869 +119,1131 @@ We do not recommend upgrading to Magento 2.2.4 if you deploy across multiple web *Fix submitted by Joke Puts in pull request 11052*. [GitHub-9918](https://github.com/magento/magento2/issues/9918) + * You can specify a custom version for static files being deployed, and now nginx sample config files can match these custom versions, too. *Fix submitted by Scott Buchanan in pull request 12521*. + * The `CrontabManager.php` file has been updated as follows: If `crontab` has already been populated, the `php 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 in pull request*. + * The `ext-bcmath` PHP extension is now required in Open Source. Previously, it was required for Commerce only. *Fix submitted by Mobecls in pull request 12768*. + * The `cache_lifetime` default setting for the `Magento\Theme\Block\Html\Footer` block is no longer set to **false**, and the new default setting is **3600**. *Fix submitted by zolat in pull request 13762*. + * The `magento maintenance:allow-ips` command now has the `--add` flag, which appends a new IP address to the list of allowed IP addresses. Previously, when you added a new IP address, you had to copy the existing addresses. *Fix submitted by Barry vd. Heuvel in pull request 13586*. + * The `config:set` command now has a `lock-config` option, and configuration values are always stored in `app/etc/config.php` instead of `app/etc/env.php`. *Fix submitted by Andreas von Studnitz in pull request 13280*. + * In the `Backend/etc/adminhtml/system.xml` file, the `url` group and `redirect_to_base` field are now configured so that the `showInWebsite` and `showInStore` attributes are set to `1`. *Fix submitted by JeroenVanLeusden in pull request 13614*. + * You can now deploy static content on demand while in production mode. + * The output of the `magento maintenance:status` command no longer inserts a comma in between IP addresses, making it easier to copy and paste the values. *Fix submitted by Barry vd. Heuvel in pull request 13587*. + * The `DeploymentConfig` reader now always returns an array. *Fix submitted by Barry vd. Heuvel in pull request 13584*. + * Magento has improved how it manages the size of the `cron_schedule` table. [GitHub-11002](https://github.com/magento/magento2/issues/11002) + * Magento now includes a helper object to facilitate access to styling objects in the Symfony console. *Fix submitted by Wesley Guthrie in pull request 11504*. + * Magento no longer throws an error when you try to generate an URN catalog for an empty `misc.xml` file. *Fix submitted by Timon de Groot in pull request 11686*. [GitHub-5188](https://github.com/magento/magento2/issues/5188) + * The `sampledata:deploy` and `remove` commands now have `no-update` options. *Fix submitted by Fabian Schmengler in pull request 12359*. + * The currencies dropdown menu that is available during the setup process (step 4 -- customize your store) no longer displays unallowed currencies. *Fix submitted by Ricardo Martins in pull request 13770*. + * A database backup created by `setup:backup --db` and restored with `setup:rollback -d` now includes triggers as expected. Previously, the restored database did not include triggers, which meant that indexes could not work correctly. *Fix submitted by Denis Ristic in pull request 11369*. [GitHub-9036](https://github.com/magento/magento2/issues/9036) ### Bundle products + * Save operations now work as expected for bundle products. *Fix submitted by dzianis-yurevich in pull request 12734*. [GitHub-6916](https://github.com/magento/magento2/issues/6916) + * You can now duplicate a bundle product without stripping the original bundle product of its options. *Fix submitted by MattUnity in pull request 1217*. ### Catalog + * Magento now successfully updates a product's `stock_item` `extension_attribute` parameter for a product previously created using REST. *Fix submitted by nuzil in pull request 13494*. + * When two customers check out concurrently for the same product, one of the checkouts now succeeds. Previously, when two customers checked out concurrently for the same product, and the total quantity being ordered is greater than the quantity available, the stock could become negative. *Fix submitted by Myroslav Dobra in pull request 2133*. + * The `getUrl` method in `Magento\Catalog\Model\Product\Attribu…` no longer returns image URLs with unexpected double slashes. *Fix submitted by Igor Tregub in pull request 13498*. + * 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. + * The category filter used for layered navigation for configurable products with no available options now counts products accurately. + * When you set the `category_ids` attribute to be visible in the storefront catalog, Magento now displays catalog listings as expected. Previously, Magento threw an exception. *Fix submitted by Manu Gonzalez Rodriguez in pull request 11389*. [GitHub-11341](https://github.com/magento/magento2/issues/11341) + * Product display issues within categories that have been filtered by price have been resolved: Products are no longer repeated within a category, and random products are no longer included. *Fix submitted by Mayank Zalavadia in pull request 11429*. [GitHub-11139](https://github.com/magento/magento2/issues/11139) + * 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.) *Fix submitted by adrian-martinez-interactiv4 in pull request 11444*. [GitHub-11324](https://github.com/magento/magento2/issues/11324) + * Magento no longer throws an error when you re-save a product attribute with a new name. *Fix submitted by Raul Mateos in pull request 11617*. [GitHub-6770](https://github.com/magento/magento2/issues/6770) + * You can now successfully remove a toolbar from a product listing page. Previously, you could explicitly remove the toolbar from layout configuration, but Magento would return `product_list_toolbar` to the layout. *Fix submitted by mariuscris in pull request 11473*. [GitHub-9413](https://github.com/magento/magento2/issues/9413) + * The `getAttributeText($attributeCode)` method now returns string values as expected. Previously, this method returned an array of attribute values. *Fix submitted by p-bystritsky in pull request 12003*. + * You can now add customizable options to a product. Previously, when you tried to add a custom option to product, Magento threw this error: `A 'Uncaught TypeError: Cannot read property 'apply' of undefined' error`. *Fix submitted by Roman K. in pull request 11965*. [GitHub-11792](https://github.com/magento/magento2/issues/11792) + * Magento now correctly decodes single quotation marks in the Admin attribute option input fields. *Fix submitted by erfanimani in pull request 12133*. [GitHub-12127](https://github.com/magento/magento2/issues/12127) + * You can now save emojis in custom product options. *Fix submitted by Carlos Lizaga in pull request 12253*. + * The `delay` parameter now works as expected, which permits you to set the delay on the JQuery widget opening or closing. Previously, this parameter was documented, but did not work as expected. *Fix submitted by Sam Carr in pull request 12161*. + * Third-party category images now have `size` and `type` properties. *Fix submitted by Vova Yatsyuk in pull request 12161*. + * Category page X-Magento-Tags headers no longer contain product cache identities when category display mode is set to **Static block only**. *Fix submitted by Atish Goswami in pull request 12466*. + * You can now delete rows in the `dynamicRows` component. *Fix submitted by Roman K. in pull request 921*. [GitHub-8830](https://github.com/magento/magento2/issues/8830) + * 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 in pull request 12167*. [GitHub-12110](https://github.com/magento/magento2/issues/12110) + * The `og:type` meta tag content value has been corrected from `` to ``. *Fix submitted by Atish Goswami in pull request 12530*. + * The Product Image Watermark Size Validation message has been revised for accuracy. *Fix submitted by Nickolas Malyovanets in pull request 985*. [GitHub-12613](https://github.com/magento/magento2/issues/12613) + * Magento no longer creates an extraneous new product when you save an existing product whose SKU you've changed. *Fix submitted by Nickolas Malyovanets in pull request 984*. [GitHub-12535](https://github.com/magento/magento2/issues/12535) + * cURL requests to delete a product's tier pricing when used on store code **all** now works as expected. Previously, this cURL request deleted the tier pricing but also all the image selections for the product. *Fix submitted by Nickolas Malyovanets in pull request 977*. [GitHub-10797](https://github.com/magento/magento2/issues/10797) + * Sort by Price now works as expected on the catalog search page. *Fix submitted by Roman K. in pull request 929*. [GitHub-12468](https://github.com/magento/magento2/issues/12468) + * If an error occurs when you run `catalog:images:resize`, Magento now includes an entry into the log file. Previously, Magento displayed an error message, but did not add an entry into any log files. *Fix submitted by Roman K. in pull request 1000*. [GitHub-8204](https://github.com/magento/magento2/issues/8204) + * You can now duplicate and save a product successfully. Previously, you could not successfully duplicate a product, and Magento displayed this message: `Notice: Undefined offset: 0 in /home/software/public_html/vendor/magento/module-catalog/Model/Category/Link/SaveHandler.php on line 124`. *Fix submitted by p-bystritsky in pull request 983*. [GitHub-12259](https://github.com/magento/magento2/issues/12259) + * The REST API now saves all product properties as expected. Previously, Magento did not save the price and weight, and these attributes were not returned in the result of the POST request. *Fix submitted by Nickolas Malyovanets in pull request 1018*. [GitHub-6486](https://github.com/magento/magento2/issues/6486) + * Duplicate `email` IDs no longer occur on the Magento default contact page when running Google Chrome { Version 63.0.3239.84 (Official Build) (64-bit) }. *Fix submitted by serhii-balko in pull request 1036*. [GitHub-12712](https://github.com/magento/magento2/issues/12712) + * The `hasDataChanges` attribute for loaded EAV collection items now returns `true` or `false` as expected. Previously, this attribute always returned `true`. *Fix submitted by virtual97 in pull request 12736*. [GitHub-12374](https://github.com/magento/magento2/issues/12374) + * `ajax:addToCart` now contains the `eventData` parameter, with variables for SKU and quantity. *Fix submitted by Renon Stewart in pull request 12875*. + * You can now successfully save a new option for a product custom attribute when the value of Admin scope is empty. Previously, Magento threw an exception. *Fix submitted by virtual97 in pull request 12755*. + * You can now sort product collections by the `is_saleable` attribute. *Fix submitted by Nickolas Malyovanets in pull request 1045*. [GitHub-7768](https://github.com/magento/magento2/issues/7768) + * We've added a failsafe to the `items.phtml` file. *Fix submitted by Sam Granger in pull request 13086*. + * You can now save a product with customizable options. Previously, if you were trying to add a customizable option (for example, a customer group) to a product, Magento did not let you save the product, the form did not close, and a validation issue was triggered. *Fix submitted by luismiguelyangehuaman in pull request 12048*. [GitHub-11528](https://github.com/magento/magento2/issues/11528) + * Magento now correctly displays stock status for products. *Fix submitted by Roman K. in pull request 955*. + * The catalog product list widget now works with multiple SKUs. Previously, Magento displayed this error, `We're sorry, an error has occurred while generating this email`. *Fix submitted by Nickolas Malyovanets in pull request 1050*. [GitHub-11897](https://github.com/magento/magento2/issues/11897) + * Magento now loads type-dependent layout handles before more specific ID/SKU layout handles. Previously, when Magento updated a product page layout for a specific ID with `catalog_product_view_id_.xml`, some changes were overwritten by a less specific `catalog_product_view_type_.xml`. *Fix submitted by Andreas Schrammel in pull request 12807*. + * Unused temporary variables have been removed from `Adminhtml/Category/Save.html`. *Fix submitted by Pierre Martin in pull request 13663*. + * Language switching now works as expected on the Catalog and Product pages. Previously, language switching did not work on these pages in production mode. *Fix submitted by p-bystritsky in pull request 1143*. [GitHub-11963](https://github.com/magento/magento2/issues/11963) + * The subcategory URL path is now updated for a store view according to the URL path of its parent category. + * In cases where `imagebuilder` makes multiple calls, it no longer re-uses attributes from the first call if attributes from a second call are empty. Previously, `imagebuilder` re-used the attributes from the first call, which lead to unexpected results in storefront image display. *Fix submitted by Ihor Sviziev in pull request 13438*. + * `updateCart.phtml` now uses dynamic rather than hardcoded validators. *Fix submitted by Gil Greenberg in pull request 13462*. + * An unused constructor dependency has been removed from the Product Link Save handler. *Fix submitted by Ihor Sviziev in pull request 13436*. + * 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. *Fix submitted by gwharton in pull request 13682*. [GitHub-10595](https://github.com/magento/magento2/issues/10595) + * We've improved the visibility of products when displayed by category, and you can now filter by status. *Fix submitted by Peter Jaap Blaakmeer in pull request 12564*. + * 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 were 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 in pull request 12650*. ### Cart and checkout + * Magento no longer adds addresses with `saveInAddressBook` set to **0** to the address book for new customers. Previously, if you placed an order as a guest and set the `save_in_address_book` setting for an address to **0**, Magento still copied that address to the customer address book when registering as a new customer on the checkout success page. [GitHub-7691](https://github.com/magento/magento2/issues/7691) + * Magento no longer combines the Custom Checkout and Shipping steps when Magento loads the checkout page. *Fix submitted by Roman K. in pull request 975*. + * You can now successfully change currency for an order before you complete the order. Previously, if you changed currency, when you proceeded with checkout by choosing as Bank Transfer Payment as Payment Method, Magento displayed, **Your credit card will be charged for**. *Fix submitted by Roman K. in pull request 993*. [GitHub-12526](https://github.com/magento/magento2/issues/12526) + * Magento no longer throws a JavaScript error on the cart from postcode validation when **United States** is deselected in the **Allowed Countries** Admin option (**Admin > Stores > Settings > Configuration > General > Default Country**). *Fix submitted by codekipple in pull request 13051*. + * Street format spacing when multiple streets are present is now consistent across **Shipping** and **Review & Payments** checkout steps. *Fix submitted by nfourteen in pull request 13082*. + * Magento now displays text on the New Cart Rules page correctly. Previously, labels listed in the Store View Specific Labels section of this page were sometimes truncated or duplicated. *Fix submitted by serhii-balko in pull request 1146*. [GitHub-12231](https://github.com/magento/magento2/issues/12231) + * When you check out as guest and click **Create an account** on the success page, you can now click on the customer name to jump to the customer record. *Fix submitted by Renon Stewart in pull request 12998*. + * The `XML_PATH_CUSTOMER_MUST_BE_LOGGED` constant has been deprecated. *Fix submitted by Roman K. in pull request 1148*. [GitHub-7848](https://github.com/magento/magento2/issues/7848) + * `dropdownDialog` is now required when the minicart is available. *Fix submitted by Alexander Menk in pull request 13830*. + * The Check Out with Multiple Addresses page now displays an empty state field as expected when a customer changes from one address to another. *Fix submitted by enriquei4 in pull request 13364*. [GitHub-8621](https://github.com/magento/magento2/issues/8621) ### Configurable products + * You can now use custom price symbols when assigning prices to configurable prices. Previously, Magento did not properly display prices for configurable products when you used a custom price symbol when assigning prices. *Fix submitted by pradeep-wagento in pull request 13025*. [GitHub-12430](https://github.com/magento/magento2/issues/12430) + * Magento now reorders configurable attribute options as expected on the product page. *Fix submitted by wardcapp in pull request 12963*. [GitHub-7441](https://github.com/magento/magento2/issues/7441) + * Magento now displays elements of the **Catalog > Products > Create Configurations** page correctly. Previously, the currency symbol overlapped with the attribute option's price during creation of a configurable product. *Fix submitted by Vasilina in pull request*. + * If you enter an invalid value for an SKU during the creation of the configurable product, Magento now displays a warning and does not let you save the product. Previously, you were not warned about invalid SKU values, and when you clicked **Save**, all the product information you entered was lost. *Fix submitted by Zamaroka in pull request 12737*. [GitHub-11953](https://github.com/magento/magento2/issues/11953) + * Magento now correctly runs a partial attribute (EAV) reindex of configurable products whose child products' visibility is set to **Not Visible Individually**. *Fix submitted by Roman K. in pull request 1023*. [GitHub-12667](https://github.com/magento/magento2/issues/12667) + * Magento now displays the ID and `Visibility` parameter of child products when you use the `LinkManagementInterface` service contract to retrieve the ID and visibility of these products. Previously, Magento displayed NULL. *Fix submitted by Nickolas Malyovanets in pull request 986*. + * The product price indexer (`catalog_product_price reindex`) no longer stalls during reindexing. + * Product records inside the `catalog_product_super_link` table are no longer updated needlessly when you save a configurable product. Previously, saving 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. ### Customer accounts + * Magento now trims trailing and leading spaces when saving the name of a new contact. *Fix submitted by wardcapp in pull request 12964*. [GitHub-10415](https://github.com/magento/magento2/issues/10415) + * We fixed the invalid parameter configuration that was provided for the `$block` argument of `Magento\\Ui\\Component\\HtmlContent`. *Fix submitted by Tomasz Gregorczyk in pull request 12964*. + * Magento now successfully sends email (with content) even when you make a mistake in the email template file name. Previously, when the template name was incorrect, Magento sent the email with no content. *Fix submitted by Roman K. in pull request 970*. [GitHub-8437](https://github.com/magento/magento2/issues/8437) + * You can now import customer addresses from websites with country restrictions. + * Magento no longer displays the `Too many password reset requests` error when the **max wait time between password resets** setting has been disabled. Previously, when you attempted to reset a customer's password through the Admin, Magento threw an error even when you disabled the `max wait time between password resets` setting in the store configuration settings. *Fix submitted by Cole Hafner in pull request*. [GitHub-11409](https://github.com/magento/magento2/issues/11409) + * Magento no longer throws an exception when you try to open your account address book immediately after creating a customer. *Fix submitted by Chris Pook in pull request 12220*. [GitHub-12180](https://github.com/magento/magento2/issues/12180) + * The `isConfirmationRequired` method in the `AccountManagement` class is now public, which makes it available for plugins. (For example, you can now develop custom business logic to decide if confirmation is required (yes/no) for certain customers.) *Fix submitted by Derrick Heesbeen in pull request 11878*. + * When configuring a customer account, you can now leave the prefix or suffix fields as optional. Previously, if you did not select an option for these fields, Magento defaulted to selecting the first option in the list. *Fix submitted by Andreas von Studnitz in pull request 11462*. [GitHub-7241](https://github.com/magento/magento2/issues/7241) + * The storefront **Back to Sign in** button now works as expected. Previously, when you clicked that button, Magento simply reloaded the current page. *Fix submitted by StasKozar in pull request 12759*. [GitHub-12715](https://github.com/magento/magento2/issues/12715) + * The `window.checkout.customerLoginUrl` now contains a URL that includes the referrer in base64 encoding (for example, https://myshop.com/customer/account/login/referrer/aHR0cHM6Ly9teXNob3AuY29tL2NoZWNrb3V0). Previously, the login URL did not include a referrer (for example, https://myshop.com/customer/account/login). *Fix submitted by Tommy Quissens in pull request 12630*. [GitHub-12627](https://github.com/magento/magento2/issues/12627) + * When you are on the cart page and click a product's **Edit** link, the product page now correctly displays the product quantity currently in the cart. *Fix submitted by Arnoud Beekman in pull request 13310*. + * You can now create a custom attribute of type file for Customer objects as expected. Previously, you could create the custom attribute, but the file would not upload. *Fix submitted by Mkennethsmith in pull request 13563*. [GitHub-11252](https://github.com/magento/magento2/issues/11252) + * The event `customer_address_after_save_viv_observer` is now spelled correctly in the Customer `events.xml` file.. *Fix submitted by Renon Stewart in pull request 13661*. + * The `is_subscribed` extended parameter is now returned when a web API is used to modify or return information about a customer. ### Dashboard + * The `top destinations` configuration field is now configurable on a store level. Previously, it was configurable on the global level only. *Fix submitted by Andreas von Studnitz in pull request 13052*. + * When multiple validation errors occur while saving a customer address, Magento now shows unique messages in the `adminhtml` customer edit page. *Fix submitted by adrian-martinez-interactiv4 in pull request 12922*. + * The scroll bar on the Admin store switcher is now scrollable on machines running OSX. *Fix submitted by Juan Alonso in pull request 12931*. ### Directory + * The `\Magento\Directory\Model\PriceCurrency::format()` method no longer fails if you do not configure a conversion rate from the base to the specified currency. Previously, if you did not specify this conversion rate, Magento rendered the price (amount) in the base currency, not the specified currency. *Fix submitted by Nickolas Malyovanets in pull request 1022*. [GitHub-6965](https://github.com/magento/magento2/issues/6965) + * 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 in pull request*. [GitHub-12378](https://github.com/magento/magento2/issues/12378) + * You can now disable the **State is Required for** field. *Fix submitted by Burlacu Vasilii in pull request 12917*. [GitHub-12894](https://github.com/magento/magento2/issues/12894) ### EAV attributes + * 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 in pull request 12945*. [GitHub-12555](https://github.com/magento/magento2/issues/12555) + * You can now use a single query to retrieve attribute groups from multiple attribute sets. *Fix submitted by Marius Strajeru in pull request 12105*. [GitHub-11936](https://github.com/magento/magento2/issues/11936) + * Magento now saves multiselect attribute for a product that has a related product using another attribute set. Previously, multiselect attribute values were not saved for a product in the Admin panel when it had a related product that used another attribute set. *Fix submitted by awarche in pull request 12767*. + * The product attribute repository save method no longer resets the source model to null when you create a new product attribute through code. *Fix submitted by Nickolas Malyovanets in pull request 1012*. [GitHub-10814](https://github.com/magento/magento2/issues/10814) + * Magento now uses the correct `entity_model` in `table eav_entity_type` for invoices (`Magento\Sales\Model\ResourceModel\Order\Invoice`). Previously, in `table eav_entity_type` for `entity_type_code = "invoice"` the `entity_model` was `Magento\Sales\Model\ResourceModel\Order`. *Fix submitted by Nickolas Malyovanets in pull request 980*. [GitHub-10123](https://github.com/magento/magento2/issues/10123) + * When a validation message is returned, Magento no longer displays the attribute code (`$attrCode`), but instead returns the label (`$label`). This change makes it easier to translate messages. *Fix submitted by Hewerson Freitas in pull request 12120*. + * You can now perform a mass update on products that have more than 60 attributes. + * `Magento\Eav\Model\Config::getAttribute` now stops the Profiler before it returns Profiler run time. Previously, `Magento\Eav\Model\Config::getAttribute` did not stop the Profiler from returning early, and consequently reported incorrect run time. *Fix submitted by Nick Anstee in pull request 12810*. + * The `beforeSave` method encodes an attribute value only when it has not yet been encoded. Previously, the JSON-encoded attribute value was loaded correctly, but when you saved a product multiple times, the attribute value was also encoded multiple times. Consequently, Magento did save the product, and displayed this error, **Unable to unserialize value**. *Fix submitted by Tibor Kotosz in pull request 13551*. + * The deprecated `each()` function has been removed from the code. *Fix submitted by Ihor Sviziev in pull request*. ### Email + * Order confirmation emails from the Admin in multistore environments no longer default to the primary store, but instead are sent from the store that the customer used. *Fix submitted by Roman K. in pull request*. [GitHub-11740](https://github.com/magento/magento2/issues/11740) + * Magento no longer sends misleading feedback when sending tracking information email. Previously, instead of sending a notice that a shipment was underway, this response was sent, **You sent the shipment**. *Fix submitted by Nickolas Malyovanets in pull request 1245*. [GitHub-5697](https://github.com/magento/magento2/issues/5697) ### Frameworks + * 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'`. *Fix submitted by Etty in pull request 12752*. [GitHub-4292](https://github.com/magento/magento2/issues/4292) + * `vendor/magento/framework/composer.json` now declares a dependency on `magento/zendframework1`. Previously, packages depending on `magento/framework` packages failed to execute. *Fix submitted by Ihor Sviziev in pull request 12990*. [GitHub-12967](https://github.com/magento/magento2/issues/12967) + * The `filePutContents('file.txt')` now contains content as expected. Previously, Magento threw this error, `The specified "file.text" file could not be written`. *Fix submitted by Nickolas Malyovanets in pull request 962*. [GitHub-7467](https://github.com/magento/magento2/issues/7467) + * You can now subscribe to events that contain a number in their name. *Fix submitted by Mobecls in pull request 12758*. [GitHub-5035](https://github.com/magento/magento2/issues/5035) + * PhpDoc now shows correct parameter types. Previously, PhpDoc showed only a type of `string`, although `array` was also a valid parameter type. *Fix submitted by Freek Vandeursen in pull request 12826*. + * Content no longer jumps when pages are reloaded on the Admin because `notices-wrapper` now has a `min-height` setting. *Fix submitted by Anna Völkl in pull request 12985*. + * We've corrected a typo in the `Magento\Ui\Controller\Adminhtml\Index\Render` action. *Fix submitted by Nick in pull request 12951*. + * `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. + * `\Magento\Config\Model\Config\Structure\Reader::processingDocument` now throws a more helpful validation exception. *Fix submitted by Patrick McLain in pull request 12859*. + * Creating an observer that uses `ObserverInterface` no longer triggers a patch-level dependency on `magento/framework`. *Fix submitted by Kristof in pull request 13759*. + * RewriteBase directive has been added to the `.htaccess` file in `pub/static` to support the potential installation of Magento code under a directory inside the web root. *Fix submitted by Cristiano Casciotti in pull request 13678*. + * The doc block of the `walk` method in a collection now correctly describes that the method accepts a string or array. *Fix submitted by ByteCreation in pull request 13373*. + * The report processor now returns an HTTP 500 status code (which better communicates the need for user action) instead of a 503 status code. *Fix submitted by Andrew Howden in pull request 11513*. [GitHub-11512](https://github.com/magento/magento2/issues/11512) #### App framework + * The customer grid indexer now works as expected. Previously, this indexer did not work when reindexing using the command-line interface during upgrade. *Fix submitted by Leonid Poluyanov in pull request 10838*. [GitHub-10838](https://github.com/magento/magento2/issues/10838) + * `expectException()` calls now accept two parameters (instead of one). *Fix submitted by Fabian Schmengler in pull request 11099*. [GitHub-11059](https://github.com/magento/magento2/issues/11059) + * The `findAccessorMethodName()` method (`Magento\Framework\Reflection\NameFinder`) now provides a more helpful exception message. *Fix submitted by Roman K. in pull request 12303*. [GitHub-9764](https://github.com/magento/magento2/issues/9764) + * 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. *Fix submitted by Vova Yatsyuk in pull request 12302*. [GitHub-12146](https://github.com/magento/magento2/issues/12146) + * You can now alter the transport variable in the `email_invoice_set_template_vars_before` event. *Fix submitted by Roman K. in pull request 12132*. [GitHub-10210](https://github.com/magento/magento2/issues/10210) + * Validation of South Korean zip codes now supports current South Korean zip code format. *Fix submitted by Roman K. in pull request 903*. [GitHub-9515](https://github.com/magento/magento2/issues/9515) #### Configuration framework + * Scope-based configuration now decrypts data as expected. Previously, scope-based configuration failed to decrypt data on the default store only. *Fix submitted by DubovykOleksandr in pull request 8591*. #### JavaScript framework + * The `depends` field now works for fields of type `radio` in `system.xml`. *Fix submitted by Javier Villanueva in pull request 11539*. + * Magento now sorts fields and amounts as expected when you extend a dynamic-row element in a `ui_component` and add a sort order attribute with an amount that falls between the other elements' amount. *Fix submitted by Harald Deiser in pull request 11846*. #### Session framework + * The Setup Wizard page now loads successfully when the session storage method is memcache. Previously, Magento returned an HTTP 500 error when you navigated to **System > Tools > Web Setup Wizard Setup Wizard** in installations where you've configured the session storage method to memcache in `env.php`. *Fix submitted by Marty S in pull request 11608*. [GitHub-9633](https://github.com/magento/magento2/issues/9633) + * 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 wish list page, but Magento did not add the product. *Fix submitted by Oscar Recio in pull request 12038*. [GitHub-11825](https://github.com/magento/magento2/issues/11825) + * Anonymous calls using REST no longer trigger the creation of PHP sessions. *Fix submitted by serhii-balko in pull request 1247*. [GitHub-7213](https://github.com/magento/magento2/issues/7213) #### Web API framework + * A user who has been denied permissions for negotiable quote editing can now create customer addresses. + * Swagger now works as expected on instances of Magento that are running on non-standard ports. *Fix submitted by JeroenVanLeusden in pull request 12541*. + * You can now set attribute values to empty strings using REST. Previously, Magento would not let you use REST to pass the following attributes with empty values: `special_from_date`, `special_to_date`, and `special_price`. *Fix submitted by Roman K. in pull request 916*. [GitHub-8862](https://github.com/magento/magento2/issues/8862) + * We've updated the `webapi` module to improve the order of how arguments are merged in multiple `di.xml` files. *Fix submitted by serhii-balko in pull request 995*. [GitHub-8647](https://github.com/magento/magento2/issues/8647) + * `SearchCriteriaBuilder` now has a check to determine if sort order should be applied. Previously, `SearchCriteriaBuilder` built wrong criteria (`ORDER BY part`). *Fix submitted by Nickolas Malyovanets in pull request 1003*. [GitHub-5738](https://github.com/magento/magento2/issues/5738) + * Anonymous Web API access to the Admin now unlocks REST catalog calls without requiring `auth` tokens. *Fix submitted by Roman K. in pull request 904*. [GitHub-9468](https://github.com/magento/magento2/issues/9468) #### Zend framework + * `vendor/magento/framework/composer.json` now declares a dependency on `magento/zendframework1`. Previously, packages depending on `magento/framework` packages failed to execute. *Fix submitted by Ihor Sviziev in pull request 12990*. ### General + * A customer can now successfully log out of a session and then immediately log back in. Previously, if a customer logged out and then attempted to log in without the logout success page first completing its timeout, Magento displayed the logout page. *Fix submitted by Vinay Shah in pull request 13040*. + * Magento now displays notification messages for only the expected duration. Previously, Magento displayed these messages indefinitely within a session. *Fix submitted by p-bystritsky in pull request 1111*. [GitHub-11527](https://github.com/magento/magento2/issues/11527) + * Sorting by product name now works as expected when filters are applied. *Fix submitted by p-bystritsky in pull request 1192*. [GitHub-12860](https://github.com/magento/magento2/issues/12860) + * We've removed the `Magento\ProductAlert\Controller\Add\TestObserver` class. *Fix submitted by Alexander Shkurko in pull request 13174*. + * In the top-level README file in the Magento Open Source repository, all links to DevDocs have been updated to 2.2. *Fix submitted by Bhargav Mehta in pull request 13161*. + * Elements within an array in `store_website` table are now correctly formatted. *Fix submitted by Nolwennig Guilbert in pull request 13324*. + * 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`. *Fix submitted by p-bystritsky in pull request 12993*. [GitHub-12993](https://github.com/magento/magento2/issues/12993), [GitHub-12819](https://github.com/magento/magento2/issues/12819) + * The WYSIWYG editor image insertion process now takes into account the static URLs configuration value (configuration setting `cms/wysiwyg/use_static_urls_in_catalog`). *Fix submitted by Nickolas Malyovanets in pull request 1215.* [GitHub-12147](https://github.com/magento/magento2/issues/12147) + * The `` statement in the `system.xml` file now works as expected. Previously, when you entered an XML layout update with CDATA for the first time, it worked as expected. After you saved the file, however, the `CDATA` tag disappeared. *Fix submitted by serhii-balko in pull request 1163*. [GitHub-12322](https://github.com/magento/magento2/issues/12322) + * Magento now strips out unnecessary whitespace in the attribute value IDs used on the review form. Previously, rating titles with whitespace resulted in broken ID attributes. *Fix submitted by Nickolas Malyovanets in pull request 1119*. [GitHub-5451](https://github.com/magento/magento2/issues/5451) + * The header label **Price** in the invoice PDF is now correctly aligned with the invoice item's price. *Fix submitted by serhii-balko in pull request 1216*. [GitHub-8453](https://github.com/magento/magento2/issues/8453) + * Google Analytics `pageview` is no longer triggered twice. *Fix submitted by Bhargav Mehta in pull request 13034*. [GitHub-12221](https://github.com/magento/magento2/issues/12221) + * Minor display issues on the Magento home product page have been resolved. *Fix submitted by Punit Vaswani in pull request 13081*. [GitHub-11796](https://github.com/magento/magento2/issues/11796) + * We've removed a condition from the password reset strength meter that caused a JavaScript error. *Fix submitted by Alisson Oldoni in pull request 13429*. + * The copyright year has been updated to 2018. *Fix submitted by Bhargav Mehta in pull request 13027*. + * Magento now displays the Contact Us page in the menu as expected. Previously, Magento displayed unnecessary space between the category page and the main footer. *Fix submitted by Sanjay Patel in pull request 13026*. [GitHub-12601](https://github.com/magento/magento2/issues/12601) + * The `Learn More Link` widget option in the Recently Viewed Products widget now respects its setting. *Fix submitted by JeroenVanLeusden in pull request 12946*. + * An unused `if` statement in the order invoice `Save.php` has been removed. *Fix submitted by JeroenVanLeusden in pull request 12887*. + * The `sid` variable no longer appears in the storefront URL even if it has been disabled in the Admin. Previously, even when the Magento setting **General > Web > Session Validation Settings > Use SID on Storefront** was set to **No**, the `sid` variable no longer appears in the URL. *Fix submitted by Roman Strelenko in pull request 12743*. [GitHub-9453](https://github.com/magento/magento2/issues/9453) + * The menu item handling has been refactored to read item data from two different sources: * from original XML definition if the cache is empty * from transformed item data when available in the cache. *Fix submitted by Pavel in pull request 12747*. [GitHub-9720](https://github.com/magento/magento2/issues/9720) + * A typo in the `SINGLE_PRODUCT_LAYOUT_HANLDE` constant has been fixed. *Fix submitted by Andreas Schrammel in pull request 12786*. + * The tracking link no longer returns a 404 error in the Admin. *Fix submitted by Ihor Sviziev in pull request*. [GitHub-12206](https://github.com/magento/magento2/issues/12206) + * The product option value price calculation has been improved. Previously, tier prices and customs options were not calculated correctly. *Fix submitted by Marina Gociu in pull request 11563*. [GitHub-5774](https://github.com/magento/magento2/issues/5774) + * White space that is prepended to a coupon code no longer causes an error. Previously, Magento did not apply the coupon and displayed this message: `Coupon code is not valid`. *Fix submitted by Roman K. in pull request 1021*. [GitHub-12656](https://github.com/magento/magento2/issues/12656) + * The **modified** date field on editing pages is now updated as expected. *Fix submitted by Oscar Recio in pull request*. [GitHub-12625](https://github.com/magento/magento2/issues/12625) + * Links to Magento Connect on the Partners and Extensions page have been removed and replaced with links to Magento Marketplace. *Fix submitted by Miguel Balparda in pull request 12633*. [GitHub-12632](https://github.com/magento/magento2/issues/12632) + * HTML tags have been removed from the display of attribute names in the dropdown menu of the Catalog Product list. *Fix submitted by Nickolas Malyovanets in pull request 968*. [GitHub-8011](https://github.com/magento/magento2/issues/8011) + * 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. + * The credit card form is now available when you create an order from the Admin, even when only one payment method is enabled. Previously, when only one payment method was enabled, the Admin did not render this form. + * Full Page Cache is no longer invalidated after you save a predictor category. Previously, all product-related cache data was invalidated, when only a narrow subset of cache tags associated with the `product_id` should have been. + * Magento now displays a more meaningful error message when a module name is misspelled in a unit test. *Fix submitted by Nickolas Malyovanets in pull request 13740*. + * Magento now displays a more meaningful error message when a module name is misspelled in `registration.php`. *Fix submitted by Jānis Elmeris in pull request 12843*. + * In the line `Perform login specific action` in `StorageInterface.php`, `login` has been replaced with `logout`. *Fix submitted by David Angel in pull request 13679*. + * The incorrect field value in the joined `variable_value` table has been replaced with two values: `plain_value` and `html_value`. *Fix submitted by Maksymilian Szydło in pull request 13596*. + * Duplicate array keys in `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` and `app/code/Magento/Downloadable/Helper/File.php` have been removed. *Fix submitted by Leandro F. L. in pull request 12513*. + * The typo in the `getDispretionPath` function name has been corrected to `getDispersionPath`. *Fix submitted by PascalBrouwers in pull request 12507*. [GitHub-12506](https://github.com/magento/magento2/issues/12506) + * Magento now saves new orders created by guest accounts to the Order display as expected. Previously, Magento did not display the order with the customer information assigned to it, and although Magento sent email containing the order ID, the email did not contain information about the ordered items. *Fix submitted by Roman K. in pull request 12241*. [GitHub-10128](https://github.com/magento/magento2/issues/10128) + * CAPTCHA labels now reflect both the symbols and letters associated with the CAPTCHA image. Previously, the text labels referred to the CAPTCHA image referred to letters only, despite there being numbers in the CAPTCHA images, too. This ambiguity had the potential to mislead users about which text to enter. *Fix submitted by RhodriOwainDavies in pull request 12387*. + * The `robots.txt` response header content type is now plain text. *Fix submitted by Milan Osztromok in pull request 12310*. + * Customers can now successfully use RSS to share their wish lists. Previously, when a logged-in user added products to the wish list and then tried to share them using RSS, Magento threw this exception: `report.INFO: Broken reference: the 'wishlist.email.rss' element cannot be added as child to 'root', because the latter doesn't exist` *Fix submitted by mediactbv in pull request*. + * When you select a new main menu option, the previously selected menu item now loses the `ui-state-active` class as expected. *Fix submitted by Arnoud Beekman in pull request 13341*. [GitHub-13327](https://github.com/magento/magento2/issues/13327) + * Issues with displaying full-screen images and video on the configurable product page have been resolved. Previously, Magento displayed video associated with product options on this page as images, rather than video, and full-screen mode for images ignored the configurations settings in `view.xml`. *Fix submitted by Ievgen Shakhsuvarov in pull request 991*. [GitHub-12268](https://github.com/magento/magento2/issues/12268) + * We've fixed issues with the "report module enable/disable changes as deployment markers" functionality in the `Magento_NewRelicReporting` module. Previously, if New Relic's cron was enabled, Magento sent a New Relic deployment marker for every enabled module once per cron period. This resulted in an excessive number of events. *Fix submitted by Kristof in pull request 12477*. + * The New Product Configuration process now works as expected from the Admin. Previously, on the last step of this process, Magento displayed the `the element.disabled is not a function` message, and did not create the product variations as expected. [GitHub-12555](https://github.com/magento/magento2/issues/12555) + * Save operations on CMS pages now load from `pageRepository`. *Fix submitted by JeroenVanLeusden in pull request 13814*. + * 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 in pull request 13844*. [GitHub-13827](https://github.com/magento/magento2/issues/13827), [GitHub-13350](https://github.com/magento/magento2/issues/13350) ### Import/export + * You can now successfully import product images and image labels from CSV files. Previously after import, the alt text field on the Admin was empty, even though the label was imported and was visible on the product list page as alt attribute, and the Product Detail page missed the alt attribute on image fields. *Fix submitted by Ben Robie in pull request 11323*. [GitHub-9931](https://github.com/magento/magento2/issues/9931) -* The CSV file created by using **System > Export** now incorporates the value of `hide_for_product_page`. -*Fix submitted by Nickolas Malyovanets in pull request 11926*. + +* The CSV file created by using **System > Export** now incorporates the value of `hide_for_product_page`. *Fix submitted by Nickolas Malyovanets in pull request 11926*. + * You can now import a value of zero (0) into a custom attribute when using the Admin product import feature. *Fix submitted by p-bystritsky in pull request 12283*. [GitHub-12083](https://github.com/magento/magento2/issues/12083) + * 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 no longer fails when you import products with image filenames containing round brackets from a CSV file. *Fix submitted by p-bystritsky in pull request 1017*. [GitHub-12084](https://github.com/magento/magento2/issues/12084) + * 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. + * Magento now provides a test for adding values in the system variable collection unit test. *Fix submitted by Nickolas Malyovanets in pull request 13742*. + * You can now successfully import configurable products with specified configurable links when the `store_view_code` setting isn't set. Previously, you could successfully import a configurable product with both configurable and additional attributes, but when you viewed the category to which the product belonged, the product was not displayed. [GitHub-5876](https://github.com/magento/magento2/issues/5876) + * Save operations on CMS blocks now load from `pageRepository`. *Fix submitted by JeroenVanLeusden in pull request 13796*. + * The default storefront welcome message now works as expected when the **Translate Inline** (**Stores > Settings > Configuration > Advanced > Developer >**) setting is enabled. *Fix submitted by Paresh Pansuriya in pull request 13038*. [GitHub-12711](https://github.com/magento/magento2/issues/12711) + * You can now use the layout update XML field to include custom CSS in CMS pages. [GitHub-4454](https://github.com/magento/magento2/issues/4454) + * 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 in pull request 13844*. [GitHub-13827](https://github.com/magento/magento2/issues/13827), [GitHub-13350](https://github.com/magento/magento2/issues/13350) ### Indexing + * The URL that points to Magento `crontab` documentation has been updated to reflect current cron documentation in `app/code/Magento/Indexer/Model/Message/Invalid.php`. *Fix submitted by Robbie Thompson in pull request 13050*. + * You can now view the state of the mview queue in real time, which can be useful when debugging indexing issues. You can now view how many items are in the queue pending processing, as well as view information from the `mview_state` table. *Fix submitted by Luke Rodgers in pull request 12122*. ### Infrastructure + * Zoom now works as expected when using dropdown menus. Previously, zoom worked fine, but when you hovered over the category dropdown menu to the overlap area of product image and dropdown menu, the zoom was abnormally active, even though the mouse was still on the dropdown menu. *Fix submitted by Mayank Zalavadia in pull request 13084*. [GitHub-5129](https://github.com/magento/magento2/issues/5129) + * RequireJS loading issues that occur when ad blockers are active have been resolved. Previously, `uBlock` (or any ad blocker) forbade the `trackingCode.js` file from loading, which prompted RequireJS to throw an exception. This exception broke the JavaScript execution flow and caused unexpected issues throughout the storefront. *Fix submitted by Yonn Trimoreau in pull request 13061*. + * `continue()` has been removed from templates. *Fix submitted by Ihor Sviziev in pull request 13076*. + * The comment that marks the `\Magento\Checkout\Model\Cart` class as deprecated now includes a pointer to an alternative class. This fix is part of an ongoing effort to add pointers to valid replacements when marking methods and classes as deprecated. *Fix submitted by Fabian Schmengler in pull request 13061*. [GitHub-10133](https://github.com/magento/magento2/issues/11070) + * A new file (`CODE_OF_CONDUCT.md`) that defines standards for how to engage in the community has been added. *Fix submitted by Ievgen Shakhsuvarov in pull request 12723*. + * `\Magento\Framework\Data\Tree::getNodeById()` no longer contains an invalid type in its PHPDoc block. *Fix submitted by Roman K. in pull request 964*. [GitHub-8507](https://github.com/magento/magento2/issues/8507) + * We’ve resolved naming collisions that previously occurred in the Javascript UI registry. Previously, these naming collisions resulted in the following behaviors: Magento displayed the `element.disabled is not a function` message, and did not create product variations as expected.
[GitHub-12555](https://github.com/magento/magento2/issues/12555) ### Newsletters + * The **About Us** and **Customer Service** links of the Order Confirmation email (and other emails sent to the customer) now work as expected. *Fix submitted by Roman K. in pull request*. [GitHub-12261](https://github.com/magento/magento2/issues/12261) -* Magento now sends the newsletter subscription success email as expected when a customer successfully subscribes to a newsletter. -*Fix submitted by Styopchik in pull request*. [GitHub-12439](https://github.com/magento/magento2/issues/12439) + +* Magento now sends the newsletter subscription success email as expected when a customer successfully subscribes to a newsletter. *Fix submitted by Styopchik in pull request*. [GitHub-12439](https://github.com/magento/magento2/issues/12439) + * Magento now uses indexes to retrieve subscriber information during the creation of email to newsletter subscribers. Previously, Magento did not use indexes for this task, and performance was poor. *Fix submitted by Amit Bera in pull request*. [GitHub-12787](https://github.com/magento/magento2/issues/12787) + * Magento no longer sends multiple confirmation emails when a customer successfully subscribes to a newsletter. *Fix submitted by Torben Höhn in pull request 13044*. [GitHub-12876](https://github.com/magento/magento2/issues/12876) + * The text of the **Subscribe to Newsletter** button now wraps correctly. *Fix submitted by monaemipro in pull request 13041*. [GitHub-12320](https://github.com/magento/magento2/issues/12320) ### Orders + * 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 `getDefaultStoreLocale()` method has been added to allow for the fetching of scoped values. Use this method in `getCreatedAtFormatted()` to ensure that Magento translates the `created_at` order date in emails for the locale being used in that store view. *Fix submitted by JeroenVanLeusden in pull request 11067*. + * You can now successfully open the Order edit page for orders that contain an address with extension attributes. Previously, when you tried to open this page, the page load failed with this error, `Recoverable Error: Object of class Magento\Sales\Api\Data\OrderAddressExtension could not be converted to string in .../module-sales/Model/AdminOrder/Create.php on line 503`. -* Magento now saves an invoice ID on the credit memo when you create a credit memo from the invoice in the Admin. Previously, -the invoice ID was not included. *Fix submitted by Anton Evers in pull request 11067*. [GitHub-11669](https://github.com/magento/magento2/issues/11669) + +* Magento now saves an invoice ID on the credit memo when you create a credit memo from the invoice in the Admin. Previously, the invoice ID was not included. *Fix submitted by Anton Evers in pull request 11067*. [GitHub-11669](https://github.com/magento/magento2/issues/11669) + * Credit memos can have the state open (`\Magento\Sales\Model\Order\Creditmemo::STATE_OPEN`). As a result, you can create a credit memo with an ID that still has to be refunded, and existing credit memos should be refundable if their state is open. *Fix submitted by Anton Evers in pull request 11550*. + * The `Magento\Sales\Service\V1\OrderCreateTest` test now has the correct shipping method fixture. Previously, this test contained an incorrect shipping method fixture, which produced an error whenever an order's shipping method was treated an object. *Fix submitted by andrew-garside-temando in pull request 12227*. + * 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. + * The `getReservedOrderId()` method now uses the current store as expected instead of the default store. *Fix submitted by Timon de Groot in pull request 11702*. [GitHub-9055](https://github.com/magento/magento2/issues/9055) + * When you are editing an order's shipping or billing address, Magento now displays the allowed countries from the correct store view. Previously, possible addresses were derived from the wrong store view. *Fix submitted by Roman K. in pull request*. [GitHub-12560](https://github.com/magento/magento2/issues/12560) + * The `\Magento\Sales\Model\Order\Pdf\AbstractPdf::drawLineBlocks` method now works as expected. Previously, when a text block spanned more than one page, Magento threw a `Zend_Pdf_Exception` error, and displayed this error: `Font has not been set`. *Fix submitted by serhii-balko in pull request 1016*. [GitHub-11743](https://github.com/magento/magento2/issues/11743) + * Magento no longer exports extra records when you export invoices for multiple orders. *Fix submitted by Sanjay Patel in pull request 13208*. [GitHub-12714](https://github.com/magento/magento2/issues/12714) + * 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 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 in pull request 12668*. [GitHub-9969](https://github.com/magento/magento2/issues/9969) + * Join extension attributes are now added as expected to order results when the order is created using REST. *Fix submitted by Nickolas Malyovanets in pull request 1168*. + * The Shipment Tracking REST API now throws an error as expected if the specified order doesn't exist. *Fix submitted by Roman K. in pull request 1162*. + * Invoices now display the exact quantity of a product ordered, even if it is a fractional unit (for example, 6.5). Previously, when Magento tried to invoice an order that had products with quantities that required decimals, it rounded down the quantity to the nearest whole number in the invoice. *Fix submitted by Nickolas Malyovanets in pull request 11997*. [GitHub-11941](https://github.com/magento/magento2/issues/11941) ### Payment methods + * The multishipping checkout flow now supports the CyberSource payment method. This payment method is supported on Magento Commerce only. However, as part of the process of adding CyberSource support, we've made improvements to the Multishipping module to simplify integration process for other payment methods. + * Logged-out customers can no longer see previously saved credit cards. Previously, users logged in as guest could see some payment information from an earlier, canceled order. + * Third-party developers can now customize payment errors messages for payment integrations based on the Magento Payment Provider Gateway. + * PayPal Express Checkout now appears as a payment option on the Checkout page when the PayPal buttons are available on the shopping cart page. Previously, PayPal did not appear as a payment method on the Checkout page when the billing agreement was disabled, although the PayPal buttons were still available on the shopping cart page. + * You can now view order details for an order created with a custom offline payment method. Previously, Magento displayed PHP warning (undefined index) instead of the order details. *Fix submitted by Alex in pull request 12296*. [GitHub-3596](https://github.com/magento/magento2/issues/3596) + * Magento no longer disables the BrainTree **Place Order** button after a failed payment validation. *Fix submitted by Ievgen Sentiabov in pull request 12902*. + * The `is_active` and `is_visible` columns now default to true even when column default values are not set in the `vault_payment_token` installation script. *Fix submitted by helloitsluke in pull request 12965*. + * If you've chosen a custom payment method that is offline when you create an order, Magento now displays that payment method's name as expected when you view order details in **Payment & Shipping**. *Fix submitted by zamoroka in pull request 12731*. [GitHub-12209](https://github.com/magento/magento2/issues/12209) + * 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. + * Magento now correctly adds checkout agreements data to requests and validates payment information when you place an order using PayPal Express. Previously, you could check this box, but Magento did not parse the agreements data or pass it to the set-payment-information API. This failure in turn triggered the `CheckoutAgreements` validation plugin, which failed to validate. *Fix submitted by Ričards Zālītis in pull request 12401*. + * Magento no longer archives active orders that are placed using PayPal Express Checkout. Previously, if you placed an order using PayPal Express Checkout, Magento would place the order as expected but also add it to the list of archived orders. + * Magento now correctly displays transparent `.PNG` watermarks on JPEG images. Previously, Magento did not correctly display a transparent watermark as expected on an image, but instead displayed a white outline of the box where the watermark should be. *Fix submitted by Elze Kool in pull request 11060*. [GitHub-10661](https://github.com/magento/magento2/issues/10661) -* 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 in pull request 13777*. -[GitHub-13315](https://github.com/magento/magento2/issues/13315) + +* 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 in pull request 13777*. [GitHub-13315](https://github.com/magento/magento2/issues/13315) + * Magento now correctly updates the credit memo total when a merchant issues a refund. *Fix submitted by serhii-balko in pull request 1185*. [GitHub-11798](https://github.com/magento/magento2/issues/11798) ### Performance + * The addition of a cache for the `getimagesize()` function has improved product image loading. + * Each cache type now has its own separate cache storage. + * We’ve optimized the initialization of the Product View block, which gives an 11% performance improvement for simple product views. + * Magento now caches search results for faster response time on popular searches. A system administrator can configure how many top search queries can be cached. This enhancement can result in up to a 36% improvement for cacheable search terms. ### Quote + * If a customer changes the currency type of his order-in-progress while viewing the shopping cart, Magento displays a message that shows the minimum order necessary in the new currency. Previously, this minimum was calculated incorrectly. *Fix submitted by Neeta Kangiya in pull request 13039*. + * Magento no longer truncates very long telephone numbers in the order page. Previously, Magento cut off very long phone numbers at 20 digits. *Fix submitted by Danny Verkade in pull request 13015*. [GitHub-10869](https://github.com/magento/magento2/issues/10869) -* You can now implement a product attribute that sets **Catalog Input Type for Store Owner** equal to **Fixed Product Tax** in a multistore environment. *Fix submitted by Danny Verkade in pull request 13019*. -[GitHub-12393](https://github.com/magento/magento2/issues/12393) + +* You can now implement a product attribute that sets **Catalog Input Type for Store Owner** equal to **Fixed Product Tax** in a multistore environment. *Fix submitted by Danny Verkade in pull request 13019*. [GitHub-12393](https://github.com/magento/magento2/issues/12393) + * 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. + * An integrity constraint violation error no longer occurs after you reorder a product with custom options. *Fix submitted by Vinay Shah in pull request 13036*. [GitHub-12705](https://github.com/magento/magento2/issues/12705) ### Reports + * The Products in Cart report is now accurate. Previously, if you created a Products in Cart report (**Open Reports** > Marketing > **Products in Cart**) after deleting a product from the catalog, the report displayed a blank list of products. *Fix submitted by angelo983 in pull request 12539*. + * You can now successfully export the Ordered Products report to a CSV file. Previously, the export file contained no report data. ### SalesRule + * Magento now displays the correct catalog rule price for bundle products with custom options. + * Cart prices now displays the Cart Price Rule shipping discount correctly. Previously, when you placed an order, Magento displayed this error: `Payment method is not available`. + * Magento now displays the exact label value that was given in the Admin during the cart price rule creation. *Fix submitted by Ihor Sviziev in pull request 13141*. [GitHub-11428](https://github.com/magento/magento2/issues/11428), [GitHub-11497](https://github.com/magento/magento2/issues/11497) + * Magento now correctly displays in Cart Price rules the nesting levels for categories with nesting levels that exceed three levels. + * Coupon codes that a customer applies to a subsequently canceled order are now available for re-use as expected. Previously, once a customer canceled this order, he could not apply the coupon code to another order. *Fix submitted by p-bystritsky in pull request*. [GitHub-12817](https://github.com/magento/magento2/issues/12817) ### Search + * Magento now displays popular search terms in **SEO & Search > Search Terms** as expected. *Fix submitted by p-bystritsky in pull request 1024*. [GitHub-10743](https://github.com/magento/magento2/issues/10743) + * Layered navigation now displays the correct product count. Previously, the layered navigation product count incorrectly included only in-stock products. *Fix submitted by Roman K. in pull request 12063*. [GitHub-11946](https://github.com/magento/magento2/issues/11946) + * Grid filtration now handles MySQL special characters as expected. *Fix submitted by laconica-sergey in pull request 12749*. ### Shipping @@ -977,158 +1252,201 @@ the invoice ID was not included. *Fix submitted by Anton Evers in pull request You can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{ page.baseurl }}/release-notes/ReleaseNotesMagentoShipping2.2.x.html). + * The handling fee configuration of shipping methods is now explicitly cast to 0 to avoid warnings from PHP 7.1. *Fix submitted by Fabian Schmengler in pull request 13680*. + * Unused `count($_items)` in templates have been removed. *Fix submitted by Alexander Shkurko in pull request 12901*. + * Magento now enforces the minimum order amount during checkout as expected. Previously, you could bypass the minimum order amount logic by clicking **Check Out with Multiple Addresses**, removing products from the order,and then clicking **Update Qty & Addresses**. *Fix submitted by Roman K. in pull request 963*. + * DHL product codes now match those published in the latest DHL products and services guide. Previously, three DHL product codes in the DHL Shipping module were incorrect. *Fix submitted by gwharton in pull request 12666*. ### Sitemap + * `sitemap.xml` now displays URLs without `/home` appended. *Fix submitted by Oscar Recio in pull request 12649*. [GitHub-12446](https://github.com/magento/magento2/issues/12446) + * Sitemaps generated in a multi-store environment now include the correct URLs for each store (that is, `http://storename.com/` instead of `http://defaultstore.com/`). *Fix submitted by Roman K. in pull request 935*. [GitHub-12482](https://github.com/magento/magento2/issues/12482) + * Magento now handles errors that occur during sitemap generation in a less intrusive way. If Magento throws an exception when generating a sitemap, it now sends the errors through email as configured in the sitemap configuration XML. The former `_translateModel` property is not used anymore, and the inline translation is correctly suspended using the `inlineTranslation` property instead. *Fix submitted by Marina Gociu in pull request*. [GitHub-10502](https://github.com/magento/magento2/issues/10502) ### Swagger + * The code formatting in the Swagger block and template has been updated. *Fix submitted by JeroenVanLeusden in pull request 13485*. ### Swatches + * 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 in pull request 12044*. [GitHub-9410](https://github.com/magento/magento2/issues/9410), [GitHub-10707](https://github.com/magento/magento2/issues/10707), [GitHub-10737](https://github.com/magento/magento2/issues/10737), [GitHub-11032](https://github.com/magento/magento2/issues/11032) + * Visual swatches that have a color assigned now show that color in the swatch box. Previously, Magento did not display any color in the color swatch box. *Fix submitted by Chris Pook in pull request 13101*. [GitHub-11828](https://github.com/magento/magento2/issues/11828) + * The error message displayed when you do not supply enough information during swatch creation has been edited for clarity and grammatical accuracy. *Fix submitted by Nickolas Malyovanets in pull request 1117*. [GitHub-5550](https://github.com/magento/magento2/issues/5550) ### Tax + * The default selector on the Admin's tax rule edit page now selects only the correct container (tax rate) following the Tax Rate multiselect. Previously, the default selector selected three elements, which resulted in inaccurate results. *Fix submitted by Pieter Hoste in pull request 13643*. [GitHub-12791](https://github.com/magento/magento2/issues/12791) + * We've removed the redundant default discount tax calculation (`tax/calculation/discount_tax`) from `Magento/Tax/etc/config.xml`. *Fix submitted by Vincent Marmiesse in pull request 13449*. + * The **Not yet calculated** text string immediately adjacent to the string **Tax** on the checkout page is now translated as expected. *Fix submitted by Roman K. in pull request 1147*. [GitHub-7849](https://github.com/magento/magento2/issues/7849) + * Magento no longer displays incorrect tax amounts for orders when using a non-default tax configuration.. *Fix submitted by Pieter Cappelle in pull request 12639*. [GitHub-10347](https://github.com/magento/magento2/issues/10347) ### Testing + * `ConfigurationTest` no longer fails when you install Magento using Composer. *Fix submitted by Nickolas Malyovanets in pull request 1161*. [GitHub-12574](https://github.com/magento/magento2/issues/12574) + * We've added `MagentoStyle` as console Input/output in Travis tests. + * We've reimplemented tests using Jasmine as part of the process of removing the legacy JavaScript test framework and completely removing `JSTestDriver` support. *Fix submitted by Carlos Lizaga in pull request*. [GitHub-12342](https://github.com/magento/magento2/issues/12342) + * `functional.suite.dist.yml` now handles custom backend names. Previously, the value for the `backend_name` configuration was hardcoded. *Fix submitted by scribam in pull request 12884*. + * We've added a missing preference for `ObjectManager\ConfigInterface` in integration tests. *Fix submitted by Fabian Schmengler in pull request 12845*. [GitHub-12844](https://github.com/magento/magento2/issues/12844) + * Integration Test Annotation `magentoAppArea` no longer breaks with valid values. *Fix submitted by Nickolas Malyovanets in pull request 996*. [GitHub-2907](https://github.com/magento/magento2/issues/2907) + * The inline documentation of the static test for XSS vulnerabilities now reflects that `@escapeNotVerified` is disallowed in Magento versions equal or greater than 2.2. *Fix submitted by Matthias Zeis in pull request 12639*. + * We've added integration tests for product URL rewrite generation. *Fix submitted by Adrien Louis-Rossignol in pull request 13567*. [GitHub-5863](https://github.com/magento/magento2/issues/5863), [GitHub-8227](https://github.com/magento/magento2/issues/8227), [GitHub-8957](https://github.com/magento/magento2/issues/8957), [GitHub-10073](https://github.com/magento/magento2/issues/10073), [GitHub-13240](https://github.com/magento/magento2/issues/13240) ### Themes + * 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. + * If a customer is logged in while Magento loads, then the welcome message displays the customer's full name. *Fix submitted by Oleh Kravets in pull request 12738*. [GitHub-12719](https://github.com/magento/magento2/issues/12719) + * You can now disable the full screen gallery on mobile devices *Fix submitted by p-bystritsky in pull request 1006*. [GitHub-12490](https://github.com/magento/magento2/issues/12490), [GitHub-12285](https://github.com/magento/magento2/issues/12285) + * Protected method `getHtml` now checks each child for an existing class and then appends the `$outermostClass` if true. Previously, when creating a dependency injection for the `Magento\Theme\Block\Html\Topmenu` class, you could not change class names on children in a `beforeGetHtml` method because `getHtml` declares `setClass()` on all child items. *Fix submitted by jonshipman in pull request 12862*. + * 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. ### Translations and locale + * Inline translations and custom translators now work for Knockout templates. *Fix submitted by Dmitry Fedyuk in pull request 12953*. [GitHub-2156](https://github.com/magento/magento2/issues/2156) + * Magento now provides a locale for Swedish (Finland). *Fix submitted by Nickolas Malyovanets in pull request 1207*. [GitHub-13095](https://github.com/magento/magento2/issues/13095) + * Magento now uses current locale (as defined in **Stores > Settings > Configuration > Advanced Reporting**) when translating the time zone label. Previously, Magento used operating system settings instead of current locale. *Fix submitted by adrian-martinez-interactiv4 in pull request 13408*. + * Newsletter labels can now handle Chinese language. *Fix submitted by Dasharth patel in pull request 13029*. [GitHub-12320](https://github.com/magento/magento2/issues/12320) + * The module responsible for generating the `js-translations.json` file now contains a routine that translates strings in tags such as ` + * You can now configure a form field with validation range-words. As a result, Category Name is validated, and Category is created (or displays the correct error message, if validation fails). Previously, Magento displayed an error message in the console. *Fix submitted by Robin Huy in pull request 12739*. -* The **Save Block** button on the Add New Block page no longer ignores clicks if the content editor is empty. -*Fix submitted by Roman K. in pull request 1032*. [GitHub-8114](https://github.com/magento/magento2/issues/8114) + +* The **Save Block** button on the Add New Block page no longer ignores clicks if the content editor is empty. *Fix submitted by Roman K. in pull request 1032*. [GitHub-8114](https://github.com/magento/magento2/issues/8114) + * Magento now disables the promo code input box after a user applies a promo code. *Fix submitted by Chirag P in pull request 13030*. + * 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 in pull request 12469*. [GitHub-12268](https://github.com/magento/magento2/issues/12268) + * The PHP notice that Magento displays when an invalid `ui_component` configuration is used has been improved. *Fix submitted by Vova Yatsyuk in pull request 12239*. + * Magento has added verification for previously set filters in `Magento/Ui/Component/Filters`, which has eliminated duplication of filters in collection `where` conditions. + * Inconsistency in the animation of the Admin spinner progress indicator has been corrected. *Fix submitted by Neill Robson in pull request 13700*. ### URL rewrites + * When using a store code in a URL, Magento now retrieves the value of `Store_Code` from the store if the store code value is empty. Previously, under these circumstances, Magento threw an error. *Fix submitted by Oscar Recio in pull request 12529*. [GitHub-8615](https://github.com/magento/magento2/issues/12450) ### Web API framework + * You can now use the REST API to make requests that include a slash (/) in an SKU. *Fix submitted by Roman K. in pull request 949*. [GitHub-8615](https://github.com/magento/magento2/issues/8615) ### Wish list + * Magento now correctly displays a product's special price when you add it to a wish list. Previously, if you added a product with a special price to the wish list, Magento displayed the product with its regular price. + * You can now remove an item description from a wish list. *Fix submitted by p-bystritsky in pull request 981*. [GitHub-12582](https://github.com/magento/magento2/issues/12582) diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.4EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.4EE.md index 4a5bbb4722f..d38a3561d78 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.4EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.4EE.md @@ -31,21 +31,27 @@ Looking for more information on these new features as well as many others? Check This section describes changes in this release that are not full-fledged features or bug fixes, but that add noticeable improvements to product performance or ease-of-use. + * The admin global search is now translatable, extensible, and takes into account the ACL settings for the current user. See [Using global search](http://docs.magento.com/m2/ee/user_guide/stores/admin-global-search.html) for more information. *Fix submitted by Roman K. in pull request 1167*. [GitHub-7698](https://github.com/magento/magento2/issues/7698) + * The multi-shipping checkout flow now supports the CyberSource payment method. This payment method is supported by Magento Commerce only. 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. + * Magento has an automated checker to enforce the short array syntax convention that we are now enforcing in new code. This standard complies with all requirements of PSR-2. *Fix submitted by Nickolas Malyovanets in pull request 12499*. + * Magento now provides dedicated payment and shipping debug log files to store information specific to those functional areas. + * The Emogrifier dependency has been upgraded to 2.0.0 or later. *Fix submitted by Oliver Klee in pull request 13132*. + * We've replaced `is_null` with strict comparison only for models and block in the following modules: `Catalog`, `Tax`, `Sales`, and `EAV`. *Fixes submitted by Alexander Shkurko in pull requests 13171, 13170, 1163*. #### dotmailer enhancements @@ -77,27 +83,35 @@ We do not recommend upgrading to Magento 2.2.4 if you deploy across multiple web ### Installation, setup, and deployment + * The `backup` command now works as expected. *Fix submitted by Jagriti Joshi in pull request 13066*. [GitHub-12877](https://github.com/magento/magento2/issues/12877) + * Links to Magento installation documentation in `setup/view/magento/readiness-check/progress.html` are now correct. *Fix submitted by Jonas Hünig in pull request 12857*. + * You can now use the `app:config:status` command to check whether configuration propagation is up-to-date. *Fix submitted by Juan Alonso in pull request 12441*. + * The `bin/magento setup:rollback -d filename.sql` command now works as expected. Previously, this database rollback operation failed on certain versions of Magento (for example, 2.1.9). *Fix submitted by Roman K. in pull request 12108*. [GitHub-12064](https://github.com/magento/magento2/issues/12064) + * You can now set API access to integrations for Admin roles, which gives privileged users the ability to grant limited access to users such as third-party integrators. [GitHub-9684](https://github.com/magento/magento2/issues/9684) + * You can now enable or disable the Magento Profiler from the command line. [GitHub-9277](https://github.com/magento/magento2/issues/9277) + * The icons for Extension Manager and Module Manager are now consistent with the main content area and left-hand menu of the Web Setup Wizard. *Fix submitted by Danny Verkade in pull request 11388*. [GitHub-11236](https://github.com/magento/magento2/issues/11236) + * Magento now continues operating in maintenance mode if it was previously enabled. Previously, Magento disabled maintenance mode when you used one of these commands: * `bin\magento module:uninstall` @@ -109,893 +123,1163 @@ We do not recommend upgrading to Magento 2.2.4 if you deploy across multiple web *Fix submitted by Joke Puts in pull request 11052*. [GitHub-9918](https://github.com/magento/magento2/issues/9918) + * You can specify a custom version for static files being deployed, and now nginx sample config files can match these custom versions, too. *Fix submitted by Scott Buchanan in pull request 12521*. + * 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 in pull request*. + * The `ext-bcmath` PHP extension is now required in Open Source. Previously, it was required for Commerce only. *Fix submitted by Mobecls in pull request 12768*. + * The `cache_lifetime` default setting for the `Magento\Theme\Block\Html\Footer` block is no longer set to **false**, and the new default setting is **3600**. *Fix submitted by zolat in pull request 13762*. + * The `bin/magento maintenance:allow-ips` command now has the `--add` flag, which appends a new IP address to the list of allowed IP addresses. Previously, when you added a new IP address, you had to copy the existing addresses. *Fix submitted by Barry vd. Heuvel in pull request 13586*. + * The `config:set` command now has a `lock-config` option, and configuration values are always stored in `app/etc/config.php` instead of `app/etc/env.php`. *Fix submitted by Andreas von Studnitz in pull request 13280*. + * In the `Backend/etc/adminhtml/system.xml` file, the `url` group and `redirect_to_base` field are now configured so that the `showInWebsite` and `showInStore` attributes are set to `1`. *Fix submitted by JeroenVanLeusden in pull request 13614*. + * You can now deploy static content on demand while in production mode. + * The output of the `Magento maintenance:status` command no longer inserts a comma in between IP addresses, making it easier to copy and paste the values. *Fix submitted by Barry vd. Heuvel in pull request 13587*. + * The `DeploymentConfig` reader now always returns an array. *Fix submitted by Barry vd. Heuvel in pull request 13584*. + * Magento has improved how it manages the size of the `cron_schedule` table. [GitHub-11002](https://github.com/magento/magento2/issues/11002) + * Magento now includes a helper object to facilitate access to styling objects in the Symfony console. *Fix submitted by Wesley Guthrie in pull request 11504*. + * Magento no longer throws an error when you try to generate a URN catalog for an empty `misc.xml` file. *Fix submitted by Timon de Groot in pull request 11686*. [GitHub-5188](https://github.com/magento/magento2/issues/5188) + * The `sampledata:deploy` and `remove` commands now have `no-update` options. *Fix submitted by Fabian Schmengler in pull request 12359*. + * The currencies dropdown menu that is available during the setup process (step 4 -- customize your store) no longer displays unallowed currencies. *Fix submitted by Ricardo Martins in pull request 13770*. ### Bundle products + * Save operations now work as expected for bundle products. *Fix submitted by dzianis-yurevich in pull request 12734*. [GitHub-6916](https://github.com/magento/magento2/issues/6916) + * You can now duplicate a bundle product without stripping the original bundle product of its options. *Fix submitted by MattUnity in pull request 1217*. ### Catalog + * Magento now successfully updates a product's `stock_item` `extension_attribute` parameter for a product previously created using REST. *Fix submitted by nuzil in pull request 13494*. + * When two customers check out concurrently for the same product, one of the checkouts now succeeds. Previously, when two customers checked out concurrently for the same product, and the total quantity being ordered is greater than the quantity available, the stock could become negative. *Fix submitted by Myroslav Dobra in pull request 2133*. + * The `getUrl` method in `Magento\Catalog\Model\Product\Attribu…` no longer returns image URLs with unexpected double slashes. *Fix submitted by Igor Tregub in pull request 13498*. + * 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. + * The category filter used for layered navigation for configurable products with no available options now counts products accurately. + * When you set the `category_ids` attribute to be visible in the storefront catalog, Magento now displays catalog listings as expected. Previously, Magento threw an exception. *Fix submitted by Manu Gonzalez Rodriguez in pull request 11389*. [GitHub-11341](https://github.com/magento/magento2/issues/11341) + * Product display issues within categories that have been filtered by price have been resolved: Products are no longer repeated within a category, and random products are no longer included. *Fix submitted by Mayank Zalavadia in pull request 11429*. [GitHub-11139](https://github.com/magento/magento2/issues/11139) + * 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.) *Fix submitted by adrian-martinez-interactiv4 in pull request 11444*. [GitHub-11324](https://github.com/magento/magento2/issues/11324) + * Magento no longer throws an error when you re-save a product attribute with a new name. *Fix submitted by Raul Mateos in pull request 11617*. [GitHub-6770](https://github.com/magento/magento2/issues/6770) + * You can now successfully remove a toolbar from a product listing page. Previously, you could explicitly remove the toolbar from layout configuration, but Magento would return `product_list_toolbar` to the layout. *Fix submitted by mariuscris in pull request 11473*. [GitHub-9413](https://github.com/magento/magento2/issues/9413) + * The `getAttributeText($attributeCode)` method now returns string values as expected. Previously, this method returned an array of attribute values. *Fix submitted by p-bystritsky in pull request 12003*. + * You can now add customizable options to a product. Previously, when you tried to add a custom option to the product, Magento threw this error: `A 'Uncaught TypeError: Cannot read property 'apply' of undefined' error`. *Fix submitted by Roman K. in pull request 11965*. [GitHub-11792](https://github.com/magento/magento2/issues/11792) + * Magento now correctly decodes single quotation marks in the Admin attribute option input fields. *Fix submitted by erfanimani in pull request 12133*. [GitHub-12127](https://github.com/magento/magento2/issues/12127) + * You can now save emojis in custom product options. *Fix submitted by Carlos Lizaga in pull request 12253*. + * Magento no longer displays unused product attributes with a value of N/A or NO on the storefront. *Fix submitted by p-bystritsky in pull request 12057*. [GitHub-6634](https://github.com/magento/magento2/issues/6634), [GitHub-9961](https://github.com/magento/magento2/issues/9961) + * The `delay` parameter now works as expected, which permits you to set the delay on the JQuery widget opening or closing. Previously, this parameter was documented, but did not work as expected. *Fix submitted by Sam Carr in pull request 12161*. + * Third-party category images now have `size` and `type` properties. *Fix submitted by Vova Yatsyuk in pull request 12161*. + * Category page X-Magento-Tags headers no longer contain product cache identities when category display mode is set to **Static block only**. *Fix submitted by Atish Goswami in pull request 12466*. + * You can now delete rows in the `dynamicRows` component. *Fix submitted by Roman K. in pull request 921*. [GitHub-8830](https://github.com/magento/magento2/issues/8830) + * You can now add a new product with custom attributes that have 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 in pull request 12167*. [GitHub-12110](https://github.com/magento/magento2/issues/12110) + * The `og:type` meta tag content value has been corrected from `` to ``. *Fix submitted by Atish Goswami in pull request 12530*. + * The Product Image Watermark Size Validation message has been revised for accuracy. *Fix submitted by Nickolas Malyovanets in pull request 985*. [GitHub-12613](https://github.com/magento/magento2/issues/12613) + * Magento no longer creates an extraneous new product when you save an existing product whose SKU you've changed. *Fix submitted by Nickolas Malyovanets in pull request 984*. [GitHub-12535](https://github.com/magento/magento2/issues/12535) + * cURL requests to delete a product's tier pricing when used on store code **all** now works as expected. Previously, this cURL request deleted the tier pricing but also all the image selections for the product. *Fix submitted by Nickolas Malyovanets in pull request 977*. [GitHub-10797](https://github.com/magento/magento2/issues/10797) + * Sort by Price now works as expected on the catalog search page. *Fix submitted by Roman K. in pull request 929*. [GitHub-12468](https://github.com/magento/magento2/issues/12468) + * If an error occurs when you run `catalog:images:resize`, Magento now includes an entry into the log file. Previously, Magento displayed an error message, but did not add an entry into any log files. *Fix submitted by Roman K. in pull request 1000*. [GitHub-8204](https://github.com/magento/magento2/issues/8204) + * You can now duplicate and save a product successfully. Previously, you could not successfully duplicate a product, and Magento displayed this message: `Notice: Undefined offset: 0 in /home/software/public_html/vendor/magento/module-catalog/Model/Category/Link/SaveHandler.php on line 124`. *Fix submitted by p-bystritsky in pull request 983*. [GitHub-12259](https://github.com/magento/magento2/issues/12259) + * The REST API now saves all product properties as expected. Previously, Magento did not save the price and weight, and these attributes were not returned in the result of the POST request. *Fix submitted by Nickolas Malyovanets in pull request 1018*. [GitHub-6486](https://github.com/magento/magento2/issues/6486) + * Duplicate `email` IDs no longer occur on the Magento default contact page when running Google Chrome { Version 63.0.3239.84 (Official Build) (64-bit) }. *Fix submitted by serhii-balko in pull request 1036*. [GitHub-12712](https://github.com/magento/magento2/issues/12712) + * The `hasDataChanges` attribute for loaded EAV collection items now returns `true` or `false` as expected. Previously, this attribute always returned `true`. *Fix submitted by virtual97 in pull request 12736*. [GitHub-12374](https://github.com/magento/magento2/issues/12374) + * `ajax:addToCart` now contains the `eventData` parameter, with variables for SKU and quantity. *Fix submitted by Renon Stewart in pull request 12875*. + * You can now successfully save a new option for a product custom attribute when the value of Admin scope is empty. Previously, Magento threw an exception. *Fix submitted by virtual97 in pull request 12755*. + * You can now sort product collections by the `is_saleable` attribute. *Fix submitted by Nickolas Malyovanets in pull request 1045*. [GitHub-7768](https://github.com/magento/magento2/issues/7768) + * We've added a failsafe to the `items.phtml` file. *Fix submitted by Sam Granger in pull request 13086*. + * You can now save a product with customizable options. Previously, if you were trying to add a customizable option (for example, a customer group) to a product, Magento did not let you save the product, the form did not close, and a validation issue was triggered. *Fix submitted by luismiguelyangehuaman in pull request 12048*. [GitHub-11528](https://github.com/magento/magento2/issues/11528) + * Magento now correctly displays stock status for products. *Fix submitted by Roman K. in pull request 955*. + * Visual Merchandiser now includes website scope when displaying the correct prices and availability of configurable products. + * The catalog product list widget now works with multiple SKUs. Previously, Magento displayed this error, `We're sorry, an error has occurred while generating this email`. *Fix submitted by Nickolas Malyovanets in pull request 1050*. [GitHub-11897](https://github.com/magento/magento2/issues/11897) + * Magento now loads type-dependent layout handles before more specific ID/SKU layout handles. Previously, when Magento updated a product page layout for a specific ID with `catalog_product_view_id_.xml`, some changes were overwritten by a less specific `catalog_product_view_type_.xml`. *Fix submitted by Andreas Schrammel in pull request 12807*. + * Unused temporary variables have been removed from `Adminhtml/Category/Save.html`. *Fix submitted by Pierre Martin in pull request 13663*. + * Language switching now works as expected on the Catalog and Product pages. Previously, language switching did not work on these pages in production mode. *Fix submitted by p-bystritsky in pull request 1143*. [GitHub-11963](https://github.com/magento/magento2/issues/11963) + * The subcategory URL path is now updated for a store view according to the URL path of its parent category. + * In cases where `imagebuilder` makes multiple calls, it no longer re-uses attributes from the first call if attributes from a second call are empty. Previously, `imagebuilder` re-used the attributes from the first call, which lead to unexpected results in storefront image display. *Fix submitted by Ihor Sviziev in pull request 13438*. + * `updateCart.phtml` now uses dynamic rather than hardcoded validators. *Fix submitted by Gil Greenberg in pull request 13462*. + * An unused constructor dependency has been removed from the Product Link Save handler. *Fix submitted by Ihor Sviziev in pull request 13436*. + * A database backup created by `setup:backup --db` and restored with `setup:rollback -d` now includes triggers as expected. Previously, the restored database did not include triggers, which meant that indexes could not work correctly. *Fix submitted by Denis Ristic in pull request 11369*. [GitHub-9036](https://github.com/magento/magento2/issues/9036) + * 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. *Fix submitted by gwharton in pull request 13682*. [GitHub-10595](https://github.com/magento/magento2/issues/10595) + * We've improved the visibility of products when displayed by category, and you can now filter by status. *Fix submitted by Peter Jaap Blaakmeer in pull request 12564*. + * 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 in pull request 12650*. + * We’re resolved issues with product creation that occurred on installations of Magento Commerce with B2B installed and Update by Schedule indexer mode set. ### Cart and checkout + * Magento no longer adds addresses with `saveInAddressBook` set to **0** to the address book for new customers. Previously, if you placed an order as a guest and set the `save_in_address_book` setting for an address to **0**, Magento still copied that address to the customer address book when registering as a new customer on the checkout success page. [GitHub-7691](https://github.com/magento/magento2/issues/7691) + * Magento no longer combines the Custom Checkout and Shipping steps when Magento loads the checkout page. *Fix submitted by Roman K. in pull request 975*. + * 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. in pull request 993*. [GitHub-12526](https://github.com/magento/magento2/issues/12526) + * Magento no longer throws a JavaScript error on the cart from postcode validation when the **United States** is deselected in the **Allowed Countries** Admin option (**Admin > Stores > Settings > Configuration > General > Default Country**). *Fix submitted by codekipple in pull request 13051*. + * Street format spacing when multiple streets are present is now consistent across **Shipping** and **Review & Payments** checkout steps. *Fix submitted by nfourteen in pull request 13082*. + * 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 serhii-balko in pull request 1146*. [GitHub-12231](https://github.com/magento/magento2/issues/12231) + * When you check out as a guest and click **Create an account** on the success page, you can now click on the customer name to jump to the customer record. *Fix submitted by Renon Stewart in pull request 12998*. + * The `XML_PATH_CUSTOMER_MUST_BE_LOGGED` constant has been deprecated. *Fix submitted by Roman K. in pull request 1148*. [GitHub-7848](https://github.com/magento/magento2/issues/7848) + * `dropdownDialog` is now required when the mini cart is available. *Fix submitted by Alexander Menk in pull request 13830*. + * The Check Out with Multiple Addresses page now displays an empty state field as expected when a customer changes from one address to another. *Fix submitted by enriquei4 in pull request 13364*. [GitHub-8621](https://github.com/magento/magento2/issues/8621) ### Configurable products + * You can now use custom price symbols when assigning prices to configurable prices. Previously, Magento did not properly display prices for configurable products when you used a custom price symbol when assigning prices. *Fix submitted by pradeep-wagento in pull request 13025*. [GitHub-12430](https://github.com/magento/magento2/issues/12430) + * Magento now reorders configurable attribute options as expected on the product page. *Fix submitted by wardcapp in pull request 12963*. [GitHub-7441](https://github.com/magento/magento2/issues/7441) + * Magento now displays elements of the **Catalog > Products > Create Configurations** page correctly. Previously, the currency symbol overlapped with the attribute option's price during the creation of a configurable product. *Fix submitted by Vasilina in a pull request*. + * If you enter an invalid value for an SKU during the creation of the configurable product, Magento now displays a warning and does not let you save the product. Previously, you were not warned about invalid SKU values, and when you clicked **Save**, all the product information you entered was lost. *Fix submitted by Zamaroka in pull request 12737*. [GitHub-11953](https://github.com/magento/magento2/issues/11953) + * Magento now correctly runs a partial attribute (EAV) reindex of configurable products whose child products' visibility is set to **Not Visible Individually**. *Fix submitted by Roman K. in pull request 1023*. [GitHub-12667](https://github.com/magento/magento2/issues/12667) + * Magento now displays the ID and `Visibility` parameter of child products when you use the `LinkManagementInterface` service contract to retrieve the ID and visibility of these products. Previously, Magento displayed NULL. *Fix submitted by Nickolas Malyovanets in pull request 986*. + * The product price indexer (`catalog_product_price reindex`) no longer stalls during reindexing. + * Product records inside the `catalog_product_super_link` table are no longer updated needlessly when you save a configurable product. Previously, saving 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. ### Customer accounts + * Magento now trims trailing and leading spaces when saving the name of a new contact. *Fix submitted by wardcapp in pull request 12964*. [GitHub-10415](https://github.com/magento/magento2/issues/10415) + * We fixed the invalid parameter configuration that was provided for the `$block` argument of `Magento\\Ui\\Component\\HtmlContent`. *Fix submitted by Tomasz Gregorczyk in pull request 12964*. + * Magento now successfully sends an email (with content) even when you make a mistake in the email template file name. Previously, when the template name was incorrect, Magento sent the email with no content. *Fix submitted by Roman K. in pull request 970*. [GitHub-8437](https://github.com/magento/magento2/issues/8437) + * You can now import customer addresses from websites with country restrictions. + * Magento no longer displays the `Too many passwords reset requests` error when the **max wait time between password resets** setting has been disabled. Previously, when you attempted to reset a customer's password through the Admin, Magento threw an error even when you disabled the `max wait time between password resets` setting in the store configuration settings. *Fix submitted by Cole Hafner in a pull request*. [GitHub-11409](https://github.com/magento/magento2/issues/11409) + * Magento no longer throws an exception when you try to open your account address book immediately after creating a customer. *Fix submitted by Chris Pook in pull request 12220*. [GitHub-12180](https://github.com/magento/magento2/issues/12180) + * The `isConfirmationRequired` method in the `AccountManagement` class is now public, which makes it available for plugins. (For example, you can now develop custom business logic to decide if confirmation is required (yes/no) for certain customers.) *Fix submitted by Derrick Heesbeen in pull request 11878*. + * When configuring a customer account, you can now leave the prefix or suffix fields as optional. Previously, if you did not select an option for these fields, Magento defaulted to selecting the first option in the list. *Fix submitted by Andreas von Studnitz in pull request 11462*. [GitHub-7241](https://github.com/magento/magento2/issues/7241) + * The storefront **Back to Sign in** button now works as expected. Previously, when you clicked that button, Magento simply reloaded the current page. *Fix submitted by StasKozar in pull request 12759*. [GitHub-12715](https://github.com/magento/magento2/issues/12715) + * The `window.checkout.customerLoginUrl` now contains a URL that includes the referrer in base64 encoding (for example, https://myShop.com/customer/account/login/referrer/aHR0cHM6Ly9teXNob3AuY29tL2NoZWNrb3V0). Previously, the login URL did not include a referrer (for example, https://myShop.com/customer/account/login). *Fix submitted by Tommy Quissens in pull request 12630*. [GitHub-12627](https://github.com/magento/magento2/issues/12627) + * When you are on the cart page and click a product's **Edit** link, the product page now correctly displays the product quantity currently in the cart. *Fix submitted by Arnoud Beekman in pull request 13310*. + * You can now create a custom attribute of type file for Customer objects as expected. Previously, you could create the custom attribute, but the file would not upload. *Fix submitted by Mkennethsmith in pull request 13563*. [GitHub-11252](https://github.com/magento/magento2/issues/11252) + * The event `customer_address_after_save_viv_observer` is now spelled correctly in the Customer `events.xml` file. *Fix submitted by Renon Stewart in pull request 13661*. + * The `is_subscribed` extended parameter is now returned when a web API is used to modify or return information about a customer. ### Dashboard + * The `top destinations` configuration field is now configurable on a store level. Previously, it was configurable on the global level only. *Fix submitted by Andreas von Studnitz in pull request 13052*. + * When multiple validation errors occur while saving a customer address, Magento now shows unique messages in the `adminhtml` customer edit page. *Fix submitted by adrian-martinez-interactiv4 in pull request 12922*. + * The scrollbar on the Admin store switcher is now scrollable on machines running OSX. *Fix submitted by Juan Alonso in pull request 12931*. ### Directory + * The `\Magento\Directory\Model\PriceCurrency::format()` method no longer fails if you do not configure a conversion rate from the base to the specified currency. Previously, if you did not specify this conversion rate, Magento rendered the price (amount) in the base currency, not the specified currency. *Fix submitted by Nickolas Malyovanets in pull request 1022*. [GitHub-6965](https://github.com/magento/magento2/issues/6965) + * 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 in pull request*. [GitHub-12378](https://github.com/magento/magento2/issues/12378) + * You can now disable the **State is Required for** field. *Fix submitted by Burlacu Vasilii in pull request 12917*. [GitHub-12894](https://github.com/magento/magento2/issues/12894) ### EAV attributes + * 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 in pull request 12945*. [GitHub-12555](https://github.com/magento/magento2/issues/12555) + * You can now use a single query to retrieve attribute groups from multiple attribute sets. *Fix submitted by Marius Strajeru in pull request 12105*. [GitHub-11936](https://github.com/magento/magento2/issues/11936) + * Magento now saves multi-select attributes for a product that has a related product using another attribute set. Previously, multi-select attribute values were not saved for a product in the Admin panel when it had a related product that used another attribute set. *Fix submitted by awarche in pull request 12767*. + * The product attribute repository save method no longer resets the source model to null when you create a new product attribute through code. *Fix submitted by Nickolas Malyovanets in pull request 1012*. [GitHub-10814](https://github.com/magento/magento2/issues/10814) + * Magento now uses the correct `entity_model` in `table eav_entity_type` for invoices (`Magento\Sales\Model\ResourceModel\Order\Invoice`). Previously, in `table eav_entity_type` for `entity_type_code = "invoice"` the `entity_model` was `Magento\Sales\Model\ResourceModel\Order`. *Fix submitted by Nickolas Malyovanets in pull request 980*. [GitHub-10123](https://github.com/magento/magento2/issues/10123) + * When a validation message is returned, Magento no longer displays the attribute code (`$attrCode`), but instead returns the label (`$label`). This change makes it easier to translate messages. *Fix submitted by Hewerson Freitas in pull request 12120*. + * You can now perform a mass update on products that have more than 60 attributes. + * `Magento\Eav\Model\Config::getAttribute` now stops the Profiler before it returns Profiler runtime. Previously, `Magento\Eav\Model\Config::getAttribute` did not stop the Profiler from returning early and consequently reported incorrect runtime. *Fix submitted by Nick Anstee in pull request 12810*. + * The `beforeSave` method encodes an attribute value only when it has not yet been encoded. Previously, the JSON-encoded attribute value was loaded correctly, but when you saved a product multiple times, the attribute value was also encoded multiple times. Consequently, Magento did save the product and displayed this error, **Unable to unserialize value**. *Fix submitted by Tibor Kotosz in pull request 13551*. + * The deprecated `each()` function has been removed from the code. *Fix submitted by Ihor Sviziev in a pull request*. ### Email + * Order confirmation emails from the Admin in multistore environments no longer default to the primary store, but instead are sent from the store that the customer used. *Fix submitted by Roman K. in pull request*. [GitHub-11740](https://github.com/magento/magento2/issues/11740) + * Magento no longer sends misleading feedback when sending tracking information email. Previously, instead of sending a notice that a shipment was underway, this response was sent, **You sent the shipment**. *Fix submitted by Nickolas Malyovanets in pull request 1245*. [GitHub-5697](https://github.com/magento/magento2/issues/5697) ### Frameworks + * 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'`. *Fix submitted by Etty in pull request 12752*. [GitHub-4292](https://github.com/magento/magento2/issues/4292) + * `vendor/magento/framework/composer.json` now declares a dependency on `magento/zendframework1`. Previously, packages depending on `magento/framework` packages failed to execute. *Fix submitted by Ihor Sviziev in pull request 12990*. [GitHub-12967](https://github.com/magento/magento2/issues/12967) + * The `filePutContents('file.txt')` now contains content as expected. Previously, Magento threw this error, `The specified "file.text" file could not be written*`. *Fix submitted by Nickolas Malyovanets in pull request 962*. [GitHub-7467](https://github.com/magento/magento2/issues/7467) + * You can now subscribe to events that contain a number in their name. *Fix submitted by Mobecls in pull request 12758*. [GitHub-5035](https://github.com/magento/magento2/issues/5035) + * PhpDoc now shows correct parameter types. Previously, PhpDoc showed only a type of `string`, although `array` was also a valid parameter type. *Fix submitted by Freek Vandeursen in pull request 12826*. + * Content no longer jumps when pages are reloaded on the Admin because `notices-wrapper` now has a `min-height` setting. *Fix submitted by Anna Völkl in pull request 12985*. + * We've corrected a typo in the `Magento\Ui\Controller\Adminhtml\Index\Render` action. *Fix submitted by Nick in pull request 12951*. + * `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. + * `\Magento\Config\Model\Config\Structure\Reader::processingDocument` now throws a more helpful validation exception. *Fix submitted by Patrick McLain in pull request 12859*. + * Creating an observer that uses `ObserverInterface` no longer triggers a patch-level dependency on `magento/framework`. *Fix submitted by Kristof in pull request 13759*. + * RewriteBase directive has been added to the `.htaccess` file in `pub/static` to support the potential installation of Magento code under a directory inside the web root. *Fix submitted by Cristiano Casciotti in pull request 13678*. + * The doc block of the `walk` method in a collection now correctly describes that the method accepts a string or array. *Fix submitted by ByteCreation in pull request 13373*. + * The report processor now returns an HTTP 500 status code (which better communicates the need for user action) instead of a 503 status code. *Fix submitted by Andrew Howden in pull request 11513*. [GitHub-11512](https://github.com/magento/magento2/issues/11512) #### App framework + * 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 in pull request 10838*. [GitHub-10838](https://github.com/magento/magento2/issues/10838) + * `expectException()` calls now accept two parameters (instead of one). *Fix submitted by Fabian Schmengler in pull request 11099*. [GitHub-11059](https://github.com/magento/magento2/issues/11059) + * The `findAccessorMethodName()` method (`Magento\Framework\Reflection\NameFinder`) now provides a more helpful exception message. *Fix submitted by Roman K. in pull request 12303*. [GitHub-9764](https://github.com/magento/magento2/issues/9764) + * 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. *Fix submitted by Vova Yatsyuk in pull request 12302*. [GitHub-12146](https://github.com/magento/magento2/issues/12146) + * You can now alter the transport variable in the `email_invoice_set_template_vars_before` event. *Fix submitted by Roman K. in pull request 12132*. [GitHub-10210](https://github.com/magento/magento2/issues/10210) + * Validation of South Korean zip codes now supports current South Korean zip code format. *Fix submitted by Roman K. in pull request 903*. [GitHub-9515](https://github.com/magento/magento2/issues/9515) #### Configuration framework + * Scope-based configuration now decrypts data as expected. Previously, scope-based configuration failed to decrypt data on the default store only. *Fix submitted by DubovykOleksandr in pull request 8591*. #### JavaScript framework + * The `depends` field now works for fields of type `radio` in `system.xml`. *Fix submitted by Javier Villanueva in pull request 11539*. + * Magento now sorts fields and amounts as expected when you extend a dynamic-row element in a `ui_component` and add a sort order attribute with an amount that falls between the other elements' amount. *Fix submitted by Harald Deiser in pull request 11846*. #### Session framework + * The Setup Wizard page now loads successfully when the session storage method is Memcache. Previously, Magento returned an HTTP 500 error when you navigated to **System > Tools > Web Setup Wizard Setup Wizard** in installations where you've configured the session storage method to Memcache in `env.php`. *Fix submitted by Marty S in pull request 11608*. [GitHub-9633](https://github.com/magento/magento2/issues/9633) + * 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. *Fix submitted by Oscar Recio in pull request 12038*. [GitHub-11825](https://github.com/magento/magento2/issues/11825) + * Anonymous calls using REST no longer trigger the creation of PHP sessions. *Fix submitted by serhii-balko in pull request 1247*. [GitHub-7213](https://github.com/magento/magento2/issues/7213) #### Web API framework + * A user who has been denied permissions for negotiable quote editing can now create customer addresses. + * Swagger now works as expected on instances of Magento that are running on non-standard ports. *Fix submitted by JeroenVanLeusden in pull request 12541*. + * You can now set attribute values to empty strings using REST. Previously, Magento would not let you use REST to pass the following attributes with empty values: `special_from_date`, `special_to_date`, and `special_price`. *Fix submitted by Roman K. in pull request 916*. [GitHub-8862](https://github.com/magento/magento2/issues/8862) + * We've updated the `webapi` module to improve the order of how arguments are merged in multiple `di.xml` files. *Fix submitted by serhii-balko in pull request 995*. [GitHub-8647](https://github.com/magento/magento2/issues/8647) + * `SearchCriteriaBuilder` now has a check to determine if sort order should be applied. Previously, `SearchCriteriaBuilder` built wrong criteria (`ORDER BY part`). *Fix submitted by Nickolas Malyovanets in pull request 1003*. [GitHub-5738](https://github.com/magento/magento2/issues/5738) + * Anonymous Web API access to the Admin now unlocks REST catalog calls without requiring `auth` tokens. *Fix submitted by Roman K. in pull request 904*. [GitHub-9468](https://github.com/magento/magento2/issues/9468) #### Zend framework + * `vendor/magento/framework/composer.json` now declares a dependency on `magento/zendframework1`. Previously, packages depending on `magento/framework` packages failed to execute. *Fix submitted by Ihor Sviziev in pull request 12990*. ### General + * A customer can now successfully log out of a session and then immediately log back in. Previously, if a customer logged out and then attempted to log in without the logout success page first completing its timeout, Magento displayed the logout page. *Fix submitted by Vinay Shah in pull request 13040*. + * Magento now displays notification messages for only the expected duration. Previously, Magento displayed these messages indefinitely within a session. *Fix submitted by p-bystritsky in pull request 1111*. [GitHub-11527](https://github.com/magento/magento2/issues/11527) + * Sorting by product name now works as expected when filters are applied. *Fix submitted by p-bystritsky in pull request 1192*. [GitHub-12860](https://github.com/magento/magento2/issues/12860) + * We've removed the `Magento\ProductAlert\Controller\Add\TestObserver` class. *Fix submitted by Alexander Shkurko in pull request 13174*. + * In the top-level README file in the Magento Open Source repository, all links to DevDocs have been updated to 2.2. *Fix submitted by Bhargav Mehta in pull request 13161*. + * Elements within an array in `store_website` table are now correctly formatted. *Fix submitted by Nolwennig Guilbert in pull request 13324*. + * 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`. *Fix submitted by p-bystritsky in pull request 12993*. [GitHub-12993](https://github.com/magento/magento2/issues/12993), [GitHub-12819](https://github.com/magento/magento2/issues/12819) + * The WYSIWYG editor image insertion process now takes into account the static URLs configuration value (configuration setting `cms/wysiwyg/use_static_urls_in_catalog`). *Fix submitted by Nickolas Malyovanets in pull request 1215.* [GitHub-12147](https://github.com/magento/magento2/issues/12147) + * The `` statement in the `system.xml` file now works as expected. Previously, when you entered an XML layout update with CDATA for the first time, it worked as expected. After you saved the file, however, the `CDATA` tag disappeared. *Fix submitted by serhii-balko in pull request 1163*. [GitHub-12322](https://github.com/magento/magento2/issues/12322) + * Magento now strips out unnecessary whitespace in the attribute value IDs used on the review form. Previously, rating titles with whitespace resulted in broken ID attributes. *Fix submitted by Nickolas Malyovanets in pull request 1119*. [GitHub-5451](https://github.com/magento/magento2/issues/5451) + * The header label **Price** in the invoice PDF is now correctly aligned with the invoice item's price. *Fix submitted by serhii-balko in pull request 1216*. [GitHub-8453](https://github.com/magento/magento2/issues/8453) + * Google Analytics `pageview` is no longer triggered twice. *Fix submitted by Bhargav Mehta in pull request 13034*. [GitHub-12221](https://github.com/magento/magento2/issues/12221) + * Minor display issues on the Magento home product page have been resolved. *Fix submitted by Punit Vaswani in pull request 13081*. [GitHub-11796](https://github.com/magento/magento2/issues/11796) + * We've removed a condition from the password reset strength meter that caused a JavaScript error. *Fix submitted by Alisson Oldoni in pull request 13429*. + * The copyright year has been updated to 2018. *Fix submitted by Bhargav Mehta in pull request 13027*. + * 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 in pull request 13026*. [GitHub-12601](https://github.com/magento/magento2/issues/12601) + * The `Learn More Link` widget option in the Recently Viewed Products widget now respects its setting. *Fix submitted by JeroenVanLeusden in pull request 12946*. + * An unused `if` statement in the order invoice `Save.php` has been removed. *Fix submitted by JeroenVanLeusden in pull request 12887*. + * The `sid` variable no longer appears in the storefront URL even if it has been disabled in the Admin. Previously, even when the Magento setting **General > Web > Session Validation Settings > Use SID on Storefront** was set to **No**, the `sid` variable no longer appears in the URL. *Fix submitted by Roman Strelenko in pull request 12743*. [GitHub-9453](https://github.com/magento/magento2/issues/9453) + * The menu item handling has been refactored to read item data from two different sources: * from original XML definition if the cache is empty * from transformed item data when available in the cache. *Fix submitted by Pavel in pull request 12747*. [GitHub-9720](https://github.com/magento/magento2/issues/9720) + * A typo in the `SINGLE_PRODUCT_LAYOUT_HANLDE` constant has been fixed. *Fix submitted by Andreas Schrammel in pull request 12786*. + * The tracking link no longer returns a 404 error in the Admin. *Fix submitted by Ihor Sviziev in pull request*. [GitHub-12206](https://github.com/magento/magento2/issues/12206) + * The product option value price calculation has been improved. Previously, tier prices and customs options were not calculated correctly. *Fix submitted by Marina Gociu in pull request 11563*. [GitHub-5774](https://github.com/magento/magento2/issues/5774) + * White space that is prepended to a coupon code no longer causes an error. Previously, Magento did not apply the coupon and displayed this message: `Coupon code is not valid`. *Fix submitted by Roman K. in pull request 1021*. [GitHub-12656](https://github.com/magento/magento2/issues/12656) + * The **modified** date field on editing pages is now updated as expected. *Fix submitted by Oscar Recio in pull request*. [GitHub-12625](https://github.com/magento/magento2/issues/12625) + * Links to Magento Connect on the Partners and Extensions page have been removed and replaced with links to Magento Marketplace. *Fix submitted by Miguel Balparda in pull request 12633*. [GitHub-12632](https://github.com/magento/magento2/issues/12632) + * HTML tags have been removed from the display of attribute names in the dropdown menu of the Catalog Product list. *Fix submitted by Nickolas Malyovanets in pull request 968*. [GitHub-8011](https://github.com/magento/magento2/issues/8011) + * 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. + * Magento now displays information 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. + * The credit card form is now available when you create an order from the Admin, even when only one payment method is enabled. Previously, when only one payment method was enabled, the Admin did not render this form. + * Full Page Cache is no longer invalidated after you save a predictor category. Previously, all product-related cache data was invalidated, when only a narrow subset of cache tags associated with the `product_id` should have been. + * Magento now displays a more meaningful error message when a module name is misspelled in a unit test. *Fix submitted by Nickolas Malyovanets in pull request 13740*. + * Magento now displays a more meaningful error message when a module name is misspelled in `registration.php`. *Fix submitted by Jānis Elmeris in pull request 12843*. + * In the line `Perform login specific action` in `StorageInterface.php`, `login` has been replaced with `logout`. *Fix submitted by David Angel in pull request 13679*. + * The incorrect field value in the joined `variable_value` table has been replaced with two values: `plain_value` and `html_value`. *Fix submitted by Maksymilian Szydło in pull request 13596*. + * `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. + * Duplicate array keys in `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` and `app/code/Magento/Downloadable/Helper/File.php` have been removed. *Fix submitted by Leandro F. L. in pull request 12513*. + * The typo in the `getDispretionPath` function name has been corrected to `getDispersionPath`. *Fix submitted by PascalBrouwers in pull request 12507*. [GitHub-12506](https://github.com/magento/magento2/issues/12506) + * Magento now saves new orders created by guest accounts to the Order display as expected. Previously, Magento did not display the order with the customer information assigned to it, and although Magento sent an email containing the order ID, the email did not contain information about the ordered items. *Fix submitted by Roman K. in pull request 12241*. [GitHub-10128](https://github.com/magento/magento2/issues/10128) + * CAPTCHA labels now reflect both the symbols and letters associated with the CAPTCHA image. Previously, the text labels referred to the CAPTCHA image referred to letters only, despite there being numbers in the CAPTCHA images, too. This ambiguity had the potential to mislead users about which text to enter. *Fix submitted by RhodriOwainDavies in pull request 12387*. + * The `robots.txt` response header content type is now plain text. *Fix submitted by Milan Osztromok in pull request 12310*. + * Customers can now successfully use RSS to share their wish lists. Previously, when a logged-in user added products to the wish list and then tried to share them using RSS, Magento threw this exception: `report.INFO: Broken reference: the 'wishlist.email.rss' element cannot be added as a child to 'root', because the latter doesn't exist` *Fix submitted by mediactbv in a pull request*. + * When you select a new main menu option, the previously selected menu item now loses the `ui-state-active` class as expected. *Fix submitted by Arnoud Beekman in pull request 13341*. [GitHub-13327](https://github.com/magento/magento2/issues/13327) + * Issues with displaying full-screen images and video on the configurable product page have been resolved. Previously, Magento displayed video associated with product options on this page as images, rather than video, and full-screen mode for images ignored the configurations settings in `view.xml`. *Fix submitted by Ievgen Shakhsuvarov in pull request 991*. [GitHub-12268](https://github.com/magento/magento2/issues/12268) + * We've fixed issues with the "report module enable/disable changes as deployment markers" functionality in the `Magento_NewRelicReporting` module. Previously, if New Relic's cron was enabled, Magento sent a New Relic deployment marker for every enabled module once per cron period. This resulted in an excessive number of events. *Fix submitted by Kristof in pull request 12477*. + * The New Product Configuration process now works as expected from the Admin. Previously, on the last step of this process, Magento displayed `the element.disabled is not a function` message and did not create the product variations as expected. [GitHub-12555](https://github.com/magento/magento2/issues/12555) + * Save operations on CMS pages now load from `pageRepository`. *Fix submitted by JeroenVanLeusden in pull request 13814*. + * 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 in pull request 13844*. [GitHub-13827](https://github.com/magento/magento2/issues/13827), [GitHub-13350](https://github.com/magento/magento2/issues/13350) ### Gift card + * 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. ### Import/export + * You can now successfully import product images and image labels from CSV files. Previously after import, the alt text field on the Admin was empty, even though the label was imported and was visible on the product list page as alt attribute, and the Product Detail page missed the alt attribute on image fields. *Fix submitted by Ben Robie in pull request 11323*. [GitHub-9931](https://github.com/magento/magento2/issues/9931) -* The CSV file created by using **System > Export** now incorporates the value of `hide_for_product_page`. -*Fix submitted by Nickolas Malyovanets in pull request 11926*. + +* The CSV file created by using **System > Export** now incorporates the value of `hide_for_product_page`. *Fix submitted by Nickolas Malyovanets in pull request 11926*. + * You can now import a value of zero (0) into a custom attribute when using the Admin product import feature. *Fix submitted by p-bystritsky in pull request 12283*. [GitHub-12083](https://github.com/magento/magento2/issues/12083) + * 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 no longer fails when you import products with image filenames containing round brackets from a CSV file. *Fix submitted by p-bystritsky in pull request 1017*. [GitHub-12084](https://github.com/magento/magento2/issues/12084) + * 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. + * Magento now provides a test for adding values to the system variable collection unit test. *Fix submitted by Nickolas Malyovanets in pull request 13742*. + * You can now successfully import configurable products with specified configurable links when the `store_view_code` setting isn't set. Previously, you could successfully import a configurable product with both configurable and additional attributes, but when you viewed the category to which the product belonged, the product was not displayed. [GitHub-5876](https://github.com/magento/magento2/issues/5876) + * Save operations on CMS blocks now load from `pageRepository`. *Fix submitted by JeroenVanLeusden in pull request 13796*. + * The default storefront welcome message now works as expected when the **Translate Inline** (**Stores > Settings > Configuration > Advanced > Developer >**) setting is enabled. *Fix submitted by Paresh Pansuriya in pull request 13038*. [GitHub-12711](https://github.com/magento/magento2/issues/12711) + * You can now use the layout update XML field to include custom CSS in CMS pages. [GitHub-4454](https://github.com/magento/magento2/issues/4454) + * We've added an @api annotation to the block argument marker interface. This identifies this interface as requiring only a minor version dependency. See [Dependencies]({{ site.baseurl }}/guides/v2.2/extension-dev-guide/versioning/dependencies.html) for more information. *Fix submitted by Vinai Kopp in pull request 13816*. ### Indexing + * The URL that points to Magento `crontab` documentation has been updated to reflect current cron documentation in `app/code/Magento/Indexer/Model/Message/Invalid.php`. *Fix submitted by Robbie Thompson in pull request 13050*. + * You can now view the state of the mview queue in real time, which can be useful when debugging indexing issues. Specifically, you can now view how many items are in the queue pending processing, as well as view information from the `mview_state` table. *Fix submitted by Luke Rodgers in pull request 12122*. ### Infrastructure + * Zoom now works as expected when using dropdown menus. Previously, zoom worked fine, but when you hovered over the category dropdown menu to the overlap area of product image and dropdown menu, the zoom was abnormally active, even though the mouse was still on the dropdown menu. *Fix submitted by Mayank Zalavadia in pull request 13084*. [GitHub-5129](https://github.com/magento/magento2/issues/5129) + * RequireJS loading issues that occur when ad blockers are active have been resolved. Previously, `uBlock` (or any ad blocker) forbade the `trackingCode.js` file from loading, which prompted RequireJS to throw an exception. This exception broke the JavaScript execution flow and caused unexpected issues throughout the storefront. *Fix submitted by Yonn Trimoreau in pull request 13061*. + * `continue()` has been removed from templates. *Fix submitted by Ihor Sviziev in pull request 13076*. + * The comment that marks the `\Magento\Checkout\Model\Cart` class as deprecated now includes a pointer to an alternative class. This fix is part of an ongoing effort to add pointers to valid replacements when marking methods and classes as deprecated. *Fix submitted by Fabian Schmengler in pull request 13061*. [GitHub-10133](https://github.com/magento/magento2/issues/11070) + * A new file (`CODE_OF_CONDUCT.md`) that defines standards for how to engage in the community has been added. *Fix submitted by Ievgen Shakhsuvarov in pull request 12723*. + * `\Magento\Framework\Data\Tree::getNodeById()` no longer contains an invalid type in its PHPDoc block. *Fix submitted by Roman K. in pull request 964*. [GitHub-8507](https://github.com/magento/magento2/issues/8507) + * We’ve resolved naming collisions that previously occurred in the Javascript UI registry. Previously, these naming collisions resulted in the following behaviors: Magento displayed the `element.disabled is not a function` message, and did not create product variations as expected.
[GitHub-12555](https://github.com/magento/magento2/issues/12555) ### Newsletters + * The **About Us** and **Customer Service** links of the Order Confirmation email (and other emails sent to the customer) now work as expected. *Fix submitted by Roman K. in pull request*. [GitHub-12261](https://github.com/magento/magento2/issues/12261) + * Magento now sends the newsletter subscription success email as expected when a customer successfully subscribes to a newsletter. *Fix submitted by Styopchik in pull request*. [GitHub-12439](https://github.com/magento/magento2/issues/12439) + * Magento now uses indexes to retrieve subscriber information during the creation of email to newsletter subscribers. Previously, Magento did not use indexes for this task, and performance was poor. *Fix submitted by Amit Bera in pull request*. [GitHub-12787](https://github.com/magento/magento2/issues/12787) + * Magento no longer sends multiple confirmation emails when a customer successfully subscribes to a newsletter. *Fix submitted by Torben Höhn in pull request 13044*. [GitHub-12876](https://github.com/magento/magento2/issues/12876) + * The text of the **Subscribe to Newsletter** button now wraps correctly. *Fix submitted by monaemipro in pull request 13041*. [GitHub-12320](https://github.com/magento/magento2/issues/12320) ### Orders + * 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 `getDefaultStoreLocale()` method has been added to allow for the fetching of scoped values. Use this method in `getCreatedAtFormatted()` to ensure that Magento translates the `created_at` order date in emails for the locale being used in that store view. *Fix submitted by JeroenVanLeusden in pull request 11067*. + * You can now successfully open the Order edit page for orders that contain an address with extension attributes. Previously, when you tried to open this page, the page load failed with this error, `Recoverable Error: Object of class Magento\Sales\Api\Data\OrderAddressExtension could not be converted to string in .../module-sales/Model/AdminOrder/Create.php on line 503`. -* Magento now saves an invoice ID on the credit memo when you create a credit memo from the invoice in the Admin. Previously, -the invoice ID was not included. *Fix submitted by Anton Evers in pull request 11067*. [GitHub-11669](https://github.com/magento/magento2/issues/11669) + +* Magento now saves an invoice ID on the credit memo when you create a credit memo from the invoice in the Admin. Previously, the invoice ID was not included. *Fix submitted by Anton Evers in pull request 11067*. [GitHub-11669](https://github.com/magento/magento2/issues/11669) + * Credit memos can have the state open (`\Magento\Sales\Model\Order\Creditmemo::STATE_OPEN`). As a result, you can create a credit memo with an ID that still has to be refunded, and existing credit memos should be refundable if their state is open. *Fix submitted by Anton Evers in pull request 11550*. + * The `Magento\Sales\Service\V1\OrderCreateTest` test now has the correct shipping method fixture. Previously, this test contained an incorrect shipping method fixture, which produced an error whenever an order's shipping method was treated as an object. *Fix submitted by andrew-garside-temando in pull request 12227*. + * 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. + * The `getReservedOrderId()` method now uses the current store as expected instead of the default store. *Fix submitted by Timon de Groot in pull request 11702*. [GitHub-9055](https://github.com/magento/magento2/issues/9055) + * When you are editing an order's shipping or billing address, Magento now displays the allowed countries from the correct store view. Previously, possible addresses were derived from the wrong store view. *Fix submitted by Roman K. in a pull request*. [GitHub-12560](https://github.com/magento/magento2/issues/12560) + * The `\Magento\Sales\Model\Order\Pdf\AbstractPdf::drawLineBlocks` method now works as expected. Previously, when a text block spanned more than one page, Magento threw a `Zend_Pdf_Exception` error, and displayed this error: `Font has not been set`. *Fix submitted by serhii-balko in pull request 1016*. [GitHub-11743](https://github.com/magento/magento2/issues/11743) + * Magento no longer exports extra records when you export invoices for multiple orders. *Fix submitted by Sanjay Patel in pull request 13208*. [GitHub-12714](https://github.com/magento/magento2/issues/12714) + * 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 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 in pull request 12668*. [GitHub-9969](https://github.com/magento/magento2/issues/9969) + * Join extension attributes are now added as expected to order results when the order is created using REST. *Fix submitted by Nickolas Malyovanets in pull request 1168*. + * The Shipment Tracking REST API now throws an error as expected if the specified order doesn't exist. *Fix submitted by Roman K. in pull request 1162*. + * Invoices now display the exact quantity of a product ordered, even if it is a fractional unit (for example, 6.5). Previously, when Magento tried to invoice an order that had products with quantities that required decimals, it rounded down the quantity to the nearest whole number in the invoice. *Fix submitted by Nickolas Malyovanets in pull request 11997*. [GitHub-11941](https://github.com/magento/magento2/issues/11941) ### Payment methods + * 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. + * Logged-out customers can no longer see previously saved credit cards. Previously, users logged in as guest could see some payment information from an earlier, canceled order. + * Third-party developers can now customize payment errors messages for payment integrations based on the Magento Payment Provider Gateway. + * PayPal Express Checkout now appears as a payment option on the Checkout page when the PayPal buttons are available on the shopping cart page. Previously, PayPal did not appear as a payment method on the Checkout page when the billing agreement was disabled, although the PayPal buttons were still available on the shopping cart page. + * You can now view order details for an order created with a custom offline payment method. Previously, Magento displayed PHP warning (undefined index) instead of the order details. *Fix submitted by Alex in pull request 12296*. [GitHub-3596](https://github.com/magento/magento2/issues/3596) + * Magento no longer disables the BrainTree **Place Order** button after a failed payment validation. *Fix submitted by Ievgen Sentiabov in pull request 12902*. + * The `is_active` and `is_visible` columns now default to true even when column default values are not set in the `vault_payment_token` installation script. *Fix submitted by helloitsluke in pull request 12965*. + * If you've chosen a custom payment method that is offline when you create an order, Magento now displays that payment method's name as expected when you view order details in **Payment & Shipping**. *Fix submitted by zamoroka in pull request 12731*. [GitHub-12209](https://github.com/magento/magento2/issues/12209) + * 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. + * Magento now correctly adds checkout agreements data to requests and validates payment information when you place an order using PayPal Express. Previously, you could check this box, but Magento did not parse the agreements data or pass it to the set-payment-information API. This failure in turn triggered the `CheckoutAgreements` validation plugin, which failed to validate. *Fix submitted by Ričards Zālītis in pull request 12401*. + * Magento no longer archives active orders that are placed using PayPal Express Checkout. Previously, if you placed an order using PayPal Express Checkout, Magento would place the order as expected but also add it to the list of archived orders. + * Magento now correctly displays transparent `PNG` watermarks on JPEG images. Previously, Magento did not correctly display a transparent watermark as expected on an image, but instead displayed a white outline of the box where the watermark should be. *Fix submitted by Elze Kool in pull request 11060*. [GitHub-10661](https://github.com/magento/magento2/issues/10661) -* 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 in pull request 13777*. -[GitHub-13315](https://github.com/magento/magento2/issues/13315) + +* 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 in pull request 13777*. [GitHub-13315](https://github.com/magento/magento2/issues/13315) + * Magento now correctly updates the credit memo total when a merchant issues a refund. *Fix submitted by serhii-balko in pull request 1185*. [GitHub-11798](https://github.com/magento/magento2/issues/11798) ### Performance + * The addition of a cache for the `getimagesize()` function has improved product image loading. + * Each cache type now has its own separate cache storage. + * We’ve optimized the initialization of the Product View block, which gives an 11% performance improvement for simple product views. + * Magento now caches search results for faster response time on popular searches. A system administrator can configure how many top search queries can be cached. This enhancement can result in up to a 36% improvement for cacheable search terms. ### Quote + * If a customer changes the currency type of his order-in-progress while viewing the shopping cart, Magento displays a message that shows the minimum order necessary in the new currency. Previously, this minimum was calculated incorrectly. *Fix submitted by Neeta Kangiya in pull request 13039*. + * Magento no longer truncates very long telephone numbers on the order page. Previously, Magento cut off very long phone numbers at 20 digits. *Fix submitted by Danny Verkade in pull request 13015*. [GitHub-10869](https://github.com/magento/magento2/issues/10869) -* 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 in pull request 13019*. -[GitHub-12393](https://github.com/magento/magento2/issues/12393) + +* 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 in pull request 13019*. [GitHub-12393](https://github.com/magento/magento2/issues/12393) + * 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. + * An integrity constraint violation error no longer occurs after you reorder a product with custom options. *Fix submitted by Vinay Shah in pull request 13036*. [GitHub-12705](https://github.com/magento/magento2/issues/12705) ### Reports + * The Products in Cart report is now accurate. Previously, if you created a Products in Cart report (**Open Reports** > Marketing > **Products in Cart**) after deleting a product from the catalog, the report displayed a blank list of products. *Fix submitted by angelo983 in pull request 12539*. + * You can now successfully export the Ordered Products report to a CSV file. Previously, the export file contained no report data. ### SalesRule + * Magento now display the correct catalog rule price for bundle products with custom options. + * Cart prices now displays the Cart Price Rule shipping discount correctly. Previously, when you placed an order, Magento displayed this error: `Payment method is not available`. + * Magento now displays the exact label value that was given in the Admin during the cart price rule creation. *Fix submitted by Ihor Sviziev in pull request 13141*. [GitHub-11428](https://github.com/magento/magento2/issues/11428), [GitHub-11497](https://github.com/magento/magento2/issues/11497) + * Magento now correctly displays in Cart Price rules the nesting levels for categories with nesting levels that exceed three levels. + * Coupon codes that a customer has applied to a subsequently canceled order are now available for re-use as expected. Previously, once a customer canceled this order, she could not apply the coupon code to another order. *Fix submitted by p-bystritsky in a pull request*. [GitHub-12817](https://github.com/magento/magento2/issues/12817) ### Search + * Magento now displays popular search terms in **SEO & Search > Search Terms** as expected. *Fix submitted by p-bystritsky in pull request 1024*. [GitHub-10743](https://github.com/magento/magento2/issues/10743) + * Layered navigation now displays the correct product count. Previously, the layered navigation product count incorrectly included only in-stock products. *Fix submitted by Roman K. in pull request 12063*. [GitHub-11946](https://github.com/magento/magento2/issues/11946) + * Grid filtration now handles MySQL special characters as expected. *Fix submitted by laconica-sergey in pull request 12749*. + * Magento no longer throws an error when you submit the search form in the header with an empty value. *Fix submitted by Koen V. in pull request 13811*. [GitHub-13791](https://github.com/magento/magento2/issues/13791) ### Shipping @@ -1004,163 +1288,207 @@ Users of the CyberSource payment method should note that CyberSource uses the Ma You can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{ page.baseurl }}/release-notes/ReleaseNotesMagentoShipping2.2.x.html). + * The handling fee configuration of shipping methods is now explicitly cast to 0 to avoid warnings from PHP 7.1. *Fix submitted by Fabian Schmengler in pull request 13680*. + * Unused `count($_items)` in templates have been removed. *Fix submitted by Alexander Shkurko in pull request 12901*. + * Magento now enforces the minimum order amount during checkout as expected. Previously, you could bypass the minimum order amount logic by clicking **Check Out with Multiple Addresses**, removing products from the order and then clicking **Update Qty & Addresses**. *Fix submitted by Roman K. in pull request 963*. + * DHL product codes now match those published in the latest DHL products and services guide. Previously, three DHL product codes in the DHL Shipping module were incorrect. *Fix submitted by gwharton in pull request 12666*. ### Sitemap + * `sitemap.xml` now displays URLs without `/home` appended. *Fix submitted by Oscar Recio in pull request 12649*. [GitHub-12446](https://github.com/magento/magento2/issues/12446) + * Sitemaps generated in a multi-store environment now include the correct URLs for each store (that is, `http://storename.com/` instead of `http://defaultstore.com/`). *Fix submitted by Roman K. in pull request 935*. [GitHub-12482](https://github.com/magento/magento2/issues/12482) + * Magento now handles errors that occur during sitemap generation in a less intrusive way. If Magento throws an exception when generating a sitemap, it now sends the errors through email as configured in the sitemap configuration XML. The former `_translateModel` property is not used anymore, and the inline translation is correctly suspended using the `inlineTranslation` property instead. *Fix submitted by Marina Gociu in a pull request*. [GitHub-10502](https://github.com/magento/magento2/issues/10502) ### Swagger + * The code formatting in the Swagger block and template has been updated. *Fix submitted by JeroenVanLeusden in pull request 13485*. ### Swatches + * 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 in pull request 12044*. [GitHub-9410](https://github.com/magento/magento2/issues/9410), [GitHub-10707](https://github.com/magento/magento2/issues/10707), [GitHub-10737](https://github.com/magento/magento2/issues/10737), [GitHub-11032](https://github.com/magento/magento2/issues/11032) + * Visual swatches that have a color assigned now show that color in the swatch box. Previously, Magento did not display any color in the color swatch box. *Fix submitted by Chris Pook in pull request 13101*. [GitHub-11828](https://github.com/magento/magento2/issues/11828) + * The error message displayed when you do not supply enough information during swatch creation has been edited for clarity and grammatical accuracy. *Fix submitted by Nickolas Malyovanets in pull request 1117*. [GitHub-5550](https://github.com/magento/magento2/issues/5550) ### TargetRule + * You can now successfully save a Related Product rule. ### Tax + * The default selector on the Admin's tax rule edit page now selects only the correct container (tax rate) following the Tax Rate multi-select. Previously, the default selector selected three elements, which resulted in inaccurate results. *Fix submitted by Pieter Hoste in pull request 13643*. [GitHub-12791](https://github.com/magento/magento2/issues/12791) + * We've removed the redundant default discount tax calculation (`tax/calculation/discount_tax`) from `Magento/Tax/etc/config.xml`. *Fix submitted by Vincent Marmiesse in pull request 13449*. + * The **Not yet calculated** text string immediately adjacent to the string **Tax** on the checkout page is now translated as expected. *Fix submitted by Roman K. in pull request 1147*. [GitHub-7849](https://github.com/magento/magento2/issues/7849) + * Magento no longer displays incorrect tax amounts for orders when using a non-default tax configuration. *Fix submitted by Pieter Cappelle in pull request 12639*. [GitHub-10347](https://github.com/magento/magento2/issues/10347) ### Testing + * `ConfigurationTest` no longer fails when you install Magento using Composer. *Fix submitted by Nickolas Malyovanets in pull request 1161*. [GitHub-12574](https://github.com/magento/magento2/issues/12574) + * We've added `MagentoStyle` to console input and output in Travis tests. + * We've re-implemented tests using Jasmine as part of the process of removing the legacy JavaScript test framework and completely removing `JSTestDriver` support. *Fix submitted by Carlos Lizaga in a pull request*. [GitHub-12342](https://github.com/magento/magento2/issues/12342) + * `functional.suite.dist.yml` now handles custom backend names. Previously, the value for the `backend_name` configuration was hardcoded. *Fix submitted by scribam in pull request 12884*. + * We've added a missing preference for `ObjectManager\ConfigInterface` in integration tests. *Fix submitted by Fabian Schmengler in pull request 12845*. [GitHub-12844](https://github.com/magento/magento2/issues/12844) + * Integration Test Annotation `magentoAppArea` no longer breaks with valid values. *Fix submitted by Nickolas Malyovanets in pull request 996*. [GitHub-2907](https://github.com/magento/magento2/issues/2907) + * The inline documentation of the static test for XSS vulnerabilities now reflects that `@escapeNotVerified` is disallowed in Magento versions equal or greater than 2.2. *Fix submitted by Matthias Zeis in pull request 12639*. + * We've added integration tests for product URL rewrite generation. *Fix submitted by Adrien Louis-Rossignol in pull request 13567*. [GitHub-5863](https://github.com/magento/magento2/issues/5863), [GitHub-8227](https://github.com/magento/magento2/issues/8227), [GitHub-8957](https://github.com/magento/magento2/issues/8957), [GitHub-10073](https://github.com/magento/magento2/issues/10073), [GitHub-13240](https://github.com/magento/magento2/issues/13240) ### Themes + * 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. + * If a customer is logged in while Magento loads, then the welcome message displays the customer's full name. *Fix submitted by Oleh Kravets in pull request 12738*. [GitHub-12719](https://github.com/magento/magento2/issues/12719) + * You can now disable the full-screen gallery on mobile devices *Fix submitted by p-bystritsky in pull request 1006*. [GitHub-12490](https://github.com/magento/magento2/issues/12490), [GitHub-12285](https://github.com/magento/magento2/issues/12285) + * Protected method `getHtml` now checks each child for an existing class and then appends the `$outermostClass` if true. Previously, when creating a dependency injection for the `Magento\Theme\Block\Html\Topmenu` class, you could not change class names on children in a `beforeGetHtml` method because `getHtml` declares `setClass()` on all child items. *Fix submitted by jonshipman in pull request 12862*. + * 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. ### Translations and locale + * Inline translations and custom translators now work for Knockout templates. *Fix submitted by Dmitry Fedyuk in pull request 12953*. [GitHub-2156](https://github.com/magento/magento2/issues/2156) + * Magento now provides a locale for Swedish (Finland). *Fix submitted by Nickolas Malyovanets in pull request 1207*. [GitHub-13095](https://github.com/magento/magento2/issues/13095) + * Magento now uses current locale (as defined in **Stores > Settings > Configuration > Advanced Reporting**) when translating the time zone label. Previously, Magento used operating system settings instead of the current locale. *Fix submitted by adrian-martinez-interactiv4 in pull request 13408*. + * Newsletter labels can now handle the Chinese language. *Fix submitted by Dasharth patel in pull request 13029*. [GitHub-12320](https://github.com/magento/magento2/issues/12320) + * The module responsible for generating the `js-translations.json` file now contains a routine that translates strings in tags such as ` + * You can now configure a form field with validation range words. As a result, the category name is validated, and the category is created (or displays the correct error message, if validation fails). Previously, Magento displayed an error message on the console. *Fix submitted by Robin Huy in pull request 12739*. -* The **Save Block** button on the Add New Block page no longer ignores clicks if the content editor is empty. -*Fix submitted by Roman K. in pull request 1032*. [GitHub-8114](https://github.com/magento/magento2/issues/8114) + +* The **Save Block** button on the Add New Block page no longer ignores clicks if the content editor is empty. *Fix submitted by Roman K. in pull request 1032*. [GitHub-8114](https://github.com/magento/magento2/issues/8114) + * Magento now disables the promo code input box after a user applies a promo code. *Fix submitted by Chirag P in pull request 13030*. + * 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 in pull request 12469*. [GitHub-12268](https://github.com/magento/magento2/issues/12268) + * The PHP notice that Magento displays when an invalid `ui_component` configuration is used has been improved. *Fix submitted by Vova Yatsyuk in pull request 12239*. + * Magento has added verification for previously set filters in `Magento/Ui/Component/Filters`, which has eliminated duplication of filters in the collection `where` conditions. + * Inconsistency in the animation of the Admin spinner progress indicator has been corrected. *Fix submitted by Neill Robson in pull request 13700*. ### URL rewrites + * When using a store code in a URL, Magento now retrieves the value of `Store_Code` from the store if the store code value is empty. Previously, under these circumstances, Magento threw an error. *Fix submitted by Oscar Recio in pull request 12529*. [GitHub-8615](https://github.com/magento/magento2/issues/12450) ### Web API framework + * You can now use the REST API to make requests that include a slash (/) in an SKU. *Fix submitted by Roman K. in pull request 949*. [GitHub-8615](https://github.com/magento/magento2/issues/8615) ### Wish list + * Magento now correctly displays a product's special price when you add it to a wish list. Previously, if you added a product with a special price to the wish list, Magento displayed the product with its regular price. + * You can now remove an item description from a wish list. *Fix submitted by p-bystritsky in pull request 981*. [GitHub-12582](https://github.com/magento/magento2/issues/12582) diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.5CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.5CE.md index 78cce8f0eb7..4c35bb74603 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.5CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.5CE.md @@ -67,111 +67,139 @@ In addition to security enhancements, this release contains the following functi ### Installation, setup, and deployment + * Magento no longer permits you to re-run an already running cron job. *Fix submitted by Paavo Pokkinen in pull request 12497*. [GitHub-10650](https://github.com/magento/magento2/issues/10650) ### Bundle products + * You can now successfully delete an option from a bundle product. + * Magento now correctly applies coupon codes that exclude bundle products. Previously, Magento applied these coupons but did not exclude bundle products as expected. ### Catalog + * Merchants can now run the catalog search full text indexer and category product indexer in parallel mode by store view. + * The `Category\Collection::joinUrlRewrite` method now returns the URL of the store whose `storeId` is set on the collection. Previously, this method returned the name of the default store. *Fix submitted by Alessandro Pagnin in pull request 13716*. [GitHub-13704](https://github.com/magento/magento2/issues/13704) + * Sorting products by price now applies catalog rules as expected. + * Sorting products with required custom options by price now works as expected. + * 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. + * Magento now successfully saves products when using a locale that formats dates in this way: DD/MM/YYYY. Previously, when you tried to save a product in a locale where dates were formatted this way, Magento did not save the product, and displayed this error: `Invalid input datetime format`. [GitHub-10485](https://github.com/magento/magento2/issues/10485) + * When you import new products using a CSV file, Magento no longer lists as in stock any products whose CSV values indicate that they should be represented as out-of-stock. ### CMS content + * When working in the media gallery, you can now successfully delete any files and folders that are symlinked in `pub/media`. Previously, any files or folders that were symlinked inside the `pub/media` directory could not be deleted because there was a validation check that used `realpath` to test whether the file was outside the media directory base path. Since `realpath` resolved symlinks to actual paths, this check would fail if the actual path were outside the base path, and would prevent action from being completed. ### Configurable products + * Magento now displays the correct status for a backordered configurable product on the order view page. + * Magento now displays the correct image for a configurable product on the wishlist. Previously, Magento displayed the image for the parent product rather than for the selected variant. *Fix submitted by Roman K. in pull request 1031*. [GitHub-8168](https://github.com/magento/magento2/issues/8168) + * The **Hide from Product Page** option now works for the child product of a configurable product. + * The **Update on Save** re-index operation now works as expected when re-indexing configurable products after changing options. Previously, when you manually re-indexed from the command line, your changes to configurable product options were not saved. ### Frameworks + * We've bumped the required minimal PHP version to 7.0.13. ### General + * The product repository now uses `store_id` (if set) when saving attributes for an existing product. Previously, Magento always saved attribute values for an existing product at the default store level. *Fix submitted by p-bystritsky in pull request 967*. [GitHub-7720](https://github.com/magento/magento2/issues/7720), [GitHub-12395](https://github.com/magento/magento2/issues/12395), [GitHub-12186](https://github.com/magento/magento2/issues/12186) + * The placement of Google Tag Manager code now follows the guidelines in the [Google Tag Manager Developer Guide](https://developers.google.com/tag-manager/devguide). (Previously, the Google Tag Manager code was inserted before the `dataLayer` variable was defined.) + * The Related Products rule for up-sell products with customer segments set to **Specified** now works as expected. ### Import/export + * The data check on imported customer information now completes as expected. Previously, when you clicked **Check Data** on a large CSV file created by **System** > **Data Transfer** > **Import**, the request failed, and Magento displayed the timeout spinner. + * If you remove a product's custom options from the CSV file created during product import, Magento no longer displays the custom options on the storefront. ### Indexing + * The search indexer is now scoped and multithreaded, which improves layered navigation, search, and indexing actions for complex sites with multiple store views and shared catalogs. ### Orders + * Magento now filters recent orders by store on the customer account page as expected. *Fix submitted by Alexander Shkurko in pull request 13257*. + * The performance and logic of `Magento\Sales\Helper\Guest` has been improved. *Fix submitted by Alexander Shkurko in pull request 12893*. ### Payment methods + * In multistore environments, Magento now retrieves the correct PayPal Payflow Pro credentials. Previously, Magento always retrieved the credentials that are configured for the default store. ### Performance + * We've removed the `count()` method from the condition section for some loops in a small subset of backend files. When this method is used in a loop condition, it will be executed at every iteration, which can degrade performance. *Fix submitted by Alexander Shkurko in pull request 13173*. ### Search + * Out-of-stock options for configurable products no longer show up in search and layered navigation results. + * 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. ### Shipping @@ -180,64 +208,81 @@ In addition to security enhancements, this release contains the following functi You can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{page.baseurl}}/release-notes/ReleaseNotesMagentoShipping2.2.x.html). + * Merchants can now choose whether to request and include tax information from UPS in the rate charged to the customer during checkout. (This permits merchants to pass on the tax costs to their customer as part of the overall shipping rate.) *Fix submitted by gwharton in pull request 11707*. ### Swagger + * Swagger now displays the text area that contains the payload structure of all POST and PUT operations. ### Swatches + * You can now use JavaScript mixins to extend swatch functionality in all supported browsers. *Fix submitted by Renon Stewart in pull request 12929*. [GitHub-10559](https://github.com/magento/magento2/issues/10559) ### Testing + * You can now use REST to update the `available_payment_methods` company extension attribute. Previously, Magento set to null any value you passed to the database `company_payment` table. + * The `phpunit.xml` configuration file 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 in pull request 11376*. [GitHub-10559](https://github.com/magento/magento2/issues/10559) ### URL rewrites + * 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. ### Vertex + * The correct tax amount is now included as expected in the Order Total that is listed under the Order Summary section of the Orders page. Previously, the **Tax amount** field was missing from the Order Summary section, which resulted in an incorrect Order Total. + * The **including tax** and **excluding tax** fields on the Checkout page now contain correctly calculated prices. Previously, Magento displayed the same price in these fields. + * Magento now displays the **Tax amount** field in the Order Summary section of the Checkout page for orders that contain virtual products. + * Merchants can now create a Vertex invoice refund as expected after an order has been canceled. + * We’ve improved the performance of the **Admin Create Order** and **Performance Compare Report in Plain Text - Catalog** (server side) actions. + * Magento now prompts you to select order status if a customer does not select an option from the Order Status drop down list when setting the **When to send Invoice to Vertex** option. + * The **Allow tax quote request at shopping cart page** option has been removed from the Vertex Setting tab. + * Magento now disables Vertex API Status as expected when you set the **Enable Vertex Tax Calculation** option to **no**. + * Magento now displays the green checkmark and **Vertex invoice has been sent** message as expected when you set an order’s status to **Suspected Fraud**. + * Customers no longer receive a notice about negative tax amount after a merchant creates a refund on Vertex Cloud. + * Magento throws the following exception during checkout if you disable Amazon Pay when installing Magento using the web wizard: `Exception #0 (UnexpectedValueException): Payment model name is not provided in config!`. Note that this error occurs only if one or two of the three Amazon modules shipped with Magento are disabled. If all three Amazon modules are disabled, this problem does not occur. [GitHub-16167](https://github.com/magento/magento2/issues/16167) + * Magento displays the Amazon Pay option during checkout with multiple addresses even though multi shipping is not supported with Amazon Pay. + * Magento does not display the Amazon Pay button during checkout when the customer selects Klarna or PayPal as a payment method for an order containing a virtual product. + * Magento does not display the Amazon Pay button on the Checkout page if an order contains a virtual product. + * Customer cannot return to standard checkout flow by clicking the **Return to standard checkout** button. + * Customer cannot leave the Amazon Pay checkout page and return to the generic checkout page when an order contains virtual products. + * Customers cannot add a new shipping address to an order that contains virtual products. ### dotmailer known issues @@ -280,52 +332,67 @@ The Amazon Pay, Magento Shipping, and Vertex extensions have the following known The following Dotmailer behaviors have been observed when Magento Commerce for B2B is deployed with split databases: + * Customer, subscriber, and guest data are not being successfully synced. As a result, newly created contacts display the **Not imported** status in the contact report, and the relevant address books in dotmailer remain empty. + * Review remainder email cannot be sent to a subscribed customer if review remainder emails are not enabled for non-subscribed customers. + * Magento cannot send Customer and Guest Abandoned Cart email if these emails are not allowed for non-subscribed contacts. + * When a merchant clicks the **Run Contact Sync** button, Magento throws an exception when a merchant clicks the Run Contact Sync button. + * Magento throws an error during the creation of a subscriber or customer, but still creates the new subscriber or customer. ### Magento Shipping known issues + * A merchant can create multiple return shipments for an already shipped return. ### Vertex known issues + * The order amount on Vertex Cloud differs from the order information displayed by Magento when Catalog Price Rule is applied. + * Magento applies taxes to a custom price even when the **Original Price only** option from the fApply Tax On drop-down list has been selected. + * Magento displays an inaccurate Vertex API Status message when the **Vertex Address Validation API Url** and **Vertex Validation Function** fields contain invalid values. + * The Transaction Details reports and Transaction Summary reports have slight irregularities. Magento does not include product price and taxes in the Transaction Details Report "Gross Amount" and "Tax Amount" columns, and does not include product price in the Transaction Summary Report. + * The **Vertex invoice has been sent** message appears momentarily on the Review and Payments page, but not as expected on the Success page. + * When a customer places an order, Magento calculates the amount of tax and sends a Vertex invoice even when the Company Information tab is missing the company street, company city, and company postal code. + * Magento does not display the Vertex invoice has been sent message as expected when the payment method is Authorize.net and the order status is Suspect Fraud. + * Magento does not display the Vertex customer code field on the All Customers page as expected, which undermines the ability to filter by customer code. + * Magento does not display the tax section of the Order Summary that is included on the Review and Payments page during checkout when the shopping cart includes a virtual product. ## Community contributions diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.5EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.5EE.md index bbbf6269271..5cb28186d93 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.5EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.5EE.md @@ -67,116 +67,145 @@ In addition to security enhancements, this release contains the following functi ### Installation, setup, and deployment + * Magento no longer permits you to re-run an already running cron job. *Fix submitted by Paavo Pokkinen in pull request 12497*. [GitHub-10650](https://github.com/magento/magento2/issues/10650) ### Bundle products + * You can now successfully delete an option from a bundle product. + * Magento now correctly applies coupon codes that exclude bundle products. Previously, Magento applied these coupons but did not exclude bundle products as expected. ### Catalog + * Merchants can now run the catalog search full text indexer and category product indexer in parallel mode by store view. + * The `Category\Collection::joinUrlRewrite` method now returns the URL of the store whose `storeId` is set on the collection. Previously, this method returned the name of the default store. *Fix submitted by Alessandro Pagnin in pull request 13716*. [GitHub-13704](https://github.com/magento/magento2/issues/13704) + * Sorting products by price now applies catalog rules as expected. + * Sorting products with required custom options by price now works as expected. + * 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. + * Magento now successfully saves products when using a locale that formats dates in this way: DD/MM/YYYY. Previously, when you tried to save a product in a locale where dates are formatted this way, Magento did not save the product, and displayed this error: `Invalid input datetime format`. [GitHub-10485](https://github.com/magento/magento2/issues/10485) + * When you import new products using CSV, Magento no longer lists as in stock any products whose CSV values indicate that they should be represented as out-of-stock. ### CMS content + * When working in the media gallery, you can now successfully delete any files and folders that are symlinked in `pub/media`. Previously, any files or folders that were symlinked inside the `pub/media` directory could not be deleted because there was a validation check that used `realpath` to test whether the file was outside the media directory base path. Since `realpath` resolved symlinks to actual paths, this check would fail if the actual path were outside the base path, and would prevent action from being completed. ### Configurable products + * Magento now displays the correct status for a backordered configurable product on the order view page. + * Magento now displays the correct image for a configurable product on the wishlist. Previously, Magento displayed the image for the parent product rather than for the selected variant. *Fix submitted by Roman K. in pull request 1031*. [GitHub-8168](https://github.com/magento/magento2/issues/8168) + * The **Hide from Product Page** option now works for the child product of a configurable product. + * The **Update on Save** re-index operation now works as expected when re-indexing configurable products after changing options. Previously, when you manually re-indexed from the command line, your changes to configurable product options were not saved. ### Frameworks + * We've bumped the required minimal PHP version to 7.0.13. ### General + * The product repository now uses `store_id` (if set) when saving attributes for an existing product. Previously, Magento always saved attribute values for an existing product at the default store level. *Fix submitted by p-bystritsky in pull request 967*. [GitHub-7720](https://github.com/magento/magento2/issues/7720), [GitHub-12395](https://github.com/magento/magento2/issues/12395), [GitHub-12186](https://github.com/magento/magento2/issues/12186) + * The placement of Google Tag Manager code now follows the guidelines in the [Google Tag Manager Developer Guide](https://developers.google.com/tag-manager/devguide). (Previously, the Google Tag Manager code was inserted before the `dataLayer` variable was defined.) + * The Related Products rule for up-sell products with customer segments set to **Specified** now works as expected. ### Gift card + * Magento now displays the correct subtotal when a customer adds multiple gift cards of different amounts to his cart. ### Import/export + * The data check on imported customer information now completes as expected. Previously, when you clicked **Check Data** on a large CSV file created by **System** > **Data Transfer** > **Import**, the request failed, and Magento displayed the timeout spinner. + * If you remove a product's custom options from the CSV file created during product import, Magento no longer displays the custom options on the storefront. ### Indexing + * The search indexer is now scoped and multithreaded, which improves layered navigation, search and indexing actions for complex sites with multiple store views and shared catalogs. ### Orders + * Magento now filters recent orders by store on the customer account page as expected. *Fix submitted by Alexander Shkurko in pull request 13257*. + * The performance and logic of `Magento\Sales\Helper\Guest` has been improved. *Fix submitted by Alexander Shkurko in pull request 12893*. ### Payment methods + * In multistore environments, Magento now retrieves the correct PayPal Payflow Pro credentials. Previously, Magento always retrieved the credentials that are configured for the default store. ### Performance + * We've removed the `count()` method from the condition section for some loops in a small subset of backend files. When this method is used in a loop condition, it will be executed at every iteration, which can degrade performance. *Fix submitted by Alexander Shkurko in pull request 13173*. ### Search + * Out-of-stock options for configurable products no longer show up in search and layered navigation results. + * 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. ### Shipping @@ -185,77 +214,97 @@ In addition to security enhancements, this release contains the following functi You can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{page.baseurl}}/release-notes/ReleaseNotesMagentoShipping2.2.x.html). + * Merchants can now choose whether to request and include tax information from UPS in the rate charged to the customer during checkout. (This permits merchants to pass on the tax costs to their customer as part of the overall shipping rate.) *Fix submitted by gwharton in pull request 11707*. ### Staging + * Magento now correctly renders the dates on a Cart Rule staging update when an administrator uses a locale with a different date and time format. Previously, these dates were corrupted. + * You can now successfully edit the start date and time for a Catalog Price Rule schedule update. Previously, if you edited this date or time, Magento threw a 404 error when the new start time arrived. ### Swagger + * Swagger now displays the text area that contains the payload structure of all POST and PUT operations. ### Swatches + * You can now use JavaScript mixins to extend swatch functionality in all supported browsers. *Fix submitted by Renon Stewart in pull request 12929*. [GitHub-10559](https://github.com/magento/magento2/issues/10559) ### Testing + * You can now use REST to update the `available_payment_methods` company extension attribute. Previously, Magento set to null whatever value you passed to the database `company_payment` table. + * The `phpunit.xml` configuration file 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 in pull request 11376*. [GitHub-10559](https://github.com/magento/magento2/issues/10559) ### URL rewrites + * 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. ### Vertex + * The correct tax amount is now included as expected in the Order Total that is listed under the Order Summary section of the Orders page. Previously, the **Tax amount** field was missing from the Order Summary section, which resulted in an incorrect Order Total. + * The **including tax** and **excluding tax** fields on the Checkout page now contain correctly calculated prices. Previously, Magento displayed the same price in these fields. + * Magento now displays the **Tax amount** field in the Order Summary section of the Checkout page for orders that contain virtual products. + * Merchants can now create a Vertex invoice refund as expected after an order has been canceled. + * We’ve improved the performance of the **Admin Create Order** and **Performance Compare Report in Plain Text - Catalog** (server side) actions. + * Magento now prompts you to select order status if a customer does not select an option from the Order Status drop down list when setting the **When to send Invoice to Vertex** option. + * The **Allow tax quote request at shopping cart page** option has been removed from the Vertex Setting tab. + * Magento now disables Vertex API Status as expected when you set the **Enable Vertex Tax Calculation** option to **no**. + * Magento now displays the green checkmark and **Vertex invoice has been sent** message as expected when you set an order’s status to **Suspected Fraud**. + * Customers no longer receive a notice about negative tax amount after a merchant creates a refund on Vertex Cloud. ### Visual Merchandiser + * We’ve improved the performance of editing or saving products in large categories (more than 18,000 products per category). + * Magento throws the following exception during checkout if you disable Amazon Pay when installing Magento using the web wizard: `Exception #0 (UnexpectedValueException): Payment model name is not provided in config!`. Note that this error occurs only if one or two of the three Amazon modules shipped with Magento are disabled. If all three Amazon modules are disabled, this problem does not occur. [GitHub-16167](https://github.com/magento/magento2/issues/16167) + * Magento displays the Amazon Pay option during checkout with multiple addresses even though multi shipping is not supported with Amazon Pay. + * Magento does not display the Amazon Pay button during checkout when the customer selects Klarna or PayPal as a payment method for an order containing a virtual product. + * Magento does not display the Amazon Pay button on the Checkout page if an order contains a virtual product. + * Customer cannot return to standard checkout flow by clicking the **Return to standard checkout** button. + * Customer cannot leave the Amazon Pay checkout page and return to the generic checkout page when an order contains virtual products. + * Customers cannot add a new shipping address to an order that contains virtual products. ### dotmailer known issues @@ -298,52 +354,67 @@ The Amazon Pay. dotmailer, Magento Shipping, and Vertex extensions have the foll The following Dotmailer behaviors have been observed when Magento Commerce for B2B is deployed with split databases: + * Customer, subscriber, and guest data are not being successfully synced. As a result, newly created contacts display the **Not imported** status in the contact report, and the relevant address books in dotmailer remain empty. + * Review remainder email cannot be sent to a subscribed customer if review remainder emails are not enabled for non-subscribed customers. + * Magento cannot send Customer and Guest Abandoned Cart email if these emails are not allowed for non-subscribed contacts. + * When a merchant clicks the **Run Contact Sync** button, Magento throws an exception when a merchant clicks the Run Contact Sync button. + * Magento throws an error during the creation of a subscriber or customer, but still creates the new subscriber or customer. ### Magento Shipping known issues + * A merchant can create multiple return shipments for an already shipped return. ### Vertex known issues + * The order amount on Vertex Cloud differs from the order information displayed by Magento when Catalog Price Rule is applied. + * Magento applies taxes to a custom price even when the **Original Price only** option from the Apply Tax On drop-down list has been selected. + * Magento displays an inaccurate Vertex API Status message when the **Vertex Address Validation API Url** and **Vertex Validation Function** fields contain invalid values. + * The Transaction Details reports and Transaction Summary reports have slight irregularities. Magento does not include product price and taxes in the Transaction Details Report "Gross Amount" and "Tax Amount" columns, and does not include product price in the Transaction Summary Report. + * The **Vertex invoice has been sent** message appears momentarily on the Review and Payments page, but not as expected on the Success page. + * When a customer places an order, Magento calculates the amount of tax and sends a Vertex invoice even when the Company Information tab is missing the company street, company city, and company postal code. + * Magento does not display the Vertex invoice has been sent message as expected when the payment method is Authorize.net and the order status is Suspect Fraud. + * Magento does not display the Vertex customer code field on the All Customers page as expected, which undermines the ability to filter by customer code. + * Magento does not display the tax section of the Order Summary that is included on the Review and Payments page during checkout when the shopping cart includes a virtual product. ## Community contributions diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.6CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.6CE.md index 4d3c62076ef..8f1d88f535e 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.6CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.6CE.md @@ -24,9 +24,11 @@ This release includes significant performance improvements to the core Magento c Performance-tuning enhancements focus on catalog indexing and include: + * Category product indexer logic has been optimized, and re-indexing time has decreased up to 98%, from 40 minutes to one minute for 100,000 categories.  Previously, when your store contained many categories (100,0000), Magento could take up to 40 minutes to re-index product catalogs. + * The `catalog:images:resize` command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6: * Remove `pub/media/catalog/product/cache` . (Removing this folder frees up space.) @@ -34,37 +36,47 @@ Performance-tuning enhancements focus on catalog indexing and include: * Run `bin/magento catalog:images:resize` to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.) + * The catalog rule re-indexing operation has been optimized, and the 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. + * The catalog price indexer is now scoped and multithreaded, which improves the performance of layered navigation, search, and indexing actions for Magento instances with multiple websites and stores. This makes it possible to parallelize catalog price indexing by websites and customer groups. To re-index in parallel mode, add the `MAGE_INDEXER_THREADS_COUNT` environment variable to `env.php`. + * The time required to load category or product pages for products that are configured with many attributes (more than 500) has been significantly reduced. Refactoring the logic for product attribute retrieval has resulted in a reduction of load time of almost 90% for scenarios with a large number of product attribute sets. (Performance will not noticeably improve for deployments with only one attribute set configured with 500 attributes. However, deployments with many attribute sets that contain only a few attributes will show significant performance improvement. For example, a deployment with 100 attribute sets, each of which contains 50 attributes, might see a 40-90% reduction in load time.) + * The time required to load a store’s home page has been reduced noticeably when the top menu contains many categories. (Load time is still affected by the number of categories and the structure of the top menu.) + * Merchants can now improve store performance by disabling Magento Report functionality. A new configuration setting (**System Configuration:** **General** > **Reports** > **General Options**) allows merchants to disable Magento Reports, which is recommended practice if a merchant's business function does not require this capability. #### **Improvements to the reliability and ease of the checkout process** + * A shopping cart’s contents remain constant even when the checkout page is repeatedly reloaded. Previously, if a customer reloaded the checkout page several times, Magento emptied the shopping cart, and the customer could not place the order. (This problem primarily affected stores running on HTTPS.) + * 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 checkout page affected information entered into form fields for a guest checkout. + * The speed at which Magento places an order is no longer affected by how many shipping methods are available. Previously, when a customer placed an order for which multiple shipping methods were available, Magento took more than 20 seconds to place the order. #### **Additional enhancements** + * 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 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. ### **Magento Cloud highlights** @@ -161,45 +173,59 @@ In addition to security enhancements, this release contains the following functi ### Installation, setup, and deployment + * You can now use the `app:config:status` command to check whether configuration propagation is up-to-date. (This fix restores this command, which was inadvertently deleted in a previous release.) *Fix submitted by Pieter Hoste in pull request [15174](https://github.com/magento/magento2/pull/15174)*. [GitHub-14104](https://github.com/magento/magento2/issues/14104) + * 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 Juan Alonso in pull request [12410](https://github.com/magento/magento2/pull/12410)*. [GitHub-11396](https://github.com/magento/magento2/issues/11396) + * Configuration backend models are now populated as expected with all fieldset data, which makes it possible to access all configured values from a current group. [GitHub-16712](https://github.com/magento/magento2/issues/16712) + * The `magento-deploy-ignore` setting in `composer.json` now works as expected. Previously, files specified in this setting were overwritten during deployment. + * The `timestamp` fields in `oauth_nonce` now include indexes to avoid deadlocks while erasing old records. *Fix submitted by Carlos Lizaga in pull request [13328](https://github.com/magento/magento2/pull/13328)*. [GitHub-10346](https://github.com/magento/magento2/issues/10346) + * Sorting has been disabled in the `glob` and `scandir` functions to improve performance. *Fix submitted by Leandro F. L. in pull request [16052](https://github.com/magento/magento2/pull/16052)*. + * The `nginx.config.sample` file no longer includes an option for PHP 5.x. (Magento 2.2.x is not compatible with PHP 5.x.) *Fix submitted by Sean Breeden in pull request [16883](https://github.com/magento/magento2/pull/16883)*. + * Autoloading performance has improved on production environments as a result of the reduction in `file_exists` calls. *Fix submitted by Pieter Hoste in pull request [16435](https://github.com/magento/magento2/pull/16435)*. + * Setting deploy mode to production mode by using the `--skip-compilation` flag no longer clears generated code in `generated/code/` and `generated/metadata/`. *Fix submitted by platformvaimo in pull request [16211](https://github.com/magento/magento2/pull/16211)*. + * We've made two changes to `Magento/Config` module: `Magento/Config/Test/Unit/Block/System/Config/Form/Field/ImageTest.php::testGetElementHtmlWithValue()` method no longer references a invalid backend model, and the anonymous function no longer has an unused `$data` in `Magento/Config/Model/Config/Importer.php`. *Fix submitted by Marcel Hauri in pull request [15511](https://github.com/magento/magento2/pull/15511)*. + * The upgrade check implemented during setup now indicates success if the latest version of Magento is already installed. Previously, the message indicated that the latest product version was already installed was presented as error. *Fix submitted by Daniel Ruf in pull request [15012](https://github.com/magento/magento2/pull/15012)*. + * The **Add Block Names to Hints** configuration setting has been renamed to **Add Block Class Type to Hints**. *Fix submitted by Chris Pook in pull request [14939](https://github.com/magento/magento2/pull/14939)*. + * The `cron:run` command now reads `cron/enabled` configuration setting and if this value is set to **1** (the default value), then the `cron:run` command will execute. A value of **0** determines that `cron:run` will not be executed, and prompts Magento to send the customer email indicating that `cron` is disabled. + * New command-line interface (CLI) commands support setting and showing indexer dimension modes: * `bin/magento indexer:set-dimensions-mode` sets indexer dimensions mode @@ -209,318 +235,419 @@ In addition to security enhancements, this release contains the following functi ### Amazon Pay + * Amazon Pay no longer appears as an option during checkout when a customer selects **Check Out with Multiple Addresses**. Previously, Magento displayed Amazon Pay as an option, even though Amazon Pay does not support multishipping. + * You can now change and save Amazon Pay configuration settings from **Configuration** > **Sales** > **Payment Methods** > **Amazon Pay** when deploying Magento in a Cloud environment. Previously, Magento did not save changed settings. ### Bundle products + * Magento now successfully imports bundle products. Previously, bundle products were not visible in the product catalog, and were listed as out-of-stock on the storefront. + * The `Magento_Bundle` module name has been added to the relevant template files to meet Magento standard coding format. *Fix submitted by Namrata in pull request [15825](https://github.com/magento/magento2/pull/15825)*. + * The `option` variable has been renamed to `quoteItemOption` to improve code readability in `app/code/Magento/Bundle/Model/Product/Type.php`. *Fix submitted by Leandro F. L. in pull request [16143](https://github.com/magento/magento2/pull/16143)*. -* Magento now accurately displays the status of bundle product stock when **Add to Cart** is enabled for bundle products. Previously, bundle products with the **User Defined** field unchecked could not be back ordered as expected. -[GitHub-10061](https://github.com/magento/magento2/issues/10061) + +* Magento now accurately displays the status of bundle product stock when **Add to Cart** is enabled for bundle products. Previously, bundle products with the **User Defined** field unchecked could not be back ordered as expected. [GitHub-10061](https://github.com/magento/magento2/issues/10061) ### Catalog + * The breadcrumbs component no longer relies on the `mageMenu` widget. *Fix submitted by Vova Yatsyuk in pull request [15178](https://github.com/magento/magento2/pull/15178)*. [GitHub-14987](https://github.com/magento/magento2/issues/14987) + * The `data-container` class name is now based on view mode. *Fix submitted by sunilit42 in pull request [15350](https://github.com/magento/magento2/pull/15350)*. [GitHub-15319](https://github.com/magento/magento2/issues/15319) + * 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 in pull request [15347](https://github.com/magento/magento2/pull/15347)*. [GitHub-15037](https://github.com/magento/magento2/issues/15037) + * Disabling a product now removes it from the flat index as expected. *Fix submitted by Mr. Lewis in pull request [15019](https://github.com/magento/magento2/pull/15019)*. [GitHub-14966](https://github.com/magento/magento2/issues/14966) + * The success message that Magento displays when a customer adds a product to the compare list now contains a link to the comparison list. *Fix submitted by Andreas von Studnitz in pull request [13862](https://github.com/magento/magento2/pull/13862)*. + * Cache problems no longer occur when currencies are used without a currency symbol. *Fix submitted by Dmytro Cheshun in pull request [15902](https://github.com/magento/magento2/pull/15902)*. + * Catalog component blocks now contain correct return type suggestions, and typos have been corrected where needed in the PHPDocs. *Fix submitted by Dmytro Cheshun in pull request [15913](https://github.com/magento/magento2/pull/15913)*. + * Widget cache errors that resulted in one widget being loaded twice on the storefront have been resolved. *Fix submitted by Alexandr Kozyr in pull request [12764](https://github.com/magento/magento2/pull/12764)*. [GitHub-4389](https://github.com/magento/magento2/issues/4389) + * Magento no longer makes redundant requests on the 'customer data' on the checkout page. *Fix submitted by Andrey Bezyazychnyy in pull request [14314](https://github.com/magento/magento2/pull/14314)*. [GitHub-13765](https://github.com/magento/magento2/issues/13765) + * Administrators with permission to change product names on one website only cannot change product names on any other sites. Previously, an administrator with permission to change a product name on one site only could change product names on all websites in a multisite deployment. + * Administrators with limited privileges can now save products as expected. + * 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. + * Magento now reliably displays category images on the custom store view level. Previously, the category image on custom store view level alternately disappeared and appeared after every save operation. + * Magento no longer removes downloadable product links after an attribute is updated. + * Extra POST requests are no longer sent if the **Synchronize widget products with backend storage** option is set to **yes**. + * 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`. + * You can now use the `Magento\Catalog\Model\ProductRepository` class to assign a product to one website as expected. Previously, using this class to save a product assigned the product to all existing websites, not just the specified one. + * Images now load as expected on the product display page (PDP) when the image name contains double quotation marks. + * The SEO-friendly URL for the Category page now works as expected. + * The **Use Default Value** checkboxes in the design section of the category page are now enabled by default as expected. + * Customers can now use the **Add Product By SKU** button to add configurable products to a sales order. + * Empty dropdown or swatch type product attributes are no longer visible on the product page. + * Attributes that have empty values across all products being compared are not displayed as rows in the comparison table. Previously, Magento displayed these attributes with an N/A value on the Compare Products page. + * The Catalog page now displays breadcrumbs as expected. + * Tiered pricing and quantity increments now work as expected with decimal-based inventories. + * Magento now updates the `catalog_category_product_index` table as expected after a category is deleted. + * Customizable options are now configured the same for all websites to which a product is added. Previously, when a merchant added a product with customizable options to an additional site, the options were corrupted. + * The **Use default value** option is no longer unchecked unless the user overrides the value of the attribute in the store view scope. Previously, after creating an item, if the user changed to store view scope and did not make any modifications to the item's attributes and only clicked **Save**, most of the attributes that were set as **Use default value** became unchecked. + * Category product indexer logic has been optimized, and re-indexing time has been noticeably reduced.  Previously, when you had many categories (100,000), Magento could take up to 40 minutes to re-index product catalogs. + * Widget selection by Enabled Products no longer causes a fatal error on a storefront when the **Flat Product** is configured. + * Merchants can now change the `status` and `update` attributes from the product page. Previously, Magento returned a 404 page when bulk enabling or disabling products in the Admin with a restricted user role that is limited to a specific website. + * Magento now maintains the default setting for a product's `status` attribute when you create a new product. Previously, when creating a new product after changing the default option from Enabled to Disabled for this attribute, the status is incorrectly set to enabled by default. + * The print preview of product comparison results (that is, the page of results that Magento produces when you click **Compare** after selecting two or more products) now displays as expected. Previously, only a subset of page elements was displayed. + * Magento now maintains the correct dates in the results of filtering the Admin Product Grid Filter: Set Product as New from Date. [GitHub-11517](https://github.com/magento/magento2/issues/11517) + * 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. + * Merchants can now set custom option fixed prices with negative values in the Admin. [GitHub-7333](https://github.com/magento/magento2/issues/7333) + * You can now unset a category image on the store-view level when the image is defined on all store views. + * The Catalog Products List widget can now display products on the storefront that have specific attributes. + * The shopping cart now correctly displays images of configurable products that have only size options (that is, no color options). Previously, when a customer added a configurable product that had only size options to her shopping cart, the shopping cart did not display the expected product image. *Fix submitted by Ronak Patel in pull request [16863](https://github.com/magento/magento2/pull/16863)*. [GitHub-16843](https://github.com/magento/magento2/issues/16843) + * 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. + * Magento now successfully displays product prices in currencies without minor units if the price amount is less then the number group size. [GitHub-11711](https://github.com/magento/magento2/issues/11711) + * Magento now displays the correct price on the product page for storefronts running Japanese locales. *Fix submitted by Vishal Gelani in pull request [15909](https://github.com/magento/magento2/pull/15909)*. [GitHub-11711](https://github.com/magento/magento2/issues/11711) + * Magento now correctly saves the value of a product's custom options. Previously, Magento saved all objects by using the same value object for all values. *Fix submitted by Jeroen Van Leusden in pull request [13569](https://github.com/magento/magento2/pull/13569)*. [GitHub-5067](https://github.com/magento/magento2/issues/5067) + * Magento now displays the product name as browser title as expected. Previously, the meta title tag was missing, which prevented Magento from displaying the product name. *Fix submitted by Riccardo Tempesta in pull request [15532](https://github.com/magento/magento2/pull/15532)*. [GitHub-15501](https://github.com/magento/magento2/issues/15501) + * Magento now maintains the default products sort order of “newest first” when you upgrade your Magento deployment to 2.2.4. Previously, after upgrade, the default products order in categories changed from “newest first” to “oldest first”. *Fix submitted by Danny Verkade in pull request [15629](https://github.com/magento/magento2/pull/15629)*. [GitHub-15627](https://github.com/magento/magento2/issues/15627) + * Links on product pages are now linkable as expected. Previously, when Magento displayed a product page, none of the provided links were clickable. *Fix submitted by simonjanguapa in pull request [15687](https://github.com/magento/magento2/pull/15687)*. [GitHub-15393](https://github.com/magento/magento2/issues/15393) + * Deprecated methods in Message Manager have been replaced with valid methods. *Fix submitted by Tiago Sampaio in pull request [16924](https://github.com/magento/magento2/pull/16924)*. + * Array short syntax usage has been standardized in these files: `app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php`, `app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php`, and `setup/src/Magento/Setup/Module/Di/Code/Reader/FileScanner.php`. *Fix submitted by Leandro F. L. in pull request [16880](https://github.com/magento/magento2/pull/16880)*. + * The error message that Magento displayed when a duplicate error key occurred during product import has been improved. *Fix submitted by Vishal Gelani in pull request [16389](https://github.com/magento/magento2/pull/16389)*. + * We've removed the direct use of the object manager when saving Admin attribute sets. *Fix submitted by AnshuMishra17 in pull request [16217](https://github.com/magento/magento2/pull/16217)*. + * Breadcrumb JSON configuration has been moved to the view model and serialized using the Magento JSON serializer. *Fix submitted by Diederick Bruin in pull request [15521](https://github.com/magento/magento2/pull/15521)*. + * `row_id` has been added to the flat action indexer, ensuring that index values are not set to `0` for new products when using index on save. Previously, if you used `\Magento\Framework\Api\SearchCriteriaBuilder`, and the flat `product row_id` is set to `0`, Magento did not show the product in the `getList` of the `ProductRepository`. *Fix submitted by Mr. Lewis in pull request [15010](https://github.com/magento/magento2/pull/15010)*. + * Magento no longer inserts redundant links to the homepage into breadcrumbs on the product page. *Fix submitted by Vova Yatsyuk in pull request [14994](https://github.com/magento/magento2/pull/14994)*. + * Magento now correctly displays product information for products that have a negative price as a custom option. *Fix submitted by Danny Verkade in pull request [15202](https://github.com/magento/magento2/pull/15202)*. + * Product names can now contain a double quotation mark character (`"`). Previously, when a product name contained this character, Magento threw a JavaScript error. *Fix submitted by Vova Yatsyuk in pull request [15162](https://github.com/magento/magento2/pull/15162)*. + * 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 Neos2007 in pull request [14886](https://github.com/magento/magento2/pull/14886)*. + * Magento now updates product options and quantity by checking the item ID when updating a cart that contains configurable products with different options. *Fix submitted by Nitin Khalasi in pull request [14765](https://github.com/magento/magento2/pull/14765)*. + * Product meta descriptions no longer contain unnecessary HTML tags. *Fix submitted by David Windell in pull request [14538](https://github.com/magento/magento2/pull/14538)*. + * Attributes that have empty values across all products being compared are not displayed on the Compare Products page as rows in the comparison table. Previously, these attributes were displayed with a value of **N/A**. + * Inputted data in filter fields now persists unchanged after you leave the product edit page. Previously, the values in the **Set Product as New from Date** field were not saved as expected. + * Company Admin can now use Quick Order to buy products. Previously, when a company administator tried to use Quick Order to buy products, Magento displayed this error: `The SKU was not found in the catalog`. ### 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. + * The `\Magento\Captcha\Observer\CaptchaStringResolver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16065](https://github.com/magento/magento2/pull/16065)*. [GitHub-14966](https://github.com/magento/magento2/issues/14966) + * The `CheckRegisterCheckoutObserver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16160](https://github.com/magento/magento2/pull/16160)*. + * The `\Magento\Captcha\Observer\CheckGuestCheckoutObserver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16680](https://github.com/magento/magento2/pull/16680)*. + * Autocomplete for CAPTCHA inputs has been disabled. *Fix submitted by Denis Belevtsov in pull request [17114](https://github.com/magento/magento2/pull/17114)*. + * Integration tests now check that customer login attempts are removed after a successful login or account details edit. *Fix submitted by Yaroslav Rogoza in pull request [16306](https://github.com/magento/magento2/pull/16306)*. + * Integration tests now check that administrator login attempts are removed after a successful login or account details edit. *Fix submitted by Yaroslav Rogoza in pull request [16300](https://github.com/magento/magento2/pull/16300)*. + * The `CheckGuestCheckoutObserver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16680](https://github.com/magento/magento2/pull/16680)*. ### Cart and checkout + * 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-wagento in pull request [16379](https://github.com/magento/magento2/pull/16379)*. [GitHub-16378](https://github.com/magento/magento2/issues/16378) + * The dropdown toggle icon on the shopping cart now works as expected. Previously, the arrow did not change direction as expected when you toggled the Discount or Tax options. *Fix submitted by Karla Saaremäe in pull request [15991](https://github.com/magento/magento2/pull/15991)*. + * The shopping cart icon on the checkout page on mobile screens now displays hover color and regular color as expected. *Fix submitted by Karla Saaremäe in pull request [16002](https://github.com/magento/magento2/pull/16002)*. + * Customers are not unexpectedly logged out if the customers hits the F5 key twice during checkout. *Fix submitted by adrian-martinez-interactiv4 in pull request [14428](https://github.com/magento/magento2/pull/14428)*. [GitHub-4301](https://github.com/magento/magento2/issues/4301), [GitHub-12362](https://github.com/magento/magento2/issues/12362), [GitHub-13427](https://github.com/magento/magento2/issues/13427) + * The **Purchased Order Form** button is now correctly aligned. *Fix submitted by Neeta Kangiya in pull request [15331](https://github.com/magento/magento2/pull/15331)*. [GitHub-15334](https://github.com/magento/magento2/issues/15334) + * The **Purchased Order Form** button is now visible. *Fix submitted by hitesh-wagento in pull request [15372](https://github.com/magento/magento2/pull/15372)*. [GitHub-15334](https://github.com/magento/magento2/issues/15334) + * Magento no longer displays duplicate element IDs on the Checkout page. *Fix submitted by Julien ANQUETIL in pull request [15585](https://github.com/magento/magento2/pull/15585)*. [GitHub-13415](https://github.com/magento/magento2/issues/13415) + * During the payment step of checkout, a customer can now successfully deselect the **Billing save-in address book** checkbox in a selected payment method other than the default method. *Fix submitted by Rakesh Gangani in pull request [15344](https://github.com/magento/magento2/pull/15344)*. [GitHub-13692](https://github.com/magento/magento2/issues/13692) + * The `.block-minicart` element on the mini cart dropdown menu no longer has an empty class. *Fix submitted by Karla Saaremäe in pull request [14715](https://github.com/magento/magento2/pull/14715)*. [GitHub-14669](https://github.com/magento/magento2/issues/14669) + * Customers can now add configurable products to their shopping cart when Magento is running on Internet Explorer 11.x. + * The free shipping cart price rule now works as expected when the UPS shipping method is enabled. Previously, UPS Ground shipping method was not available for free shipping at checkout when the UPS shipping method was enabled. + * Cart price rule condition values now handle commas as expected. + * Free shipping coupons now work as expected with Table Rates shipping. Previously, Magento displayed this message when a customer tried to use a free shipping coupon: `Sorry, no quotes are available for this order`. [GitHub-8172](https://github.com/magento/magento2/issues/8172) + * Magento now displays correct store view prices for cases when a merchant uses a CSV file to add products by SKU from the Admin. + * A merchant can successfully use SKU values that contain capital letters to add a product to a cart from the Admin. + * 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 checkout out page affected information entered into form fields for a guest checkout. + * The speed at which Magento places an order is no longer affected by how many shipping methods are available. Previously, when a customer placed an order for which multiple shipping methods were available, Magento took more than 20 seconds to place the order. + * Magento now maintains browser history as expected when a user navigates from the checkout contact information page to the checkout payment information page. Previously, when a user tried to retrace her steps after landing on the payment information page, Magento did not return them to the checkout contact information page, but instead landed on a product page. + * Magento now displays a message when a gift card card is removed during checkout. + * Guest orders placed with gift cards can now be canceled. + * A shopping cart’s contents remains constant even when the Checkout page is repeatedly reloaded. Previously, if a customer reloaded the checkout page several times, Magento emptied the shopping cart and the customer could not place the order. (This problem primarily affected stores running on HTTPS.) + * The message that Magento displays when a customer has successfully added a product to his shopping cart now contains a link to the cart. *Fix submitted by Andreas von Studnitz in pull request [13904](https://github.com/magento/magento2/pull/13904)*. + * The Update button now behaves the same whether product quantity is manually edited or changed by JavaScript. *Fix submitted by Valerij Ivashchenko in pull request [14935](https://github.com/magento/magento2/pull/14935)*. + * Magento no longer displays the infinite checkout loader when a module that is loading makes a `require` call, but the dependency is not returned (typically due to network error). *Fix submitted by Vova Yatsyuk in pull request [14874](https://github.com/magento/magento2/pull/14874)*. + * The minicart quantity label no longer has a fixed length. *Fix submitted by Karla Saaremäe in pull request [14716](https://github.com/magento/magento2/pull/14716)*. + * Double-clicking on the **Proceed to checkout** button from the minicart no longer returns an empty shopping cart. ### Cleanup @@ -530,327 +657,431 @@ Our community contributors have made many helpful, minor corrections to spelling #### Spelling corrections + * Corrected misspelling of `formatedPrice` throughout the code base. *Fix submitted by Arnoud Beekman in pull request [16726](https://github.com/magento/magento2/pull/16726)*. + * Corrected return message from `ProductRuleTest.php`. *Fix submitted by Namrata in pull request [16721](https://github.com/magento/magento2/pull/16721)*. + * Replaced the `proccessAdditionalValidation` method with `processAdditionalValidation`. *Fix submitted by Tiago Sampaio in pull request [16414](https://github.com/magento/magento2/pull/16414)*. + * Corrected misspelling in `SynonymGroupRepositoryInterface`. *Fix submitted by AnshuMishra17 in pull request [16711](https://github.com/magento/magento2/pull/16711)*. + * Corrected misspelling in library file. *Fix submitted by Namrata in pull request [16495](https://github.com/magento/magento2/pull/16495)*. + * Corrected punctuation in the message displayed on **CONTENT** > **Design** > **Configuration**. *Fix submitted by Erik Hansen in pull request [16489](https://github.com/magento/magento2/pull/16489)*. + * Correct misspellings in Model and library files. *Fix submitted by Namarata in pull request [16230](https://github.com/magento/magento2/pull/16230)*. + * Corrected misspelling in `_exportAddressses` method name. *Fix submitted by Marcel Hauri in pull request [15275](https://github.com/magento/magento2/pull/15275)*. + * Corrected misspelling in comments for `addTaxPercents()` in `app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php`. *Fix submitted by AnshuMishra17 in pull request [15431](https://github.com/magento/magento2/pull/15431)*. + * Corrected misspelling in `abstract.js`. *Fix submitted by VitaliyBoyko in pull request [15411](https://github.com/magento/magento2/pull/15411)*. + * Corrected misspellings in `app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/AbstractSidebar.php`, `app/code/Magento/Ui/view/base/web/js/form/components/fieldset.js`, `app/code/Magento/Ui/view/base/web/js/form/components/group.js`, `setup/pub/angular-sanitize/angular-sanitize.js`, and `setup/pub/angular-sanitize/angular-sanitize.min.js.map`. *Fix submitted by Danny Verkade in pull request [15715](https://github.com/magento/magento2/pull/15715)*. + * Corrected misspelling in `app/code/Magento/Catalog/Model/Product/Type/AbstractType.php`. *Fix submitted by Saurabh Parekh in pull request [15519](https://github.com/magento/magento2/pull/15519)*. + * Corrected misspellings in Multishipping and User modules. *Fix submitted by Anna Völkl in pull request [15513](https://github.com/magento/magento2/pull/15513)*. + * Corrected a misspelling in function comment in `app/code/Magento/Paypal/Model/Api/Nvp.php` *Fix submitted by Namrata in pull request [15302](https://github.com/magento/magento2/pull/15302)*. + * Corrected misspellings in PHPDocs and comments. *Fix submitted by Dmytro Cheshun in pull request [15293](https://github.com/magento/magento2/pull/15293)*. + * Corrected typo in method name `_getCharg[e]ableOptionPrice`. *Fix submitted by Marcel Hauri in pull request [15276](https://github.com/magento/magento2/pull/15276)*. + * Corrected typo in database column comment in `app/code/Magento/Catalog/Setup/InstallSchema.php`. *Fix submitted by VitaliyBoyko in pull request [15291](https://github.com/magento/magento2/pull/15291)*. + * Corrected misspelling in the name of private method `\Magento\Catalog\Console\Command\ImagesResizeCommand::getUniq[ue]ImageIndex`. *Fix submitted by Marcel Hauri in pull request [15282](https://github.com/magento/magento2/pull/15282)*. + * Corrected typo in the `\Magento\Framework\Image::open` exception message. *Fix submitted by Tom Richards in pull request [15269](https://github.com/magento/magento2/pull/15269)*. + * Corrected misspelling in `ResourceModel\Coupon.php:updateSpecificCoupons`. *Fix submitted by Stephen Biston in pull request [14891](https://github.com/magento/magento2/pull/14891)*. + * Corrected typo in the name of the `\Magento\Framework\App\Request\Http::removeRepitedSlashes` method. *Fix submitted by Igor Tripolskiy in pull request [15256](https://github.com/magento/magento2/pull/15256)*. + * Corrected misspelling in `app/code/Magento/CatalogSearch/Block/Advanced/Form.php`. *Fix submitted by Jeevan M R in pull request [15053](https://github.com/magento/magento2/pull/15053)*. + * Corrected misspelling in `.less` files. *Fix submitted by Kalpesh Mehta in pull request [15023](https://github.com/magento/magento2/pull/15023)*. + * Removed double occurrence of 'it' from sentences and corrected minor grammar error. *Fix submitted by Namrata in pull request [16240](https://github.com/magento/magento2/pull/16240)*. + * Fixed typo in `app/code/Magento/Checkout/etc/webapi.xml`. *Fix submitted by Markus Haack in pull request [15845](https://github.com/magento/magento2/pull/15845)*. + * Corrected misspelling in `file-uploader.js` and `storage-manager.js`. *Fix submitted by Saurabh Parekh in pull request [15888](https://github.com/magento/magento2/pull/15888)*. + * Corrected misspelling in `scripts.js`. *Fix submitted by Ledian Hymetllari in pull request [15878](https://github.com/magento/magento2/pull/15907)*. + * Corrected grammar error in the "What is this" tooltip for the Braintree vault tool tip. *Fix submitted by kreativedev in pull request [17151](https://github.com/magento/magento2/pull/17151)*. + * Renamed `_requesetd` to `_requested` in `app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js`. *Fix submitted by Valerij Ivashchenko in pull request [16971](https://github.com/magento/magento2/pull/16971)*. + * Removed double occurrences of words from the lib and dev test function comments and from these modules: `Magento_Catalog`, `Magento_Customer`, `Magento_Downloadable`, and `Magento_Sales`. *Fix submitted by Namrata in pull request [16644](https://github.com/magento/magento2/pull/16644)*. + * Removed double occurrences from `jQuery`, Angular JS files and the `Magento_Setup` module's scan function's comment. *Fix submitted by Namrata in pull request [16581](https://github.com/magento/magento2/pull/16581)*. + * Correct misspelling in method name and result in these files: `dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php` and `dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertCityBasedShippingRateChanged.php`. *Fix submitted by Dmytro Cheshun in pull request [15297](https://github.com/magento/magento2/pull/15297)*. #### Minor corrections to code and code formatting + * Removed extra spaces from `Magento/Ui`. *Fix submitted by Ronak Patel in pull request [16872](https://github.com/magento/magento2/pull/16872)*. + * Improved code formatting. *Fix submitted by Pratik Oza in pull request [16821](https://github.com/magento/magento2/pull/16821)*. + * Removed comments and unnecessary spaces. *Fix submitted by Ronak Patel in pull request [16748](https://github.com/magento/magento2/pull/16748)*. + * Removed space before ending sentence throughout code base. *Fix submitted by Namrata in pull request [16717](https://github.com/magento/magento2/pull/16717)*. + * Removed unnecessary spaces in `app/code/Magento/Catalog/Pricing/Price/ConfiguredRegularPrice.php`. *Fix submitted by Ronak Patel in pull request [15129](https://github.com/magento/magento2/pull/15129)*. + * Removed extra space from the value of the `is_required` XML node in `SynonymGroup.xml`. *Fix submitted by Namrata in pull request [16557](https://github.com/magento/magento2/pull/16557)*. + * Minor corrections to code throughout the code base. *Fix submitted by GraysonChiang in pull request [16841](https://github.com/magento/magento2/pull/16841)*. + * Removed unused data from `app/code/Magento/Ui/Model/Export/ConvertToCsv.php` and `app/code/Magento/Ui/Model/Export/ConvertToXml.php`. *Fix submitted by Vishal Gelani in pull request [16524](https://github.com/magento/magento2/pull/16524)*. + * Removed unnecessary translations for label and comment tags and added missing translation strings. *Fix submitted by Yogesh Suhagiya in pull request [16090](https://github.com/magento/magento2/pull/16090)*. + * Removed redundant plug-in information (`dev:di:info`). *Fix submitted by Alexander Shkurko in pull request [16474](https://github.com/magento/magento2/pull/16474)*. + * Removed redundant semicolon from these files: `app/code/Magento/Tax/Model/Sales/Total/Quote/CommonTaxCollector.phpMagento/Multishipping/Test/Unit/Block/Checkout/SuccessTest.php` and `app/code/Magento/Tax/Model/Sales/Total/Quote/CommonTaxCollector.php`. *Fix submitted by Saurabh Parekh in pull request [15594](https://github.com/magento/magento2/pull/15594)*. + * Corrected errors in method description in `app/code/Magento/Config/Block/System/Config/Form.php`, `app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php`, and `app/code/Magento/Customer/Model/Session.php`. *Fix submitted by Vishal Gelani in pull request [15549](https://github.com/magento/magento2/pull/15549)*. + * Removed extra space and formatted the code in `app/code/Magento/Captcha/i18n/en_US.csv`. *Fix submitted by Saurabh Parekh in pull request [15552](https://github.com/magento/magento2/pull/15552)*. + * Removed the redundant `else` statement in `app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php`. *Fix submitted by Yaroslav Rogoza in pull request [15435](https://github.com/magento/magento2/pull/15435)*. + * Fixed misplaced bracket in `Option/Type/Text.php`. *Fix submitted by Valerij Ivashchenko in pull request [16566](https://github.com/magento/magento2/pull/16566)*. + * Removed a duplicate line and added comment in `app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php`. *Fix submitted by Vishal Gelani in pull request [15362](https://github.com/magento/magento2/pull/15362)*. + * Removed unused variable in `lib/web/css/source/lib/variables/_typography.less`. *Fix submitted by VitaliyBoyko in pull request [15386](https://github.com/magento/magento2/pull/15386)*. + * Corrected variable names in `LockAdminUserWhenEditingIntegrationTest` and `AssertCityBasedShippingRateChanged`, among others. *Fix submitted by Dmytro Cheshun in pull request [15294](https://github.com/magento/magento2/pull/15294)*. + * Corrected property name in `dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Backend/ControllerAclTest.php`. *Fix submitted by Dmytro Cheshun in pull request [15292](https://github.com/magento/magento2/pull/15292)*. + * Removed non-existing argument from the constructor's comment block in `app/code/Magento/Translation/Block/Html/Head/Config.php` and added space where needed in `app/code/Magento/Translation/Model/Json/PreProcessor.php`. *Fix submitted by Yogesh Suhagiya in pull request [15249](https://github.com/magento/magento2/pull/15249)*. + * Removed redundant close tag from `app/code/Magento/Review/view/frontend/templates/view.phtml`. *Fix submitted by Yogesh Suhagiya in pull request [14928](https://github.com/magento/magento2/pull/14928)*. + * Removed extra spaces from a key-value pair in the `en_US.csv`language file. *Fix submitted by Yogesh Suhagiya in pull request [14896](https://github.com/magento/magento2/pull/14896)*. + * Cleaned up `foreach` and `break` statements in `app/code/Magento/Rule/Model/Condition/AbstractCondition.php`. *Fix submitted by Thomas Klein in pull request [14609](https://github.com/magento/magento2/pull/14609)*. + * Corrected grammar in `README.md`. *Fix submitted by Stanislav Idolov in pull request [14844](https://github.com/magento/magento2/pull/14844)*. + * Corrected type hints in `Webapi/Controller/Soap/Request/Handler.php` and `Webapi/Model/Plugin/GuestAuthorization.php`. Also corrected case in property annotation in `Soap\Server.php` and added undefined property `_appState` in `Controller\Soap.php`. *Fix submitted by Prince Patel in pull request [16626](https://github.com/magento/magento2/pull/16626)*. + * Corrected `Magento\Webapi\Model\Soap\Fault::toXml()` method invocation in `Soap\FaultTest.php`. *Fix submitted by Prince Patel in pull request [16626](https://github.com/magento/magento2/pull/16626)*. + * We've removed an unused class from the `lib/_forms.less` file. *Fix submitted by Chirag Matholiya in pull request [15791](https://github.com/magento/magento2/pull/15791)*. + * We've removed unnecessary CSS code from `_actions-toolbar.less`. *Fix submitted by Chirag Matholiya in pull request [15789](https://github.com/magento/magento2/pull/15789)*. + * We've removed the unnecessary double semicolon from the style sheets. *Fix submitted by Namrata in pull request [15795](https://github.com/magento/magento2/pull/15795)*. + * We've removed the unused code from `docs.less`. *Fix submitted by Daniel Ruf in pull request [15871](https://github.com/magento/magento2/pull/15871)*. + * Removed extraneous negative margin on product list and product list items. *Fix submitted by Steven de Jong in pull request [15936](https://github.com/magento/magento2/pull/15936)*. [GitHub-15308](https://github.com/magento/magento2/issues/15308) + * Indentation issues with LESS files have been resolved. *Fix submitted by hitesh-wagento in pull request [15811](https://github.com/magento/magento2/pull/15811)*. + * The syntax for before-after operators in LESS files has been corrected. *Fix submitted by Namrata in pull request [16181](https://github.com/magento/magento2/pull/16181)*. + * Redundant keywords have been removed from miscellaneous files. *Fix submitted by Namrata in pull request [16182](https://github.com/magento/magento2/pull/16182)*. + * We've corrected misspellings in the comment section of `OrderFixture.php`. *Fix submitted by Namrata in pull request [16183](https://github.com/magento/magento2/pull/16183)*. + * Unnecessary leading and trailing spaces have been removed from the customer account login page email field. *Fix submitted by Piyush Dankhara in pull request [15365](https://github.com/magento/magento2/pull/15365)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Unnecessary leading and trailing spaces have been removed from fields in the customer account create and login forms. *Fix submitted by Piyush Dankhara in pull request [16192](https://github.com/magento/magento2/pull/16192)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Unnecessary leading and trailing spaces have been removed from fields in newsletter, forgot password, checkout login and email to a friend forms. *Fix submitted by Piyush Dankhara in pull request [16564](https://github.com/magento/magento2/pull/16564)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Unnecessary leading and trailing spaces have been removed from fields in the customer confirmation form. *Fix submitted by Vishal Gelani in pull request [16595](https://github.com/magento/magento2/pull/16595)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Removed unnecessary commented code from these files: `app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php`, `app/code/Magento/Sales/Model/Order/Creditmemo.php`, `lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php`, and `lib/internal/Magento/Framework/Model/ResourceModel/Db/Relation/ActionPool.php`. *Fix submitted by Pratik Oza in pull request [17077](https://github.com/magento/magento2/pull/17077)*. + * Removed unnecessary spaces from the price value in `app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml`. *Fix submitted by Valerij Ivashchenko in pull request [17027](https://github.com/magento/magento2/pull/17027)*. + * Remove unused comments from `_initDiscount()` function. *Fix submitted by Prince Patel in pull request [17002](https://github.com/magento/magento2/pull/17002)*. + * Corrected misspellings in multiple files, including `app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Tree/Attribute.php`, `app/code/Magento/Catalog/view/adminhtml/web/js/product/weight-handler.js`, `app/code/Magento/Signifyd/Test/Unit/Controller/Webhooks/HandlerTest.php`, `app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js`, and `dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetCmsPageLink.php`. *Fix submitted by Pratik Oza in pull request [16980](https://github.com/magento/magento2/pull/16980)*. + * Fixed the DocBlock for `hasInvoices()`, `hasShipments()`, and `hasCreditmemos()` in `app/code/Magento/Sales/Model/Order.php`. *Fix submitted by Lyzun Oleksandr in pull request [16554](https://github.com/magento/magento2/pull/16554)*. + * Fixed type hints and docs for the Downloadable Samples block. *Fix submitted by Björn Kraus in pull request [16408](https://github.com/magento/magento2/pull/16408)*. + * Removed redundant `@throws` hinting and unused import for `AdvancedPricingImportExport` module classes. *Fix submitted by Dmytro Cheshun in pull request [15872](https://github.com/magento/magento2/pull/15872)*. + * Added missing PHPDoc to methods throughout the code base. *Fix submitted by Leandro F. L. in pull request [16215](https://github.com/magento/magento2/pull/16215)*. + * Fixed mismatches in case between class and method name spellings. *Fix submitted by Leandro F. L. in pull request [16141](https://github.com/magento/magento2/pull/16141)*. + * Removed an unnecessary comma from the `translate` attribute in `app/code/Magento/Sales/etc/adminhtml/system.xml`. *Fix submitted by Dmytro Cheshun in pull request [15615](https://github.com/magento/magento2/pull/15615)*. ### CMS content + * Page layout issues that resulted from incorrect module sequence have been corrected. Previously, the `Magento_theme` module was loaded too late, which resulted in unexpected display issues. + * Corrected use statements and return values in `AggregationInterface`. *Fix submitted by Yaroslav Rogoza in pull request [14893](https://github.com/magento/magento2/pull/14893)*. ### Configurable products + * Customers can now successfully complete checkout when their order contains a configurable product with a configurable option. Previously, customers could not check out when there is a configurable product in the cart with a configurable option, which is now deleted, shopping cart could not be loaded. *Fix submitted by jonshipman in pull request [15468](https://github.com/magento/magento2/pull/15468)*. [GitHub-15467](https://github.com/magento/magento2/issues/15467) + * Magento now displays the manufacturer attribute on the Admin on the Catalog page for configurable products. Previously, Magento displayed these attributes on the simple products catalog page, but not on the configurable products catalog page. + * Configurable products are now sorted by only visible prices as expected. Previously, sorting a catalog by price resulted in sort results that included the prices of out-of-stock products and disabled child products. + * When two simple products of a configurable product have different prices, Magento now uses the lowest price as the default price on the product detail page. Previously, if one of the simple products had price=0, Magento did not use it as the default. *Fix submitted by Torrey Tsui in pull request [16540](https://github.com/magento/magento2/pull/16540)*. + * The missing check for a `false` value has been added to `ConfiguredRegularPrice`. Previously, when the parent method returned false, Magento threw this fatal error: `NOTICE: PHP message: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Catalog\Pricing\Price\ConfiguredOptions::getItemOptionsValue() must be of the type float, boolean given, called in /app/vendor/magento/module-catalog/Pricing/Price/ConfiguredRegularPrice.php on line 74 and defined in /app/vendor/magento/module-catalog/Pricing/Price/ConfiguredOptions.php:24`. *Fix submitted by Tibor Kotosz in pull request [15129](https://github.com/magento/magento2/pull/15129)*. + * Corrected formatting of the JavaScript code in the `app/code/Magento/Ui/view/base/templates/control/button/split.phtml` and `app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.jstemplate` files. *Fix submitted by Yogesh Suhagiya in pull request [14967](https://github.com/magento/magento2/pull/14967)*. ### Cookies + * Magento now responds to a customer accepting a cookie notice by simply hiding the notice. Previously, Magento reloaded the entire site when a user accepted the cookie notice. *Fix submitted by Torben Höhn in pull request [16890](https://github.com/magento/magento2/pull/16890)*. ### Customer account + * Magento no longer logs out a customer after a successful password change. + * Magento no longer displays the State/Province instead of the State field on U.S. customer address forms. + * Customer attributes are now correctly validated on the Admin Order form. Previously, Magento validated attributes\length after an order has been submitted, but not on the Admin Order form. + * Customers no longer lose their session when they switch stores on different domains. + * Non-U.S. and non-Canadian addresses that are displayed in the **Address Book summary** field now display the State/Province values as expected if that information was provided. + * The checkout page no longer displays custom address attributes when **Show on frontend** is set to **no**. + * Magento now displays the default value for a new Customer attribute that is created from the Admin. Previously, Magento set this value to **no** by default. + * Administrators can see all customers when the **Share Customer Accounts** value is set to Global. + * User login email validation no longer fails if the field contains a leading or trailing space on Internet Explorer 11.x. *Fix submitted by Piyush Dankhara in pull request [15365](https://github.com/magento/magento2/pull/15365)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Customer accounts are now unlocked as expected after a password reset. *Fix submitted by Andrea Gaspardo in pull request [15255](https://github.com/magento/magento2/pull/15255)*. [GitHub-15534](https://github.com/magento/magento2/issues/15534) + * Magento no longer changes the format of Date of Birth information when this field is enabled on the Create New Customer Account page, and an existing customer tries to re-register. *Fix submitted by KaushikChavda in pull request [15272](https://github.com/magento/magento2/pull/15272)*. + * When saving a customer group, Magento now copies extension attributes to the new data model that is returned. Previously, this action was not completed, and Magento behaved unpredictably. *Fix submitted by Joseph Maxwell in pull request [16254](https://github.com/magento/magento2/pull/16254)*. + * The `customer.account.dashboard.info.extra` block has been moved to contact information from the newsletter section in `app/code/Magento/Customer/view/frontend/templates/account/dashboard/info.phtml`. *Fix submitted by JeroenVanLeusden in pull request [14923](https://github.com/magento/magento2/pull/14923)*. ### Directory + * You can now configure different Allowed Countries for default and store scopes. *Fix submitted by Oleksandr Kravchuk in pull request [16693](https://github.com/magento/magento2/pull/16693)*. ### dotmailer @@ -866,46 +1097,59 @@ Our community contributors have made many helpful, minor corrections to spelling * Unexpected errors during subscriber or customer creation no longer occur. + * A merchant can now successfully create a new user and displays the appropriate welcome message. Previously, Magento threw an error during the creation of a customer or subscriber, although the new user/subscriber was created. ### EAV + * Magento now correctly renders multiselect product attributes with a custom source model in `adminhtml`. Previously, the selected value was saved the first time in the `catalog_product_entity_varchar` table, and the attribute was added to the `eav_attribute` table, but the selected options were not highlighted against the attribute. + * Magento now displays the fixed product tax attribute label as expected according to the specified store view. + * You can now successfully save a product after setting its special requirements multiselect attribute. (This means that attribute values are saved as expected to the database, checked in `_catalog_product_entity_varchar_ table`, and displayed as non-selected on product page in the Admin.) ### Frameworks + * `@api` annotation has been added to the `magento/framework` component of the Filter Group and Sort Order classes. *Fix submitted by Ronak Patel in pull request [16845](https://github.com/magento/magento2/pull/16845)*. + * `app/code/Magento/Theme/etc/di.xml` now uses `Translate` instead of `TranslateInterface`. *Fix submitted by Wouter Samaey in pull request [17124](https://github.com/magento/magento2/pull/17124)*. + * Classes with methods that contain variadic arguments can be also used in proxy classes. *Fix submitted by Vishal Gelani in pull request [16080](https://github.com/magento/magento2/pull/16080)*. + * The annotation in `_toOptionArray - lib\internal\Magento\Framework\Data\SearchResultProcessor.php` has been corrected. *Fix submitted by Namrata in pull request [15892](https://github.com/magento/magento2/pull/15892)*. + * Scheduled XML sitemap generation now works as expected. Previously, you could schedule sitemap generation (**Admin** > **Store** > **Configuration** > **Catalog** > **XML sitemap**), but Magento would not generate the sitemap. *Fix submitted by James Halsall in pull request [14822](https://github.com/magento/magento2/pull/14822)*. [GitHub-5768](https://github.com/magento/magento2/issues/5768) + * 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 Rodrigo Mourão in pull request [14800](https://github.com/magento/magento2/pull/14800)*. [GitHub-5726](https://github.com/magento/magento2/issues/5726) + * The `trigger_recollect` quote attribute no longer causes a time out. *Fix submitted by Philipp Sander in pull request [14719](https://github.com/magento/magento2/pull/14719)*. [GitHub-9580](https://github.com/magento/magento2/issues/9580) + * `Framework\Math\Random` now uses PHP 7.x features, including `random_bytes` and `random_int`. + * The `catalog:image:resize` command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6: * Remove `pub/media/catalog/product/cache`. (Removing this folder frees up space.) @@ -913,388 +1157,507 @@ Our community contributors have made many helpful, minor corrections to spelling * Run `bin/magento catalog:image:resize` to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.) + * We've fixed a display error that occurred when both a Critical Admin Notification and Release Notification window were opened. + * Changes that were made to file permissions for `lib/internal/Magento/Framework/View/Asset/Merged.php` and its associated test that were made in an earlier release have been reverted. *Fix submitted by Ihor Sviziev in pull request [16937](https://github.com/magento/magento2/pull/16937)*. + * The constructor in `Magento\Webapi\Model\Soap\Fault.php` now assigns `$exception->getOriginator()` to `_soapFaultCode` instead of to the dynamical property `_soapCode`. *Fix submitted by Marcel Hauri in pull request [15515](https://github.com/magento/magento2/pull/15515)*. + * Corrected annotation in `_toOptionArray` in `lib/internal/Magento/Framework/Data/Collection/AbstractDb.php`. *Fix submitted by Sanjay Patel in pull request [15336](https://github.com/magento/magento2/pull/15336)*. + * The invoice table now displays the correct shipping and handling for a partial items invoice. *Fix submitted by Ankur Raiyani in pull request [14795](https://github.com/magento/magento2/pull/14795)*. + * The return values from the `usort` and `value_compare_func` function now matches the PHP documentation for these functions. *Fix submitted by luke-denton-aligent in pull request [14726](https://github.com/magento/magento2/pull/14726)*. + * MySQL adapter can now reconnect successfully when using a nonstandard port. Previously, Magento threw this error, `Port must be configured within host parameter`. *Fix submitted by Julien ANQUETIL in pull request [14753](https://github.com/magento/magento2/pull/14753)*. #### Application framework + * You can now manually add a parameter to `app/etc/env.php: user_admin_email`. When an administrator is created, Magento sends an email to default store's email and, if present, to the email address defined in `user_admin_email`. + * Magento now removes unneeded PDF files after generation. Previously, Magento saved a copy of every generated invoice PDF in `/var`. *Fix submitted by Yaroslav Rogoza in pull request [16401](https://github.com/magento/magento2/pull/16401)*. [GitHub-3535](https://github.com/magento/magento2/issues/3535), [GitHub-14517](https://github.com/magento/magento2/issues/14517) + * Logs now indicate when Magento is in maintenance mode, which will help the debugging process. *Fix submitted by Ethan Yehuda in pull request [16840](https://github.com/magento/magento2/pull/16840)*. #### JavaScript framework + * `lib/web/mage/dropdowns.js` no longer fails when autoclose is set to **true**. *Fix submitted by Brian LaBelle in pull request [15499](https://github.com/magento/magento2/pull/15499)*. [GitHub-15469](https://github.com/magento/magento2/issues/15469) + * You can now view an entire zoomed product image in Fotorama fullscreen from the FireFox browser. Previously, the image jumps and the user cannot view all portions of the image. [GitHub-7978](https://github.com/magento/magento2/issues/7978) #### Web API framework + * The `array_push` function has been added to the list of forbidden functions. *Fix submitted by Leandro F. L. in pull request [16144](https://github.com/magento/magento2/pull/16144)*. + * 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 Maikel Martens in pull request [15598](https://github.com/magento/magento2/pull/15598)*. [GitHub-15564](https://github.com/magento/magento2/issues/15564) + * The `GET /V1/returns?searchCriteria` endpoint retrieves `tracks` arrays as expected. + * The `GET /V1/returns/:id` endpoint retrieves `tracks` arrays as expected. + * `catalogProductAttributeRepository` now returns the `frontend_labels` value as expected. #### Cache framework + * Magento no longer throws an exception when deploying static content on a deployment where Redis is used for cache management. See "Redis and static-content deployment" in [Redis troubleshooting]({{ page.baseurl }}/cloud/trouble/redis-troubleshooting.html) for more information. [GitHub-9287](https://github.com/magento/magento2/issues/9287) + * When a layout is loaded from the cache, Magento now repopulates the list of applied layout handles to prevent any chance of a layout handle being reapplied later. *Fix submitted by Scott Buchanan in pull request [12314](https://github.com/magento/magento2/pull/12314)*. ### Dashboard + * The dashboard now displays the correct order amount on orders when deploying Magento on multiple storefronts with different currencies. *Fix submitted by Ankur Raiyani in pull request [15661](https://github.com/magento/magento2/pull/15661)*. [GitHub-15660](https://github.com/magento/magento2/issues/15660) ### Directory + * Magento now supports seven-digit Israeli postal code masks. *Fix submitted by Itay Raz in pull request [16250](https://github.com/magento/magento2/pull/16250)*. ### General + * 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. + * 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. + * You can now successfully save a product video for one store view in deployments that have several store views. Previously, when you saved a product video for one store view, Magento saved it for all store views, although customers could play the video on the original store only. + * 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](https://github.com/magento/magento2/issues/14912) + * We've fixed an issue with unoptimized SQL queries in customer segments. Previously, the customer segment was not saved, and MySQL crashed. + * 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 My Invitations page now accurately displays the reward points amount in numbers. Previously, this page displayed the special character `%` instead of numbers. + * The Enterprise Reward refund logic no longer permits administrators to grant double refunds. + * We moved the `isAllowed` method from `AccessChangeQuoteControl` to a separate service to optimize the logic that supports using recurrent payments in combination with pre-ordered products. *Fix submitted by Jeroen Van Leusden in pull request [12566](https://github.com/magento/magento2/pull/12566)*. + * The attribute checking logic has been optimized by reducing redundant checks. *Fix submitted by Freek Vandeursen in pull request [11554](https://github.com/magento/magento2/pull/11554)*. + * Magento no longer validates customer address attribute value length when the minimum/maximum length fields are not displayed on the Admin. + * The dropdown menu is now positioned as expected under the link on the UI Component listing. *Fix submitted by Ankur Raiyani in pull request [15661](https://github.com/magento/magento2/pull/15661)*. [GitHub-15660](https://github.com/magento/magento2/issues/15660) + * The timestamp field now includes indexes, which reduces the chances of deadlocks that can occur while erasing old records. *Fix submitted by Carlos Lizaga in pull request [13328](https://github.com/magento/magento2/pull/13328)*. [GitHub-10346](https://github.com/magento/magento2/issues/10346) + * `setCateroryIds([])` has been corrected to `setCategoryIds([])` throughout the test suites. *Fix submitted by Neeta Kangiya in pull request [15621](https://github.com/magento/magento2/pull/15621)*. [GitHub-15590](https://github.com/magento/magento2/issues/15590) + * Menus with nested elements now align correctly. *Fix submitted by hitesh-wagento in pull request [15645](https://github.com/magento/magento2/pull/15645)*. [GitHub-7897](https://github.com/magento/magento2/issues/7897) + * An administrator can now successfully download a PDF or export data immediately after log in. Previously, an administrator could not download a PDF or export data successfully after log in, but was redirected to the Admin dashboard. *Fix submitted by Riccardo Tempesta in pull request [15539](https://github.com/magento/magento2/pull/15539)*. [GitHub-15510](https://github.com/magento/magento2/issues/15510) + * Merchants can now apply styling by changing LESS variables in the Luma theme as expected. *Fix submitted by hitesh-wagento in pull request [15734](https://github.com/magento/magento2/pull/15734)*. [GitHub-15608](https://github.com/magento/magento2/issues/15608) + * Added a service configuration setting—Send Adminhtml and Frontend as Separate Apps—to collect and send separate data for frontend and adminhtml applications for New Relic reporting. See [New Relic Reporting]( https://docs.magento.com/m2/ce/user_guide/reports/new-relic-reporting.html?Highlight=New%20Relic%20service). *Fix submitted by Max Chadwick in pull request [12935](https://github.com/magento/magento2/pull/12935)*. + * 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 Maksim Gopey in pull request [15826](https://github.com/magento/magento2/pull/15826)*. + * `.limiter` now has the same parent selectors as `.pages`, which prevents clashes between styles and layouts. Previously, `.limiter` float was too generic. *Fix submitted by hitesh-wagento in pull request [15878](https://github.com/magento/magento2/pull/15878)*. + * The default `FormElementDependenceController` configuration is now extended by custom configuration rather than overridden. *Fix submitted by Valerij Ivashchenko in pull request [16001](https://github.com/magento/magento2/pull/16001)*. + * `inline-block` issues with space and font-size in the Name form have been resolved. *Fix submitted by Daniel Ruf in pull request [16048](https://github.com/magento/magento2/pull/16048)*. + * Alignment and layout issues on home and category pages of the Hot Seller section have been resolved. *Fix submitted by Chirag Matholiya in pull request [15893](https://github.com/magento/magento2/pull/15893)*. [GitHub-15213](https://github.com/magento/magento2/issues/15213) + * Updated old font formats of the default fonts (`woff` and `woff2`). *Fix submitted by Daniel Ruf in pull request [15870](https://github.com/magento/magento2/pull/15870)*. [GitHub-15213](https://github.com/magento/magento2/issues/15213) + * We've corrected the return type of methods and typos in `CategoriesJson.php`, `Engine.php`, `UrlRewrite.php`, and `ObserverConfig.php`. *Fix submitted by Saurabh Parekh in pull request [15993](https://github.com/magento/magento2/pull/15993)*. + * `@escapeNotVerified` annotations were replaced in `name.phtml` and `qty.phtml`. *Fix submitted by Riccardo Tempesta in pull request [15532](https://github.com/magento/magento2/pull/15532)*. [GitHub-15501](https://github.com/magento/magento2/issues/15501) + * We've removed redundant function calls in `app/code/Magento/CurrencySymbol/view/adminhtml/templates/grid.phtml`. *Fix submitted by Saurabh Parekh in pull request [15346](https://github.com/magento/magento2/pull/15346)*. [GitHub-15355](https://github.com/magento/magento2/issues/15355) + * `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.) *Fix submitted by Kacper Chara in pull request [15382](https://github.com/magento/magento2/pull/15382)*. [GitHub-4977](https://github.com/magento/magento2/issues/4977) + * The Change Password warning message no longer appears twice. *Fix submitted by Sanjay Patel in pull request [15774](https://github.com/magento/magento2/pull/15774)*. [GitHub-14895](https://github.com/magento/magento2/issues/14895) + * You can now add the `NOINDEX,NOFOLLOW` meta tag to the admin scope to instruct Google and other friendly bots to refrain from adding the Admin URL to search results. *Fix submitted by Itay Raz in pull request [17163](https://github.com/magento/magento2/pull/17163)*. + * The Create Account and Password Forget forms now include the required notice for relevant fields. *Fix submitted by Daniel Ruf in pull request [16965](https://github.com/magento/magento2/pull/16965)*. + * Reworked the `addError`, `addSuccess` methods in several files. *Fix submitted by Tiago Sampaio in pull request [16921](https://github.com/magento/magento2/pull/16921)*. + * Minor improvements to `app/code/Magento/CatalogRule/Model/Rule/Job.php` and `app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php`. *Fix submitted by Vladymyr Hrivinskyi in pull request [16900](https://github.com/magento/magento2/pull/16900)*. + * Refactored `app/code/Magento/User/Controller/Adminhtml/` by removing the direct use of ObjectManager and included the dependencies using constructor dependency injection. *Fix submitted by AnshuMishra17 in pull request [16560](https://github.com/magento/magento2/pull/16560)*. + * `gallery.less` no longer imports `_responsive.less`. *Fix submitted by Karla Saaremäe in pull request [16579](https://github.com/magento/magento2/pull/16579)*. + * Added missing `width` property for the confirmation modal in `lib/web/css/source/components/_modals.less`. *Fix submitted by Vladymyr Hrivinskyi in pull request [16861](https://github.com/magento/magento2/pull/16861)*. + * Removed the redundant `font-size` attribute from the toolbar pager in `lib/web/css/source/lib/_utilities.less`. *Fix submitted by Karla Saaremäe in pull request [16716](https://github.com/magento/magento2/pull/16716)*. + * Updated the "Reporting security issues" section of `README.md` to recommend that users create a bugcrowd account. *Fix submitted by Tommy Quissens in pull request [16685](https://github.com/magento/magento2/pull/16685)*. + * The currency format that was previously broken for some locales now works as expected. Previously, broken currency formats resulted in an incorrect price amount on the product page. *Fix submitted by Vishal Gelani in pull request [15909](https://github.com/magento/magento2/pull/15909)*. [GitHub-11717](https://github.com/magento/magento2/issues/11717) + * Changed the **My Dashboard** string to **My Account** in multiple files. *Fix submitted by Daniel Ruf in pull request [16009](https://github.com/magento/magento2/pull/16009)*. + * Corrected the annotation to the `formatDateTime` function in `lib/internal/Magento/Framework/Stdlib/DateTime/TimezoneInterface.php` file. *Fix submitted by Sanjay Patel in pull request [15602](https://github.com/magento/magento2/pull/15602)*. + * The `clickableOverlay` option now works as expected. *Fix submitted by virtua-pmakowski in pull request [15172](https://github.com/magento/magento2/pull/15172)*. [GitHub-7399](https://github.com/magento/magento2/issues/7399) + * The Instant Purchase module now works as expected. Previously, the `get($type)` method in `/Magento/InstantPurchase/Model/ShippingMethodChoose/DeferredShippingMethodChooserPool.php` threw an exception without showing the shipping method $type as it was hardcoded as 'chooser'. *Fix submitted by Marcel Hauri in pull request [15258](https://github.com/magento/magento2/pull/15258)*. + * Template files now follow Magento standard coding format. *Fix submitted by Vishal Gelani in pull request [15398](https://github.com/magento/magento2/pull/15398)*. + * Corrected `viewModel` to `view_model` where needed in `\Magento\Backend\Block\Template`. *Fix submitted by Abhishek Jakhotiya in pull request [15067](https://github.com/magento/magento2/pull/15067)*. + * Non-well-formed numeric values that were encountered in `app/code/Magento/Directory/Model/Currency.php` have been resolved. *Fix submitted by Mateusz Lerczak in pull request [14833](https://github.com/magento/magento2/pull/14833)*. + * The `README` file for the `magento2` repository now has Maintainers and Contributors sections. *Fix submitted by Stanislav Idolov in pull request [14790](https://github.com/magento/magento2/pull/14790)*. + * The documentation for `AdapterInterface::update` has been improved. *Fix submitted by Navarr Barnier in pull request [14769](https://github.com/magento/magento2/pull/14769)*. + * The product video feature is now GDPR-compliant. ### Gift cards + * Magento now displays the **Credit Memo** link at the top of the page for orders with a total of 0 (zero). Previously, this link was missing, which prevented users from creating a credit memo for the order. + * You can now save gift cards without the price being 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 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`. + * Orders now retain gift message information on both item and order level. Previously, gift messages disappeared from an order when a customer logged into his account during checkout. + * Magento now maintains relationships between new gift card accounts when a customer purchases several gift cards in the same order. + * Magento now refunds only the exact amount used on a gift card if only the part of the gift card was used. Previously, when a customer used a gift card account code to partially pay for an order, and Magento subsequently created a credit memo for a portion of the order, the full amount of the gift card was refunded. + * Magento now generates the same number of gift card codes when the full order is invoiced as the customer selected when creating an order. Previously, for orders that included both physical products and multiple gift cards, the number of gift card codes generated on an order corresponded to the quantity of the previous physical line items that the user had added to the cart before adding gift cards. ### Gift message + * Orders now retain gift message information on both item and order level. Previously, gift messages disappeared from an order when a customer logged into his account during checkout. ### Google Analytics + * Google analytics pageview is no longer triggered twice. *Fix submitted by Torben Höhn in pull request [15765](https://github.com/magento/magento2/pull/15765)*. [GitHub-12221](https://github.com/magento/magento2/issues/12221) + * `Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver` is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [17137](https://github.com/magento/magento2/pull/17137)*. ### 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 Analytics events are now triggered as expected. Specifically, the `addToCart` and `removeFromCart` events are not triggered until after a customer adds a product to the mini cart. + * Magento now accurately updates the mini cart when a customer removes a product while accessing a storefront using Internet Explorer 11.x. Previously, when a customer removed a product from the mini cart, Magento did not remove the product but instead threw this error, `(SCRIPT438: Object doesn't support property or method 'find'. File: sidebar.js, Line: 237, Column: 13 )`. + * 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. ### HTML + * Responsive table headers now work as expected. Previously, when no heading was present in the `data-th` attribute on a column for a responsive table in Magento, only a colon was present. *Fix submitted by Sean Templeton in pull request [16517](https://github.com/magento/magento2/pull/16517)*. + * Corrected HTML syntax in the `report.phtml` error template. *Fix submitted by abcpremium in pull request [15454](https://github.com/magento/magento2/pull/15454)*. ### Import/export + * Product import now updates the **Enable Qty Increments** field as expected. *Fix submitted by Sergey P in pull request [14379](https://github.com/magento/magento2/pull/14379)*. [GitHub-14351](https://github.com/magento/magento2/issues/14351) + * `Magento_ImportExport` now supports unicode characters in column names. Previously, column names such `vitamin_a_µg` were marked invalid. *Fix submitted by Timon de Groot in pull request [15197](https://github.com/magento/magento2/pull/15197)*. ### Infrastructure + * Return Merchandise Authorization (RMA) calls now return order items and comments 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 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. + * Magento now deploys the translations in `js-translation.json` file when deploying static content. *Fix submitted by Sergey Dmitruk in pull request [4814](https://github.com/magento/magento2/pull/4814)*. + * Magento now updates the `Enable Qty Increments` field as expected during product import. *Fix submitted by Alexander Lukyanov in pull request [15144](https://github.com/magento/magento2/pull/15144)*. [GitHub-11354](https://github.com/magento/magento2/issues/11354) + * We've expanded the HTTP request class by adding the `isPostRequest` method. *Fix submitted by Pavel Usachev in pull request [12626](https://github.com/magento/magento2/pull/12626)*. + * You can now change only the primary button `font-weight` without changing regular button `font-weight` with LESS variables. *Fix submitted by Karla Saaremäe in pull request [16012](https://github.com/magento/magento2/pull/16012)*. [GitHub-15832](https://github.com/magento/magento2/issues/15832) + * We've added missing properties to the `Magento/Widget` component and removed a reference to a non-existent class in the associated tests. *Fix submitted by Marcel Hauri in pull request [15647](https://github.com/magento/magento2/pull/15647)*. + * We've improved the readability of `app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php`. *Fix submitted by Valerij Ivashchenko in pull request [16010](https://github.com/magento/magento2/pull/16010)*. + * Template syntax errors in `app/code/Magento/Theme/Block/Html/Breadcrumbs.php` have been corrected. *Fix submitted by Namrata in pull request [15339](https://github.com/magento/magento2/pull/15339)*. [GitHub-15345](https://github.com/magento/magento2/issues/15345) + * The calendar widget (`jQuery UI DatePicker`) now correctly displays more than one month. *Fix submitted by Burlacu Vasilii in pull request [16279](https://github.com/magento/magento2/pull/16279)*. [GitHub-7379](https://github.com/magento/magento2/issues/7379) + * An error with the template notation for `Magento_CatalogWidget` module has been fixed. *Fix submitted by Namrata in pull request [16530](https://github.com/magento/magento2/pull/16530)*. [GitHub-16529](https://github.com/magento/magento2/issues/16529) + * You can now use the `addTabAfter` method to add two or more tabs to the Admin (for example, the Order View page) in the expected order. Previously, Magento did not preserve the correct sort order for the new tabs. *Fix submitted by Tiago Sampaio in pull request [16175](https://github.com/magento/magento2/pull/16175)*. [GitHub-16174](https://github.com/magento/magento2/issues/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 in pull request [16704](https://github.com/magento/magento2/pull/16704)*. [GitHub-16703](https://github.com/magento/magento2/issues/16703) + * We've added `@navigation-level0-item__hover__color` missing variable for mobile and tablet view. *Fix submitted by hitesh-wagento in pull request [16732](https://github.com/magento/magento2/pull/16732)*. [GitHub-15848](https://github.com/magento/magento2/issues/15848) + * 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. *Fix submitted by Oleksandr Kravchuk in pull request [16732](https://github.com/magento/magento2/pull/16732)*. [GitHub-6504](https://github.com/magento/magento2/issues/6504) + * HTML minification now works as expected. *Fix submitted by Ronak Patel in pull request [16916](https://github.com/magento/magento2/pull/16916)*. [GitHub-5316](https://github.com/magento/magento2/issues/5316) + * The type of the `transport` event parameter has been changed to `DataObject`. This change reverts a change from type `DataObject` to `Array()` made in a previous release. *Fix submitted by gwharton in pull request [16599](https://github.com/magento/magento2/pull/16599)*. [GitHub-10210](https://github.com/magento/magento2/issues/10210) + * Transport variable can now be altered in the `email_invoice_set_template_vars_before` event. *Fix submitted by gwharton in pull request [15040](https://github.com/magento/magento2/pull/15040)*. [GitHub-10210](https://github.com/magento/magento2/issues/10210) + * Replaced deprecated methods in the `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php`, and `app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php`. *Fix submitted by Tiago Sampaio in pull request [17227](https://github.com/magento/magento2/pull/17227)*. + * Replaced deprecated methods in 44 files. *Fix submitted by Tiago Sampaio in pull request [17035](https://github.com/magento/magento2/pull/17035)*. + * The `template.js` has been updated to make the `jquery` variable consistently use `$`. Previously, JavaScript in the `template.js` sometimes used `jquery` and sometimes `$`, and Magento threw an error when running in Internet Explorer. *Fix submitted by Angelo Maragna in pull request [17129](https://github.com/magento/magento2/pull/17129)*. + * Corrected an undefined class property in the `app/code/Magento/Backend/Block/Media/Uploader.php getConfigJson()` method. *Fix submitted by Prince Patel in pull request [17099](https://github.com/magento/magento2/pull/17099)*. + * Corrected sticky footer in `page-main` container height on mobile devices. *Fix submitted by Denis Belevtsov in pull request [17006](https://github.com/magento/magento2/pull/17006)*. [GitHub-15118](https://github.com/magento/magento2/issues/15118) + * Corrected the return type of methods in `app/code/Magento/Catalog/Controller/Category/View.php`, `app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php`, and `app/code/Magento/CatalogSearch/Model/ResourceModel/EngineInterface.php`. *Fix submitted by Pratik Oza in pull request [16988](https://github.com/magento/magento2/pull/16988)*. + * Style groups for mobile devices (`max-width`) are now specified in the correct order. *Fix submitted by Tejash Kumbhare in pull request [16959](https://github.com/magento/magento2/pull/16959)*. [GitHub-14476](https://github.com/magento/magento2/issues/14476) + * Removed double occurrences of words from `Magento_Catalog`, `Magento_Customer`, `Magento_Downloadable`, `Magento_Sales`, and `lib` and `dev` test function comments. *Fix submitted by Pratik Oza in pull request [16977](https://github.com/magento/magento2/pull/16977)*. + * Corrected the namespace that is defined in `compare.phtml`. *Fix submitted by Ronak Patel in pull request [16978](https://github.com/magento/magento2/pull/16978)*. + * Edited verbose code in `app/code/Magento/Customer/Controller/Account/LoginPost.php`. *Fix submitted by Glenn Cheng in pull request [16928](https://github.com/magento/magento2/pull/16928)*. + * Fixed annotations in the following methods: `lib/internal/Magento/Framework/Acl/AclResource/Config/Converter/Dom.php`, `lib/internal/Magento/Framework/Acl/AclResource/Config/SchemaLocator.php`, and `lib/internal/Magento/Framework/Acl/Loader/ResourceLoader.php`. *Fix submitted by Tiago Sampaio in pull request [16899](https://github.com/magento/magento2/pull/16899)*. + * Removed or edited code comments in the following files: * `app/code/Magento/Backend/Block/Dashboard/Bar.php` @@ -1310,137 +1673,179 @@ Our community contributors have made many helpful, minor corrections to spelling * `app/code/Magento/Sales/view/adminhtml/templates/order/totals.phtml`. *Fix submitted by Pratik Oza in pull request [16891](https://github.com/magento/magento2/pull/16891)*. + * Improved product gallery block helper code (`app/code/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php`). *Fix submitted by Valerij Ivashchenko in pull request [16889](https://github.com/magento/magento2/pull/16889)*. + * Removed duplicated string from `app/code/Magento/ProductVideo/i18n/en_US.csv`. *Fix submitted by Valerij Ivashchenko in pull request [16882](https://github.com/magento/magento2/pull/16882)*. + * Refactored code in `dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php` so that an undefined index warning is no longer triggered when using uppercase reserved word *Fix submitted by Freek Vandeursen in pull request [16785](https://github.com/magento/magento2/pull/16785)*. + * Regex in `ControllerAclTest::getControllerPath()` has been changed to avoid classes that are under a namespace with a controller component (such as controller plugins) being interpreted as controllers. *Fix submitted by Freek Vandeursen in pull request [16707](https://github.com/magento/magento2/pull/16707)*. + * Knockout template files now include a `title` attribute in the `img` tag. *Fix submitted by Namrata in pull request [16691](https://github.com/magento/magento2/pull/16691)*. + * Added `title` attribute to links as needed for compatibility with w3c standards to these files: `app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml`, `app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml`, `app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml`, `app/code/Magento/Theme/view/frontend/templates/html/header/logo.phtml`, and `app/code/Magento/Ui/view/base/web/templates/block-loader.html`. *Fix submitted by Namrata in pull request [16689](https://github.com/magento/magento2/pull/16689)*. + * Search icons are now defined by header icon variables. *Fix submitted by Karla Saaremäe in pull request [16559](https://github.com/magento/magento2/pull/16559)*. + * Module namespace is now defined before template path name. Previously, when we overrode any core block to any custom module, Magento threw an error because trying to find the template file in the custom module if the module namespace is not defined before the template path. *Fix submitted by Prince Patel in pull request [16576](https://github.com/magento/magento2/pull/16576)*. + * Corrected the comment for the `Magento_Setup` module `includeClasses` function. *Fix submitted by Namrata in pull request [16549](https://github.com/magento/magento2/pull/16549)*. + * The `module:status` command now clearly provides an easily parsed listing of all enabled and disabled modules. *Fix submitted by Jisse Reitsma in pull request [15543](https://github.com/magento/magento2/pull/15543)*. + * Fixed the `false` value for the `cache_lifetime` argument in `Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml`. *Fix submitted by yuriyDne in pull request [16086](https://github.com/magento/magento2/pull/16086)*. + * CSRF tokens are now considered sensitive strings. *Fix submitted by Robert in pull request [13509](https://github.com/magento/magento2/pull/13509)*. + * Refactored JavaScript code in `popup.phtml` and `popup.js`. *Fix submitted by IvanPletnyov in pull request [16216](https://github.com/magento/magento2/pull/16216)*. + * Removed extraneous cursor property. *Fix submitted by Daniel Ruf in pull request [15305](https://github.com/magento/magento2/pull/15305)*. + * `app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml` now uses the stored value of the `getPartners` method instead of calling same method again. *Fix submitted by Saurabh Parekh in pull request [15517](https://github.com/magento/magento2/pull/15517)*. + * Added missing lowercase conversion on grouped product assignation. *Fix submitted by Juan Alonso in pull request [15312](https://github.com/magento/magento2/pull/15312)*. + * Removed code responsible for multiple add-to-cart initializations when Magento loads the product listing. *Fix submitted by Vova Yatsyuk in pull request [15409](https://github.com/magento/magento2/pull/15409)*. + * Refactored JavaScript code from `popup.phtml` to meet Magento coding standards. *Fix submitted by Rahul Kachhadiya in pull request [15341](https://github.com/magento/magento2/pull/15341)*. + * Removed redundant PHPdoc comment and deprecated private method `getSerializer` in `\Magento\Customer\Model\Customer\NotificationStorage` class. *Fix submitted by adrian-martinez-interactiv4 in pull request [15262](https://github.com/magento/magento2/pull/15262)*. + * CSS code is now automatically updated in the browser. Previously, users had to press **CTRL+F5** to see CSS changes. *Fix submitted by Alexander Lukyanov in pull request [15144](https://github.com/magento/magento2/pull/15144)*. [GitHub-11354](https://github.com/magento/magento2/issues/11354) + * Concrete type hints for product and category resources have been added to `app/code/Magento/Catalog/Model/Category.php` and `app/code/Magento/Catalog/Model/Product.php` to help with static analysis and IDE autocompletion. *Fix submitted by Yaroslav Rogoza in pull request [15136](https://github.com/magento/magento2/pull/15136)*. + * Replaced `rand` with `rand_int` in several modules. *Fix submitted by Daniel Ruf in pull request [15017](https://github.com/magento/magento2/pull/15017)*. + * Optimized `if-condition` in `/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper/AttributeFilter.php`. *Fix submitted by Valerij Ivashchenko in pull request [15002](https://github.com/magento/magento2/pull/15002)*. + * We've upgraded to Node.js 8 from Node.js 6. *Fix submitted by Daniel Ruf in pull request [15018](https://github.com/magento/magento2/pull/15018)*. + * Replaced `template/path` with `Module_Name::template/path` in the block class to ensure extensibility of the class. Previously, if the source block classes referenced a template without specifying the module name, then block render failed with this error: `Invalid template file`. *Fix submitted by Abhishek Jakhotiya in pull request [14946](https://github.com/magento/magento2/pull/14946)*. + * Replaced the `\Magento\Backend\Helper\Data` parameter with `\Magento\Backend\Model\UrlInterface` to make them identical with the constructor. *Fix submitted by Abhishek Jakhotiya in pull request [14946](https://github.com/magento/magento2/pull/14946)*. + * The return type of `addToCartPostParams` in `app/code/Magento/Catalog/Block/Product/ListProduct.php` has been changed to array. *Fix submitted by Sean Templeton in pull request [14946](https://github.com/magento/magento2/pull/14946)*. + * Datepicker now correctly converts date formats in locales other than `en-US`. *Fix submitted by Tao Sasaki in pull request [14627](https://github.com/magento/magento2/pull/14627)*. + * `default_head_blocks.xml` now contains the `order` attribute for setting the load order of stylesheets. *Fix submitted by Tao Sasaki in pull request [14290](https://github.com/magento/magento2/pull/14290)*. + * Magento now displays validation messages on the advanced search form as expected if you submit the advanced search form without entries. [GitHub-8131](https://github.com/magento/magento2/issues/8131) + * `\Magento\Framework\Reflection\TypeProcessor` methods have been simplified. + * Magento no longer unsets the taxed shipping total information before returning the total tax. ### JavaScript + * Refactored the JavaScript code of the button split widget. *Fix submitted by amittiwari024 in pull request [15351](https://github.com/magento/magento2/pull/15351)*. [GitHub-15354](https://github.com/magento/magento2/issues/15354) ### Klarna + * Magento no longer throws multiple JavaScript errors when a customer selects Klarna from the Review & Payments page. ### Module Manager + * Module Manager module grid now works as expected. *Fix submitted by Alex Gusev in pull request [15211](https://github.com/magento/magento2/pull/15211)*. [GitHub-15192](https://github.com/magento/magento2/issues/15192) ### Newsletter + * 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. + * Magento now correctly updates newsletter subscriptions when the customer is registered on two stores. Previously, when the customer tried to subscribe to the newsletter from a second store, Magento displayed this message, `You are (not) subscribed to "General Subscription"`. + * The newsletter subscription confirmation message does not display after a customer clicks the link that is included in the confirmation email. *Fix submitted by Kaushik Chavda in pull request [15247](https://github.com/magento/magento2/pull/15247)*. [GitHub-14747](https://github.com/magento/magento2/issues/14747) + * Magento now sends a confirmation request email to the customer when she unsubscribes to a newsletter. *Fix submitted by Lyzun Oleksandr in pull request [15464](https://github.com/magento/magento2/pull/15464)*. [GitHub-15218](https://github.com/magento/magento2/issues/15218) + * Removed the direct use of the object manager and loaded the dependency via constructor dependency injection in `app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php` and `app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php`. *Fix submitted by AnshuMishra17 in pull request [16851](https://github.com/magento/magento2/pull/16851)*. + * Newsletter registration now works the same when registered customers subscribe from My Account and or from the newsletter block. *Fix submitted by Lyzun Oleksandr in pull request [15479](https://github.com/magento/magento2/pull/15479)*. + * Removed the redundant return statement from `getJsTemplateName` function comment in the `Magento_Newsletter`'s block file. *Fix submitted by Namrata in pull request [16645](https://github.com/magento/magento2/pull/16645)*. ### Payment methods @@ -1448,87 +1853,113 @@ Our community contributors have made many helpful, minor corrections to spelling #### Braintree + * You can now cancel an order that was placed with Braintree when the Braintree authorization had expired. + * All invoices now have the merchant account ID set in the store configuration for the Braintree payment method. Previously, the default merchant account ID was sent to Braintree for any subsequent partial order invoices after the initial invoice is generated. + * Braintree configuration (`app/code/Magento/Braintree/etc/adminhtml/system.xml`) now contains `showInStore` attributes. *Fix submitted by Andreas Schrammel in pull request [16458](https://github.com/magento/magento2/pull/16458)*. + * Magento now retains the correct address information when a customer using Braintree's **Pay with PayPal** button to complete an order navigates back to the shipping step and changes the shipping address fields. *Fix submitted by Vova Yatsyuk in pull request [15133](https://github.com/magento/magento2/pull/15133)*. #### PayPal + * Customers can now continue creating an order after a PayFlow Pro payment has been declined. Previously, under these circumstances. the customer could not continue his purchase. + * Paypal Onboarding has been configured to work for merchants from countries other than the United States. + * Magento now accurately displays the status of PayPal orders. Previously, the status of PayPal orders was displayed only as **Processing**. + * Magento no longer sends duplicate order confirmation emails when a customer uses PayPal Express to complete an order. *Fix submitted by Rocket Web in pull request [14820](https://github.com/magento/magento2/pull/14820)*. + * Tax amount calculation for payments processed through PayPal now works as expected. Previously, Magento sent the wrong amount to PayPal when a discount was applied to an order. + * The `Allmethods config` source model now reports the full list of payment methods as expected. *Fix submitted by Manuel Schmid in pull request [15032](https://github.com/magento/magento2/pull/15032)*. [GitHub-13460](https://github.com/magento/magento2/issues/13460) + * You can now cancel an order placed through Cybersource when the fraud filters are triggered. + * Magento now emails customer order confirmations for orders that are placed through Worldpay. + * Magento now correctly applies free shipping to an order after the customer applied the free shipping code during checkout. + * Magento no longer sends Admin orders to Signifyd for review when Signifyd is disabled on the website on which the administrator is logged in. + * 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. + * Magento now sends email about payment failures to customers. Previously, Magento did not send a customer email, but instead logged an error in `support.log`, and displayed this message on the storefront, **Transaction has been declined. Please try again later**. + * Magento no longer throws an error when multiple payment methods are enabled. Previously, when a merchant tried to enable more than one payment method from the Admin, Magento displayed this error in the console, `Found elements with non-unique id billing-address-form`. *Fix submitted by Neeta Kangiya in pull request [15349](https://github.com/magento/magento2/pull/15349)*. [GitHub-15348](https://github.com/magento/magento2/issues/15348) + * Magento now sends order confirmation emails as expected for orders purchased with WorldPay. + * A type error in the payment void method of the Authorizenet module has been fixed. *Fix submitted by Oleh Kravets in pull request [16194](https://github.com/magento/magento2/pull/16194)*. [GitHub-16184](https://github.com/magento/magento2/issues/16184) ### Pagecache + * Full-page cache now works as expected in multistore deployments. Previously, when you opened the URL of a non-default store in a multistore deployment, full-page cache did not return the URL. ### Performance + * 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. + * Merchants can now improve store performance by disabling Magento Report functionality if business function does not require this capability. A new configuration setting (**System Configuration**: **General** > **Reports** > **General Options**) allows merchants to disable Magento Reports, which is recommended practice if a merchant's business function does not require this capability. + * You can change store locale without the exporting and importing configuration process. While Magento is in Production and the `SCD_ON_DEMAND` is enabled, the Magento store and admin locale options are available. See [Change locales]({{ page.baseurl }}/cloud/live/sens-data-over.html#change-locales). + * The time required to load category or product pages for products that are configured with many attributes (more than 500) has been significantly reduced. Refactoring the logic for product attribute retrieval has resulted in a reduction of load time of almost 90% for certain scenarios. + * The time required to load a store’s home page has been reduced noticeably when the top menu contains many categories. (Load time is still affected by the number of categories and the structure of the top menu.) + * The speed of catalog price rule save operations has been improved by these changes: * elimination of unnecessary reindexing @@ -1536,156 +1967,199 @@ Our community contributors have made many helpful, minor corrections to spelling * improvement to the way that the `getMatchingProductIds` function fetches products, which has eliminated unnecessary checks of the data set. *Fix submitted by Andrey Zabara in pull request [14707](https://github.com/magento/magento2/pull/14707)*. + * The ID to SKU lookup process for tier prices has been optimized. Previously, with a large number of tier or group prices, each tier would separately make a database query to look up the associated SKU. *Fix submitted by Todd Christensen in pull request [14699](https://github.com/magento/magento2/pull/14699)*. ### 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. ### Quote + * 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 Riccardo Tempesta in pull request [14904](https://github.com/magento/magento2/pull/14904)*. [GitHub-14869](https://github.com/magento/magento2/issues/14869) + * 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 George Schiopu in pull request [14976](https://github.com/magento/magento2/pull/14976)*. [GitHub-10395](https://github.com/magento/magento2/issues/10395) + * Coupon codes now work for guest users through the web API as well as from the storefront. *Fix submitted by Marcin Dykas in pull request [15320](https://github.com/magento/magento2/pull/15320)*. [GitHub-14056](https://github.com/magento/magento2/issues/14056) + * Magento no longer runs an SQL query on every item in the database when a quote is empty, which has improved the performance of the checkout process. *Fix submitted by Sean Templeton in pull request [16675](https://github.com/magento/magento2/pull/16675)*. ### Reports + * The timezone has been removed from the date when Magento retrieves the current month from a UTC timestamp. *Fix submitted by Prince Patel in pull request [16584](https://github.com/magento/magento2/pull/16584)*. [GitHub-15940](https://github.com/magento/magento2/issues/15940) ### Review + * Removed the unused class declaration from controller's index action and the unused code in the comment block from the template file in `app/code/Magento/Review/view/frontend/templates/redirect.phtml` and `app/code/Magento/Version/Controller/Index/Index.php`. *Fix submitted by Yogesh Suhagiya in pull request [15173](https://github.com/magento/magento2/pull/15173)*. ### Rule + * A cart rule that uses a `subselection` condition now works as executed. Previously, cart rules with this condition automatically granted a discount. + * The retrieval of first array elements in the following files has been improved: `app/code/Magento/Rule/Model/Action/AbstractAction.php` and `app/code/Magento/Rule/Model/Condition/Combine.php`. *Fix submitted by Thomas Klein in pull request [16053](https://github.com/magento/magento2/pull/16053)*. [GitHub-15940](https://github.com/magento/magento2/issues/15940) + * 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 eventually crashed. *Fix submitted by Keith Bentrup in pull request [15265](https://github.com/magento/magento2/pull/15265)*. [GitHub-15121](https://github.com/magento/magento2/issues/15121) ### Sales + * Order status now remains in the Complete state after Magento refunds store credit on a partial credit memo. Previously, under these circumstances, Magento changed the status of the order to Closed. + * You can now create multiple credit memos in one session and save each successfully. Previously, Magento displayed this error when you tried to save a second credit memo after creating the first memo: `Could not save credit memo`. + * Magento now displays any errors that occur during order creation in the browser console. Previously, Magento displayed this message: `Uncaught ReferenceError: order is not defined during order creation` instead of a specific error message. + * The `POST /V1/shipment` endpoint processes `tracks` arrays as expected. + * Magento no longer reverts to the country associated with the default website when a customer edits the billing address for an order. Previously, if a customer edited the shipping address for an order, Magento would reset the billing address to the default address specified for the default website. + * Credit memo email template file incorrect object types have been corrected. Previously, when a merchant created a credit memo and checked the **Email** checkbox, Magento threw an error. *Fix submitted by Joseph Maxwell in pull request [16438](https://github.com/magento/magento2/pull/16438)*. + * Performance issues that resulted from disabling invoice emails have been resolved. + * The Invoices grid now reflects changes in invoice state as expected. *Fix submitted by JeroenVanLeusden in pull request [16286](https://github.com/magento/magento2/pull/16286)*. + * You can now set the `is_visible_on_front` parameter from the `addStatusHistoryComment` of the order mode. Previously, you could set the `is_visible_on_front` parameter from the Admin only. *Fix submitted by Mark Shust in pull request [15637](https://github.com/magento/magento2/pull/15637)*. + * Module name space is now declared before the template pathname in `Magento_Sales::order/info.phtml`. *Fix submitted by Ronak Patel in pull request [16206](https://github.com/magento/magento2/pull/16206)*. + * The `addFieldToFilter` has been added to `addressCollection` in `app/code/Magento/Sales/Setup/UpgradeData.php`, which optimizes the process of collecting addresses during upgrade. *Fix submitted by Dmytro Cheshun in pull request [15615](https://github.com/magento/magento2/pull/15615)*. + * Invoice prefixes now contain the correct store ID when Magento is deployed in a multistore environment. Previously, Magento always created the invoice number using the default store view ID. *Fix submitted by Sanjay Patel in pull request [15615](https://github.com/magento/magento2/pull/15615)*. [GitHub-14063](https://github.com/magento/magento2/issues/14063) + * The `GET /V1/orders/items/{id}` request now returns `parent_item`. *Fix submitted by Sanjay Patel in pull request [15615](https://github.com/magento/magento2/pull/15615)*. ### Sales rules + * Cart price rules with associated coupons are no longer affected by edits to scheduled updates. + * The `discount` label in the `app/code/Magento/SalesRule/view/frontend/web/js/view/summary/discount.js` file is now compatible with custom module discount. *Fix submitted by Rodrigo Santellan in pull request [16093](https://github.com/magento/magento2/pull/16093)*. ### Search + * 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 Julien ANQUETIL in pull request [14839](https://github.com/magento/magento2/pull/14839)*. [GitHub-14274](https://github.com/magento/magento2/issues/14274) + * Customers can now use the **Enter** key to submit searches from a page header. Previously, when a customer used the **Enter** key to submit a search query, event handlers that were bound to the form submit (through jQuery) were fired twice. *Fix submitted by Amjad M in pull request [15340](https://github.com/magento/magento2/pull/15340)*. [GitHub-13793](https://github.com/magento/magento2/issues/13793) + * Swagger now handles `searchCriteria`-related requests as expected. *Fix submitted by Jakub in pull request [15040](https://github.com/magento/magento2/pull/15040)*. [GitHub-15322](https://github.com/magento/magento2/issues/15322) + * The Admin panel search now filters catalogs as expected. Previously, if a merchant tried to narrow a search when using the Search tool in the Admin panel, Magento displayed the full catalog view without narrowing down the list. *Fix submitted by Pavel in pull request [12735](https://github.com/magento/magento2/pull/12735)*. [GitHub-7861](https://github.com/magento/magento2/issues/7861) + * 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 Riccardo Tempesta in pull request [14905](https://github.com/magento/magento2/pull/14905)*. [GitHub-14855](https://github.com/magento/magento2/issues/14855) + * 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 Ben Robie in pull request [16952](https://github.com/magento/magento2/pull/16952)*. [GitHub-8131](https://github.com/magento/magento2/issues/8131) + * Server load has been reduced for advanced searching. Previously, when a customer entered text in the search suggestion box, Magento immediately sent every character to the server. The auto-complete box now delays sending the request. *Fix submitted by Sean Templeton in pull request [16669](https://github.com/magento/magento2/pull/16669)*. + * You can now successfully clone the minisearch widget. *Fix submitted by Daniel Ruf in pull request [15485](https://github.com/magento/magento2/pull/15485)*. ### Shipping + * The shipping and estimated tax form now display country, city, and postcode fields as expected. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16213](https://github.com/magento/magento2/pull/16213)*. [GitHub-8222](https://github.com/magento/magento2/issues/8222) + * A method with a misspelled name was deprecated and the new method with correct spelling added to `app/code/Magento/Multishipping/Block/Checkout/AbstractMultishipping.php`. *Fix submitted by Anna Völkl in pull request [15514](https://github.com/magento/magento2/pull/15514)*. ### Store + * Magento now adds the correct store code to product URLs in stores with more than one store view when **Stores** > **Settings** > **Configuration** > **General** > **Web** > **Add Store Code to Urls** is set to **yes**. *Fix submitted by Elias Kotlyar in pull request [15566](https://github.com/magento/magento2/pull/15566)*. [GitHub-15565](https://github.com/magento/magento2/issues/15565) + * Magento now displays store views as expected when you select **Stores** > **Terms and Conditions**. *Fix submitted by afirlejczyk in pull request [14546](https://github.com/magento/magento2/pull/14546)*. [GitHub-13944](https://github.com/magento/magento2/issues/13944) #### Elasticsearch + * Bundle products are now indexed as expected in Elasticsearch. + * Elasticsearch now correctly calculates the relevance of quick search results according to selected attribute search weights. #### Admin global search + * 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). + * The Admin global search now returns results that match the keyword for all available pages, or if a user searches in specific sections, the search feature now returns only the results that matched the key words in those specific sections. Previously, the Admin global search did not return results that matched the specified keywords and did not restrict results to specified sections. + * Catalogs are now correctly filtered by the Admin search bar. Previously, if you attempted to use the Search tool in the Admin, and selected "XX in Products", Magento displayed the full catalog view without narrowing down the list. *Fix submitted by Pavel in pull request 12735*. [GitHub-12193](https://github.com/magento/magento2/issues/12193), [GitHub-7861](https://github.com/magento/magento2/issues/7861) ### Shipping @@ -1695,33 +2169,41 @@ You can find Magento Shipping-specific release notes in [Magento Shipping Releas + * 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 shipping progress dates displayed in tracking popup for FedEx shipping are now accurate. ### Sitemap + * Sitemaps generated by `cron` no longer display `/pub/` in image URLs when `docroot` is set to `/pub`. Previously, if the `docroot` was set to `pub` and `BASE MEDIA URL` was not set, the cron-generated sitemap generated incorrect image URLs. + * Magento now generates correct product URLs for sitemaps. Previously, when the **Use Categories Path for Product URLs** attribute was set to **no** in **Configuration** > **Catalog** > **Search Engine Optimization**, Magento generated the wrong product URL in the sitemap. + * Images in XML sitemap are no longer always linked to the primary store in a multistore deployment. *Fix submitted by Steven de Jong in pull request [15689](https://github.com/magento/magento2/pull/15689)*. [GitHub-15588](https://github.com/magento/magento2/issues/15588) + * Split sitemaps now use the index sitemap name as a prefix. Previously, when generating large sitemaps that result in a single index sitemap and several smaller split sitemap files, the split sitemap files did not use the same name prefix as the parent. *Fix submitted by James Halsall in pull request [14836](https://github.com/magento/magento2/pull/14836)*. ### Store + * 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 Burlacu Vasilii in pull request [16468](https://github.com/magento/magento2/pull/16468)*. [GitHub-16273](https://github.com/magento/magento2/issues/16273) ### Swatches + * The process of switching attribute input type has been fixed, which resolves multiple issues that customers were experiencing when working with swatches, including: * inability to change attribute types from `swatch` to `dropdown` @@ -1733,188 +2215,245 @@ You can find Magento Shipping-specific release notes in [Magento Shipping Releas ### Tax + * Redundant product tax recalculation has been reduced during the loading of category pages, which has improved page loading. *Fix submitted by JeroenVanLeusden in pull request [15089](https://github.com/magento/magento2/pull/15089)*. [GitHub-14941](https://github.com/magento/magento2/issues/14941) + * JavaScript code in the `*.phtml` file of the Tax module has been refactored to meet Magento coding standards. *Fix submitted by Vishal Gelani in pull request [15343](https://github.com/magento/magento2/pull/15343)*. [GitHub-15352](https://github.com/magento/magento2/issues/15352) + * The `Invalid country code` error message that sometimes occurred during import of tax CSV files now includes the name of the country whose data is causing the error. Previously, the message did not identify which country's data caused the error. *Fix submitted by Adam Moss in pull request [16873](https://github.com/magento/magento2/pull/16873)*. ### Testing + * The `testGetIgnoresFirstSlash` method in `ObjectManagerTest` has been updated. *Fix submitted by Prince Patel in pull request [17098](https://github.com/magento/magento2/pull/17098)*. + * The `\Magento\Backup\Model\Db` model is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [17063](https://github.com/magento/magento2/pull/17063)*. + * Corrected block name in the `Magento_Framework` test XML file. *Fix submitted by Namrata in pull request [16646](https://github.com/magento/magento2/pull/16646)*. + * Metadata titles in `lib/internal/Magento/Framework/View/Page/Config.php` are now covered by a unit test. *Fix submitted by Lorenzo Stramaccia in pull request [16333](https://github.com/magento/magento2/pull/16333)*. + * The `\Magento\Checkout\Model\Cart\CollectQuote` class is now covered by a unit test. *Fix submitted by Chitoraga Eduard in pull request [16271](https://github.com/magento/magento2/pull/16271)*. ### Theme + * Merchants can now successfully change the applied theme. Previously, Magento displayed an error when a merchant tried to save changes to the applied theme on **Content** > **Design** > **Configuration**. *Fix submitted by Daniel Ruf in pull request [15137](https://github.com/magento/magento2/pull/15137)*. [GitHub-13530](https://github.com/magento/magento2/issues/13530) + * Merchants can now successfully change the applied theme setting for a store view (**Content** > **Design** > **Configuration**). *Fix submitted by Daniel Ruf in pull request [15137](https://github.com/magento/magento2/pull/15137)*. [GitHub-14968](https://github.com/magento/magento2/issues/14968) + * Changing the `@tab-content__border` variable in Blank theme now works as expected. *Fix submitted by hitesh-wagento in pull request [15914](https://github.com/magento/magento2/pull/15914)*. [GitHub-14999](https://github.com/magento/magento2/issues/14999) ### Translation + * The `translation.json` file now contains translatable strings for the phrases "Store Credit" and "Gift Card". Previously, these strings were not translated for the shopping cart, one-page checkout, or order view in the customer account on the storefront. + * We've added client-side caching of `js-translation.js`. + * Removed the unused translation for `comment` tag from these files: `app/code/Magento/Analytics/etc/adminhtml/system.xml`, `app/code/Magento/Catalog/etc/adminhtml/system.xml`, `app/code/Magento/Swatches/etc/adminhtml/system.xml`, and `app/code/Magento/Ups/etc/adminhtml/system.xml`. *Fix submitted by Yaroslav Rogoza in pull request [15604](https://github.com/magento/magento2/pull/15604)*. + * Added language translation capability for `comment` tags in the `system.xml` file of the Signifyd module. *Fix submitted by Yogesh Suhagiya in pull request [15364](https://github.com/magento/magento2/pull/15364)*. [GitHub-15361](https://github.com/magento/magento2/issues/15361) + * All previously unsupported `translate` tags in the mini cart template are now supported. *Fix submitted by VitaliyBoyko in pull request [15782](https://github.com/magento/magento2/pull/15782)*. + * 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 in pull request [16190](https://github.com/magento/magento2/pull/16190)*. [GitHub-16079](https://github.com/magento/magento2/issues/16079) + * Added language translation capability to the Braintree module's template file. *Fix submitted by Namrata in pull request [16690](https://github.com/magento/magento2/pull/16690)*. + * Added mini cart checkout-related translations that were missing from `app/code/Magento/Checkout/i18n/en_US.csv`. *Fix submitted by JeroenVanLeusden in pull request [16553](https://github.com/magento/magento2/pull/16553)*. + * Added language translation capability for labels in the Braintree, Multishipping, and PayPal modules. *Fix submitted by Rahul Kachhadiya in pull request [15371](https://github.com/magento/magento2/pull/15371)*. + * Added language translation capability for message strings in `app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php` and `app/code/Magento/AdminNotification/i18n/en_US.csv`. *Fix submitted by Yogesh Suhagiya in pull request [15333](https://github.com/magento/magento2/pull/15333)*. ### UI + * The `clickableOverlay` option now works as expected, which improves the performance of modal popups. *Fix submitted by virtua-pmakowski in pull request [15172](https://github.com/magento/magento2/pull/15172)*. [GitHub-7399](https://github.com/magento/magento2/issues/7399) + * Customers can now place orders from grouped products where the quantity of subproducts is less than one. *Fix submitted by Valerij Ivashchenko in pull request [14752](https://github.com/magento/magento2/pull/14752)*. [GitHub-14692](https://github.com/magento/magento2/issues/14692) + * Footers now behave as expected when displaying Magento on a mobile device. *Fix submitted by Chirag Matholiya in pull request [15353](https://github.com/magento/magento2/pull/15353)*. [GitHub-15118](https://github.com/magento/magento2/issues/15118) + * The pagination of customer group prices in Advanced Pricing when viewed on the Admin now works as expected. *Fix submitted by Dmytro Cheshun in pull request [15614](https://github.com/magento/magento2/pull/15614)*. [GitHub-15210](https://github.com/magento/magento2/issues/15210) + * Magento now displays a caret icon as expected when a user hovers his mouse over a navigation category on a storefront. *Fix submitted by Tejash Kumbhare in pull request [16082](https://github.com/magento/magento2/pull/16082)*. [GitHub-15220](https://github.com/magento/magento2/issues/15220) + * 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. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16477](https://github.com/magento/magento2/pull/16477)*. [GitHub-14593](https://github.com/magento/magento2/issues/14593) + * The alignment **Title** and **Items** on the left bar has been corrected. *Fix submitted by Rafael Corrêa Gomes in pull request [16984](https://github.com/magento/magento2/pull/16984)*. + * The black color coding standard has been changed from `color: #000;` to `color: @color-black;`. *Fix submitted by Chirag Matholiya in pull request [17019](https://github.com/magento/magento2/pull/17019)*. + * The white color coding standard has been changed from `color: #fff;` to `color: @color-white;`. *Fix submitted by Chirag Matholiya in pull request [16903](https://github.com/magento/magento2/pull/16903)*. + * Minor issues with the dynamically defined ``$filter`` property and missing throws to PHPDocs for methods in the UI export converter classes have been corrected. *Fix submitted by Dmytro Cheshun in pull request [15694](https://github.com/magento/magento2/pull/15694)*. + * The `ClassMagento\Ui\Component\Control\ActionPool` constructor and `getConfiguration()` in the UI module are now invoked with the correct number of parameters. *Fix submitted by Marcel Hauri in pull request [15512](https://github.com/magento/magento2/pull/15512)*. + * Unneeded JavaScript was removed from `logout.phtml` and replaced with a new JavaScript component. *Fix submitted by Nimesh Patel in pull request [15301](https://github.com/magento/magento2/pull/15301)* + * Page wrapper CSS has been moved from media query to `.page-wrapper`. *Fix submitted by Vishal Gelani in pull request [15416](https://github.com/magento/magento2/pull/15416)*. + * The `font-size` variable has been updated and standardized. *Fix submitted by Vishal Gelani in pull request [15421](https://github.com/magento/magento2/pull/15421)*. + * Layout arguments now support for the `const` type. *Fix submitted by Igor Vitol in pull request [15058](https://github.com/magento/magento2/pull/15058)*. + * Button definitions have been moved to the new `buttons.js` file. *Fix submitted by Jisse Reitsma in pull request [15194](https://github.com/magento/magento2/pull/15194)*. + * Overlay issues with the mini cart have been resolved. Previously, if you logged in as a customer, then clicked on the mini cart icon and then the Account menu, the mini cart overlaid the Account menu. *Fix submitted by Arthur James in pull request [14963](https://github.com/magento/magento2/pull/14963)*. + * Magento now supports multiple `ui_components` with layout type `tabs` on a page. Previously, the second UI component failed to render, and Magento displayed this error, `Element with ID 'tabs_nav' already exists`. *Fix submitted by Freek Vandeursen in pull request [14742](https://github.com/magento/magento2/pull/14742)*. + * The order of style groups for mobile devices has been corrected. [GitHub-14476](https://github.com/magento/magento2/issues/14476) + * Dynamic data rows no longer fail due to a read operation after a delete condition. Previously, Magento threw an undefined JavaScript error. *Fix submitted by Chirag Matholiya in pull request [15840](https://github.com/magento/magento2/pull/15840)*. [GitHub-911](https://github.com/magento-engcom/msi/issues/911) ### URL rewrites + * Categories of the Main menu in the different store view are now updated when Varnish is enabled. + * URL key values are now derived from the default value set on the default store. Previously, Magento derived the product URL key value from the product name on storeview level. + * 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 in pull request [13397](https://github.com/magento/magento2/pull/13397)*. [GitHub-13296](https://github.com/magento/magento2/issues/13296) + * An unnecessary parameter has been removed from `_addProductLinkBlock()`. *Fix submitted by Saurabh Parekh in pull request [15891](https://github.com/magento/magento2/pull/15891)*. + * Template files have been refactored to follow Magento coding standards. *Fix submitted by Nimesh Patel in pull request [15422](https://github.com/magento/magento2/pull/15422)*. [GitHub-15356](https://github.com/magento/magento2/issues/15356) + * Undefined mixin parameters are now defined and variable scope has been improved in `lib/web/css/source/lib/_icons.less`, `lib/web/css/source/lib/_pages.less`, and `lib/web/css/source/lib/_utilities.less`. *Fix submitted by Prince Patel in pull request [17097](https://github.com/magento/magento2/pull/17097)*. + * Magento now removes URL rewrites as expected after you delete a CMS page through the API or in the `crontab` area. *Fix submitted by Roman in pull request [14751](https://github.com/magento/magento2/pull/14751)*. + * Main menu categories in different store views are now updated as expected when Varnish is enabled. ### Vertex + * The Gross Amount and Tax Amount columns in the Transaction Details Report file now include price and tax for products as expected. ### Wishlist + * Incorrect return type hinting in DocBlocks has been corrected for several methods in the Wishlist module. *Fix submitted by Yaroslav Rogoza in pull request [15854](https://github.com/magento/magento2/pull/15854)*. + * Removed an unnecessary parameter from the `toHtml()` method in `Wishlist/view/frontend/templates/item/list.phtml`. *Fix submitted by Yaroslav Rogoza in pull request [16023](https://github.com/magento/magento2/pull/16023)*. + * Magento no longer thows errors when you log in using the wishlist URL. *Fix submitted by Oleksandr Kravchuk in pull request [16386](https://github.com/magento/magento2/pull/16386)*. + * Magento no longer removes a product from the wishlist when you update a wishlist item. *Fix submitted by Chitoraga Eduard in pull request [16372](https://github.com/magento/magento2/pull/16372)*. + * Magento now passes empty arrays (instead of null values) into the DataObject constructor. Previously, a null value was passed, which caused a fatal error. *Fix submitted by Abhishek Jakhotiya in pull request [16220](https://github.com/magento/magento2/pull/16220)*. + * The `\Magento\Wishlist\CustomerData\Wishlist::getImageData()` method DocBlock now correctly indicates that the method returns an array. *Fix submitted by Yaroslav Rogoza in pull request [15718](https://github.com/magento/magento2/pull/15718)*. + * Magento now displays the correct product image for the selected configurable product variant in the My Wishlist sidebar. Previously, Magento always displayed the image associated with the default configurable product in the My Wishlist sidebar. *Fix submitted by kishanpatadia in pull request [15477](https://github.com/magento/magento2/pull/15477)*. diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.6EE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.6EE.md index 51a693fc848..b0fec303e41 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.6EE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.6EE.md @@ -25,9 +25,11 @@ This release includes significant performance improvements to the core Magento c Performance-tuning enhancements focus on catalog indexing and include: + * Category product indexer logic has been optimized, and re-indexing time has decreased up to 98%, from 40 minutes to one minute for 100,000 categories.  Previously, when your store contained many categories (100,0000), Magento could take up to 40 minutes to re-index product catalogs. + * The `catalog:image:resize` command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6: * Remove `pub/media/catalog/product/cache` . (Removing this folder frees up space.) @@ -35,37 +37,47 @@ Performance-tuning enhancements focus on catalog indexing and include: * Run `bin/magento catalog:image:resize` to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.) + * The catalog rule re-indexing operation has been optimized, and the 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. + * The catalog price indexer is now scoped and multithreaded, which improves the performance of layered navigation, search, and indexing actions for Magento instances with multiple websites and stores. This makes it possible to parallelize catalog price indexing by websites and customer groups. To re-index in parallel mode, add the `MAGE_INDEXER_THREADS_COUNT` environment variable to `env.php`. + * The time required to load category or product pages for products that are configured with many attributes (more than 500) has been significantly reduced. Refactoring the logic for product attribute retrieval has resulted in a reduction of load time of almost 90% for scenarios with a large number of product attribute sets. (Performance will not noticeably improve for deployments with only one attribute set configured with 500 attributes. However, deployments with many attribute sets that contain only a few attributes will show significant performance improvement. For example, a deployment with 100 attribute sets, each of which contains 50 attributes, might see a 40-90% reduction in load time.) + * The time required to load a store’s home page has been reduced noticeably when the top menu contains many categories. (Load time is still affected by the number of categories and the structure of the top menu.) + * Merchants can now improve store performance by disabling Magento Report functionality. A new configuration setting (**System Configuration:** **General** > **Reports** > **General Options**) allows merchants to disable Magento Reports, which is recommended practice if a merchant's business function does not require this capability. #### **Improvements to the reliability and ease of the checkout process** + * A shopping cart’s contents remain constant even when the checkout page is repeatedly reloaded. Previously, if a customer reloaded the checkout page several times, Magento emptied the shopping cart, and the customer could not place the order. (This problem primarily affected stores running on HTTPS.) + * 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 checkout page affected information entered into form fields for a guest checkout. + * The speed at which Magento places an order is no longer affected by how many shipping methods are available. Previously, when a customer placed an order for which multiple shipping methods were available, Magento took more than 20 seconds to place the order. #### **Additional enhancements** + * 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 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. ### **Magento Cloud highlights** @@ -163,45 +175,59 @@ In addition to security enhancements, this release contains the following functi ### Installation, setup, and deployment + * You can now use the `app:config:status` command to check whether configuration propagation is up-to-date. (This fix restores this command, which was inadvertently deleted in a previous release.) *Fix submitted by Pieter Hoste in pull request [15174](https://github.com/magento/magento2/pull/15174)*. [GitHub-14104](https://github.com/magento/magento2/issues/14104) + * 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 Juan Alonso in pull request [12410](https://github.com/magento/magento2/pull/12410)*. [GitHub-11396](https://github.com/magento/magento2/issues/11396) + * Configuration backend models are now populated as expected with all fieldset data, which makes it possible to access all configured values from a current group. [GitHub-16712](https://github.com/magento/magento2/issues/16712) + * The `magento-deploy-ignore` setting in `composer.json` now works as expected. Previously, files specified in this setting were overwritten during deployment. + * The `timestamp` fields in `oauth_nonce` now include indexes to avoid deadlocks while erasing old records. *Fix submitted by Carlos Lizaga in pull request [13328](https://github.com/magento/magento2/pull/13328)*. [GitHub-10346](https://github.com/magento/magento2/issues/10346) + * Sorting has been disabled in the `glob` and `scandir` functions to improve performance. *Fix submitted by Leandro F. L. in pull request [16052](https://github.com/magento/magento2/pull/16052)*. + * The `nginx.config.sample` file no longer includes an option for PHP 5.x. (Magento 2.2.x is not compatible with PHP 5.x.) *Fix submitted by Sean Breeden in pull request [16883](https://github.com/magento/magento2/pull/16883)*. + * Autoloading performance has improved on production environments as a result of the reduction in `file_exists` calls. *Fix submitted by Pieter Hoste in pull request [16435](https://github.com/magento/magento2/pull/16435)*. + * Setting deploy mode to production mode by using the `--skip-compilation` flag no longer clears generated code in `generated/code/` and `generated/metadata/`. *Fix submitted by platformvaimo in pull request [16211](https://github.com/magento/magento2/pull/16211)*. + * We've made two changes to `Magento/Config` module: `Magento/Config/Test/Unit/Block/System/Config/Form/Field/ImageTest.php::testGetElementHtmlWithValue()` method no longer references a invalid backend model, and the anonymous function no longer has an unused `$data` in `Magento/Config/Model/Config/Importer.php`. *Fix submitted by Marcel Hauri in pull request [15511](https://github.com/magento/magento2/pull/15511)*. + * The upgrade check implemented during setup now indicates success if the latest version of Magento is already installed. Previously, the message indicated that the latest product version was already installed was presented as error. *Fix submitted by Daniel Ruf in pull request [15012](https://github.com/magento/magento2/pull/15012)*. + * The **Add Block Names to Hints** configuration setting has been renamed to **Add Block Class Type to Hints**. *Fix submitted by Chris Pook in pull request [14939](https://github.com/magento/magento2/pull/14939)*. + * The `cron:run` command now reads `cron/enabled` configuration setting and if this value is set to **1** (the default value), then the `cron:run` command will execute. A value of **0** determines that `cron:run` will not be executed, and prompts Magento to send the customer email indicating that `cron` is disabled. + * New command-line interface (CLI) commands support setting and showing indexer dimension modes: * `bin/magento indexer:set-dimensions-mode` sets indexer dimensions mode @@ -211,353 +237,465 @@ In addition to security enhancements, this release contains the following functi ### Amazon Pay + * Amazon Pay no longer appears as an option during checkout when a customer selects **Check Out with Multiple Addresses**. Previously, Magento displayed Amazon Pay as an option, even though Amazon Pay does not support multishipping. + * You can now change and save Amazon Pay configuration settings from **Configuration** > **Sales** > **Payment Methods** > **Amazon Pay** when deploying Magento in a Cloud environment. Previously, Magento did not save changed settings. ### B2B + * Company blocked warnings are no longer included in the source code. Previously, source code included these warning strings, which search indexers detected and treated as text. + * 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. + * In multisite environments, you can now save the address of a company that is allowed only on the non-primary website. Previously, if a merchant tried to save a company address from the default website, Magento displayed this error, `Invalid value of "UA" provided for the 'country_id' field`. + * 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 the correct product total price value on all websites in a B2B deployment. Previously, Magento did not apply cart price rules for product prices on non-primary websites, but instead displayed the product price assigned to products on the primary website to all websites. + * When **Website Restrictions** are set to **Private Sales: Login Only**, access to the storefront is now restricted to customers who log in, and merchants can still create new companies in the Admin. Previously, when a merchant tried to create a company when this setting was enabled, Magento threw this error, `Can not register new customer due to restrictions are enabled`. + * Configurable products can now be added to the requisition list directly from the Category page. + * The `beforeSave` method on Braintree `CountryCreditCard` class now has a statement that supports `app:config:import`. Previously, Magento threw an exception during import if it encountered an empty field in the Braintree configuration file. *Fix submitted by Mateusz Lerczak in pull request [14829](https://github.com/magento/magento2/pull/14829)*. + * 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. + * Company administrators can now use Quick Order to buy products. Previously, when a company administator tried to use Quick Order to buy products, Magento displayed this error: `The SKU was not found in the catalog`. + * You can now successfully search for products when the **Shared Catalog** setting is enabled. ### Bundle products + * Magento now successfully imports bundle products. Previously, bundle products were not visible in the product catalog, and were listed as out-of-stock on the storefront. + * The `Magento_Bundle` module name has been added to the relevant template files to meet Magento standard coding format. *Fix submitted by Namrata in pull request [15825](https://github.com/magento/magento2/pull/15825)*. + * The `option` variable has been renamed to `quoteItemOption` to improve code readability in `app/code/Magento/Bundle/Model/Product/Type.php`. *Fix submitted by Leandro F. L. in pull request [16143](https://github.com/magento/magento2/pull/16143)*. -* Magento now accurately displays the status of bundle product stock when **Add to Cart** is enabled for bundle products. Previously, bundle products with the **User Defined** field unchecked could not be back ordered as expected. -[GitHub-10061](https://github.com/magento/magento2/issues/10061) + +* Magento now accurately displays the status of bundle product stock when **Add to Cart** is enabled for bundle products. Previously, bundle products with the **User Defined** field unchecked could not be back ordered as expected. [GitHub-10061](https://github.com/magento/magento2/issues/10061) ### Catalog + * The breadcrumbs component no longer relies on the `mageMenu` widget. *Fix submitted by Vova Yatsyuk in pull request [15178](https://github.com/magento/magento2/pull/15178)*. [GitHub-14987](https://github.com/magento/magento2/issues/14987) + * The `data-container` class name is now based on view mode. *Fix submitted by sunilit42 in pull request [15350](https://github.com/magento/magento2/pull/15350)*. [GitHub-15319](https://github.com/magento/magento2/issues/15319) + * 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 in pull request [15347](https://github.com/magento/magento2/pull/15347)*. [GitHub-15037](https://github.com/magento/magento2/issues/15037) + * Disabling a product now removes it from the flat index as expected. *Fix submitted by Mr. Lewis in pull request [15019](https://github.com/magento/magento2/pull/15019)*. [GitHub-14966](https://github.com/magento/magento2/issues/14966) + * The success message that Magento displays when a customer adds a product to the compare list now contains a link to the comparison list. *Fix submitted by Andreas von Studnitz in pull request [13862](https://github.com/magento/magento2/pull/13862)*. + * Cache problems no longer occur when currencies are used without a currency symbol. *Fix submitted by Dmytro Cheshun in pull request [15902](https://github.com/magento/magento2/pull/15902)*. + * Catalog component blocks now contain correct return type suggestions, and typos have been corrected where needed in the PHPDocs. *Fix submitted by Dmytro Cheshun in pull request [15913](https://github.com/magento/magento2/pull/15913)*. + * Widget cache errors that resulted in one widget being loaded twice on the storefront have been resolved. *Fix submitted by Alexandr Kozyr in pull request [12764](https://github.com/magento/magento2/pull/12764)*. [GitHub-4389](https://github.com/magento/magento2/issues/4389) + * Magento no longer makes redundant requests on the 'customer data' on the checkout page. *Fix submitted by Andrey Bezyazychnyy in pull request [14314](https://github.com/magento/magento2/pull/14314)*. [GitHub-13765](https://github.com/magento/magento2/issues/13765) + * Administrators with permission to change product names on one website only cannot change product names on any other sites. Previously, an administrator with permission to change a product name on one site only could change product names on all websites in a multisite deployment. + * Administrators with limited privileges can now save products as expected. + * 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. + * Magento now reliably displays category images on the custom store view level. Previously, the category image on custom store view level alternately disappeared and appeared after every save operation. + * Magento no longer removes downloadable product links after an attribute is updated. + * Extra POST requests are no longer sent if the **Synchronize widget products with backend storage** option is set to **yes**. + * 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`. + * You can now use the `Magento\Catalog\Model\ProductRepository` class to assign a product to one website as expected. Previously, using this class to save a product assigned the product to all existing websites, not just the specified one. + * Images now load as expected on the product display page (PDP) when the image name contains double quotation marks. + * The SEO-friendly URL for the Category page now works as expected. + * The **Use Default Value** checkboxes in the design section of the category page are now enabled by default as expected. + * Customers can now use the **Add Product By SKU** button to add configurable products to a sales order. + * Empty dropdown or swatch type product attributes are no longer visible on the product page. + * Attributes that have empty values across all products being compared are not displayed as rows in the comparison table. Previously, Magento displayed these attributes with an N/A value on the Compare Products page. + * The Catalog page now displays breadcrumbs as expected. + * Tiered pricing and quantity increments now work as expected with decimal-based inventories. + * Magento now updates the `catalog_category_product_index` table as expected after a category is deleted. + * Customizable options are now configured the same for all websites to which a product is added. Previously, when a merchant added a product with customizable options to an additional site, the options were corrupted. + * The **Use default value** option is no longer unchecked unless the user overrides the value of the attribute in the store view scope. Previously, after creating an item, if the user changed to store view scope and did not make any modifications to the item's attributes and only clicked **Save**, most of the attributes that were set as **Use default value** became unchecked. + * Category product indexer logic has been optimized, and re-indexing time has been noticeably reduced.  Previously, when you had many categories (100,000), Magento could take up to 40 minutes to re-index product catalogs. + * Widget selection by Enabled Products no longer causes a fatal error on a storefront when the **Flat Product** is configured. + * Merchants can now change the `status` and `update` attributes from the product page. Previously, Magento returned a 404 page when bulk enabling or disabling products in the Admin with a restricted user role that is limited to a specific website. + * Magento now maintains the default setting for a product's `status` attribute when you create a new product. Previously, when creating a new product after changing the default option from Enabled to Disabled for this attribute, the status is incorrectly set to enabled by default. + * The print preview of product comparison results (that is, the page of results that Magento produces when you click **Compare** after selecting two or more products) now displays as expected. Previously, only a subset of page elements was displayed. + * Magento now maintains the correct dates in the results of filtering the Admin Product Grid Filter: Set Product as New from Date. [GitHub-11517](https://github.com/magento/magento2/issues/11517) + * 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. + * Merchants can now set custom option fixed prices with negative values in the Admin. [GitHub-7333](https://github.com/magento/magento2/issues/7333) + * You can now unset a category image on the store-view level when the image is defined on all store views. + * The Catalog Products List widget can now display products on the storefront that have specific attributes. + * The shopping cart now correctly displays images of configurable products that have only size options (that is, no color options). Previously, when a customer added a configurable product that had only size options to her shopping cart, the shopping cart did not display the expected product image. *Fix submitted by Ronak Patel in pull request [16863](https://github.com/magento/magento2/pull/16863)*. [GitHub-16843](https://github.com/magento/magento2/issues/16843) + * 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. + * Magento now successfully displays product prices in currencies without minor units if the price amount is less then the number group size. [GitHub-11711](https://github.com/magento/magento2/issues/11711) + * Magento now displays the correct price on the product page for storefronts running Japanese locales. *Fix submitted by Vishal Gelani in pull request [15909](https://github.com/magento/magento2/pull/15909)*. [GitHub-11711](https://github.com/magento/magento2/issues/11711) + * Magento now correctly saves the value of a product's custom options. Previously, Magento saved all objects by using the same value object for all values. *Fix submitted by Jeroen Van Leusden in pull request [13569](https://github.com/magento/magento2/pull/13569)*. [GitHub-5067](https://github.com/magento/magento2/issues/5067) + * Magento now displays the product name as browser title as expected. Previously, the meta title tag was missing, which prevented Magento from displaying the product name. *Fix submitted by Riccardo Tempesta in pull request [15532](https://github.com/magento/magento2/pull/15532)*. [GitHub-15501](https://github.com/magento/magento2/issues/15501) + * Magento now maintains the default products sort order of “newest first” when you upgrade your Magento deployment to 2.2.4. Previously, after upgrade, the default products order in categories changed from “newest first” to “oldest first”. *Fix submitted by Danny Verkade in pull request [15629](https://github.com/magento/magento2/pull/15629)*. [GitHub-15627](https://github.com/magento/magento2/issues/15627) + * Links on product pages are now linkable as expected. Previously, when Magento displayed a product page, none of the provided links were clickable. *Fix submitted by simonjanguapa in pull request [15687](https://github.com/magento/magento2/pull/15687)*. [GitHub-15393](https://github.com/magento/magento2/issues/15393) + * Deprecated methods in Message Manager have been replaced with valid methods. *Fix submitted by Tiago Sampaio in pull request [16924](https://github.com/magento/magento2/pull/16924)*. + * Array short syntax usage has been standardized in these files: `app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php`, `app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php`, and `setup/src/Magento/Setup/Module/Di/Code/Reader/FileScanner.php`. *Fix submitted by Leandro F. L. in pull request [16880](https://github.com/magento/magento2/pull/16880)*. + * The error message that Magento displayed when a duplicate error key occurred during product import has been improved. *Fix submitted by Vishal Gelani in pull request [16389](https://github.com/magento/magento2/pull/16389)*. + * We've removed the direct use of the object manager when saving Admin attribute sets. *Fix submitted by AnshuMishra17 in pull request [16217](https://github.com/magento/magento2/pull/16217)*. + * Breadcrumb JSON configuration has been moved to the view model and serialized using the Magento JSON serializer. *Fix submitted by Diederick Bruin in pull request [15521](https://github.com/magento/magento2/pull/15521)*. + * `row_id` has been added to the flat action indexer, ensuring that index values are not set to `0` for new products when using index on save. Previously, if you used `\Magento\Framework\Api\SearchCriteriaBuilder`, and the flat `product row_id` is set to `0`, Magento did not show the product in the `getList` of the `ProductRepository`. *Fix submitted by Mr. Lewis in pull request [15010](https://github.com/magento/magento2/pull/15010)*. + * Magento no longer inserts redundant links to the homepage into breadcrumbs on the product page. *Fix submitted by Vova Yatsyuk in pull request [14994](https://github.com/magento/magento2/pull/14994)*. + * Magento now correctly displays product information for products that have a negative price as a custom option. *Fix submitted by Danny Verkade in pull request [15202](https://github.com/magento/magento2/pull/15202)*. + * Product names can now contain a double quotation mark character (`"`). Previously, when a product name contained this character, Magento threw a JavaScript error. *Fix submitted by Vova Yatsyuk in pull request [15162](https://github.com/magento/magento2/pull/15162)*. + * 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 Neos2007 in pull request [14886](https://github.com/magento/magento2/pull/14886)*. + * Magento now updates product options and quantity by checking the item ID when updating a cart that contains configurable products with different options. *Fix submitted by Nitin Khalasi in pull request [14765](https://github.com/magento/magento2/pull/14765)*. + * Product meta descriptions no longer contain unnecessary HTML tags. *Fix submitted by David Windell in pull request [14538](https://github.com/magento/magento2/pull/14538)*. + * Attributes that have empty values across all products being compared are not displayed on the Compare Products page as rows in the comparison table. Previously, these attributes were displayed with a value of **N/A**. + * Magento now maintains the correct dates in the results of filtering the Admin Product Grid Filter: Set Product as New from Date. [GitHub-11517](https://github.com/magento/magento2/issues/11517) + * Company Admin can now use Quick Order to buy products. Previously, when a company administator tried to use Quick Order to buy products, Magento displayed this error: `The SKU was not found in the catalog`. ### 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. + * The `\Magento\Captcha\Observer\CaptchaStringResolver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16065](https://github.com/magento/magento2/pull/16065)*. [GitHub-14966](https://github.com/magento/magento2/issues/14966) + * The `CheckRegisterCheckoutObserver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16160](https://github.com/magento/magento2/pull/16160)*. + * The `\Magento\Captcha\Observer\CheckGuestCheckoutObserver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16680](https://github.com/magento/magento2/pull/16680)*. + * Autocomplete for CAPTCHA inputs has been disabled. *Fix submitted by Denis Belevtsov in pull request [17114](https://github.com/magento/magento2/pull/17114)*. + * Integration tests now check that customer login attempts are removed after a successful login or account details edit. *Fix submitted by Yaroslav Rogoza in pull request [16306](https://github.com/magento/magento2/pull/16306)*. + * Integration tests now check that administrator login attempts are removed after a successful login or account details edit. *Fix submitted by Yaroslav Rogoza in pull request [16300](https://github.com/magento/magento2/pull/16300)*. + * The `CheckGuestCheckoutObserver` class is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [16680](https://github.com/magento/magento2/pull/16680)*. ### Cart and checkout + * 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-wagento in pull request [16379](https://github.com/magento/magento2/pull/16379)*. [GitHub-16378](https://github.com/magento/magento2/issues/16378) + * The dropdown toggle icon on the shopping cart now works as expected. Previously, the arrow did not change direction as expected when you toggled the Discount or Tax options. *Fix submitted by Karla Saaremäe in pull request [15991](https://github.com/magento/magento2/pull/15991)*. + * The shopping cart icon on the checkout page on mobile screens now displays hover color and regular color as expected. *Fix submitted by Karla Saaremäe in pull request [16002](https://github.com/magento/magento2/pull/16002)*. + * Customers are not unexpectedly logged out if the customers hits the F5 key twice during checkout. *Fix submitted by adrian-martinez-interactiv4 in pull request [14428](https://github.com/magento/magento2/pull/14428)*. [GitHub-4301](https://github.com/magento/magento2/issues/4301), [GitHub-12362](https://github.com/magento/magento2/issues/12362), [GitHub-13427](https://github.com/magento/magento2/issues/13427) + * The **Purchased Order Form** button is now correctly aligned. *Fix submitted by Neeta Kangiya in pull request [15331](https://github.com/magento/magento2/pull/15331)*. [GitHub-15334](https://github.com/magento/magento2/issues/15334) + * The **Purchased Order Form** button is now visible. *Fix submitted by hitesh-wagento in pull request [15372](https://github.com/magento/magento2/pull/15372)*. [GitHub-15334](https://github.com/magento/magento2/issues/15334) + * Magento no longer displays duplicate element IDs on the Checkout page. *Fix submitted by Julien ANQUETIL in pull request [15585](https://github.com/magento/magento2/pull/15585)*. [GitHub-13415](https://github.com/magento/magento2/issues/13415) + * During the payment step of checkout, a customer can now successfully deselect the **Billing save-in address book** checkbox in a selected payment method other than the default method. *Fix submitted by Rakesh Gangani in pull request [15344](https://github.com/magento/magento2/pull/15344)*. [GitHub-13692](https://github.com/magento/magento2/issues/13692) + * The `.block-minicart` element on the mini cart dropdown menu no longer has an empty class. *Fix submitted by Karla Saaremäe in pull request [14715](https://github.com/magento/magento2/pull/14715)*. [GitHub-14669](https://github.com/magento/magento2/issues/14669) + * Customers can now add configurable products to their shopping cart when Magento is running on Internet Explorer 11.x. + * The free shipping cart price rule now works as expected when the UPS shipping method is enabled. Previously, UPS Ground shipping method was not available for free shipping at checkout when the UPS shipping method was enabled. + * Cart price rule condition values now handle commas as expected. + * Free shipping coupons now work as expected with Table Rates shipping. Previously, Magento displayed this message when a customer tried to use a free shipping coupon: `Sorry, no quotes are available for this order`. [GitHub-8172](https://github.com/magento/magento2/issues/8172) + * Magento now displays correct store view prices for cases when a merchant uses a CSV file to add products by SKU from the Admin. + * A merchant can successfully use SKU values that contain capital letters to add a product to a cart from the Admin. + * 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 checkout out page affected information entered into form fields for a guest checkout. + * The speed at which Magento places an order is no longer affected by how many shipping methods are available. Previously, when a customer placed an order for which multiple shipping methods were available, Magento took more than 20 seconds to place the order. + * Magento now maintains browser history as expected when a user navigates from the checkout contact information page to the checkout payment information page. Previously, when a user tried to retrace her steps after landing on the payment information page, Magento did not return them to the checkout contact information page, but instead landed on a product page. + * Magento now displays a message when a gift card card is removed during checkout. + * Guest orders placed with gift cards can now be canceled. + * A shopping cart’s contents remains constant even when the Checkout page is repeatedly reloaded. Previously, if a customer reloaded the checkout page several times, Magento emptied the shopping cart and the customer could not place the order. (This problem primarily affected stores running on HTTPS.) + * The message that Magento displays when a customer has successfully added a product to his shopping cart now contains a link to the cart. *Fix submitted by Andreas von Studnitz in pull request [13904](https://github.com/magento/magento2/pull/13904)*. + * The Update button now behaves the same whether product quantity is manually edited or changed by JavaScript. *Fix submitted by Valerij Ivashchenko in pull request [14935](https://github.com/magento/magento2/pull/14935)*. + * Magento no longer displays the infinite checkout loader when a module that is loading makes a `require` call, but the dependency is not returned (typically due to network error). *Fix submitted by Vova Yatsyuk in pull request [14874](https://github.com/magento/magento2/pull/14874)*. + * The minicart quantity label no longer has a fixed length. *Fix submitted by Karla Saaremäe in pull request [14716](https://github.com/magento/magento2/pull/14716)*. + * Double-clicking on the **Proceed to checkout** button from the minicart no longer returns an empty shopping cart. ### Cleanup @@ -567,330 +705,435 @@ Our community contributors have made many helpful, minor corrections to spelling #### Spelling corrections + * Corrected misspelling of `formatedPrice` throughout the code base. *Fix submitted by Arnoud Beekman in pull request [16726](https://github.com/magento/magento2/pull/16726)*. + * Corrected return message from `ProductRuleTest.php`. *Fix submitted by Namrata in pull request [16721](https://github.com/magento/magento2/pull/16721)*. + * Replaced the `proccessAdditionalValidation` method with `processAdditionalValidation`. *Fix submitted by Tiago Sampaio in pull request [16414](https://github.com/magento/magento2/pull/16414)*. + * Corrected misspelling in `SynonymGroupRepositoryInterface`. *Fix submitted by AnshuMishra17 in pull request [16711](https://github.com/magento/magento2/pull/16711)*. + * Corrected misspelling in library file. *Fix submitted by Namrata in pull request [16495](https://github.com/magento/magento2/pull/16495)*. + * Corrected punctuation in the message displayed on **CONTENT** > **Design** > **Configuration**. *Fix submitted by Erik Hansen in pull request [16489](https://github.com/magento/magento2/pull/16489)*. + * Correct misspellings in Model and library files. *Fix submitted by Namarata in pull request [16230](https://github.com/magento/magento2/pull/16230)*. + * Corrected misspelling in `_exportAddressses` method name. *Fix submitted by Marcel Hauri in pull request [15275](https://github.com/magento/magento2/pull/15275)*. + * Corrected misspelling in comments for `addTaxPercents()` in `app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php`. *Fix submitted by AnshuMishra17 in pull request [15431](https://github.com/magento/magento2/pull/15431)*. + * Corrected misspelling in `abstract.js`. *Fix submitted by VitaliyBoyko in pull request [15411](https://github.com/magento/magento2/pull/15411)*. + * Corrected misspellings in `app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/AbstractSidebar.php`, `app/code/Magento/Ui/view/base/web/js/form/components/fieldset.js`, `app/code/Magento/Ui/view/base/web/js/form/components/group.js`, `setup/pub/angular-sanitize/angular-sanitize.js`, and `setup/pub/angular-sanitize/angular-sanitize.min.js.map`. *Fix submitted by Danny Verkade in pull request [15715](https://github.com/magento/magento2/pull/15715)*. + * Corrected misspelling in `app/code/Magento/Catalog/Model/Product/Type/AbstractType.php`. *Fix submitted by Saurabh Parekh in pull request [15519](https://github.com/magento/magento2/pull/15519)*. + * Corrected misspellings in Multishipping and User modules. *Fix submitted by Anna Völkl in pull request [15513](https://github.com/magento/magento2/pull/15513)*. + * Corrected a misspelling in function comment in `app/code/Magento/Paypal/Model/Api/Nvp.php` *Fix submitted by Namrata in pull request [15302](https://github.com/magento/magento2/pull/15302)*. + * Corrected misspellings in PHPDocs and comments. *Fix submitted by Dmytro Cheshun in pull request [15293](https://github.com/magento/magento2/pull/15293)*. + * Corrected typo in method name `_getCharg[e]ableOptionPrice`. *Fix submitted by Marcel Hauri in pull request [15276](https://github.com/magento/magento2/pull/15276)*. + * Corrected typo in database column comment in `app/code/Magento/Catalog/Setup/InstallSchema.php`. *Fix submitted by VitaliyBoyko in pull request [15291](https://github.com/magento/magento2/pull/15291)*. + * Corrected misspelling in the name of private method `\Magento\Catalog\Console\Command\ImagesResizeCommand::getUniq[ue]ImageIndex`. *Fix submitted by Marcel Hauri in pull request [15282](https://github.com/magento/magento2/pull/15282)*. + * Corrected typo in the `\Magento\Framework\Image::open` exception message. *Fix submitted by Tom Richards in pull request [15269](https://github.com/magento/magento2/pull/15269)*. + * Corrected misspelling in `ResourceModel\Coupon.php:updateSpecificCoupons`. *Fix submitted by Stephen Biston in pull request [14891](https://github.com/magento/magento2/pull/14891)*. + * Corrected typo in the name of the `\Magento\Framework\App\Request\Http::removeRepitedSlashes` method. *Fix submitted by Igor Tripolskiy in pull request [15256](https://github.com/magento/magento2/pull/15256)*. + * Corrected misspelling in `app/code/Magento/CatalogSearch/Block/Advanced/Form.php`. *Fix submitted by Jeevan M R in pull request [15053](https://github.com/magento/magento2/pull/15053)*. + * Corrected misspelling in `.less` files. *Fix submitted by Kalpesh Mehta in pull request [15023](https://github.com/magento/magento2/pull/15023)*. + * Removed double occurrence of 'it' from sentences and corrected minor grammar error. *Fix submitted by Namrata in pull request [16240](https://github.com/magento/magento2/pull/16240)*. + * Fixed typo in `app/code/Magento/Checkout/etc/webapi.xml`. *Fix submitted by Markus Haack in pull request [15845](https://github.com/magento/magento2/pull/15845)*. + * Corrected misspelling in `file-uploader.js` and `storage-manager.js`. *Fix submitted by Saurabh Parekh in pull request [15888](https://github.com/magento/magento2/pull/15888)*. + * Corrected misspelling in `scripts.js`. *Fix submitted by Ledian Hymetllari in pull request [15878](https://github.com/magento/magento2/pull/15907)*. + * Corrected grammar error in the "What is this" tooltip for the Braintree vault tool tip. *Fix submitted by kreativedev in pull request [17151](https://github.com/magento/magento2/pull/17151)*. + * Renamed `_requesetd` to `_requested` in `app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js`. *Fix submitted by Valerij Ivashchenko in pull request [16971](https://github.com/magento/magento2/pull/16971)*. + * Removed double occurrences of words from `Magento_Catalog`, `Magento_Customer`, `Magento_Downloadable`, `Magento_Sales`, and `lib` and `dev` test function comments. *Fix submitted by Pratik Oza in pull request [16977](https://github.com/magento/magento2/pull/16977)*. + * Correct misspelling in method name and result in these files: `dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php` and `dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertCityBasedShippingRateChanged.php`. *Fix submitted by Dmytro Cheshun in pull request [15297](https://github.com/magento/magento2/pull/15297)*. #### Minor corrections to code and code formatting + * Removed extra spaces from `Magento/Ui`. *Fix submitted by Ronak Patel in pull request [16872](https://github.com/magento/magento2/pull/16872)*. + * Improved code formatting. *Fix submitted by Pratik Oza in pull request [16821](https://github.com/magento/magento2/pull/16821)*. + * Removed comments and unnecessary spaces. *Fix submitted by Ronak Patel in pull request [16748](https://github.com/magento/magento2/pull/16748)*. + * Removed space before ending sentence throughout code base. *Fix submitted by Namrata in pull request [16717](https://github.com/magento/magento2/pull/16717)*. + * Removed unnecessary spaces in `app/code/Magento/Catalog/Pricing/Price/ConfiguredRegularPrice.php`. *Fix submitted by Ronak Patel in pull request [15129](https://github.com/magento/magento2/pull/15129)*. + * Removed double occurrences of words from the lib and dev test function comments and from these modules: `Magento_Catalog`, `Magento_Customer`, `Magento_Downloadable`, and `Magento_Sales`. *Fix submitted by Namrata in pull request [16644](https://github.com/magento/magento2/pull/16644)*. + * Removed double occurrences from `jQuery`, Angular JS files and the `Magento_Setup` module's scan function's comment. *Fix submitted by Namrata in pull request [16581](https://github.com/magento/magento2/pull/16581)*. + * Removed extra space from the value of the `is_required` XML node in `SynonymGroup.xml`. *Fix submitted by Namrata in pull request [16557](https://github.com/magento/magento2/pull/16557)*. + * Minor corrections to code throughout the code base. *Fix submitted by GraysonChiang in pull request [16841](https://github.com/magento/magento2/pull/16841)*. + * Removed unused data from `app/code/Magento/Ui/Model/Export/ConvertToCsv.php` and `app/code/Magento/Ui/Model/Export/ConvertToXml.php`. *Fix submitted by Vishal Gelani in pull request [16524](https://github.com/magento/magento2/pull/16524)*. + * Removed unnecessary translations for label and comment tags and added missing translation strings. *Fix submitted by Yogesh Suhagiya in pull request [16090](https://github.com/magento/magento2/pull/16090)*. + * Removed redundant plug-in information (`dev:di:info`). *Fix submitted by Alexander Shkurko in pull request [16474](https://github.com/magento/magento2/pull/16474)*. + * Removed redundant semicolon from these files: `app/code/Magento/Tax/Model/Sales/Total/Quote/CommonTaxCollector.phpMagento/Multishipping/Test/Unit/Block/Checkout/SuccessTest.php` and `app/code/Magento/Tax/Model/Sales/Total/Quote/CommonTaxCollector.php`. *Fix submitted by Saurabh Parekh in pull request [15594](https://github.com/magento/magento2/pull/15594)*. + * Corrected errors in method description in `app/code/Magento/Config/Block/System/Config/Form.php`, `app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php`, and `app/code/Magento/Customer/Model/Session.php`. *Fix submitted by Vishal Gelani in pull request [15549](https://github.com/magento/magento2/pull/15549)*. + * Removed extra space and formatted the code in `app/code/Magento/Captcha/i18n/en_US.csv`. *Fix submitted by Saurabh Parekh in pull request [15552](https://github.com/magento/magento2/pull/15552)*. + * Removed the redundant `else` statement in `app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php`. *Fix submitted by Yaroslav Rogoza in pull request [15435](https://github.com/magento/magento2/pull/15435)*. + * Fixed misplaced bracket in `Option/Type/Text.php`. *Fix submitted by Valerij Ivashchenko in pull request [16566](https://github.com/magento/magento2/pull/16566)*. + * Removed a duplicate line and added comment in `app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php`. *Fix submitted by Vishal Gelani in pull request [15362](https://github.com/magento/magento2/pull/15362)*. + * Removed unused variable in `lib/web/css/source/lib/variables/_typography.less`. *Fix submitted by VitaliyBoyko in pull request [15386](https://github.com/magento/magento2/pull/15386)*. + * Corrected variable names in `LockAdminUserWhenEditingIntegrationTest` and `AssertCityBasedShippingRateChanged`, among others. *Fix submitted by Dmytro Cheshun in pull request [15294](https://github.com/magento/magento2/pull/15294)*. + * Corrected property name in `dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Backend/ControllerAclTest.php`. *Fix submitted by Dmytro Cheshun in pull request [15292](https://github.com/magento/magento2/pull/15292)*. + * Removed non-existing argument from the constructor's comment block in `app/code/Magento/Translation/Block/Html/Head/Config.php` and added space where needed in `app/code/Magento/Translation/Model/Json/PreProcessor.php`. *Fix submitted by Yogesh Suhagiya in pull request [15249](https://github.com/magento/magento2/pull/15249)*. + * Removed redundant close tag from `app/code/Magento/Review/view/frontend/templates/view.phtml`. *Fix submitted by Yogesh Suhagiya in pull request [14928](https://github.com/magento/magento2/pull/14928)*. + * Removed extra spaces from a key-value pair in the `en_US.csv`language file. *Fix submitted by Yogesh Suhagiya in pull request [14896](https://github.com/magento/magento2/pull/14896)*. + * Cleaned up `foreach` and `break` statements in `app/code/Magento/Rule/Model/Condition/AbstractCondition.php`. *Fix submitted by Thomas Klein in pull request [14609](https://github.com/magento/magento2/pull/14609)*. + * Corrected grammar in `README.md`. *Fix submitted by Stanislav Idolov in pull request [14844](https://github.com/magento/magento2/pull/14844)*. + * Corrected type hints in `Webapi/Controller/Soap/Request/Handler.php` and `Webapi/Model/Plugin/GuestAuthorization.php`. Also corrected case in property annotation in `Soap\Server.php` and added undefined property `_appState` in `Controller\Soap.php`. *Fix submitted by Prince Patel in pull request [16626](https://github.com/magento/magento2/pull/16626)*. + * Corrected `Magento\Webapi\Model\Soap\Fault::toXml()` method invocation in `Soap\FaultTest.php`. *Fix submitted by Prince Patel in pull request [16626](https://github.com/magento/magento2/pull/16626)*. + * We've removed an unused class from the `lib/_forms.less` file. *Fix submitted by Chirag Matholiya in pull request [15791](https://github.com/magento/magento2/pull/15791)*. + * We've removed unnecessary CSS code from `_actions-toolbar.less`. *Fix submitted by Chirag Matholiya in pull request [15789](https://github.com/magento/magento2/pull/15789)*. + * We've removed the unnecessary double semicolon from the style sheets. *Fix submitted by Namrata in pull request [15795](https://github.com/magento/magento2/pull/15795)*. + * We've removed the unused code from `docs.less`. *Fix submitted by Daniel Ruf in pull request [15871](https://github.com/magento/magento2/pull/15871)*. + * Removed extraneous negative margin on product list and product list items. *Fix submitted by Steven de Jong in pull request [15936](https://github.com/magento/magento2/pull/15936)*. [GitHub-15308](https://github.com/magento/magento2/issues/15308) + * Indentation issues with LESS files have been resolved. *Fix submitted by hitesh-wagento in pull request [15811](https://github.com/magento/magento2/pull/15811)*. + * The syntax for before-after operators in LESS files has been corrected. *Fix submitted by Namrata in pull request [16181](https://github.com/magento/magento2/pull/16181)*. + * Redundant keywords have been removed from miscellaneous files. *Fix submitted by Namrata in pull request [16182](https://github.com/magento/magento2/pull/16182)*. + * We've corrected misspellings in the comment section of `OrderFixture.php`. *Fix submitted by Namrata in pull request [16183](https://github.com/magento/magento2/pull/16183)*. + * Unnecessary leading and trailing spaces have been removed from the customer account login page email field. *Fix submitted by Piyush Dankhara in pull request [15365](https://github.com/magento/magento2/pull/15365)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Unnecessary leading and trailing spaces have been removed from fields in the customer account create and login forms. *Fix submitted by Piyush Dankhara in pull request [16192](https://github.com/magento/magento2/pull/16192)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Unnecessary leading and trailing spaces have been removed from fields in newsletter, forgot password, checkout login and email to a friend forms. *Fix submitted by Piyush Dankhara in pull request [16564](https://github.com/magento/magento2/pull/16564)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Unnecessary leading and trailing spaces have been removed from fields in the customer confirmation form. *Fix submitted by Vishal Gelani in pull request [16595](https://github.com/magento/magento2/pull/16595)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Removed unnecessary commented code from these files: `app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php`, `app/code/Magento/Sales/Model/Order/Creditmemo.php`, `lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php`, and `lib/internal/Magento/Framework/Model/ResourceModel/Db/Relation/ActionPool.php`. *Fix submitted by Pratik Oza in pull request [17077](https://github.com/magento/magento2/pull/17077)*. + * Removed unnecessary spaces from the price value in `app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml`. *Fix submitted by Valerij Ivashchenko in pull request [17027](https://github.com/magento/magento2/pull/17027)*. + * Remove unused comments from `_initDiscount()` function. *Fix submitted by Prince Patel in pull request [17002](https://github.com/magento/magento2/pull/17002)*. + * Corrected misspellings in multiple files, including `app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Tree/Attribute.php`, `app/code/Magento/Catalog/view/adminhtml/web/js/product/weight-handler.js`, `app/code/Magento/Signifyd/Test/Unit/Controller/Webhooks/HandlerTest.php`, `app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js`, and `dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetCmsPageLink.php`. *Fix submitted by Pratik Oza in pull request [16980](https://github.com/magento/magento2/pull/16980)*. + * Corrected formatting of the JavaScript code in the `app/code/Magento/Ui/view/base/templates/control/button/split.phtml` and `app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.jstemplate` files. *Fix submitted by Yogesh Suhagiya in pull request [14967](https://github.com/magento/magento2/pull/14967)*. + * Removed redundant `@throws` hinting and unused import for `AdvancedPricingImportExport` module classes. *Fix submitted by Dmytro Cheshun in pull request [15872](https://github.com/magento/magento2/pull/15872)*. + * Added missing PHPDoc to methods throughout the code base. *Fix submitted by Leandro F. L. in pull request [16215](https://github.com/magento/magento2/pull/16215)*. + * Fixed mismatches in case between class and method name spellings. *Fix submitted by Leandro F. L. in pull request [16141](https://github.com/magento/magento2/pull/16141)*. + * Removed an unnecessary comma from the `translate` attribute in `app/code/Magento/Sales/etc/adminhtml/system.xml`. *Fix submitted by Dmytro Cheshun in pull request [15615](https://github.com/magento/magento2/pull/15615)*. ### CMS content + * Page layout issues that resulted from incorrect module sequence have been corrected. Previously, the `Magento_theme` module was loaded too late, which resulted in unexpected display issues. + * Corrected use statements and return values in `AggregationInterface`. *Fix submitted by Yaroslav Rogoza in pull request [14893](https://github.com/magento/magento2/pull/14893)*. ### Configurable products + * Customers can now successfully complete checkout when their order contains a configurable product with a configurable option. Previously, customers could not check out when there is a configurable product in the cart with a configurable option, which is now deleted, shopping cart could not be loaded. *Fix submitted by jonshipman in pull request [15468](https://github.com/magento/magento2/pull/15468)*. [GitHub-15467](https://github.com/magento/magento2/issues/15467) + * Magento now displays the manufacturer attribute on the Admin on the Catalog page for configurable products. Previously, Magento displayed these attributes on the simple products catalog page, but not on the configurable products catalog page. + * Configurable products are now sorted by only visible prices as expected. Previously, sorting a catalog by price resulted in sort results that included the prices of out-of-stock products and disabled child products. + * When two simple products of a configurable product have different prices, Magento now uses the lowest price as the default price on the product detail page. Previously, if one of the simple products had price=0, Magento did not use it as the default. *Fix submitted by Torrey Tsui in pull request [16540](https://github.com/magento/magento2/pull/16540)*. + * The missing check for a `false` value has been added to `ConfiguredRegularPrice`. Previously, when the parent method returned false, Magento threw this fatal error: `NOTICE: PHP message: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Catalog\Pricing\Price\ConfiguredOptions::getItemOptionsValue() must be of the type float, boolean given, called in /app/vendor/magento/module-catalog/Pricing/Price/ConfiguredRegularPrice.php on line 74 and defined in /app/vendor/magento/module-catalog/Pricing/Price/ConfiguredOptions.php:24`. *Fix submitted by Tibor Kotosz in pull request [15129](https://github.com/magento/magento2/pull/15129)*. + * Fixed the DocBlock for `hasInvoices()`, `hasShipments()`, and `hasCreditmemos()` in `app/code/Magento/Sales/Model/Order.php`. *Fix submitted by Lyzun Oleksandr in pull request [16554](https://github.com/magento/magento2/pull/16554)*. + * Fixed type hints and docs for the Downloadable Samples block. *Fix submitted by Björn Kraus in pull request [16408](https://github.com/magento/magento2/pull/16408)*. ### Cookies + * Magento now responds to a customer accepting a cookie notice by simply hiding the notice. Previously, Magento reloaded the entire site when a user accepted the cookie notice. *Fix submitted by Torben Höhn in pull request [16890](https://github.com/magento/magento2/pull/16890)*. ### Customer account + * Magento no longer logs out a customer after a successful password change. + * Magento no longer displays the State/Province instead of the State field on U.S. customer address forms. + * Customer attributes are now correctly validated on the Admin Order form. Previously, Magento validated attributes\length after an order has been submitted, but not on the Admin Order form. + * Customers no longer lose their session when they switch stores on different domains. + * Non-U.S. and non-Canadian addresses that are displayed in the **Address Book summary** field now display the State/Province values as expected if that information was provided. + * The checkout page no longer displays custom address attributes when **Show on frontend** is set to **no**. + * Magento now displays the default value for a new Customer attribute that is created from the Admin. Previously, Magento set this value to **no** by default. + * Administrators can see all customers when the **Share Customer Accounts** value is set to Global. + * User login email validation no longer fails if the field contains a leading or trailing space on Internet Explorer 11.x. *Fix submitted by Piyush Dankhara in pull request [15365](https://github.com/magento/magento2/pull/15365)*. [GitHub-6058](https://github.com/magento/magento2/issues/6058) + * Customer accounts are now unlocked as expected after a password reset. *Fix submitted by Andrea Gaspardo in pull request [15255](https://github.com/magento/magento2/pull/15255)*. [GitHub-15534](https://github.com/magento/magento2/issues/15534) + * Magento no longer changes the format of Date of Birth information when this field is enabled on the Create New Customer Account page, and an existing customer tries to re-register. *Fix submitted by KaushikChavda in pull request [15272](https://github.com/magento/magento2/pull/15272)*. + * When saving a customer group, Magento now copies extension attributes to the new data model that is returned. Previously, this action was not completed, and Magento behaved unpredictably. *Fix submitted by Joseph Maxwell in pull request [16254](https://github.com/magento/magento2/pull/16254)*. + * The `customer.account.dashboard.info.extra` block has been moved to contact information from the newsletter section in `app/code/Magento/Customer/view/frontend/templates/account/dashboard/info.phtml`. *Fix submitted by JeroenVanLeusden in pull request [14923](https://github.com/magento/magento2/pull/14923)*. ### Directory + * You can now configure different Allowed Countries for default and store scopes. *Fix submitted by Oleksandr Kravchuk in pull request [16693](https://github.com/magento/magento2/pull/16693)*. ### dotmailer @@ -906,43 +1149,55 @@ Our community contributors have made many helpful, minor corrections to spelling * Unexpected errors during subscriber or customer creation no longer occur. + * A merchant can now successfully create a new user and displays the appropriate welcome message. Previously, Magento threw an error during the creation of a customer or subscriber, although the new user/subscriber was created. ### EAV + * Magento now displays the fixed product tax attribute label as expected according to the specified store view. + * Magento now correctly renders multiselect product attributes with a custom source model in `adminhtml`. Previously, the selected value was saved the first time in the `catalog_product_entity_varchar` table, and the attribute was added to the `eav_attribute` table, but the selected options were not highlighted against the attribute. ### Frameworks + * `@api` annotation has been added to the `magento/framework` component of the Filter Group and Sort Order classes. *Fix submitted by Ronak Patel in pull request [16845](https://github.com/magento/magento2/pull/16845)*. + * `app/code/Magento/Theme/etc/di.xml` now uses `Translate` instead of `TranslateInterface`. *Fix submitted by Wouter Samaey in pull request [17124](https://github.com/magento/magento2/pull/17124)*. + * Classes with methods that contain variadic arguments can be also used in proxy classes. *Fix submitted by Vishal Gelani in pull request [16080](https://github.com/magento/magento2/pull/16080)*. + * The annotation in `_toOptionArray - lib\internal\Magento\Framework\Data\SearchResultProcessor.php` has been corrected. *Fix submitted by Namrata in pull request [15892](https://github.com/magento/magento2/pull/15892)*. + * Scheduled XML sitemap generation now works as expected. Previously, you could schedule sitemap generation (**Admin** > **Store** > **Configuration** > **Catalog** > **XML sitemap**), but Magento would not generate the sitemap. *Fix submitted by James Halsall in pull request [14822](https://github.com/magento/magento2/pull/14822)*. [GitHub-5768](https://github.com/magento/magento2/issues/5768) + * 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 Rodrigo Mourão in pull request [14800](https://github.com/magento/magento2/pull/14800)*. [GitHub-5726](https://github.com/magento/magento2/issues/5726) + * The `trigger_recollect` quote attribute no longer causes a time out. *Fix submitted by Philipp Sander in pull request [14719](https://github.com/magento/magento2/pull/14719)*. [GitHub-9580](https://github.com/magento/magento2/issues/9580) + * `Framework\Math\Random` now uses PHP 7.x features, including `random_bytes` and `random_int`. + * The `catalog:image:resize` command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6: * Remove `pub/media/catalog/product/cache`. (Removing this folder frees up space.) @@ -950,388 +1205,507 @@ Our community contributors have made many helpful, minor corrections to spelling * Run `bin/magento catalog:image:resize` to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.) + * We've fixed a display error that occurred when both a Critical Admin Notification and Release Notification window were opened. + * Changes that were made to file permissions for `lib/internal/Magento/Framework/View/Asset/Merged.php` and its associated test that were made in an earlier release have been reverted. *Fix submitted by Ihor Sviziev in pull request [16937](https://github.com/magento/magento2/pull/16937)*. + * The constructor in `Magento\Webapi\Model\Soap\Fault.php` now assigns `$exception->getOriginator()` to `_soapFaultCode` instead of to the dynamical property `_soapCode`. *Fix submitted by Marcel Hauri in pull request [15515](https://github.com/magento/magento2/pull/15515)*. + * Corrected annotation in `_toOptionArray` in `lib/internal/Magento/Framework/Data/Collection/AbstractDb.php`. *Fix submitted by Sanjay Patel in pull request [15336](https://github.com/magento/magento2/pull/15336)*. + * The invoice table now displays the correct shipping and handling for a partial items invoice. *Fix submitted by Ankur Raiyani in pull request [14795](https://github.com/magento/magento2/pull/14795)*. + * The return values from the `usort` and `value_compare_func` function now matches the PHP documentation for these functions. *Fix submitted by luke-denton-aligent in pull request [14726](https://github.com/magento/magento2/pull/14726)*. + * MySQL adapter can now reconnect successfully when using a nonstandard port. Previously, Magento threw this error, `Port must be configured within host parameter`. *Fix submitted by Julien ANQUETIL in pull request [14753](https://github.com/magento/magento2/pull/14753)*. #### Application framework + * You can now manually add a parameter to `app/etc/env.php: user_admin_email`. When an administrator is created, Magento sends an email to default store's email and, if present, to the email address defined in `user_admin_email`. + * Magento now removes unneeded PDF files after generation. Previously, Magento saved a copy of every generated invoice PDF in `/var`. *Fix submitted by Yaroslav Rogoza in pull request [16401](https://github.com/magento/magento2/pull/16401)*. [GitHub-3535](https://github.com/magento/magento2/issues/3535), [GitHub-14517](https://github.com/magento/magento2/issues/14517) + * Logs now indicate when Magento is in maintenance mode, which will help the debugging process. *Fix submitted by Ethan Yehuda in pull request [16840](https://github.com/magento/magento2/pull/16840)*. #### JavaScript framework + * `lib/web/mage/dropdowns.js` no longer fails when autoclose is set to **true**. *Fix submitted by Brian LaBelle in pull request [15499](https://github.com/magento/magento2/pull/15499)*. [GitHub-15469](https://github.com/magento/magento2/issues/15469) + * You can now view an entire zoomed product image in Fotorama fullscreen from the FireFox browser. Previously, the image jumps and the user cannot view all portions of the image. [GitHub-7978](https://github.com/magento/magento2/issues/7978) #### Web API framework + * The `array_push` function has been added to the list of forbidden functions. *Fix submitted by Leandro F. L. in pull request [16144](https://github.com/magento/magento2/pull/16144)*. + * 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 Maikel Martens in pull request [15598](https://github.com/magento/magento2/pull/15598)*. [GitHub-15564](https://github.com/magento/magento2/issues/15564) + * The `GET /V1/returns?searchCriteria` endpoint retrieves `tracks` arrays as expected. + * The `GET /V1/returns/:id` endpoint retrieves `tracks` arrays as expected. + * `catalogProductAttributeRepository` now returns the `frontend_labels` value as expected. #### Cache framework + * Magento no longer throws an exception when deploying static content on a deployment where Redis is used for cache management. See "Redis and static-content deployment" in [Redis troubleshooting]({{ page.baseurl }}/cloud/trouble/redis-troubleshooting.html) for more information. [GitHub-9287](https://github.com/magento/magento2/issues/9287) + * When a layout is loaded from the cache, Magento now repopulates the list of applied layout handles to prevent any chance of a layout handle being reapplied later. *Fix submitted by Scott Buchanan in pull request [12314](https://github.com/magento/magento2/pull/12314)*. ### Dashboard + * The dashboard now displays the correct order amount on orders when deploying Magento on multiple storefronts with different currencies. *Fix submitted by Ankur Raiyani in pull request [15661](https://github.com/magento/magento2/pull/15661)*. [GitHub-15660](https://github.com/magento/magento2/issues/15660) ### Directory + * Magento now supports seven-digit Israeli postal code masks. *Fix submitted by Itay Raz in pull request [16250](https://github.com/magento/magento2/pull/16250)*. ### General + * 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. + * 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. + * You can now successfully save a product video for one store view in deployments that have several store views. Previously, when you saved a product video for one store view, Magento saved it for all store views, although customers could play the video on the original store only. + * 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](https://github.com/magento/magento2/issues/14912) + * We've fixed an issue with unoptimized SQL queries in customer segments. Previously, the customer segment was not saved, and MySQL crashed. + * 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 My Invitations page now accurately displays the reward points amount in numbers. Previously, this page displayed the special character `%` instead of numbers. + * The Enterprise Reward refund logic no longer permits administrators to grant double refunds. + * We moved the `isAllowed` method from `AccessChangeQuoteControl` to a separate service to optimize the logic that supports using recurrent payments in combination with pre-ordered products. *Fix submitted by Jeroen Van Leusden in pull request [12566](https://github.com/magento/magento2/pull/12566)*. + * The attribute checking logic has been optimized by reducing redundant checks. *Fix submitted by Freek Vandeursen in pull request [11554](https://github.com/magento/magento2/pull/11554)*. + * Magento no longer validates customer address attribute value length when the minimum/maximum length fields are not displayed on the Admin. + * The dropdown menu is now positioned as expected under the link on the UI Component listing. *Fix submitted by Ankur Raiyani in pull request [15661](https://github.com/magento/magento2/pull/15661)*. [GitHub-15660](https://github.com/magento/magento2/issues/15660) + * The timestamp field now includes indexes, which reduces the chances of deadlocks that can occur while erasing old records. *Fix submitted by Carlos Lizaga in pull request [13328](https://github.com/magento/magento2/pull/13328)*. [GitHub-10346](https://github.com/magento/magento2/issues/10346) + * `setCateroryIds([])` has been corrected to `setCategoryIds([])` throughout the test suites. *Fix submitted by Neeta Kangiya in pull request [15621](https://github.com/magento/magento2/pull/15621)*. [GitHub-15590](https://github.com/magento/magento2/issues/15590) + * Menus with nested elements now align correctly. *Fix submitted by hitesh-wagento in pull request [15645](https://github.com/magento/magento2/pull/15645)*. [GitHub-7897](https://github.com/magento/magento2/issues/7897) + * An administrator can now successfully download a PDF or export data immediately after log in. Previously, an administrator could not download a PDF or export data successfully after log in, but was redirected to the Admin dashboard. *Fix submitted by Riccardo Tempesta in pull request [15539](https://github.com/magento/magento2/pull/15539)*. [GitHub-15510](https://github.com/magento/magento2/issues/15510) + * Merchants can now apply styling by changing LESS variables in the Luma theme as expected. *Fix submitted by hitesh-wagento in pull request [15734](https://github.com/magento/magento2/pull/15734)*. [GitHub-15608](https://github.com/magento/magento2/issues/15608) + * Added a service configuration setting—Send Adminhtml and Frontend as Separate Apps—to collect and send separate data for frontend and adminhtml applications for New Relic reporting. See [New Relic Reporting]( https://docs.magento.com/m2/ce/user_guide/reports/new-relic-reporting.html?Highlight=New%20Relic%20service). *Fix submitted by Max Chadwick in pull request [12935](https://github.com/magento/magento2/pull/12935)*. + * 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 Maksim Gopey in pull request [15826](https://github.com/magento/magento2/pull/15826)*. + * `.limiter` now has the same parent selectors as `.pages`, which prevents clashes between styles and layouts. Previously, `.limiter` float was too generic. *Fix submitted by hitesh-wagento in pull request [15878](https://github.com/magento/magento2/pull/15878)*. + * The default `FormElementDependenceController` configuration is now extended by custom configuration rather than overridden. *Fix submitted by Valerij Ivashchenko in pull request [16001](https://github.com/magento/magento2/pull/16001)*. + * `inline-block` issues with space and font-size in the Name form have been resolved. *Fix submitted by Daniel Ruf in pull request [16048](https://github.com/magento/magento2/pull/16048)*. + * Alignment and layout issues on home and category pages of the Hot Seller section have been resolved. *Fix submitted by Chirag Matholiya in pull request [15893](https://github.com/magento/magento2/pull/15893)*. [GitHub-15213](https://github.com/magento/magento2/issues/15213) + * Updated old font formats of the default fonts (`woff` and `woff2`). *Fix submitted by Daniel Ruf in pull request [15870](https://github.com/magento/magento2/pull/15870)*. [GitHub-15213](https://github.com/magento/magento2/issues/15213) + * We've corrected the return type of methods and typos in `CategoriesJson.php`, `Engine.php`, `UrlRewrite.php`, and `ObserverConfig.php`. *Fix submitted by Saurabh Parekh in pull request [15993](https://github.com/magento/magento2/pull/15993)*. + * `@escapeNotVerified` annotations were replaced in `name.phtml` and `qty.phtml`. *Fix submitted by Riccardo Tempesta in pull request [15532](https://github.com/magento/magento2/pull/15532)*. [GitHub-15501](https://github.com/magento/magento2/issues/15501) + * We've removed redundant function calls in `app/code/Magento/CurrencySymbol/view/adminhtml/templates/grid.phtml`. *Fix submitted by Saurabh Parekh in pull request [15346](https://github.com/magento/magento2/pull/15346)*. [GitHub-15355](https://github.com/magento/magento2/issues/15355) + * `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.) *Fix submitted by Kacper Chara in pull request [15382](https://github.com/magento/magento2/pull/15382)*. [GitHub-4977](https://github.com/magento/magento2/issues/4977) + * The Change Password warning message no longer appears twice. *Fix submitted by Sanjay Patel in pull request [15774](https://github.com/magento/magento2/pull/15774)*. [GitHub-14895](https://github.com/magento/magento2/issues/14895) + * You can now add the `NOINDEX,NOFOLLOW` meta tag to the admin scope to instruct Google and other friendly bots to refrain from adding the Admin URL to search results. *Fix submitted by Itay Raz in pull request [17163](https://github.com/magento/magento2/pull/17163)*. + * The Create Account and Password Forget forms now include the required notice for relevant fields. *Fix submitted by Daniel Ruf in pull request [16965](https://github.com/magento/magento2/pull/16965)*. + * Reworked the `addError`, `addSuccess` methods in several files. *Fix submitted by Tiago Sampaio in pull request [16921](https://github.com/magento/magento2/pull/16921)*. + * Minor improvements to `app/code/Magento/CatalogRule/Model/Rule/Job.php` and `app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php`. *Fix submitted by Vladymyr Hrivinskyi in pull request [16900](https://github.com/magento/magento2/pull/16900)*. + * Refactored `app/code/Magento/User/Controller/Adminhtml/` by removing the direct use of ObjectManager and included the dependencies using constructor dependency injection. *Fix submitted by AnshuMishra17 in pull request [16560](https://github.com/magento/magento2/pull/16560)*. + * `gallery.less` no longer imports `_responsive.less`. *Fix submitted by Karla Saaremäe in pull request [16579](https://github.com/magento/magento2/pull/16579)*. + * Added missing `width` property for the confirmation modal in `lib/web/css/source/components/_modals.less`. *Fix submitted by Vladymyr Hrivinskyi in pull request [16861](https://github.com/magento/magento2/pull/16861)*. + * Removed the redundant `font-size` attribute from the toolbar pager in `lib/web/css/source/lib/_utilities.less`. *Fix submitted by Karla Saaremäe in pull request [16716](https://github.com/magento/magento2/pull/16716)*. + * Updated the "Reporting security issues" section of `README.md` to recommend that users create a bugcrowd account. *Fix submitted by Tommy Quissens in pull request [16685](https://github.com/magento/magento2/pull/16685)*. + * The currency format that was previously broken for some locales now works as expected. Previously, broken currency formats resulted in an incorrect price amount on the product page. *Fix submitted by Vishal Gelani in pull request [15909](https://github.com/magento/magento2/pull/15909)*. [GitHub-11717](https://github.com/magento/magento2/issues/11717) + * Changed the **My Dashboard** string to **My Account** in multiple files. *Fix submitted by Daniel Ruf in pull request [16009](https://github.com/magento/magento2/pull/16009)*. + * Corrected the annotation to the `formatDateTime` function in `lib/internal/Magento/Framework/Stdlib/DateTime/TimezoneInterface.php` file. *Fix submitted by Sanjay Patel in pull request [15602](https://github.com/magento/magento2/pull/15602)*. + * The `clickableOverlay` option now works as expected. *Fix submitted by virtua-pmakowski in pull request [15172](https://github.com/magento/magento2/pull/15172)*. [GitHub-7399](https://github.com/magento/magento2/issues/7399) + * The Instant Purchase module now works as expected. Previously, the `get($type)` method in `/Magento/InstantPurchase/Model/ShippingMethodChoose/DeferredShippingMethodChooserPool.php` threw an exception without showing the shipping method $type as it was hardcoded as 'chooser'. *Fix submitted by Marcel Hauri in pull request [15258](https://github.com/magento/magento2/pull/15258)*. + * Template files now follow Magento standard coding format. *Fix submitted by Vishal Gelani in pull request [15398](https://github.com/magento/magento2/pull/15398)*. + * Corrected `viewModel` to `view_model` where needed in `\Magento\Backend\Block\Template`. *Fix submitted by Abhishek Jakhotiya in pull request [15067](https://github.com/magento/magento2/pull/15067)*. + * Non-well-formed numeric values that were encountered in `app/code/Magento/Directory/Model/Currency.php` have been resolved. *Fix submitted by Mateusz Lerczak in pull request [14833](https://github.com/magento/magento2/pull/14833)*. + * The `README` file for the `magento2` repository now has Maintainers and Contributors sections. *Fix submitted by Stanislav Idolov in pull request [14790](https://github.com/magento/magento2/pull/14790)*. + * The documentation for `AdapterInterface::update` has been improved. *Fix submitted by Navarr Barnier in pull request [14769](https://github.com/magento/magento2/pull/14769)*. + * The product video feature is now GDPR-compliant. ### Gift cards + * Magento now displays the **Credit Memo** link at the top of the page for orders with a total of 0 (zero). Previously, this link was missing, which prevented users from creating a credit memo for the order. + * You can now save gift cards without the price being 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 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`. + * Orders now retain gift message information on both item and order level. Previously, gift messages disappeared from an order when a customer logged into his account during checkout. + * Magento now maintains relationships between new gift card accounts when a customer purchases several gift cards in the same order. + * Magento now refunds only the exact amount used on a gift card if only the part of the gift card was used. Previously, when a customer used a gift card account code to partially pay for an order, and Magento subsequently created a credit memo for a portion of the order, the full amount of the gift card was refunded. + * Magento now generates the same number of gift card codes when the full order is invoiced as the customer selected when creating an order. Previously, for orders that included both physical products and multiple gift cards, the number of gift card codes generated on an order corresponded to the quantity of the previous physical line items that the user had added to the cart before adding gift cards. ### Gift message + * Orders now retain gift message information on both item and order level. Previously, gift messages disappeared from an order when a customer logged into his account during checkout. ### Google Analytics + * Google analytics pageview is no longer triggered twice. *Fix submitted by Torben Höhn in pull request [15765](https://github.com/magento/magento2/pull/15765)*. [GitHub-12221](https://github.com/magento/magento2/issues/12221) + * `Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver` is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [17137](https://github.com/magento/magento2/pull/17137)*. ### 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 Analytics events are now triggered as expected. Specifically, the `addToCart` and `removeFromCart` events are not triggered until after a customer adds a product to the mini cart. + * Magento now accurately updates the mini cart when a customer removes a product while accessing a storefront using Internet Explorer 11.x. Previously, when a customer removed a product from the mini cart, Magento did not remove the product but instead threw this error, `(SCRIPT438: Object doesn't support property or method 'find'. File: sidebar.js, Line: 237, Column: 13 )`. + * 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. ### HTML + * Responsive table headers now work as expected. Previously, when no heading was present in the `data-th` attribute on a column for a responsive table in Magento, only a colon was present. *Fix submitted by Sean Templeton in pull request [16517](https://github.com/magento/magento2/pull/16517)*. + * Corrected HTML syntax in the `report.phtml` error template. *Fix submitted by abcpremium in pull request [15454](https://github.com/magento/magento2/pull/15454)*. ### Import/export + * Product import now updates the **Enable Qty Increments** field as expected. *Fix submitted by Sergey P in pull request [14379](https://github.com/magento/magento2/pull/14379)*. [GitHub-14351](https://github.com/magento/magento2/issues/14351) + * `Magento_ImportExport` now supports unicode characters in column names. Previously, column names such `vitamin_a_µg` were marked invalid. *Fix submitted by Timon de Groot in pull request [15197](https://github.com/magento/magento2/pull/15197)*. ### Infrastructure + * 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. + * The RMA status label now shows on the email that Magento sends to customers when the status of an RMA changes. + * 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. + * Magento now deploys the translations in `js-translation.json` file when deploying static content. *Fix submitted by Sergey Dmitruk in pull request [4814](https://github.com/magento/magento2/pull/4814)*. + * Magento now updates the `Enable Qty Increments` field as expected during product import. *Fix submitted by Alexander Lukyanov in pull request [15144](https://github.com/magento/magento2/pull/15144)*. [GitHub-11354](https://github.com/magento/magento2/issues/11354) + * We've expanded the HTTP request class by adding the `isPostRequest` method. *Fix submitted by Pavel Usachev in pull request [12626](https://github.com/magento/magento2/pull/12626)*. + * You can now change only the primary button `font-weight` without changing regular button `font-weight` with LESS variables. *Fix submitted by Karla Saaremäe in pull request [16012](https://github.com/magento/magento2/pull/16012)*. [GitHub-15832](https://github.com/magento/magento2/issues/15832) + * We've added missing properties to the `Magento/Widget` component and removed a reference to a non-existent class in the associated tests. *Fix submitted by Marcel Hauri in pull request [15647](https://github.com/magento/magento2/pull/15647)*. + * We've improved the readability of `app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php`. *Fix submitted by Valerij Ivashchenko in pull request [16010](https://github.com/magento/magento2/pull/16010)*. + * Template syntax errors in `app/code/Magento/Theme/Block/Html/Breadcrumbs.php` have been corrected. *Fix submitted by Namrata in pull request [15339](https://github.com/magento/magento2/pull/15339)*. [GitHub-15345](https://github.com/magento/magento2/issues/15345) + * The calendar widget (`jQuery UI DatePicker`) now correctly displays more than one month. *Fix submitted by Burlacu Vasilii in pull request [16279](https://github.com/magento/magento2/pull/16279)*. [GitHub-7379](https://github.com/magento/magento2/issues/7379) + * An error with the template notation for `Magento_CatalogWidget` module has been fixed. *Fix submitted by Namrata in pull request [16530](https://github.com/magento/magento2/pull/16530)*. [GitHub-16529](https://github.com/magento/magento2/issues/16529) + * You can now use the `addTabAfter` method to add two or more tabs to the Admin (for example, the Order View page) in the expected order. Previously, Magento did not preserve the correct sort order for the new tabs. *Fix submitted by Tiago Sampaio in pull request [16175](https://github.com/magento/magento2/pull/16175)*. [GitHub-16174](https://github.com/magento/magento2/issues/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 in pull request [16704](https://github.com/magento/magento2/pull/16704)*. [GitHub-16703](https://github.com/magento/magento2/issues/16703) + * We've added `@navigation-level0-item__hover__color` missing variable for mobile and tablet view. *Fix submitted by hitesh-wagento in pull request [16732](https://github.com/magento/magento2/pull/16732)*. [GitHub-15848](https://github.com/magento/magento2/issues/15848) + * 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. *Fix submitted by Oleksandr Kravchuk in pull request [16732](https://github.com/magento/magento2/pull/16732)*. [GitHub-6504](https://github.com/magento/magento2/issues/6504) + * HTML minification now works as expected. *Fix submitted by Ronak Patel in pull request [16916](https://github.com/magento/magento2/pull/16916)*. [GitHub-5316](https://github.com/magento/magento2/issues/5316) + * The type of the `transport` event parameter has been changed to `DataObject`. This change reverts a change from type `DataObject` to `Array()` made in a previous release. *Fix submitted by gwharton in pull request [16599](https://github.com/magento/magento2/pull/16599)*. [GitHub-10210](https://github.com/magento/magento2/issues/10210) + * Transport variable can now be altered in the `email_invoice_set_template_vars_before` event. *Fix submitted by gwharton in pull request [15040](https://github.com/magento/magento2/pull/15040)*. [GitHub-10210](https://github.com/magento/magento2/issues/10210) + * Replaced deprecated methods in the `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php`, and `app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php`. *Fix submitted by Tiago Sampaio in pull request [17227](https://github.com/magento/magento2/pull/17227)*. + * Replaced deprecated methods in 44 files. *Fix submitted by Tiago Sampaio in pull request [17035](https://github.com/magento/magento2/pull/17035)*. + * The `template.js` has been updated to make the `jquery` variable consistently use `$`. Previously, JavaScript in the `template.js` sometimes used `jquery` and sometimes `$`, and Magento threw an error when running in Internet Explorer. *Fix submitted by Angelo Maragna in pull request [17129](https://github.com/magento/magento2/pull/17129)*. + * Corrected an undefined class property in the `app/code/Magento/Backend/Block/Media/Uploader.php getConfigJson()` method. *Fix submitted by Prince Patel in pull request [17099](https://github.com/magento/magento2/pull/17099)*. + * Corrected sticky footer in `page-main` container height on mobile devices. *Fix submitted by Denis Belevtsov in pull request [17006](https://github.com/magento/magento2/pull/17006)*. [GitHub-15118](https://github.com/magento/magento2/issues/15118) + * Corrected the return type of methods in `app/code/Magento/Catalog/Controller/Category/View.php`, `app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php`, and `app/code/Magento/CatalogSearch/Model/ResourceModel/EngineInterface.php`. *Fix submitted by Pratik Oza in pull request [16988](https://github.com/magento/magento2/pull/16988)*. + * Style groups for mobile devices (`max-width`) are now specified in the correct order. *Fix submitted by Tejash Kumbhare in pull request [16959](https://github.com/magento/magento2/pull/16959)*. [GitHub-14476](https://github.com/magento/magento2/issues/14476) + * Corrected the namespace that is defined in `compare.phtml`. *Fix submitted by Ronak Patel in pull request [16978](https://github.com/magento/magento2/pull/16978)*. + * Edited verbose code in `app/code/Magento/Customer/Controller/Account/LoginPost.php`. *Fix submitted by Glenn Cheng in pull request [16928](https://github.com/magento/magento2/pull/16928)*. + * Fixed annotations in the following methods: `lib/internal/Magento/Framework/Acl/AclResource/Config/Converter/Dom.php`, `lib/internal/Magento/Framework/Acl/AclResource/Config/SchemaLocator.php`, and `lib/internal/Magento/Framework/Acl/Loader/ResourceLoader.php`. *Fix submitted by Tiago Sampaio in pull request [16899](https://github.com/magento/magento2/pull/16899)*. + * Removed or edited code comments in the following files: * `app/code/Magento/Backend/Block/Dashboard/Bar.php` @@ -1347,137 +1721,179 @@ Our community contributors have made many helpful, minor corrections to spelling * `app/code/Magento/Sales/view/adminhtml/templates/order/totals.phtml`. *Fix submitted by Pratik Oza in pull request [16891](https://github.com/magento/magento2/pull/16891)*. + * Improved product gallery block helper code (`app/code/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php`). *Fix submitted by Valerij Ivashchenko in pull request [16889](https://github.com/magento/magento2/pull/16889)*. + * Removed duplicated string from `app/code/Magento/ProductVideo/i18n/en_US.csv`. *Fix submitted by Valerij Ivashchenko in pull request [16882](https://github.com/magento/magento2/pull/16882)*. + * Refactored code in `dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php` so that an undefined index warning is no longer triggered when using uppercase reserved word *Fix submitted by Freek Vandeursen in pull request [16785](https://github.com/magento/magento2/pull/16785)*. + * Regex in `ControllerAclTest::getControllerPath()` has been changed to avoid classes that are under a namespace with a controller component (such as controller plugins) being interpreted as controllers. *Fix submitted by Freek Vandeursen in pull request [16707](https://github.com/magento/magento2/pull/16707)*. + * Knockout template files now include a `title` attribute in the `img` tag. *Fix submitted by Namrata in pull request [16691](https://github.com/magento/magento2/pull/16691)*. + * Added `title` attribute to links as needed for compatibility with w3c standards to these files: `app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml`, `app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml`, `app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml`, `app/code/Magento/Theme/view/frontend/templates/html/header/logo.phtml`, and `app/code/Magento/Ui/view/base/web/templates/block-loader.html`. *Fix submitted by Namrata in pull request [16689](https://github.com/magento/magento2/pull/16689)*. + * Search icons are now defined by header icon variables. *Fix submitted by Karla Saaremäe in pull request [16559](https://github.com/magento/magento2/pull/16559)*. + * Module namespace is now defined before template path name. Previously, when we overrode any core block to any custom module, Magento threw an error because trying to find the template file in the custom module if the module namespace is not defined before the template path. *Fix submitted by Prince Patel in pull request [16576](https://github.com/magento/magento2/pull/16576)*. + * Corrected the comment for the `Magento_Setup` module `includeClasses` function. *Fix submitted by Namrata in pull request [16549](https://github.com/magento/magento2/pull/16549)*. + * The `module:status` command now clearly provides an easily parsed listing of all enabled and disabled modules. *Fix submitted by Jisse Reitsma in pull request [15543](https://github.com/magento/magento2/pull/15543)*. + * Fixed the `false` value for the `cache_lifetime` argument in `Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml`. *Fix submitted by yuriyDne in pull request [16086](https://github.com/magento/magento2/pull/16086)*. + * CSRF tokens are now considered sensitive strings. *Fix submitted by Robert in pull request [13509](https://github.com/magento/magento2/pull/13509)*. + * Refactored JavaScript code in `popup.phtml` and `popup.js`. *Fix submitted by IvanPletnyov in pull request [16216](https://github.com/magento/magento2/pull/16216)*. + * Removed extraneous cursor property. *Fix submitted by Daniel Ruf in pull request [15305](https://github.com/magento/magento2/pull/15305)*. + * `app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml` now uses the stored value of the `getPartners` method instead of calling same method again. *Fix submitted by Saurabh Parekh in pull request [15517](https://github.com/magento/magento2/pull/15517)*. + * Added missing lowercase conversion on grouped product assignation. *Fix submitted by Juan Alonso in pull request [15312](https://github.com/magento/magento2/pull/15312)*. + * Removed code responsible for multiple add-to-cart initializations when Magento loads the product listing. *Fix submitted by Vova Yatsyuk in pull request [15409](https://github.com/magento/magento2/pull/15409)*. + * Refactored JavaScript code from `popup.phtml` to meet Magento coding standards. *Fix submitted by Rahul Kachhadiya in pull request [15341](https://github.com/magento/magento2/pull/15341)*. + * Removed redundant PHPdoc comment and deprecated private method `getSerializer` in `\Magento\Customer\Model\Customer\NotificationStorage` class. *Fix submitted by adrian-martinez-interactiv4 in pull request [15262](https://github.com/magento/magento2/pull/15262)*. + * CSS code is now automatically updated in the browser. Previously, users had to press **CTRL+F5** to see CSS changes. *Fix submitted by Alexander Lukyanov in pull request [15144](https://github.com/magento/magento2/pull/15144)*. [GitHub-11354](https://github.com/magento/magento2/issues/11354) + * Concrete type hints for product and category resources have been added to `app/code/Magento/Catalog/Model/Category.php` and `app/code/Magento/Catalog/Model/Product.php` to help with static analysis and IDE autocompletion. *Fix submitted by Yaroslav Rogoza in pull request [15136](https://github.com/magento/magento2/pull/15136)*. + * Replaced `rand` with `rand_int` in several modules. *Fix submitted by Daniel Ruf in pull request [15017](https://github.com/magento/magento2/pull/15017)*. + * Optimized `if-condition` in `/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper/AttributeFilter.php`. *Fix submitted by Valerij Ivashchenko in pull request [15002](https://github.com/magento/magento2/pull/15002)*. + * We've upgraded to Node.js 8 from Node.js 6. *Fix submitted by Daniel Ruf in pull request [15018](https://github.com/magento/magento2/pull/15018)*. + * Replaced `template/path` with `Module_Name::template/path` in the block class to ensure extensibility of the class. Previously, if the source block classes referenced a template without specifying the module name, then block render failed with this error: `Invalid template file`. *Fix submitted by Abhishek Jakhotiya in pull request [14946](https://github.com/magento/magento2/pull/14946)*. + * Replaced the `\Magento\Backend\Helper\Data` parameter with `\Magento\Backend\Model\UrlInterface` to make them identical with the constructor. *Fix submitted by Abhishek Jakhotiya in pull request [14946](https://github.com/magento/magento2/pull/14946)*. + * The return type of `addToCartPostParams` in `app/code/Magento/Catalog/Block/Product/ListProduct.php` has been changed to array. *Fix submitted by Sean Templeton in pull request [14946](https://github.com/magento/magento2/pull/14946)*. + * Datepicker now correctly converts date formats in locales other than `en-US`. *Fix submitted by Tao Sasaki in pull request [14627](https://github.com/magento/magento2/pull/14627)*. + * `default_head_blocks.xml` now contains the `order` attribute for setting the load order of stylesheets. *Fix submitted by Tao Sasaki in pull request [14290](https://github.com/magento/magento2/pull/14290)*. + * Magento now displays validation messages on the advanced search form as expected if you submit the advanced search form without entries. [GitHub-8131](https://github.com/magento/magento2/issues/8131) + * `\Magento\Framework\Reflection\TypeProcessor` methods have been simplified. + * Magento no longer unsets the taxed shipping total information before returning the total tax. ### JavaScript + * Refactored the JavaScript code of the button split widget. *Fix submitted by amittiwari024 in pull request [15351](https://github.com/magento/magento2/pull/15351)*. [GitHub-15354](https://github.com/magento/magento2/issues/15354) ### Klarna + * Magento no longer throws multiple JavaScript errors when a customer selects Klarna from the Review & Payments page. ### Module Manager + * Module Manager module grid now works as expected. *Fix submitted by Alex Gusev in pull request [15211](https://github.com/magento/magento2/pull/15211)*. [GitHub-15192](https://github.com/magento/magento2/issues/15192) ### Newsletter + * 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. + * Magento now correctly updates newsletter subscriptions when the customer is registered on two stores. Previously, when the customer tried to subscribe to the newsletter from a second store, Magento displayed this message, `You are (not) subscribed to "General Subscription"`. + * The newsletter subscription confirmation message does not display after a customer clicks the link that is included in the confirmation email. *Fix submitted by Kaushik Chavda in pull request [15247](https://github.com/magento/magento2/pull/15247)*. [GitHub-14747](https://github.com/magento/magento2/issues/14747) + * Magento now sends a confirmation request email to the customer when she unsubscribes to a newsletter. *Fix submitted by Lyzun Oleksandr in pull request [15464](https://github.com/magento/magento2/pull/15464)*. [GitHub-15218](https://github.com/magento/magento2/issues/15218) + * Removed the direct use of the object manager and loaded the dependency via constructor dependency injection in `app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php` and `app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php`. *Fix submitted by AnshuMishra17 in pull request [16851](https://github.com/magento/magento2/pull/16851)*. + * Newsletter registration now works the same when registered customers subscribe from My Account and or from the newsletter block. *Fix submitted by Lyzun Oleksandr in pull request [15479](https://github.com/magento/magento2/pull/15479)*. + * Removed the redundant return statement from `getJsTemplateName` function comment in the `Magento_Newsletter`'s block file. *Fix submitted by Namrata in pull request [16645](https://github.com/magento/magento2/pull/16645)*. ### Payment methods @@ -1485,87 +1901,113 @@ Our community contributors have made many helpful, minor corrections to spelling #### Braintree + * You can now cancel an order that was placed with Braintree when the Braintree authorization had expired. + * All invoices now have the merchant account ID set in the store configuration for the Braintree payment method. Previously, the default merchant account ID was sent to Braintree for any subsequent partial order invoices after the initial invoice is generated. + * Braintree configuration (`app/code/Magento/Braintree/etc/adminhtml/system.xml`) now contains `showInStore` attributes. *Fix submitted by Andreas Schrammel in pull request [16458](https://github.com/magento/magento2/pull/16458)*. + * Magento now retains the correct address information when a customer using Braintree's **Pay with PayPal** button to complete an order navigates back to the shipping step and changes the shipping address fields. *Fix submitted by Vova Yatsyuk in pull request [15133](https://github.com/magento/magento2/pull/15133)*. #### PayPal + * Customers can now continue creating an order after a PayFlow Pro payment has been declined. Previously, under these circumstances. the customer could not continue his purchase. + * Paypal Onboarding has been configured to work for merchants from countries other than the United States. + * Magento now accurately displays the status of PayPal orders. Previously, the status of PayPal orders was displayed only as **Processing**. + * Magento no longer sends duplicate order confirmation emails when a customer uses PayPal Express to complete an order. *Fix submitted by Rocket Web in pull request [14820](https://github.com/magento/magento2/pull/14820)*. + * Tax amount calculation for payments processed through PayPal now works as expected. Previously, Magento sent the wrong amount to PayPal when a discount was applied to an order. + * The `Allmethods config` source model now reports the full list of payment methods as expected. *Fix submitted by Manuel Schmid in pull request [15032](https://github.com/magento/magento2/pull/15032)*. [GitHub-13460](https://github.com/magento/magento2/issues/13460) + * You can now cancel an order placed through Cybersource when the fraud filters are triggered. + * Magento now emails customer order confirmations for orders that are placed through Worldpay. + * Magento now correctly applies free shipping to an order after the customer applied the free shipping code during checkout. + * Magento no longer sends Admin orders to Signifyd for review when Signifyd is disabled on the website on which the administrator is logged in. + * 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. + * Magento now sends email about payment failures to customers. Previously, Magento did not send a customer email, but instead logged an error in `support.log`, and displayed this message on the storefront, **Transaction has been declined. Please try again later**. + * Magento no longer throws an error when multiple payment methods are enabled. Previously, when a merchant tried to enable more than one payment method from the Admin, Magento displayed this error in the console, `Found elements with non-unique id billing-address-form`. *Fix submitted by Neeta Kangiya in pull request [15349](https://github.com/magento/magento2/pull/15349)*. [GitHub-15348](https://github.com/magento/magento2/issues/15348) + * Magento now sends order confirmation emails as expected for orders purchased with WorldPay. + * A type error in the payment void method of the Authorizenet module has been fixed. *Fix submitted by Oleh Kravets in pull request [16194](https://github.com/magento/magento2/pull/16194)*. [GitHub-16184](https://github.com/magento/magento2/issues/16184) ### Pagecache + * Full-page cache now works as expected in multistore deployments. Previously, when you opened the URL of a non-default store in a multistore deployment, full-page cache did not return the URL. ### Performance + * 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. + * Merchants can now improve store performance by disabling Magento Report functionality if business function does not require this capability. A new configuration setting (**System Configuration**: **General** > **Reports** > **General Options**) allows merchants to disable Magento Reports, which is recommended practice if a merchant's business function does not require this capability. + * You can change store locale without the exporting and importing configuration process. While Magento is in Production and the `SCD_ON_DEMAND` is enabled, the Magento store and admin locale options are available. See [Change locales]({{ page.baseurl }}/cloud/live/sens-data-over.html#change-locales). + * The time required to load category or product pages for products that are configured with many attributes (more than 500) has been significantly reduced. Refactoring the logic for product attribute retrieval has resulted in a reduction of load time of almost 90% for certain scenarios. + * The time required to load a store’s home page has been reduced noticeably when the top menu contains many categories. (Load time is still affected by the number of categories and the structure of the top menu.) + * The speed of catalog price rule save operations has been improved by these changes: * elimination of unnecessary reindexing @@ -1573,156 +2015,199 @@ Our community contributors have made many helpful, minor corrections to spelling * improvement to the way that the `getMatchingProductIds` function fetches products, which has eliminated unnecessary checks of the data set. *Fix submitted by Andrey Zabara in pull request [14707](https://github.com/magento/magento2/pull/14707)*. + * The ID to SKU lookup process for tier prices has been optimized. Previously, with a large number of tier or group prices, each tier would separately make a database query to look up the associated SKU. *Fix submitted by Todd Christensen in pull request [14699](https://github.com/magento/magento2/pull/14699)*. ### 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. ### Quote + * 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 Riccardo Tempesta in pull request [14904](https://github.com/magento/magento2/pull/14904)*. [GitHub-14869](https://github.com/magento/magento2/issues/14869) + * 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 George Schiopu in pull request [14976](https://github.com/magento/magento2/pull/14976)*. [GitHub-10395](https://github.com/magento/magento2/issues/10395) + * Coupon codes now work for guest users through the web API as well as from the storefront. *Fix submitted by Marcin Dykas in pull request [15320](https://github.com/magento/magento2/pull/15320)*. [GitHub-14056](https://github.com/magento/magento2/issues/14056) + * Magento no longer runs an SQL query on every item in the database when a quote is empty, which has improved the performance of the checkout process. *Fix submitted by Sean Templeton in pull request [16675](https://github.com/magento/magento2/pull/16675)*. ### Reports + * The timezone has been removed from the date when Magento retrieves the current month from a UTC timestamp. *Fix submitted by Prince Patel in pull request [16584](https://github.com/magento/magento2/pull/16584)*. [GitHub-15940](https://github.com/magento/magento2/issues/15940) ### Review + * Removed the unused class declaration from controller's index action and the unused code in the comment block from the template file in `app/code/Magento/Review/view/frontend/templates/redirect.phtml` and `app/code/Magento/Version/Controller/Index/Index.php`. *Fix submitted by Yogesh Suhagiya in pull request [15173](https://github.com/magento/magento2/pull/15173)*. ### Rule + * A cart rule that uses a `subselection` condition now works as executed. Previously, cart rules with this condition automatically granted a discount. + * The retrieval of first array elements in the following files has been improved: `app/code/Magento/Rule/Model/Action/AbstractAction.php` and `app/code/Magento/Rule/Model/Condition/Combine.php`. *Fix submitted by Thomas Klein in pull request [16053](https://github.com/magento/magento2/pull/16053)*. [GitHub-15940](https://github.com/magento/magento2/issues/15940) + * 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 eventually crashed. *Fix submitted by Keith Bentrup in pull request [15265](https://github.com/magento/magento2/pull/15265)*. [GitHub-15121](https://github.com/magento/magento2/issues/15121) ### Sales + * Order status now remains in the Complete state after Magento refunds store credit on a partial credit memo. Previously, under these circumstances, Magento changed the status of the order to Closed. + * You can now create multiple credit memos in one session and save each successfully. Previously, Magento displayed this error when you tried to save a second credit memo after creating the first memo: `Could not save credit memo`. + * Magento now displays any errors that occur during order creation in the browser console. Previously, Magento displayed this message: `Uncaught ReferenceError: order is not defined during order creation` instead of a specific error message. + * The `POST /V1/shipment` endpoint processes `tracks` arrays as expected. + * Magento no longer reverts to the country associated with the default website when a customer edits the billing address for an order. Previously, if a customer edited the shipping address for an order, Magento would reset the billing address to the default address specified for the default website. + * Credit memo email template file incorrect object types have been corrected. Previously, when a merchant created a credit memo and checked the **Email** checkbox, Magento threw an error. *Fix submitted by Joseph Maxwell in pull request [16438](https://github.com/magento/magento2/pull/16438)*. + * Performance issues that resulted from disabling invoice emails have been resolved. + * The Invoices grid now reflects changes in invoice state as expected. *Fix submitted by JeroenVanLeusden in pull request [16286](https://github.com/magento/magento2/pull/16286)*. + * You can now set the `is_visible_on_front` parameter from the `addStatusHistoryComment` of the order mode. Previously, you could set the `is_visible_on_front` parameter from the Admin only. *Fix submitted by Mark Shust in pull request [15637](https://github.com/magento/magento2/pull/15637)*. + * Module name space is now declared before the template pathname in `Magento_Sales::order/info.phtml`. *Fix submitted by Ronak Patel in pull request [16206](https://github.com/magento/magento2/pull/16206)*. + * The `addFieldToFilter` has been added to `addressCollection` in `app/code/Magento/Sales/Setup/UpgradeData.php`, which optimizes the process of collecting addresses during upgrade. *Fix submitted by Dmytro Cheshun in pull request [15615](https://github.com/magento/magento2/pull/15615)*. + * Invoice prefixes now contain the correct store ID when Magento is deployed in a multistore environment. Previously, Magento always created the invoice number using the default store view ID. *Fix submitted by Sanjay Patel in pull request [15615](https://github.com/magento/magento2/pull/15615)*. [GitHub-14063](https://github.com/magento/magento2/issues/14063) + * The `GET /V1/orders/items/{id}` request now returns `parent_item`. *Fix submitted by Sanjay Patel in pull request [15615](https://github.com/magento/magento2/pull/15615)*. ### Sales rules + * Cart price rules with associated coupons are no longer affected by edits to scheduled updates. + * The `discount` label in the `app/code/Magento/SalesRule/view/frontend/web/js/view/summary/discount.js` file is now compatible with custom module discount. *Fix submitted by Rodrigo Santellan in pull request [16093](https://github.com/magento/magento2/pull/16093)*. ### Search + * 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 Julien ANQUETIL in pull request [14839](https://github.com/magento/magento2/pull/14839)*. [GitHub-14274](https://github.com/magento/magento2/issues/14274) + * Customers can now use the **Enter** key to submit searches from a page header. Previously, when a customer used the **Enter** key to submit a search query, event handlers that were bound to the form submit (through jQuery) were fired twice. *Fix submitted by Amjad M in pull request [15340](https://github.com/magento/magento2/pull/15340)*. [GitHub-13793](https://github.com/magento/magento2/issues/13793) + * Swagger now handles `searchCriteria`-related requests as expected. *Fix submitted by Jakub in pull request [15040](https://github.com/magento/magento2/pull/15040)*. [GitHub-15322](https://github.com/magento/magento2/issues/15322) + * The Admin panel search now filters catalogs as expected. Previously, if a merchant tried to narrow a search when using the Search tool in the Admin panel, Magento displayed the full catalog view without narrowing down the list. *Fix submitted by Pavel in pull request [12735](https://github.com/magento/magento2/pull/12735)*. [GitHub-7861](https://github.com/magento/magento2/issues/7861) + * 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 Riccardo Tempesta in pull request [14905](https://github.com/magento/magento2/pull/14905)*. [GitHub-14855](https://github.com/magento/magento2/issues/14855) + * 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 Ben Robie in pull request [16952](https://github.com/magento/magento2/pull/16952)*. [GitHub-8131](https://github.com/magento/magento2/issues/8131) + * Server load has been reduced for advanced searching. Previously, when a customer entered text in the search suggestion box, Magento immediately sent every character to the server. The auto-complete box now delays sending the request. *Fix submitted by Sean Templeton in pull request [16669](https://github.com/magento/magento2/pull/16669)*. + * You can now successfully clone the minisearch widget. *Fix submitted by Daniel Ruf in pull request [15485](https://github.com/magento/magento2/pull/15485)*. ### Shipping + * The shipping and estimated tax form now display country, city, and postcode fields as expected. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16213](https://github.com/magento/magento2/pull/16213)*. [GitHub-8222](https://github.com/magento/magento2/issues/8222) + * A method with a misspelled name was deprecated and the new method with correct spelling added to `app/code/Magento/Multishipping/Block/Checkout/AbstractMultishipping.php`. *Fix submitted by Anna Völkl in pull request [15514](https://github.com/magento/magento2/pull/15514)*. ### Store + * Magento now adds the correct store code to product URLs in stores with more than one store view when **Stores** > **Settings** > **Configuration** > **General** > **Web** > **Add Store Code to Urls** is set to **yes**. *Fix submitted by Elias Kotlyar in pull request [15566](https://github.com/magento/magento2/pull/15566)*. [GitHub-15565](https://github.com/magento/magento2/issues/15565) + * Magento now displays store views as expected when you select **Stores** > **Terms and Conditions**. *Fix submitted by afirlejczyk in pull request [14546](https://github.com/magento/magento2/pull/14546)*. [GitHub-13944](https://github.com/magento/magento2/issues/13944) #### Elasticsearch + * Bundle products are now indexed as expected in Elasticsearch. + * Elasticsearch now correctly calculates the relevance of quick search results according to selected attribute search weights. #### Admin global search + * 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). + * The Admin global search now returns results that match the keyword for all available pages, or if a user searches in specific sections, the search feature now returns only the results that matched the key words in those specific sections. Previously, the Admin global search did not return results that matched the specified keywords and did not restrict results to specified sections. + * Catalogs are now correctly filtered by the Admin search bar. Previously, if you attempted to use the Search tool in the Admin, and selected "XX in Products", Magento displayed the full catalog view without narrowing down the list. *Fix submitted by Pavel in pull request 12735*. [GitHub-12193](https://github.com/magento/magento2/issues/12193), [GitHub-7861](https://github.com/magento/magento2/issues/7861) ### Shipping @@ -1732,59 +2217,75 @@ You can find Magento Shipping-specific release notes in [Magento Shipping Releas + * 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 shipping progress dates displayed in tracking popup for FedEx shipping are now accurate. ### Sitemap + * Sitemaps generated by `cron` no longer display `/pub/` in image URLs when `docroot` is set to `/pub`. Previously, if the `docroot` was set to `pub` and `BASE MEDIA URL` was not set, the cron-generated sitemap generated incorrect image URLs. + * Magento now generates correct product URLs for sitemaps. Previously, when the **Use Categories Path for Product URLs** attribute was set to **no** in **Configuration** > **Catalog** > **Search Engine Optimization**, Magento generated the wrong product URL in the sitemap. + * Images in XML sitemap are no longer always linked to the primary store in a multistore deployment. *Fix submitted by Steven de Jong in pull request [15689](https://github.com/magento/magento2/pull/15689)*. [GitHub-15588](https://github.com/magento/magento2/issues/15588) + * Split sitemaps now use the index sitemap name as a prefix. Previously, when generating large sitemaps that result in a single index sitemap and several smaller split sitemap files, the split sitemap files did not use the same name prefix as the parent. *Fix submitted by James Halsall in pull request [14836](https://github.com/magento/magento2/pull/14836)*. ### Staging + * Banners remain assigned to a cart rule after a staging Update is applied. Previously, a banner was unassigned from the cart rule after a staging update was applied. + * 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 Admin) 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 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. + * Merchants can now edit a schedule update as expected. Previously, updating schedule data removed the product from the Admin product list. + * Magento no longer deletes products from the Admin product list after a merchant deletes its active schedule update. This deletion only appeared after the scheduled update time. + * Magento no longer throws an error when a merchant edits a product from the Admin when reviews are disabled. *Fix submitted by Oleksandr Kravchuk in pull request [70](https://github.com/magento/magento2/pull/70)*. [GitHub-6264](https://github.com/magento/magento2/issues/6264) + * Scheduled updates to an existing group price or special price no longer remove the previously configured price. Previously, Magento removed the configured price or reverted the price to its original value after the scheduled update expired. ### Store + * 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 Burlacu Vasilii in pull request [16468](https://github.com/magento/magento2/pull/16468)*. [GitHub-16273](https://github.com/magento/magento2/issues/16273) ### Swatches + * The process of switching attribute input type has been fixed, which resolves multiple issues that customers were experiencing when working with swatches, including: * inability to change attribute types from `swatch` to `dropdown` @@ -1796,196 +2297,255 @@ You can find Magento Shipping-specific release notes in [Magento Shipping Releas ### Tax + * Redundant product tax recalculation has been reduced during the loading of category pages, which has improved page loading. *Fix submitted by JeroenVanLeusden in pull request [15089](https://github.com/magento/magento2/pull/15089)*. [GitHub-14941](https://github.com/magento/magento2/issues/14941) + * JavaScript code in the `*.phtml` file of the Tax module has been refactored to meet Magento coding standards. *Fix submitted by Vishal Gelani in pull request [15343](https://github.com/magento/magento2/pull/15343)*. [GitHub-15352](https://github.com/magento/magento2/issues/15352) + * The `Invalid country code` error message that sometimes occurred during import of tax CSV files now includes the name of the country whose data is causing the error. Previously, the message did not identify which country's data caused the error. *Fix submitted by Adam Moss in pull request [16873](https://github.com/magento/magento2/pull/16873)*. ### Testing + * The `testGetIgnoresFirstSlash` method in `ObjectManagerTest` has been updated. *Fix submitted by Prince Patel in pull request [17098](https://github.com/magento/magento2/pull/17098)*. + * The `\Magento\Backup\Model\Db` model is now covered by unit tests. *Fix submitted by Yaroslav Rogoza in pull request [17063](https://github.com/magento/magento2/pull/17063)*. + * Corrected block name in the `Magento_Framework` test XML file. *Fix submitted by Namrata in pull request [16646](https://github.com/magento/magento2/pull/16646)*. + * Metadata titles in `lib/internal/Magento/Framework/View/Page/Config.php` are now covered by a unit test. *Fix submitted by Lorenzo Stramaccia in pull request [16333](https://github.com/magento/magento2/pull/16333)*. + * The `\Magento\Checkout\Model\Cart\CollectQuote` class is now covered by a unit test. *Fix submitted by Chitoraga Eduard in pull request [16271](https://github.com/magento/magento2/pull/16271)*. ### Theme + * Merchants can now successfully change the applied theme. Previously, Magento displayed an error when a merchant tried to save changes to the applied theme on **Content** > **Design** > **Configuration**. *Fix submitted by Daniel Ruf in pull request [15137](https://github.com/magento/magento2/pull/15137)*. [GitHub-13530](https://github.com/magento/magento2/issues/13530) + * Merchants can now successfully change the applied theme setting for a store view (**Content** > **Design** > **Configuration**). *Fix submitted by Daniel Ruf in pull request [15137](https://github.com/magento/magento2/pull/15137)*. [GitHub-14968](https://github.com/magento/magento2/issues/14968) + * Changing the `@tab-content__border` variable in Blank theme now works as expected. *Fix submitted by hitesh-wagento in pull request [15914](https://github.com/magento/magento2/pull/15914)*. [GitHub-14999](https://github.com/magento/magento2/issues/14999) ### Translation + * The `translation.json` file now contains translatable strings for the phrases "Store Credit" and "Gift Card". Previously, these strings were not translated for the shopping cart, one-page checkout, or order view in the customer account on the storefront. + * We've added client-side caching of `js-translation.js`. + * Removed the unused translation for `comment` tag from these files: `app/code/Magento/Analytics/etc/adminhtml/system.xml`, `app/code/Magento/Catalog/etc/adminhtml/system.xml`, `app/code/Magento/Swatches/etc/adminhtml/system.xml`, and `app/code/Magento/Ups/etc/adminhtml/system.xml`. *Fix submitted by Yaroslav Rogoza in pull request [15604](https://github.com/magento/magento2/pull/15604)*. + * Added language translation capability for `comment` tags in the `system.xml` file of the Signifyd module. *Fix submitted by Yogesh Suhagiya in pull request [15364](https://github.com/magento/magento2/pull/15364)*. [GitHub-15361](https://github.com/magento/magento2/issues/15361) + * All previously unsupported `translate` tags in the mini cart template are now supported. *Fix submitted by VitaliyBoyko in pull request [15782](https://github.com/magento/magento2/pull/15782)*. + * 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 in pull request [16190](https://github.com/magento/magento2/pull/16190)*. [GitHub-16079](https://github.com/magento/magento2/issues/16079) + * Added language translation capability to the Braintree module's template file. *Fix submitted by Namrata in pull request [16690](https://github.com/magento/magento2/pull/16690)*. + * Added mini cart checkout-related translations that were missing from `app/code/Magento/Checkout/i18n/en_US.csv`. *Fix submitted by JeroenVanLeusden in pull request [16553](https://github.com/magento/magento2/pull/16553)*. + * Added language translation capability for labels in the Braintree, Multishipping, and PayPal modules. *Fix submitted by Rahul Kachhadiya in pull request [15371](https://github.com/magento/magento2/pull/15371)*. + * Added language translation capability for message strings in `app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php` and `app/code/Magento/AdminNotification/i18n/en_US.csv`. *Fix submitted by Yogesh Suhagiya in pull request [15333](https://github.com/magento/magento2/pull/15333)*. ### UI + * The `clickableOverlay` option now works as expected, which improves the performance of modal popups. *Fix submitted by virtua-pmakowski in pull request [15172](https://github.com/magento/magento2/pull/15172)*. [GitHub-7399](https://github.com/magento/magento2/issues/7399) + * Customers can now place orders from grouped products where the quantity of subproducts is less than one. *Fix submitted by Valerij Ivashchenko in pull request [14752](https://github.com/magento/magento2/pull/14752)*. [GitHub-14692](https://github.com/magento/magento2/issues/14692) + * Footers now behave as expected when displaying Magento on a mobile device. *Fix submitted by Chirag Matholiya in pull request [15353](https://github.com/magento/magento2/pull/15353)*. [GitHub-15118](https://github.com/magento/magento2/issues/15118) + * The pagination of customer group prices in Advanced Pricing when viewed on the Admin now works as expected. *Fix submitted by Dmytro Cheshun in pull request [15614](https://github.com/magento/magento2/pull/15614)*. [GitHub-15210](https://github.com/magento/magento2/issues/15210) + * Magento now displays a caret icon as expected when a user hovers his mouse over a navigation category on a storefront. *Fix submitted by Tejash Kumbhare in pull request [16082](https://github.com/magento/magento2/pull/16082)*. [GitHub-15220](https://github.com/magento/magento2/issues/15220) + * 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. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16477](https://github.com/magento/magento2/pull/16477)*. [GitHub-14593](https://github.com/magento/magento2/issues/14593) + * The alignment **Title** and **Items** on the left bar has been corrected. *Fix submitted by Rafael Corrêa Gomes in pull request [16984](https://github.com/magento/magento2/pull/16984)*. + * The black color coding standard has been changed from `color: #000;` to `color: @color-black;`. *Fix submitted by Chirag Matholiya in pull request [17019](https://github.com/magento/magento2/pull/17019)*. + * The white color coding standard has been changed from `color: #fff;` to `color: @color-white;`. *Fix submitted by Chirag Matholiya in pull request [16903](https://github.com/magento/magento2/pull/16903)*. + * Minor issues with the dynamically defined ``$filter`` property and missing throws to PHPDocs for methods in the UI export converter classes have been corrected. *Fix submitted by Dmytro Cheshun in pull request [15694](https://github.com/magento/magento2/pull/15694)*. + * The `ClassMagento\Ui\Component\Control\ActionPool` constructor and `getConfiguration()` in the UI module are now invoked with the correct number of parameters. *Fix submitted by Marcel Hauri in pull request [15512](https://github.com/magento/magento2/pull/15512)*. + * Unneeded JavaScript was removed from `logout.phtml` and replaced with a new JavaScript component. *Fix submitted by Nimesh Patel in pull request [15301](https://github.com/magento/magento2/pull/15301)* + * Page wrapper CSS has been moved from media query to `.page-wrapper`. *Fix submitted by Vishal Gelani in pull request [15416](https://github.com/magento/magento2/pull/15416)*. + * The `font-size` variable has been updated and standardized. *Fix submitted by Vishal Gelani in pull request [15421](https://github.com/magento/magento2/pull/15421)*. + * Layout arguments now support for the `const` type. *Fix submitted by Igor Vitol in pull request [15058](https://github.com/magento/magento2/pull/15058)*. + * Button definitions have been moved to the new `buttons.js` file. *Fix submitted by Jisse Reitsma in pull request [15194](https://github.com/magento/magento2/pull/15194)*. + * Overlay issues with the mini cart have been resolved. Previously, if you logged in as a customer, then clicked on the mini cart icon and then the Account menu, the mini cart overlaid the Account menu. *Fix submitted by Arthur James in pull request [14963](https://github.com/magento/magento2/pull/14963)*. + * Magento now supports multiple `ui_components` with layout type `tabs` on a page. Previously, the second UI component failed to render, and Magento displayed this error, `Element with ID 'tabs_nav' already exists`. *Fix submitted by Freek Vandeursen in pull request [14742](https://github.com/magento/magento2/pull/14742)*. + * The order of style groups for mobile devices has been corrected. [GitHub-14476](https://github.com/magento/magento2/issues/14476) + * Dynamic data rows no longer fail due to a read operation after a delete condition. Previously, Magento threw an undefined JavaScript error. *Fix submitted by Chirag Matholiya in pull request [15840](https://github.com/magento/magento2/pull/15840)*. [GitHub-911](https://github.com/magento-engcom/msi/issues/911) ### URL rewrites + * Categories of the Main menu in the different store view are now updated when Varnish is enabled. + * URL key values are now derived from the default value set on the default store. Previously, Magento derived the product URL key value from the product name on storeview level. + * 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 in pull request [13397](https://github.com/magento/magento2/pull/13397)*. [GitHub-13296](https://github.com/magento/magento2/issues/13296) + * An unnecessary parameter has been removed from `_addProductLinkBlock()`. *Fix submitted by Saurabh Parekh in pull request [15891](https://github.com/magento/magento2/pull/15891)*. + * Template files have been refactored to follow Magento coding standards. *Fix submitted by Nimesh Patel in pull request [15422](https://github.com/magento/magento2/pull/15422)*. [GitHub-15356](https://github.com/magento/magento2/issues/15356) + * Undefined mixin parameters are now defined and variable scope has been improved in `lib/web/css/source/lib/_icons.less`, `lib/web/css/source/lib/_pages.less`, and `lib/web/css/source/lib/_utilities.less`. *Fix submitted by Prince Patel in pull request [17097](https://github.com/magento/magento2/pull/17097)*. + * Magento now removes URL rewrites as expected after you delete a CMS page through the API or in the `crontab` area. *Fix submitted by Roman in pull request [14751](https://github.com/magento/magento2/pull/14751)*. + * Main menu categories in different store views are now updated as expected when Varnish is enabled. ### Visual Merchandiser + * Magento now maintains manual sort order and adds newly assigned products to the top of the products list. Previously, Magento reset the manual sort order and sorted products by ID. + * Saving a product no longer reverts the selected sort order for a category. Previously, after a merchant saved a product, Magento reverted the sort order that defined the display of products in that category from the defined sort order to an order defined by product ID. ### Vertex + * The Gross Amount and Tax Amount columns in the Transaction Details Report file now include price and tax for products as expected. ### Wishlist + * Incorrect return type hinting in DocBlocks has been corrected for several methods in the Wishlist module. *Fix submitted by Yaroslav Rogoza in pull request [15854](https://github.com/magento/magento2/pull/15854)*. + * Removed an unnecessary parameter from the `toHtml()` method in `Wishlist/view/frontend/templates/item/list.phtml`. *Fix submitted by Yaroslav Rogoza in pull request [16023](https://github.com/magento/magento2/pull/16023)*. + * Magento no longer thows errors when you log in using the wishlist URL. *Fix submitted by Oleksandr Kravchuk in pull request [16386](https://github.com/magento/magento2/pull/16386)*. + * Magento no longer removes a product from the wishlist when you update a wishlist item. *Fix submitted by Chitoraga Eduard in pull request [16372](https://github.com/magento/magento2/pull/16372)*. + * Magento now passes empty arrays (instead of null values) into the DataObject constructor. Previously, a null value was passed, which caused a fatal error. *Fix submitted by Abhishek Jakhotiya in pull request [16220](https://github.com/magento/magento2/pull/16220)*. + * The `\Magento\Wishlist\CustomerData\Wishlist::getImageData()` method DocBlock now correctly indicates that the method returns an array. *Fix submitted by Yaroslav Rogoza in pull request [15718](https://github.com/magento/magento2/pull/15718)*. + * Magento now displays the correct product image for the selected configurable product variant in the My Wishlist sidebar. Previously, Magento always displayed the image associated with the default configurable product in the My Wishlist sidebar. *Fix submitted by kishanpatadia in pull request [15477](https://github.com/magento/magento2/pull/15477)*. diff --git a/guides/v2.2/release-notes/ReleaseNotes2.2.7CE.md b/guides/v2.2/release-notes/ReleaseNotes2.2.7CE.md index 1267eee9fee..9c8d2312cfc 100644 --- a/guides/v2.2/release-notes/ReleaseNotes2.2.7CE.md +++ b/guides/v2.2/release-notes/ReleaseNotes2.2.7CE.md @@ -47,25 +47,31 @@ This release includes improvements to general usability of the core code plus en #### General improvements + * 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 from the Google Tag Manager. #### Wishlist + * Customers can now choose which wishlist to add a product to when adding products to the wishlist from the shopping cart. + * Products disabled in the Admin no longer appear in storefront wishlists. Previously, disabled products still appeared in the storefront wishlist, although when a customer clicked on a disabled product, Magento correctly returned “page not found”. + * Magento now displays a success message when a customer successfully updates a wishlist. + * Magento now displays the correct options when you click on **View Details** for a product with configurable options. Previously, Magento displayed the image for the parent product. [GitHub-8168](https://github.com/magento/magento2/issues/8168) ### Shipping + * The Magento UPS module has been updated to support new UPS API endpoints. ### Magento Functional Test Framework (MFTF) @@ -77,12 +83,15 @@ This release includes improvements to general usability of the core code plus en Highlights of community contributions include these fixes: + * The email server no longer throws an exception when a customer places an order using a PayPal payment method. Previously, when a customer checked out using PayPal, Magento placed the order, but the email server threw an exception. Thanks to community member [Jason Woods](https://github.com/driskell)! + * You can now use REST to add a configurable product to a shopping cart without creating a duplicate product entry. Thanks to community member [zamboten](https://github.com/zamboten)! [GitHub-15028](https://github.com/magento/magento2/issues/15028) + * The price range displayed for bundle products now shows only valid prices. Previously, Magento displayed special prices that had expired, even though the price in the customization and summary area was correct. Thanks to community member [Riccardo Tempesta](https://github.com/phoenix128)! [GitHub-15457](https://github.com/magento/magento2/issues/15457) ## Fixes @@ -92,531 +101,681 @@ In addition to security enhancements, this release contains the following functi ### Installation, setup, and 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]({{ page.baseurl }}/install-gde/install/cli/install-cli-backup.html) for more information on backup strategies. + * Customer attribute management issues that merchants experienced after upgrading to Magento 2.2.6 have been resolved. Previously, after upgrading their stores to Magento 2.2.6, merchants could not create and save a new multiselect or dropdown customer custom attribute, and existing customer attributes no longer appeared for editing within the customer's account on the storefront. + * Fixed an issue with the shared configuration settings in `app/etc/config.php` that caused `recursion detected` errors during deployment. + * 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. *Fix submitted by [Jay Ghosh](https://github.com/jayankaghosh) in pull request [15335](https://github.com/magento/magento2/pull/15335)*. [GitHub-13480](https://github.com/magento/magento2/issues/13480) + * You can now filter the customer grid without inadvertently triggering a next-page Ajax call. Previously, when you created an order from the Orders page and tried to filter the customer list, Magento did not filter the list, and displayed the next page of customer entries. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [17870](https://github.com/magento/magento2/pull/17870)*. [GitHub-17789](https://github.com/magento/magento2/issues/17789) + * The `bin/magento` command now works as expected when Magento is not installed. Previously, Magento displayed this error, `Command line user does not have read and write permissions on generated directory. Please address this issue before using Magento command line.` + * Magento no longer throws an error when loading configuration data while running the `setup:di:compile` command. Previously, Magento threw an error when loading configuration data before Magento was installed because no store-specific or website-specific configuration data was available. (Store and website data is available only after Magento is installed.) *Fix submitted by [Marcel](https://github.com/mimarcel) in pull request [13649](https://github.com/magento/magento2/pull/13649)*. + * You can now set a custom `frontend_model` value in `system.xml` if the name of the module you're using contains an underscore. *Fix submitted by [Ben Tideswell](https://github.com/bentideswell) in pull request [14397](https://github.com/magento/magento2/pull/14397)*. + * Performance of the `setup:upgrade` step of the update process has been improved for installations containing many orders (greater than 100,000). *Fix submitted by [Aurélien Lavorel](https://github.com/AurelienLavorel) in pull request [16570](https://github.com/magento/magento2/pull/16570)*. + * You can now complete `setup:install` for installations running an authenticated Redis instance for cache configuration. Previously, Magento did not read the Redis cache options in `env.php` as expected, although the Redis session password configuration worked as expected. *Fix submitted by [Guillaume Giordana](https://github.com/guillaumegiordana) in pull request [17078](https://github.com/magento/magento2/pull/17078)*. + * You can now replace the transaction trace driver for the Profiler (`app/bootstrap.php`). For example, with this change you could replace the default profiler with the OpenTracing API, which can then use its own exporters to express the code to the CNCF Jaeger project. This in turn supports a more granular view of application transactions. *Fix submitted by [Andrew Howden](https://github.com/andrewhowdencom) in pull request [15171](https://github.com/magento/magento2/pull/15171)*. ### Bundle products + * Magento now sorts bundle summaries according to the criteria set in the Admin. + * The price range displayed for bundle products now shows only valid prices. Previously, Magento displayed special prices that had expired, even though the price in the customization and summary area was correct. *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [15535](https://github.com/magento/magento2/pull/15535)*. [GitHub-15457](https://github.com/magento/magento2/issues/15457) ### CAPTCHA + * CAPTCHA code has been refactored to eliminate unnecessary multiple conditions. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17203](https://github.com/magento/magento2/pull/17203)*. ### Cart and checkout + * Customers can no longer place orders for out-of-stock products. + * Magento no longer displays an undefined string on the Order Summary page. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [17526](https://github.com/magento/magento2/pull/17526)*. [GitHub-17492](https://github.com/magento/magento2/issues/17492) + * 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 [17877](https://github.com/magento/magento2/pull/17877)*. [GitHub-17851](https://github.com/magento/magento2/issues/17851) + * Magento no longer unchecks **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 the payment step if the shipping address was updated. *Fix submitted by [Eduard Chitoraga](https://github.com/eduard13) in pull request [17593](https://github.com/magento/magento2/pull/17593)*. [GitHub-14819](https://github.com/magento/magento2/issues/14819) + * 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. + * Magento now populates the **Default Billing** address field with the shipping address when a customer selects **Save in address book** during checkout. Previously, Magento saved the address, but did not populate the default billing address field as expected. + * Third-party modules can now perform actions after `totals` calculation. (Modules can perform additional actions by adding `.done`, `.fail`, or `.always` tasks to the request promise by creating a JavaScript mixin for the totals processor.) *Fix submitted by [Navarr Barnier](https://github.com/navarr) in pull request [17127](https://github.com/magento/magento2/pull/17127)*. + * Magento no longer adds an empty method to the cart summary. Previously, when the method html was empty, an empty list item resulted, which subsequently resulted in an extra margin of 20px because of default styling. *Fix submitted by [Arnoud Beekman](https://github.com/arnoudhgz) in pull request [17189](https://github.com/magento/magento2/pull/17189)*. + * The sidebars for the wishlist on the catalog, my account, and checkout pages now render special characters correctly. Previously, the browser displayed `™` instead of rendered special characters on these pages. *Fix submitted by [deepjoshi94](https://github.com/deepjoshi94) in pull request [17070](https://github.com/magento/magento2/pull/17070)*. + * The `disabled attribute` has been removed from the region list. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [16955](https://github.com/magento/magento2/pull/16955)*. + * The Admin checkout agreement controllers have been refactored to remove the use of `ObjectManager`. *Fix submitted by [AnshuMishra17](https://github.com/AnshuMishra17) in pull request [16505](https://github.com/magento/magento2/pull/16505)*. ### Catalog + * Magento now displays the product name under the product image on the product page. + * Magento now alerts you to an error when a merchant tries to save a product without completed required fields. + * A previous fix for a gallery template issue that was inadvertently reverted has been restored. *Fix submitted by [gwharton](https://github.com/gwharton) in pull request [16594](https://github.com/magento/magento2/pull/16594)*. [GitHub-15009](https://github.com/magento/magento2/issues/15009) + * Parent theme image height settings (specified in `view.xml`) no longer override the height settings assigned to individual images. *Fix submitted by [Tommy Quissens](https://github.com/quisse) in pull request [14537](https://github.com/magento/magento2/pull/14537)*. [GitHub-12250](https://github.com/magento/magento2/issues/12250) + * Magento now maintains product image roles as expected after upgrade. Previously, image roles randomly disappeared from product pages after upgrade. *Fix submitted by [Sam Butler Thompson](https://github.com/Scarraban) in pull request [15606](https://github.com/magento/magento2/pull/15606)*. [GitHub-10687](https://github.com/magento/magento2/issues/10687) + * You can now save attributes for a configurable product after a validation error occurs. Previously, when you added a new product with an image, if a validation error occurred during the product save, Magento removed the images from the **Images and Videos** section. If you subsequently fixed the validation conflict and attempted to save the product again, Magento threw a descriptive error. *Fix submitted by [Oleksandr Kravchuk](https://github.com/swnsma) in pull request [16597](https://github.com/magento/magento2/pull/16597)*. [GitHub-7372](https://github.com/magento/magento2/issues/7372), [GitHub-13177](https://github.com/magento/magento2/issues/13177) + * You can now add a product with a price of zero (0) to a wishlist. *Fix submitted by [sv3n](https://github.com/sreichel) in pull request [17395](https://github.com/magento/magento2/pull/17395)*. [GitHub-16479](https://github.com/magento/magento2/issues/16479) + * You can now save a title for a product from the **Product** > **Customizable Options** page. *Fix submitted by [Madhumala Krishnan](https://github.com/Madhumalak) in pull request [15357](https://github.com/magento/magento2/pull/15357)*. [GitHub-6305](https://github.com/magento/magento2/issues/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 [Burlacu Vasilii](https://github.com/vasilii-b) in pull request [17540](https://github.com/magento/magento2/pull/17540)*. [GitHub-15041](https://github.com/magento/magento2/issues/15041) + * The Catalog Products List widget can now display products on the storefront that have specific attributes applied to the default Global scope. + * Magento now displays a descriptive error message when a customer tries to order a product in increments that are not allowed. + * Magento now applies tier prices as expected after a customer logs into their shopping cart. [GitHub-14255](https://github.com/magento/magento2/issues/14255) + * Magento no longer switches from table to list view on the product page when you add a product from the wishlist to the shopping cart. -* Customers can now add a product to their shopping cart when their session has expired. Previously, Magento did not add the -product, and hung indefinitely while trying to add the product. + +* Customers can now add a product to their shopping cart when their session has expired. Previously, Magento did not add the product, and hung indefinitely while trying to add the product. + * A merchant can now successfully create and save configurable products from the Admin in a multisite deployment. Previously, when a merchant created a configurable product with customizable options, Magento set its `has_options` and `required_options`  (in the `catalog_product_entity` table) to 0, and the merchant needed to click **Save** again to correctly add the product. + * The `PUT rest/all/V1/categories/:categoryId` endpoint now requires the `name` field. + * Special price expressions now work as expected. Previously, `catalog_product_price` did not generate correct price data. *Fix submitted by Dmitry Chukhnov in pull request [16510](https://github.com/magento/magento2/pull/16510)*. ### Catalog rule + * `date` can now be used as a condition for Catalog Price rules. *Fix submitted by [Glenn Cheng](https://github.com/GlennCheng) in pull request [16855](https://github.com/magento/magento2/pull/16855)*. ### Clean up and minor refactoring + * Problems with the responsive layout `app/design/frontend/Magento/luma/Magento_Theme/web/css/source/_module.less` have been resolved. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17217](https://github.com/magento/magento2/pull/17217)*. + * The `text-align` for the `` element of the Subtotal column in the creditmemo email has been corrected. *Fix submitted by [Tomash Khamlai](https://github.com/TomashKhamlai) in pull request [17153](https://github.com/magento/magento2/pull/17153)*. + * The invalid `knockoutjs` data binding in Braintree PayPal has been fixed. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [17236](https://github.com/magento/magento2/pull/17236)*. + * The overall readability of Shipping Methods sorting has been improved by replacing sort callbacks. *Fix submitted by [Lukasz Bajsarowicz](https://github.com/lbajsarowicz) in pull request [16788](https://github.com/magento/magento2/pull/16788)*. + * Files in `/lib` have been cleaned up. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17103](https://github.com/magento/magento2/pull/17103)*. + * Unused IDs in `app/code/Magento/Checkout/view/frontend/web/template/billing-address/form.html` and `app/code/Magento/Checkout/Test/Mftf/Section/CheckoutPaymentSection.xml` have been removed. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [17291](https://github.com/magento/magento2/pull/17291)*. + * Removed unnecessary translation of HTML tags in `app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Config/YearRange.php` and `app/code/Magento/Catalog/i18n/en_US.csv`. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [17291](https://github.com/magento/magento2/pull/17291)*. + * Minor CSS issues in `lib/internal/Magento/Framework/View/Test/Unit/Url/_files/sourceImport.css` have been fixed. *Fix submitted by [Arnoud Beekman](https://github.com/arnoudhgz) in pull request [17365](https://github.com/magento/magento2/pull/17365)*. + * Duplicate code in `app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js` has been removed. *Fix submitted by [Arnoud Beekman](https://github.com/arnoudhgz) in pull request [17505](https://github.com/magento/magento2/pull/17505)*. + * The code generator for Proxy is no longer missing `returnType` in the method information definition. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [17552](https://github.com/magento/magento2/pull/17552)*. + * The `