diff --git a/.github/ISSUE_TEMPLATE/BUG.md b/.github/ISSUE_TEMPLATE/BUG.md index 8958d17dafc..682d9318bdd 100644 --- a/.github/ISSUE_TEMPLATE/BUG.md +++ b/.github/ISSUE_TEMPLATE/BUG.md @@ -14,8 +14,8 @@ about: Create an issue about a bug on the devdocs website 1. First Step -2. Second Step -3. Etc. +1. Second Step +1. Etc. ## Expected result diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f95ad9f216e..25dbe1ad19c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,7 +6,7 @@ on: - master - develop paths: - - '*.md' + - '**.md' jobs: test: diff --git a/.gitignore b/.gitignore index 9df979ab793..6d9a8a4e818 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ _algolia_api_key /mbi/ /page-builder/ /page-builder-migration/ +/page-builder-types/ /guides/m1x/ /mftf/ diff --git a/_checks/styles/style-rules-prod b/_checks/styles/style-rules-prod index fe4d913febe..1b2d691f00c 100644 --- a/_checks/styles/style-rules-prod +++ b/_checks/styles/style-rules-prod @@ -22,7 +22,7 @@ rule 'MD025' exclude_rule 'MD026' exclude_rule 'MD027' exclude_rule 'MD028' -exclude_rule 'MD029' +rule 'MD029' exclude_rule 'MD030' exclude_rule 'MD031' exclude_rule 'MD032' diff --git a/_data/toc/graphql.yml b/_data/toc/graphql.yml index 78c35b49d0d..d11e19f483d 100644 --- a/_data/toc/graphql.yml +++ b/_data/toc/graphql.yml @@ -234,6 +234,9 @@ pages: - label: ProductInterface attributes url: /graphql/product/product-interface.html + - label: CategoryInterface attributes + url: /graphql/product/category-interface.html + - label: CustomizableOptionInterface url: /graphql/product/customizable-option-interface.html diff --git a/_includes/backward-incompatible-changes/commerce/2.2.9-2.2.10.md b/_includes/backward-incompatible-changes/commerce/2.2.9-2.2.10.md new file mode 100644 index 00000000000..adc8020f535 --- /dev/null +++ b/_includes/backward-incompatible-changes/commerce/2.2.9-2.2.10.md @@ -0,0 +1,6 @@ +### ({{ site.data.var.ee }} only) Class API membership changes {#ee-class-api-membership-229-2210} + +| What changed | How it changed | +| --- | --- | +| Magento\CustomerCustomAttributes\Block\Adminhtml\Customer\ValidationMessages | Class was added. | +| Magento\Banner\Model\Banner | Class was added. | \ No newline at end of file diff --git a/_includes/backward-incompatible-changes/commerce/2.3.2-2.3.3.md b/_includes/backward-incompatible-changes/commerce/2.3.2-2.3.3.md new file mode 100644 index 00000000000..3abf9e75b4d --- /dev/null +++ b/_includes/backward-incompatible-changes/commerce/2.3.2-2.3.3.md @@ -0,0 +1,6 @@ +### {{ site.data.var.ee }} only changes in classes {#ee-class-232-233} + +| What changed | How it changed | +| --- | --- | +| Magento\SalesArchive\Block\Adminhtml\Sales\Order\View\Buttons::\_\_construct | [public] Method parameter typing changed. | +| Magento\Rma\Block\Adminhtml\Order\View\Buttons::\_\_construct | [public] Method parameter typing changed. | diff --git a/_includes/backward-incompatible-changes/open-source/2.2.9-2.2.10.md b/_includes/backward-incompatible-changes/open-source/2.2.9-2.2.10.md new file mode 100644 index 00000000000..d8deb91e9ee --- /dev/null +++ b/_includes/backward-incompatible-changes/open-source/2.2.9-2.2.10.md @@ -0,0 +1,26 @@ +### Class changes {#class-229-2210} + +| What changed | How it changed | +| --- | --- | +| Magento\Tax\Block\Adminhtml\Rate\Form::\_construct | [protected] Method return typing changed. | +| Magento\Sales\Block\Adminhtml\Items\Column\Name::truncateString | [public] Method parameter typing removed. | +| Magento\Review\Block\Customer\View::\_toHtml | [protected] Method return typing changed. | +| Magento\Eav\Model\Entity\Attribute\Source\Store::getAllOptions | [public] Method return typing changed. | +| Magento\Directory\Model\Config\Source\Country\Full::toOptionArray | [public] Method return typing changed. | +| Magento\Config\Console\Command\ConfigSetCommand::execute | [protected] Method return typing changed. | +| Magento\Reports\Block\Adminhtml\Grid::\_\_construct | [public] Method has been added. | +| Magento\Eav\Model\ResourceModel\Entity\Attribute::\_beforeDelete | [protected] Method has been added. | +| Magento\Eav\Model\Entity\Attribute\Source\Store::getAllOptions | [public] Added optional parameter(s). | +| Magento\Directory\Model\ResourceModel\Country::\_\_construct | [public] Method has been added. | +| Magento\Directory\Model\Config\Source\Country\Full::toOptionArray | [public] Added optional parameter(s). | + +### Interface changes {#interface-229-2210} + +| What changed | How it changed | +| --- | --- | +| Magento\Vault\Api\PaymentTokenManagementInterface::getListByCustomerId | [public] Method return typing changed. | +| Magento\Sales\Api\CreditmemoCommentRepositoryInterface::getList | [public] Method return typing changed. | +| Magento\Sales\Api\CreditmemoManagementInterface::getCommentsList | [public] Method return typing changed. | +| Magento\Sales\Api\OrderManagementInterface::getCommentsList | [public] Method return typing changed. | +| Magento\Sales\Api\OrderStatusHistoryRepositoryInterface::getList | [public] Method return typing changed. | +| Magento\Sales\Api\Data\CreditmemoInterface::getComments | [public] Method return typing changed. | \ No newline at end of file diff --git a/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md b/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md new file mode 100644 index 00000000000..f32c5be5e01 --- /dev/null +++ b/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md @@ -0,0 +1,53 @@ +### Class changes {#class-232-233} + +| What changed | How it changed | +| --- | --- | +| Magento\Framework\Mail\Template\TransportBuilder::getTransport | [public] Method return typing changed. | +| Magento\Framework\Mail\Template\TransportBuilder::getTemplate | [protected] Method return typing changed. | +| Magento\Framework\DataObject\Copy::copyFieldsetToTarget | [public] Method return typing changed. | +| Magento\Framework\Data\Collection\AbstractDb::\_renderFiltersBefore | [protected] Method return typing changed. | +| Magento\Tax\Block\Adminhtml\Rate\Form::\_construct | [protected] Method return typing changed. | +| Magento\Swatches\Block\Product\Renderer\Configurable::getHtmlOutput | [protected] Method return typing changed. | +| Magento\Sales\Model\Order\Config::getStateDefaultStatus | [public] Method return typing changed. | +| Magento\Sales\Model\Order\Config::getStatusFrontendLabel | [public] Method return typing changed. | +| Magento\Sales\Block\Order\History::\_construct | [protected] Method return typing changed. | +| Magento\Sales\Block\Order\History::\_prepareLayout | [protected] Method return typing changed. | +| Magento\Sales\Block\Order\Recent::\_construct | [protected] Method return typing changed. | +| Magento\Sales\Block\Order\Recent::\_toHtml | [protected] Method return typing changed. | +| Magento\Sales\Block\Adminhtml\Order\View::\_\_construct | [public] Method parameter typing changed. | +| Magento\Review\Block\Customer\View::\_toHtml | [protected] Method return typing changed. | +| Magento\Newsletter\Model\Subscriber::received | [public] Method return typing changed. | +| Magento\Newsletter\Block\Adminhtml\Problem::\_construct | [protected] Method return typing changed. | +| Magento\Newsletter\Block\Adminhtml\Problem::getUnsubscribeButtonHtml | [public] Method return typing changed. | +| Magento\Newsletter\Block\Adminhtml\Problem::getDeleteButtonHtml | [public] Method return typing changed. | +| Magento\GraphQl\Controller\GraphQl::dispatch | [public] Method return typing changed. | +| Magento\Config\Console\Command\ConfigSetCommand::execute | [protected] Method return typing changed. | +| Magento\Checkout\Block\Cart\Totals::\_\_construct | [public] Method parameter typing changed. | +| Magento\CatalogRule\Model\Indexer\IndexBuilder::getActiveRules | [protected] Method return typing changed. | +| Magento\CatalogRule\Model\Indexer\IndexBuilder::getAllRules | [protected] Method return typing changed. | +| Magento\Catalog\Model\ResourceModel\Product::getCategoryCollection | [public] Method return typing changed. | +| Magento\Catalog\Model\Product\Visibility::getVisibleInCatalogIds | [public] Method return typing changed. | +| Magento\Catalog\Model\Product\Visibility::getVisibleInSearchIds | [public] Method return typing changed. | +| Magento\Catalog\Model\Product\Visibility::getVisibleInSiteIds | [public] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::\_construct | [protected] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::\_prepareCollection | [protected] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::\_addColumnFilterToCollection | [protected] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::\_prepareColumns | [protected] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::\_prepareMassaction | [protected] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::getGridUrl | [public] Method return typing changed. | +| Magento\Catalog\Block\Adminhtml\Product\Grid::getRowUrl | [public] Method return typing changed. | +| Magento\Backend\Block\Store\Switcher::\_construct | [protected] Method return typing changed. | +| Magento\Wishlist\Model\ResourceModel\Item\Collection::\_renderFiltersBefore | [protected] Method has been added. | +| Magento\Sales\Model\Order\Address::beforeSave | [public] Method has been added. | +| Magento\Reports\Block\Adminhtml\Grid::\_\_construct | [public] Method has been added. | +| Magento\PageCache\Model\Config::VARNISH\_6\_CONFIGURATION\_PATH | Constant has been added. | +| Magento\Eav\Model\ResourceModel\Entity\Attribute::\_beforeDelete | [protected] Method has been added. | +| Magento\Directory\Model\ResourceModel\Country::\_\_construct | [public] Method has been added. | +| Magento\Backend\Model\Url::setScope | [public] Method has been added. | + +### Interface changes {#interface-232-233} + +| What changed | How it changed | +| --- | --- | +| Magento\Vault\Api\PaymentTokenManagementInterface::getListByCustomerId | [public] Method return typing changed. | + diff --git a/_includes/cloud/backup-db.md b/_includes/cloud/backup-db.md index c06fabb6b58..1c6a17dee17 100644 --- a/_includes/cloud/backup-db.md +++ b/_includes/cloud/backup-db.md @@ -3,33 +3,33 @@ We recommend creating a backup of your project before an upgrade. Use the follow {:.procedure} To back up your Integration environment database and code: -1. Create a local backup of the remote database. +1. Create a local backup of the remote database. - ```bash - magento-cloud db:dump - ``` + ```bash + magento-cloud db:dump + ``` - {: .bs-callout-info } - The `magento-cloud db:dump` command runs the [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) command with the `--single-transaction` flag, which allows you to back up your database without locking the tables. + {: .bs-callout-info } + The `magento-cloud db:dump` command runs the [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) command with the `--single-transaction` flag, which allows you to back up your database without locking the tables. -1. Back up code and media. +1. Back up code and media. - ```bash - php bin/magento setup:backup --code [--media] - ``` + ```bash + php bin/magento setup:backup --code [--media] + ``` - Optionally, you can omit `[--media]` if you have a large number of static files that are already in source control. + Optionally, you can omit `[--media]` if you have a large number of static files that are already in source control. {:.procedure} To back up your Staging or Production environment database before deploying: -1. Use SSH to log in to the remote server. +1. Use SSH to log in to the remote server. -2. Create a database dump. +1. Create a database dump. - ```bash - vendor/bin/ece-tools db-dump - ``` + ```bash + vendor/bin/ece-tools db-dump + ``` -- We recommend setting the application in maintenance mode before doing a database dump in Production environments. -- This creates an `dump-.sql.gz` archive file in your local project directory. See [Snapshot and backup management]({{ site.baseurl }}/guides/v2.2/cloud/project/project-webint-snap.html#db-dump). +- We recommend setting the application in maintenance mode before doing a database dump in Production environments. +- This creates an `dump-.sql.gz` archive file in your local project directory. See [Snapshot and backup management]({{ site.baseurl }}/guides/v2.2/cloud/project/project-webint-snap.html#db-dump). diff --git a/_includes/cloud/enable-ssh.md b/_includes/cloud/enable-ssh.md index c993a9683b1..fdc415af44a 100644 --- a/_includes/cloud/enable-ssh.md +++ b/_includes/cloud/enable-ssh.md @@ -2,8 +2,8 @@ You must create an SSH key pair on every machine and workspace you and your team The SSH keys require the following: -* Set up SSH keys as the [Magento file system owner]({{ page.baseurl }}/cloud/before/before-workspace-file-sys-owner.html). -* Create the keys using the email address used for the GitHub account. +* Set up SSH keys as the [Magento file system owner]({{ page.baseurl }}/cloud/before/before-workspace-file-sys-owner.html). +* Create the keys using the email address used for the GitHub account. For more information on SSH keys, see the following: @@ -33,8 +33,8 @@ If you do not have SSH keys, you need to generate the keys for adding to your Ma If you already have SSH keys, continue to: -* [Add a public SSH key to your Magento account](#ssh-add-to-account) section -* [Add your SSH key to your GitHub account](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/) +* [Add a public SSH key to your Magento account](#ssh-add-to-account) section +* [Add your SSH key to your GitHub account](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/) ## Create a new SSH key pair {#ssh-create-new-key-pair} @@ -43,34 +43,34 @@ Use the `ssh-keygen` command to create an SSH key pair. `ssh-keygen` is typicall {:.procedure} To create an SSH key pair: -1. The command syntax follows, entering the email used for your GitHub account: +1. The command syntax follows, entering the email used for your GitHub account: - ```bash - ssh-keygen -t rsa - ``` + ```bash + ssh-keygen -t rsa + ``` - GitHub also uses the key length `-b 4096` in the command. Follow the prompts to complete the key. + GitHub also uses the key length `-b 4096` in the command. Follow the prompts to complete the key. -1. When prompted to "Enter a file in which to save the key," press **Enter** to save the file to the default location. The prompt displays the location. +1. When prompted to "Enter a file in which to save the key," press **Enter** to save the file to the default location. The prompt displays the location. -1. When prompted to enter a secure passphrase, enter a phrase to use like a password. Make note of this passphrase. You may be requested to enter it depending on tasks you complete using a terminal during development. +1. When prompted to enter a secure passphrase, enter a phrase to use like a password. Make note of this passphrase. You may be requested to enter it depending on tasks you complete using a terminal during development. -1. After creating the SSH key pair, start the ssh-agent: +1. After creating the SSH key pair, start the ssh-agent: - For Mac or Linux: + For Mac or Linux: - ```bash - eval "$(ssh-agent -s)" - ``` + ```bash + eval "$(ssh-agent -s)" + ``` - For Mac, you can edit the `~/.ssh/config` file to automatically load keys into the ssh-agent and store passphrases in your keychain. + For Mac, you can edit the `~/.ssh/config` file to automatically load keys into the ssh-agent and store passphrases in your keychain. - ```conf - Host * - AddKeysToAgent yes - UseKeychain yes - IdentityFile ~/.ssh/id_rsa - ``` + ```conf + Host * + AddKeysToAgent yes + UseKeychain yes + IdentityFile ~/.ssh/id_rsa + ``` For Windows: @@ -78,21 +78,21 @@ To create an SSH key pair: eval $(ssh-agent -s) ``` -1. Add the SSH key to the ssh-agent. If you used a different name for the key file name, replace `id_rsa` with that file name. +1. Add the SSH key to the ssh-agent. If you used a different name for the key file name, replace `id_rsa` with that file name. - For Mac: + For Mac: - ```bash - ssh-add -K ~/.ssh/id_rsa - ``` + ```bash + ssh-add -K ~/.ssh/id_rsa + ``` - For Windows or Linux: + For Windows or Linux: - ```shell - ssh-add ~/.ssh/id_rsa - ``` + ```shell + ssh-add ~/.ssh/id_rsa + ``` -1. [Add your SSH key to your GitHub account.](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/) The instructions include Mac, Windows, and Linux. +1. [Add your SSH key to your GitHub account.](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/) The instructions include Mac, Windows, and Linux. ### Test the SSH keys {#test} @@ -100,13 +100,13 @@ After adding the SSH keys, test the SSH connection to GitHub: 1. In the terminal, enter the following command: - ```bash - ssh -T git@github.com - ``` + ```bash + ssh -T git@github.com + ``` -2. You may see a warning that the authenticity of the host can't be established followed by an RSA fingerprint. Enter `yes` to continue. +1. You may see a warning that the authenticity of the host can't be established followed by an RSA fingerprint. Enter `yes` to continue. -3. If successful, you should receive a success message. If you receive a permission denied error, see [Error: Permission denied (publickey)](https://help.github.com/articles/error-permission-denied-publickey) troubleshooting on GitHub. +1. If successful, you should receive a success message. If you receive a permission denied error, see [Error: Permission denied (publickey)](https://help.github.com/articles/error-permission-denied-publickey) troubleshooting on GitHub. ## Add a public SSH key to your Magento account {#ssh-add-to-account} @@ -120,26 +120,26 @@ You can add SSH keys to your account in any of the following ways: To add an SSH key using the CLI: 1. Open a terminal application on your local. -2. If you haven't done so already, log in (or switch to) the [Magento file system owner]({{ page.baseurl }}/cloud/before/before-workspace-file-sys-owner.html) to the server on which your SSH keys are located. +1. If you haven't done so already, log in (or switch to) the [Magento file system owner]({{ page.baseurl }}/cloud/before/before-workspace-file-sys-owner.html) to the server on which your SSH keys are located. -3. Log in to your project: +1. Log in to your project: - ```bash - magento-cloud login - ``` + ```bash + magento-cloud login + ``` -3. Add the key: +1. Add the key: - ```bash - magento-cloud ssh-key:add ~/.ssh/id_rsa.pub - ``` + ```bash + magento-cloud ssh-key:add ~/.ssh/id_rsa.pub + ``` #### Add a key using the Project Web Interface {#add-key-web} You will select and add your SSH public key to each environment in your account. -* Starter: Add to Master (Production) and any environments you create by branching from Master -* Pro: Add to Master Integration environment. After your Staging and Production environments are provisioned, you can add the SSH keys to those environments. +* Starter: Add to Master (Production) and any environments you create by branching from Master +* Pro: Add to Master Integration environment. After your Staging and Production environments are provisioned, you can add the SSH keys to those environments. To add an SSH key using the Project Web Interface: @@ -147,16 +147,16 @@ To add an SSH key using the Project Web Interface: If you do not already have SSH keys on that machine, see [GitHub documentation](https://help.github.com/articles/generating-an-ssh-key) to create them. -2. Login and access your project through the [Project Web Interface](https://accounts.magento.cloud). -3. In your selected branch, an icon displays if you do not have an SSH key added. +1. Login and access your project through the [Project Web Interface](https://accounts.magento.cloud). +1. In your selected branch, an icon displays if you do not have an SSH key added. ![No SSH key]({{ site.baseurl }}/common/images/cloud_ssh-key-install.png) -4. Copy and paste the content of your public SSH key in the screen. +1. Copy and paste the content of your public SSH key in the screen. ![Add SSH key]({{ site.baseurl }}/common/images/cloud_ssh-key-add.png) -5. Follow the prompts on your screen to complete the task. +1. Follow the prompts on your screen to complete the task. ## Set global Git variables diff --git a/_includes/cloud/log-in-db.md b/_includes/cloud/log-in-db.md index 18765d40dfb..2cc1f2f2d02 100644 --- a/_includes/cloud/log-in-db.md +++ b/_includes/cloud/log-in-db.md @@ -1,41 +1,41 @@ The following steps provide an example of accessing a database: -1. SSH to the integration environment. - - ```bash - magento-cloud ssh - ``` - -1. Find the database login information: - - ```bash - php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"]))->database);' - ``` - - Sample output follows: - - ```php - Array - ( - [0] => stdClass Object - ( - [username] => user - [password] => - [ip] => 192.0.2.60 - [host] => database.internal - [query] => stdClass Object - ( - [is_master] => 1 - ) - [path] => main - [scheme] => mysql - [port] => 3306 - ) - ) - ``` - -3. Use the following command to connect to the database: - - ```bash - mysql --host= --user='' --password='' --port='' --database='' - ``` +1. SSH to the integration environment. + + ```bash + magento-cloud ssh + ``` + +1. Find the database login information: + + ```bash + php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"]))->database);' + ``` + + Sample output follows: + + ```php + Array + ( + [0] => stdClass Object + ( + [username] => user + [password] => + [ip] => 192.0.2.60 + [host] => database.internal + [query] => stdClass Object + ( + [is_master] => 1 + ) + [path] => main + [scheme] => mysql + [port] => 3306 + ) + ) + ``` + +1. Use the following command to connect to the database: + + ```bash + mysql --host= --user='' --password='' --port='' --database='' + ``` diff --git a/_includes/cloud/new-project-from-template.md b/_includes/cloud/new-project-from-template.md index 47b4bdfeeaf..d569989e5de 100644 --- a/_includes/cloud/new-project-from-template.md +++ b/_includes/cloud/new-project-from-template.md @@ -1,24 +1,24 @@ 1. Access your account. You can open the email you received from Magento Cloud (accounts@magento.cloud) and click the _Access your project now_ link. Or you can log in to [your {{site.data.var.ee}} account](https://accounts.magento.cloud). -2. Click the _This project has no code yet_ link next to the Project name. +1. Click the _This project has no code yet_ link next to the Project name. ![Project without code]({{ site.baseurl }}/common/images/cloud_project_empty.png) -3. Enter a name for the project. +1. Enter a name for the project. ![Project name]({{ site.baseurl }}/common/images/cloud_project_name.png) -4. Click **Create a blank site from a template** and click **Continue**. We recommend starting with the Magento template as your initial project option. If you have an existing Magento deployment, you can later import code, extensions, themes, and data after fully deploying this base Magento code. +1. Click **Create a blank site from a template** and click **Continue**. We recommend starting with the Magento template as your initial project option. If you have an existing Magento deployment, you can later import code, extensions, themes, and data after fully deploying this base Magento code. ![Create a site using the sample Magento project]({{ site.baseurl }}/common/images/cloud_project_template.png){:width="650px"} -5. When prompted, enter your {{site.data.var.ee}} [Magento authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html) in the provided fields. You created these keys earlier in the Magento Marketplace. Enter the private and public keys and click **Finish**. +1. When prompted, enter your {{site.data.var.ee}} [Magento authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html) in the provided fields. You created these keys earlier in the Magento Marketplace. Enter the private and public keys and click **Finish**. ![Enter your authentication keys]({{ site.baseurl }}/common/images/cloud-project-magento-auth-creds.png){:width="650px"} The keys are added to the `auth.json` file in the repository `master` branch, required for all created branches and deployments. -6. Wait a few minutes while the project deploys. A status of _Pending_ displays until completed, similar to the following: +1. Wait a few minutes while the project deploys. A status of _Pending_ displays until completed, similar to the following: ![Your sample Magento project]({{ site.baseurl }}/common/images/cloud_project_template2.png){:width="650px"} -7. After the project deploys, **Success** displays next to the name of your project. \ No newline at end of file +1. After the project deploys, **Success** displays next to the name of your project. diff --git a/_includes/cloud/patch.md b/_includes/cloud/patch.md index d0b95200a19..6b4fa15d985 100644 --- a/_includes/cloud/patch.md +++ b/_includes/cloud/patch.md @@ -38,7 +38,7 @@ Back up your Integration environment database and code: magento-cloud db:dump ``` -2. Enter the following command to back up code and media: +1. Enter the following command to back up code and media: ```bash php bin/magento setup:backup --code [--media] @@ -49,13 +49,13 @@ Back up your Integration environment database and code: Back up your Staging or Production environment database before deploying to those environments: 1. [SSH to the server]({{ page.baseurl }}/cloud/env/environments-ssh.html). -2. Find the database login information: +1. Find the database login information: ```bash php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"]))->database);' ``` -3. Create a database dump: +1. Create a database dump: ```bash mysqldump -h --user= --password= --single-transaction | gzip - > /tmp/database.sql.gz @@ -66,13 +66,13 @@ Back up your Staging or Production environment database before deploying to thos Verify other changes you're going to submit to source control before you start the upgrade: 1. If you haven't done so already, change to your project root directory. -2. Enter the following command: +1. Enter the following command: ```bash git status ``` -3. If there are changes you do *not* want to submit to source control, branch or stash them now. +1. If there are changes you do *not* want to submit to source control, branch or stash them now. ### Upgrade the patch @@ -138,13 +138,13 @@ To test a general patch on your local system: composer update ``` -2. Apply the patch locally: +1. Apply the patch locally: ```bash git apply vendor/magento/magento-cloud-configuration/patches/ ``` -3. Clean the Magento cache: +1. Clean the Magento cache: ```bash php /bin/magento cache:clean @@ -152,8 +152,8 @@ To test a general patch on your local system: You can also clean the cache using the [Magento Admin](http://docs.magento.com/m2/ee/user_guide/system/cache-management.html). -4. Thoroughly test your local system to make sure the patch doesn't have unexpected side-affects. -5. After testing the patch, push it to the remote server and deploy it: +1. Thoroughly test your local system to make sure the patch doesn't have unexpected side-affects. +1. After testing the patch, push it to the remote server and deploy it: ```bash git add -A && git commit -m "Apply patch" diff --git a/_includes/comp-man/backup.md b/_includes/comp-man/backup.md index a04ebdd5475..4df6774602c 100644 --- a/_includes/comp-man/backup.md +++ b/_includes/comp-man/backup.md @@ -22,7 +22,7 @@ To back up: {:.bs-callout .bs-callout-info} We strongly recommend you do back up in the event of issues. -2. Wait while backups are created and continue with any of the following: +1. Wait while backups are created and continue with any of the following: The following page displays to confirm a successful backup. diff --git a/_includes/config/multi-site_verify.md b/_includes/config/multi-site_verify.md index 473222cbe3f..f9d0cdd5ad9 100644 --- a/_includes/config/multi-site_verify.md +++ b/_includes/config/multi-site_verify.md @@ -1,15 +1,20 @@ Unless you have DNS set up for your stores' URLs, you must add a static route to the host in your `hosts` file: 1. Locate your operating system's [`hosts` file](https://en.wikipedia.org/wiki/Hosts_(file)#Location_in_the_file_system). -2. Add the static route in the format: +1. Add the static route in the format: - french.mysite.mg - german.mysite.mg -3. Go to one of the following URLs in your browser: + ```conf + french.mysite.mg + german.mysite.mg + ``` - http://mysite.mg/admin - http://french.mysite.mg/frenchstoreview - http://german.mysite.mg/germanstoreview +1. Go to one of the following URLs in your browser: + + ```http + http://mysite.mg/admin + http://french.mysite.mg/frenchstoreview + http://german.mysite.mg/germanstoreview + ``` You're done! diff --git a/_includes/config/secure-ws-apache_step1.md b/_includes/config/secure-ws-apache_step1.md index 8544f2a8382..0d55b309cb5 100644 --- a/_includes/config/secure-ws-apache_step1.md +++ b/_includes/config/secure-ws-apache_step1.md @@ -12,7 +12,7 @@ First, see if you have the Apache `htpasswd` utility is installed as follows: If a path displays, it is installed; if the command returns no output, `htpasswd` is not installed. -2. If necessary, install `htpasswd`: +1. If necessary, install `htpasswd`: * Ubuntu: `apt-get -y install apache2-utils` * CentOS: `yum -y install httpd-tools` diff --git a/_includes/config/split-db.md b/_includes/config/split-db.md index 84fd7de3d8e..742a2410e70 100644 --- a/_includes/config/split-db.md +++ b/_includes/config/split-db.md @@ -3,14 +3,14 @@ Create checkout and OMS master databases as follows: 1. Log in to your database server as any user. -2. Enter the following command to get to a MySQL command prompt: +1. Enter the following command to get to a MySQL command prompt: ```bash mysql -u root -p ``` -3. Enter the MySQL `root` user's password when prompted. -4. Enter the following commands in the order shown to create database instances named `magento_quote` and `magento_sales` with the same usernames and passwords: +1. Enter the MySQL `root` user's password when prompted. +1. Enter the following commands in the order shown to create database instances named `magento_quote` and `magento_sales` with the same usernames and passwords: ```shell create database magento_quote; @@ -28,9 +28,9 @@ Create checkout and OMS master databases as follows: GRANT ALL ON magento_sales.* TO magento_sales@localhost IDENTIFIED BY 'magento_sales'; ``` -5. Enter `exit` to quit the command prompt. +1. Enter `exit` to quit the command prompt. -6. Verify the databases, one at a time: +1. Verify the databases, one at a time: Checkout database: diff --git a/_includes/config/split-deploy/example_build-sync.md b/_includes/config/split-deploy/example_build-sync.md index e938741f7a1..9fbe8b18129 100644 --- a/_includes/config/split-deploy/example_build-sync.md +++ b/_includes/config/split-deploy/example_build-sync.md @@ -1,8 +1,8 @@ To update your build system: 1. Log in to your build system as, or switch to, the [Magento file system owner](https://glossary.magento.com/magento-file-system-owner). -2. Change to the build system's Magento root directory. -3. Pull the changes to `app/etc/config.php` from source control. +1. Change to the build system's Magento root directory. +1. Pull the changes to `app/etc/config.php` from source control. The Git command follows: @@ -10,19 +10,19 @@ To update your build system: git pull mconfig m2.2_deploy ``` -4. Compile code: +1. Compile code: ```bash php bin/magento setup:di:compile ``` -5. After code has been compiled, generate static view files: +1. After code has been compiled, generate static view files: ```bash php bin/magento setup:static-content:deploy -f ``` -6. Check the changes into source control. +1. Check the changes into source control. The Git command follows: diff --git a/_includes/design/icon-fonts.md b/_includes/design/icon-fonts.md index 486f6b537a4..46c83b2cfe9 100644 --- a/_includes/design/icon-fonts.md +++ b/_includes/design/icon-fonts.md @@ -2,8 +2,8 @@ If you want to add your own icons, each icon will need to be in its own SVG file 1. Go to [https://icomoon.io/app/](https://icomoon.io/app/) or download this app in Chrome web store. -2. Upload your icons in SVG format into the app. +1. Upload your icons in SVG format into the app. -3. Specify desired font names and specify the Unicode characters to map the icons. Setting the icons to Private User Area will disable screen-readers or other accessibility tools to read your icon's characters (read "Unicode" section here). +1. Specify desired font names and specify the Unicode characters to map the icons. Setting the icons to Private User Area will disable screen-readers or other accessibility tools to read your icon's characters (read "Unicode" section here). -4. Then initialize a download in the app to generate the icon font and [CSS](https://glossary.magento.com/css) style sheet. +1. Then initialize a download in the app to generate the icon font and [CSS](https://glossary.magento.com/css) style sheet. diff --git a/_includes/install/allowoverrides22.md b/_includes/install/allowoverrides22.md index f1b44641c14..f925910ea58 100644 --- a/_includes/install/allowoverrides22.md +++ b/_includes/install/allowoverrides22.md @@ -10,40 +10,40 @@ Failure to enable these settings typically results in no styles displaying on yo * Ubuntu: `vim /etc/apache2/sites-available/default` * CentOS: `vim /etc/httpd/conf/httpd.conf` -2. Locate the block that starts with: +1. Locate the block that starts with: * Ubuntu 12: `` * Ubuntu 14 or CentOS: `` -3. Change the value of `AllowOverride` to ``. +1. Change the value of `AllowOverride` to ``. - An example for Ubuntu 12 follows. + An example for Ubuntu 12 follows. - ```conf - - Options Indexes FollowSymLinks MultiViews - AllowOverride - Order allow,deny - Allow from all - - ``` + ```conf + + Options Indexes FollowSymLinks MultiViews + AllowOverride + Order allow,deny + Allow from all + + ``` {:.bs-callout .bs-callout-info} The preceding values for `Order` might not work in all cases. For more information, see the Apache documentation ([2.2](https://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order)), [2.4](https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html#order)). -4. Save the file and exit the text editor. -5. *Ubuntu only*. Configure Apache to use the `mod_rewrite` module. +1. Save the file and exit the text editor. +1. *Ubuntu only*. Configure Apache to use the `mod_rewrite` module. - ```bash - cd /etc/apache2/mods-enabled - ``` + ```bash + cd /etc/apache2/mods-enabled + ``` - ```bash - ln -s ../mods-available/rewrite.load - ``` + ```bash + ln -s ../mods-available/rewrite.load + ``` -6. If you changed Apache settings, restart Apache. +1. If you changed Apache settings, restart Apache. - ```bash - service apache2 restart - ``` + ```bash + service apache2 restart + ``` diff --git a/_includes/install/auth-json.md b/_includes/install/auth-json.md index dc4416a96ab..28300a173e6 100644 --- a/_includes/install/auth-json.md +++ b/_includes/install/auth-json.md @@ -21,7 +21,7 @@ When choosing token permissions, select all checkboxes in the `repo` scope. Comp ### Create `auth.json` file 1. Log in to your Magento server as the [Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). -2. Create the `auth.json` file in the user's home directory. For example, if `magento_user` is your Unix username, then create `/home/magento_user/.composer/auth.json`. +1. Create the `auth.json` file in the user's home directory. For example, if `magento_user` is your Unix username, then create `/home/magento_user/.composer/auth.json`. ### Edit `auth.json` file diff --git a/_includes/install/auth-tokens-get.md b/_includes/install/auth-tokens-get.md index 9d8e24c4489..a9ecf8a80de 100644 --- a/_includes/install/auth-tokens-get.md +++ b/_includes/install/auth-tokens-get.md @@ -3,15 +3,15 @@ The `repo.magento.com` repository is where Magento 2 and third-party Composer pa To create authentication keys: 1. Log in to the [Magento Marketplace](https://marketplace.magento.com){:target="_blank"}. If you don't have an account, click **Register**. -2. Click your account name in the top-right of the page and select **My Profile**. +1. Click your account name in the top-right of the page and select **My Profile**. -3. Click **Access Keys** in the Marketplace tab. +1. Click **Access Keys** in the Marketplace tab. ![Get your secure access keys on Magento Marketplace]({{ site.baseurl }}/common/images/cloud_access-key.png){:width="500px"} -4. Click **Create a New Access Key**. Enter a specific name for the keys (e.g., the name of the developer receiving the keys) and click **OK**. +1. Click **Create a New Access Key**. Enter a specific name for the keys (e.g., the name of the developer receiving the keys) and click **OK**. -5. New public and private keys are now associated with your account that you can click to copy. Save this information or keep the page open when working with your Magento project. Use the **Public key** as your username and the **Private key** as your password. +1. New public and private keys are now associated with your account that you can click to copy. Save this information or keep the page open when working with your Magento project. Use the **Public key** as your username and the **Private key** as your password. ### Manage your authentication keys @@ -24,9 +24,9 @@ You can also disable or delete authentication keys. For example, you can disable You cannot delete or disable keys you created by signing in to your [magento.com account](https://www.magentocommerce.com/products/customer/account/login){:target="_blank"}. To manage those keys: 1. Log in to your [magento.com account](https://www.magentocommerce.com/products/customer/account/login){:target="_blank"}. -2. Click **My Account** at the top of the page. -3. Click **Account Settings** > **Downloads Access Token**. +1. Click **My Account** at the top of the page. +1. Click **Account Settings** > **Downloads Access Token**. ![Access your keys]({{ site.baseurl }}/common/images/connect_keys1.png){:width="200px"} -4. Click **Generate new token** to replace and disable an existing token. +1. Click **Generate new token** to replace and disable an existing token. diff --git a/_includes/install/composer-clone.md b/_includes/install/composer-clone.md index 67d1eaa1e2a..edd419cdb82 100644 --- a/_includes/install/composer-clone.md +++ b/_includes/install/composer-clone.md @@ -13,14 +13,14 @@ To install Composer: 1. Change to or create an empty directory on your Magento server. -2. Enter the following commands: +1. Enter the following commands: - ```bash - curl -sS https://getcomposer.org/installer | php - ``` + ```bash + curl -sS https://getcomposer.org/installer | php + ``` - ```bash - mv composer.phar /usr/local/bin/composer - ``` + ```bash + mv composer.phar /usr/local/bin/composer + ``` For additional installation options, see the [Composer installation documentation](https://getcomposer.org/download/). diff --git a/_includes/install/file-system-umask.md b/_includes/install/file-system-umask.md index 667582fcc70..86871a1097a 100644 --- a/_includes/install/file-system-umask.md +++ b/_includes/install/file-system-umask.md @@ -7,25 +7,25 @@ We recommend changing the umask on a one-user or shared hosting system only. If The default umask (with no `magento_umask` specified) is `002`, which means: -* 775 for directories, which means full control by the user, full control by the group, and enables everyone to traverse the directory. These permissions are typically required by shared hosting providers. +* 775 for directories, which means full control by the user, full control by the group, and enables everyone to traverse the directory. These permissions are typically required by shared hosting providers. -* 664 for files, which means writable by the user, writable by the group, and read-only for everyone else +* 664 for files, which means writable by the user, writable by the group, and read-only for everyone else A common suggestion is to use a value of `022` in the `magento_umask` file, which means: -* 755 for directories: full control for the user, and everyone else can traverse directories. -* 644 for files: read-write permissions for the user, and read-only for everyone else. +* 755 for directories: full control for the user, and everyone else can traverse directories. +* 644 for files: read-write permissions for the user, and read-only for everyone else. To set `magento_umask`: 1. In a command line terminal, log in to your Magento server as a [Magento file system owner][]. -2. Navigate to the Magento install directory: +1. Navigate to the Magento install directory: ```bash cd ``` -3. Use the following command to create a file named `magento_umask` and write the `umask` value to it. +1. Use the following command to create a file named `magento_umask` and write the `umask` value to it. ```bash echo > magento_umask @@ -33,7 +33,7 @@ To set `magento_umask`: You should now have a file named `magento_umask` in the `` with the only content being the `umask` number. -4. Log out and log back in as the [Magento file system owner][] to apply the changes. +1. Log out and log back in as the [Magento file system owner][] to apply the changes. diff --git a/_includes/install/flow-diagram.md b/_includes/install/flow-diagram.md index 5248c048fa3..b3b3ce273ea 100644 --- a/_includes/install/flow-diagram.md +++ b/_includes/install/flow-diagram.md @@ -9,7 +9,7 @@ The diagram shows the following: * [2.2.x system requirements]({{ site.gdeurl22 }}install-gde/system-requirements-tech.html) * [2.3.x system requirements]({{ site.gdeurl23 }}install-gde/system-requirements-tech.html) -2. Get the Magento software. +1. Get the Magento software. * For simplicity, get a compressed {{site.data.var.ce}} or {{site.data.var.ee}} [archive]({{ page.baseurl }}/install-gde/prereq/zip_install.html), extract it on your Magento server, and start your installation. @@ -20,7 +20,7 @@ The diagram shows the following: {:.bs-callout .bs-callout-info} To be able to use the Web Setup Wizard to install or upgrade the Magento software, or to manage extensions you get from Magento Marketplace, you must either get a compressed archive or a Composer metapackage. If you clone the GitHub repository, you *cannot* use the Web Setup Wizard to upgrade the Magento software and extensions. You must upgrade using [Composer and Git commands]({{ page.baseurl }}/install-gde/install/cli/dev_options.html). -3. Install the Magento software using either the Web Setup Wizard or command line. +1. Install the Magento software using either the Web Setup Wizard or command line. For simplicity, only the Web Setup Wizard is shown in the diagram. @@ -28,4 +28,4 @@ The diagram shows the following: If the step fails because prerequisite software isn't set up correctly, review our [Prerequisites]({{ page.baseurl }}/install-gde/prereq/prereq-overview.html). -4. Verify the installation by viewing your storefront and the Magento Admin. +1. Verify the installation by viewing your storefront and the Magento Admin. diff --git a/_includes/install/releasenotes/ce_install_20.md b/_includes/install/releasenotes/ce_install_20.md index a7fa74a93be..aa2facd82d2 100644 --- a/_includes/install/releasenotes/ce_install_20.md +++ b/_includes/install/releasenotes/ce_install_20.md @@ -35,7 +35,7 @@ composer create-project --repository=https://repo.magento.com/ magento/project-c After you get the Open Source software: 1. [Set file system ownership and permissions]({{ page.baseurl }}/install-gde/prereq/file-system-perms.html). -2. Install the Magento software: +1. Install the Magento software: * [Web Setup Wizard]({{ page.baseurl }}/install-gde/install/web/install-web.html) * [Command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html) diff --git a/_includes/install/releasenotes/ee_install_20.md b/_includes/install/releasenotes/ee_install_20.md index 8540d92ac00..75000e6a823 100644 --- a/_includes/install/releasenotes/ee_install_20.md +++ b/_includes/install/releasenotes/ee_install_20.md @@ -35,7 +35,7 @@ composer create-project --repository=https://repo.magento.com/ magento/project-e After you get the Commerce software: 1. [Set file system ownership and permissions]({{ page.baseurl }}/install-gde/prereq/file-system-perms.html). -2. Install the Magento software: +1. Install the Magento software: * [Web Setup Wizard]({{ page.baseurl }}/install-gde/install/web/install-web.html) * [Command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html) diff --git a/_includes/install/releasenotes/get-ce-software_zip.md b/_includes/install/releasenotes/get-ce-software_zip.md index 4c16fe012df..bfaa2c57fa5 100644 --- a/_includes/install/releasenotes/get-ce-software_zip.md +++ b/_includes/install/releasenotes/get-ce-software_zip.md @@ -11,7 +11,7 @@ Archives are available in the following formats: `.zip`, `.tar.bz2`, `.tar.gz` To get the Magento Open Source software archive: 1. Go to [http://magento.com/download](http://magento.com/download){:target="_blank"}. -2. Choose either the software or the software and sample data: +1. Choose either the software or the software and sample data: * `Magento-CE-.*` (without sample data) * `Magento-CE-+Samples.*` (with sample data) diff --git a/_includes/install/sampledata/sample-data-clone.md b/_includes/install/sampledata/sample-data-clone.md index 2822b41adbf..13229925fbe 100644 --- a/_includes/install/sampledata/sample-data-clone.md +++ b/_includes/install/sampledata/sample-data-clone.md @@ -15,128 +15,132 @@ You can use sample data with either the `develop` branch (more current) or a rel See the following sections: -* [Clone the sample data repository](#clone-sample-repo) -* [Set file system ownership and permissions](#samp-data-perms) +* [Clone the sample data repository](#clone-sample-repo) +* [Set file system ownership and permissions](#samp-data-perms) ## Clone the sample data repository {#clone-sample-repo} This section discusses how to install Magento sample data by cloning the sample data repository. You can clone the sample data repository in any of the following ways: -* Clone with the [SSH protocol](#clone-sample-repo-ssh) -* Clone with the [HTTPS protocol](#instgde-prereq-compose-clone-https) +* Clone with the [SSH protocol](#clone-sample-repo-ssh) +* Clone with the [HTTPS protocol](#instgde-prereq-compose-clone-https) ### Clone with SSH {#clone-sample-repo-ssh} To clone the Magento sample data GitHub repository using the SSH protocol: 1. In a web browser, go to [the Magento sample data repository](https://github.com/magento/magento2-sample-data). -2. Next to the name of the branch, click **SSH** from the list. -3. Click **Copy to clipboard** +1. Next to the name of the branch, click **SSH** from the list. +1. Click **Copy to clipboard** - The following figure shows an example. + The following figure shows an example. - ![Clone the Magento GitHub repository using SSH]({{ site.baseurl }}/common/images/install_mage2_clone-ssh.png){:width="650px"} -4. Change to your web server's docroot directory. + ![Clone the Magento GitHub repository using SSH]({{ site.baseurl }}/common/images/install_mage2_clone-ssh.png){:width="650px"} - Typically, for Ubuntu, it's `/var/www` and for CentOS it's `/var/www/html`. +1. Change to your web server's docroot directory. - Need [help locating the docroot?]({{ page.baseurl }}/install-gde/basics/basics_docroot.html) -5. Enter `git clone` and paste the value you obtained from step 1. + Typically, for Ubuntu, it's `/var/www` and for CentOS it's `/var/www/html`. - An example follows: + Need [help locating the docroot?]({{ page.baseurl }}/install-gde/basics/basics_docroot.html) - ```bash - git clone git@github.com:magento/magento2-sample-data.git - ``` +1. Enter `git clone` and paste the value you obtained from step 1. -6. Wait for the repository to clone on your server. + An example follows: - {:.bs-callout .bs-callout-info} - If the following error displays, make sure you [shared your SSH key](https://help.github.com/articles/generating-ssh-keys/) with GitHub:
+ ```bash + git clone git@github.com:magento/magento2-sample-data.git + ``` - ```terminal - Cloning into 'magento2'... - Permission denied (publickey). - fatal: The remote end hung up unexpectedly - ``` +1. Wait for the repository to clone on your server. -7. Ensure you checkout the branch of the sample data repository that corresponds with the branch you used from the main `magento2` repository. + {:.bs-callout .bs-callout-info} + If the following error displays, make sure you [shared your SSH key](https://help.github.com/articles/generating-ssh-keys/) with GitHub:
- For example: + ```terminal + Cloning into 'magento2'... + Permission denied (publickey). + fatal: The remote end hung up unexpectedly + ``` - If you used the `2.2-develop` branch of the Magento 2 repository, the Sample Data branch should be `2.2-develop`. +1. Ensure you checkout the branch of the sample data repository that corresponds with the branch you used from the main `magento2` repository. - If you used the `2.2.5` branch of the Magento 2 repository, the Sample Data branch should be `2.2.5`. + For example: - To checkout the correct branch, run the following command from the sample data repository's root directory (assuming you need the `2.2.5` branch): + If you used the `2.2-develop` branch of the Magento 2 repository, the Sample Data branch should be `2.2-develop`. - ```bash - git checkout 2.2.5 - ``` + If you used the `2.2.5` branch of the Magento 2 repository, the Sample Data branch should be `2.2.5`. -8. Change to ``. -9. Enter the following command to create symbolic links between the files you just cloned so sample data works properly: + To checkout the correct branch, run the following command from the sample data repository's root directory (assuming you need the `2.2.5` branch): - ```bash - php -f /dev/tools/build-sample-data.php -- --ce-source="" - ``` + ```bash + git checkout 2.2.5 + ``` -10. Wait for the command to complete. +1. Change to ``. +1. Enter the following command to create symbolic links between the files you just cloned so sample data works properly: -11. See [Set file system permissions and ownership](#samp-data-perms). + ```bash + php -f /dev/tools/build-sample-data.php -- --ce-source="" + ``` + +1. Wait for the command to complete. + +1. See [Set file system permissions and ownership](#samp-data-perms). ### Clone with HTTPS {#instgde-prereq-compose-clone-https} To clone the Magento sample data GitHub repository using the HTTPS protocol: 1. In a web browser, go to [the Magento sample data repository](https://github.com/magento/magento2-sample-data). -2. On the right side of the page, under the **clone URL** field, click **HTTPS**. -3. Click **Copy to clipboard**. +1. On the right side of the page, under the **clone URL** field, click **HTTPS**. +1. Click **Copy to clipboard**. + + The following figure shows an example. + + ![Clone the Magento GitHub repository using HTTPS]({{ site.baseurl }}/common/images/install_mage2_clone-https.png){:width="650px"} - The following figure shows an example. +1. Change to your web server's docroot directory. - ![Clone the Magento GitHub repository using HTTPS]({{ site.baseurl }}/common/images/install_mage2_clone-https.png){:width="650px"} -4. Change to your web server's docroot directory. + Typically, for Ubuntu, it's `/var/www` and for CentOS it's `/var/www/html`. - Typically, for Ubuntu, it's `/var/www` and for CentOS it's `/var/www/html`. -5. Enter `git clone` and paste the value you obtained from step 1. +1. Enter `git clone` and paste the value you obtained from step 1. - An example follows: + An example follows: - ```bash - git clone https://github.com/magento/magento2-sample-data.git - ``` + ```bash + git clone https://github.com/magento/magento2-sample-data.git + ``` -6. Wait for the repository to clone on your server. -7. Ensure you checkout the branch of the sample data repository that corresponds with the branch you used from the main `magento2` repository. +1. Wait for the repository to clone on your server. +1. Ensure you checkout the branch of the sample data repository that corresponds with the branch you used from the main `magento2` repository. - For example: + For example: - If you used the `2.2-develop` branch of the Magento 2 repository, the Sample Data branch should be `2.2-develop`. + If you used the `2.2-develop` branch of the Magento 2 repository, the Sample Data branch should be `2.2-develop`. - If you used the `2.2.5` branch of the Magento 2 repository, the Sample Data branch should be `2.2.5`. + If you used the `2.2.5` branch of the Magento 2 repository, the Sample Data branch should be `2.2.5`. - To checkout the correct branch, run the following command from the sample data repository's root directory (assuming you need the `2.2.5` branch): + To checkout the correct branch, run the following command from the sample data repository's root directory (assuming you need the `2.2.5` branch): - ```bash - git checkout 2.2.5 - ``` + ```bash + git checkout 2.2.5 + ``` -8. Change to ``. -9. Enter the following command to create symbolic links between the files you just cloned so sample data works properly: +1. Change to ``. +1. Enter the following command to create symbolic links between the files you just cloned so sample data works properly: - ```bash - php -f /dev/tools/build-sample-data.php -- --ce-source="" - ``` + ```bash + php -f /dev/tools/build-sample-data.php -- --ce-source="" + ``` - For example, + For example, - ```bash - php -f /dev/tools/build-sample-data.php -- --ce-source="/var/www/magento2" - ``` + ```bash + php -f /dev/tools/build-sample-data.php -- --ce-source="/var/www/magento2" + ``` -10. Wait for the command to complete. -11. See the next section. +1. Wait for the command to complete. +1. See the next section. {:.bs-callout .bs-callout-warning} If you're installing sample data _after_ installing Magento, you must also run the following command to update the database and schema: @@ -152,33 +156,33 @@ Because the `php build-sample-data.php` script creates symlinks between the samp To set file system permissions and ownership on the sample data repository: 1. Change to your sample data clone directory. -2. Set ownership: +1. Set ownership: - ```bash - chown -R : . - ``` + ```bash + chown -R : . + ``` - Typical examples: + Typical examples: - CentOS: `chown -R :apache .` + * CentOS: `chown -R :apache .` - Ubuntu: `chown -R :www-data .` + * Ubuntu: `chown -R :www-data .` -3. Set permissions: +1. Set permissions: - ```bash - find . -type d -exec chmod g+ws {} + - ``` + ```bash + find . -type d -exec chmod g+ws {} + + ``` -4. Clear static files: +1. Clear static files: - ```bash - cd /var - ``` + ```bash + cd /var + ``` - ```bash - rm -rf cache/* page_cache/* generation/* - ``` + ```bash + rm -rf cache/* page_cache/* generation/* + ``` diff --git a/_includes/install/sampledata/sample-data-rc1-web.md b/_includes/install/sampledata/sample-data-rc1-web.md index 4c41cc7d7a2..3adf793ac6e 100644 --- a/_includes/install/sampledata/sample-data-rc1-web.md +++ b/_includes/install/sampledata/sample-data-rc1-web.md @@ -10,23 +10,23 @@ To upgrade to {{site.data.var.ee}} RC1 or RC2 with sample data using the Setup W {% collapsible Click to expand/collapse content %} 1. Log in to your Magento server as, or switch to, the [Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). -2. Change to the Magento installation directory. -3. Open `composer.lock` in a text editor. -4. Change the following: +1. Change to the Magento installation directory. +1. Open `composer.lock` in a text editor. +1. Change the following: - From: + From: - ```json - "type": "magento2-module-customer-balance" - ``` + ```json + "type": "magento2-module-customer-balance" + ``` - To: + To: - ```json - "type": "magento2-module" - ``` + ```json + "type": "magento2-module" + ``` -5. Save your changes to `composer.lock` and exit the text editor. +1. Save your changes to `composer.lock` and exit the text editor. {% include install/sampledata/file-sys-perms-digest.md %} diff --git a/_includes/install/trouble/rc_cron.md b/_includes/install/trouble/rc_cron.md index 895c2ba08e4..860977ed4a1 100644 --- a/_includes/install/trouble/rc_cron.md +++ b/_includes/install/trouble/rc_cron.md @@ -6,7 +6,7 @@ This section discusses how to see if cron is currently running and to verify whe To verify whether or not your crontab is set up: 1. Log in to your Magento server as, or switch to, the [Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). -2. See if the following file exists: +1. See if the following file exists: ```bash ls -al /var/.setup_cronjob_status @@ -14,7 +14,7 @@ To verify whether or not your crontab is set up: If the file exists, cron has run successfully in the past. If the file _does not_ exist, either you haven't yet installed Magento or cron isn't running. In either case, continue with the next step. -3. Get more detail about cron. +1. Get more detail about cron. As a user with `root` privileges, enter the following command: diff --git a/_includes/install/ulimit.md b/_includes/install/ulimit.md index 209d05cbaa9..ef383b437fb 100644 --- a/_includes/install/ulimit.md +++ b/_includes/install/ulimit.md @@ -26,14 +26,14 @@ The syntax for `ulimit` depends on the UNIX shell you use. The preceding setting To optionally set the value in the user's Bash shell: 1. If you haven't done so already, switch to the [Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). -2. Open `/home//.bashrc` in a text editor. -3. Add the following line: +1. Open `/home//.bashrc` in a text editor. +1. Add the following line: ```bash ulimit -s 65536 ``` -4. Save your changes to `.bashrc` and exit the text editor. +1. Save your changes to `.bashrc` and exit the text editor. {:.bs-callout .bs-callout-warning} We recommend you avoid setting a value for [`pcre.recursion_limit`](http://php.net/manual/en/pcre.configuration.php) in `php.ini` because it can result in incomplete rollbacks with no failure notice. diff --git a/_includes/install/web/install-web.md b/_includes/install/web/install-web.md index 0a1c5e298f3..1382fd4c899 100644 --- a/_includes/install/web/install-web.md +++ b/_includes/install/web/install-web.md @@ -5,8 +5,8 @@ This section discusses how to install the Magento software using a web-based wiz Before you begin, make sure that: 1. Your system meets the requirements discussed in [Magento System Requirements]({{ page.baseurl }}/install-gde/system-requirements.html). -2. You completed all prerequisite tasks discussed in [Prerequisites]({{ page.baseurl }}/install-gde/prereq/prereq-overview.html). -4. After you log in to the Magento server, [switch to the Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). +1. You completed all prerequisite tasks discussed in [Prerequisites]({{ page.baseurl }}/install-gde/prereq/prereq-overview.html). +1. After you log in to the Magento server, [switch to the Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). ### Enabling and disabling modules {#instgde-install-web-enable-mod} @@ -26,7 +26,7 @@ To install the Magento software using the Setup Wizard: 1. Start a web browser. -2. Enter the following URL in the browser's address or location bar: +1. Enter the following URL in the browser's address or location bar: ```text http:////setup @@ -38,6 +38,6 @@ To install the Magento software using the Setup Wizard: http://192.0.2.10/magento2/setup ``` -3. On the initial page, click **Agree and Set Up Magento**. +1. On the initial page, click **Agree and Set Up Magento**. -4. Continue with the following topics in the order presented to complete the installation. +1. Continue with the following topics in the order presented to complete the installation. diff --git a/_includes/install/web/install-web_1-readiness.md b/_includes/install/web/install-web_1-readiness.md index 42c8546d774..8b2eac27961 100644 --- a/_includes/install/web/install-web_1-readiness.md +++ b/_includes/install/web/install-web_1-readiness.md @@ -6,4 +6,4 @@ Click **More detail** if available to see more information about each check. -2. Click **Next**. +1. Click **Next**. diff --git a/_includes/install/web/install-web_5-create-admin.md b/_includes/install/web/install-web_5-create-admin.md index 9a1fa4ff699..1ed0d0ef8f2 100644 --- a/_includes/install/web/install-web_5-create-admin.md +++ b/_includes/install/web/install-web_5-create-admin.md @@ -9,4 +9,4 @@ |New Password|Enter the administrator's password.| |Confirm Password|Enter the password again for verification.| -2. Click **Next**. +1. Click **Next**. diff --git a/_includes/release-notes/engcomm-2-3-3-issues.md b/_includes/release-notes/engcomm-2-3-3-issues.md index 4b3ac423541..3d3cef6ab6e 100644 --- a/_includes/release-notes/engcomm-2-3-3-issues.md +++ b/_includes/release-notes/engcomm-2-3-3-issues.md @@ -21,7 +21,7 @@ | [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](https://github.com/beckindesigns) | [#535](https://github.com/magento/magento2/issues/535) | [magento/graphql-ce#650](https://github.com/magento/graphql-ce/pull/650) | +| 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) | @@ -75,7 +75,7 @@ | [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](https://github.com/alexeya-ven) | [#23080](https://github.com/magento/magento2/issues/23080) | [magento/magento2#23081](https://github.com/magento/magento2/pull/23081) | +| 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) | @@ -113,7 +113,7 @@ | [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](https://github.com/alexeya-ven) | [#23333](https://github.com/magento/magento2/issues/23333) | [magento/magento2#23338](https://github.com/magento/magento2/pull/23338) | +| 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) | diff --git a/_includes/release-notes/engcomm-2-3-3-partner.md b/_includes/release-notes/engcomm-2-3-3-partner.md index f1f1f53fdc1..79e84b00260 100644 --- a/_includes/release-notes/engcomm-2-3-3-partner.md +++ b/_includes/release-notes/engcomm-2-3-3-partner.md @@ -2,7 +2,7 @@ | ------- | ------- | ------- | | Atwix | [magento/graphql-ce#531](https://github.com/magento/graphql-ce/pull/531), [magento/graphql-ce#578](https://github.com/magento/graphql-ce/pull/578), [magento/graphql-ce#647](https://github.com/magento/graphql-ce/pull/647), [magento/graphql-ce#648](https://github.com/magento/graphql-ce/pull/648), [magento/graphql-ce#651](https://github.com/magento/graphql-ce/pull/651), [magento/graphql-ce#652](https://github.com/magento/graphql-ce/pull/652), [magento/graphql-ce#653](https://github.com/magento/graphql-ce/pull/653), [magento/graphql-ce#371](https://github.com/magento/graphql-ce/pull/371), [magento/graphql-ce#504](https://github.com/magento/graphql-ce/pull/504), [magento/graphql-ce#585](https://github.com/magento/graphql-ce/pull/585), [magento/graphql-ce#650](https://github.com/magento/graphql-ce/pull/650), [magento/magento-functional-tests-migration#690](https://github.com/magento/magento-functional-tests-migration/pull/690), [magento/magento-functional-tests-migration#703](https://github.com/magento/magento-functional-tests-migration/pull/703), [magento/magento-functional-tests-migration#696](https://github.com/magento/magento-functional-tests-migration/pull/696), [magento/magento-functional-tests-migration#685](https://github.com/magento/magento-functional-tests-migration/pull/685), [magento/magento-functional-tests-migration#683](https://github.com/magento/magento-functional-tests-migration/pull/683), [magento/magento2#22779](https://github.com/magento/magento2/pull/22779), [magento/magento2#22787](https://github.com/magento/magento2/pull/22787), [magento/magento2#22823](https://github.com/magento/magento2/pull/22823), [magento/magento2#22914](https://github.com/magento/magento2/pull/22914), [magento/graphql-ce#677](https://github.com/magento/graphql-ce/pull/677), [magento/magento-functional-tests-migration#700](https://github.com/magento/magento-functional-tests-migration/pull/700), [magento/graphql-ce#711](https://github.com/magento/graphql-ce/pull/711), [magento/magento2#23140](https://github.com/magento/magento2/pull/23140), [magento/graphql-ce#537](https://github.com/magento/graphql-ce/pull/537), [magento/graphql-ce#549](https://github.com/magento/graphql-ce/pull/549), [magento/graphql-ce#709](https://github.com/magento/graphql-ce/pull/709), [magento/graphql-ce#717](https://github.com/magento/graphql-ce/pull/717), [magento/magento2#23129](https://github.com/magento/magento2/pull/23129), [magento/graphql-ce#714](https://github.com/magento/graphql-ce/pull/714), [magento/graphql-ce#626](https://github.com/magento/graphql-ce/pull/626), [magento/magento2#23234](https://github.com/magento/magento2/pull/23234), [magento/magento2#23607](https://github.com/magento/magento2/pull/23607), [magento/graphql-ce#493](https://github.com/magento/graphql-ce/pull/493), [magento/magento-functional-tests-migration#691](https://github.com/magento/magento-functional-tests-migration/pull/691), [magento/magento-functional-tests-migration#699](https://github.com/magento/magento-functional-tests-migration/pull/699), [magento/magento-functional-tests-migration#704](https://github.com/magento/magento-functional-tests-migration/pull/704), [magento/magento2#23666](https://github.com/magento/magento2/pull/23666), [magento/graphql-ce#351](https://github.com/magento/graphql-ce/pull/351), [magento/graphql-ce#779](https://github.com/magento/graphql-ce/pull/779), [magento/graphql-ce#780](https://github.com/magento/graphql-ce/pull/780), [magento/graphql-ce#788](https://github.com/magento/graphql-ce/pull/788), [magento/graphql-ce#789](https://github.com/magento/graphql-ce/pull/789), [magento/graphql-ce#790](https://github.com/magento/graphql-ce/pull/790) | [magento/graphql-ce#533](https://github.com/magento/graphql-ce/issues/533), [magento/graphql-ce#640](https://github.com/magento/graphql-ce/issues/640), [magento/graphql-ce#603](https://github.com/magento/graphql-ce/issues/603), [magento/graphql-ce#198](https://github.com/magento/graphql-ce/issues/198), [magento/graphql-ce#309](https://github.com/magento/graphql-ce/issues/309), [magento/graphql-ce#535](https://github.com/magento/graphql-ce/issues/535), [magento/magento2#22771](https://github.com/magento/magento2/issues/22771), [magento/magento2#22786](https://github.com/magento/magento2/issues/22786), [magento/magento2#22822](https://github.com/magento/magento2/issues/22822), [magento/magento2#22899](https://github.com/magento/magento2/issues/22899), [magento/graphql-ce#675](https://github.com/magento/graphql-ce/issues/675), [magento/graphql-ce#682](https://github.com/magento/graphql-ce/issues/682), [magento/graphql-ce#681](https://github.com/magento/graphql-ce/issues/681), [magento/magento2#23138](https://github.com/magento/magento2/issues/23138), [magento/graphql-ce#674](https://github.com/magento/graphql-ce/issues/674), [magento/graphql-ce#683](https://github.com/magento/graphql-ce/issues/683), [magento/magento2#4788](https://github.com/magento/magento2/issues/4788), [magento/magento2#22934](https://github.com/magento/magento2/issues/22934), [magento/graphql-ce#486](https://github.com/magento/graphql-ce/issues/486), [magento/graphql-ce#622](https://github.com/magento/graphql-ce/issues/622), [magento/magento2#23233](https://github.com/magento/magento2/issues/23233), [magento/magento2#23606](https://github.com/magento/magento2/issues/23606), [magento/graphql-ce#167](https://github.com/magento/graphql-ce/issues/167), [magento/graphql-ce#702](https://github.com/magento/graphql-ce/issues/702), [magento/graphql-ce#738](https://github.com/magento/graphql-ce/issues/738) | | Something Digital | [magento/graphql-ce#632](https://github.com/magento/graphql-ce/pull/632), [magento/magento2#19767](https://github.com/magento/magento2/pull/19767), [magento/graphql-ce#665](https://github.com/magento/graphql-ce/pull/665), [magento/graphql-ce#666](https://github.com/magento/graphql-ce/pull/666), [magento/graphql-ce#731](https://github.com/magento/graphql-ce/pull/731), [magento/graphql-ce#723](https://github.com/magento/graphql-ce/pull/723), [magento/graphql-ce#744](https://github.com/magento/graphql-ce/pull/744), [magento/graphql-ce#734](https://github.com/magento/graphql-ce/pull/734), [magento/magento2#23532](https://github.com/magento/magento2/pull/23532), [magento/graphql-ce#760](https://github.com/magento/graphql-ce/pull/760), [magento/graphql-ce#753](https://github.com/magento/graphql-ce/pull/753), [magento/graphql-ce#755](https://github.com/magento/graphql-ce/pull/755), [magento/graphql-ce#757](https://github.com/magento/graphql-ce/pull/757), [magento/graphql-ce#699](https://github.com/magento/graphql-ce/pull/699) | [magento/graphql-ce#601](https://github.com/magento/graphql-ce/issues/601), [magento/magento2#19515](https://github.com/magento/magento2/issues/19515), [magento/graphql-ce#658](https://github.com/magento/graphql-ce/issues/658), [magento/graphql-ce#657](https://github.com/magento/graphql-ce/issues/657), [magento/graphql-ce#716](https://github.com/magento/graphql-ce/issues/716), [magento/graphql-ce#732](https://github.com/magento/graphql-ce/issues/732), [magento/graphql-ce#739](https://github.com/magento/graphql-ce/issues/739), [magento/graphql-ce#438](https://github.com/magento/graphql-ce/issues/438) | -| ISM eCompany | [magento/magento2#20842](https://github.com/magento/magento2/pull/20842), [magento-engcom/msi#2172](https://github.com/magento-engcom/msi/pull/2172), [magento/graphql-ce#526](https://github.com/magento/graphql-ce/pull/526), [magento/graphql-ce#525](https://github.com/magento/graphql-ce/pull/525), [magento-engcom/msi#2233](https://github.com/magento-engcom/msi/pull/2233), [magento/magento2#19584](https://github.com/magento/magento2/pull/19584), [magento/magento2#20848](https://github.com/magento/magento2/pull/20848), [magento/graphql-ce#718](https://github.com/magento/graphql-ce/pull/718), [magento/graphql-ce#721](https://github.com/magento/graphql-ce/pull/721), [magento/graphql-ce#476](https://github.com/magento/graphql-ce/pull/476), [magento/graphql-ce#719](https://github.com/magento/graphql-ce/pull/719), [magento/magento2#23387](https://github.com/magento/magento2/pull/23387), [magento/magento2#23459](https://github.com/magento/magento2/pull/23459), [magento/magento2#22984](https://github.com/magento/magento2/pull/22984), [magento/graphql-ce#712](https://github.com/magento/graphql-ce/pull/712) | [magento/magento2#20481](https://github.com/magento/magento2/issues/20481), [magento/magento2#18651](https://github.com/magento/magento2/issues/18651), [magento/graphql-ce#9113](https://github.com/magento/graphql-ce/issues/9113), [magento/magento2#23386](https://github.com/magento/magento2/issues/23386), [magento/magento2#22814](https://github.com/magento/magento2/issues/22814), [magento/magento2#14071](https://github.com/magento/magento2/issues/14071) | +| ISM eCompany | [magento/magento2#20842](https://github.com/magento/magento2/pull/20842), [magento-engcom/msi#2172](https://github.com/magento-engcom/msi/pull/2172), [magento/graphql-ce#526](https://github.com/magento/graphql-ce/pull/526), [magento/graphql-ce#525](https://github.com/magento/graphql-ce/pull/525), [magento-engcom/msi#2233](https://github.com/magento-engcom/msi/pull/2233), [magento/magento2#19584](https://github.com/magento/magento2/pull/19584), [magento/magento2#20848](https://github.com/magento/magento2/pull/20848), [magento/graphql-ce#718](https://github.com/magento/graphql-ce/pull/718), [magento/graphql-ce#721](https://github.com/magento/graphql-ce/pull/721), [magento/graphql-ce#476](https://github.com/magento/graphql-ce/pull/476), [magento/graphql-ce#719](https://github.com/magento/graphql-ce/pull/719), [magento/magento2#23387](https://github.com/magento/magento2/pull/23387), [magento/magento2#23459](https://github.com/magento/magento2/pull/23459), [magento/magento2#22984](https://github.com/magento/magento2/pull/22984), [magento/graphql-ce#712](https://github.com/magento/graphql-ce/pull/712) | [magento/magento2#20481](https://github.com/magento/magento2/issues/20481), [magento/magento2#18651](https://github.com/magento/magento2/issues/18651), [magento/magento2#23386](https://github.com/magento/magento2/issues/23386), [magento/magento2#22814](https://github.com/magento/magento2/issues/22814), [magento/magento2#14071](https://github.com/magento/magento2/issues/14071) | | Krish TechnoLabs | [magento/magento2#19653](https://github.com/magento/magento2/pull/19653), [magento/magento2#21633](https://github.com/magento/magento2/pull/21633), [magento/magento2#22405](https://github.com/magento/magento2/pull/22405), [magento/magento2#22526](https://github.com/magento/magento2/pull/22526), [magento/magento2#22599](https://github.com/magento/magento2/pull/22599), [magento/graphql-ce#689](https://github.com/magento/graphql-ce/pull/689), [magento/magento2#22758](https://github.com/magento/magento2/pull/22758), [magento/magento2#21397](https://github.com/magento/magento2/pull/21397), [magento/magento2#21215](https://github.com/magento/magento2/pull/21215), [magento/magento2#22926](https://github.com/magento/magento2/pull/22926), [magento/magento2#22387](https://github.com/magento/magento2/pull/22387), [magento/magento2#19184](https://github.com/magento/magento2/pull/19184), [magento/magento2#22426](https://github.com/magento/magento2/pull/22426), [magento/magento2#22341](https://github.com/magento/magento2/pull/22341), [magento/magento2#23007](https://github.com/magento/magento2/pull/23007), [magento/magento2#23335](https://github.com/magento/magento2/pull/23335), [magento/graphql-ce#528](https://github.com/magento/graphql-ce/pull/528), [magento/magento2#23366](https://github.com/magento/magento2/pull/23366), [magento/magento2#21128](https://github.com/magento/magento2/pull/21128), [magento/magento2#23496](https://github.com/magento/magento2/pull/23496) | [magento/magento2#9155](https://github.com/magento/magento2/issues/9155), [magento/magento2#16939](https://github.com/magento/magento2/issues/16939), [magento/magento2#21596](https://github.com/magento/magento2/issues/21596), [magento/magento2#3795](https://github.com/magento/magento2/issues/3795), [magento/magento2#21214](https://github.com/magento/magento2/issues/21214), [magento/magento2#22924](https://github.com/magento/magento2/issues/22924), [magento/magento2#22380](https://github.com/magento/magento2/issues/22380), [magento/magento2#16446](https://github.com/magento/magento2/issues/16446), [magento/magento2#22425](https://github.com/magento/magento2/issues/22425), [magento/magento2#22940](https://github.com/magento/magento2/issues/22940), [magento/magento2#21126](https://github.com/magento/magento2/issues/21126), [magento/magento2#16234](https://github.com/magento/magento2/issues/16234) | | Strix | [magento-engcom/msi#2262](https://github.com/magento-engcom/msi/pull/2262), [magento/magento2#22839](https://github.com/magento/magento2/pull/22839), [magento/inventory#2312](https://github.com/magento/inventory/pull/2312), [magento/magento2#23201](https://github.com/magento/magento2/pull/23201), [magento/magento2#23240](https://github.com/magento/magento2/pull/23240) | | | Comwrap | [magento/async-import#102](https://github.com/magento/async-import/pull/102) | | diff --git a/_includes/webapi/tutorials/configure-shipping-methods.md b/_includes/webapi/tutorials/configure-shipping-methods.md index 642cd23ae31..d4db87bc508 100644 --- a/_includes/webapi/tutorials/configure-shipping-methods.md +++ b/_includes/webapi/tutorials/configure-shipping-methods.md @@ -11,5 +11,5 @@ Free shipping | `freeshipping` | No To change which offline shipping methods are available: 1. Select **Stores** > **Settings** > **Configuration** > **Sales** > **Shipping Methods** in Admin. -2. Enable or disable the shipping methods as desired. -3. Click **Save Config**. +1. Enable or disable the shipping methods as desired. +1. Click **Save Config**. diff --git a/_includes/webapi/tutorials/set-payment-methods.md b/_includes/webapi/tutorials/set-payment-methods.md index 837ca8bfafa..1c025cde764 100644 --- a/_includes/webapi/tutorials/set-payment-methods.md +++ b/_includes/webapi/tutorials/set-payment-methods.md @@ -11,5 +11,5 @@ Zero Subtotal Checkout | `free` | Yes In this tutorial, configure Magento to accept bank transfer payments. To allow bank transfer payments (or any other offline payment method) as a payment method: 1. Log in to [Admin](https://glossary.magento.com/admin) and select **Stores** > **Settings** > **Configuration** > **Sales** > **Payment Methods**. -2. Enable the [payment method](https://glossary.magento.com/payment-method. -3. Click **Save Config**. +1. Enable the [payment method](https://glossary.magento.com/payment-method. +1. Click **Save Config**. diff --git a/_videos/fundamentals/add-a-javascript-module.md b/_videos/fundamentals/add-a-javascript-module.md index 8466ec2645b..ff666833e83 100644 --- a/_videos/fundamentals/add-a-javascript-module.md +++ b/_videos/fundamentals/add-a-javascript-module.md @@ -16,10 +16,10 @@ It will illustrate how Magento 2 works with JavaScript files, executing the code The steps we’ll need to take are: 1. Create a new module. -2. Create a requirejs-config.js and a JavaScript module file. -3. Create a layout update to add a template that will enable the JavaScript module. -4. Create a template file. -5. Add the module and test it. +1. Create a requirejs-config.js and a JavaScript module file. +1. Create a layout update to add a template that will enable the JavaScript module. +1. Create a template file. +1. Add the module and test it. Let’s go through each step. @@ -29,7 +29,13 @@ We will create a new module called Learning_Js: ```bash cd +``` + +```bash mkdir app/code/Learning +``` + +```bash mkdir app/code/Learning/Js ``` @@ -70,7 +76,13 @@ Next, we’ll create a view folder: ```bash cd +``` + +```bash mkdir app/code/Learning/Js/view +``` + +```bash mkdir app/code/Learning/Js/view/frontend ``` @@ -94,6 +106,9 @@ Then add the JavaScript module: ```bash mkdir app/code/Learning/Js/view/frontend/web +``` + +```bash mkdir app/code/Learning/Js/view/frontend/web/js ``` @@ -121,7 +136,13 @@ First, we need to create the layout folder: ```bash cd +``` + +```bash mkdir app/code/Learning/Js/view/frontend +``` + +```bash mkdir app/code/Learning/Js/view/frontend/layout ``` @@ -148,6 +169,9 @@ Now, we’ll create the template that will enable JavaScript. ```bash cd +``` + +```bash mkdir app/code/Learning/Js/view/frontend/templates ``` @@ -180,7 +204,13 @@ Finally, let’s add our module and test the result. ```bash cd +``` + +```bash bin/magento setup:upgrade +``` + +```bash bin/magento cache:clean ``` diff --git a/_videos/fundamentals/add-a-new-table-to-database.md b/_videos/fundamentals/add-a-new-table-to-database.md index fa1883bf57f..78dcecb8068 100644 --- a/_videos/fundamentals/add-a-new-table-to-database.md +++ b/_videos/fundamentals/add-a-new-table-to-database.md @@ -18,20 +18,20 @@ The install scripts run only once, while the upgrade scripts are executed every To look at all four script types, we’ll complete the following greeting page tasks: -* Create a `greeting_message` table with the columns greeting_id and message. -* Add two records: “Happy New Year” and “Happy Holidays”. -* Modify the table by adding another field, “season”, to which we add the records “Happy Thanksgiving” and “Fall'”. -* Update the types for the first and second records. +* Create a `greeting_message` table with the columns greeting_id and message. +* Add two records: “Happy New Year” and “Happy Holidays”. +* Modify the table by adding another field, “season”, to which we add the records “Happy Thanksgiving” and “Fall'”. +* Update the types for the first and second records. The steps we need to take to accomplish these tasks are: 1. Create a new module. -2. Create an InstallSchema script. -3. Create an InstallData script. -4. Add a new module and verify that a table with the data was created. -5. Create an UpgradeSchema script. -6. Create an UpgradeData script. -7. Run the upgrade scripts and verify that the table has changed. +1. Create an InstallSchema script. +1. Create an InstallData script. +1. Add a new module and verify that a table with the data was created. +1. Create an UpgradeSchema script. +1. Create an UpgradeData script. +1. Run the upgrade scripts and verify that the table has changed. ## Step 1: Create a new module @@ -41,7 +41,13 @@ Navigate to the `app/code` folder and create the folders `Learning` and `Learnin ```bash cd /app/code +``` + +```bash mkdir Learning +``` + +```bash mkdir Learning/GreetingMessage ``` @@ -93,6 +99,9 @@ To create an InstallSchema script, navigate to the `app/code/Learning/GreetingMe ```bash cd /app/code/Learning/GreetingMessage +``` + +```bash mkdir Setup ``` @@ -216,6 +225,9 @@ Run the `setup:upgrade` script to verify that a table with the initial data is t ```bash cd +``` + +```bash php bin/magento setup:upgrade ``` @@ -380,6 +392,9 @@ Run the SetupUpgrade script again: ```bash cd +``` + +```bash php bin/magento setup:upgrade ``` diff --git a/_videos/fundamentals/add-new-product-attribute.md b/_videos/fundamentals/add-new-product-attribute.md index 5984bc37a9d..b9addd338d9 100644 --- a/_videos/fundamentals/add-new-product-attribute.md +++ b/_videos/fundamentals/add-new-product-attribute.md @@ -14,18 +14,18 @@ This is quite a broad topic, but in this video we will discuss the simple proces For this exercise, assume that the sample data set is installed. -* We will add an attribute called clothing_material with the possible values: Cotton, Leather, Silk, Denim, Fur, and Wool. -* We will make this attribute visible on the product view page, in bold text. -* We will assign it to the Default attribute set and add a restriction that any “bottom” clothing, like slacks, cannot be the material Fur. +* We will add an attribute called clothing_material with the possible values: Cotton, Leather, Silk, Denim, Fur, and Wool. +* We will make this attribute visible on the product view page, in bold text. +* We will assign it to the Default attribute set and add a restriction that any “bottom” clothing, like slacks, cannot be the material Fur. We will need to take the following steps to add the new attribute: 1. Create a new module. -2. Add an InstallData script. -3. Add a source model. -4. Add a backend model. -5. Add a frontend model. -6. Execute the InstallData script and verify that it works. +1. Add an InstallData script. +1. Add a source model. +1. Add a backend model. +1. Add a frontend model. +1. Execute the InstallData script and verify that it works. Let’s go through each step. @@ -35,7 +35,13 @@ As Magento is modular based, we start the process by creating a new module calle ```bash cd /app/code +``` + +```bash mkdir Learning +``` + +```bash mkdir Learning/ClothingMaterial ``` @@ -313,6 +319,9 @@ Now we can run our code and check the results: ```bash cd +``` + +```bash php bin/magento setup:upgrade ``` diff --git a/_videos/fundamentals/create-a-new-module.md b/_videos/fundamentals/create-a-new-module.md index 8f6f74d2fdb..602400ba559 100644 --- a/_videos/fundamentals/create-a-new-module.md +++ b/_videos/fundamentals/create-a-new-module.md @@ -12,10 +12,10 @@ Module is a structural element of Magento 2 – the whole system is built upon m To create a module, you need to complete the following high-level steps: 1. Create the module folder. -2. Create the `etc/module.xml` file. -3. Create the `registration.php` file. -4. Run the `bin/magento setup:upgrade` script to install the new module. -5. Check that the module is working. +1. Create the `etc/module.xml` file. +1. Create the `registration.php` file. +1. Run the `bin/magento setup:upgrade` script to install the new module. +1. Check that the module is working. Let’s go through each of these steps in detail. @@ -36,8 +36,8 @@ Each module name in Magento 2 consists of two parts – the vendor and the modul Let’s create the folder app/code/Learning and inside this folder place another folder: FirstUnit. If you're using the command line, the code would be: 1. `cd` to the root folder -2. `mkdir app/code/Learning` -3. `mkdir app/code/Learning/FirstUnit` +1. `mkdir app/code/Learning` +1. `mkdir app/code/Learning/FirstUnit` ## Make sure you have permission to create files and folders in your installation @@ -45,9 +45,9 @@ Next, you need to create an `etc/module.xml` file. This file is required for the This file contains the following information: -* Module name -* Module version -* Dependencies +* Module name +* Module version +* Dependencies Module name is defined by the folders we just created, because in Magento 2, class names must follow the folder structure. Because we created the folders `Learning/FirstUnit`, our module name will be `Learning_FirstUnit` and all classes that belong to this module will begin with `Learning\FirstUnit` – for example: `Learning\FirstUnit\Observer\Test`. @@ -74,9 +74,9 @@ Then put the following code into it: Note that in the XML file we specified: -* Module name: `Learning_FirstUnit` (based on the folders we created) -* Version: 0.0.1 (initial version of our module) -* Dependency: Magento_Catalog. We could have multiple dependencies. In this case, we would put `` nodes under the sequence node. +* Module name: `Learning_FirstUnit` (based on the folders we created) +* Version: 0.0.1 (initial version of our module) +* Dependency: Magento_Catalog. We could have multiple dependencies. In this case, we would put `` nodes under the sequence node. ## Create the registration.php file diff --git a/_videos/fundamentals/create-a-new-page.md b/_videos/fundamentals/create-a-new-page.md index a7480acd951..9fb62de8919 100644 --- a/_videos/fundamentals/create-a-new-page.md +++ b/_videos/fundamentals/create-a-new-page.md @@ -6,29 +6,30 @@ title: "Create a New Page" thumbnail: "fundamentals/thumbs/create-new-page.png" menu_order: 1 --- + In this video on how to create a new page, we’ll create a page which returns JSON with one parameter: the message “HELLO WORLD!” To add a new page in Magento 2, you need to create a new controller. In Magento 2, a controller is a file located at a specific place which responds to a specific route. A route in Magento 2 is a standard URL that consists of three parts: -* frontName -* controllerName -* actionName +* frontName +* controllerName +* actionName We’ll look at how those three parts of a route correspond to a certain file. So the steps we need to take to add a new page are: 1. Create a new module. -2. Add a routes.xml file. -3. Add a controller (action) file. +1. Add a routes.xml file. +1. Add a controller (action) file. To create a module, you need to complete the following high-level steps: 1. Create the module folder. -2. Create the etc/module.xml file. -3. Create the registration.php file. -4. Run the “bin/magento setup:upgrade” script to install the new module. -5. Check that the module is working. +1. Create the etc/module.xml file. +1. Create the registration.php file. +1. Run the “bin/magento setup:upgrade” script to install the new module. +1. Check that the module is working. Let’s go through each step. @@ -38,7 +39,13 @@ We will create a new module called `Learning_HelloPage` ```bash cd /app/code +``` + +```bash mkdir Learning +``` + +```bash mkdir Learning/HelloPage ``` @@ -50,6 +57,7 @@ Learning/HelloPage/etc/module.xml ``` ### registration.php + ```php [Downgrade Elasticsearch Client]: {{page.baseurl}}/config-guide/elasticsearch/es-downgrade.html diff --git a/guides/v2.2/config-guide/memcache/memcache_centos.md b/guides/v2.2/config-guide/memcache/memcache_centos.md index 473c3259099..cbbd9b5fd0c 100644 --- a/guides/v2.2/config-guide/memcache/memcache_centos.md +++ b/guides/v2.2/config-guide/memcache/memcache_centos.md @@ -20,33 +20,48 @@ To install memcached on CentOS, perform the following tasks as a user with `root 1. Install memcached and its dependencies: - yum -y update - yum install -y libevent libevent-devel - yum install -y memcached - yum install -y php-pecl-memcached + ```bash + yum -y update + ``` -{:.bs-callout .bs-callout-info} -The syntax of the preceding commands might depend on what package repositories you use. For example, if you use webtatic and PHP 5.6, enter yum install -y php56w-pecl-memcache. Use `yum search memcache|grep php` to find the appropriate package name. + ```bash + yum install -y libevent libevent-devel + ``` + + ```bash + yum install -y memcached + ``` + + ```bash + yum install -y php-pecl-memcached + ``` + + {:.bs-callout .bs-callout-info} + The syntax of the preceding commands might depend on what package repositories you use. For example, if you use webtatic and PHP 5.6, enter yum install -y php56w-pecl-memcache. Use `yum search memcache|grep php` to find the appropriate package name. -2. Change the memcached configuration setting for `CACHESIZE` and `OPTIONS`: +1. Change the memcached configuration setting for `CACHESIZE` and `OPTIONS`: - 1. Open `/etc/sysconfig/memcached` in a text editor. - 1. Locate the value for `CACHESIZE` and change it to at least 1GB. For example + 1. Open `/etc/sysconfig/memcached` in a text editor. + 1. Locate the value for `CACHESIZE` and change it to at least 1GB. For example - CACHESIZE="1GB" + ```conf + CACHESIZE="1GB" + ``` - 1. Locate the value for `OPTIONS` and change it to `localhost` or `127.0.0.1` + 1. Locate the value for `OPTIONS` and change it to `localhost` or `127.0.0.1` - For more information about configuring memcached, see [the memcached wiki](https://code.google.com/p/memcached/wiki/NewConfiguringServer). + For more information about configuring memcached, see [the memcached wiki](https://code.google.com/p/memcached/wiki/NewConfiguringServer). 1. Save your changes to `memcached` and exit the text editor. 1. Restart memcached. - service memcached restart + ```bash + service memcached restart + ``` 1. Restart your web server. - For Apache, `service httpd restart` + For Apache, `service httpd restart` 1. Continue with the next section. @@ -60,23 +75,23 @@ To verify memcached is recognized by the web server: 1. Create a `phpinfo.php` file in the web server's docroot: - ```php - addServer('', ); @@ -132,8 +148,13 @@ where `` is either `localhost`, `127.0.0.1`, or the me Run the script from the command line. - cd - php cache-test.php +```bash +cd +``` + +```bash +php cache-test.php +``` The first result is `got result from mysql`. This means that the key did not exist in memcached but it was retrieved from MySQL. @@ -141,26 +162,36 @@ The second result is `got result from memcached`, which verifies that the value Finally, you can view the memcache keys using Telnet: - telnet localhost +```bash +telnet localhost +``` At the prompt, enter - stats items +```shell +stats items +``` The result is similar to the following: - STAT items:3:number 1 - STAT items:3:age 1075 - STAT items:3:evicted 0 - STAT items:3:evicted_nonzero 0 - STAT items:3:evicted_time 0 - STAT items:3:outofmemory 0 - STAT items:3:tailrepairs 0 +```terminal +STAT items:3:number 1 +STAT items:3:age 1075 +STAT items:3:evicted 0 +STAT items:3:evicted_nonzero 0 +STAT items:3:evicted_time 0 +STAT items:3:outofmemory 0 +STAT items:3:tailrepairs 0 Flush the memcache storage and quit Telnet: - flush_all - quit +```shell +flush_all +``` + +```shell +quit +``` [Additional information about the Telnet test](http://www.darkcoding.net/software/memcached-list-all-keys/) diff --git a/guides/v2.2/config-guide/memcache/memcache_magento.md b/guides/v2.2/config-guide/memcache/memcache_magento.md index 671e90b08d2..0d56dfa7612 100644 --- a/guides/v2.2/config-guide/memcache/memcache_magento.md +++ b/guides/v2.2/config-guide/memcache/memcache_magento.md @@ -12,24 +12,24 @@ To configure Magento to use memcached: 1. Open `/app/etc/env.php` in a text editor. 1. Locate the following: - ```php - 'session' => - array ( - 'save' => 'files', - ), - ``` + ```php + 'session' => + array ( + 'save' => 'files', + ), + ``` 1. Change it as follows: - ```php - 'session' => - array ( - 'save' => 'memcached', - 'save_path' => ':' - ), - ``` + ```php + 'session' => + array ( + 'save' => 'memcached', + 'save_path' => ':' + ), + ``` - memcached has an optional startup parameters that are beyond the scope of this guide. You can find more information about them in the [memcached](http://php.net/manual/en/memcached.sessions.php) documentation, source code, and changelogs. + memcached has an optional startup parameters that are beyond the scope of this guide. You can find more information about them in the [memcached](http://php.net/manual/en/memcached.sessions.php) documentation, source code, and changelogs. 1. Continue with the next section. @@ -39,29 +39,37 @@ To verify memcached works with Magento: 1. Delete the contents of the following directories under your Magento installation directory: - rm -rf var/cache/* var/page_cache/* var/session/* + ```bash + rm -rf var/cache/* var/page_cache/* var/session/* + ``` -2. Go to any page on the [storefront](https://glossary.magento.com/storefront). +1. Go to any page on the [storefront](https://glossary.magento.com/storefront). -3. Log in to the [Magento Admin](https://glossary.magento.com/magento-admin) and browse to several pages. +1. Log in to the [Magento Admin](https://glossary.magento.com/magento-admin) and browse to several pages. - If no errors display, congratulations! memcached is working! You can optionally look at memcached storage as discussed in the next step. + If no errors display, congratulations! memcached is working! You can optionally look at memcached storage as discussed in the next step. - If errors display (such as an HTTP 500 (Internal Server Error)), enable developer mode and diagnose the issue. Make sure memcached is running, configured properly, and that `env.php` has no syntax errors. + If errors display (such as an HTTP 500 (Internal Server Error)), enable developer mode and diagnose the issue. Make sure memcached is running, configured properly, and that `env.php` has no syntax errors. -4. (Optional.) Use Telnet to look at memcached storage. +1. (Optional.) Use Telnet to look at memcached storage. - telnet - stats items + ```bash + telnet + ``` - The results display similar to the following: + ```bash + stats items + ``` - STAT items:3:number 1 - STAT items:3:age 7714 - STAT items:3:evicted 0 - STAT items:3:evicted_nonzero 0 - STAT items:3:evicted_time 0 - STAT items:3:outofmemory 0 - STAT items:3:tailrepairs 0 + The results display similar to the following: - [Look at the keys in more detail](http://www.darkcoding.net/software/memcached-list-all-keys/) + ```terminal + STAT items:3:number 1 + STAT items:3:age 7714 + STAT items:3:evicted 0 + STAT items:3:evicted_nonzero 0 + STAT items:3:evicted_time 0 + STAT items:3:outofmemory 0 + STAT items:3:tailrepairs 0 + + [Look at the keys in more detail](http://www.darkcoding.net/software/memcached-list-all-keys/) diff --git a/guides/v2.2/config-guide/memcache/memcache_ubuntu.md b/guides/v2.2/config-guide/memcache/memcache_ubuntu.md index 508c32b893f..d0f2db5a2b9 100644 --- a/guides/v2.2/config-guide/memcache/memcache_ubuntu.md +++ b/guides/v2.2/config-guide/memcache/memcache_ubuntu.md @@ -20,26 +20,33 @@ To install and configure memcached on Ubuntu: 1. As a user with `root` privileges, enter the following command: - apt-get -y update - apt-get -y install php5-memcached memcached + ```bash + apt-get -y update + ``` -2. Change the memcached configuration setting for `CACHESIZE` and `-l`: + ```bash + apt-get -y install php5-memcached memcached + ``` - 1. Open `/etc/memcached.conf` in a text editor. - 2. Locate the `-m` parameter. - 3. Change its value to at least `1GB` - 4. Locate the `-l` parameter. - 5. Change its value to `127.0.0.1` or `localhost` - 6. Save your changes to `memcached.conf` and exit the text editor. - 7. Restart memcached. +1. Change the memcached configuration setting for `CACHESIZE` and `-l`: - service memcached restart + 1. Open `/etc/memcached.conf` in a text editor. + 1. Locate the `-m` parameter. + 1. Change its value to at least `1GB` + 1. Locate the `-l` parameter. + 1. Change its value to `127.0.0.1` or `localhost` + 1. Save your changes to `memcached.conf` and exit the text editor. + 1. Restart memcached. -3. Restart your web server. + ```bash + service memcached restart + ``` - For Apache, `service apache2 restart` +1. Restart your web server. -4. Continue with the next section. + For Apache, `service apache2 restart` + +1. Continue with the next section. ## Verify memcached works before installing Magento {#config-memcache-verify-its-ub} @@ -51,23 +58,25 @@ To verify memcached is recognized by the web server: 1. Create a `phpinfo.php` file in the web server's docroot: - ```php - addServer("", ); @@ -97,7 +105,9 @@ where `` is either `localhost`, `127.0.0.1`, or the me Go to that page in a web browser. For example - `http://192.0.2.1/cache-test.php` +```http +http://192.0.2.1/cache-test.php +``` The first time you go to the page, the following displays: `No matching key found. Refresh the browser to add it!` @@ -105,29 +115,40 @@ Refresh the browser. The message changes to `Successfully retrieved the data!` Finally, you can view the memcache keys using Telnet: - telnet localhost +```bash +telnet localhost +``` At the prompt, enter - stats items +```shell +stats items +``` The result is similar to the following: - STAT items:2:number 1 - STAT items:2:age 106 - STAT items:2:evicted 0 - STAT items:2:evicted_nonzero 0 - STAT items:2:evicted_time 0 - STAT items:2:outofmemory 0 - STAT items:2:tailrepairs 0 - STAT items:2:reclaimed 0 - STAT items:2:expired_unfetched 0 - STAT items:2:evicted_unfetched 0 +```terminal +STAT items:2:number 1 +STAT items:2:age 106 +STAT items:2:evicted 0 +STAT items:2:evicted_nonzero 0 +STAT items:2:evicted_time 0 +STAT items:2:outofmemory 0 +STAT items:2:tailrepairs 0 +STAT items:2:reclaimed 0 +STAT items:2:expired_unfetched 0 +STAT items:2:evicted_unfetched 0 +``` Flush memcached storage and quit Telnet: - flush_all - quit +```shell +flush_all +``` + +```shell +quit +``` [Additional information about the Telnet test](http://www.darkcoding.net/software/memcached-list-all-keys/) diff --git a/guides/v2.2/config-guide/multi-master/multi-master_manual.md b/guides/v2.2/config-guide/multi-master/multi-master_manual.md index 58f2541d95d..ad6c42a6afe 100644 --- a/guides/v2.2/config-guide/multi-master/multi-master_manual.md +++ b/guides/v2.2/config-guide/multi-master/multi-master_manual.md @@ -205,7 +205,7 @@ Run the preceding script: mysql -u root -p ``` -2. At the `mysql>` prompt, run the script as follows: +1. At the `mysql>` prompt, run the script as follows: ```shell source / @@ -48,7 +48,7 @@ When the request for my_page comes, the server does the following: Now it is the client's turn to process this JSON and generate the UI component's instances. The flow is following: 1. RequireJS requires `Magento_Ui/js/core/app` and passes [JSON configuration]({{ page.baseurl }}/javascript-dev-guide/javascript/js_init.html#decl_tag) as a parameter. -2. The `Magento_Ui/js/core/app` calls `layout.js` and passes the UI component’s configuration into the layout: `/view/base/web/js/core/renderer/layout.js`. -3. `layout.js` creates instances of UI components. That means that each UI component’s configuration must have an explicitly declared the `component` property in JSON. This property references the `.js` file. For example, our form has the component declared in JSON like this: `"my_form":{"component":"Magento_Ui/js/form/form"}`. So the instance of this class is created, and properties from the JSON overwrites the properties from the UI component’s `defaults` property. Then resulting properties become the first-level properties of the newly created UI component's instance, and the original `defaults` property is deleted. -4. The UI components’ `.html` templates (if there are any) are rendered by Magento `knockout.js` template engine. This means, that [bootstrap.js]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Ui/view/base/web/js/lib/knockout/bootstrap.js) (required by `app.js`) passes our own [template engine]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Ui/view/base/web/js/lib/knockout/template/engine.js) for the Knockout. -5. The `bootstrap.js` binds the component as a Model behind this View (template) using Knockout bindings. The UI components are now displayed on the page, and are fully interactive. +1. The `Magento_Ui/js/core/app` calls `layout.js` and passes the UI component’s configuration into the layout: `/view/base/web/js/core/renderer/layout.js`. +1. `layout.js` creates instances of UI components. That means that each UI component’s configuration must have an explicitly declared the `component` property in JSON. This property references the `.js` file. For example, our form has the component declared in JSON like this: `"my_form":{"component":"Magento_Ui/js/form/form"}`. So the instance of this class is created, and properties from the JSON overwrites the properties from the UI component’s `defaults` property. Then resulting properties become the first-level properties of the newly created UI component's instance, and the original `defaults` property is deleted. +1. The UI components’ `.html` templates (if there are any) are rendered by Magento `knockout.js` template engine. This means, that [bootstrap.js]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Ui/view/base/web/js/lib/knockout/bootstrap.js) (required by `app.js`) passes our own [template engine]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Ui/view/base/web/js/lib/knockout/template/engine.js) for the Knockout. +1. The `bootstrap.js` binds the component as a Model behind this View (template) using Knockout bindings. The UI components are now displayed on the page, and are fully interactive. diff --git a/guides/v2.2/ui_comp_guide/concepts/ui_comp_template_literals.md b/guides/v2.2/ui_comp_guide/concepts/ui_comp_template_literals.md index d63b24dd126..c747efa3c61 100644 --- a/guides/v2.2/ui_comp_guide/concepts/ui_comp_template_literals.md +++ b/guides/v2.2/ui_comp_guide/concepts/ui_comp_template_literals.md @@ -5,8 +5,6 @@ contributor_name: SwiftOtter Studios contributor_link: https://swiftotter.com/ --- -# Template Literals in Magento - Magento provides for the use of template literals in UI components. Template literals are strings that can contain embedded expressions. They were introduced into JavaScript with ES2015 and were called "template strings" in early editions of the ES2015 / ES6 specification. Since it is a relatively new part of JavaScript, some browsers, such as Internet Explorer 11, do not support the specification. Per the specification standard, back-ticks (`` ` ``) are used instead of a single quote (`'`) or double quote (`"`) to delineate a template string. Due to the lack of browser support, Magento has a JavaScript class that will parse certain strings with a single quote (`'`) in the same way a browser that supports the specification would parse one with back-ticks. Template literals can contain expressions which will be evaluated in the current KnockoutJS context. These expressions can contain nearly any valid [JavaScript](https://glossary.magento.com/javascript). They must start with a dollar sign and be surrounded with curly braces. **Anything inside the following will be evaluated as an expression**: `${ }`. For example, they can be used—and often are—to access properties of the KnockoutJS context like this: `'${ $.submitUrl }'`. They can be used to call functions (`'${ $.loadForm($.formUrl) }'`), or whatever: `'${ 20 + 13 }'`. These expressions are parsed in `/lib/web/mage/utils/template.js`. @@ -22,7 +20,7 @@ The `defaults` property should be an object and is handled in a special way. Eac As a result, every `defaults` child property is handled with what could be viewed as a two step process: 1. Evaluate the value of the property for expressions. For example: `'${ $.submitUrl }'` could become `'https://example.com/contact/form/submit/'` (more on that later). -2. Assign that property/value to the class itself. As a result `class.defaults.submitUrl` would become `class.submitUrl`. +1. Assign that property/value to the class itself. As a result `class.defaults.submitUrl` would become `class.submitUrl`. This part is important because it means that JavaScript classes that extend `Class` (`magento/module-ui/view/base/web/js/lib/core/class.js`) can use the `defaults` property to assign properties to the class itself and leverage template literals during that process without any work on your part. @@ -30,9 +28,9 @@ This part is important because it means that JavaScript classes that extend `Cla Certain properties of the `defaults` object are processed by an additional core JavaScript class: `links.js` (located: `magento/module-ui/view/base/web/js/lib/core/element/links.js`). The object keys in `defaults` are: -- `links` -- `imports` -- `exports` +- `links` +- `imports` +- `exports` They can be used to interact with other UI Component JavaScript classes. While the full use of them is a separate topic, those values can use a colon (`:`) to separate an expression, which should evaluate to a UI Component's name, from the properties to be accessed in that class. Take this example: `'${ $.provider }:user.theme'`. If the `${ $.provider }` expression evaluates to the name of a UI Component that is currently in the registry, that component will be loaded and the value of its `user.theme` property returned. diff --git a/guides/v2.2/ui_comp_guide/howto/new_component_declaration.md b/guides/v2.2/ui_comp_guide/howto/new_component_declaration.md index 7105b30c037..5938c42f650 100644 --- a/guides/v2.2/ui_comp_guide/howto/new_component_declaration.md +++ b/guides/v2.2/ui_comp_guide/howto/new_component_declaration.md @@ -19,21 +19,21 @@ The `` element is typically used for declaring custom components that The `` and `` elements have no mandatory attributes. The following optional attributes are available for both these elements: -- `component`: link to the component's [JavaScript](https://glossary.magento.com/javascript) constructor. -- `class`: link to the component's [PHP](https://glossary.magento.com/php) class. -- `template`: link to component's `.html` template. -- `provider`: link to component's data provider. -- `sortOrder`: component's sort order -- `displayArea`: the placeholder which defines the area for rendering the component in the [layout](https://glossary.magento.com/layout) file. +- `component`: link to the component's [JavaScript](https://glossary.magento.com/javascript) constructor. +- `class`: link to the component's [PHP](https://glossary.magento.com/php) class. +- `template`: link to component's `.html` template. +- `provider`: link to component's data provider. +- `sortOrder`: component's sort order +- `displayArea`: the placeholder which defines the area for rendering the component in the [layout](https://glossary.magento.com/layout) file. {% include note.html type = 'warning' content = 'If the following elements are used inside `` or ``, they should be specified strictly in the following order: -1. `` -2. `` -3. `` +1. `` +1. `` +1. `` For the component configuration inside `` and ``, [use the "arbitrary" structure].' %} @@ -43,7 +43,7 @@ For the component configuration inside `` and ``, [use the If the custom component you create is a [basic UI component] (like Form or Listing), you need to take the following steps to declare it: 1. Specify the XML file with its configuration it in the page layout file in your module, as described in the [About XML configuration of UI components] topic. -2. Declare the component in a separate `.xml` file using the `` or `` as parent node. +1. Declare the component in a separate `.xml` file using the `` or `` as parent node. ## Declare a custom secondary component diff --git a/guides/v2.2/ui_comp_guide/howto/price_rendering.md b/guides/v2.2/ui_comp_guide/howto/price_rendering.md index efcf8c26dc6..92f26f929f9 100644 --- a/guides/v2.2/ui_comp_guide/howto/price_rendering.md +++ b/guides/v2.2/ui_comp_guide/howto/price_rendering.md @@ -12,11 +12,11 @@ Magento is able to operate with a variety of prices, taxes, and product types. The following is a short list of Magento prices: 1. Special Price. -2. Tier Price. -3. Grouped Price. -4. Minimum price of composite products -5. Price range of composite products -6. Manufacturer price (MSRP) +1. Tier Price. +1. Grouped Price. +1. Minimum price of composite products +1. Price range of composite products +1. Manufacturer price (MSRP) Magento represents these prices as price types (e.g. final price, minimum price, maximum price, regular price) and are separate from the actual price in the code. For example, Special Price is represented by the final price type in the code. @@ -25,9 +25,9 @@ For example, Special Price is represented by the final price type in the code. Magento handles taxes as price adjustments and has 3 generic types of taxes: -* Tax -* Fixed Product Tax -* Tax for Fixed Product Tax +* Tax +* Fixed Product Tax +* Tax for Fixed Product Tax Applying and rendering taxes is complicated. A product can have more than one price shown and taxes may or may not apply to all of them. @@ -315,9 +315,9 @@ The following is sample template code that is rendered for the tax adjustment co ## Related Topics -* [Form component][form-component] -* [Listing component][listing-component] -* [Declaring UI Components][ui-component-declaration] +* [Form component][form-component] +* [Listing component][listing-component] +* [Declaring UI Components][ui-component-declaration] [form-component]: {{ page.baseurl }}/ui_comp_guide/components/ui-form.html [listing-component]: {{ page.baseurl }}/ui_comp_guide/components/ui-listing-grid.html diff --git a/guides/v2.2/ui_comp_guide/troubleshoot/ui_comp_troubleshoot_js.md b/guides/v2.2/ui_comp_guide/troubleshoot/ui_comp_troubleshoot_js.md index 99861ae66ad..7ad0e387cfb 100644 --- a/guides/v2.2/ui_comp_guide/troubleshoot/ui_comp_troubleshoot_js.md +++ b/guides/v2.2/ui_comp_guide/troubleshoot/ui_comp_troubleshoot_js.md @@ -14,24 +14,24 @@ To define the UI components used on a page, you can use browser built-in develop To install the knockout debugging plugin for Google Chrome, take the following steps: 1. Open your Google Chrome browser. -2. Expand Google Chrome options drop-down (hamburger in upper right). -3. Select **Settings**. -4. In left pane, select **Extensions**. -5. Scroll to end of the page and click **Get more extensions** link. -6. In the **Search** field write **Knockoutjs context debugger** and press the **Enter** key. -7. In the result, find the [extension](https://glossary.magento.com/extension) named **Knockoutjs context debugger** (usually the first result), and click **Add to Chrome**. +1. Expand Google Chrome options drop-down (hamburger in upper right). +1. Select **Settings**. +1. In left pane, select **Extensions**. +1. Scroll to end of the page and click **Get more extensions** link. +1. In the **Search** field write **Knockoutjs context debugger** and press the **Enter** key. +1. In the result, find the [extension](https://glossary.magento.com/extension) named **Knockoutjs context debugger** (usually the first result), and click **Add to Chrome**. To define the [UI component](https://glossary.magento.com/ui-component) using the plugin: 1. Open the required page in Chrome. -2. Point to the required element on the page, right-click and select **Inspect**. The developer tools panel opens. -3. In the right column of the panel, click the **Knockout context** tab. The tab displays the name and the configuration of the UI component instance. +1. Point to the required element on the page, right-click and select **Inspect**. The developer tools panel opens. +1. In the right column of the panel, click the **Knockout context** tab. The tab displays the name and the configuration of the UI component instance. A simple example: 1. Launch [Magento Admin](https://glossary.magento.com/magento-admin). -2. Navigate to **Products** > **Catalog** and click **Add Product**. The product creation page opens. -3. Right-click on the **Product Name** field and click **Inspect**. Go to the **Knockout context** tab. Here you can see the full context of the field, where you can find JS component file, component name, etc. +1. Navigate to **Products** > **Catalog** and click **Add Product**. The product creation page opens. +1. Right-click on the **Product Name** field and click **Inspect**. Go to the **Knockout context** tab. Here you can see the full context of the field, where you can find JS component file, component name, etc. ![Image Example]({{ site.baseurl }}/common/images/ui_comp_troubleshoot_chrome1.png) @@ -71,16 +71,16 @@ All modern browsers support “debugging” – a special UI in developer tools [DevTools] provides a lot of different tools for different tasks, but the **Sources** panel is where you debug JavaScript. 1. Open the required page in Chrome. -2. Turn on developer tools with F12 (Windows, Linux) or Cmd+Opt+I (Mac). -3. Click the `Sources` tab. +1. Turn on developer tools with F12 (Windows, Linux) or Cmd+Opt+I (Mac). +1. Click the `Sources` tab. ![Sources Panel]({{ site.baseurl }}/common/images/debugging-sources-pane.png) In the previous image, we can see three zones: 1. The `Resources` zone lists all the files as HTML, JavaScript, CSS. -2. The `Source` zone shows the source code of any selected file. -3. The `Information and control` zone is for debugging. +1. The `Source` zone shows the source code of any selected file. +1. The `Information and control` zone is for debugging. ### Breakpoints diff --git a/guides/v2.3/architecture/archi_perspectives/webapi-vision.md b/guides/v2.3/architecture/archi_perspectives/webapi-vision.md index a3f8b0d66ad..880783f56c6 100644 --- a/guides/v2.3/architecture/archi_perspectives/webapi-vision.md +++ b/guides/v2.3/architecture/archi_perspectives/webapi-vision.md @@ -65,7 +65,7 @@ To extend an interface, use [extension attributes]({{ page.baseurl }}/extension- 1. Add a `schema.graphqls` file to the `GraphQl` module. Magento merges this file with configurations from other modules using the same merge rules as other types of configuration. -2. Write any necessary plugins for existing resolvers related to the query, or create a custom resolver and enable it via override in `schema.graphqls` +1. Write any necessary plugins for existing resolvers related to the query, or create a custom resolver and enable it via override in `schema.graphqls` ## Model Consistency Constraints @@ -78,8 +78,8 @@ Any new design related to Web API must satisfy the following constraints to keep 1. Authentication must be done via `\Magento\Authorization\Model\UserContextInterface`. 1. Customer-specific identifiers (such as customer ID or cart ID) must be deducted from the record of the successfully authenticated customer. They must not be accepted via request parameters. 1. All new web API endpoints must be covered with web API functional tests. - * For REST and SOAP, by default, the same test will be executed in the scope of different continuous integration jobs. The base class for REST and SOAP tests is `\Magento\TestFramework\TestCase\WebapiAbstract` - * The base class for GraphQL tests is: `\Magento\TestFramework\TestCase\GraphQlAbstract` + * For REST and SOAP, by default, the same test will be executed in the scope of different continuous integration jobs. The base class for REST and SOAP tests is `\Magento\TestFramework\TestCase\WebapiAbstract` + * The base class for GraphQL tests is: `\Magento\TestFramework\TestCase\GraphQlAbstract` 1. Web API requests must be processed by custom front controllers with optimized routing to prevent the admin and storefront areas from executing routers. 1. Web API schema should be strictly typed. (All complex types should eventually be resolved to scalar types.) 1. Authentication parameters must be passed via headers. diff --git a/guides/v2.3/cloud/project/project-upgrade.md b/guides/v2.3/cloud/project/project-upgrade.md deleted file mode 100644 index b2d8b55300a..00000000000 --- a/guides/v2.3/cloud/project/project-upgrade.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -group: cloud-guide -title: Upgrade Magento version -functional_areas: - - Cloud - - Upgrade ---- - -You can upgrade the core {{site.data.var.ee}} code base to version 2.3. It is best to review the summary of the updated [technology stack]({{site.baseurl}}/guides/v2.3/install-gde/system-requirements-tech.html) before upgrading your project. If you need to upgrade from a version older than 2.1, you must upgrade to a supported version first. See [Upgrades and patches]({{page.baseurl}}/cloud/project/project-upgrade-parent.html) for upgrade path details. - -{% include cloud/note-upgrade.md %} - -{% include cloud/note-ece-tools-package.md %} - -## Back up the database - -{% include cloud/backup-db.md %} - -## Complete the upgrade - -If you use PHP version 7.2, you must remove the `mcrypt` extension from the [`extensions` section of the `.magento.app.yaml` file]({{page.baseurl}}/cloud/project/project-conf-files_magento-app.html#configure-php-options). For Pro projects, you need to create a support ticket to completely disable the `mcrypt` extension. - -1. Change to your Magento root directory and set the upgrade version using the [version constraint syntax]({{page.baseurl}}/cloud/project/ece-tools-upgrade-project.html#metapackage). - - ```bash - composer require "magento/magento-cloud-metapackage":">=2.3.3 <2.3.4" --no-update - ``` - - {: .bs-callout-info } - You must use the version constraint syntax to successfully update the `{{site.data.var.ct}}` package. - -1. Update the project. - - ```bash - composer update - ``` - -1. Add, commit, and push code changes. - - ```bash - git add -A && git commit -m "Upgrade" && git push origin - ``` - - `git add -A` is required to add all changed files to source control because of the way Composer marshals base packages. Both `composer install` and `composer update` marshal files from the base package (that is, `magento/magento2-base` and `magento/magento2-ee-base`) into the package root. - - The files Composer marshals belong to the new version of Magento, to overwrite the outdated version of those same files. Currently, marshaling is disabled in {{site.data.var.ee}}, so you must add the marshaled files to source control. - -1. Wait for deployment to complete. - -1. Verify the upgrade in your Integration, Staging, or Production environment by using SSH to log in and check the version. - - ```bash - bin/magento --version - ``` - -## Verify and upgrade your extensions {#extensions} - -{% -include note.html -type='info' -content='Review your third-party extension and module pages in Marketplace or other company sites to verify support for Magento Commerce 2.3. - -If you need to upgrade any third-party extensions and modules that support version 2.3, we recommend working in a new Integration branch with your extensions disabled.' -%} - -1. Create a new branch on your local workstation. -1. Disable your extensions as needed. -1. When available, download extension upgrades. -1. Install the upgrade as documented by the third-party documentation. -1. Enable and test the extension. -1. Add, commit, and push the code changes to the remote. -1. Push to and test in your Integration environment. -1. Push to the Staging environment to test in a pre-production environment. - -We strongly recommend upgrading your Production environment _before_ including the upgraded extensions in your go-live process. - -We strongly recommend upgrading your Fastly module to the latest version. - -## Troubleshoot upgrade - -If the upgrade failed, you receive an error message in the browser indicating you cannot access your storefront or the Magento Admin pane: - -```terminal -There has been an error processing your request -Exception printing is disabled by default for security reasons. - Error log record number: -``` - -{:.procedure} -To resolve the error: - -1. Using SSH, log in to the remote server and open the `./app/var/report/` file. - -1. [Examine the logs]({{page.baseurl}}/cloud/project/log-locations.html) to determine the source of the issue. - -1. Add, commit, and push code changes. - - ```bash - git add -A && git commit -m "Fixed deployment failure" && git push origin - ``` diff --git a/guides/v2.3/cloud/project/project-upgrade.md b/guides/v2.3/cloud/project/project-upgrade.md new file mode 120000 index 00000000000..230f7142483 --- /dev/null +++ b/guides/v2.3/cloud/project/project-upgrade.md @@ -0,0 +1 @@ +../../../v2.2/cloud/project/project-upgrade.md \ No newline at end of file diff --git a/guides/v2.3/cloud/project/projects.md b/guides/v2.3/cloud/project/projects.md deleted file mode 100644 index 3170eccce8a..00000000000 --- a/guides/v2.3/cloud/project/projects.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -group: cloud-guide -title: Manage your project -functional_areas: - - Cloud ---- - -The {{site.data.var.ece}} *project* includes all code in Git branches, associated environments, and *applications*. Applications have *environments* and *services* that run on them including a database, web server, and caching server. - -We provide a Project Web Interface and CLI commands to fully manage all aspects of your project. You have full access to all environments for Starter and Pro environments. You can also use SSH and CLI commands to manage your environments. - -To manage your project, environment, and branches, see: - -- [Configure your project]({{ page.baseurl }}/cloud/project/project-webint-basic.html) -- [Project structure]({{ page.baseurl }}/cloud/project/project-start.html) -- [Create and manage users]({{ page.baseurl }}/cloud/project/user-admin.html) -- Manage branches with the [Project Web Interface]({{ page.baseurl }}/cloud/project/project-webint-branch.html) or [CLI commands]({{ page.baseurl }}/cloud/env/environments-start.html) -- [Snapshots and backup management]({{ page.baseurl }}/cloud/project/project-webint-snap.html) - -### Project and environment variables {#variables} - -The following sections detail more about project and environment variables: - -- [Overview of environment variables]({{ page.baseurl }}/cloud/env/variables-intro.html) -- [{{site.data.var.ece}} environment variables]({{ page.baseurl }}/cloud/env/environment-vars_cloud.html) -- [Magento application environment variables]({{ page.baseurl }}/cloud/env/environment-vars_magento.html) -- [Configuration management]({{ page.baseurl }}/cloud/live/sens-data-over.html) -- [Example of configuration management]({{ page.baseurl }}/cloud/live/sens-data-initial.html) - -### Upgrade and patch {#upgrade} - -To upgrade and patch Magento, see: - -- [Upgrade and test Magento Commerce]({{ page.baseurl }}/cloud/project/project-upgrade.html) -- [Patch and test Magento Commerce]({{ page.baseurl }}/cloud/project/project-patch.html) - -## Access the Project Web Interface {#login} - -With your {{site.data.var.ece}} account created, you can log into the Project Web Interface at [https://accounts.magento.cloud](https://accounts.magento.cloud). - -![Log in to a project]({{ site.baseurl }}/common/images/cloud_project-login.png){:width="450px"} - -## Fastly, New Relic, and Blackfire credentials {#integrations} - -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). - -- [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. - -- [New Relic](https://newrelic.com) provides application metrics and performance information for Staging and Production environments. - -To review your integration tokens, IDs, and more: - -1. As the {{site.data.var.ece}} Account Owner, log in to your project. - -1. In the upper right corner, click **<your name>** > **Account Settings**. - - ![Go to account settings]({{ site.baseurl }}/common/images/cloud_acct-settings-option.png) - -1. On your account page, click **View Details** for your project to open general settings and plan details. - - ![View your project details]({{ site.baseurl }}/common/images/cloud_blackfire-edit-details.png) - -1. On your project details page, scroll to and expand **Blackfire** and **New Relic** to review your credentials. - - ![Your Blackfire credentials]({{ site.baseurl }}/common/images/cloud_blackfire-account-info.png) - -## Access the project and environments {#project} - -When you first login, a list of projects you have access to displays. As a Project Owner, you may only see your company's project. A Magento Solution Partner may see multiple projects for all of the clients they support. - -Click on a project to access branches and more. On the page, you will see a hierarchy of environments named by the Git branch. - -For **Starter**, you will see a hierarchy of branches starting from Master (Production). Any branches you create display as children from Master. We recommend creating a Staging branch, then branching from that for your Integration development. For more information, see [Starter architecture]({{ page.baseurl }}/cloud/basic-information/starter-architecture.html). - -![Starter branch hierarchy]({{ site.baseurl }}/common/images/cloud_project-starter.png) - -For **Pro**, you will see a hierarchy of branches starting from Production to Staging to Integration. The ![Enterprise icon]({{ site.baseurl }}/common/images/cloud_icon-enterprise.png) icon indicates these branches deploy to a dedicated server, used by Staging and Production. Any branches you create display as children from Integration. For more information, see [Pro architecture]({{ page.baseurl }}/cloud/architecture/pro-architecture.html). - -![Pro branch hierarchy]({{ site.baseurl }}/common/images/cloud_project-pro.png) - -The following table details the branches for Pro: - -| Branch | Environment | Description | -|---------- -| (no branch) | Global Master | This "branch" captures global project changes including adding user accounts and variables. **Important:** Do not create branches from or merge to Global Master. | -| `production` | Production | This is a child branch from `master` with a deployment target. You cannot branch from this branch. You merge code from `master` to this branch to go live with updated configurations and code. | -| `staging` | Staging | This is a child branch from `master` with a deployment target. You cannot branch from this branch. You merge code from `master` to this branch to test in a pre-production environment. | -| `master` | Integration master | The master branch of the single repository. In the Project Web Interface, this is called Integration. You branch from `master` for your development on your local, generating an environment when you push code. When this code is complete, you merge to `staging` and `production`. | - -To access an environment store and admin, select a branch and click **Access Site**. A list of store URLs and SSH command display. Select the URL to view the store in that environment. - -![Access your project]({{ site.baseurl }}/common/images/cloud_project-access.png) - -The Pro plan Production environment includes three nodes that you can access using the following links: - -- Load balancer URL: `http[s]://.c..ent.magento.cloud` -- Direct access to one of the three redundant servers: `http[s]://.{1|2|3}..ent.magento.cloud` - - The production URL is used by the content delivery network (CDN). - -If you have inactive Git branches of code, you can toggle displaying the branches in the hierarchy. - -![Show or hide inactive branches]({{ site.baseurl }}/common/images/cloud_show-inactive.png) - -## Configure environments {#configure} - -You can manage variables and settings for Production, Staging, and Integration environments through this interface, or with CLI commands. Click **Configure environment** to create and manage [*environments*]({{ page.baseurl }}/cloud/env/environments.html), each of which corresponds to a Git branch. - -![Access your project]({{ site.baseurl }}/common/images/cloud_project-env.png) - -This displays the following page, which enables you to configure settings, [variables]({{ page.baseurl }}/cloud/project/project-conf-files_magento-app.html), [routes]({{ page.baseurl }}/cloud/project/project-conf-files_routes.html), and [users]({{ page.baseurl }}/cloud/project/user-admin.html). - -![configure environments]({{ site.baseurl }}/common/images/cloud_project-conf-env.png) - -### Environment configuration variables -On the *Variables* tab, you can view, create, and manage environment variables for your project. For example, after we add your project to the {{ site.data.var.ece }} Fastly service account, you can view the Fastly API token and service ID credentials as shown in the following example: - -![Environment variables fastly credentials]({{ site.baseurl }}/common/images/cloud/cloud-project-web-ui-environment-variables.png) - -You can also [list and review]({{ page.baseurl }}/cloud/before/before-setup-env-2_clone.html) environment variables using the following Magento Cloud CLI command. - -```bash -magento-cloud variable:get -e - ``` - -## Configure the project - -Click ![edit project]({{ site.baseurl }}/common/images/cloud_edit-project.png) (edit) to display users and deploy keys associated with the project. You can modify access and permissions across the entire project and per environment (or branch). - -![configure project]({{ site.baseurl }}/common/images/cloud_project-config.png) diff --git a/guides/v2.3/cloud/project/projects.md b/guides/v2.3/cloud/project/projects.md new file mode 120000 index 00000000000..a6cb1269161 --- /dev/null +++ b/guides/v2.3/cloud/project/projects.md @@ -0,0 +1 @@ +../../../v2.2/cloud/project/projects.md \ No newline at end of file diff --git a/guides/v2.3/comp-mgr/cli/cli-upgrade.md b/guides/v2.3/comp-mgr/cli/cli-upgrade.md index d8510107cea..747fad80895 100644 --- a/guides/v2.3/comp-mgr/cli/cli-upgrade.md +++ b/guides/v2.3/comp-mgr/cli/cli-upgrade.md @@ -12,8 +12,8 @@ functional_areas: You can upgrade your Magento application from the command line if you installed the software by: -- Downloading the [metapackage][] using `composer create-project`. -- Installing the compressed archive. +- Downloading the [metapackage][] using `composer create-project`. +- Installing the compressed archive. Do not use this method to upgrade if you cloned the Magento 2 GitHub repository. Instead, see [Update the Magento application][] for upgrade instructions. @@ -22,10 +22,10 @@ Instead, see [Update the Magento application][] for upgrade instructions. Complete the following prerequisites to prepare your environment before starting the upgrade process: -- **Complete the Update and upgrade checklist**—To avoid possible errors during installation or upgrading, complete the [Update and upgrade checklist]. -- **Set the `pub/` directory root**—See [Modify docroot to improve security][] for more details. -- **Check PHP and environment settings**—Verify that your PHP and other environment settings are compatible with the [system requirements]. -- **Switch to maintenance mode**—To prevent access to your store while it's being upgraded, switch your store to maintenance mode: +- **Complete the Update and upgrade checklist**—To avoid possible errors during installation or upgrading, complete the [Update and upgrade checklist]. +- **Set the `pub/` directory root**—See [Modify docroot to improve security][] for more details. +- **Check PHP and environment settings**—Verify that your PHP and other environment settings are compatible with the [system requirements]. +- **Switch to maintenance mode**—To prevent access to your store while it's being upgraded, switch your store to maintenance mode: ```bash bin/magento maintenance:enable @@ -230,11 +230,11 @@ Open your storefront URL in a web browser to check whether the upgrade was succe If the application fails with a `We're sorry, an error has occurred while generating this email.` error: 1. Reset [file system ownership and permissions] as a user with `root` privileges. -2. Clear the following directories: - - `var/cache/` - - `var/page_cache/` - - `generated/code/` -3. Check your storefront in your web browser again. +1. Clear the following directories: + - `var/cache/` + - `var/page_cache/` + - `generated/code/` +1. Check your storefront in your web browser again. ## Alternatives @@ -243,7 +243,7 @@ There are alternatives methods that automate parts of the upgrade process: 1. [Upgrade using the script][] (semi-automated process) Upgrading using the script process is a bit easier and less intensive if you have not made updates to values that the script affects. If you previously made updates, do not upgrade using the script. The script will override your updates. -2. EXPERIMENTAL: [Upgrade using the custom Composer plugin][] +1. EXPERIMENTAL: [Upgrade using the custom Composer plugin][] We are developing a [custom Composer plugin][] that enhances the semi-automated upgrade process. The upgrading scenario is the same for each of these options. Both use Composer and a command line interface. diff --git a/guides/v2.3/comp-mgr/cli/upgrade-with-plugin.md b/guides/v2.3/comp-mgr/cli/upgrade-with-plugin.md index 28dfbe41ba1..575ef033449 100644 --- a/guides/v2.3/comp-mgr/cli/upgrade-with-plugin.md +++ b/guides/v2.3/comp-mgr/cli/upgrade-with-plugin.md @@ -98,23 +98,24 @@ composer show magento/product-enterprise-edition {{ page.guide_version }}.* --al _Optional_—If the Magento updater is installed (it is located in `update/`) modify it: 1. Backup `update/` directory. -2. Create a Composer project. +1. Create a Composer project. _{{ ce }} version {{ page.guide_version }}.2:_ - ```bash - composer create-project --repository=https://repo.magento.com magento/project-community-edition={{ page.guide_version }}.2 temp_dir --no-install - ``` + ```bash + composer create-project --repository=https://repo.magento.com magento/project-community-edition={{ page.guide_version }}.2 temp_dir --no-install + ``` + + _{{ ee }} version {{ page.guide_version }}.2:_ - _{{ ee }} version {{ page.guide_version }}.2:_ + ```bash + composer create-project --repository=https://repo.magento.com magento/project-enterprise-edition={{ page.guide_version }}.2 temp_dir --no-install + ``` - ```bash - composer create-project --repository=https://repo.magento.com magento/project-enterprise-edition={{ page.guide_version }}.2 temp_dir --no-install - ``` + {: .bs-callout-info } + If you need to use a repository that contains non-public packages, such as internal sandboxes, change the URL in `--repository` accordingly. - {: .bs-callout-info } - If you need to use a repository that contains non-public packages, such as internal sandboxes, change the URL in `--repository` accordingly. -3. Remove the old `update/` directory and move the `temp_dir/update/` to the `update/` directory: +1. Remove the old `update/` directory and move the `temp_dir/update/` to the `update/` directory: ```bash rm -rf update @@ -195,11 +196,11 @@ Open your storefront URL in a web browser to check whether the upgrade was succe If the application fails with a `We're sorry, an error has occurred while generating this email.` error: 1. Reset [file system ownership and permissions] as a user with `root` privileges. -2. Clear these directories: - - `var/cache` - - `var/page_cache` - - `generated/code` -3. Check your storefront in your web browser again. +1. Clear these directories: + - `var/cache` + - `var/page_cache` + - `generated/code` +1. Check your storefront in your web browser again. diff --git a/guides/v2.3/comp-mgr/cli/upgrade-with-script.md b/guides/v2.3/comp-mgr/cli/upgrade-with-script.md index c4aa23eb016..74a9a9fcaa7 100644 --- a/guides/v2.3/comp-mgr/cli/upgrade-with-script.md +++ b/guides/v2.3/comp-mgr/cli/upgrade-with-script.md @@ -12,13 +12,13 @@ Use [the manual process] if you previously made updates to the same values that The upgrade script: -- Updates Magento with the {{ page.guide_version }} requirements. -- Backs up the `composer.json` file. -- Specifies the new version of the Magento metapackage. -- Updates the `"require-dev"` section in the `composer.json` file. -- Adds `"Zend\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/"` to the `"autoload":"psr-4"` section in the `composer.json` file. -- Backs up and updates the `magento/updater`, if it has been installed. -- Updates the `"name"`, `"version"`, and `"description"` fields in the `composer.json` file. +- Updates Magento with the {{ page.guide_version }} requirements. +- Backs up the `composer.json` file. +- Specifies the new version of the Magento metapackage. +- Updates the `"require-dev"` section in the `composer.json` file. +- Adds `"Zend\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/"` to the `"autoload":"psr-4"` section in the `composer.json` file. +- Backs up and updates the `magento/updater`, if it has been installed. +- Updates the `"name"`, `"version"`, and `"description"` fields in the `composer.json` file. ## Before you begin @@ -94,11 +94,11 @@ Open your storefront URL in a web browser to check whether the upgrade was succe If the application fails with a `We're sorry, an error has occurred while generating this email.` error: 1. Reset [file system ownership and permissions] as a user with `root` privileges. -2. Clear these directories: - - `/var/cache` - - `/var/page_cache` - - `/generated/code` -3. Check your storefront in your web browser again. +1. Clear these directories: + - `/var/cache` + - `/var/page_cache` + - `/generated/code` +1. Check your storefront in your web browser again. diff --git a/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-set.md b/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-set.md index 7b1b33c10ee..692e5b1fde7 100644 --- a/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-set.md +++ b/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-set.md @@ -11,47 +11,48 @@ functional_areas: This topic discusses advanced configuration commands you can use to: -* Set any configuration option from the command line -* Optionally lock any configuration option so its value cannot be changed in the Magento Admin -* Change a configuration option that is locked in the Magento Admin +* Set any configuration option from the command line +* Optionally lock any configuration option so its value cannot be changed in the Magento Admin +* Change a configuration option that is locked in the Magento Admin You can use these commands to set the Magento configuration manually or using scripts. You set configuration options using a _configuration path_, which is a `/`-delimited string that uniquely identifies that configuration option. You can find configuration paths in the following references: -* [Sensitive and system-specific configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-sens.html) -* [Payment configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-payment.html) -* [Other configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-most.html) -* [Magento Enterprise B2B Extension configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-b2b.html) +* [Sensitive and system-specific configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-sens.html) +* [Payment configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-payment.html) +* [Other configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-most.html) +* [Magento Enterprise B2B Extension configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-b2b.html) You can set values at the following times: -* Before you install Magento, you can set configuration values for the default scope only. +* Before you install Magento, you can set configuration values for the default scope only. - That's because before you install Magento, the default scope is the only valid scope. -* After you install Magento, you can set configuration values for any [website](https://glossary.magento.com/website) or [store view](https://glossary.magento.com/store-view) scope. + That's because before you install Magento, the default scope is the only valid scope. + +* After you install Magento, you can set configuration values for any [website](https://glossary.magento.com/website) or [store view](https://glossary.magento.com/store-view) scope. Use the following commands: -* `bin/magento config:set` sets any non-sensitive configuration value by its configuration path -* `bin/magento config:sensitive:set` sets any sensitive configuration value by its configuration path -* `bin/magento config:show` shows saved configuration values; values of encrypted settings are displayed as asterisks +* `bin/magento config:set` sets any non-sensitive configuration value by its configuration path +* `bin/magento config:sensitive:set` sets any sensitive configuration value by its configuration path +* `bin/magento config:show` shows saved configuration values; values of encrypted settings are displayed as asterisks ## Prerequisites To set a configuration value, you must know at least one of the following: -* The configuration path -* To set a configuration value for a particular scope, you must know the scope code. +* The configuration path +* To set a configuration value for a particular scope, you must know the scope code. - To set a configuration value for the default scope, you don't need to do anything. + To set a configuration value for the default scope, you don't need to do anything. ### Find the configuration path See the following references: -* [Sensitive and system-specific configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-sens.html) -* [Payment configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-payment.html) -* [Other configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-most.html) -* [Magento Enterprise B2B Extension configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-b2b.html) +* [Sensitive and system-specific configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-sens.html) +* [Payment configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-payment.html) +* [Other configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-most.html) +* [Magento Enterprise B2B Extension configuration paths reference]({{ page.baseurl }}/config-guide/prod/config-reference-b2b.html) ### Find the scope code @@ -61,14 +62,15 @@ You can find the scope code either in the Magento database or in the Magento [Ad {% collapsible To find the scope code in the Admin: %} -1. Log in to the Admin as a user who can view websites and store views. -2. Click **Stores** > Settings > **All Stores**. -3. In the right pane, click the name of the website or store view to see its code. +1. Log in to the Admin as a user who can view websites and store views. +1. Click **Stores** > Settings > **All Stores**. +1. In the right pane, click the name of the website or store view to see its code. + + The following figure shows a sample website code. - The following figure shows a sample website code. + ![Get a website or store view code from the Admin]({{ site.baseurl }}/common/images/config_configset_website-code.png){:width="450px"} - ![Get a website or store view code from the Admin]({{ site.baseurl }}/common/images/config_configset_website-code.png){:width="450px"} -4. Continue with [Set configuration values](#config-cli-config-set). +1. Continue with [Set configuration values](#config-cli-config-set). {% endcollapsible %} @@ -80,29 +82,42 @@ Scope codes for websites and store views are stored in the Magento database in t To find the values in the database: -1. Connect to the Magento database. +1. Connect to the Magento database. + + ```bash + mysql -u -p + ``` - mysql -u -p -2. Enter the following commands: +1. Enter the following commands: - use ; - SELECT * FROM store; - SELECT * FROM store_website; + ```shell + use ; + ``` - A sample result follows: + ```shell + SELECT * FROM store; + ``` - [mysql]> SELECT * FROM store_website; - +------------+-------+--------------+------------+------------------+------------+ - | website_id | code | name | sort_order | default_group_id | is_default | - +------------+-------+--------------+------------+------------------+------------+ - | 0 | admin | Admin | 0 | 0 | 0 | - | 1 | base | Main Website | 0 | 1 | 1 | - | 2 | test1 | Test Website | 0 | 3 | 0 | - +------------+-------+--------------+------------+------------------+------------+ + ```shell + SELECT * FROM store_website; + ``` - Use the value in the `code` column. + A sample result follows: -3. Continue with the next section. + ```terminal + [mysql]> SELECT * FROM store_website; + +------------+-------+--------------+------------+------------------+------------+ + | website_id | code | name | sort_order | default_group_id | is_default | + +------------+-------+--------------+------------+------------------+------------+ + | 0 | admin | Admin | 0 | 0 | 0 | + | 1 | base | Main Website | 0 | 1 | 1 | + | 2 | test1 | Test Website | 0 | 3 | 0 | + +------------+-------+--------------+------------+------------------+------------+ + ``` + + Use the value in the `code` column. + +1. Continue with the next section. {% endcollapsible %} @@ -133,17 +148,19 @@ Parameter | Description {:.bs-callout .bs-callout-info} -* As of Magento 2.2.4, the `--lock-env` and `--lock-config` options replace the `--lock` option. -* If you use the `--lock-env` or `--lock-config` option to set or change a value, you must use the [`bin/magento app:config:import` command]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-config-mgmt-import.html) to import the setting before you access the Admin or storefront. +* As of Magento 2.2.4, the `--lock-env` and `--lock-config` options replace the `--lock` option. +* If you use the `--lock-env` or `--lock-config` option to set or change a value, you must use the [`bin/magento app:config:import` command]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-config-mgmt-import.html) to import the setting before you access the Admin or storefront. If you enter an incorrect configuration path, this command returns an error - The "wrong/config/path" does not exist +```text +The "wrong/config/path" does not exist +``` See one of the following sections for more information: -* [Set configuration values that can be edited in the Magento Admin](#config-cli-config-set-edit) -* [Set configuration values that cannot be edited in the Magento Admin](#config-cli-config-file) +* [Set configuration values that can be edited in the Magento Admin](#config-cli-config-set-edit) +* [Set configuration values that cannot be edited in the Magento Admin](#config-cli-config-file) ### Set configuration values that can be edited in the Magento Admin {#config-cli-config-set-edit} @@ -203,9 +220,9 @@ bin/magento config:show [--scope[="..."]] [--scope-code[="..."]] path where -* `--scope` is the scope of configuration (default, website, store). The default value is `default` -* `--scope-code` is the scope code of configuration (website code or store view code) -* `path` is the configuration path in format first_part/second_part/third_part/etc *(required)* +* `--scope` is the scope of configuration (default, website, store). The default value is `default` +* `--scope-code` is the scope code of configuration (website code or store view code) +* `path` is the configuration path in format first_part/second_part/third_part/etc *(required)* {:.bs-callout .bs-callout-info} The `bin/magento config:show` command displays the values of any [encrypted values]({{ page.baseurl }}/config-guide/prod/config-reference-sens.html) as a series of asterisks: `******`. diff --git a/guides/v2.3/config-guide/cli/config-cli-subcommands-i18n.md b/guides/v2.3/config-guide/cli/config-cli-subcommands-i18n.md index 50092b6f461..d8ae3f661f1 100644 --- a/guides/v2.3/config-guide/cli/config-cli-subcommands-i18n.md +++ b/guides/v2.3/config-guide/cli/config-cli-subcommands-i18n.md @@ -15,8 +15,8 @@ Magento translations enable you to customize and localize your store for multipl This topic discusses how to generate: -- Translation dictionaries, which are a convenient way to customize or translate *some* words and phrases, such as those for a custom [module](https://glossary.magento.com/module) or [theme](https://glossary.magento.com/theme). -- Language packages, which enable you to translate *any or all* words and phrases in the Magento application. +- Translation dictionaries, which are a convenient way to customize or translate *some* words and phrases, such as those for a custom [module](https://glossary.magento.com/module) or [theme](https://glossary.magento.com/theme). +- Language packages, which enable you to translate *any or all* words and phrases in the Magento application. See [Translations overview]. @@ -32,14 +32,14 @@ To begin translating, use a command to generate a dictionary `.csv` file with a Generate the dictionary and translate: -1. Extract translatable words and phrases from enabled components using the translation collection command. Content extracts into a `.csv` file. -1. Translate the existing words and phrases. You can also add additional custom terms as needed. +1. Extract translatable words and phrases from enabled components using the translation collection command. Content extracts into a `.csv` file. +1. Translate the existing words and phrases. You can also add additional custom terms as needed. -You have options for using the translated dictionary: + You have options for using the translated dictionary: -1. You can package the translation dictionaries into a language package and provide the package to the Magento store administrator. +1. You can package the translation dictionaries into a language package and provide the package to the Magento store administrator. -1. In the Magento Admin, the store administrator [configures the translations]. +1. In the Magento Admin, the store administrator [configures the translations]. Command options: @@ -62,17 +62,21 @@ To create a language pack from a translation dictionary, you *must* use the `-m| Use the following guidelines when translating words and phrases: -- Change the contents of the second column only. Translate the phrases from English (`US`) to the desired language. -- When creating dictionaries for locales, use the default Magento strings. -- While translating, pay attention to placeholders like `%1`, `%2` and so on. +- Change the contents of the second column only. Translate the phrases from English (`US`) to the desired language. +- When creating dictionaries for locales, use the default Magento strings. +- While translating, pay attention to placeholders like `%1`, `%2` and so on. Magento uses the placeholders to insert context values; they are *not* used for translations. For example: - Product '%1' has been added to shopping cart. +```text +Product '%1' has been added to shopping cart. +``` Populates with a value: - Product 'Multimeter-2000' has been added to shopping cart. +```text +Product 'Multimeter-2000' has been added to shopping cart. +``` The resulting phrase must contain at least one of each placeholder. For example, suppose there are placeholders from `%1` to `%3` in the original phrase. @@ -89,13 +93,13 @@ As opposed to a translation dictionary, you can translate any or all words and p This section discusses how to create a language package, which writes `.csv` files to modules and themes. To create a language package, you must perform the tasks discussed in the following sections: -1. [Collect and translate words and phrases](#config-cli-subcommands-xlate-dict). +1. [Collect and translate words and phrases](#config-cli-subcommands-xlate-dict). - (The `--magento` parameter is required.) + (The `--magento` parameter is required.) -2. [Run the language package command](#config-cli-subcommands-xlate-pack-cmd). -3. [Create directories and files](#m2devgde-xlate-files). -4. (Optional.) [Configure multiple packages for a language](#m2devgde-xlate-severalpacks). +1. [Run the language package command](#config-cli-subcommands-xlate-pack-cmd). +1. [Create directories and files](#m2devgde-xlate-files). +1. (Optional.) [Configure multiple packages for a language](#m2devgde-xlate-severalpacks). ### Run the language package command {#config-cli-subcommands-xlate-pack-cmd} @@ -118,24 +122,24 @@ The following table explains this command's parameters and values: Language packages are located in a directory under `app/i18n/` in the Magento file system with the following contents: -- Required license files -- `composer.json` -- `registration.php` that [registers] the language package -- [`language.xml`](#config-cli-subcommands-xlate-pack-meta-xml) meta-information file +- Required license files +- `composer.json` +- `registration.php` that [registers] the language package +- [`language.xml`](#config-cli-subcommands-xlate-pack-meta-xml) meta-information file {:.bs-callout .bs-callout-info} You must lowercase the entire path. For example, see [`de_de`]. To create these files: -1. Create a directory under `app/i18n`. +1. Create a directory under `app/i18n`. For example, Magento language packages are located in `app/i18n/magento` -2. Add any license files you require. -3. Add [`composer.json`] that specifies dependencies for your language package. -4. Register the language package with [`registration.php`] -5. Add `language.xml` meta-information file as discussed in the next section. +1. Add any license files you require. +1. Add [`composer.json`] that specifies dependencies for your language package. +1. Register the language package with [`registration.php`] +1. Add `language.xml` meta-information file as discussed in the next section. #### Language package language.xml {#config-cli-subcommands-xlate-pack-meta-xml} @@ -158,11 +162,11 @@ To declare a package, specify the following information: Where: -- **``:** Language package locale (required) -- **``:** Module's vendor name (required) -- **``:** Language package name (required) -- **``:** Priority of uploading a package when there are several language packages available for a store -- **``:** Parent language package locale from which to inherit dictionaries +- **``:** Language package locale (required) +- **``:** Module's vendor name (required) +- **``:** Language package name (required) +- **``:** Priority of uploading a package when there are several language packages available for a store +- **``:** Parent language package locale from which to inherit dictionaries If necessary, you can specify several parent packages. The parent packages are applied on a first listed, first used basis. @@ -185,17 +189,17 @@ If a language package inherits from two packages, its `language.xml` might look In the preceding example: -- `language_package_one` inherits from `en_au_package` and `en_au_package` inherits from `en_ie_package` -- `language_package_two` inherits from `en_ca_package` and `en_ca_package` inherits from `en_us_package` +- `language_package_one` inherits from `en_au_package` and `en_au_package` inherits from `en_ie_package` +- `language_package_two` inherits from `en_ca_package` and `en_ca_package` inherits from `en_us_package` If the Magento application cannot find word or phrase in the `en_GB` package, it looks in other packages in following sequence: -1. `parent-package-one/language_package_one` -1. `/en_au_package` -1. `/en_ie_package` -1. `parent-package-two/language_package_two` -1. `/en_ca_package` -1. `/en_us_package` +1. `parent-package-one/language_package_one` +1. `/en_au_package` +1. `/en_ie_package` +1. `parent-package-two/language_package_two` +1. `/en_ca_package` +1. `/en_us_package` Specifying all inheritances between the language packages might result in creating circular inheritance chains. Use [Magento\Test\Integrity\App\Language\CircularDependencyTest] test to locate and fix such chains. @@ -209,8 +213,8 @@ To enable an additional package for an existing language, name the new package a The following sections provide end-to-end examples of using the commands discussed in this topic to create translation dictionaries and translation packages: -- [Example: Create a translation dictionary for a module or theme](#config-cli-subcommands-xlate-example1) -- [Example: Create a language package](#config-cli-subcommands-xlate-example2) +- [Example: Create a translation dictionary for a module or theme](#config-cli-subcommands-xlate-example1) +- [Example: Create a language package](#config-cli-subcommands-xlate-example2) ### Example: Create a translation dictionary for a module or theme {#config-cli-subcommands-xlate-example1} @@ -225,8 +229,8 @@ To add a German translation to a module or theme that you want to distribute to {:.bs-callout .bs-callout-info} The .csv file name must _exactly match_ the locale, including the characters' case. -1. Translate the words and phrases using [these guidelines](#config-cli-subcommands-xlate-dict-trans). -1. If necessary, copy `xx_YY.csv` to `/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n` or to the module's theme directory (depending on whether the translation dictionary is for a module or a theme). +1. Translate the words and phrases using [these guidelines](#config-cli-subcommands-xlate-dict-trans). +1. If necessary, copy `xx_YY.csv` to `/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n` or to the module's theme directory (depending on whether the translation dictionary is for a module or a theme). ### Example: Create a language package {#config-cli-subcommands-xlate-example2} @@ -234,19 +238,19 @@ Similar to the preceding example, generate a `.csv` file, but instead of specify 1. Collect phrases from your module: - ```bash - bin/magento i18n:collect-phrases -o "/var/www/html/magento2/xx_YY.csv" -m - ``` + ```bash + bin/magento i18n:collect-phrases -o "/var/www/html/magento2/xx_YY.csv" -m + ``` - {:.bs-callout .bs-callout-info} - The `.csv` file name must _exactly match_ the locale, including the characters' case. + {:.bs-callout .bs-callout-info} + The `.csv` file name must _exactly match_ the locale, including the characters' case. 1. Translate the words and phrases using [these guidelines](#config-cli-subcommands-xlate-dict-trans). 1. Create the language package. - ```bash - bin/magento i18n:pack /var/www/html/magento2/xx_YY.csv -d xx_YY - ``` + ```bash + bin/magento i18n:pack /var/www/html/magento2/xx_YY.csv -d xx_YY + ``` 1. Create a directory for the language package. @@ -312,8 +316,8 @@ Similar to the preceding example, generate a `.csv` file, but instead of specify ## Additional information -- [Translations overview] -- [Translate theme strings] +- [Translations overview] +- [Translate theme strings] [Translate theme strings]: {{ page.baseurl }}/frontend-dev-guide/translations/translate_theory.html [Translations overview]: {{ page.baseurl }}/frontend-dev-guide/translations/xlate.html diff --git a/guides/v2.3/config-guide/cli/logging.md b/guides/v2.3/config-guide/cli/logging.md index c37430d837e..2454e40b37a 100644 --- a/guides/v2.3/config-guide/cli/logging.md +++ b/guides/v2.3/config-guide/cli/logging.md @@ -12,38 +12,38 @@ functional_areas: ## Debug logging -By default, Magento writes to the debug log (`/var/log/debug.log`) when it is in default or develop mode, but not when it is in production mode. Use the `bin/magento setup:config:set --enable-debug-logging=true | false` command to change the default value. +By default, Magento writes to the debug log (`/var/log/debug.log`) when it is in default or develop mode, but not when it is in production mode. Use the `bin/magento setup:config:set --enable-debug-logging` command to change the default value. -{:.bs-callout .bs-callout-info} -As of Magento 2.3.1, you can no longer use the `bin/magento config:set dev/debug/debug_logging 1 | 0` command to enable or disable debug logging for the current mode. +{: .bs-callout-info} +As of Magento 2.3.1, you can no longer use the `bin/magento config:set dev/debug/debug_logging` command to enable or disable debug logging for the current mode. ### To enable debug logging 1. Use the `setup:config:set` command to enable debug logging for the current mode. - ```bash - bin/magento setup:config:set --enable-debug-logging=true - ``` + ```bash + bin/magento setup:config:set --enable-debug-logging=true + ``` -2. Flush the cache. +1. Flush the cache. - ```bash - bin/magento cache:flush - ``` + ```bash + bin/magento cache:flush + ``` ### To disable debug logging 1. Use the `setup:config:set` command to disable debug logging for the current mode. - ```bash - bin/magento setup:config:set --enable-debug-logging=false - ``` + ```bash + bin/magento setup:config:set --enable-debug-logging=false + ``` 1. Flush the cache. - ```bash - bin/magento cache:flush - ``` + ```bash + bin/magento cache:flush + ``` ## Database logging @@ -53,19 +53,19 @@ By default, Magento writes database activity logs to the `var/debug/db.log` file 1. Use the `dev:query-log` command to enable or disable database logging. - ```bash - bin/magento dev:query-log:enable - ``` + ```bash + bin/magento dev:query-log:enable + ``` - ```bash - bin/magento dev:query-log:disable - ``` + ```bash + bin/magento dev:query-log:disable + ``` 1. Flush the cache. - ```bash - bin/magento cache:flush - ``` + ```bash + bin/magento cache:flush + ``` ## Cron logging @@ -87,26 +87,26 @@ Logging to `syslog` is disabled by default. 1. Use the `setup:config:set` command to change the `dev/syslog/syslog_logging` database value to `true`. - ```bash - bin/magento setup:config:set --enable-syslog-logging=true - ``` + ```bash + bin/magento setup:config:set --enable-syslog-logging=true + ``` -2. Flush the cache. +1. Flush the cache. - ```bash - bin/magento cache:flush - ``` + ```bash + bin/magento cache:flush + ``` ### To disable syslog logging 1. Use the `setup:config:set` command to change the `dev/syslog/syslog_logging` database value to `false`. - ```bash - bin/magento setup:config:set --enable-syslog-logging=false - ``` + ```bash + bin/magento setup:config:set --enable-syslog-logging=false + ``` 1. Flush the cache. - ```bash - bin/magento cache:flush - ``` \ No newline at end of file + ```bash + bin/magento cache:flush + ``` diff --git a/guides/v2.3/config-guide/elasticsearch/es-config-apache.md b/guides/v2.3/config-guide/elasticsearch/es-config-apache.md index aab0318ef93..6ca461cd4a1 100644 --- a/guides/v2.3/config-guide/elasticsearch/es-config-apache.md +++ b/guides/v2.3/config-guide/elasticsearch/es-config-apache.md @@ -19,8 +19,8 @@ The reason the proxy is not secured in this example is it's easier to set up and See one of the following sections: -* [Set up a proxy for Apache 2.4](#es-apache-proxy-24) -* [Set up a proxy for Apache 2.2](#es-apache-proxy-22) +* [Set up a proxy for Apache 2.4](#es-apache-proxy-24) +* [Set up a proxy for Apache 2.2](#es-apache-proxy-22) ### Set up a proxy for Apache 2.4 {#es-apache-proxy-24} @@ -28,57 +28,57 @@ This section discusses how to configure an Elasticsearch proxy using a virtual h 1. Enable `mod_proxy` as follows: - ```bash - a2enmod proxy_http - ``` + ```bash + a2enmod proxy_http + ``` -2. Use a text editor to open `/etc/apache2/sites-available/000-default.conf` -3. Add the following directive at the top of the file: +1. Use a text editor to open `/etc/apache2/sites-available/000-default.conf` +1. Add the following directive at the top of the file: - ```conf - Listen 8080 - ``` + ```conf + Listen 8080 + ``` -4. Add the following at the bottom of the file: +1. Add the following at the bottom of the file: - ```conf - - ProxyPass "/" "http://localhost:9200/" - ProxyPassReverse "/" "http://localhost:9200/" - - ``` + ```conf + + ProxyPass "/" "http://localhost:9200/" + ProxyPassReverse "/" "http://localhost:9200/" + + ``` -5. Restart Apache: +1. Restart Apache: - ```bash - service apache2 restart - ``` + ```bash + service apache2 restart + ``` -6. Verify the proxy works by entering the following command: +1. Verify the proxy works by entering the following command: - ```bash - curl -i http://localhost:/_cluster/health - ``` + ```bash + curl -i http://localhost:/_cluster/health + ``` - For example, if your proxy uses port 8080: + For example, if your proxy uses port 8080: - ```bash - curl -i http://localhost:8080/_cluster/health - ``` + ```bash + curl -i http://localhost:8080/_cluster/health + ``` - ```terminal - Messages similar to the following display to indicate success: + Messages similar to the following display to indicate success: - HTTP/1.1 200 OK - Date: Tue, 23 Feb 2016 20:38:03 GMT - Content-Type: application/json; charset=UTF-8 - Content-Length: 389 - Connection: keep-alive + ```terminal + HTTP/1.1 200 OK + Date: Tue, 23 Feb 2016 20:38:03 GMT + Content-Type: application/json; charset=UTF-8 + Content-Length: 389 + Connection: keep-alive - {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0} - ``` + {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0} + ``` -6. Continue with [Configure Magento to use Elasticsearch](#elastic-m2-configure). +1. Continue with [Configure Magento to use Elasticsearch](#elastic-m2-configure). ### Set up a proxy for Apache 2.2 {#es-apache-proxy-22} @@ -86,49 +86,49 @@ This section discusses how to configure an Elasticsearch proxy using a virtual h 1. As a user with `root` privileges, open `/etc/httpd/conf/httpd.conf` in a text editor. -2. Locate the `Listen` directive and add another listen port; for example: +1. Locate the `Listen` directive and add another listen port; for example: - ```conf - Listen 8080 - ``` + ```conf + Listen 8080 + ``` -2. Scroll to the bottom of the file and add the following lines: +1. Scroll to the bottom of the file and add the following lines: - ```conf - - ProxyPass http://localhost:9200/ - ProxyPassReverse http://localhost:9200/ - - ``` + ```conf + + ProxyPass http://localhost:9200/ + ProxyPassReverse http://localhost:9200/ + + ``` -3. Restart Apache: +1. Restart Apache: - * CentOS: `service httpd restart` - * Ubuntu: `service apache2 restart` + * CentOS: `service httpd restart` + * Ubuntu: `service apache2 restart` -6. Verify the proxy works by entering the following command: +1. Verify the proxy works by entering the following command: - ```bash - curl -i http://localhost:/_cluster/health - ``` + ```bash + curl -i http://localhost:/_cluster/health + ``` - For example, if your proxy uses port 8080: + For example, if your proxy uses port 8080: - ```bash - curl -i http://localhost:8080/_cluster/health - ``` + ```bash + curl -i http://localhost:8080/_cluster/health + ``` - Messages similar to the following display to indicate success: + Messages similar to the following display to indicate success: - ```terminal - HTTP/1.1 200 OK - Date: Tue, 23 Feb 2016 20:38:03 GMT - Content-Type: application/json; charset=UTF-8 - Content-Length: 389 - Connection: keep-alive + ```terminal + HTTP/1.1 200 OK + Date: Tue, 23 Feb 2016 20:38:03 GMT + Content-Type: application/json; charset=UTF-8 + Content-Length: 389 + Connection: keep-alive - {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0} - ``` + {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0} + ``` ## Configure Magento to use Elasticsearch {#elastic-m2-configure} @@ -138,14 +138,14 @@ This section discusses how to configure an Elasticsearch proxy using a virtual h This section discusses how to secure communication between Apache and Elasticsearch using [HTTP Basic](http://tools.ietf.org/html/rfc2617){:target="_blank") authentication with Apache. For more options, consult one of the following resources: -* [Apache 2.2 authentication and authorization tutorial](http://httpd.apache.org/docs/2.2/howto/auth.html){:target="_blank"} -* [Apache 2.4 authentication and authorization tutorial](http://httpd.apache.org/docs/2.4/howto/auth.html){:target="_blank"} +* [Apache 2.2 authentication and authorization tutorial](http://httpd.apache.org/docs/2.2/howto/auth.html){:target="_blank"} +* [Apache 2.4 authentication and authorization tutorial](http://httpd.apache.org/docs/2.4/howto/auth.html){:target="_blank"} See one of the following sections: -* [Step 1: Create a password file](#es-ws-secure-apache-pwd) -* [Step 2: Configure your secure virtual host](#es-ws-secure-finish) -* [Verify communication is secure](#es-ws-secure-verify) +* [Step 1: Create a password file](#es-ws-secure-apache-pwd) +* [Step 2: Configure your secure virtual host](#es-ws-secure-finish) +* [Verify communication is secure](#es-ws-secure-verify) ### Step 1: Create a password {#es-ws-secure-apache-pwd} {% include config/secure-ws-apache_step1.md %} @@ -158,36 +158,37 @@ This section discusses how to specify who can access the Apache server. 1. Use a text editor to add the following contents to your secure virtual host. - * Apache 2.2: Depending on how you set up SSL, the Apache 2.2 SSL configuration might be located in `/etc/httpd/conf/httpd.conf` or `/etc/httpd/conf.d/ssl.conf`. + * Apache 2.2: Depending on how you set up SSL, the Apache 2.2 SSL configuration might be located in `/etc/httpd/conf/httpd.conf` or `/etc/httpd/conf.d/ssl.conf`. - * Apache 2.4: Edit `/etc/apache2/sites-available/default-ssl.conf` + * Apache 2.4: Edit `/etc/apache2/sites-available/default-ssl.conf` - ```conf - - Order deny,allow - Allow from all + ```conf + + Order deny,allow + Allow from all - AuthType Basic - AuthName "Elastic Server" - AuthBasicProvider file - AuthUserFile /usr/local/apache/password/.htpasswd_elasticsearch - Require valid-user + AuthType Basic + AuthName "Elastic Server" + AuthBasicProvider file + AuthUserFile /usr/local/apache/password/.htpasswd_elasticsearch + Require valid-user - # This allows OPTIONS-requests without authorization - - Require valid-user - - - ``` + # This allows OPTIONS-requests without authorization + + Require valid-user + + + ``` -3. If you added the preceding to your secure virtual host, remove `Listen 8080` and the `` directives you added earlier to your unsecure virtual host. -4. Save your changes, exit the text editor, and restart Apache: +1. If you added the preceding to your secure virtual host, remove `Listen 8080` and the `` directives you added earlier to your unsecure virtual host. +1. Save your changes, exit the text editor, and restart Apache: -* CentOS: `service httpd restart` -* Ubuntu: `service apache2 restart` + * CentOS: `service httpd restart` + * Ubuntu: `service apache2 restart` {% include config/es-verify-proxy.md %} -#### Next +{:.ref-header} +Next [Configure Elasticsearch stopwords]({{page.baseurl}}/config-guide/elasticsearch/es-config-stopwords.html) diff --git a/guides/v2.3/contributor-guide/contributing.md b/guides/v2.3/contributor-guide/contributing.md index 4912b1c4cde..a1ad532ad9f 100644 --- a/guides/v2.3/contributor-guide/contributing.md +++ b/guides/v2.3/contributor-guide/contributing.md @@ -196,10 +196,10 @@ This tool ports fixes automatically across versions with a few simple steps. It Access the tool at [porting.engcom.dev.magento.com](https://porting.engcom.dev.magento.com/). The first time you visit, you must log in and authorize with GitHub credentials. The tool performs all actions using your token. 1. Visit [porting.engcom.dev.magento.com](https://porting.engcom.dev.magento.com/) and **Login with GitHub**. -2. Copy and paste the pull request URL in **Select Pull Request for porting** and click **Next**. -3. Select the target version for your port: **Up Port** or **Back Port**. -4. Verify the summary of changes in **Port information**. -5. Click **Create Job**. A job is created and started shortly after. +1. Copy and paste the pull request URL in **Select Pull Request for porting** and click **Next**. +1. Select the target version for your port: **Up Port** or **Back Port**. +1. Verify the summary of changes in **Port information**. +1. Click **Create Job**. A job is created and started shortly after. ![Magento Porting Tool]({{ site.baseurl }}/common/images/porting-tool-steps.png) diff --git a/guides/v2.3/ext-best-practices/extension-coding/example-module-adminpage.md b/guides/v2.3/ext-best-practices/extension-coding/example-module-adminpage.md index 030f735f2b2..1bdc2da7743 100644 --- a/guides/v2.3/ext-best-practices/extension-coding/example-module-adminpage.md +++ b/guides/v2.3/ext-best-practices/extension-coding/example-module-adminpage.md @@ -115,15 +115,15 @@ Under the created `etc` directory, create a new directory called `adminhtml`. Un The `menu.xml` file provided below adds two items in the Content section of the left navigation: 1. A new separate section with the title **Greetings** under Content. -2. A link with the label **Hello World** that leads to a page request for `exampleadminnewpage/helloworld/index` underneath that new section. +1. A link with the label **Hello World** that leads to a page request for `exampleadminnewpage/helloworld/index` underneath that new section. ![Hello World menu item]({{ site.baseurl }}/common/images/ext-best-practices/hello-world-menu-item.png){:width="322px" height="400px"} The following parts make up the generated page request link to the **Hello World** page: -* `exampleadminnewpage` - This is the `frontName`. Because its purpose is to help route requests to the correct module, we give it the same name as the module, but this is not required. -* `helloworld` - This specifies the name of the controller to use. -* `index` - In the XML file, since the action for the controller is not specified, Magento uses the default value `index`. +* `exampleadminnewpage` - This is the `frontName`. Because its purpose is to help route requests to the correct module, we give it the same name as the module, but this is not required. +* `helloworld` - This specifies the name of the controller to use. +* `index` - In the XML file, since the action for the controller is not specified, Magento uses the default value `index`. [//]: # (Stop list rendering before collapsible, see: https://github.com/magento/devdocs/issues/2655) {% collapsible File content for menu.xml %} @@ -294,10 +294,10 @@ MyCompany Now that the module is code-complete, run the following commands to install it: 1. `bin/magento module:status` - This command shows a list of enabled/disabled modules. -2. `bin/magento module:enable MyCompany_ExampleAdminNewPage` - If necessary, run this to enable the disabled module. -3. `bin/magento setup:upgrade` - This command will properly register the module with Magento. -4. `bin/magento setup:di:compile` - This command compiles classes used in dependency injections. -5. `bin/magento cache:clean` - This command cleans the cache. +1. `bin/magento module:enable MyCompany_ExampleAdminNewPage` - If necessary, run this to enable the disabled module. +1. `bin/magento setup:upgrade` - This command will properly register the module with Magento. +1. `bin/magento setup:di:compile` - This command compiles classes used in dependency injections. +1. `bin/magento cache:clean` - This command cleans the cache. Once the module installation has completed, the link to the **Hello World** page should appear in the **Greetings** section under **Content** in the left navigation in the admin area. Clicking this link will take you to a page that looks like the one pictured below. diff --git a/guides/v2.3/extension-dev-guide/declarative-schema/migration-commands.md b/guides/v2.3/extension-dev-guide/declarative-schema/migration-commands.md index f42ae63d62b..1ca483c259d 100644 --- a/guides/v2.3/extension-dev-guide/declarative-schema/migration-commands.md +++ b/guides/v2.3/extension-dev-guide/declarative-schema/migration-commands.md @@ -43,17 +43,17 @@ Old data scripts cannot be converted automatically. The following steps help mak 1. Generate a patch stub. - ```bash - bin/magento setup:db-declaration:generate-patch [options] - ``` + ```bash + bin/magento setup:db-declaration:generate-patch [options] + ``` - where `[options]` can be any of the following: + where `[options]` can be any of the following: - `--revertable[=true | false]` - Determines whether the patch is revertable. The default value is `false`. + `--revertable[=true | false]` - Determines whether the patch is revertable. The default value is `false`. - `--type[=]` - Specifies what type of patch to generate. The default is `data`. + `--type[=]` - Specifies what type of patch to generate. The default is `data`. -2. All released modules that previously used upgrade scripts must support backward compatibility by implementing `\Magento\Framework\Setup\Patch\PatchVersionInterface` and the `getVersion` method. This method allows you to skip changes that were applied in previous versions and were done by old scripts. The returned value of the `getVersion` method in this case should be equal to the value of a version in `version_compare` function in old scripts. When the `InstallData.php` script does not have any versions to compare, you can specify the first version of your module. See [Develop declarative data and schema patches]({{ page.baseurl }}/extension-dev-guide/declarative-schema/data-patches.html) for more information. +1. All released modules that previously used upgrade scripts must support backward compatibility by implementing `\Magento\Framework\Setup\Patch\PatchVersionInterface` and the `getVersion` method. This method allows you to skip changes that were applied in previous versions and were done by old scripts. The returned value of the `getVersion` method in this case should be equal to the value of a version in `version_compare` function in old scripts. When the `InstallData.php` script does not have any versions to compare, you can specify the first version of your module. See [Develop declarative data and schema patches]({{ page.baseurl }}/extension-dev-guide/declarative-schema/data-patches.html) for more information. ## Dry run mode @@ -64,6 +64,7 @@ To enable dry run mode, run one of the following commands: ```bash bin/magento setup:install --dry-run=1 ``` + ```bash bin/magento setup:upgrade --dry-run=1 ``` diff --git a/guides/v2.3/extension-dev-guide/indexing.md b/guides/v2.3/extension-dev-guide/indexing.md index 8324345acb1..40c07e176a6 100644 --- a/guides/v2.3/extension-dev-guide/indexing.md +++ b/guides/v2.3/extension-dev-guide/indexing.md @@ -31,39 +31,48 @@ This topic provides a high level description of how indexing is implemented from The following components are involved in the indexing process: - - - - - - - - - - - - - -
ComponentDescription
Magento_IndexerImplements:
    -
  • indexer declaration
  • -
  • indexer running
  • -
  • indexer running mode configuration
  • -
  • indexer status
Magento\Framework\Mview
    -
  • Allows tracking database changes for a certain [entity](https://glossary.magento.com/entity) (product, [category](https://glossary.magento.com/category), etc.) and running change handler.
  • -
  • Emulates the materialized view technology for MySQL using triggers and separate materialization process (provides executing [PHP](https://glossary.magento.com/php) code instead of SQL queries, which allows materializing multiple queries).
- - {: .bs-callout-warning } + + + Component + Description + + + Magento_Indexer + Implements: +
    +
  • indexer declaration
  • +
  • indexer running
  • +
  • indexer running mode configuration
  • +
  • indexer status
  • +
+ + + + Magento\Framework\Mview + +
    +
  • Allows tracking database changes for a certain entity (product, category, etc.) and running change handler.
  • +
  • Emulates the materialized view technology for MySQL using triggers and separate materialization process (provides executing PHP code instead of SQL queries, which allows materializing multiple queries).
  • +
+ + + + + +{: .bs-callout-warning } `Magento_Indexer` replaces the Magento 1.x `Magento_Index` module. Use `Magento_Indexer` for all new development. ### Indexing types Each index can perform the following types of reindex operations: -* Full reindex, which means rebuilding all the indexing-related database tables - Full reindexing can be caused by a variety of things, including creating a new web store or new customer group. - You can optionally fully reindex at any time using the [command line]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-index.html). +* Full reindex, which means rebuilding all the indexing-related database tables -* Partial reindex, which means rebuilding the database tables only for the things that changed (like changing a single product attribute or price) + Full reindexing can be caused by a variety of things, including creating a new web store or new customer group. + + You can optionally fully reindex at any time using the [command line]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-index.html). + +* Partial reindex, which means rebuilding the database tables only for the things that changed (like changing a single product attribute or price) The type of reindex performed in each particular case depends on the type of changes made in the dictionary or in the system. This dependency is specific for [each indexer](#m2devgde-indexing-outofbox). @@ -75,9 +84,9 @@ The following figure shows the logic for partial reindexing. Depending on whether an index data is up to date, an indexer status value is one of the following: -* valid - data is synchronized, no reindex required -* invalid - the original data was changed, the index should be updated -* working - indexing is in progress +* valid - data is synchronized, no reindex required +* invalid - the original data was changed, the index should be updated +* working - indexing is in progress The Magento indexing mechanism uses the status value in reindex triggering process. You can check the status of an indexer in the [Admin](https://glossary.magento.com/admin) panel in **System >** Tools **> Index Management** or manually using the [command line]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-index.html#view-indexer-status). @@ -85,19 +94,19 @@ The Magento indexing mechanism uses the status value in reindex triggering proce Reindexing can be performed in two modes: -* Update on Save - index tables are updated immediately after the dictionary data is changed. -* Update by Schedule - index tables are updated by cron job according to the configured schedule. +* Update on Save - index tables are updated immediately after the dictionary data is changed. +* Update by Schedule - index tables are updated by cron job according to the configured schedule. -{:.bs-callout .bs-callout-info} +{: .bs-callout-info } **Update by Schedule** does not support the `customer_grid` indexer. You must either use **Update on Save** or reindex the customer grid manually (`bin/magento indexer:reindex customer_grid`). See the [Help Center article](https://support.magento.com/hc/en-us/articles/360025481892-New-customer-records-are-not-displayed-in-the-Customers-grid-after-importing-them-from-CSV). To set these options: 1. Log in to the [Magento Admin](https://glossary.magento.com/magento-admin). -2. Click **System >** Tools **> Index Management**. -3. Select the checkbox next to each type of indexer to change. -4. From the **Actions** list, click the indexing mode. -5. Click **Submit**. +1. Click **System >** Tools **> Index Management**. +1. Select the checkbox next to each type of indexer to change. +1. From the **Actions** list, click the indexing mode. +1. Click **Submit**. You can also reindex from the [command line]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-index.html#configure-indexers) @@ -124,9 +133,9 @@ For example part of `Magento/Catalog/etc/mview.xml` is tracking category to prod Explanation of nodes: -* The `view` node defines an indexer. The `id` attribute is a name of the indexer table, the `class` attribute is indexer executor, the `group` attribute defines the indexer group. -* The `subscriptions` node is a list of tables for tracking changes. -* The `table` node defines the certain table to observe and track changes. The attribute `name` is a name of an observable table, the attribute `entity_column` is an identifier column of entity to be re-indexed. So, in case of `catalog_category_product`, whenever one or more categories is saved, updated or deleted in `catalog_category_entity` the `execute` method of `Magento\Catalog\Model\Indexer\Category\Product` will be called with argument `ids` containing ids of entities from column defined under `entity_column` attribute. If indexer type is set to "Update on Save" the method is called right away after the operation. If it set to "Update by Schedule" the mechanism creates a record in the change log table using MYSQL triggers. +* The `view` node defines an indexer. The `id` attribute is a name of the indexer table, the `class` attribute is indexer executor, the `group` attribute defines the indexer group. +* The `subscriptions` node is a list of tables for tracking changes. +* The `table` node defines the certain table to observe and track changes. The attribute `name` is a name of an observable table, the attribute `entity_column` is an identifier column of entity to be re-indexed. So, in case of `catalog_category_product`, whenever one or more categories is saved, updated or deleted in `catalog_category_entity` the `execute` method of `Magento\Catalog\Model\Indexer\Category\Product` will be called with argument `ids` containing ids of entities from column defined under `entity_column` attribute. If indexer type is set to "Update on Save" the method is called right away after the operation. If it set to "Update by Schedule" the mechanism creates a record in the change log table using MYSQL triggers. A change log table is created according to the naming rule - INDEXER_TABLE_NAME + '_cl', in case of `catalog_category_product` it will be `catalog_category_product_cl`. The table contains the `version_id` auto-increment column and `entity_id` column that contains identifiers of entities to be re-indexed. @@ -173,8 +182,8 @@ it defines IDs to be re-indexed from the change log by last applied `version_id` You can reindex by: -* Using a [cron job]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-cron.html), which is preferred because indexing runs every minute. -* Using the [`magento indexer:reindex [indexer]`]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-index.html#config-cli-subcommands-index-reindex) command, which reindexes selected indexers, or all indexers, one time only. +* Using a [cron job]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-cron.html), which is preferred because indexing runs every minute. +* Using the [`magento indexer:reindex [indexer]`]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-index.html#config-cli-subcommands-index-reindex) command, which reindexes selected indexers, or all indexers, one time only. ## Magento indexers {#m2devgde-indexing-outofbox} diff --git a/guides/v2.3/extension-dev-guide/message-queues/message-queues.md b/guides/v2.3/extension-dev-guide/message-queues/message-queues.md index e6fdb9f45e0..b7a3833741c 100644 --- a/guides/v2.3/extension-dev-guide/message-queues/message-queues.md +++ b/guides/v2.3/extension-dev-guide/message-queues/message-queues.md @@ -42,9 +42,9 @@ Implement `\Magento\Framework\MessageQueue\ConsumerInterface::process($maxNumber Perform the following actions: 1. Define the queue name associated with current consumer using `\Magento\Framework\MessageQueue\ConsumerConfigurationInterface::getQueueName`. -2. Select `$maxNumberOfMessages` message records, filtering on the `queue_name` field. You must join on all 3 tables. To accomplish this, you may want to extract fewer records at a time to improve load distribution between multiple consumers. -3. Decode the message using topic name taken from the `\Magento\Framework\MessageQueue\ConsumerConfigurationInterface`. -4. Invoke callback `Magento\Framework\MessageQueue\ConsumerConfigurationInterface::getCallback` and pass the decoded data as an argument. +1. Select `$maxNumberOfMessages` message records, filtering on the `queue_name` field. You must join on all 3 tables. To accomplish this, you may want to extract fewer records at a time to improve load distribution between multiple consumers. +1. Decode the message using topic name taken from the `\Magento\Framework\MessageQueue\ConsumerConfigurationInterface`. +1. Invoke callback `Magento\Framework\MessageQueue\ConsumerConfigurationInterface::getCallback` and pass the decoded data as an argument. ## Override topic configuration diff --git a/guides/v2.3/extension-dev-guide/package/package_module.md b/guides/v2.3/extension-dev-guide/package/package_module.md index 375d61d2685..089743fbbe2 100644 --- a/guides/v2.3/extension-dev-guide/package/package_module.md +++ b/guides/v2.3/extension-dev-guide/package/package_module.md @@ -134,11 +134,13 @@ Third party repositories are supported. Prerequisite: Git must be set up on your machine. 1. Navigate to your component directory, with the `composer.json` file in the root, and make it a new Git repository. See the [GitHub documentation](https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/) for details. -2. When you have committed and pushed your component to your GitHub repository, you can either: - * Use [Composer to refer to it directly](https://getcomposer.org/doc/05-repositories.md#vcs), or - * Use the following steps to refer to the package through Packagist. - 1. Register an account at [packagist.org](https://packagist.org/). - 2. Click the Submit Package button and paste your GitHub repository link. Packagist automatically gathers the information from the component's `composer.json` file and link it to the GitHub repository, allowing you to reference the package as `vendor/module` without any additional repository information, because this is required solely using GitHub. +1. When you have committed and pushed your component to your GitHub repository, you can either: + + * Use [Composer to refer to it directly](https://getcomposer.org/doc/05-repositories.md#vcs), or + * Use the following steps to refer to the package through Packagist. + + 1. Register an account at [packagist.org](https://packagist.org/). + 1. Click the Submit Package button and paste your GitHub repository link. Packagist automatically gathers the information from the component's `composer.json` file and link it to the GitHub repository, allowing you to reference the package as `vendor/module` without any additional repository information, because this is required solely using GitHub. ### Hosting on a private repository {#private_repos} @@ -146,21 +148,20 @@ Prerequisite: Git must be set up on your machine. If you use the Setup Wizard, you must use the Magento Marketplace repository. A private repository can be used for development or private code but installation must be done with a command line interface (you can install a package that specifies a private repository only with a command line installation). 1. Set up your own Composer packaging repository using a system such as [Satis](https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md) or [Private Packagist](https://packagist.com/). -2. Create the package in a way similar to the described above. -3. Submit/register the package on your own repository. For example, it can be hosted as a reference to a code repository or submitted as a zip-archive. -4. To use the private packaging repository in a project, add the following to your `composer.json`file: - -```json - -{ - "repositories": [ - { - "type": "composer", - "url": [repository url here] - } - ] -} -``` +1. Create the package in a way similar to the described above. +1. Submit/register the package on your own repository. For example, it can be hosted as a reference to a code repository or submitted as a zip-archive. +1. To use the private packaging repository in a project, add the following to your `composer.json`file: + + ```json + { + "repositories": [ + { + "type": "composer", + "url": [repository url here] + } + ] + } + ``` All packages on the private repository can now be referenced within the `require` field. diff --git a/guides/v2.3/extension-dev-guide/versioning/dependencies.md b/guides/v2.3/extension-dev-guide/versioning/dependencies.md index 594271e8997..572d7c6a04e 100644 --- a/guides/v2.3/extension-dev-guide/versioning/dependencies.md +++ b/guides/v2.3/extension-dev-guide/versioning/dependencies.md @@ -13,45 +13,45 @@ Magento platform clients need notifications about breaking changes for their ins To achieve this, all third-party modules must obey the following rules: 1. You must specify the dependency on all modules listed in the `require` section of your module's `composer.json` file. -2. Do not specify a dependency on meta packages (e.g. `product-community-edition`). -3. Specify a module's MAJOR and/or MINOR version number if you use any of that module's customization points. -4. Specify a module's MAJOR, MINOR, and PATCH versions if you call or customize a module's private code. +1. Do not specify a dependency on meta packages (e.g. `product-community-edition`). +1. Specify a module's MAJOR and/or MINOR version number if you use any of that module's customization points. +1. Specify a module's MAJOR, MINOR, and PATCH versions if you call or customize a module's private code. ## Service Provider Interfaces A PHP Interface in Magento can be used several ways by the core product and extension developers. -* **As an API**. An interface is called by PHP code. -* **As a Service Provider Interface (SPI)**. An interface can be implemented, allowing code to provide functionality to the platform. -* **As both**. For example, in a service contract, we expect all calls to a [module](https://glossary.magento.com/module) to be done through the Interface (API), but we also have support for third parties to provide alternate implementations (SPI). APIs and SPIs are not mutually exclusive. Therefore, we do not distinguish them separately. SPIs are annotated the same as APIs. +* **As an API**. An interface is called by PHP code. +* **As a Service Provider Interface (SPI)**. An interface can be implemented, allowing code to provide functionality to the platform. +* **As both**. For example, in a service contract, we expect all calls to a [module](https://glossary.magento.com/module) to be done through the Interface (API), but we also have support for third parties to provide alternate implementations (SPI). APIs and SPIs are not mutually exclusive. Therefore, we do not distinguish them separately. SPIs are annotated the same as APIs. However, the dependency rules are different: -* If a module uses (calls) an API, it should be dependent on the MAJOR version and the system provides backward compatibility in scope of current major version. +* If a module uses (calls) an API, it should be dependent on the MAJOR version and the system provides backward compatibility in scope of current major version. - **API dependency example** + **API dependency example** - ```json - { - "require": { - "magento/customer": "~2.0", - }, - } - ``` + ```json + { + "require": { + "magento/customer": "~2.0", + }, + } + ``` -* If a module implements an API/SPI, it should be dependent on the MAJOR+MINOR version, and the system provides backward compatibility in scope of the current minor version. - **SPI dependency example** +* If a module implements an API/SPI, it should be dependent on the MAJOR+MINOR version, and the system provides backward compatibility in scope of the current minor version. - ```json - { - ... - "require": { - "magento/customer": "~2.0.0", - }, - ... - } + **SPI dependency example** - ``` + ```json + { + ... + "require": { + "magento/customer": "~2.0.0", + }, + ... + } + ``` ## Determine module dependency diff --git a/guides/v2.3/frontend-dev-guide/themes/admin_theme_create.md b/guides/v2.3/frontend-dev-guide/themes/admin_theme_create.md index b40709f2a36..48b92878bf3 100644 --- a/guides/v2.3/frontend-dev-guide/themes/admin_theme_create.md +++ b/guides/v2.3/frontend-dev-guide/themes/admin_theme_create.md @@ -18,10 +18,10 @@ This topic describes how to create your custom theme for Magento Admin, referenc To create a custom [Admin](https://glossary.magento.com/admin) theme, take the following steps: 1. [Create a theme directory.](#create_dir) -2. [Add a declaration `theme.xml`.](#declare_theme) -3. [Add `registration.php`.](#add_registry) -4. [Optionally add `composer.json`.](#make_composer) -5. [Optionally change theme logo.](#logo) +1. [Add a declaration `theme.xml`.](#declare_theme) +1. [Add `registration.php`.](#add_registry) +1. [Optionally add `composer.json`.](#make_composer) +1. [Optionally change theme logo.](#logo) Each step is described further. @@ -75,19 +75,21 @@ To customize the Admin theme logo: 1. Create a new XML file in the theme named `app/design/adminhtml///Magento_Backend/layout/admin_login.xml`. -2. Add the following sample code to the new file. - ```xml - - - - - images/custom-logo.svg - - - +1. Add the following sample code to the new file. + + ```xml + + + + + images/custom-logo.svg + + + - ``` -3. Add your custom logo to the `app/design/adminhtml///web/images/` directory. + ``` + +1. Add your custom logo to the `app/design/adminhtml///web/images/` directory. ## Theme registration {#register_theme} @@ -96,4 +98,3 @@ Once you open the Magento Admin (or reload any Magento Admin page) having added ## Apply the Admin theme See the [Apply a custom Admin theme topic]({{ page.baseurl }}/frontend-dev-guide/themes/admin_theme_apply.html). - diff --git a/guides/v2.3/frontend-dev-guide/themes/theme-create.md b/guides/v2.3/frontend-dev-guide/themes/theme-create.md index 0d7b2db38ee..18a8041d394 100644 --- a/guides/v2.3/frontend-dev-guide/themes/theme-create.md +++ b/guides/v2.3/frontend-dev-guide/themes/theme-create.md @@ -261,7 +261,10 @@ To learn more about theme layouts, refer to the [Layout section]({{page.baseurl} ## Troubleshooting {#trouble} -When your theme changes are not visible even after clearing the cache, try redeploying your static files using `magento setup:static-content:deploy en_US` (replacing the language/locale as appropriate). +When your theme changes are not visible even after clearing the cache, try redeploying your static files using the `magento setup:static-content:deploy` command, or add the `-f` argument to force deploy static content in any deployment mode in case you are not in production mode. + +{: .bs-callout-info } +Running this command with the `-f` argument can fix issues regarding deployment of static content, but removes **all** symlinks and deploys the actual static content files. ## What's next {#next} diff --git a/guides/v2.3/get-started/create-integration.md b/guides/v2.3/get-started/create-integration.md index 3e335aa532d..7438be66bd4 100644 --- a/guides/v2.3/get-started/create-integration.md +++ b/guides/v2.3/get-started/create-integration.md @@ -20,10 +20,10 @@ Before you begin creating a module, make sure that you have a working installati To create an integration, follow these general steps: 1. [Create a module with the minimal structure and configuration.](#skeletal) -2. [Add files specific to the integration.](#files) -3. [Install the module.](#install) -4. [Check the integration.](#check) -5. [Integrate with your application.](#integrate) +1. [Add files specific to the integration.](#files) +1. [Install the module.](#install) +1. [Check the integration.](#check) +1. [Integrate with your application.](#integrate) ## Create a skeletal module {#skeletal} @@ -41,7 +41,7 @@ To develop a module, you must: For more detailed information, see [Create your component file structure]({{ page.baseurl }}/extension-dev-guide/build/module-file-structure.html). -2. **Define your module configuration file.** The `etc/module.xml` file provides basic information about the module. Change directories to the `etc` directory and create the `module.xml` file. You must specify values for the following attributes: +1. **Define your module configuration file.** The `etc/module.xml` file provides basic information about the module. Change directories to the `etc` directory and create the `module.xml` file. You must specify values for the following attributes: @@ -77,7 +77,7 @@ To develop a module, you must: Module `Magento_Integration` is added to "sequence" to be loaded first. It helps to avoid the issue, when a module with integration config loaded, that leads to a malfunction. -3. **Add your module's `composer.json` file.** Composer is a dependency manager for PHP. You must create a `composer.json` file for your module so that Composer can install and update the libraries your module relies on. Place the `composer.json` file in the `module-` directory. +1. **Add your module's `composer.json` file.** Composer is a dependency manager for PHP. You must create a `composer.json` file for your module so that Composer can install and update the libraries your module relies on. Place the `composer.json` file in the `module-` directory. The following example demonstrates a minimal `composer.json` file. @@ -103,7 +103,7 @@ To develop a module, you must: For more information, see [Create a component]({{ page.baseurl }}/extension-dev-guide/build/create_component.html). -4. **Create a `registration.php` file** The `registration.php` registers the module with the Magento system. It must be placed in the module's root directory. +1. **Create a `registration.php` file** The `registration.php` registers the module with the Magento system. It must be placed in the module's root directory. ```php bin/magento setup:upgrade + ```bash + bin/magento setup:upgrade + ``` -2. Run the following command to generate the new code. +1. Run the following command to generate the new code. {: .bs-callout-info } In Production mode, you may receive a message to 'Please rerun Magento compile command'. Enter the command below. Magento does not prompt you to run the compile command in Developer mode. - bin/magento setup:di:compile + ```bash + bin/magento setup:di:compile + ``` -3. Run the following command to clean the cache. +1. Run the following command to clean the cache. - bin/magento cache:clean + ```bash + bin/magento cache:clean + ``` ## Check your integration {#check} diff --git a/guides/v2.3/graphql/develop/identity-class.md b/guides/v2.3/graphql/develop/identity-class.md index 410769ee935..00efce76aee 100644 --- a/guides/v2.3/graphql/develop/identity-class.md +++ b/guides/v2.3/graphql/develop/identity-class.md @@ -7,9 +7,11 @@ If you create a cacheable query (similar to those for product, category, and CMS An Identity class implements `Magento\Framework\GraphQl\Query\Resolver\IdentityInterface`. Your Identity class must contain the following elements: -* A private string that specifies the path to the class that defines the module’s cache tag. +* Choose a cache tag prefix for the entity. -* Your implementation of the `getIdentities(array $resolvedData)` method. Generally, this method takes an array of query results and creates a new cache tag for each entity based on the original string and the unique identifier for each item to be cached. For example, the getIdentities method for the `CatalogGraphQl` component appends the product ID to the `cat_p` cache tag, such as `cat_p_1`, `cat_p_2`, and so on. +* Your implementation of the `getIdentities(array $resolvedData)` method. The method maps the array of enties data to an array of cache tags, one for each entity. +Generally, this method takes an array of query results and creates a cache tag for each entity based on the original string and the unique identifier for each item to be cached. For example, the getIdentities method for the `CatalogGraphQl` component appends the product ID to the `cat_p` cache tag prefix, such as `cat_p_1`, `cat_p_2`, and so on. +Usually the method also adds the cache tag without an appended ID to the result array, so all cache records can be removed at once, and not only cache records for specific entities. Use following example as the basis for your custom `Identity` class: @@ -19,20 +21,20 @@ declare(strict_types=1); namespace PathToModule\Model\Resolver\MyModule; -use Magento\Framework\GraphQl\Query\IdentityResolverInterface; +use Magento\Framework\GraphQl\Query\Resolver\IdentityInterface; /** * Get identities from resolved data */ class MyIdentity implements IdentityInterface { - private $cacheTag = \Path\To\Model\Class::CACHE_TAG; + private $cacheTag = \PathToModule\Model\MyEntity::CACHE_TAG; /** * Get identity tags from resolved data * * @param array $resolvedData - * @return int[]|string[] + * @return string[] */ public function getIdentities(array $resolvedData): array { @@ -42,7 +44,7 @@ class MyIdentity implements IdentityInterface $ids[] = sprintf('%s_%s', $this->cacheTag, $item['entity_id']); } if (!empty($ids)) { - array_unshift($ids, $this->cacheTag); + $ids[] = $this->cacheTag; } return $ids; } diff --git a/guides/v2.3/graphql/functional-testing.md b/guides/v2.3/graphql/functional-testing.md index a6335acda2a..ce5e0cad6d3 100644 --- a/guides/v2.3/graphql/functional-testing.md +++ b/guides/v2.3/graphql/functional-testing.md @@ -391,22 +391,22 @@ Use the following functions to cover expected exceptions: 1. Change directories to `dev/tests/api-functional/` and copy the `phpunit_graphql.xml.dist` file to `phpunit_graphql.xml`. - ```bash - cp phpunit_graphql.xml.dist phpunit_graphql.xml - ``` - -2. Edit `phpunit_graphql.xml` to set values for the TESTS_BASE_URL, TESTS_WEBSERVICE_USER, TESTS_WEBSERVICE_APIKEY options: - - ```xml - ... - - - - - - - ... - ``` + ```bash + cp phpunit_graphql.xml.dist phpunit_graphql.xml + ``` + +1. Edit `phpunit_graphql.xml` to set values for the TESTS_BASE_URL, TESTS_WEBSERVICE_USER, TESTS_WEBSERVICE_APIKEY options: + + ```xml + ... + + + + + + + ... + ``` ### Run all tests in a API functional test suite diff --git a/guides/v2.3/graphql/mutations/change-customer-password.md b/guides/v2.3/graphql/mutations/change-customer-password.md index 480fa90c293..ffac7bfbf99 100644 --- a/guides/v2.3/graphql/mutations/change-customer-password.md +++ b/guides/v2.3/graphql/mutations/change-customer-password.md @@ -57,6 +57,16 @@ The `changeCustomerPassword` mutation returns the `customer` object. {% include graphql/customer-output.md %} +## Errors + +Error | Description +--- | --- +`The current customer isn't authorized.` | The customer's token does not exist in the `oauth_token` table. +`Invalid login or password.` | The password specified in the `currentPassword` attribute is not valid. +`Specify the "currentPassword" value.` | The password specified in the `currentPassword` attribute is empty. +`Specify the "newPassword" value.` | The password specified in the `newPassword` attribute is empty. +`The account is locked.` | The customer's password cannot be changed because the account is locked. + ## Related topics * [customer query]({{page.baseurl}}/graphql/queries/customer.html) diff --git a/guides/v2.3/graphql/payment-methods/authorize-net.md b/guides/v2.3/graphql/payment-methods/authorize-net.md index ed6991602b0..7589a05e73a 100644 --- a/guides/v2.3/graphql/payment-methods/authorize-net.md +++ b/guides/v2.3/graphql/payment-methods/authorize-net.md @@ -13,20 +13,20 @@ The following diagram shows the workflow for placing an order when Authorize.Net 1. The customer clicks on the **Place order** button. The embedded `Accept.js` library captures the payment data and submits it directly to Authorize.Net. -2. Authorize.Net returns a payment nonce and order details. +1. Authorize.Net returns a payment nonce and order details. The client's browser then posts the nonce to the Magento server along with all the other order information. The payment nonce expires after 24 hours. -3. The client uses the [`setPaymentMethodOnCart`]({{page.baseurl}}/graphql/mutations/set-payment-method.html) mutation to send the payment nonce and the last four digits of the card to Magento. +1. The client uses the [`setPaymentMethodOnCart`]({{page.baseurl}}/graphql/mutations/set-payment-method.html) mutation to send the payment nonce and the last four digits of the card to Magento. -4. Magento returns a `Cart` object. +1. Magento returns a `Cart` object. -5. The client runs the [`placeOrder`]({{page.baseurl}}/graphql/mutations/place-order.html) mutation, which creates an order in Magento and begins the authorization process. +1. The client runs the [`placeOrder`]({{page.baseurl}}/graphql/mutations/place-order.html) mutation, which creates an order in Magento and begins the authorization process. -6. Magento sends a transaction request that includes the payment nonce. The nonce replaces the payment details provided in standard Authorize.Net API calls. +1. Magento sends a transaction request that includes the payment nonce. The nonce replaces the payment details provided in standard Authorize.Net API calls. -7. Authorize.Net sends a transaction response. +1. Authorize.Net sends a transaction response. -8. Magento creates an order and sends an order ID in response to the `placeOrder` mutation. +1. Magento creates an order and sends an order ID in response to the `placeOrder` mutation. ## Additional payment information diff --git a/guides/v2.3/graphql/payment-methods/braintree-vault.md b/guides/v2.3/graphql/payment-methods/braintree-vault.md index b6605c46cb3..3657876914c 100644 --- a/guides/v2.3/graphql/payment-methods/braintree-vault.md +++ b/guides/v2.3/graphql/payment-methods/braintree-vault.md @@ -24,13 +24,13 @@ The following diagram shows the workflow for placing an order when Braintree Vau 1. Magento returns a `Cart` object. -2. The client runs the [`placeOrder`]({{page.baseurl}}/graphql/mutations/place-order.html) mutation. +1. The client runs the [`placeOrder`]({{page.baseurl}}/graphql/mutations/place-order.html) mutation. -3. Magento sends an authorization request to the gateway. +1. Magento sends an authorization request to the gateway. -4. The gateway sends the response to Magento. +1. The gateway sends the response to Magento. -5. Magento creates an order and sends an order ID in response to the `placeOrder` mutation. +1. Magento creates an order and sends an order ID in response to the `placeOrder` mutation. ## `setPaymentMethodOnCart` mutation diff --git a/guides/v2.3/graphql/product/category-interface.md b/guides/v2.3/graphql/product/category-interface.md new file mode 100644 index 00000000000..86357547e57 --- /dev/null +++ b/guides/v2.3/graphql/product/category-interface.md @@ -0,0 +1,58 @@ +--- +group: graphql +title: CategoryInterface attributes +--- + +`CategoryInterface` defines attributes that can be returned in the [`category` query]({{page.baseurl}}/graphql/queries/category.html) and the [`products` query]({{page.baseurl}}/graphql/queries/products.html). + +## CategoryInterface attributes + +The following table defines the `CategoryInterface` attributes and objects. + +Attribute | Type | Description +--- | --- | --- +`breadcrumbs` | [Breadcrumb] | A Breadcrumb object contains information the categories that comprise the breadcrumb trail for the specified category +`created_at` | String | Timestamp indicating when the category was created +`default_sort_by` | String | The attribute to use for sorting +`description` | String | An optional description of the category +`id` | Int | An ID that uniquely identifies the category +`level` | Int | Indicates the depth of the category within the tree +`name` | String | The display name of the category +`path_in_store` | String | Category path in the store +`path` | String | The path to the category, as a string of category IDs, separated by slashes (/). For example, 1/2/20 +`position` | Int | The position of the category relative to other categories at the same level in tree +`product_count` | Int | The number of products in the category +`products()` | CategoryProducts | The list of products assigned to the category +`updated_at` | String | Timestamp indicating when the category was updated +`url_key` | String | The URL key assigned to the category +`url_path` | String | The URL path assigned to the category + +### Breadcrumb object + +A breadcrumb trail is a set of links that shows customers where they are in relation to other pages in the +store. + +Attribute | Data type | Description +--- | --- | --- +`category_id` | Int | An ID that uniquely identifies the category +`category_level` | Int | Indicates the depth of the category within the tree +`category_name` | String | The display name of the category +`category_url_key` | String | The url key assigned to the category + +### CategoryProducts object + +The `products` attribute can contain the following attributes: + +Attribute | Data type | Description +--- | --- | --- +`currentPage` | Int | Specifies which page of results to return. The default value is 1 +`pageSize` | Int | Specifies the maximum number of results to return at once. This attribute is optional. The default value is 20 +`sort` | `ProductSortInput` | Specifies which attribute to sort on, and whether to return the results in ascending or descending order. [Searches and pagination in GraphQL]({{ page.baseurl }}/graphql/search-pagination.html) describes sort orders + +The `CategoryProducts` object contains the following attributes: + +Attribute | Data type | Description +--- | --- | --- +`items` | [ProductInterface] | An array of products that are assigned to the category. See [ProductInterface]({{ page.baseurl }}/graphql/product/product-interface.html) for more information +`page_info` | `SearchResultPageInfo` | An object that includes the `page_info` and `currentPage` values specified in the query +`total_count` | Int | The number of products returned diff --git a/guides/v2.3/graphql/product/grouped-product.md b/guides/v2.3/graphql/product/grouped-product.md index 57712edc088..1f3fe5364fc 100644 --- a/guides/v2.3/graphql/product/grouped-product.md +++ b/guides/v2.3/graphql/product/grouped-product.md @@ -22,7 +22,7 @@ The `GroupedProductItem` object contains the following attributes: Attribute | Type | Description --- | --- | --- `position` | Int | The relative position of this item compared to the other group items -`product` | [ProductInterface]{{ page.baseurl }}/graphql/product/product-interface.html | The ProductInterface contains attributes that are common to all types of products. Note that descriptions may not be available for custom and EAV attributes +`product` | [ProductInterface]({{ page.baseurl }}/graphql/product/product-interface.html) | The ProductInterface contains attributes that are common to all types of products. Note that descriptions may not be available for custom and EAV attributes `qty` | Float | The quantity of this grouped product item ## Sample Query diff --git a/guides/v2.3/graphql/product/product-interface.md b/guides/v2.3/graphql/product/product-interface.md index 2cf6873ab7f..d318047daa1 100644 --- a/guides/v2.3/graphql/product/product-interface.md +++ b/guides/v2.3/graphql/product/product-interface.md @@ -22,7 +22,7 @@ Attribute | Data type | Description --- | --- | --- `attribute_set_id` | Int | The attribute set assigned to the product `canonical_url` | String | The canonical URL for the product -`categories` | [CategoryInterface] | The categories assigned to the product. See [categories query]({{ page.baseurl }}/graphql/queries/category.html) for more information +`categories` | [[CategoryInterface]]({{ page.baseurl }}/graphql/product/category-interface.html) | The categories assigned to the product. See [CategoryInterface attributes]({{ page.baseurl }}/graphql/product/category-interface.html) for more information `country_of_manufacture` | String | The product's country of origin `created_at` | String | Timestamp indicating when the product was created `crosssell_products` | [ProductInterface] | An array of cross-sell products diff --git a/guides/v2.3/graphql/queries/category.md b/guides/v2.3/graphql/queries/category.md index 0efabfd1831..6ee3e7ce9eb 100644 --- a/guides/v2.3/graphql/queries/category.md +++ b/guides/v2.3/graphql/queries/category.md @@ -205,63 +205,8 @@ Attribute | Data type | Description ## Output attributes {#Categories} -The query returns a `CategoryTree` object, which implements `CategoryInterface`. It can contain the following top-level attributes: +The query returns a `CategoryTree` object, which implements [`CategoryInterface`]({{page.baseurl}}/graphql/product/category-interface.html). The `CategoryTree` object can contain the following attribute, as we as all attributes defined in `CategoryInterface`: Attribute | Data type | Description --- | --- | --- -`breadcrumbs` | `Breadcrumb` | A `Breadcrumb` object contains information about the categories that comprise the breadcrumb trail for the specified category -`children` | `CategoryTree` | A `CategoryTree` object that contains information about a child category. You can specify up to 10 levels of child categories -`created_at`| String | Timestamp indicating when the category was created -`default_sort_by`| String | The attribute to use for sorting -`description`| String | An optional description of the category -`id` | Int | An ID that uniquely identifies the category -`level` | Int | Indicates the depth of the category within the tree -`name`| String | The display name of the category -`path_in_store`| String | The category path in the store -`path`| String | The path to the category, as a string of category IDs, separated by slashes (/). For example, `1/2/20` -`position`| Int | The position of the category relative to other categories at the same level in tree -`product_count`| Int | The number of products in the category -`products()` | `CategoryProducts` | The list of products assigned to the category -`updated_at`| String | Timestamp indicating when the category was updated -`url_key`| String | The URL key assigned to the category -`url_path`| String | The URL path assigned to the category -`url_suffix` | String | The part of the URL that is appended to the `url_key`, such as `.html`. This attribute is defined in the `CatalogUrlRewriteGraphQl` module - -### CategoryProducts object - -The `products` attribute can contain the following attributes: - -Attribute | Data type | Description ---- | --- | --- -`currentPage` | Int | Specifies which page of results to return. The default value is 1 -`pageSize` | Int | Specifies the maximum number of results to return at once. This attribute is optional. The default value is 20 -`sort` | `ProductSortInput` | Specifies which attribute to sort on, and whether to return the results in ascending or descending order. [Searches and pagination in GraphQL]({{ page.baseurl }}/graphql/search-pagination.html) describes sort orders - -The `CategoryProducts` object contains the following attributes: - -Attribute | Data type | Description ---- | --- | --- -`items` | [[ProductInterface]]({{ page.baseurl }}/graphql/product/product-interface.html) | An array of products that are assigned to the category -`page_info` | `SearchResultPageInfo` | An object that includes the `page_info` and `currentPage` values specified in the query -`total_count` | Int | The number of products returned - -### Breadcrumb object - -A breadcrumb trail is a set of links that shows customers where they are in relation to other pages in the -store. - -Attribute | Data type | Description ---- | --- | --- -`category_id` | Int | An ID that uniquely identifies the category -`category_level` | Int | Indicates the depth of the category within the tree -`category_name` | String | The display name of the category -`category_url_key` | String | The url key assigned to the category -`category_url_path` | String | The URL path of the category - -### CategoryTree object - -This `CategoryTree` object contains information about the next level of subcategories of the category specified in the original query. - -Attribute | Data type | Description ---- | --- | --- -`children` | [CategoryTree] | An array containing the next level of subcategories +`children` | `CategoryTree` | An array containing the next level of subcategories. By default, you can specify up to 10 levels of child categories diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-add-product-to-cart.md b/guides/v2.3/graphql/tutorials/checkout/checkout-add-product-to-cart.md index 4ebbd904eb8..08ac249bf83 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-add-product-to-cart.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-add-product-to-cart.md @@ -146,4 +146,4 @@ Use the `updateCartItems` mutation to update shopping cart items and `removeItem 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to the shopping cart. All the items you added are displayed. +1. Go to the shopping cart. All the items you added are displayed. diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-billing-address.md b/guides/v2.3/graphql/tutorials/checkout/checkout-billing-address.md index 79aa854ff86..7ee2f6fdc59 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-billing-address.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-billing-address.md @@ -19,9 +19,9 @@ You must always set the billing address to place an order. Use the [setBillingAddressOnCart]({{ page.baseurl }}/graphql/mutations/set-billing-address.html) mutation to set a billing address. You can set the billing address in the following ways: -* Add a new billing address -* Add a new billing address and set it as the shipping addresses -* Use an address from the logged-in customer's address book +* Add a new billing address +* Add a new billing address and set it as the shipping addresses +* Use an address from the logged-in customer's address book ## Add a new billing address @@ -311,6 +311,6 @@ mutation { 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to Checkout. +1. Go to Checkout. -3. Go to the Review & Payments step. The Billing Address form is populated with the address details you entered. +1. Go to the Review & Payments step. The Billing Address form is populated with the address details you entered. diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-coupon.md b/guides/v2.3/graphql/tutorials/checkout/checkout-coupon.md index b602e3b3312..818d3de06f1 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-coupon.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-coupon.md @@ -97,6 +97,6 @@ mutation { 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to Checkout. +1. Go to Checkout. -3. The discount is displayed in the Order Summary block. +1. The discount is displayed in the Order Summary block. diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-payment-method.md b/guides/v2.3/graphql/tutorials/checkout/checkout-payment-method.md index f30a662e9ee..d922e2e498c 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-payment-method.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-payment-method.md @@ -149,6 +149,6 @@ If the operation is successful, the response contains the order ID. 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to Checkout. +1. Go to Checkout. -3. The selected payment method is displayed in the Payment Method section on the Review & Payments step. +1. The selected payment method is displayed in the Payment Method section on the Review & Payments step. diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-place-order.md b/guides/v2.3/graphql/tutorials/checkout/checkout-place-order.md index f316ff01409..74a1c6c9097 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-place-order.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-place-order.md @@ -51,4 +51,4 @@ mutation { 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to **My Account** > **My Orders**. The order you created is displayed. The order is also displayed on the Orders grid (**Sales** > **Orders** in the Magento Admin. +1. Go to **My Account** > **My Orders**. The order you created is displayed. The order is also displayed on the Orders grid (**Sales** > **Orders** in the Magento Admin. diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-address.md b/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-address.md index 76a62165ca3..ea3bb21cf67 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-address.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-address.md @@ -240,6 +240,6 @@ mutation { 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to Checkout. +1. Go to Checkout. -3. On the Shipping step, the Shipping Address form contains the address details you entered. +1. On the Shipping step, the Shipping Address form contains the address details you entered. diff --git a/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-method.md b/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-method.md index cab80736a6a..3c53ac9d889 100644 --- a/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-method.md +++ b/guides/v2.3/graphql/tutorials/checkout/checkout-shipping-method.md @@ -81,6 +81,6 @@ mutation { 1. Sign in as a customer to the website using the email `john.doe@example.com` and password `b1b2b3l@w+`. -2. Go to Checkout. +1. Go to Checkout. -3. The selected shipping method is displayed in the Shipping Methods section on the Shipping step. +1. The selected shipping method is displayed in the Shipping Methods section on the Shipping step. diff --git a/guides/v2.3/howdoi/checkout/checkout-add-custom-carrier.md b/guides/v2.3/howdoi/checkout/checkout-add-custom-carrier.md index 802cf23193f..c36e738233f 100644 --- a/guides/v2.3/howdoi/checkout/checkout-add-custom-carrier.md +++ b/guides/v2.3/howdoi/checkout/checkout-add-custom-carrier.md @@ -17,9 +17,9 @@ This topic describes how to add a custom shipping carrier. To add a new shipping carrier to the Magento checkout: 1. [Create a new module](#create-module) -2. [Add the carrier configuration](#create-configuration) -3. [Create the carrier model](#carrier-model) -4. [Enable the module](#enable-module) +1. [Add the carrier configuration](#create-configuration) +1. [Create the carrier model](#carrier-model) +1. [Enable the module](#enable-module) ## Step 1: Create a new module {#create-module} @@ -100,14 +100,14 @@ To add a module configuration use the following source code snippets. The `system.xml` source code declares custom shipping module options: -- Enabled -- Title -- Method Name -- Shipping Cost -- Ship to Applicable Countries -- Ship to Specific Countries -- Show Method if Not Applicable -- Sort Order +- Enabled +- Title +- Method Name +- Shipping Cost +- Ship to Applicable Countries +- Ship to Specific Countries +- Show Method if Not Applicable +- Sort Order ```xml diff --git a/guides/v2.3/install-gde/install-quick-ref.md b/guides/v2.3/install-gde/install-quick-ref.md index 3566a1bd7f4..c4f7a954d29 100644 --- a/guides/v2.3/install-gde/install-quick-ref.md +++ b/guides/v2.3/install-gde/install-quick-ref.md @@ -41,14 +41,14 @@ If not, see the [Installation overview][]. ## Installation part 1: Getting started 1. See the [system requirements][]. -2. If your system lacks any requirements, see the prerequisites documentation: +1. If your system lacks any requirements, see the prerequisites documentation: * [Apache][] * [PHP][] * [MySQL][] -3. Just as importantly, set up the [Magento file system owner][]on the server. -4. Switch to the [Magento file system owner][]. +1. Just as importantly, set up the [Magento file system owner][]on the server. +1. Switch to the [Magento file system owner][]. ### Get the Magento software diff --git a/guides/v2.3/install-gde/prereq/install-rabbitmq.md b/guides/v2.3/install-gde/prereq/install-rabbitmq.md index 7f3f43c9234..4ef741c7482 100644 --- a/guides/v2.3/install-gde/prereq/install-rabbitmq.md +++ b/guides/v2.3/install-gde/prereq/install-rabbitmq.md @@ -18,7 +18,7 @@ Message queues provide an asynchronous communications mechanism in which the sen The message queue system must be established before you install Magento. The basic sequence is 1. Install RabbitMQ and any prerequisites. -2. Connect RabbitMQ and Magento. +1. Connect RabbitMQ and Magento. {:.bs-callout .bs-callout-info"} A basic message queue system can be implemented using cron instead of RabbitMQ. See [Configure message queues]({{page.baseurl}}/config-guide/mq/manage-mysql.html) for more information. @@ -36,7 +36,7 @@ This command also installs the required Erlang packages. If you have an older version of Ubuntu, RabbitMQ recommends installing the package from their [website](https://glossary.magento.com/website). 1. Download [rabbitmq-server_3.6.6-1_all.deb](https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server_3.6.6-1_all.deb){:target="_blank"}. -2. Install the package with `dpkg`. +1. Install the package with `dpkg`. Refer to [Installing on Debian/Ubuntu](https://www.rabbitmq.com/install-debian.html){:target="_blank"} for more information. @@ -63,7 +63,7 @@ rpm -Uvh erlang-solutions-1.0-1.noarch.rpm The RabbitMQ server is included on CentOS, but the version is often old. RabbitMQ recommends installing the package from their website. 1. Download [rabbitmq-server-3.5.6-1.noarch.rpm](https://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm){:target="_blank"}. -2. Run the following commands as a user with root permissions: +1. Run the following commands as a user with root permissions: ```bash rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc @@ -79,11 +79,11 @@ Refer to [Installing on RPM-based Linux](https://www.rabbitmq.com/install-rpm.ht Review the official RabbitMQ documentation to configure and manage RabbitMQ. Pay attention to the following items: -* Environment variables -* Port access -* Default user accounts -* Starting and stopping the broker -* System limits +* Environment variables +* Port access +* Default user accounts +* Starting and stopping the broker +* System limits ## Install Magento with RabbitMQ and connect to {{site.data.var.ce}} or {{site.data.var.ee}} diff --git a/guides/v2.3/install-gde/prereq/nginx.md b/guides/v2.3/install-gde/prereq/nginx.md index 13828476fe6..f0a33dabb90 100644 --- a/guides/v2.3/install-gde/prereq/nginx.md +++ b/guides/v2.3/install-gde/prereq/nginx.md @@ -18,10 +18,10 @@ Installation instructions vary based on which operating system you are using. Se If you're new to all this and need some help getting started, we suggest the following: -* [Is the Magento software installed already?]({{page.baseurl }}/install-gde/basics/basics_magento-installed.html) -* [What is the software that the Magento server needs to run?]({{page.baseurl }}/install-gde/basics/basics_software.html) -* [What operating system is my server running?]({{page.baseurl }}/install-gde/basics/basics_os-version.html) -* [How do I log in to my Magento server using a terminal, command prompt, or SSH?]({{page.baseurl }}/install-gde/basics/basics_login.html) +* [Is the Magento software installed already?]({{page.baseurl }}/install-gde/basics/basics_magento-installed.html) +* [What is the software that the Magento server needs to run?]({{page.baseurl }}/install-gde/basics/basics_software.html) +* [What operating system is my server running?]({{page.baseurl }}/install-gde/basics/basics_os-version.html) +* [How do I log in to my Magento server using a terminal, command prompt, or SSH?]({{page.baseurl }}/install-gde/basics/basics_login.html) ## Ubuntu 16 @@ -43,41 +43,41 @@ To install and configure `php-fpm`: 1. Install `php-fpm` and `php-cli`: - ```bash - apt-get -y install php7.2-fpm php7.2-cli - ``` + ```bash + apt-get -y install php7.2-fpm php7.2-cli + ``` - {:.bs-callout .bs-callout-info} - This command installs the latest available version of PHP 7.2.X. See [Magento 2.3.x technology stack requirements]({{ page.baseurl }}/install-gde/system-requirements-tech.html) for supported PHP versions. + {:.bs-callout .bs-callout-info} + This command installs the latest available version of PHP 7.2.X. See [Magento 2.3.x technology stack requirements]({{ page.baseurl }}/install-gde/system-requirements-tech.html) for supported PHP versions. 1. Open the `php.ini` files in an editor: - ```bash - vim /etc/php/7.2/fpm/php.ini - ``` + ```bash + vim /etc/php/7.2/fpm/php.ini + ``` - ```bash - vim /etc/php/7.2/cli/php.ini - ``` + ```bash + vim /etc/php/7.2/cli/php.ini + ``` 1. Edit both files to match the following lines: - ```conf - memory_limit = 2G - max_execution_time = 1800 - zlib.output_compression = On - ``` + ```conf + memory_limit = 2G + max_execution_time = 1800 + zlib.output_compression = On + ``` - {:.bs-callout .bs-callout-info} - We recommend setting the memory limit to 2G when testing Magento. Refer to [Required PHP settings]({{page.baseurl }}/install-gde/prereq/php-settings.html) for more information. + {:.bs-callout .bs-callout-info} + We recommend setting the memory limit to 2G when testing Magento. Refer to [Required PHP settings]({{page.baseurl }}/install-gde/prereq/php-settings.html) for more information. 1. Save and exit the editor. 1. Restart the `php-fpm` service: - ```bash - systemctl restart php7.2-fpm - ``` + ```bash + systemctl restart php7.2-fpm + ``` ### Install and configure MySQL @@ -87,11 +87,11 @@ Refer to [MySQL]({{page.baseurl }}/install-gde/prereq/mysql.html) for more infor There are several ways to download the Magento software, including: -* [Get the Composer metapackage]({{ page.baseurl }}/install-gde/composer.html) +* [Get the Composer metapackage]({{ page.baseurl }}/install-gde/composer.html) -* [Download an archive]({{ page.baseurl }}/install-gde/prereq/zip_install.html) +* [Download an archive]({{ page.baseurl }}/install-gde/prereq/zip_install.html) -* [Clone the git repository]({{ page.baseurl }}/install-gde/prereq/dev_install.html) +* [Clone the git repository]({{ page.baseurl }}/install-gde/prereq/dev_install.html) For this example, we'll install using Composer and the command line. @@ -102,72 +102,84 @@ You cannot use the Web Setup Wizard when installing Magento on nginx. You must u 1. Change to the web server docroot directory or a directory that you have configured as a virtual host docroot. For this example, we're using the Ubuntu default `/var/www/html`. - ```bash - cd /var/www/html - ``` + ```bash + cd /var/www/html + ``` 1. Install Composer globally. You'll need Composer to update dependencies before installing Magento: - ```bash - curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer - ``` + ```bash + curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer + ``` 1. Create a new Composer project using the {{site.data.var.ce}} or {{site.data.var.ee}} metapackage. - **{{site.data.var.ce}}** + **{{site.data.var.ce}}** - ```bash - composer create-project --repository=https://repo.magento.com/ magento/project-community-edition - ``` + ```bash + composer create-project --repository=https://repo.magento.com/ magento/project-community-edition + ``` - **{{site.data.var.ee}}** + **{{site.data.var.ee}}** - ```bash - composer create-project --repository=https://repo.magento.com/ magento/project-enterprise-edition - ``` + ```bash + composer create-project --repository=https://repo.magento.com/ magento/project-enterprise-edition + ``` - When prompted, enter your [Magento authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html). Your _public key_ is your username; your _private key_ is your password. + When prompted, enter your [Magento authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html). Your _public key_ is your username; your _private key_ is your password. 1. Set read-write permissions for the web server group before you install the Magento software. This is necessary so that the Setup Wizard and command line can write files to the Magento file system. - ```terminal - cd /var/www/html/ - find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + - find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + - chown -R :www-data . # Ubuntu - chmod u+x bin/magento - ``` + ```bash + cd /var/www/html/ + ``` + + ```bash + find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + + ``` + + ```bash + find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + + ``` + + ```bash + chown -R :www-data . # Ubuntu + ``` + + ```bash + chmod u+x bin/magento + ``` 1. Install Magento from the [command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html). This example assumes that the Magento install directory is named `magento2ee`, the `db-host` is on the same machine (`localhost`), and that the `db-name`, `db-user`, and `db-password` are all `magento`: - ```bash - bin/magento setup:install \ - --base-url=http://localhost/magento2ee \ - --db-host=localhost \ - --db-name=magento \ - --db-user=magento \ - --db-password=magento \ - --backend-frontname=admin \ - --admin-firstname=admin \ - --admin-lastname=admin \ - --admin-email=admin@admin.com \ - --admin-user=admin \ - --admin-password=admin123 \ - --language=en_US \ - --currency=USD \ - --timezone=America/Chicago \ - --use-rewrites=1 - ``` + ```bash + bin/magento setup:install \ + --base-url=http://localhost/magento2ee \ + --db-host=localhost \ + --db-name=magento \ + --db-user=magento \ + --db-password=magento \ + --backend-frontname=admin \ + --admin-firstname=admin \ + --admin-lastname=admin \ + --admin-email=admin@admin.com \ + --admin-user=admin \ + --admin-password=admin123 \ + --language=en_US \ + --currency=USD \ + --timezone=America/Chicago \ + --use-rewrites=1 + ``` 1. Switch to developer mode: - ```bash - cd /var/www/html/magento2/bin - ``` + ```bash + cd /var/www/html/magento2/bin + ``` - ```bash - ./magento deploy:mode:set developer - ``` + ```bash + ./magento deploy:mode:set developer + ``` ### Configure nginx {#configure-nginx-ubuntu} @@ -177,25 +189,25 @@ These instructions assume you're using the Ubuntu default location for the nginx 1. Create a new virtual host for your Magento site: - ```bash - vim /etc/nginx/sites-available/magento - ``` + ```bash + vim /etc/nginx/sites-available/magento + ``` -2. Add the following configuration: +1. Add the following configuration: - ```conf - upstream fastcgi_backend { - server unix:/run/php/php7.2-fpm.sock; - } + ```conf + upstream fastcgi_backend { + server unix:/run/php/php7.2-fpm.sock; + } - server { + server { - listen 80; - server_name www.magento-dev.com; - set $MAGE_ROOT /var/www/html/magento2; - include /var/www/html/magento2/nginx.conf.sample; - } - ``` + listen 80; + server_name www.magento-dev.com; + set $MAGE_ROOT /var/www/html/magento2; + include /var/www/html/magento2/nginx.conf.sample; + } + ``` {:.bs-callout .bs-callout-info} The `include` directive must point to the sample nginx configuration file in your Magento installation directory. @@ -206,21 +218,21 @@ The `include` directive must point to the sample nginx configuration file in you 1. Activate the newly created virtual host by creating a symlink to it in the `/etc/nginx/sites-enabled` directory: - ```bash - ln -s /etc/nginx/sites-available/magento /etc/nginx/sites-enabled - ``` + ```bash + ln -s /etc/nginx/sites-available/magento /etc/nginx/sites-enabled + ``` 1. Verify that the syntax is correct: - ```bash - nginx -t - ``` + ```bash + nginx -t + ``` 1. Restart nginx: - ```bash - systemctl restart nginx - ``` + ```bash + systemctl restart nginx + ``` ### Verify the installation @@ -258,9 +270,9 @@ Magento requires several [PHP](php-settings.html) extensions to function properl 1. Install `php-fpm`: - ```bash - yum -y install php70w-fpm - ``` + ```bash + yum -y install php70w-fpm + ``` 1. Open the `/etc/php.ini` file in an editor. @@ -268,20 +280,20 @@ Magento requires several [PHP](php-settings.html) extensions to function properl 1. Edit the file to match the following lines: - ```conf - memory_limit = 2G - max_execution_time = 1800 - zlib.output_compression = On - ``` + ```conf + memory_limit = 2G + max_execution_time = 1800 + zlib.output_compression = On + ``` {:.bs-callout .bs-callout-info} We recommend setting the memory limit to 2G when testing Magento. Refer to [Required PHP settings]({{page.baseurl }}/install-gde/prereq/php-settings.html) for more information. 1. Uncomment the session path directory and set the path: - ```conf - session.save_path = "/var/lib/php/session" - ``` + ```conf + session.save_path = "/var/lib/php/session" + ``` 1. Save and exit the editor. @@ -289,62 +301,62 @@ We recommend setting the memory limit to 2G when testing Magento. Refer to [Requ 1. Edit the file to match the following lines: - ```conf - user = nginx - group = nginx - listen = /run/php-fpm/php-fpm.sock - listen.owner = nginx - listen.group = nginx - listen.mode = 0660 - ``` + ```conf + user = nginx + group = nginx + listen = /run/php-fpm/php-fpm.sock + listen.owner = nginx + listen.group = nginx + listen.mode = 0660 + ``` 1. Uncomment the environment lines: - ```conf - env[HOSTNAME] = $HOSTNAME - env[PATH] = /usr/local/bin:/usr/bin:/bin - env[TMP] = /tmp - env[TMPDIR] = /tmp - env[TEMP] = /tmp - ``` + ```conf + env[HOSTNAME] = $HOSTNAME + env[PATH] = /usr/local/bin:/usr/bin:/bin + env[TMP] = /tmp + env[TMPDIR] = /tmp + env[TEMP] = /tmp + ``` 1. Save and exit the editor. 1. Create a new directory for the PHP session path and change the owner to the `apache` user and group: - ```bash - mkdir -p /var/lib/php/session/ - ``` + ```bash + mkdir -p /var/lib/php/session/ + ``` - ```bash - chown -R apache:apache /var/lib/php/ - ``` + ```bash + chown -R apache:apache /var/lib/php/ + ``` 1. Create a new directory for the PHP session path and change the owner to the `apache` user and group: - ```bash - mkdir -p /run/php-fpm/ - ``` + ```bash + mkdir -p /run/php-fpm/ + ``` - ```bash - chown -R apache:apache /run/php-fpm/ - ``` + ```bash + chown -R apache:apache /run/php-fpm/ + ``` 1. Start the `php-fpm` service and configure it to start at boot time: - ```bash - systemctl start php-fpm - ``` + ```bash + systemctl start php-fpm + ``` - ```bash - systemctl enable php-fpm - ``` + ```bash + systemctl enable php-fpm + ``` 1. Verify that the `php-fpm` service is running: - ```bash - netstat -pl | grep php-fpm.sock - ``` + ```bash + netstat -pl | grep php-fpm.sock + ``` ### Install and configure MySQL @@ -354,11 +366,11 @@ Refer to [MySQL]({{page.baseurl }}/install-gde/prereq/mysql.html) for more infor There are several ways to download the Magento software, including: -* [Get the Composer metapackage]({{ page.baseurl }}/install-gde/composer.html) +* [Get the Composer metapackage]({{ page.baseurl }}/install-gde/composer.html) -* [Download an archive]({{ page.baseurl }}/install-gde/prereq/zip_install.html) +* [Download an archive]({{ page.baseurl }}/install-gde/prereq/zip_install.html) -* [Clone the git repository]({{ page.baseurl }}/install-gde/prereq/dev_install.html) +* [Clone the git repository]({{ page.baseurl }}/install-gde/prereq/dev_install.html) For this example, we'll install using Composer and the command line. @@ -369,72 +381,84 @@ You cannot use the Web Setup Wizard when installing Magento on nginx. You must u 1. Change to the web server docroot directory or a directory that you have configured as a virtual host docroot. For this example, we're using the Ubuntu default `/var/www/html`. - ```bash - cd /var/www/html - ``` + ```bash + cd /var/www/html + ``` 1. Install Composer globally. You'll need Composer to update dependencies before installing Magento: - ```bash - curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer - ``` + ```bash + curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer + ``` 1. Create a new Composer project using the {{site.data.var.ce}} or {{site.data.var.ee}} metapackage. - **{{site.data.var.ce}}** + **{{site.data.var.ce}}** - ```bash - composer create-project --repository=https://repo.magento.com/ magento/project-community-edition - ``` + ```bash + composer create-project --repository=https://repo.magento.com/ magento/project-community-edition + ``` - **{{site.data.var.ee}}** + **{{site.data.var.ee}}** - ```bash - composer create-project --repository=https://repo.magento.com/ magento/project-enterprise-edition - ``` + ```bash + composer create-project --repository=https://repo.magento.com/ magento/project-enterprise-edition + ``` - When prompted, enter your [Magento authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html). Your _public key_ is your username; your _private key_ is your password. + When prompted, enter your [Magento authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html). Your _public key_ is your username; your _private key_ is your password. 1. Set read-write permissions for the web server group before you install the Magento software. This is necessary so that the Setup Wizard and command line can write files to the Magento file system. - ```terminal - cd /var/www/html/ - find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + - find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + - chown -R :www-data . # Ubuntu - chmod u+x bin/magento - ``` + ```bash + cd /var/www/html/ + ``` + + ```bash + find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + + ``` + + ```bash + find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + + ``` + + ```bash + chown -R :www-data . # Ubuntu + ``` + + ```bash + chmod u+x bin/magento + ``` 1. Install Magento from the [command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html). This example assumes that the Magento install directory is named `magento2ee`, the `db-host` is on the same machine (`localhost`), and that the `db-name`, `db-user`, and `db-password` are all `magento`: - ```bash - bin/magento setup:install \ - --base-url=http://localhost/magento2ee \ - --db-host=localhost \ - --db-name=magento \ - --db-user=magento \ - --db-password=magento \ - --backend-frontname=admin \ - --admin-firstname=admin \ - --admin-lastname=admin \ - --admin-email=admin@admin.com \ - --admin-user=admin \ - --admin-password=admin123 \ - --language=en_US \ - --currency=USD \ - --timezone=America/Chicago \ - --use-rewrites=1 - ``` + ```bash + bin/magento setup:install \ + --base-url=http://localhost/magento2ee \ + --db-host=localhost \ + --db-name=magento \ + --db-user=magento \ + --db-password=magento \ + --backend-frontname=admin \ + --admin-firstname=admin \ + --admin-lastname=admin \ + --admin-email=admin@admin.com \ + --admin-user=admin \ + --admin-password=admin123 \ + --language=en_US \ + --currency=USD \ + --timezone=America/Chicago \ + --use-rewrites=1 + ``` 1. Switch to developer mode: - ```bash - cd /var/www/html/magento2/bin - ``` + ```bash + cd /var/www/html/magento2/bin + ``` - ```bash - ./magento deploy:mode:set developer - ``` + ```bash + ./magento deploy:mode:set developer + ``` ### Configure nginx {#configure-nginx-centos} @@ -444,25 +468,25 @@ These instructions assume you're using the CentOS default location for the nginx 1. Create a new virtual host for your Magento site: - ```bash - vim /etc/nginx/conf.d/magento.conf - ``` + ```bash + vim /etc/nginx/conf.d/magento.conf + ``` 1. Add the following configuration: - ```conf - upstream fastcgi_backend { - server unix:/run/php-fpm/php-fpm.sock; - } + ```conf + upstream fastcgi_backend { + server unix:/run/php-fpm/php-fpm.sock; + } - server { + server { - listen 80; - server_name www.magento-dev.com; - set $MAGE_ROOT /usr/share/nginx/html/magento2; - include /usr/share/nginx/html/magento2/nginx.conf.sample; - } - ``` + listen 80; + server_name www.magento-dev.com; + set $MAGE_ROOT /usr/share/nginx/html/magento2; + include /usr/share/nginx/html/magento2/nginx.conf.sample; + } + ``` {:.bs-callout .bs-callout-info} The `include` directive must point to the sample nginx configuration file in your Magento installation directory. @@ -473,15 +497,15 @@ The `include` directive must point to the sample nginx configuration file in you 1. Verify that the syntax is correct: - ```bash - nginx -t - ``` + ```bash + nginx -t + ``` 1. Restart nginx: - ```bash - systemctl restart nginx - ``` + ```bash + systemctl restart nginx + ``` ### Configure SELinux and Firewalld @@ -495,61 +519,61 @@ To configure SELinux and firewalld: 1. Install SELinux management tools: - ```bash - yum -y install policycoreutils-python - ``` + ```bash + yum -y install policycoreutils-python + ``` 1. Run the following commands to change the security context for the Magento installation directory: - ```bash - semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/app/etc(/.*)?' - ``` + ```bash + semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/app/etc(/.*)?' + ``` - ```bash - semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/var(/.*)?' - ``` + ```bash + semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/var(/.*)?' + ``` - ```bash - semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/pub/media(/.*)?' - ``` + ```bash + semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/pub/media(/.*)?' + ``` - ```bash - semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/pub/static(/.*)?' - ``` + ```bash + semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/magento2/pub/static(/.*)?' + ``` - ```bash - restorecon -Rv '/usr/share/nginx/html/magento2/' - ``` + ```bash + restorecon -Rv '/usr/share/nginx/html/magento2/' + ``` 1. Install the firewalld package: - ```bash - yum -y install firewalld - ``` + ```bash + yum -y install firewalld + ``` 1. Start the firewall service and configure it to start at boot time: - ```bash - systemctl start firewalld - ``` + ```bash + systemctl start firewalld + ``` - ```bash - systemctl enable firewalld - ``` + ```bash + systemctl enable firewalld + ``` 1. Run the following commands to open ports for HTTP and HTTPS so you can access the Magento base URL from a web browser: - ```bash - firewall-cmd --permanent --add-service=http - ``` + ```bash + firewall-cmd --permanent --add-service=http + ``` - ```bash - firewall-cmd --permanent --add-service=https - ``` + ```bash + firewall-cmd --permanent --add-service=https + ``` - ```bash - firewall-cmd --reload - ``` + ```bash + firewall-cmd --reload + ``` ### Verify the installation diff --git a/guides/v2.3/install-gde/prereq/zip_install.md b/guides/v2.3/install-gde/prereq/zip_install.md index 960e8d55094..d91ba82c4e5 100644 --- a/guides/v2.3/install-gde/prereq/zip_install.md +++ b/guides/v2.3/install-gde/prereq/zip_install.md @@ -27,14 +27,14 @@ To transfer the Magento software archive to your server: There are many ways to configure FTP and SCP. Following are a few packages you can use. Magento does not recommend particular software. - * Windows: [WinSCP](https://winscp.net/eng/download.php) or [Filezilla](https://filezilla-project.org/download.php) - * Mac OS: [CyberDuck](https://cyberduck.io/?l=en) or [Filezilla](https://filezilla-project.org/download.php) + * Windows: [WinSCP](https://winscp.net/eng/download.php) or [Filezilla](https://filezilla-project.org/download.php) + * Mac OS: [CyberDuck](https://cyberduck.io/?l=en) or [Filezilla](https://filezilla-project.org/download.php) -2. Create a connection to your Magento server. +1. Create a connection to your Magento server. Follow the prompts on your screen or consult the documentation provided with your FTP software for more information. -3. After you log in to your server, browse to locate the {{site.data.var.ce}} or {{site.data.var.ee}} archive on your local system. +1. After you log in to your server, browse to locate the {{site.data.var.ce}} or {{site.data.var.ee}} archive on your local system. On the remote system, browse to locate the web server docroot directory. @@ -42,42 +42,42 @@ To transfer the Magento software archive to your server: ![]({{ site.baseurl }}/common/images/install-merch_ftp-transfer.png) -4. Transfer the archive from your local system to the web server docroot directory. +1. Transfer the archive from your local system to the web server docroot directory. On some FTP client software, you do this by dragging and dropping. -5. Wait while the transfer completes. -6. Log in to your Magento server, or switch to, the [Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html) -7. Change to the web server docroot or the virtual host directory. -7. Create a subdirectory for the Magento software. +1. Wait while the transfer completes. +1. Log in to your Magento server, or switch to, the [Magento file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html) +1. Change to the web server docroot or the virtual host directory. +1. Create a subdirectory for the Magento software. - If you set up a virtual host, the subdirectory name must match the name in your virtual host. + If you set up a virtual host, the subdirectory name must match the name in your virtual host. - For example, + For example, - ```bash - mkdir magento2ce - ``` + ```bash + mkdir magento2ce + ``` - ```bash - mkdir magento2ee - ``` + ```bash + mkdir magento2ee + ``` - You can also use a generic directory name + You can also use a generic directory name - ```bash - mkdir magento2 - ``` + ```bash + mkdir magento2 + ``` -7. Copy the Magento archive to that directory. +1. Copy the Magento archive to that directory. - For example, + For example, - ```bash - cp /var/www/Magento-CE-2.0.0+Samples.tar.bz2 magento2 - ``` + ```bash + cp /var/www/Magento-CE-2.0.0+Samples.tar.bz2 magento2 + ``` -8. Continue with the next section. +1. Continue with the next section. ## Extract the software on your server {#zip-extract} @@ -98,5 +98,5 @@ Related topics Install the Magento software: -* [Command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html) -* [Setup Wizard]({{ page.baseurl }}/install-gde/install/web/install-web.html) +* [Command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html) +* [Setup Wizard]({{ page.baseurl }}/install-gde/install/web/install-web.html) diff --git a/guides/v2.3/install-gde/tutorials/change-docroot-to-pub.md b/guides/v2.3/install-gde/tutorials/change-docroot-to-pub.md index b00d2fb5075..feee23399d1 100644 --- a/guides/v2.3/install-gde/tutorials/change-docroot-to-pub.md +++ b/guides/v2.3/install-gde/tutorials/change-docroot-to-pub.md @@ -6,10 +6,10 @@ title: Modify docroot to improve security In a standard installation with an Apache web server, Magento is installed to the default web root: `/var/www/html/magento2`. Within the `magento2` folder are: -- /pub/ -- /setup/ -- /var/ -- other folders +- /pub/ +- /setup/ +- /var/ +- other folders The Magento app is served from `/var/www/html/magento2/pub`. The rest of the Magento file system is vulnerable because it is accessible from a browser. Setting the webroot to the `pub/` directory prevents site visitors from accessing the Web Setup Wizard and other sensitive areas of the Magento file system from a browser. @@ -45,11 +45,11 @@ When used in your server block that defines your site, the `nginx.conf.sample` c To complete this tutorial, you will need access to a working Magento installation running on a [LAMP](https://en.wikipedia.org/wiki/LAMP_(software_bundle)){:target="_blank"} stack: -- Linux -- Apache (2.2+) -- MySQL (5.6+) -- PHP (7.1.3+ or 7.2) -- Magento (2.0+) +- Linux +- Apache (2.2+) +- MySQL (5.6+) +- PHP (7.1.3+ or 7.2) +- Magento (2.0+) {:.bs-callout .bs-callout-info} Refer to [Prerequisites]({{ page.baseurl }}/install-gde/prereq/prereq-overview.html) and the [Installation Guide]({{ page.baseurl }}/install-gde/bk-install-guide.html) for more information. @@ -58,14 +58,14 @@ Refer to [Prerequisites]({{ page.baseurl }}/install-gde/prereq/prereq-overview.h The name and location of your virtual host file depends on which version of Apache you are running. This example shows the name and location of the virtual host file on Apache v2.4. -1. Log in to your Magento server. -2. Edit your virtual host file: +1. Log in to your Magento server. +1. Edit your virtual host file: ```bash vim /etc/apache2/sites-available/000-default.conf ``` -3. Add the path to your Magento `pub/` directory to the `DocumentRoot` directive: +1. Add the path to your Magento `pub/` directory to the `DocumentRoot` directive: ```conf @@ -82,7 +82,7 @@ The name and location of your virtual host file depends on which version of Apac ``` -4. Restart Apache: +1. Restart Apache: ```bash systemctl restart apache2 @@ -95,58 +95,70 @@ If you appended a directory name to your server's hostname or IP address to crea {: .bs-callout-info } Replace `192.168.33.10` with your server's hostname. -1. Log in to the Magento database: +1. Log in to the Magento database: - mysql -u -p + ```bash + mysql -u -p + ``` -2. Specify the Magento database you created when you installed Magento: +1. Specify the Magento database you created when you installed Magento: - use + ```shell + use + ``` -3. Update the base URL: +1. Update the base URL: - UPDATE core_config_data SET value='http://192.168.33.10' WHERE path='web/unsecure/base_url'; + ```shell + UPDATE core_config_data SET value='http://192.168.33.10' WHERE path='web/unsecure/base_url'; + ``` ## 3. Switch modes [Magento modes]({{ page.baseurl }}/config-guide/bootstrap/magento-modes.html), which include `production` and `developer`, are designed to improve security and make development easier. As the names suggest, you should switch to `developer` mode when extending or customizing Magento and switch to `production` mode when running Magento in a live environment. Switching between modes is an important step in verifying that your server configuration is working properly. You can switch between modes using the Magento CLI tool: -1. Go to your Magento installation directory. -2. Switch to `production` mode. +1. Go to your Magento installation directory. +1. Switch to `production` mode. ```bash bin/magento deploy:mode:set production + ``` + + ```bash bin/magento cache:flush ``` -3. Refresh your browser and verify that the storefront displays properly. -4. Switch to `developer` mode. +1. Refresh your browser and verify that the storefront displays properly. +1. Switch to `developer` mode. ```bash bin/magento deploy:mode:set developer + ``` + + ```bash bin/magento cache:flush ``` -5. Refresh your browser and verify that the storefront displays properly. +1. Refresh your browser and verify that the storefront displays properly. ## 4. Verify the storefront Go to the [storefront](https://glossary.magento.com/storefront) in a web browser to verify that everything is working. -1. Open a web browser and enter your server's hostname or IP address in the address bar. For example, http://192.168.33.10. +1. Open a web browser and enter your server's hostname or IP address in the address bar. For example, http://192.168.33.10. - The following figure shows a sample storefront page. If it displays as follows, your installation was a success! + The following figure shows a sample storefront page. If it displays as follows, your installation was a success! - ![Magento storefront which verifies a successful installation]({{ site.baseurl }}/common/images/install-success_store.png){:.width="450px"} + ![Magento storefront which verifies a successful installation]({{ site.baseurl }}/common/images/install-success_store.png){:.width="450px"} - Refer to the [troubleshooting section]({{ page.baseurl }}/install-gde/trouble/tshoot_no-styles.html) if the page displays a 404 (Not Found) or fails to load other assets like images, CSS, and JS. + Refer to the [troubleshooting section]({{ page.baseurl }}/install-gde/trouble/tshoot_no-styles.html) if the page displays a 404 (Not Found) or fails to load other assets like images, CSS, and JS. -2. Try accessing the Magento directory for the Web Setup Wizard from a browser. Append "_setup/_" to your server's hostname or IP address in the address bar: +1. Try accessing the Magento directory for the Web Setup Wizard from a browser. Append "_setup/_" to your server's hostname or IP address in the address bar: - If you see a 404 or the "Access denied" message, you've successfully restricted access to the Magento file system. + If you see a 404 or the "Access denied" message, you've successfully restricted access to the Magento file system. - ![Access denied]({{ site.baseurl }}/common/images/access-denied.png) + ![Access denied]({{ site.baseurl }}/common/images/access-denied.png) ## Congratulations! You're finished. {:.no_toc} \ No newline at end of file diff --git a/guides/v2.3/inventory/reservations.md b/guides/v2.3/inventory/reservations.md index cd85ed0d213..1a58fb3bbab 100644 --- a/guides/v2.3/inventory/reservations.md +++ b/guides/v2.3/inventory/reservations.md @@ -11,19 +11,19 @@ Reservations prevent the merchant from overselling products, even in cases where Magento creates a reservation for each product when the following events occur: -* A customer or merchant places an order. -* A customer or merchant fully or partially cancels an order. -* The merchant creates a shipment for a physical product. -* The merchant creates an invoice for a virtual or downloadable product. -* The merchant issues a credit memo. +* A customer or merchant places an order. +* A customer or merchant fully or partially cancels an order. +* The merchant creates a shipment for a physical product. +* The merchant creates an invoice for a virtual or downloadable product. +* The merchant issues a credit memo. Reservations are append-only operations, similar to a log of events. The initial reservation is assigned a negative quantity value. All subsequent reservations created while processing the order are positive values. When the order is complete, the sum of all reservations for the product is 0. Before Magento can issue a reservation in response to a new order, it determines whether there are enough salable items to fulfill the order. The following quantities factor into the calculation: -* **StockItem quantity**. The StockItem quantity is the aggregated amount of inventory from all the physical sources for the current sales channel. If the Baltimore source has 20 units of a product, the Austin source has 25 units of the same product, while the Reno source has 10, and all these sources are linked to Stock A, then the StockItem count for thus product is 55 (20 + 25 + 10). (When items are shipped, the Inventory indexer updates the quantities available at each source.) +* **StockItem quantity**. The StockItem quantity is the aggregated amount of inventory from all the physical sources for the current sales channel. If the Baltimore source has 20 units of a product, the Austin source has 25 units of the same product, while the Reno source has 10, and all these sources are linked to Stock A, then the StockItem count for thus product is 55 (20 + 25 + 10). (When items are shipped, the Inventory indexer updates the quantities available at each source.) -* **Outstanding reservations**. Magento totals all the initial reservations that have not been compensated. This number will always be negative. If customer A has a reservation for 10 items, and customer B has a reservation 5 for items, then outstanding reservations for the product total -15. +* **Outstanding reservations**. Magento totals all the initial reservations that have not been compensated. This number will always be negative. If customer A has a reservation for 10 items, and customer B has a reservation 5 for items, then outstanding reservations for the product total -15. Therefore, the merchant can fulfill an incoming order as long as the customer orders less than 40 (55 + -15) units. @@ -46,11 +46,11 @@ Parameter | Data type | Description The metadata `event_type` can have the following values: -* `order_placed` -* `order_canceled` -* `shipment_created` -* `creditmemo_created` -* `invoice_created` +* `order_placed` +* `order_canceled` +* `shipment_created` +* `creditmemo_created` +* `invoice_created` Currently, the metadata object type must be `order`, and the object ID is the order ID. @@ -70,7 +70,7 @@ The following example shows the sequence of reservations generated for a simple event_type = order_placed ``` -2. The customer sends an invoice for 20 items, essentially canceling 5 of the units ordered. +1. The customer sends an invoice for 20 items, essentially canceling 5 of the units ordered. ```text reservation_id = 2 @@ -80,7 +80,7 @@ The following example shows the sequence of reservations generated for a simple event_type = order_canceled ``` -3. The merchant ships the purchased 20 units. +1. The merchant ships the purchased 20 units. ```text reservation_id = 3 diff --git a/guides/v2.3/migration/migration-migrate-settings.md b/guides/v2.3/migration/migration-migrate-settings.md index 551b50aa08e..87cb1b34998 100644 --- a/guides/v2.3/migration/migration-migrate-settings.md +++ b/guides/v2.3/migration/migration-migrate-settings.md @@ -18,7 +18,7 @@ According to our data migration [order]({{ page.baseurl }}/migration/migration-m 1. Log in to Magento server as [the file system owner]({{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html). -2. Change to the Magento `/bin` directory or make sure it is added to your system PATH. +1. Change to the Magento `/bin` directory or make sure it is added to your system PATH. {: .bs-callout-info } Ensure Magento is deployed in default mode. Developer mode can cause validation errors in the migration tool. @@ -35,9 +35,9 @@ bin/magento migrate:settings [-r|--reset] {} where: -* `[-r|--reset]` is an optional argument that starts migration from the beginning. You can use this argument for testing migration +* `[-r|--reset]` is an optional argument that starts migration from the beginning. You can use this argument for testing migration -* `{}` is the absolute file system path to the migration tool's [`config.xml`]({{page.baseurl}}/migration/migration-tool-configure.html#migration-configure) file; this argument is required. +* `{}` is the absolute file system path to the migration tool's [`config.xml`]({{page.baseurl}}/migration/migration-tool-configure.html#migration-configure) file; this argument is required. {: .bs-callout-info } This command does not migrate all configuration settings. Verify all settings in the Magento 2 [Admin](https://glossary.magento.com/admin) before proceeding. @@ -74,4 +74,4 @@ For more details, see the [Settings migration mode]({{ page.baseurl }}/migration ## Next migration step -* [Migrate data]({{ page.baseurl }}/migration/migration-migrate-data.html) +* [Migrate data]({{ page.baseurl }}/migration/migration-migrate-data.html) diff --git a/guides/v2.3/performance-best-practices/advanced-js-bundling.md b/guides/v2.3/performance-best-practices/advanced-js-bundling.md index 52b5526698e..a902dbb7c69 100644 --- a/guides/v2.3/performance-best-practices/advanced-js-bundling.md +++ b/guides/v2.3/performance-best-practices/advanced-js-bundling.md @@ -19,7 +19,7 @@ It is designed to provide optimal bundles and be less error-prone than the built Bundling JavaScript modules for better performance is about reducing two things: 1. The number of server requests. -2. The size of those server requests. +1. The size of those server requests. In a modular application, the number of server requests can reach into the hundreds. For example, the following screen shot shows only the start of the list of JavaScript modules loaded on the home page of a clean Magento installation. @@ -108,6 +108,7 @@ Full versions of the sample code used in this article are available here: #### 1\. Add a build.js file Create a `build.js` file in the Magento root directory. This file will contain the entire build configuration for your bundles. + ```javascript ({ optimize: 'none', @@ -120,6 +121,7 @@ Later, we will change the `optimize:` setting from_ `none` to `uglify2` to minif #### 2\. Add RequireJS dependencies, shims, paths, and map Add the following RequireJS build configuration nodes, `deps`, `shim`, `paths`, and `map`, to your build file: + ```javascript ({ optimize: 'none', @@ -143,6 +145,7 @@ Within this file, you will find multiple entries for each of the configuration n #### 4\. Add a modules node At the end of the `build.js` file, add the modules[] array as a placeholder for the bundles you will define for your storefront later. + ```javascript ({ optimize: 'none', @@ -162,7 +165,7 @@ At the end of the `build.js` file, add the modules[] array as a placeholder for You can retrieve all the RequireJS module dependencies from your store's page types by using: 1. PhantomJS from the command line (assuming you have PhantomJS installed). -2. RequireJS command in your browser's console. +1. RequireJS command in your browser's console. #### To use PhantomJS: diff --git a/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md b/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md index 5ab6c9ac173..126978baf90 100644 --- a/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md +++ b/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md @@ -23,15 +23,15 @@ Follow these steps to download and apply this patch: 1. Access [My Account](https://account.magento.com/customer/account/login). -2. Navigate to the **Downloads** tab. Select the Magento edition and version you need. +1. Navigate to the **Downloads** tab. Select the Magento edition and version you need. -3. Select **Support Patches and Security Patches**, then **PRODSECBUG-2198**. +1. Select **Support Patches and Security Patches**, then **PRODSECBUG-2198**. -4. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). +1. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). -5. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. +1. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. -6. Refresh the cache from the Admin (**System** > Tools > **Cache Management**). +1. Refresh the cache from the Admin (**System** > Tools > **Cache Management**). ## Highlights diff --git a/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md b/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md index ccdf8388766..96a236a2340 100644 --- a/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md +++ b/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md @@ -22,13 +22,13 @@ Follow these steps to download and apply this patch: 1. Access the Downloads page [here](https://magento.com/tech-resources/download#download2288). -2. Select the Git-based option from **Select your format**. +1. Select the Git-based option from **Select your format**. -4. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). +1. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). -5. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. +1. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. -6. Refresh the cache from the Admin (**System** > **Cache Management**). +1. Refresh the cache from the Admin (**System** > **Cache Management**). ## Highlights diff --git a/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md b/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md index 6c34a5cec7f..2ceb6c4eece 100644 --- a/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md +++ b/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md @@ -29,15 +29,15 @@ Follow these steps to download and apply this patch: 1. Access [My Account](https://account.magento.com/customer/account/login). -2. Navigate to the **Downloads** tab. Select the Magento edition and version you need. +1. Navigate to the **Downloads** tab. Select the Magento edition and version you need. -3. Select **Support Patches and Security Patches**, then **PRODSECBUG-2198**. +1. Select **Support Patches and Security Patches**, then **PRODSECBUG-2198**. -4. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). +1. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). -5. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. +1. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. -6. Refresh the cache from the Admin (**System** > **Cache Management**). +1. Refresh the cache from the Admin (**System** > **Cache Management**). ## PayPal Payflow Pro active carding activity update @@ -1873,9 +1873,9 @@ If UPS Type is set to `United Parcel Service` in the UPS Shipping Method Config 1. Navigate to **Stores**  > **Settings**  > **Configuration**  >  **Sales**  > **Shipping Methods**. Then, expand the **UPS** section. -2. At the **UPS Type** field, clear the Use system value checkbox. Then, change **UPS Type** to `United Parcel Service XML`. The Gateway URL populates correctly when this value is selected. +1. At the **UPS Type** field, clear the Use system value checkbox. Then, change **UPS Type** to `United Parcel Service XML`. The Gateway URL populates correctly when this value is selected. -3. Tap **Save Config**. +1. Tap **Save Config**. * **Issue**: The Async/Bulk Web APIs support only the default store view. A hot fix for this issue will be available in the near future. This issue has been resolved with the Scope parameter for Async/Bulk API patch, which is now available. See [Patch for Magento Framework Message Queue and Store Scopes](https://community.magento.com/t5/Magento-DevBlog/Patch-for-Magento-Framework-Message-Queue-and-Store-Scopes/ba-p/135209) for a full discussion of this scope-related issue and patch contents. diff --git a/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md b/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md index 51545b02cc4..40bcd02ef1e 100644 --- a/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md +++ b/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md @@ -27,13 +27,13 @@ Follow these steps to download and apply this patch: 1. Access the Downloads page [here](https://magento.com/tech-resources/download#download2288). -2. Select the Git-based option from **Select your format**. +1. Select the Git-based option from **Select your format**. -4. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). +1. Download the patch and upload to a specific directory in your Magento installation such as `m2-hotfixes` (confirm that the directory is not accessible publicly). -5. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. +1. From your project root, apply the patch.
 `git apply ./m2-hotfixes/`. -6. Refresh the cache from the Admin (**System** > **Cache Management**). +1. Refresh the cache from the Admin (**System** > **Cache Management**). ## PayPal Payflow Pro active carding activity update @@ -1736,9 +1736,9 @@ If UPS Type is set to `United Parcel Service` in the UPS Shipping Method Config 1. Navigate to **Stores**  > **Settings**  > **Configuration**  >  **Sales**  > **Shipping Methods**. Then, expand the **UPS** section. -2. At the **UPS Type** field, clear the Use system value checkbox. Then, change **UPS Type** to `United Parcel Service XML`. The Gateway URL populates correctly when this value is selected. +1. At the **UPS Type** field, clear the Use system value checkbox. Then, change **UPS Type** to `United Parcel Service XML`. The Gateway URL populates correctly when this value is selected. -3. Tap **Save Config**. +1. Tap **Save Config**. * **Issue**: The Async/Bulk Web APIs support only the default store view. A hot fix for this issue will be available in the near future. This issue has been resolved with the Scope parameter for Async/Bulk API patch, which is now available. See [Patch for Magento Framework Message Queue and Store Scopes](https://community.magento.com/t5/Magento-DevBlog/Patch-for-Magento-Framework-Message-Queue-and-Store-Scopes/ba-p/135209) for a full discussion of this scope-related issue and patch contents. diff --git a/guides/v2.3/release-notes/backward-incompatible-changes/reference.md b/guides/v2.3/release-notes/backward-incompatible-changes/reference.md index 31c4f8717e7..edac464f112 100644 --- a/guides/v2.3/release-notes/backward-incompatible-changes/reference.md +++ b/guides/v2.3/release-notes/backward-incompatible-changes/reference.md @@ -9,7 +9,13 @@ redirect_from: The changes are aggregated into two tables: 1. **Changes in classes** that contains backward incompatible changes made to the PHP classes -2. **Changes in interfaces** that contains backward incompatible changes made to the PHP interfaces +1. **Changes in interfaces** that contains backward incompatible changes made to the PHP interfaces + +## 2.3.2 - 2.3.3 + +{% include backward-incompatible-changes/open-source/2.3.2-2.3.3.md %} + +{% include backward-incompatible-changes/commerce/2.3.2-2.3.3.md %} ## 2.3.1 - 2.3.2 diff --git a/guides/v2.3/release-notes/release-notes-2-3-3-commerce.md b/guides/v2.3/release-notes/release-notes-2-3-3-commerce.md index 0ecb22218c6..a8710f1f838 100644 --- a/guides/v2.3/release-notes/release-notes-2-3-3-commerce.md +++ b/guides/v2.3/release-notes/release-notes-2-3-3-commerce.md @@ -28,6 +28,12 @@ Although code for these features is bundled with quarterly releases of the Magen This patch resolves issues that users of Magento 2.3.3 experience in deployments where Elasticsearch 6.x is used as the catalog search engine. Users who attempt to navigate past the first page of search results are unsuccessful, and Magento displays an error message. After this patch is installed, users will be able to page through all search results. See [Applying patches](https://devdocs.magento.com/guides/v2.3/comp-mgr/patching.html) for specific instructions on downloading and applying Magento patches. To find the patch, navigate to [Tech Resources](https://magento.com/tech-resources/download), and select the 'Catalog pagination issue on Elasticsearch 6.x' patch associated with the version of Magento you are running. +## Apply the EmailMessageInterface backward compatibility issue patch to resolve an email interface backward-incompatibility issue + +This patch addresses backward-incompatibility issues that extension developers may have experienced after the introduction of `Magento\Framework\Mail\EmailMessageInterface`,  which was released in Magento 2.3.3. In the scope of this patch, the new `EmailMessageInterface` inherits from the old `MessageInterface`, and core modules are changed back to rely on `MessageInterface`. **Merchants should apply this patch as soon as possible, especially if their deployments include extensions or customizations that use the mail interface**. + +See [Applying patches](https://devdocs.magento.com/guides/v2.3/comp-mgr/patching.html) for specific instructions on downloading and applying Magento patches. To find the patch, navigate to [Tech Resources](https://magento.com/tech-resources/download), and select the EmailMessageInterface backward compatibility issue patch associated with the version of Magento you are running. + ## Highlights Look for the following highlights in this release: @@ -36,26 +42,26 @@ Look for the following highlights in this release: This release includes the following security enhancements: -* PSD2 compliance to core payment methods -* Fixes for 75 critical security issues -* Significant platform-security enhancements that boost XSS (cross-site scripting) protection against future exploits. This effort is the culmination of several months of concentrated effort on Magento's part to reduce our backlog of security enhancements. +* PSD2 compliance to core payment methods +* Fixes for 75 critical security issues +* Significant platform-security enhancements that boost XSS (cross-site scripting) protection against future exploits. This effort is the culmination of several months of concentrated effort on Magento's part to reduce our backlog of security enhancements. #### Core payment methods integrations are now compliant with PSD2 regulations -The European Union recently revised the Payment Services Directive (PSD) regulation with an updated version–PSD2. This revised regulation goes into effect on September 14, 2019, and will significantly affect most payment processing involving credit cards or bank transfers.  See the Magento Forum DevBlog post [3D Secure 2.0 changes](https://community.magento.com/t5/Magento-DevBlog/3D-Secure-2-0-changes/ba-p/136460) for more information on Magento Payment Provider Recommendations and a wealth of links to PSD2 regulation discussions. +The European Union recently revised the Payment Services Directive (PSD) regulation with an updated version – PSD2. This revised regulation goes into effect on September 14, 2019, and will significantly affect most payment processing involving credit cards or bank transfers.  See the Magento Forum DevBlog post [3D Secure 2.0 changes](https://community.magento.com/t5/Magento-DevBlog/3D-Secure-2-0-changes/ba-p/136460) for more information on Magento Payment Provider Recommendations and a wealth of links to PSD2 regulation discussions. This release contains the following major PSD-related changes: -* The **Braintree payment method now complies with PSD2 regulations**. Its core integration API has been upgraded to the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. +* The **Braintree payment method now complies with PSD2 regulations**. Its core integration API has been upgraded to the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. -* Authorize.net now provides the ability, through the `cardholderAuthentication` request field, to make 3D Secure verification through third-party services such as CardinalCommerce. Starting with this release, **Authorize.net accept.js integration will support 3DS 2.0 through CardinalCommerce**. +* Authorize.net now provides the ability, through the `cardholderAuthentication` request field, to make 3D Secure verification through third-party services such as CardinalCommerce. Starting with this release, **Authorize.net accept.js integration will support 3DS 2.0 through CardinalCommerce**. -* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. +* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. #### Security enhancements and fixes to core code -* **75 security enhancements** that help close cross-site scripting (XSS) and remote code execution (RCE) vulnerabilities as well as other security issues. No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts: IP whitelisting, [two-factor authentication](https://devdocs.magento.com/guides/v2.3/security/two-factor-authentication.html), use of a VPN, the use of a unique location rather than `/admin`, and good password hygiene. See [Magento Security Center](https://magento.com/security/patches/magento-2.3.3-2.2.10-security-update) for a comprehensive discussion of these issues. All known exploitable security issues fixed in this release (2.3.3) have been ported to 2.2.10, 1.14.4.3, and 1.9.4.3, as appropriate. +* **75 security enhancements** that help close cross-site scripting (XSS) and remote code execution (RCE) vulnerabilities as well as other security issues. No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts: IP whitelisting, [two-factor authentication](https://devdocs.magento.com/guides/v2.3/security/two-factor-authentication.html), use of a VPN, the use of a unique location rather than `/admin`, and good password hygiene. See [Magento Security Center](https://magento.com/security/patches/magento-2.3.3-2.2.10-security-update) for a comprehensive discussion of these issues. All known exploitable security issues fixed in this release (2.3.3) have been ported to 2.2.10, 1.14.4.3, and 1.9.4.3, as appropriate. {:.bs-callout-info} Starting with the release of Magento Commerce 2.3.2, Magento will assign and publish indexed Common Vulnerabilities and Exposures (CVE) numbers with each security bug reported to us by external parties. This allows users of Magento Commerce to more easily identify unaddressed vulnerabilities in their deployment. @@ -65,60 +71,60 @@ Starting with the release of Magento Commerce 2.3.2, Magento will assign and pub The following upgrades to core platform components boost platform security and support PCI compliance: -* Magento 2.3.3 now supports **PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21)**. +* Magento 2.3.3 now supports **PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21)**. -* Magento now supports **Varnish 6.2.0**. +* Magento now supports **Varnish 6.2.0**. -* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. +* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. ### Performance boosts -* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. +* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. -* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). +* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). -* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. +* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. -* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. +* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. ### Infrastructure improvements This release contains enhancements to core quality, which improve the quality of the Framework and these modules: `Catalog`, `Sales`, `Checkout/One Page Checkout`, `UrlRewrite`, `Customer`, and `Ui`. Here are some additional core enhancements: -* The WYSIWYG editor has been upgraded to TinyMCE v. 4.9.5​. +* The WYSIWYG editor has been upgraded to TinyMCE v. 4.9.5​. ### Merchant tool enhancements -* As part of our efforts to better understand the Admin user experience and improve product design, Magento is introducing the tracking of user actions and events on the Admin. After you upgrade to Magento 2.3.3, the first administrative user who logs into the Admin will be prompted to **Allow admin usage data collection**. If the user agrees to data collection, the data captured from Admin activity is sent to Adobe Analytics for analysis and reporting. Typical events include page views, save actions, and changes to Magento mode. See Store Admin for more information. +* As part of our efforts to better understand the Admin user experience and improve product design, Magento is introducing the tracking of user actions and events on the Admin. After you upgrade to Magento 2.3.3, the first administrative user who logs into the Admin will be prompted to **Allow admin usage data collection**. If the user agrees to data collection, the data captured from Admin activity is sent to Adobe Analytics for analysis and reporting. Typical events include page views, save actions, and changes to Magento mode. See Store Admin for more information. ### Page Builder Page Builder enhancements for this release include: -* Upgrade to TinyMCE v4.9.5, which improves the experience of editing inline. -* Admin users can now explicitly define product order. -* Managing HTML content has been made easier for non-technical users. +* Upgrade to TinyMCE v4.9.5, which improves the experience of editing inline. +* Admin users can now explicitly define product order. +* Managing HTML content has been made easier for non-technical users. ### Inventory Management enhancements -* Fixes to multiple bugs. See [Inventory Management release notes](https://devdocs.magento.com/guides/v2.3/inventory/release-notes.html). +* Fixes to multiple bugs. See [Inventory Management release notes](https://devdocs.magento.com/guides/v2.3/inventory/release-notes.html). ### GraphQL Expanded GraphQL functionality and improved coverage for PayPal payment integrations, gift cards, and store credit features. Added mutations and queries that support these tasks: -* Process payments through PayPal Express checkout, Payflow Pro and Link Express Checkout, and other supported PayPal payment methods, Authorize.net, and Braintree -* Redeem gift cards and convert to store credit balance for logged-in users -* Update shopping carts for guest users to apply or remove gift cards and check card balance -* Update shopping carts to apply or remove store credit and check store credit balance -* Add configurable products to cart +* Process payments through PayPal Express checkout, Payflow Pro and Link Express Checkout, and other supported PayPal payment methods, Authorize.net, and Braintree +* Redeem gift cards and convert to store credit balance for logged-in users +* Update shopping carts for guest users to apply or remove gift cards and check card balance +* Update shopping carts to apply or remove store credit and check store credit balance +* Add configurable products to cart See [Release notes](https://devdocs.magento.com/guides/v2.3/graphql/release-notes.html) for a more detailed discussion of recent GraphQL bug fixes. @@ -128,15 +134,15 @@ PWA Studio 4.0.0 contains new hooks in Peregrine. Existing components have also ### Google Shopping ads Channel -The Google Shopping ads Channel Marketplace extension is now available as a bundled extension. [Google Shopping ads Channel Release Notes](https://devdocs.magento.com/extensions/google-shopping-ads/release-notes/) describes all changes to this feature for Magento 2.3.x. +The Google Shopping ads Channel Marketplace extension is now available as a bundled extension. [Google Shopping ads Channel Release Notes](https://devdocs.magento.com/extensions/google-shopping-ads/release-notes/) describes all changes to this feature for Magento 2.3.x. ### Magento Shipping This release of Magento Shipping includes: -* Improvements to batch-order processing, carrier integration, shipping method preview in the shipping portal, checkout. +* Improvements to batch-order processing, carrier integration, shipping method preview in the shipping portal, checkout. -* Support for bundled products and prepackage options. +* Support for bundled products and prepackage options. See [Magento Shipping](https://docs.magento.com/m2/ee/user_guide/shipping/magento-shipping.html). @@ -150,28 +156,28 @@ Amazon Pay is now compliant with the PSD2 directive for UK and Germany. See [Pay #### dotdigital -* Improved product catalog sync for bundled and custom products. +* Improved product catalog sync for bundled and custom products. -* Enhanced communications for abandoned cart. +* Enhanced communications for abandoned cart. #### Klarna -* Merchants can now disable the sending of customer information. +* Merchants can now disable the sending of customer information. -* New options now support B2B transactions in select markets. +* New options now support B2B transactions in select markets. -* PayBright, a Canadian payment coverage option, is now supported. +* PayBright, a Canadian payment coverage option, is now supported. See [Klarna](https://docs.magento.com/m2/ee/user_guide/payment/klarna.html). #### Vertex -* Added support for Vertex Flexible Fields. Vertex flexible fields allow merchants to send additional information to the tax engine, which can then be used in Tax Assist Rules to refine a product’s applicable tax. +* Added support for Vertex Flexible Fields. Vertex flexible fields allow merchants to send additional information to the tax engine, which can then be used in Tax Assist Rules to refine a product’s applicable tax. -* Several attributes are provided by default, including administrator-created Customer attributes, Address attributes, and Product attributes. Documentation is provided in the module’s README file on how integrators can add additional options to these attributes. +* Several attributes are provided by default, including administrator-created Customer attributes, Address attributes, and Product attributes. Documentation is provided in the module’s README file on how integrators can add additional options to these attributes. -* You can now add custom fields to the Vertex connector. +* You can now add custom fields to the Vertex connector. #### Yotpo @@ -188,1000 +194,1001 @@ We have fixed hundreds of issues in the Magento 2.3.3 core code. ### Installation, upgrade, deployment -* Magento font icons now load as expected when deployment optimization is implemented. +* Magento font icons now load as expected when deployment optimization is implemented. -* The short form versions of the `—lock-env` and `—lock-config` `bin/magento config:set` options now work as expected. *Fix submitted by Satya Prakash in pull request [22720](https://github.com/magento/magento2/pull/22720)*. [GitHub-22395](https://github.com/magento/magento2/issues/22395) +* The short form versions of the `—lock-env` and `—lock-config` `bin/magento config:set` options now work as expected. *Fix submitted by Satya Prakash in pull request [22720](https://github.com/magento/magento2/pull/22720)*. [GitHub-22395](https://github.com/magento/magento2/issues/22395) -* Magento now displays an exception message when an error occurs during static content deployment. Previously, if an error occurred, Magento showed the stack trace only. *Fix submitted by Ihor Sviziev in pull request [22884](https://github.com/magento/magento2/pull/22884)*. [GitHub-22882](https://github.com/magento/magento2/issues/22882) +* Magento now displays an exception message when an error occurs during static content deployment. Previously, if an error occurred, Magento showed the stack trace only. *Fix submitted by Ihor Sviziev in pull request [22884](https://github.com/magento/magento2/pull/22884)*. [GitHub-22882](https://github.com/magento/magento2/issues/22882) -* You can now use JSON to set a configuration value for a configuration option through the command line. *Fix submitted by Shikha Mishra in pull request [22513](https://github.com/magento/magento2/pull/22513)*. [GitHub-22396](https://github.com/magento/magento2/issues/22396) +* You can now use JSON to set a configuration value for a configuration option through the command line. *Fix submitted by Shikha Mishra in pull request [22513](https://github.com/magento/magento2/pull/22513)*. [GitHub-22396](https://github.com/magento/magento2/issues/22396) -* The `\Magento\Setup\SplitDbTest::testUpgradeWithSplitDb` command no longer fails by default. +* The `\Magento\Setup\SplitDbTest::testUpgradeWithSplitDb` command no longer fails by default. -* PHP unit tests no longer fail by default when Magento is installed from Composer. +* PHP unit tests no longer fail by default when Magento is installed from Composer. -* Removed the obsolete `system.xml` file from the `app/code/Magento/Theme/etc` directory. *Fix submitted by Alexander Taranovsky in pull request [23140](https://github.com/magento/magento2/pull/23140)*. [GitHub-23138](https://github.com/magento/magento2/issues/23138) +* Removed the obsolete `system.xml` file from the `app/code/Magento/Theme/etc` directory. *Fix submitted by Alexander Taranovsky in pull request [23140](https://github.com/magento/magento2/pull/23140)*. [GitHub-23138](https://github.com/magento/magento2/issues/23138) -* Magento now displays a more informative message when a data patch cannot be applied due to an exception. *Fix submitted by Ash Smith in pull request [23046](https://github.com/magento/magento2/pull/23046)*. [GitHub-23045](https://github.com/magento/magento2/issues/23045) +* Magento now displays a more informative message when a data patch cannot be applied due to an exception. *Fix submitted by Ash Smith in pull request [23046](https://github.com/magento/magento2/pull/23046)*. [GitHub-23045](https://github.com/magento/magento2/issues/23045) -* The static content deployment progress bar now works as expected. *Fix submitted by Amit Vishvakarma in pull request [23216](https://github.com/magento/magento2/pull/23216)*. [GitHub-23213](https://github.com/magento/magento2/issues/23213) +* The static content deployment progress bar now works as expected. *Fix submitted by Amit Vishvakarma in pull request [23216](https://github.com/magento/magento2/pull/23216)*. [GitHub-23213](https://github.com/magento/magento2/issues/23213) -* The `setup:upgrade` command now throws an exception if the `app:config:import` command fails. *Fix submitted by Simon Frost in pull request [23310](https://github.com/magento/magento2/pull/23310)*. +* The `setup:upgrade` command now throws an exception if the `app:config:import` command fails. *Fix submitted by Simon Frost in pull request [23310](https://github.com/magento/magento2/pull/23310)*. -* Fields that have been disabled through configuration settings (**Admin** > **Stores** > **Configuration** > **General** > **General** > **Store Information**) can no longer be overwritten from the Admin. *Fix submitted by Rafael Kassner in pull request [22891](https://github.com/magento/magento2/pull/22891)*. [GitHub-22890](https://github.com/magento/magento2/issues/22890) +* Fields that have been disabled through configuration settings (**Admin** > **Stores** > **Configuration** > **General** > **General** > **Store Information**) can no longer be overwritten from the Admin. *Fix submitted by Rafael Kassner in pull request [22891](https://github.com/magento/magento2/pull/22891)*. [GitHub-22890](https://github.com/magento/magento2/issues/22890) -* The Magento installation process no longer checks for `dev php` extension dependencies from non-root `composer.json` files. *Fix submitted by Oleksii Lisovyi in pull request [22116](https://github.com/magento/magento2/pull/22116)* [GitHub-21136](https://github.com/magento/magento2/issues/21136) +* The Magento installation process no longer checks for `dev php` extension dependencies from non-root `composer.json` files. *Fix submitted by Oleksii Lisovyi in pull request [22116](https://github.com/magento/magento2/pull/22116)* [GitHub-21136](https://github.com/magento/magento2/issues/21136) -* Parallel execution of static content deployment has been improved to prevent errors and make it more stable. *Fix submitted by David Alger in pull request [22607](https://github.com/magento/magento2/pull/22607)*. [GitHub-21852](https://github.com/magento/magento2/issues/21852) +* Parallel execution of static content deployment has been improved to prevent errors and make it more stable. *Fix submitted by David Alger in pull request [22607](https://github.com/magento/magento2/pull/22607)*. [GitHub-21852](https://github.com/magento/magento2/issues/21852) -* Magento now runs an additional check when determining the password hashing algorithm to use for the libsodium library to see if it supports `argon2id`. The `bin/magento` command did not run successfully if the version of libsodium that you were running did not include `argon2id` support. *Fix submitted by Matei Stefanescu in pull request [23866](https://github.com/magento/magento2/pull/23866)*. [GitHub-23405](https://github.com/magento/magento2/issues/23405) +* Magento now runs an additional check when determining the password hashing algorithm to use for the libsodium library to see if it supports `argon2id`. The `bin/magento` command did not run successfully if the version of libsodium that you were running did not include `argon2id` support. *Fix submitted by Matei Stefanescu in pull request [23866](https://github.com/magento/magento2/pull/23866)*. [GitHub-23405](https://github.com/magento/magento2/issues/23405) ### AdminGWS -* An administrator with permission to a website now has access to the theme configuration for the website. Previously, administrators with website permission could update only the theme for the store view that is associated with a website, not the theme for the website itself. +* An administrator with permission to a website now has access to the theme configuration for the website. Previously, administrators with website permission could update only the theme for the store view that is associated with a website, not the theme for the website itself. -* Administrators with role scope set to **custom** can now view roles and user information. +* Administrators with role scope set to **custom** can now view roles and user information. -* Administrators with restricted access to Catalog and Content can now mass-update products. Previously, when an administrator tried to mass-update products, Magento did not update the products, and displayed an empty menu for **Stores**. +* Administrators with restricted access to Catalog and Content can now mass-update products. Previously, when an administrator tried to mass-update products, Magento did not update the products, and displayed an empty menu for **Stores**. -* An administrator with access rights to one website only in a multisite deployment can now mass-update products for that website only. Previously, this administrator could mass-update products on any website in the deployment. +* An administrator with access rights to one website only in a multisite deployment can now mass-update products for that website only. Previously, this administrator could mass-update products on any website in the deployment. -* An administrator with restricted privileges can now successfully create a catalog price rule. Previously, a restricted administrator could create a catalog price rule, but when they saved it, Magento displayed an error and did not generate any scheduled update to set the new price rule to inactive. +* An administrator with restricted privileges can now successfully create a catalog price rule. Previously, a restricted administrator could create a catalog price rule, but when they saved it, Magento displayed an error and did not generate any scheduled update to set the new price rule to inactive. -* Magento now applies the correct role scope for administrators in multisite deployments. (Post data is now saved in the session and re-rendered for a user only if the validation fails.) Previously, when you had two administrative roles with different website scopes, and you viewed one role before saving it and opening the second role, the website scope attributed to the second role was incorrectly taken from the first role. +* Magento now applies the correct role scope for administrators in multisite deployments. (Post data is now saved in the session and re-rendered for a user only if the validation fails.) Previously, when you had two administrative roles with different website scopes, and you viewed one role before saving it and opening the second role, the website scope attributed to the second role was incorrectly taken from the first role. -* Administrators with restricted permissions can now edit companies. Previously, even when the administrator had restricted but appropriate permission to edit companies, Magento displayed this error: `The requested company is not found`. +* Administrators with restricted permissions can now edit companies. Previously, even when the administrator had restricted but appropriate permission to edit companies, Magento displayed this error: `The requested company is not found`. -* Administrators that have access to all websites can now see a complete list of websites, stores, and store views no matter which edit operations that a administrator with restricted access might perform. Additionally, any edit operation done by another admin user with limited access (for example, limited to one website) will not affect the fully privileged account. Previously, administrators with full access could not see the full list for all websites after an administrator with limited website-level access makes updates. +* Administrators that have access to all websites can now see a complete list of websites, stores, and store views no matter which edit operations that a administrator with restricted access might perform. Additionally, any edit operation done by another admin user with limited access (for example, limited to one website) will not affect the fully privileged account. Previously, administrators with full access could not see the full list for all websites after an administrator with limited website-level access makes updates. -* We have improved the Admin login performance for users with limited permissions. Previously, the Admin login process for users with restricted access was significantly slower than it was for users with full administrative access. +* We have improved the Admin login performance for users with limited permissions. Previously, the Admin login process for users with restricted access was significantly slower than it was for users with full administrative access. ### Backend -* The Magento Admin now loads without issue after you change the store domain or set cookies to a different domain. Previously, the page did not redirect as expected. +* The Magento Admin now loads without issue after you change the store domain or set cookies to a different domain. Previously, the page did not redirect as expected. -* The Admin no longer displays incorrect currency codes when the default base currency differs from the default website currency. +* The Admin no longer displays incorrect currency codes when the default base currency differs from the default website currency. -* The store view drop-down menu no longer displays unnecessary symbols. +* The store view drop-down menu no longer displays unnecessary symbols. ### Bundle products -* You can now successfully check out bundle products using the Braintree payment method with the payment method set to **Authorize and Capture**. +* You can now successfully check out bundle products using the Braintree payment method with the payment method set to **Authorize and Capture**. -* Discount coupons now work as expected for bundle products that include both virtual and simple products when the **Ship Bundle Items** setting is set to **Separately**. *Fix submitted by Nikolay Sumrak in pull request [22987](https://github.com/magento/magento2/pull/22987)*. +* Discount coupons now work as expected for bundle products that include both virtual and simple products when the **Ship Bundle Items** setting is set to **Separately**. *Fix submitted by Nikolay Sumrak in pull request [22987](https://github.com/magento/magento2/pull/22987)*. ### B2B -* The `Magento_SharedCatalog::manage` role is now defined in the `acl.xml` file. +* The `Magento_SharedCatalog::manage` role is now defined in the `acl.xml` file. -* Magento now maintains custom prices for products in both the catalog and shopping cart after a quote is recalculated. Previously, the product price reverted to the default price after you recalculated the quote. +* Magento now maintains custom prices for products in both the catalog and shopping cart after a quote is recalculated. Previously, the product price reverted to the default price after you recalculated the quote. -* You can now successfully filter customer by status in the **Customers** > **All Customers** table. Previously, Magento threw an SQL error and displayed this message: `Something went wrong with processing the default view and we have restored the filter to its original state`. +* You can now successfully filter customer by status in the **Customers** > **All Customers** table. Previously, Magento threw an SQL error and displayed this message: `Something went wrong with processing the default view and we have restored the filter to its original state`. -* Magento now displays the category tree as expected when you choose **Set Pricing and Structure** on a new shared catalog. +* Magento now displays the category tree as expected when you choose **Set Pricing and Structure** on a new shared catalog. -* You can now create a new company account from the storefront in the same amount of time it takes to create an account from the Admin. Previously, it took much longer to create a new company account on the storefront. +* You can now create a new company account from the storefront in the same amount of time it takes to create an account from the Admin. Previously, it took much longer to create a new company account on the storefront. -* You can now successfully configure bundle, grouped, and configurable products from the Admin when shared catalogs are enabled and you have added products to an order by SKU. +* You can now successfully configure bundle, grouped, and configurable products from the Admin when shared catalogs are enabled and you have added products to an order by SKU. -* Magento now correctly applies category permissions depending upon the scope values you set. Previously, when you enabled shared catalogs for only one website in a multi-site deployment, Magento applied catalog permissions globally instead of to the designated website only. +* Magento now correctly applies category permissions depending upon the scope values you set. Previously, when you enabled shared catalogs for only one website in a multi-site deployment, Magento applied catalog permissions globally instead of to the designated website only. -* Export files now include all columns (including those not visible in the Company list) and their data. Previously, the `State/Province` columns of the exported CSV file were empty. +* Export files now include all columns (including those not visible in the Company list) and their data. Previously, the `State/Province` columns of the exported CSV file were empty. -* Magento no longer displays the **Created/Last Updated from-to** fields for quotes that are not associated with the administrator that is currently logged in. +* Magento no longer displays the **Created/Last Updated from-to** fields for quotes that are not associated with the administrator that is currently logged in. -* Magento now displays an informative message when a customer adds an empty SKU to their shopping cart with Quick Order. Previously, users could not navigate to another page during the process, and Magento did not display a message to the user. +* Magento now displays an informative message when a customer adds an empty SKU to their shopping cart with Quick Order. Previously, users could not navigate to another page during the process, and Magento did not display a message to the user. -* Magento now correctly updates SKU quantities when you use Quick Order and manually enter a SKU in the **Enter Multiple SKUs** field when using Internet Explorer 11.x. +* Magento now correctly updates SKU quantities when you use Quick Order and manually enter a SKU in the **Enter Multiple SKUs** field when using Internet Explorer 11.x. -* Magento now correctly calculates the total product quantity when you enter multiple SKU values in Quick Order. +* Magento now correctly calculates the total product quantity when you enter multiple SKU values in Quick Order. -* The behavior of the Catalog page Requisition list menu has been corrected +* The behavior of the Catalog page Requisition list menu has been corrected -* Magento now issues a single request to the server when you change the shipping address for an order to a non-default address. Previously, Magento issued multiple requests to the server when you changed the shipping address, which negatively affected performance. +* Magento now issues a single request to the server when you change the shipping address for an order to a non-default address. Previously, Magento issued multiple requests to the server when you changed the shipping address, which negatively affected performance. -* Non-administrative users who have been granted access privileges to catalogs and shared catalogs now also have access to the menu that permits them to manage these catalogs. Previously, these non-Admin users had permission to access the shared catalog, but not the menu that would permit them to manage the shared catalog. +* Non-administrative users who have been granted access privileges to catalogs and shared catalogs now also have access to the menu that permits them to manage these catalogs. Previously, these non-Admin users had permission to access the shared catalog, but not the menu that would permit them to manage the shared catalog. -* Guests can now access available product options for a configurable product when one of its simple product options is out of stock but the configurable product is listed as in-stock in the shared catalog. Previously, under these circumstances, the options drop-down menu for the configurable product was empty, which prevented guests from ordering available options. +* Guests can now access available product options for a configurable product when one of its simple product options is out of stock but the configurable product is listed as in-stock in the shared catalog. Previously, under these circumstances, the options drop-down menu for the configurable product was empty, which prevented guests from ordering available options. -* The State/Province drop-down menu available from the Admin Edit Customer form no longer lists duplicate entries for states and provinces. +* The State/Province drop-down menu available from the Admin Edit Customer form no longer lists duplicate entries for states and provinces. -* The Shared Catalog column tooltip on the Admin product list now sorts values alphabetically +* The Shared Catalog column tooltip on the Admin product list now sorts values alphabetically -* Magento no longer highlights quote totals on draft quotes. +* Magento no longer highlights quote totals on draft quotes. -* Magento now recalculates cart subtotals as expected when one of the ordered products that belongs to a shared catalog is disabled from the Admin. Previously, when you reloaded the cart after one of its products had been disabled, Magento reloaded the cart page with this exception: `Exception #0 (Magento\Framework\Exception\NoSuchEntityException): The product that was requested doesn't exist. Verify the product and try again`. +* Magento now recalculates cart subtotals as expected when one of the ordered products that belongs to a shared catalog is disabled from the Admin. Previously, when you reloaded the cart after one of its products had been disabled, Magento reloaded the cart page with this exception: `Exception #0 (Magento\Framework\Exception\NoSuchEntityException): The product that was requested doesn't exist. Verify the product and try again`. -* Magento now successfully saves customer segments after you have deleted a customer from the Admin. Previously, Magento threw an error and displayed this message: `We can't save the segment right now`. +* Magento now successfully saves customer segments after you have deleted a customer from the Admin. Previously, Magento threw an error and displayed this message: `We can't save the segment right now`. ### Cache -* Varnish cache support has been upgraded for compatibility with version 6.2.0. +* Varnish cache support has been upgraded for compatibility with version 6.2.0. -* Full-page cache no longer clears out the checkout session data on uncached pages when the `Magento_Persistent` module is disabled. [GitHub-21614](https://github.com/magento/magento2/issues/21614) +* Full-page cache no longer clears out the checkout session data on uncached pages when the `Magento_Persistent` module is disabled. [GitHub-21614](https://github.com/magento/magento2/issues/21614) -* Magento now displays simple products on the storefront after the cancellation of an order that contains the bundled simple product. Previously, products did not appear on the storefront after an order containing the bundle product to which the simple product belongs was canceled. +* Magento now displays simple products on the storefront after the cancellation of an order that contains the bundled simple product. Previously, products did not appear on the storefront after an order containing the bundle product to which the simple product belongs was canceled. -* The Varnish health check no longer fails to the presence of `id_prefix` in `env.php`. Previously, Varnish returned a `503 Backend fetch failed` error. *Fix submitted by Nazar Klovanych in pull request [22307](https://github.com/magento/magento2/pull/22307)*. [GitHub-22143](https://github.com/magento/magento2/issues/22143) +* The Varnish health check no longer fails to the presence of `id_prefix` in `env.php`. Previously, Varnish returned a `503 Backend fetch failed` error. *Fix submitted by Nazar Klovanych in pull request [22307](https://github.com/magento/magento2/pull/22307)*. [GitHub-22143](https://github.com/magento/magento2/issues/22143) ### Cart and checkout -* The REST calls for adding an item to a cart (`POST V1/guest-carts/:cartId/items` and `POST V1/guest-carts/:cartId/items`) now include the product price when a call returns the product from an already populated cart. Previously, the item price was not returned if that cart had been emptied before the call was made. +* The REST calls for adding an item to a cart (`POST V1/guest-carts/:cartId/items` and `POST V1/guest-carts/:cartId/items`) now include the product price when a call returns the product from an already populated cart. Previously, the item price was not returned if that cart had been emptied before the call was made. -* Magento now submits an order only once when an order is submitted using **Enter**. Previously, Magento submitted several `payment-information` requests, and several orders with the same quote ID were placed. +* Magento now submits an order only once when an order is submitted using **Enter**. Previously, Magento submitted several `payment-information` requests, and several orders with the same quote ID were placed. -* Products added to a shopping cart through REST now display correct product prices. Previously, the shopping cart displayed product prices of zero. [GitHub-2991](https://github.com/magento/magento2/issues/2991) +* Products added to a shopping cart through REST now display correct product prices. Previously, the shopping cart displayed product prices of zero. [GitHub-2991](https://github.com/magento/magento2/issues/2991) -* Magento now displays an informative message when an error is thrown after the user Internet connection has been reset after placing an order. +* Magento now displays an informative message when an error is thrown after the user Internet connection has been reset after placing an order. -* You can now add product quantities that require four digits to the shopping cart. Previously, Magento could not add four-digit product quantities to the cart. +* You can now add product quantities that require four digits to the shopping cart. Previously, Magento could not add four-digit product quantities to the cart. -* Administrators with appropriate permissions can now view the contents of a cart for a registered customer from the Admin customer edit interface. *Fix submitted by Rav in pull request [20918](https://github.com/magento/magento2/pull/20918)*. +* Administrators with appropriate permissions can now view the contents of a cart for a registered customer from the Admin customer edit interface. *Fix submitted by Rav in pull request [20918](https://github.com/magento/magento2/pull/20918)*. -* Magento now applies the sort preferences that you set in website scope configuration for a particular website to the layout of the checkout page. Previously, sort order for elements of this page was derived from the default configuration, not website-specific values. *Fix submitted by Karan Shah in pull request [22387](https://github.com/magento/magento2/pull/22387)*. [GitHub-22380](https://github.com/magento/magento2/issues/22380) +* Magento now applies the sort preferences that you set in website scope configuration for a particular website to the layout of the checkout page. Previously, sort order for elements of this page was derived from the default configuration, not website-specific values. *Fix submitted by Karan Shah in pull request [22387](https://github.com/magento/magento2/pull/22387)*. [GitHub-22380](https://github.com/magento/magento2/issues/22380) -* The Review & Payment section of the One Page Checkout no longer displays custom customer attribute code when a guest checks out. +* The Review & Payment section of the One Page Checkout no longer displays custom customer attribute code when a guest checks out. -* The checkout order summary now displays the correct number of ordered items. +* The checkout order summary now displays the correct number of ordered items. -* The minicart loader is now visible when you add a product to the minicart. *Fix submitted by Geeta Modi in pull request [23394](https://github.com/magento/magento2/pull/23394)*. [GitHub-23377](https://github.com/magento/magento2/issues/23377) +* The minicart loader is now visible when you add a product to the minicart. *Fix submitted by Geeta Modi in pull request [23394](https://github.com/magento/magento2/pull/23394)*. [GitHub-23377](https://github.com/magento/magento2/issues/23377) -* Magento no longer throws an array-to-string conversion error when a customer changes the country setting from one-page checkout. Instead, shipping method, tax values, and payment providers now change according to country selection. Previously, Magento displayed an error about array-to-string conversion. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-12612](https://github.com/magento/magento2/issues/12612) +* Magento no longer throws an array-to-string conversion error when a customer changes the country setting from one-page checkout. Instead, shipping method, tax values, and payment providers now change according to country selection. Previously, Magento displayed an error about array-to-string conversion. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-12612](https://github.com/magento/magento2/issues/12612) -* Magento now validates the VAT number as expected during checkout when the customer address region field is empty. Previously, Magento threw an informative error: `Internal Error. Details are available in Magento log file` if the `regionId` was not set. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-22556](https://github.com/magento/magento2/issues/22556), +* Magento now validates the VAT number as expected during checkout when the customer address region field is empty. Previously, Magento threw an informative error: `Internal Error. Details are available in Magento log file` if the `regionId` was not set. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-22556](https://github.com/magento/magento2/issues/22556), -* Magento now creates an invoice for an order that has a zero subtotal when **Automatically Invoice All Items** is set to **yes**. *Fix submitted by Eden Duong in pull request [23688](https://github.com/magento/magento2/pull/23688)*. [GitHub-23211](https://github.com/magento/magento2/issues/23211) +* Magento now creates an invoice for an order that has a zero subtotal when **Automatically Invoice All Items** is set to **yes**. *Fix submitted by Eden Duong in pull request [23688](https://github.com/magento/magento2/pull/23688)*. [GitHub-23211](https://github.com/magento/magento2/issues/23211) ### Cart Price rules -* Coupon codes now work as expected. Previously, coupons sent for specific dates in a cart price rule were not applied. *Fix submitted by Adarsh Shukla in pull request [22718](https://github.com/magento/magento2/pull/22718)*. [GitHub-18183](https://github.com/magento/magento2/issues/18183) +* Coupon codes now work as expected. Previously, coupons sent for specific dates in a cart price rule were not applied. *Fix submitted by Adarsh Shukla in pull request [22718](https://github.com/magento/magento2/pull/22718)*. [GitHub-18183](https://github.com/magento/magento2/issues/18183) ### Catalog -* You can now use the Select all option when creating a mass-update action when the total number of products exceeds the number of displayed products per page. Previously, Magento only selected and applied mass-update actions to the number of products that were displayed per page. *Fix submitted by Shikha Mishra in pull request [22704](https://github.com/magento/magento2/pull/22704)*. [GitHub-22004](https://github.com/magento/magento2/issues/22004) +* You can now use the Select all option when creating a mass-update action when the total number of products exceeds the number of displayed products per page. Previously, Magento only selected and applied mass-update actions to the number of products that were displayed per page. *Fix submitted by Shikha Mishra in pull request [22704](https://github.com/magento/magento2/pull/22704)*. [GitHub-22004](https://github.com/magento/magento2/issues/22004) -* Magento no longer throws an error when you run the `php bin/magento catalog:images:resize` command on a deployment that contains images with a zero byte size. Instead, the operation skips the offending file and updates the log file to indicate where the problematic file resides. [GitHub-8204](https://github.com/magento/magento2/issues/8204) +* Magento no longer throws an error when you run the `php bin/magento catalog:images:resize` command on a deployment that contains images with a zero byte size. Instead, the operation skips the offending file and updates the log file to indicate where the problematic file resides. [GitHub-8204](https://github.com/magento/magento2/issues/8204) -* You can now successfully clone a product with a linked product. Previously, cloning failed and Magento displayed this error: `The linked products data is invalid. Verify the data and try again`. +* You can now successfully clone a product with a linked product. Previously, cloning failed and Magento displayed this error: `The linked products data is invalid. Verify the data and try again`. -* A product that belongs to a category where the permissions do not allow adding it to cart can now be added to the cart from a different category. Previously, you could not add a product to the cart if one of the categories to which it belongs does not permit adding it the cart. +* A product that belongs to a category where the permissions do not allow adding it to cart can now be added to the cart from a different category. Previously, you could not add a product to the cart if one of the categories to which it belongs does not permit adding it the cart. -* Magento now displays the correct currency in the the Admin **Catalog** > **Products** list in deployments where websites are assigned different currencies. Previously, the products on the Admin Category page displayed the base currency even when **Product Price Scope** was set to **Per Website** and the website was assigned a different currency. +* Magento now displays the correct currency in the the Admin **Catalog** > **Products** list in deployments where websites are assigned different currencies. Previously, the products on the Admin Category page displayed the base currency even when **Product Price Scope** was set to **Per Website** and the website was assigned a different currency. -* Magento disables the **New Category** button on the Product page if the user is an administrator with restricted permissions for managing categories. Previously, the button was active, and Magento threw a 403 error if the restricted user clicked the button to create a category. +* Magento disables the **New Category** button on the Product page if the user is an administrator with restricted permissions for managing categories. Previously, the button was active, and Magento threw a 403 error if the restricted user clicked the button to create a category. -* The Items Ordered table (**Admin** > **Sales** > **Orders**) no longer displays bundle option discount amounts with tags. +* The Items Ordered table (**Admin** > **Sales** > **Orders**) no longer displays bundle option discount amounts with tags. -* Magento now creates resized images for all products for which images exist and lists the errors when you run the `php bin/catalog:image:resize` command. Previously, execution halted at the first missing image. +* Magento now creates resized images for all products for which images exist and lists the errors when you run the `php bin/catalog:image:resize` command. Previously, execution halted at the first missing image. -* You can now add a bundle product from a wishlist to your shopping cart. Previously, Magento threw a fatal error. +* You can now add a bundle product from a wishlist to your shopping cart. Previously, Magento threw a fatal error. -* The `\Magento\Catalog\Model\CategoryList::getList` operation now returns a sorted list of categories as expected. +* The `\Magento\Catalog\Model\CategoryList::getList` operation now returns a sorted list of categories as expected. -* The Admin Product Edit page and Customers page now load without JavaScript errors. [GitHub-5967](https://github.com/magento/magento2/issues/5967) +* The Admin Product Edit page and Customers page now load without JavaScript errors. [GitHub-5967](https://github.com/magento/magento2/issues/5967) -* A duplicated product that has been set to **Is in Stock** and **Enabled** now appears as expected on the storefront. +* A duplicated product that has been set to **Is in Stock** and **Enabled** now appears as expected on the storefront. -* An invalid join condition in Product Flat Indexer has been refactored, and product relations are now correctly joined by the `entity_id` field. Previously, products were joined incorrectly during catalog re-indexing when staging was enabled. +* An invalid join condition in Product Flat Indexer has been refactored, and product relations are now correctly joined by the `entity_id` field. Previously, products were joined incorrectly during catalog re-indexing when staging was enabled. -* Custom options prices that are assigned to a website scope no longer rewrite prices on all scopes. +* Custom options prices that are assigned to a website scope no longer rewrite prices on all scopes. -* Videos in product descriptions now appear as they do in the Admin WYSIWYG editor. Previously, videos in the storefront product descriptions had the incorrect height. +* Videos in product descriptions now appear as they do in the Admin WYSIWYG editor. Previously, videos in the storefront product descriptions had the incorrect height. -* Sample data now scales correctly when resized in mobile view. +* Sample data now scales correctly when resized in mobile view. -* Customers no longer receive product alerts after they have unsubscribed from product alerts. Previously, the product alert was not removed from the `product_alert_stock` table as expected, but Magento still displayed this message on the storefront: **You will no longer receive stock alerts for this product**. *Fix submitted by yuriichayka in pull request [23459](https://github.com/magento/magento2/pull/23459)*. [GitHub-22814](https://github.com/magento/magento2/issues/22814) +* Customers no longer receive product alerts after they have unsubscribed from product alerts. Previously, the product alert was not removed from the `product_alert_stock` table as expected, but Magento still displayed this message on the storefront: **You will no longer receive stock alerts for this product**. *Fix submitted by yuriichayka in pull request [23459](https://github.com/magento/magento2/pull/23459)*. [GitHub-22814](https://github.com/magento/magento2/issues/22814) -* Magento no longer automatically assigns a storeID to a saved product that is not assigned to a store. *Fix submitted by manishgoswamij in pull request [23500](https://github.com/magento/magento2/pull/23500)*. [GitHub-23383](https://github.com/magento/magento2/issues/23383), [GitHub-23500](https://github.com/magento/magento2/issues/23500) +* Magento no longer automatically assigns a storeID to a saved product that is not assigned to a store. *Fix submitted by manishgoswamij in pull request [23500](https://github.com/magento/magento2/pull/23500)*. [GitHub-23383](https://github.com/magento/magento2/issues/23383), [GitHub-23500](https://github.com/magento/magento2/issues/23500) -* Corrected misspellings in the `lib/web/css/docs/source/_actions-toolbar.less` and `lib/web/css/docs/source/_layout.less` files. *Fix submitted by Prashant Sharma in pull request [22624](https://github.com/magento/magento2/pull/22624)*. +* Corrected misspellings in the `lib/web/css/docs/source/_actions-toolbar.less` and `lib/web/css/docs/source/_layout.less` files. *Fix submitted by Prashant Sharma in pull request [22624](https://github.com/magento/magento2/pull/22624)*. -* Magento now displays the currency code as expected in the Cost column of the Admin catalog product list. *Fix submitted by Vlad Veselov in pull request [22739](https://github.com/magento/magento2/pull/22739)*. [GitHub-20906](https://github.com/magento/magento2/issues/20906) +* Magento now displays the currency code as expected in the Cost column of the Admin catalog product list. *Fix submitted by Vlad Veselov in pull request [22739](https://github.com/magento/magento2/pull/22739)*. [GitHub-20906](https://github.com/magento/magento2/issues/20906) -* The **Add to Cart** button is no longer visible to users who do not have Add to Cart category permissions. Previously, guest users could add items to the cart without being granted Add to Cart permission. +* The **Add to Cart** button is no longer visible to users who do not have Add to Cart category permissions. Previously, guest users could add items to the cart without being granted Add to Cart permission. -* Catalog rules are now applied as expected in deployments that are running Magento Commerce. Previously, there was a discrepancy between the time zone in which catalog rule staging was set (UTC timezone) and the Magento timezone, which is the time zone that the storefront uses. +* Catalog rules are now applied as expected in deployments that are running Magento Commerce. Previously, there was a discrepancy between the time zone in which catalog rule staging was set (UTC timezone) and the Magento timezone, which is the time zone that the storefront uses. -* We’ve refined how Magento validates partial permissions. Design edit permissions for categories, products, and CMS pages are now validated for each endpoint (web API and other) outside of the related model-layer classes. The web API now returns an error when design-related fields are being overridden. Previously, this behavior was ignored. +* We’ve refined how Magento validates partial permissions. Design edit permissions for categories, products, and CMS pages are now validated for each endpoint (web API and other) outside of the related model-layer classes. The web API now returns an error when design-related fields are being overridden. Previously, this behavior was ignored. -* Product availability is no longer tied to events associated with the categories to which they belong. Instead, Magento now uses the current category event for the page on which the product is displayed. Previously, products that were tied to categories with no events could be purchased, and products that were tied to expired events could not be purchased. +* Product availability is no longer tied to events associated with the categories to which they belong. Instead, Magento now uses the current category event for the page on which the product is displayed. Previously, products that were tied to categories with no events could be purchased, and products that were tied to expired events could not be purchased. -* Magento now renames images with the same name in the `pub/media/catalog/category` directory. Previously, images with the same name that belonged to different categories were not uploaded properly. [GitHub-23376](https://github.com/magento/magento2/issues/23376) +* Magento now renames images with the same name in the `pub/media/catalog/category` directory. Previously, images with the same name that belonged to different categories were not uploaded properly. [GitHub-23376](https://github.com/magento/magento2/issues/23376) -* Magento now displays a validation alert message when you click **Add Attribute**, and then click **Add selected** without first selecting an attribute. Previously, when you clicked **Add selected**, Magento selected all possible attributes. *Fix submitted by Mahesh Singh in pull request [22724](https://github.com/magento/magento2/pull/22724)*. [GitHub-22639](https://github.com/magento/magento2/issues/22639) +* Magento now displays a validation alert message when you click **Add Attribute**, and then click **Add selected** without first selecting an attribute. Previously, when you clicked **Add selected**, Magento selected all possible attributes. *Fix submitted by Mahesh Singh in pull request [22724](https://github.com/magento/magento2/pull/22724)*. [GitHub-22639](https://github.com/magento/magento2/issues/22639) -* The catalog products filter now filters on enabled or disabled status as expected. Previously, the SQL generated by the `Magento\Catalog\Ui\DataProvider\Product\ProductCollection` class omitted the `attribute_id` condition, which resulted in any attribute of the same type (`int` or `varchar`, for example) matching the query if the values were the same. *Fix submitted by Matti Vapa in pull request [23444](https://github.com/magento/magento2/pull/23444)*. [GitHub-23435](https://github.com/magento/magento2/issues/23435) +* The catalog products filter now filters on enabled or disabled status as expected. Previously, the SQL generated by the `Magento\Catalog\Ui\DataProvider\Product\ProductCollection` class omitted the `attribute_id` condition, which resulted in any attribute of the same type (`int` or `varchar`, for example) matching the query if the values were the same. *Fix submitted by Matti Vapa in pull request [23444](https://github.com/magento/magento2/pull/23444)*. [GitHub-23435](https://github.com/magento/magento2/issues/23435) -* `ProductRepository` now updates and saves existing products with changed SKUs as expected. Previously, Magento threw an error, and you were not able to save the product. *Fix submitted by Pavel Bystritsky in pull request [22933](https://github.com/magento/magento2/pull/22933)*. [GitHub-22870](https://github.com/magento/magento2/issues/22870) +* `ProductRepository` now updates and saves existing products with changed SKUs as expected. Previously, Magento threw an error, and you were not able to save the product. *Fix submitted by Pavel Bystritsky in pull request [22933](https://github.com/magento/magento2/pull/22933)*. [GitHub-22870](https://github.com/magento/magento2/issues/22870) -* You can now change the position of the last two related products in a list of related products that spans multiple pages. Previously, drag and drop functionality allowed you to change only the position of products on the current page. *Fix submitted by Maxim Tkachuk in pull request [22984](https://github.com/magento/magento2/pull/22984)*. [GitHub-14071](https://github.com/magento/magento2/issues/14071) +* You can now change the position of the last two related products in a list of related products that spans multiple pages. Previously, drag and drop functionality allowed you to change only the position of products on the current page. *Fix submitted by Maxim Tkachuk in pull request [22984](https://github.com/magento/magento2/pull/22984)*. [GitHub-14071](https://github.com/magento/magento2/issues/14071) -* The **Select from gallery** button on the category edit page now works as expected. Previously, the image was not saved, and Magento did not display an image in the image preview. *Fix submitted by Bartłomiej Szubert in pull request [21131](https://github.com/magento/magento2/pull/21131)*. [GitHub-19872](https://github.com/magento/magento2/issues/19872), [GitHub-22092](https://github.com/magento/magento2/issues/22092) +* The **Select from gallery** button on the category edit page now works as expected. Previously, the image was not saved, and Magento did not display an image in the image preview. *Fix submitted by Bartłomiej Szubert in pull request [21131](https://github.com/magento/magento2/pull/21131)*. [GitHub-19872](https://github.com/magento/magento2/issues/19872), [GitHub-22092](https://github.com/magento/magento2/issues/22092) ### CatalogInventory -* The status (in stock or out of stock) of a configurable product in the Admin now matches the status displayed on the storefront. +* The status (in stock or out of stock) of a configurable product in the Admin now matches the status displayed on the storefront. -* Magento now correctly updates the `qty_backordered` value in the `sales_order_item` table after you create an order that contains a backordered item. +* Magento now correctly updates the `qty_backordered` value in the `sales_order_item` table after you create an order that contains a backordered item. -* Stock status records for all products are now added as expected to the `cataloginventory_stock_status` table after a partial re-indexing. +* Stock status records for all products are now added as expected to the `cataloginventory_stock_status` table after a partial re-indexing. ### Catalog rule -* You can now use Visual Merchandiser to drag and drop products without losing product information. Previously, all discounts for products in the affected category were lost after dragging and dropping products +* You can now use Visual Merchandiser to drag and drop products without losing product information. Previously, all discounts for products in the affected category were lost after dragging and dropping products -* Coupon expiration dates now match the end date of the staging update the coupons are assigned to. +* Coupon expiration dates now match the end date of the staging update the coupons are assigned to. -* Coupon expiration dates and times now match the `end_date` value set in the staging update. Previously, coupon expiration dates could differ from the expiration date set by the sales rule. +* Coupon expiration dates and times now match the `end_date` value set in the staging update. Previously, coupon expiration dates could differ from the expiration date set by the sales rule. -* The CatalogRule module now handles discrepancies between the Magento time zone offset and the system time zone offset (which is in UTC). Previously, when the Magento time zone offset was greater than the system time zone offset, the active ranges set for special prices were inaccurate. This is a consequence of how catalog price rules special prices are stored and updated. (Catalog price rules special prices are stored in the `catalogrule_product_price` table. This table’s daily update is triggered by the `catalogrule_apply_all` cron job, which is scheduled at 01:00 every day. Cron schedule times are scheduled in Magento timezone.) +* The CatalogRule module now handles discrepancies between the Magento time zone offset and the system time zone offset (which is in UTC). Previously, when the Magento time zone offset was greater than the system time zone offset, the active ranges set for special prices were inaccurate. This is a consequence of how catalog price rules special prices are stored and updated. (Catalog price rules special prices are stored in the `catalogrule_product_price` table. This table’s daily update is triggered by the `catalogrule_apply_all` cron job, which is scheduled at 01:00 every day. Cron schedule times are scheduled in Magento timezone.) ### Cleanup and simple code refactoring -* Corrected poor positioning of the Shop By menu on product pages in mobile view on an iPhone 5. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) +* Corrected poor positioning of the Shop By menu on product pages in mobile view on an iPhone 5. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) -* Corrected misalignment of Wishlist and Compare icons on the product page. *Fix submitted by sanjaychouhan-webkul in pull request [22532](https://github.com/magento/magento2/pull/22532)*. [GitHub-22527](https://github.com/magento/magento2/issues/22527) +* Corrected misalignment of Wishlist and Compare icons on the product page. *Fix submitted by sanjaychouhan-webkul in pull request [22532](https://github.com/magento/magento2/pull/22532)*. [GitHub-22527](https://github.com/magento/magento2/issues/22527) -* Store view-specific labels are no longer truncated in the left navigation menu of the Cart Price Rule Store View Specific Labels window (**Marketing** > **Cart Price rule** > **Labels** ). *Fix submitted by Sudhanshu Bajaj in pull request [22423](https://github.com/magento/magento2/pull/22423)*. [GitHub-22406](https://github.com/magento/magento2/issues/22406) +* Store view-specific labels are no longer truncated in the left navigation menu of the Cart Price Rule Store View Specific Labels window (**Marketing** > **Cart Price rule** > **Labels** ). *Fix submitted by Sudhanshu Bajaj in pull request [22423](https://github.com/magento/magento2/pull/22423)*. [GitHub-22406](https://github.com/magento/magento2/issues/22406) -* Added missing header to the Customer Sales Order table and corrected multiple typos. *Fix submitted by Vishal Sutariya in pull request [22643](https://github.com/magento/magento2/pull/22643)*. [GitHub-22641](https://github.com/magento/magento2/issues/22641) +* Added missing header to the Customer Sales Order table and corrected multiple typos. *Fix submitted by Vishal Sutariya in pull request [22643](https://github.com/magento/magento2/pull/22643)*. [GitHub-22641](https://github.com/magento/magento2/issues/22641) -* Improved awkward formatting of the customer account create page in mobile view. *Fix submitted by Arvinda Kumar in pull request [22656](https://github.com/magento/magento2/pull/22656)*. [GitHub-22647](https://github.com/magento/magento2/issues/22647) +* Improved awkward formatting of the customer account create page in mobile view. *Fix submitted by Arvinda Kumar in pull request [22656](https://github.com/magento/magento2/pull/22656)*. [GitHub-22647](https://github.com/magento/magento2/issues/22647) -* The checkbox on the Add New Tax Rule form has been redesigned to match the Admin checkbox. *Fix submitted by Surabhi Srivastava in pull request [22655](https://github.com/magento/magento2/pull/22655)*. [GitHub-22640](https://github.com/magento/magento2/issues/22640) +* The checkbox on the Add New Tax Rule form has been redesigned to match the Admin checkbox. *Fix submitted by Surabhi Srivastava in pull request [22655](https://github.com/magento/magento2/pull/22655)*. [GitHub-22640](https://github.com/magento/magento2/issues/22640) -* Corrected typo in CONTRIBUTING.md. *Fix submitted by Raul E Watson in pull request [23244](https://github.com/magento/magento2/pull/23244)*. +* Corrected typo in CONTRIBUTING.md. *Fix submitted by Raul E Watson in pull request [23244](https://github.com/magento/magento2/pull/23244)*. -* Corrected poor spacing in the Gift message section of the My Account page. *Fix submitted by Amjad M in pull request [23226](https://github.com/magento/magento2/pull/23226)*. [GitHub-22950](https://github.com/magento/magento2/issues/22950) +* Corrected poor spacing in the Gift message section of the My Account page. *Fix submitted by Amjad M in pull request [23226](https://github.com/magento/magento2/pull/23226)*. [GitHub-22950](https://github.com/magento/magento2/issues/22950) -* The asterisk sign indicating a required field is now consistently positioned throughout the Admin. *Fix submitted by sanjaychouhan-webkul in pull request [22800](https://github.com/magento/magento2/pull/22800)*. [GitHub-22638](https://github.com/magento/magento2/issues/22638) +* The asterisk sign indicating a required field is now consistently positioned throughout the Admin. *Fix submitted by sanjaychouhan-webkul in pull request [22800](https://github.com/magento/magento2/pull/22800)*. [GitHub-22638](https://github.com/magento/magento2/issues/22638) -* Corrected misspelling in the `app/code/Magento/Ui/Block/Wrapper.php` file. *Fix submitted by Ravi Chandra in pull request [23335](https://github.com/magento/magento2/pull/23335)*. +* Corrected misspelling in the `app/code/Magento/Ui/Block/Wrapper.php` file. *Fix submitted by Ravi Chandra in pull request [23335](https://github.com/magento/magento2/pull/23335)*. -* Corrected typo in the tooltip toggle selector. *Fix submitted by Karla Saaremäe in pull request [23248](https://github.com/magento/magento2/pull/23248)*. +* Corrected typo in the tooltip toggle selector. *Fix submitted by Karla Saaremäe in pull request [23248](https://github.com/magento/magento2/pull/23248)*. -* Corrected misalignment of the Compare Products and My Wish List counters in the sidebar. *Fix submitted by sanjaychouhan-webkul in pull request [22742](https://github.com/magento/magento2/pull/22742)*. [GitHub-22676](https://github.com/magento/magento2/issues/22676) +* Corrected misalignment of the Compare Products and My Wish List counters in the sidebar. *Fix submitted by sanjaychouhan-webkul in pull request [22742](https://github.com/magento/magento2/pull/22742)*. [GitHub-22676](https://github.com/magento/magento2/issues/22676) -* Corrected scrolling behavior on Product page. Previously, after you clicked on a product reviews count on a product page, you had to scroll in order to see customer reviews. *Fix submitted by sanjaychouhan-webkul in pull request [22794](https://github.com/magento/magento2/pull/22794)*. [GitHub-21558](https://github.com/magento/magento2/issues/21558) +* Corrected scrolling behavior on Product page. Previously, after you clicked on a product reviews count on a product page, you had to scroll in order to see customer reviews. *Fix submitted by sanjaychouhan-webkul in pull request [22794](https://github.com/magento/magento2/pull/22794)*. [GitHub-21558](https://github.com/magento/magento2/issues/21558) -* Magento now displays the cursor to the right of the search keyword box as expected after multiple clicks on the search field in mobile view. *Fix submitted by sanjaychouhan-webkul in pull request [22795](https://github.com/magento/magento2/pull/22795)*. [GitHub-22736](https://github.com/magento/magento2/issues/22736) +* Magento now displays the cursor to the right of the search keyword box as expected after multiple clicks on the search field in mobile view. *Fix submitted by sanjaychouhan-webkul in pull request [22795](https://github.com/magento/magento2/pull/22795)*. [GitHub-22736](https://github.com/magento/magento2/issues/22736) -* Refactored the page title of the billing agreements page. *Fix submitted by Amit Vishvakarma in pull request [22876](https://github.com/magento/magento2/pull/22876)*. [GitHub-22875](https://github.com/magento/magento2/issues/22875) +* Refactored the page title of the billing agreements page. *Fix submitted by Amit Vishvakarma in pull request [22876](https://github.com/magento/magento2/pull/22876)*. [GitHub-22875](https://github.com/magento/magento2/issues/22875) -* The Shop By Menu no longer overlays the **Sort By** label on the product listing page. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) +* The Shop By Menu no longer overlays the **Sort By** label on the product listing page. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) -* Adjusted the position of the store-view label on **Admin** > **Content** > **Design** > **Configuration** > **Theme**. *Fix submitted by Kajal Solanki in pull request [22926](https://github.com/magento/magento2/pull/22926)*. [GitHub-22924](https://github.com/magento/magento2/issues/22924) +* Adjusted the position of the store-view label on **Admin** > **Content** > **Design** > **Configuration** > **Theme**. *Fix submitted by Kajal Solanki in pull request [22926](https://github.com/magento/magento2/pull/22926)*. [GitHub-22924](https://github.com/magento/magento2/issues/22924) -* Fixed spacing issue on **Admin** > **System** > **Import**. *Fix submitted by Kajal Solanki in pull request [21128](https://github.com/magento/magento2/pull/21128)*. +* Fixed spacing issue on **Admin** > **System** > **Import**. *Fix submitted by Kajal Solanki in pull request [21128](https://github.com/magento/magento2/pull/21128)*. -* Fixed misspelling in the `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` file. *Fix submitted by Ravi Chandra in pull request [23366](https://github.com/magento/magento2/pull/23366)*. +* Fixed misspelling in the `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` file. *Fix submitted by Ravi Chandra in pull request [23366](https://github.com/magento/magento2/pull/23366)*. -* Removed unnecessary `` element from the **Test connection** button. *Fix submitted by Shankar Konar in pull request [23367](https://github.com/magento/magento2/pull/23367)*. +* Removed unnecessary `` element from the **Test connection** button. *Fix submitted by Shankar Konar in pull request [23367](https://github.com/magento/magento2/pull/23367)*. -* The `lib/internal/Magento/Framework/Mview/View.php` file has been refactored to improve readability. *Fix submitted by Lukasz Bajsarowicz in pull request [23240](https://github.com/magento/magento2/pull/23240)*. +* The `lib/internal/Magento/Framework/Mview/View.php` file has been refactored to improve readability. *Fix submitted by Lukasz Bajsarowicz in pull request [23240](https://github.com/magento/magento2/pull/23240)*. ### CMS content -* Corrected alignment of the search suggestion panel with the **Advance reporting** button. *Fix submitted by webkul-ajaysaini in pull request [22520](https://github.com/magento/magento2/pull/22520)*. [GitHub-22506](https://github.com/magento/magento2/issues/22506) +* Corrected alignment of the search suggestion panel with the **Advance reporting** button. *Fix submitted by webkul-ajaysaini in pull request [22520](https://github.com/magento/magento2/pull/22520)*. [GitHub-22506](https://github.com/magento/magento2/issues/22506) -* You can now remove text that is placed adjacent to a TinyMCE4 widget. +* You can now remove text that is placed adjacent to a TinyMCE4 widget. ### Configurable products -* Magento now validates the uniqueness of attribute option values during product creation. Previously, Magento did not save the product and displayed this error: `The value of Admin must be unique`. +* Magento now validates the uniqueness of attribute option values during product creation. Previously, Magento did not save the product and displayed this error: `The value of Admin must be unique`. -* The design of the tax rule form check box now matches the Admin checkbox design. +* The design of the tax rule form check box now matches the Admin checkbox design. -* The configurable product gallery now displays images in the correct order when the image list has more than 10 images. The correct order complies with the order assigned in the Admin. *Fix submitted by Mateusz Wira in pull request [22287](https://github.com/magento/magento2/pull/22287)*. [GitHub-22249](https://github.com/magento/magento2/issues/22249) +* The configurable product gallery now displays images in the correct order when the image list has more than 10 images. The correct order complies with the order assigned in the Admin. *Fix submitted by Mateusz Wira in pull request [22287](https://github.com/magento/magento2/pull/22287)*. [GitHub-22249](https://github.com/magento/magento2/issues/22249) -* You can now use the `POST V1/configurable-products/:sku/child` call to assign positions to configurable product attributes as expected. Previously, when you use REST to assign positions to configurable product attributes, the position value was overwritten after you linked simple products to the configurable product. +* You can now use the `POST V1/configurable-products/:sku/child` call to assign positions to configurable product attributes as expected. Previously, when you use REST to assign positions to configurable product attributes, the position value was overwritten after you linked simple products to the configurable product. -* Setting the **Update Product Preview Image** to **no** now works as expected. Previously, when you clicked on a size or image that represented another variation for a configurable product, Magento displayed the image for one of the simple products associated with the configurable product. *Fix submitted by Ravi Chandra in pull request [19184](https://github.com/magento/magento2/pull/19184)*. [GitHub-16446](https://github.com/magento/magento2/issues/16446) +* Setting the **Update Product Preview Image** to **no** now works as expected. Previously, when you clicked on a size or image that represented another variation for a configurable product, Magento displayed the image for one of the simple products associated with the configurable product. *Fix submitted by Ravi Chandra in pull request [19184](https://github.com/magento/magento2/pull/19184)*. [GitHub-16446](https://github.com/magento/magento2/issues/16446) -* The `POST V1/configurable-products/:sku/options` call now adds attribute options to a configurable product as expected. This resolves issues previously caused by the MySQL table imposing a unique constraint on `product_id` and `attribute_id` values. *Fix submitted by Lieven Pouwelse in pull request [23529](https://github.com/magento/magento2/pull/23529)*. [GitHub-9798](https://github.com/magento/magento2/issues/9798) +* The `POST V1/configurable-products/:sku/options` call now adds attribute options to a configurable product as expected. This resolves issues previously caused by the MySQL table imposing a unique constraint on `product_id` and `attribute_id` values. *Fix submitted by Lieven Pouwelse in pull request [23529](https://github.com/magento/magento2/pull/23529)*. [GitHub-9798](https://github.com/magento/magento2/issues/9798) ### Coupon -* The **Apply** button now functions as expected when you create a new order and apply a coupon from the Admin. Previously, clicking **Apply** removed the coupon instead of applying it. *Fix submitted by Gaurav Agarwal in pull request [23250](https://github.com/magento/magento2/pull/23250)*. [GitHub-23238](https://github.com/magento/magento2/issues/23238) +* The **Apply** button now functions as expected when you create a new order and apply a coupon from the Admin. Previously, clicking **Apply** removed the coupon instead of applying it. *Fix submitted by Gaurav Agarwal in pull request [23250](https://github.com/magento/magento2/pull/23250)*. [GitHub-23238](https://github.com/magento/magento2/issues/23238) ### Cron -* Runtime exception handling for cron jobs has been improved. Now, when an exception occurs, the current run is marked as **failed** in the `cron_schedule` table. Then, when the next run completes correctly, Magento updates job status at the end of the `cron_schedule` table. Previously, when a job failed, the `cron_schedule` table was filled with pending jobs; the `indexer_update_all_views` job was not run; no output was sent to the `var/log/cron.log` file, and no status updates were appended to the `cron_schedule` table. +* Runtime exception handling for cron jobs has been improved. Now, when an exception occurs, the current run is marked as **failed** in the `cron_schedule` table. Then, when the next run completes correctly, Magento updates job status at the end of the `cron_schedule` table. Previously, when a job failed, the `cron_schedule` table was filled with pending jobs; the `indexer_update_all_views` job was not run; no output was sent to the `var/log/cron.log` file, and no status updates were appended to the `cron_schedule` table. -* Cron jobs are no longer duplicated. Previously, after a cron job was run, Magento cleared the cache and processed the job again. *Fix submitted by Douglas Radburn in pull request [23312](https://github.com/magento/magento2/pull/23312)*. +* Cron jobs are no longer duplicated. Previously, after a cron job was run, Magento cleared the cache and processed the job again. *Fix submitted by Douglas Radburn in pull request [23312](https://github.com/magento/magento2/pull/23312)*. -* Consumers run from `cron` no longer create deadlocks in the database. +* Consumers run from `cron` no longer create deadlocks in the database. -* The `magento_newrelicreporting_cron` cron job now successfully completes as expected. Previously, `magento_newrelicreporting_cron` threw this error: `Warning: Invalid argument supplied for foreach() in /var/www/shop_test/src/www/vendor/magento/module-configurable-product/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php on line 83`. +* The `magento_newrelicreporting_cron` cron job now successfully completes as expected. Previously, `magento_newrelicreporting_cron` threw this error: `Warning: Invalid argument supplied for foreach() in /var/www/shop_test/src/www/vendor/magento/module-configurable-product/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php on line 83`. ### Customer -* Custom customer address attributes are populated with the * values that have been assigned for the selected address when the **Same As Billing Address** setting is disabled. Previously, when a merchant tried to change an address while creating an order from the Admin, the drop-down menu of available addresses was not populated. +* Custom customer address attributes are populated with the * values that have been assigned for the selected address when the **Same As Billing Address** setting is disabled. Previously, when a merchant tried to change an address while creating an order from the Admin, the drop-down menu of available addresses was not populated. -* The account status list now updates as expected to correctly indicate the account lock status after `cron` is run. Previously, this list displayed status as unlocked only. +* The account status list now updates as expected to correctly indicate the account lock status after `cron` is run. Previously, this list displayed status as unlocked only. -* You can now create and successfully save a customer attribute when the **Use in Filter Options** and **Use in Search Options** settings are set to **no**. Previously, Magento did not display these attributes, and they could not be edited. +* You can now create and successfully save a customer attribute when the **Use in Filter Options** and **Use in Search Options** settings are set to **no**. Previously, Magento did not display these attributes, and they could not be edited. -* You can now create a customer segment that exceeds 1,500,000 customers. Previously, Magento threw a 500 error when you tried to create a customer segment that large. +* You can now create a customer segment that exceeds 1,500,000 customers. Previously, Magento threw a 500 error when you tried to create a customer segment that large. -* Import checks now finish successfully when the csv file contains a customer `gender` field. Previously, Magento threw this error: `Value for gender attribute contains incorrect value, see acceptable values on settings specified for Admin in row(s): 1`. +* Import checks now finish successfully when the csv file contains a customer `gender` field. Previously, Magento threw this error: `Value for gender attribute contains incorrect value, see acceptable values on settings specified for Admin in row(s): 1`. -* Custom customer attributes are now always displayed in the Admin customer create and edit forms. Previously, the Admin did not display these attributes unless they were configured to show on either the Customer Registration or Customer Account Edit forms. [GitHub-14456](https://github.com/magento/magento2/issues/14456) +* Custom customer attributes are now always displayed in the Admin customer create and edit forms. Previously, the Admin did not display these attributes unless they were configured to show on either the Customer Registration or Customer Account Edit forms. [GitHub-14456](https://github.com/magento/magento2/issues/14456) -* You can now create an order from the Admin when you have a customer segment for customers with 0 or more orders. Previously, if you had a customer segment for customers with 0 or more orders, an SQL error occurred when you tried to create an order in the Admin. +* You can now create an order from the Admin when you have a customer segment for customers with 0 or more orders. Previously, if you had a customer segment for customers with 0 or more orders, an SQL error occurred when you tried to create an order in the Admin. -* You can now create an order from the Admin with a customer segment based on zero or more orders and the table prefix is specified. Previously, Magento threw an error when you tried to create an order from the Admin under these conditions. +* You can now create an order from the Admin with a customer segment based on zero or more orders and the table prefix is specified. Previously, Magento threw an error when you tried to create an order from the Admin under these conditions. -* The **Phone Number** field is now marked as required on the My account page. +* The **Phone Number** field is now marked as required on the My account page. -* Magento no longer displays editable text fields for customer phone numbers and zip codes if customers have not saved an address. *Fix submitted by Kazim Noorani in pull request [23494](https://github.com/magento/magento2/pull/23494)*. +* Magento no longer displays editable text fields for customer phone numbers and zip codes if customers have not saved an address. *Fix submitted by Kazim Noorani in pull request [23494](https://github.com/magento/magento2/pull/23494)*. -* Magento no longer duplicates the state/province fields of customer addresses in Admin forms. *Fix submitted by Shikha Mishra in pull request [22637](https://github.com/magento/magento2/pull/22637)*. [GitHub-22484](https://github.com/magento/magento2/issues/22484) +* Magento no longer duplicates the state/province fields of customer addresses in Admin forms. *Fix submitted by Shikha Mishra in pull request [22637](https://github.com/magento/magento2/pull/22637)*. [GitHub-22484](https://github.com/magento/magento2/issues/22484) -* Newly created customer accounts now require confirmation. Previously, Magento directly confirmed the new account even if the customer never logged in or confirmed the account. *Fix submitted by Maksym Novik in pull request [21394](https://github.com/magento/magento2/pull/21394)*. [GitHub-14492](https://github.com/magento/magento2/issues/14492) +* Newly created customer accounts now require confirmation. Previously, Magento directly confirmed the new account even if the customer never logged in or confirmed the account. *Fix submitted by Maksym Novik in pull request [21394](https://github.com/magento/magento2/pull/21394)*. [GitHub-14492](https://github.com/magento/magento2/issues/14492) ### Custom customer attributes -* Custom customer address attribute values are populated as expected when an administrator changes a customer address during order creation from the Admin. Previously, the custom attribute drop-down was empty. +* Custom customer address attribute values are populated as expected when an administrator changes a customer address during order creation from the Admin. Previously, the custom attribute drop-down was empty. -* You can now edit a customer address from the Admin (**Admin** > **Customer** > **Address** > **Edit Address**) when the customer address attribute is of type `file` or `image`. Previously, Magento did not display the Edit Address form when you clicked on **Edit Address**. +* You can now edit a customer address from the Admin (**Admin** > **Customer** > **Address** > **Edit Address**) when the customer address attribute is of type `file` or `image`. Previously, Magento did not display the Edit Address form when you clicked on **Edit Address**. ### Database media storage -* The PDF logo file is now database-aware. Consequently, logo images always appear on PDF invoices, even after the local `pub/media` directory is cleared. *Fix submitted by gwharton in pull request [23752](https://github.com/magento/magento2/pull/23752)*. [GitHub-23751](https://github.com/magento/magento2/issues/23751) +* The PDF logo file is now database-aware. Consequently, logo images always appear on PDF invoices, even after the local `pub/media` directory is cleared. *Fix submitted by gwharton in pull request [23752](https://github.com/magento/magento2/pull/23752)*. [GitHub-23751](https://github.com/magento/magento2/issues/23751) -* The `bin/magento catalog:images:resize` command is now database-media-storage-mode aware. As a result, resized images are now extracted from the database if they don’t exist locally prior to resizing, and are now stored back into the database once the resize operation completes. *Fix submitted by gwharton in pull request [23598](https://github.com/magento/magento2/pull/23598)*. [GitHub-23595](https://github.com/magento/magento2/issues/23595), [GitHub-23594](https://github.com/magento/magento2/issues/23594), [GitHub-23596](https://github.com/magento/magento2/issues/23596) +* The `bin/magento catalog:images:resize` command is now database-media-storage-mode aware. As a result, resized images are now extracted from the database if they don’t exist locally prior to resizing, and are now stored back into the database once the resize operation completes. *Fix submitted by gwharton in pull request [23598](https://github.com/magento/magento2/pull/23598)*. [GitHub-23595](https://github.com/magento/magento2/issues/23595), [GitHub-23594](https://github.com/magento/magento2/issues/23594), [GitHub-23596](https://github.com/magento/magento2/issues/23596) -* The **use default value** checkbox on the Media Storage Location configuration setting has been removed. Previously, the JavaScript routines on the page interfered with that option, and consequently, the checkbox could be enabled but was still ignored. *Fix submitted by gwharton in pull request [23710](https://github.com/magento/magento2/pull/23710)*. [GitHub-23597](https://github.com/magento/magento2/issues/23597) +* The **use default value** checkbox on the Media Storage Location configuration setting has been removed. Previously, the JavaScript routines on the page interfered with that option, and consequently, the checkbox could be enabled but was still ignored. *Fix submitted by gwharton in pull request [23710](https://github.com/magento/magento2/pull/23710)*. [GitHub-23597](https://github.com/magento/magento2/issues/23597) -* Transactional email now copies the configured email logo image from the database when the logo file does not exist in the local `pub/media` directory. Previously, emails used the default LUMA logo if it did not exist in the local directory. *Fix submitted by gwharton in pull requests [21675](https://github.com/magento/magento2/pull/21675) and [21674](https://github.com/magento/magento2/pull/21674)*. [GitHub-21672](https://github.com/magento/magento2/issues/21672) +* Transactional email now copies the configured email logo image from the database when the logo file does not exist in the local `pub/media` directory. Previously, emails used the default LUMA logo if it did not exist in the local directory. *Fix submitted by gwharton in pull requests [21675](https://github.com/magento/magento2/pull/21675) and [21674](https://github.com/magento/magento2/pull/21674)*. [GitHub-21672](https://github.com/magento/magento2/issues/21672) -* Magento now copies any image needed for the Admin Product Edit page from the database to local storage as needed. Previously, if the image was not in local storage, Magento used a placeholder image. *Fix submitted by gwharton in pull request [21605](https://github.com/magento/magento2/pull/21605)*. [GitHub-21604](https://github.com/magento/magento2/issues/21604), [GitHub-21546](https://github.com/magento/magento2/issues/21546) +* Magento now copies any image needed for the Admin Product Edit page from the database to local storage as needed. Previously, if the image was not in local storage, Magento used a placeholder image. *Fix submitted by gwharton in pull request [21605](https://github.com/magento/magento2/pull/21605)*. [GitHub-21604](https://github.com/magento/magento2/issues/21604), [GitHub-21546](https://github.com/magento/magento2/issues/21546) ### Directory -* The country drop-down list no longer includes an extraneous zero (0) when the allowed countries in the list differ from countries identified as top destinations. [GitHub-23141](https://github.com/magento/magento2/issues/23141) +* The country drop-down list no longer includes an extraneous zero (0) when the allowed countries in the list differ from countries identified as top destinations. [GitHub-23141](https://github.com/magento/magento2/issues/23141) ### Downloadable products -* Downloadable products are now immediately accessible after they have been paid for. Previously, a downloadable product’s status remained in the pending state after payment for the product has been completed. *Fix submitted by Shikha Mishra in pull request [22658](https://github.com/magento/magento2/pull/22658)*. [GitHub-22545](https://github.com/magento/magento2/issues/22545) +* Downloadable products are now immediately accessible after they have been paid for. Previously, a downloadable product’s status remained in the pending state after payment for the product has been completed. *Fix submitted by Shikha Mishra in pull request [22658](https://github.com/magento/magento2/pull/22658)*. [GitHub-22545](https://github.com/magento/magento2/issues/22545) -* New downloadable products now appear in the downloadable products section after a customer checks out as a guest and then creates an account. +* New downloadable products now appear in the downloadable products section after a customer checks out as a guest and then creates an account. ### EAV -* Starting and ending spaces are now trimmed from phone numbers before JavaScript validation. Previously, Magento did not trim these spaces and displayed this error: `*Phone Number* contains non-numeric characters`. +* Starting and ending spaces are now trimmed from phone numbers before JavaScript validation. Previously, Magento did not trim these spaces and displayed this error: `*Phone Number* contains non-numeric characters`. -* You can now save multiselect and select attribute options when swatches modules are disabled. +* You can now save multiselect and select attribute options when swatches modules are disabled. [GitHub-23326](https://github.com/magento/magento2/issues/23326) ### Email -* Email created using a CSS-heavy template is now sent successfully. Previously, these emails were rejected by the server with this message: `Message too big`. *Fix submitted by gwharton in pull request [23649](https://github.com/magento/magento2/pull/23649)*. [GitHub-23643](https://github.com/magento/magento2/issues/23643) +* Email created using a CSS-heavy template is now sent successfully. Previously, these emails were rejected by the server with this message: `Message too big`. *Fix submitted by gwharton in pull request [23649](https://github.com/magento/magento2/pull/23649)*. [GitHub-23643](https://github.com/magento/magento2/issues/23643) -* The Template Preview tab now loads with the default content that was assigned during the creation of a New Shipment email template as expected. Previously, the Template Preview tab did not load the default content. *Fix submitted by Gaurav Agarwal in pull request [22791](https://github.com/magento/magento2/pull/22791)*. [GitHub-22788](https://github.com/magento/magento2/issues/22788) +* The Template Preview tab now loads with the default content that was assigned during the creation of a New Shipment email template as expected. Previously, the Template Preview tab did not load the default content. *Fix submitted by Gaurav Agarwal in pull request [22791](https://github.com/magento/magento2/pull/22791)*. [GitHub-22788](https://github.com/magento/magento2/issues/22788) -* All emails are now sent with correct MIME encoding. *Fix submitted by gwharton in pull request [23535](https://github.com/magento/magento2/pull/23535)*. +* All emails are now sent with correct MIME encoding. *Fix submitted by gwharton in pull request [23535](https://github.com/magento/magento2/pull/23535)*. ### Frameworks -* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. +* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. -* The `equalArrays` function in `lib/web/mage/utils/compare.js` file has been refactored to remove quadratic complexity. Previously, this feature significantly slowed Admin operations that were performed on large number of products (for example, adding a product to category by SKU). +* The `equalArrays` function in `lib/web/mage/utils/compare.js` file has been refactored to remove quadratic complexity. Previously, this feature significantly slowed Admin operations that were performed on large number of products (for example, adding a product to category by SKU). -* The performance of resize image operations has been improved. Previously, an SQL operation involved in the process returned redundant data, which resulted in images being saved multiple times. +* The performance of resize image operations has been improved. Previously, an SQL operation involved in the process returned redundant data, which resulted in images being saved multiple times. -* The error message that Magento displays when the user creates an attribute that starts with the reserved word `container` has been improved. For example, when a user created product attributes named `container_attributename` and `attributename`, Magento threw this error: `Exception in Magento/Framework/View/Element/UiComponentFactory.php` rather than stating which user behavior was causing the system problem. +* The error message that Magento displays when the user creates an attribute that starts with the reserved word `container` has been improved. For example, when a user created product attributes named `container_attributename` and `attributename`, Magento threw this error: `Exception in Magento/Framework/View/Element/UiComponentFactory.php` rather than stating which user behavior was causing the system problem. -* The Magento Framework API now has a module manager to detect module features and support enablement of third-party modules. *Fix submitted by Navarr Barnier in pull request [18748](https://github.com/magento/magento2/pull/18748)*. +* The Magento Framework API now has a module manager to detect module features and support enablement of third-party modules. *Fix submitted by Navarr Barnier in pull request [18748](https://github.com/magento/magento2/pull/18748)*. #### JavaScript framework -* The cursor on the email field of the login page now behaves as expected when running Magento on Safari. Previously, the cursor repeatedly moved to the end of the email address field when you tried to edit this field. +* The cursor on the email field of the login page now behaves as expected when running Magento on Safari. Previously, the cursor repeatedly moved to the end of the email address field when you tried to edit this field. -* Magento now displays previously missing validation messages on the storefront when JavaScript errors are caught by validation scripts in DatePicker form elements. *Fix submitted by Ravi Chandra in pull request [21397](https://github.com/magento/magento2/pull/21397)*. [GitHub-3795](https://github.com/magento/magento2/issues/3795) +* Magento now displays previously missing validation messages on the storefront when JavaScript errors are caught by validation scripts in DatePicker form elements. *Fix submitted by Ravi Chandra in pull request [21397](https://github.com/magento/magento2/pull/21397)*. [GitHub-3795](https://github.com/magento/magento2/issues/3795) ### General fixes -* Magento now displays the correct content for a selected store in multi-site deployments where the websites have the same URL but the CMS pages have different content. +* Magento now displays the correct content for a selected store in multi-site deployments where the websites have the same URL but the CMS pages have different content. -* Enabling a product now clears the full-page cache for PDP if the product is not assigned to a category. +* Enabling a product now clears the full-page cache for PDP if the product is not assigned to a category. -* The **Save in address book** checkbox on the Shipping Address section of the Admin Create Order page now behaves as expected. When this checkbox is enabled, the address in the Shipping Address field is saved, and merchants can disable or enable the checkbox +* The **Save in address book** checkbox on the Shipping Address section of the Admin Create Order page now behaves as expected. When this checkbox is enabled, the address in the Shipping Address field is saved, and merchants can disable or enable the checkbox -* Updated the length for the `store_name` field used in `sales_order` database table. The field length has been extended from 32 to 255 symbols. +* Updated the length for the `store_name` field used in `sales_order` database table. The field length has been extended from 32 to 255 symbols. -* Preloading of fonts has been moved from the Blank theme to the Luma theme. +* Preloading of fonts has been moved from the Blank theme to the Luma theme. -* Magento no longer includes canceled orders when calculating how many times a coupon code has been used. *Fix submitted by Pavel Bystritsky in pull request [20579](https://github.com/magento/magento2/pull/20579)*. [GitHub-12817](https://github.com/magento/magento2/issues/12817) +* Magento no longer includes canceled orders when calculating how many times a coupon code has been used. *Fix submitted by Pavel Bystritsky in pull request [20579](https://github.com/magento/magento2/pull/20579)*. [GitHub-12817](https://github.com/magento/magento2/issues/12817) -* Code Sniffer no longer marks correctly aligned DocBlock elements as code style violations. *Fix submitted by Pavel Bystritsky in pull request [22444](https://github.com/magento/magento2/pull/22444)*. [GitHub-22317](https://github.com/magento/magento2/issues/22317) +* Code Sniffer no longer marks correctly aligned DocBlock elements as code style violations. *Fix submitted by Pavel Bystritsky in pull request [22444](https://github.com/magento/magento2/pull/22444)*. [GitHub-22317](https://github.com/magento/magento2/issues/22317) -* Tier prices can now be float values. Previously, Magento converted float percentage values to `int` before saving it. *Fix submitted by Maksym Novik in pull request [19584](https://github.com/magento/magento2/pull/19584)*. [GitHub-18651](https://github.com/magento/magento2/issues/18651) +* Tier prices can now be float values. Previously, Magento converted float percentage values to `int` before saving it. *Fix submitted by Maksym Novik in pull request [19584](https://github.com/magento/magento2/pull/19584)*. [GitHub-18651](https://github.com/magento/magento2/issues/18651) -* Full page cache works as expected for non-default store views. +* Full page cache works as expected for non-default store views. -* Magento no longer creates a persistent cart session for logged-in users when the persistent cart feature has been disabled. Previously, Magento did not empty shopping carts for users when the user logged out. +* Magento no longer creates a persistent cart session for logged-in users when the persistent cart feature has been disabled. Previously, Magento did not empty shopping carts for users when the user logged out. -* The unused namespace import was removed from the `CartTotalRepository.php` file. *Fix submitted by Ulyana Kiklevich in pull request [23457](https://github.com/magento/magento2/pull/23457)*. +* The unused namespace import was removed from the `CartTotalRepository.php` file. *Fix submitted by Ulyana Kiklevich in pull request [23457](https://github.com/magento/magento2/pull/23457)*. -* The back-in-stock alert emails that Magento sends to both wholesale and general customers now include the appropriate wholesale and general product prices. +* The back-in-stock alert emails that Magento sends to both wholesale and general customers now include the appropriate wholesale and general product prices. -* The `MsrpSampleData` module installation script no longer generates incorrect data. Previously, this installation script did not set any data from fixtures due to incorrect dependencies between sample data modules. +* The `MsrpSampleData` module installation script no longer generates incorrect data. Previously, this installation script did not set any data from fixtures due to incorrect dependencies between sample data modules. -* Tooltips have been added to the store-view labels for CMS tables and blocks. *Fix submitted by Dipesh Rangani in pull request [23474](https://github.com/magento/magento2/pull/23474)*. +* Tooltips have been added to the store-view labels for CMS tables and blocks. *Fix submitted by Dipesh Rangani in pull request [23474](https://github.com/magento/magento2/pull/23474)*. -* Validation of `max-word` data now works as expected for forms. *Fix submitted by Sunil in pull request [23541](https://github.com/magento/magento2/pull/23541)*. +* Validation of `max-word` data now works as expected for forms. *Fix submitted by Sunil in pull request [23541](https://github.com/magento/magento2/pull/23541)*. -* Magento now subscribes a customer to a price or stock notification when they opt to subscribe to a price or stock alert on a product page without first logging in. Previously, Magento redirected the customer to a 404 page. *Fix submitted by Arjen Miedema in pull request [23218](https://github.com/magento/magento2/pull/23218)*. +* Magento now subscribes a customer to a price or stock notification when they opt to subscribe to a price or stock alert on a product page without first logging in. Previously, Magento redirected the customer to a 404 page. *Fix submitted by Arjen Miedema in pull request [23218](https://github.com/magento/magento2/pull/23218)*. -* The sendfriend feature now verifies product visibility as expected. Previously, this feature verified product status only. *Fix submitted by Mateusz Wira in pull request [23118](https://github.com/magento/magento2/pull/23118)*. [GitHub-23053](https://github.com/magento/magento2/issues/23053) +* The sendfriend feature now verifies product visibility as expected. Previously, this feature verified product status only. *Fix submitted by Mateusz Wira in pull request [23118](https://github.com/magento/magento2/pull/23118)*. [GitHub-23053](https://github.com/magento/magento2/issues/23053) -* Search input is no longer missing the `aria-expanded` required attribute. Previously, the W3C HTML validator threw errors for the `#search` element. *Fix submitted by Geeta Modi in pull request [22942](https://github.com/magento/magento2/pull/22942)*. [GitHub-18337](https://github.com/magento/magento2/issues/18337) +* Search input is no longer missing the `aria-expanded` required attribute. Previously, the W3C HTML validator threw errors for the `#search` element. *Fix submitted by Geeta Modi in pull request [22942](https://github.com/magento/magento2/pull/22942)*. [GitHub-18337](https://github.com/magento/magento2/issues/18337) -* The **Use Default Value** check boxes on the Advanced Pricing pop-up window now remain checked on both the **Special From** and **Special To** dates, and display the values set in the All Store scope. *Fix submitted by Mahesh Singh in pull request [22521](https://github.com/magento/magento2/pull/22521)*. [GitHub-22511](https://github.com/magento/magento2/issues/22511) +* The **Use Default Value** check boxes on the Advanced Pricing pop-up window now remain checked on both the **Special From** and **Special To** dates, and display the values set in the All Store scope. *Fix submitted by Mahesh Singh in pull request [22521](https://github.com/magento/magento2/pull/22521)*. [GitHub-22511](https://github.com/magento/magento2/issues/22511) -* The Recently Viewed feature now accurately lists the products and category paths that the user has recently visited. Previously, this list was inaccurate when the **Use Categories Path for Product URLs** setting was disabled. *Fix submitted by Atish Goswami in pull request [22650](https://github.com/magento/magento2/pull/22650)*. [GitHub-13227](https://github.com/magento/magento2/issues/13227) +* The Recently Viewed feature now accurately lists the products and category paths that the user has recently visited. Previously, this list was inaccurate when the **Use Categories Path for Product URLs** setting was disabled. *Fix submitted by Atish Goswami in pull request [22650](https://github.com/magento/magento2/pull/22650)*. [GitHub-13227](https://github.com/magento/magento2/issues/13227) -* The **Be the First to Review Product** link now directs the user to the product review form at the bottom of the product page as expected in deployments that include Page Builder. +* The **Be the First to Review Product** link now directs the user to the product review form at the bottom of the product page as expected in deployments that include Page Builder. -* You can now set the **minute** values for Analytics data collection (**Store** > **Configuration** > **General** > **Advanced Reporting**). Previously, due to an earlier fix that has now been reverted (see [GitHub-8258](https://github.com/magento/magento2/issues/8258)), validation failed when you set a value that exceeded 24. +* You can now set the **minute** values for Analytics data collection (**Store** > **Configuration** > **General** > **Advanced Reporting**). Previously, due to an earlier fix that has now been reverted (see [GitHub-8258](https://github.com/magento/magento2/issues/8258)), validation failed when you set a value that exceeded 24. -* The `getProductUrl()` method now returns the product URL for a specified website. Previously, this method did not let you retrieve the product URL for a specified website in multisite deployments. *Fix submitted by Nazar Klovanych in pull request [21876](https://github.com/magento/magento2/pull/21876)*. [GitHub-4247](https://github.com/magento/magento2/issues/4247) +* The `getProductUrl()` method now returns the product URL for a specified website. Previously, this method did not let you retrieve the product URL for a specified website in multisite deployments. *Fix submitted by Nazar Klovanych in pull request [21876](https://github.com/magento/magento2/pull/21876)*. [GitHub-4247](https://github.com/magento/magento2/issues/4247) + ### Gift cards accounts -* Magento no longer creates a new gift card after issuing an online refund for another card. Previously, Magento created a new gift card account and sent the customer the previous gift card code and a new code. +* Magento no longer creates a new gift card after issuing an online refund for another card. Previously, Magento created a new gift card account and sent the customer the previous gift card code and a new code. -* All strings on storefront gift card messages can now be translated. +* All strings on storefront gift card messages can now be translated. -* Magento no longer closes an order that is paid for with the partial redemption of a gift card. Previously, if an order is paid partially using gift card, and a partial refund is issued for that order, the order becomes closed. +* Magento no longer closes an order that is paid for with the partial redemption of a gift card. Previously, if an order is paid partially using gift card, and a partial refund is issued for that order, the order becomes closed. ### Gift registry -* Magento no longer displays a console error during checkout when the cart contains a product from the gift registry. Previously, due to a missing function, Magento displayed this error: `checkout-data-resolver.js:248 Uncaught TypeError: addrs.isDefaultBilling is not a function`. +* Magento no longer displays a console error during checkout when the cart contains a product from the gift registry. Previously, due to a missing function, Magento displayed this error: `checkout-data-resolver.js:248 Uncaught TypeError: addrs.isDefaultBilling is not a function`. ### Google Tag Manager -* `getLoadedProductCollection()` has been refactored to support PHP 7.2. +* `getLoadedProductCollection()` has been refactored to support PHP 7.2. ### Image -* You can now programmatically move an image to the gallery using the `addImageToMediaGallery` method with `$move`. Previously, when you tried to move an image programmatically, Magento threw this exception: `[InvalidArgumentException] File 'pub/media/import/' doesn't exist`. *Fix submitted by dudzio12 in pull request [22020](https://github.com/magento/magento2/pull/22020)*. [GitHub-21978](https://github.com/magento/magento2/issues/21978) +* You can now programmatically move an image to the gallery using the `addImageToMediaGallery` method with `$move`. Previously, when you tried to move an image programmatically, Magento threw this exception: `[InvalidArgumentException] File 'pub/media/import/' doesn't exist`. *Fix submitted by dudzio12 in pull request [22020](https://github.com/magento/magento2/pull/22020)*. [GitHub-21978](https://github.com/magento/magento2/issues/21978) -* The performance of the `catalog:images:resize` command has been improved. This command now resizes only the images that are actually in use and lists any errors. *Fix submitted by Timon de Groot in pull request [23005](https://github.com/magento/magento2/pull/23005)*. [GitHub-22808](https://github.com/magento/magento2/issues/22808) +* The performance of the `catalog:images:resize` command has been improved. This command now resizes only the images that are actually in use and lists any errors. *Fix submitted by Timon de Groot in pull request [23005](https://github.com/magento/magento2/pull/23005)*. [GitHub-22808](https://github.com/magento/magento2/issues/22808) ### Import/export -* Import statistics now accurately reflect the results of import. +* Import statistics now accurately reflect the results of import. -* Magento now successfully saves product URL keys in Arabic. +* Magento now successfully saves product URL keys in Arabic. -* Only modified or updated product records are flushed from the catalog cache after importing, re-indexing, and running `bin/magento cron:run --group index`. Previously, all products in the catalog were flushed. +* Only modified or updated product records are flushed from the catalog cache after importing, re-indexing, and running `bin/magento cron:run --group index`. Previously, all products in the catalog were flushed. -* You can now successfully download a CSV file after export. Previously, Magento redirected you to the Admin dashboard when you tried to download the CSV file that was created during export. +* You can now successfully download a CSV file after export. Previously, Magento redirected you to the Admin dashboard when you tried to download the CSV file that was created during export. -* Products are successfully updated through import of an CSV file in **Add/Update** mode. Previously, the import process failed, and Magento displayed this error: `The value specified in the URL Key field would generate a URL that already exists`. + Products are successfully updated through import of an CSV file in **Add/Update** mode. Previously, the import process failed, and Magento displayed this error: `The value specified in the URL Key field would generate a URL that already exists`. -* Magento no longer throws a fatal error during import or export if the category path contains deleted category IDs. +* Magento no longer throws a fatal error during import or export if the category path contains deleted category IDs. -* The import process maintain custom option prices that were assigned to different websites and scope before import. Previously, after import, these custom option prices were set to the default scope values. +* The import process maintain custom option prices that were assigned to different websites and scope before import. Previously, after import, these custom option prices were set to the default scope values. -* You can now update products through import of a CSV file when the updated products have `product_id` values that range widely (for example, a value 1 to a value 6000). Previously, when you initiated the import of the CSV file (**Admin** > **System** > **Import** > **Product** > **Add/Update**), Magento threw this error: `General error: 1114 The table 'catalog_product_index_price_temp' is full occurs`. *Fix submitted by Mateusz Wegrzycki in pull request [22575](https://github.com/magento/magento2/pull/22575)*. [GitHub-22028](https://github.com/magento/magento2/issues/22028) +* You can now update products through import of a CSV file when the updated products have `product_id` values that range widely (for example, a value 1 to a value 6000). Previously, when you initiated the import of the CSV file (**Admin** > **System** > **Import** > **Product** > **Add/Update**), Magento threw this error: `General error: 1114 The table 'catalog_product_index_price_temp' is full occurs`. *Fix submitted by Mateusz Wegrzycki in pull request [22575](https://github.com/magento/magento2/pull/22575)*. [GitHub-22028](https://github.com/magento/magento2/issues/22028) ### Index -* We have improved the processing of memory tables in the Galera Cluster. +* We have improved the processing of memory tables in the Galera Cluster. -* The pricing index can now be fully rebuilt and moved into the active price database table in a reasonable amount of time. Previously, this index ran without completing. [GitHub-22156](https://github.com/magento/magento2/issues/22156) +* The pricing index can now be fully rebuilt and moved into the active price database table in a reasonable amount of time. Previously, this index ran without completing. [GitHub-22156](https://github.com/magento/magento2/issues/22156) -* We improved the performance of product flat data re-indexing. [GitHub-23462](https://github.com/magento/magento2/issues/23462) +* We improved the performance of product flat data re-indexing. [GitHub-23462](https://github.com/magento/magento2/issues/23462) -* You can now filter administrative users by ID. Previously, when you tried to filter these users by ID, Magento threw a 500 error. *Fix submitted by Jeroen in pull request [23267](https://github.com/magento/magento2/pull/23267)*. [GitHub-23266](https://github.com/magento/magento2/issues/23266) +* You can now filter administrative users by ID. Previously, when you tried to filter these users by ID, Magento threw a 500 error. *Fix submitted by Jeroen in pull request [23267](https://github.com/magento/magento2/pull/23267)*. [GitHub-23266](https://github.com/magento/magento2/issues/23266) ### Infrastructure -* Magento 2.3.3 now supports PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21). +* Magento 2.3.3 now supports PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21). -* Varnish cache now supports version 6.2.0. +* Varnish cache now supports version 6.2.0. -* You can now use copy service on extension attributes for classes that extend Data Object. *Fix submitted by Oleksandr Kravchuk in pull request [23387](https://github.com/magento/magento2/pull/23387)*. [GitHub-23386](https://github.com/magento/magento2/issues/23386) +* You can now use copy service on extension attributes for classes that extend Data Object. *Fix submitted by Oleksandr Kravchuk in pull request [23387](https://github.com/magento/magento2/pull/23387)*. [GitHub-23386](https://github.com/magento/magento2/issues/23386) -* Removed an extraneous closing tag from the store-switcher template. *Fix submitted by Alastair Mucklow in pull request [23403](https://github.com/magento/magento2/pull/23403)*. +* Removed an extraneous closing tag from the store-switcher template. *Fix submitted by Alastair Mucklow in pull request [23403](https://github.com/magento/magento2/pull/23403)*. -* `\Magento\ConfigurableProduct\Pricing\Price\PriceResolverInterface` has been added to the `di.xml` file. *Fix submitted by Eden Duong in pull request [23753](https://github.com/magento/magento2/pull/23753)*. [GitHub-23717](https://github.com/magento/magento2/issues/23717) +* `\Magento\ConfigurableProduct\Pricing\Price\PriceResolverInterface` has been added to the `di.xml` file. *Fix submitted by Eden Duong in pull request [23753](https://github.com/magento/magento2/pull/23753)*. [GitHub-23717](https://github.com/magento/magento2/issues/23717) -* We improved validation of forms that contain multiple fields with identical names. Previously, Magento validated the first file in the form, but did not validate subsequent fields with that name. *Fix submitted by Jay Ghosh in pull request [15383](https://github.com/magento/magento2/pull/15383)*. [GitHub-8258](https://github.com/magento/magento2/issues/8258) +* We improved validation of forms that contain multiple fields with identical names. Previously, Magento validated the first file in the form, but did not validate subsequent fields with that name. *Fix submitted by Jay Ghosh in pull request [15383](https://github.com/magento/magento2/pull/15383)*. [GitHub-8258](https://github.com/magento/magento2/issues/8258) -* Magento now identifies review entity IDs programmatically instead of retrieving a hard-coded value. *Fix submitted by Danilo Argentiero in pull request [23353](https://github.com/magento/magento2/pull/23353)*. +* Magento now identifies review entity IDs programmatically instead of retrieving a hard-coded value. *Fix submitted by Danilo Argentiero in pull request [23353](https://github.com/magento/magento2/pull/23353)*. -* The array type hints in the Visibility model now correctly reference `string` instead of `int`. *Fix submitted by Patrick McLain in pull request [23532](https://github.com/magento/magento2/pull/23532)*. +* The array type hints in the Visibility model now correctly reference `string` instead of `int`. *Fix submitted by Patrick McLain in pull request [23532](https://github.com/magento/magento2/pull/23532)*. -* The `getListByCustomerId` function in `PaymentTokenManagementInterface` now returns an array. *Fix submitted by Serhiy Zhovnir in pull request [22914](https://github.com/magento/magento2/pull/22914)*. [GitHub-22899](https://github.com/magento/magento2/issues/22899) +* The `getListByCustomerId` function in `PaymentTokenManagementInterface` now returns an array. *Fix submitted by Serhiy Zhovnir in pull request [22914](https://github.com/magento/magento2/pull/22914)*. [GitHub-22899](https://github.com/magento/magento2/issues/22899) -* The description of the `setStoreId` function has been amended to more clearly explain how the function helps load CMS pages. *Fix submitted by Mahesh Singh in pull request [22772](https://github.com/magento/magento2/pull/22772)*. [GitHub-22767](https://github.com/magento/magento2/issues/22767) +* The description of the `setStoreId` function has been amended to more clearly explain how the function helps load CMS pages. *Fix submitted by Mahesh Singh in pull request [22772](https://github.com/magento/magento2/pull/22772)*. [GitHub-22767](https://github.com/magento/magento2/issues/22767) -* The `phpcs` script for PHP_CodeSniffer now displays all errors and warnings in the console. Previously, Magento threw a fatal error when it encountered an uncaught type error. *Fix submitted by Nazar Klovanych in pull request [22947](https://github.com/magento/magento2/pull/22947)*. [GitHub-20186](https://github.com/magento/magento2/issues/20186) +* The `phpcs` script for PHP_CodeSniffer now displays all errors and warnings in the console. Previously, Magento threw a fatal error when it encountered an uncaught type error. *Fix submitted by Nazar Klovanych in pull request [22947](https://github.com/magento/magento2/pull/22947)*. [GitHub-20186](https://github.com/magento/magento2/issues/20186) -* The `oauth` handshake is now followed by a redirect as expected for third-party integrations. +* The `oauth` handshake is now followed by a redirect as expected for third-party integrations. ### Newsletter -* Magento now sends only a subscribe email when you create an account from an email invitation. Previously, you received two emails -- one that subscribed you to the newsletter, and another that unsubscribed you. +* Magento now sends only a subscribe email when you create an account from an email invitation. Previously, you received two emails -- one that subscribed you to the newsletter, and another that unsubscribed you. -* You can now export newsletter subscribers from the Admin. Previously, Magento displayed this error when you selected a subscriber name and clicked **Export**: `error: URI too long`. +* You can now export newsletter subscribers from the Admin. Previously, Magento displayed this error when you selected a subscriber name and clicked **Export**: `error: URI too long`. ### Orders -* The creditmemo `getOrder()` method now returns the expected extension attributes for an order. Previously, this method did not load orders correctly. *Fix submitted by Pavel Bystritsky in pull request [23358](https://github.com/magento/magento2/pull/23358)*. [GitHub-23345](https://github.com/magento/magento2/issues/23345) +* The creditmemo `getOrder()` method now returns the expected extension attributes for an order. Previously, this method did not load orders correctly. *Fix submitted by Pavel Bystritsky in pull request [23358](https://github.com/magento/magento2/pull/23358)*. [GitHub-23345](https://github.com/magento/magento2/issues/23345) -* Magento now displays an informative error message when you try to update the product quantity and shipping address for an order when the product quantity field is empty. *Fix submitted by Shankar Konar in pull request [23360](https://github.com/magento/magento2/pull/23360)*. +* Magento now displays an informative error message when you try to update the product quantity and shipping address for an order when the product quantity field is empty. *Fix submitted by Shankar Konar in pull request [23360](https://github.com/magento/magento2/pull/23360)*. ### Payment methods This release includes the following changes to integrations for core payment methods to support compliance with PSD2 regulations: -* The Braintree payment method now complies with PSD2 regulations. The core integration API for Braintree now supports the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. +* The Braintree payment method now complies with PSD2 regulations. The core integration API for Braintree now supports the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. -* Authorize.net now provides 3D Secure verification through third-party services through the `cardholderAuthentication` request field. Starting from this release,the Authorize.Net `accept.js` integration will support 3DS 2.0 through CardinalCommerce. +* Authorize.net now provides 3D Secure verification through third-party services through the `cardholderAuthentication` request field. Starting from this release,the Authorize.Net `accept.js` integration will support 3DS 2.0 through CardinalCommerce. -* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. +* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. #### Other payment issues -* Magento now displays a more informative error message (`CVV verification failed`) when you enter an invalid CVV code while using the Braintree payment method. Previously, Magento displayed a generic error message. +* Magento now displays a more informative error message (`CVV verification failed`) when you enter an invalid CVV code while using the Braintree payment method. Previously, Magento displayed a generic error message. -* Customers can now successfully place an order when the order is partially paid for by gift card or when a discount is applied to the order. Previously, customers could not place an order, and Magento displayed this error: `error: Field format error: 10413-The totals of the cart item amounts do not match order amounts`. +* Customers can now successfully place an order when the order is partially paid for by gift card or when a discount is applied to the order. Previously, customers could not place an order, and Magento displayed this error: `error: Field format error: 10413-The totals of the cart item amounts do not match order amounts`. -* When you create orders using Braintree, Magento now successfully creates the orders that contain both simple and virtual products with the **Checkout with Multiple Addresses** option enabled. Previously, Magento listed an order created with these features as an empty order with a grand total of zero on the Orders list. +* When you create orders using Braintree, Magento now successfully creates the orders that contain both simple and virtual products with the **Checkout with Multiple Addresses** option enabled. Previously, Magento listed an order created with these features as an empty order with a grand total of zero on the Orders list. -* Magento no longer processes payment for an order that has an empty email field in the quote. Previously, Braintree processed the payment, but displayed an error message on the storefront and did not create the order. +* Magento no longer processes payment for an order that has an empty email field in the quote. Previously, Braintree processed the payment, but displayed an error message on the storefront and did not create the order. -* Customers can now place an order for virtual products that have a zero subtotal after they have entered address information. Previously, customers could not place an order for virtual products with a zero subtotal after they modified their address, and Magento displayed this message: `The requested Payment Method is not available`. +* Customers can now place an order for virtual products that have a zero subtotal after they have entered address information. Previously, customers could not place an order for virtual products with a zero subtotal after they modified their address, and Magento displayed this message: `The requested Payment Method is not available`. -* Magento now displays Chinese locale text strings for PayPal buttons as expected. +* Magento now displays Chinese locale text strings for PayPal buttons as expected. -* You can now cancel orders placed with PayPal Express even after authorization has expired. +* You can now cancel orders placed with PayPal Express even after authorization has expired. -* The Transactions tab now displays the correct status for a capture transaction for an order that was placed with the Authorize.net `Accept.js` payment method. +* The Transactions tab now displays the correct status for a capture transaction for an order that was placed with the Authorize.net `Accept.js` payment method. -* The Admin sales list now displays the payment method for each order. [GitHub-22231](https://github.com/magento/magento2/issues/22231) +* The Admin sales list now displays the payment method for each order. [GitHub-22231](https://github.com/magento/magento2/issues/22231) -* Magento now displays stored payment methods and billing agreements if the related payment method is active. Previously, Magento displayed disabled payment methods in the customer dashboard. *Fix submitted by Torben Höhn in pull request [22850](https://github.com/magento/magento2/pull/22850)*. [GitHub-6659](https://github.com/magento/magento2/issues/6659) +* Magento now displays stored payment methods and billing agreements if the related payment method is active. Previously, Magento displayed disabled payment methods in the customer dashboard. *Fix submitted by Torben Höhn in pull request [22850](https://github.com/magento/magento2/pull/22850)*. [GitHub-6659](https://github.com/magento/magento2/issues/6659) -* Magento no longer saves credit card information when the **Save for later use** checkbox on the payment page is not enabled during order creation. *Fix submitted by Patrick McLain in pull request [19767](https://github.com/magento/magento2/pull/19767)*. [GitHub-19515](https://github.com/magento/magento2/issues/19515) +* Magento no longer saves credit card information when the **Save for later use** checkbox on the payment page is not enabled during order creation. *Fix submitted by Patrick McLain in pull request [19767](https://github.com/magento/magento2/pull/19767)*. [GitHub-19515](https://github.com/magento/magento2/issues/19515) -* When placing an order with Authorize.net, Magento now disables the Order page's **Place Order** button until billing information has been updated. Previously, this button remained enabled, no matter the status of the order in progress. *Fix submitted by Eden Duong in pull request [23718](https://github.com/magento/magento2/pull/23718)*. [GitHub-23624](https://github.com/magento/magento2/issues/23624) +* When placing an order with Authorize.net, Magento now disables the Order page's **Place Order** button until billing information has been updated. Previously, this button remained enabled, no matter the status of the order in progress. *Fix submitted by Eden Duong in pull request [23718](https://github.com/magento/magento2/pull/23718)*. [GitHub-23624](https://github.com/magento/magento2/issues/23624) -* Magento now displays an informative email message about invalid credentials when a user tries to pay for an order with the Authorize.net payment method that has an incompletely configured Authorize.net `accept.js` account. +* Magento now displays an informative email message about invalid credentials when a user tries to pay for an order with the Authorize.net payment method that has an incompletely configured Authorize.net `accept.js` account. -* You can now place an order from the Admin using Authorize.net as the payment method. Previously, Magento did not place the order and displayed this message: `Transaction has been declined. Please try again later`. +* You can now place an order from the Admin using Authorize.net as the payment method. Previously, Magento did not place the order and displayed this message: `Transaction has been declined. Please try again later`. -* The **Credentials** button on the Configure PayPal Express Checkout page (**Admin** > **Stores** > **Configuration** > **Sales** > **Payment Methods** > **PayPal Express Checkout**) is now displayed properly in modes. +* The **Credentials** button on the Configure PayPal Express Checkout page (**Admin** > **Stores** > **Configuration** > **Sales** > **Payment Methods** > **PayPal Express Checkout**) is now displayed properly in modes. -* Magento no longer throws an error when you place an order using a custom payment method in deployments running Signifyd. Previously, when you tried to place an order using a custom payment method, an error related to the merge of `signifyd_payment_mapping.xml` files occurred. +* Magento no longer throws an error when you place an order using a custom payment method in deployments running Signifyd. Previously, when you tried to place an order using a custom payment method, an error related to the merge of `signifyd_payment_mapping.xml` files occurred. -* Data type validation now occurs on data entered into the minimum and maximum order totals for all payment methods accessed under **Store** > **Configurations** > **Sales** > **Payment Method**. Previously, you could add values with invalid data types, and Magento saved these values with the wrong data type. *Fix submitted by Eden Duong in pull request [23917](https://github.com/magento/magento2/pull/23917)*. [GitHub-23916](https://github.com/magento/magento2/issues/23916) +* Data type validation now occurs on data entered into the minimum and maximum order totals for all payment methods accessed under **Store** > **Configurations** > **Sales** > **Payment Method**. Previously, you could add values with invalid data types, and Magento saved these values with the wrong data type. *Fix submitted by Eden Duong in pull request [23917](https://github.com/magento/magento2/pull/23917)*. [GitHub-23916](https://github.com/magento/magento2/issues/23916) -* The **PayPal Express Checkout** button now appears on the product details page only when the **Display on Product Details Page** and **Enable Instant Purchase** configuration settings are enabled. *Fix submitted by Nazar Klovanych in pull request [22260](https://github.com/magento/magento2/pull/22260)*. [GitHub-22045](https://github.com/magento/magento2/issues/22045), [GitHub-22134](https://github.com/magento/magento2/issues/22134) +* The **PayPal Express Checkout** button now appears on the product details page only when the **Display on Product Details Page** and **Enable Instant Purchase** configuration settings are enabled. *Fix submitted by Nazar Klovanych in pull request [22260](https://github.com/magento/magento2/pull/22260)*. [GitHub-22045](https://github.com/magento/magento2/issues/22045), [GitHub-22134](https://github.com/magento/magento2/issues/22134) -* The location of the Zero Subtotal Checkout payment settings has been changed to **Stores** > **Configuration** > **Sales** > **Payment Methods**. *Fix submitted by Andrea Parmeggiani in pull request [23679](https://github.com/magento/magento2/pull/23679)*. [GitHub-23678](https://github.com/magento/magento2/issues/23678) +* The location of the Zero Subtotal Checkout payment settings has been changed to **Stores** > **Configuration** > **Sales** > **Payment Methods**. *Fix submitted by Andrea Parmeggiani in pull request [23679](https://github.com/magento/magento2/pull/23679)*. [GitHub-23678](https://github.com/magento/magento2/issues/23678) -* Magento now displays the loading icon while processing a Braintree payment until the user is redirected to the new Order page. *Fix submitted by Kunal Soni in pull request [22675](https://github.com/magento/magento2/pull/22675)*. [GitHub-20038](https://github.com/magento/magento2/issues/20038) +* Magento now displays the loading icon while processing a Braintree payment until the user is redirected to the new Order page. *Fix submitted by Kunal Soni in pull request [22675](https://github.com/magento/magento2/pull/22675)*. [GitHub-20038](https://github.com/magento/magento2/issues/20038) ### Performance -* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. +* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. -* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). +* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). -* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. +* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. -* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. +* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. ### Pricing -* You can now save a special price that exceeds three characters in Japanese Yen. Previously, you could not apply denominations that exceeded three characters with a comma separator when representing Yen. +* You can now save a special price that exceeds three characters in Japanese Yen. Previously, you could not apply denominations that exceeded three characters with a comma separator when representing Yen. -* You can now set product price that exceeds 100,000,000. +* You can now set product price that exceeds 100,000,000. ### Reports -* The default date range for report filters is now set to the past month instead of the past 18 years. Previously, the default was set to 18 years, which resulted in errors in the filtered results. *Fix submitted by Yaroslav Rogoza in pull request [23607](https://github.com/magento/magento2/pull/23607)*. [GitHub-23606](https://github.com/magento/magento2/issues/23606) +* The default date range for report filters is now set to the past month instead of the past 18 years. Previously, the default was set to 18 years, which resulted in errors in the filtered results. *Fix submitted by Yaroslav Rogoza in pull request [23607](https://github.com/magento/magento2/pull/23607)*. [GitHub-23606](https://github.com/magento/magento2/issues/23606) -* The start and finish date in reports now correspond to the entered values when you create a report from the Admin. Previously, the start and finish dates in the displayed report was one day earlier than you entered. +* The start and finish date in reports now correspond to the entered values when you create a report from the Admin. Previously, the start and finish dates in the displayed report was one day earlier than you entered. -* The access controls on the **Reports** > **Product** > **Downloads** have been refactored to permit access to only administrators with the correct permissions. Previously, administrators with no access to this area could access the Downloads report. *Fix submitted by Eden Duong in pull request [23901](https://github.com/magento/magento2/pull/23901)*. [GitHub-23900](https://github.com/magento/magento2/issues/23900) +* The access controls on the **Reports** > **Product** > **Downloads** have been refactored to permit access to only administrators with the correct permissions. Previously, administrators with no access to this area could access the Downloads report. *Fix submitted by Eden Duong in pull request [23901](https://github.com/magento/magento2/pull/23901)*. [GitHub-23900](https://github.com/magento/magento2/issues/23900) -* Selecting **Show by year** when filtering **Reports** > **Products** > **Ordered** now results in a list of products sold per year that is grouped by product quantity in descending order. Previously, Magento displayed a list of products sold per year that contained multiple entries for a single product on a per-order basis. *Fix submitted by Surabhi Srivastava in pull request [22087](https://github.com/magento/magento2/pull/22087)*. [GitHub-22646](https://github.com/magento/magento2/issues/22646), [GitHub-22087](https://github.com/magento/magento2/issues/22087) +* Selecting **Show by year** when filtering **Reports** > **Products** > **Ordered** now results in a list of products sold per year that is grouped by product quantity in descending order. Previously, Magento displayed a list of products sold per year that contained multiple entries for a single product on a per-order basis. *Fix submitted by Surabhi Srivastava in pull request [22087](https://github.com/magento/magento2/pull/22087)*. [GitHub-22646](https://github.com/magento/magento2/issues/22646), [GitHub-22087](https://github.com/magento/magento2/issues/22087) ### Reviews -* Administrators with restricted privileges to reviews can now edit review status from the pending reviews list. +* Administrators with restricted privileges to reviews can now edit review status from the pending reviews list. ### Return Merchandise Authorizations (RMA) -* Magento now autopopulates fields as expected when you create a Return Merchandise Authorization (RMA) using REST. Previously, the following fields were null: `customer_id`, `rma_entity_id`, `created_at`, and `entity_id`. +* Magento now autopopulates fields as expected when you create a Return Merchandise Authorization (RMA) using REST. Previously, the following fields were null: `customer_id`, `rma_entity_id`, `created_at`, and `entity_id`. -* Magento now displays only enabled shipping methods on the Return details page. Previously, shipping methods that were disabled for RMA were displayed in the Carrier dropdown menu on the Return details page. +* Magento now displays only enabled shipping methods on the Return details page. Previously, shipping methods that were disabled for RMA were displayed in the Carrier dropdown menu on the Return details page. -* Clicking **Show Packages** on a Returns page (**My Account** > **My Returns** > **Return**) now opens a new page about the selected package. Previously, clicking on this link resulted in a 404 error page. +* Clicking **Show Packages** on a Returns page (**My Account** > **My Returns** > **Return**) now opens a new page about the selected package. Previously, clicking on this link resulted in a 404 error page. ### Reward -* Magento no longer sends reward point balance notification email to clients whose accounts have the **Subscribe for Balance Updates** setting disabled. +* Magento no longer sends reward point balance notification email to clients whose accounts have the **Subscribe for Balance Updates** setting disabled. -* Online refunds now work as expected when the **Refund Reward Points Automatically** configuration setting is enabled. Previously, the Refund button was disabled under these conditions. +* Online refunds now work as expected when the **Refund Reward Points Automatically** configuration setting is enabled. Previously, the Refund button was disabled under these conditions. ### Sales -* The Orders Total now reflects relevant product discounts when you re-order a product. Previously, discounts were not included when you re-ordered. +* The Orders Total now reflects relevant product discounts when you re-order a product. Previously, discounts were not included when you re-ordered. -* Custom order statuses no longer override default statuses in drop-down menus. +* Custom order statuses no longer override default statuses in drop-down menus. -* The Admin payment method validation now uses the updated billing address country for orders placed in the Admin. Previously, order creation failed when the **Payment from Applicable Countries** setting was set to **Specific Countries** and a non-US country was selected from the Payment from Specific Countries list. +* The Admin payment method validation now uses the updated billing address country for orders placed in the Admin. Previously, order creation failed when the **Payment from Applicable Countries** setting was set to **Specific Countries** and a non-US country was selected from the Payment from Specific Countries list. -* You can now edit an order that contains a custom address attribute on its order form. Previously, Magento threw this error if you tried to edit an order with a custom address attribute: `We can't update the order address right now`. +* You can now edit an order that contains a custom address attribute on its order form. Previously, Magento threw this error if you tried to edit an order with a custom address attribute: `We can't update the order address right now`. -* You can now use quotation marks to create exact search terms in the Admin menu search grid (**Customers** > **All Customers**). +* You can now use quotation marks to create exact search terms in the Admin menu search grid (**Customers** > **All Customers**). -* The date format used in tables throughout the product interface is now based on the Admin-defined locale. +* The date format used in tables throughout the product interface is now based on the Admin-defined locale. -* Magento no longer lets you add a disabled variation of configurable product to the shopping cart from the Admin. +* Magento no longer lets you add a disabled variation of configurable product to the shopping cart from the Admin. -* Magento now includes the correct price for a discounted product when the Customer Group is not set to the default group. Previously, when you re-ordered a discounted product, the correct price was not displayed in the Items Ordered field. +* Magento now includes the correct price for a discounted product when the Customer Group is not set to the default group. Previously, when you re-ordered a discounted product, the correct price was not displayed in the Items Ordered field. -* Magento no longer adds to an order any selected products that have not been explicitly added to the cart when you create an order from the Admin. +* Magento no longer adds to an order any selected products that have not been explicitly added to the cart when you create an order from the Admin. -* Magento no longer throws a fatal error when you click **View Order** on an order that contains a product that was available when the order was created but which was subsequently deleted from the storefront. +* Magento no longer throws a fatal error when you click **View Order** on an order that contains a product that was available when the order was created but which was subsequently deleted from the storefront. -* The Allowed Countries drop-down list that is available in multisite deployments now reflects the settings that are configured in **Stores** > **Configuration** > **General** > **General** > **Country Options** > **Allow Countries**. +* The Allowed Countries drop-down list that is available in multisite deployments now reflects the settings that are configured in **Stores** > **Configuration** > **General** > **General** > **Country Options** > **Allow Countries**. ### SalesRule -* You can now update the conditions of an existing Scheduled update for a Cart Price Rule. Previously, when you tried to change the SKU condition for an update, Magento did not save or apply your changes. +* You can now update the conditions of an existing Scheduled update for a Cart Price Rule. Previously, when you tried to change the SKU condition for an update, Magento did not save or apply your changes. -* Magento now displays the Cart Price Rules list (**Marketing** > **Promotions** > **Cart Price Rules**) as expected when you add a new rule. Previously, the grid was not visible. +* Magento now displays the Cart Price Rules list (**Marketing** > **Promotions** > **Cart Price Rules**) as expected when you add a new rule. Previously, the grid was not visible. ### Search -* Search results now reflect the search weight that you assign to product attributes in attribute configuration. +* Search results now reflect the search weight that you assign to product attributes in attribute configuration. -* Search by keyword now supports searching on zero (0). *Fix submitted by jeysmook in pull request [23424](https://github.com/magento/magento2/pull/23424)*. +* Search by keyword now supports searching on zero (0). *Fix submitted by jeysmook in pull request [23424](https://github.com/magento/magento2/pull/23424)*. -* You can now use Elasticsearch to run a query that includes the `<` character. Previously, when you used this symbol in a query, Magento threw this error: +* You can now use Elasticsearch to run a query that includes the `<` character. Previously, when you used this symbol in a query, Magento threw this error: `{"0":"SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected $end, query was: SELECT`. -* Disabled products now appear in the list of available products in the search results of the Page Builder link attribute–on buttons, images, banners, sliders. Previously, these products did not appear in search results, which prevented users from creating content that went live with a schedule update. +* Disabled products now appear in the list of available products in the search results of the Page Builder link attribute–on buttons, images, banners, sliders. Previously, these products did not appear in search results, which prevented users from creating content that went live with a schedule update. ### Shipping -* You can now use Cybersource as a payment method when multishipping is enabled. Previously, when you tried to place an order, Magento threw this error: `Invalid Form Key. Please refresh the page`. This resulted from a problem with auto-attaching a form key on the submit event when one form contained another form. +* You can now use Cybersource as a payment method when multishipping is enabled. Previously, when you tried to place an order, Magento threw this error: `Invalid Form Key. Please refresh the page`. This resulted from a problem with auto-attaching a form key on the submit event when one form contained another form. -* The Order Tracking page now displays the Contact us link as expected when this feature is enabled and the designated shipping carrier is not available on the Order page. *Fix submitted by Eduard Chitoraga in pull request [22823](https://github.com/magento/magento2/pull/22823)*. [GitHub-22822](https://github.com/magento/magento2/issues/22822) +* The Order Tracking page now displays the Contact us link as expected when this feature is enabled and the designated shipping carrier is not available on the Order page. *Fix submitted by Eduard Chitoraga in pull request [22823](https://github.com/magento/magento2/pull/22823)*. [GitHub-22822](https://github.com/magento/magento2/issues/22822) -* Magento no longer tries to validate UPS required fields (UPS Access License Number, User ID, and Password fields) when UPS shipping is not active. *Fix submitted by Serhiy Zhovnir in pull request [22787](https://github.com/magento/magento2/pull/22787)*. [GitHub-22786](https://github.com/magento/magento2/issues/22786) +* Magento no longer tries to validate UPS required fields (UPS Access License Number, User ID, and Password fields) when UPS shipping is not active. *Fix submitted by Serhiy Zhovnir in pull request [22787](https://github.com/magento/magento2/pull/22787)*. [GitHub-22786](https://github.com/magento/magento2/issues/22786) -* You can now use more than 35 characters in the shipper’s address field when booking a UPS shipment or generating a UPS shipment label. Previously, if this address exceeded 35 characters, Magento threw an error. *Fix submitted by Ankur Raiyani in pull request [23523](https://github.com/magento/magento2/pull/23523)*. +* You can now use more than 35 characters in the shipper’s address field when booking a UPS shipment or generating a UPS shipment label. Previously, if this address exceeded 35 characters, Magento threw an error. *Fix submitted by Ankur Raiyani in pull request [23523](https://github.com/magento/magento2/pull/23523)*. -* Merchants can now create shipping labels for return merchandise authorizations. Previously, when a merchant tried to create a shipping label, Magento displayed this error: `No authorized items or allowed shipping methods`. +* Merchants can now create shipping labels for return merchandise authorizations. Previously, when a merchant tried to create a shipping label, Magento displayed this error: `No authorized items or allowed shipping methods`. -* Magento now validates values entered into the **quantity** field on the Shipping to Multiple Addresses page. *Fix submitted by Nirmal Raval in pull request [23477](https://github.com/magento/magento2/pull/23477)*. +* Magento now validates values entered into the **quantity** field on the Shipping to Multiple Addresses page. *Fix submitted by Nirmal Raval in pull request [23477](https://github.com/magento/magento2/pull/23477)*. -* The updates that a customer makes to the shipping address during the checkout shipping step is maintained during the billing step. Previously, the information in the **Ship To** area was updated with empty values in the billing step when the **My billing and shipping address are the same** setting is set to **no**. *Fix submitted by rsimmons07 in pull request [23656](https://github.com/magento/magento2/pull/23656)*. [GitHub-22112](https://github.com/magento/magento2/issues/22112) +* The updates that a customer makes to the shipping address during the checkout shipping step is maintained during the billing step. Previously, the information in the **Ship To** area was updated with empty values in the billing step when the **My billing and shipping address are the same** setting is set to **no**. *Fix submitted by rsimmons07 in pull request [23656](https://github.com/magento/magento2/pull/23656)*. [GitHub-22112](https://github.com/magento/magento2/issues/22112) ### Sitemap -* Magento now generates all relevant product URLS when the **Use Categories Path for Product URLs** setting is enabled. +* Magento now generates all relevant product URLS when the **Use Categories Path for Product URLs** setting is enabled. -* The sitemap product generation for the **Use Categories Path for Product URLs** setting has been refactored. *Fix submitted by Sergiy Vasiutynskyi in pull request [23129](https://github.com/magento/magento2/pull/23129)*. [GitHub-22934](https://github.com/magento/magento2/issues/22934), [GitHub-4788](https://github.com/magento/magento2/issues/4788) +* The sitemap product generation for the **Use Categories Path for Product URLs** setting has been refactored. *Fix submitted by Sergiy Vasiutynskyi in pull request [23129](https://github.com/magento/magento2/pull/23129)*. [GitHub-22934](https://github.com/magento/magento2/issues/22934), [GitHub-4788](https://github.com/magento/magento2/issues/4788) ### Staging -* Magento no longer removes the child products of a grouped product after the group product’s schedule update has expired. +* Magento no longer removes the child products of a grouped product after the group product’s schedule update has expired. -* Magento now displays the correct product Short Description for the selected update in deployments where there are multiple schedule updates. +* Magento now displays the correct product Short Description for the selected update in deployments where there are multiple schedule updates. -* Magento is introducing the tracking of user actions and events on the Admin as part of our efforts to better understand the Admin user experience and improve product design.The first administrator who logs into the Admin after upgrading to Magento 2.3.3 will see the **Allow admin usage data collection** pop-up window, from which they can decline or agree to participate. Once data is captured, it is sent to Adobe Analytics for analysis and reporting. Typical events include page views, save actions, and changes to Magento mode. See [Store Admin](https://docs.magento.com/m2/ce/user_guide/stores/admin.html) for more information. +* Magento is introducing the tracking of user actions and events on the Admin as part of our efforts to better understand the Admin user experience and improve product design.The first administrator who logs into the Admin after upgrading to Magento 2.3.3 will see the **Allow admin usage data collection** pop-up window, from which they can decline or agree to participate. Once data is captured, it is sent to Adobe Analytics for analysis and reporting. Typical events include page views, save actions, and changes to Magento mode. See [Store Admin](https://docs.magento.com/m2/ce/user_guide/stores/admin.html) for more information. -* The database compare tool no longer shows the incorrect comparison results for these entities: +* The database compare tool no longer shows the incorrect comparison results for these entities: `sales_creditmemo` `sales_creditmemo_grid` @@ -1192,28 +1199,28 @@ This release includes the following changes to integrations for core payment met ### Swatches -* You can update the dropdown attributes (**Admin** > **Stores** > **Attributes** > **Product**) when swatches have been disabled. Previously, when swatches were disabled, Magento displayed this error in the console: `Uncaught TypeError: panel.addClass is not a function`. *Fix submitted by Mark van der Sanden in pull request [22560](https://github.com/magento/magento2/pull/22560)*. [GitHub-20843](https://github.com/magento/magento2/issues/20843) +* You can update the dropdown attributes (**Admin** > **Stores** > **Attributes** > **Product**) when swatches have been disabled. Previously, when swatches were disabled, Magento displayed this error in the console: `Uncaught TypeError: panel.addClass is not a function`. *Fix submitted by Mark van der Sanden in pull request [22560](https://github.com/magento/magento2/pull/22560)*. [GitHub-20843](https://github.com/magento/magento2/issues/20843) -* The image gallery now correctly loads images for swatch colors. Previously, the gallery did not switch to the designated first image as expected. *Fix submitted by Milind Singh in pull request [23033](https://github.com/magento/magento2/pull/23033)*. [GitHub-23030](https://github.com/magento/magento2/issues/23030) +* The image gallery now correctly loads images for swatch colors. Previously, the gallery did not switch to the designated first image as expected. *Fix submitted by Milind Singh in pull request [23033](https://github.com/magento/magento2/pull/23033)*. [GitHub-23030](https://github.com/magento/magento2/issues/23030) ### Target Rule -* Deleting products no longer triggers exception errors. Previously, the target rule that was used to identify the product triggered an exception. +* Deleting products no longer triggers exception errors. Previously, the target rule that was used to identify the product triggered an exception. -* Magento now returns more informative error messages when a misconfigured target rule caused an error. +* Magento now returns more informative error messages when a misconfigured target rule caused an error. ### Templates -* The Insert Variables popup window is now populated with template variables as expected. (This window is accessed from **Marketing** > **Email Templates** > **Add New Template**.) *Fix submitted by Mahesh Singh in pull request [23173](https://github.com/magento/magento2/pull/23173)*. [GitHub-23135](https://github.com/magento/magento2/issues/23135) +* The Insert Variables popup window is now populated with template variables as expected. (This window is accessed from **Marketing** > **Email Templates** > **Add New Template**.) *Fix submitted by Mahesh Singh in pull request [23173](https://github.com/magento/magento2/pull/23173)*. [GitHub-23135](https://github.com/magento/magento2/issues/23135) ### Testing -* The following tests have been improved: +* The following tests have been improved: `CheckoutWithBraintreePaypalMinicartTest` `Magento\Catalog\Setup\Patch\Schema\ChangeTmpTablesEngine` `MAGETWO-69516: Cart Price Rule with related Banner for specific Customer Segment is persisted under long-term cookie` @@ -1221,190 +1228,199 @@ This release includes the following changes to integrations for core payment met `Mftf Test: StorefrontApplyCategoryPermissionsToSecondWebsiteTest` -* The Dependency static test now detects URL dependencies as expected. +* The Dependency static test now detects URL dependencies as expected. -* `CreateCmsPageEntityMultipleStoreViewsTest` no longer fails on variation `CreateCmsPageEntityMultipleStoreViewsTestVariation1`. +* `CreateCmsPageEntityMultipleStoreViewsTest` no longer fails on variation `CreateCmsPageEntityMultipleStoreViewsTestVariation1`. -* `CommentLevelsSniff` now works correctly with the `@magento_import` statement. Previously, when you ran `Magento\Test\Less\LiveCodeTest`, Magento threw an error on lines that contained `@magento_import`. *Fix submitted by Pavel Bystritsky in pull request [23790](https://github.com/magento/magento2/pull/23790)*. [GitHub-23789](https://github.com/magento/magento2/issues/23789) +* `CommentLevelsSniff` now works correctly with the `@magento_import` statement. Previously, when you ran `Magento\Test\Less\LiveCodeTest`, Magento threw an error on lines that contained `@magento_import`. *Fix submitted by Pavel Bystritsky in pull request [23790](https://github.com/magento/magento2/pull/23790)*. [GitHub-23789](https://github.com/magento/magento2/issues/23789) -* Magento now deletes the stub modules that tests create. Previously, integration tests created stub modules in `app/code`, which could potentially affect production code. *Fix submitted by Andreas von Studnitz in pull request [18459](https://github.com/magento/magento2/pull/18459)*. [GitHub-12696](https://github.com/magento/magento2/issues/12696) +* Magento now deletes the stub modules that tests create. Previously, integration tests created stub modules in `app/code`, which could potentially affect production code. *Fix submitted by Andreas von Studnitz in pull request [18459](https://github.com/magento/magento2/pull/18459)*. [GitHub-12696](https://github.com/magento/magento2/issues/12696) ### Translation and locales -* White space between words now appears as expected in non-English websites. *Fix submitted by Alexey Arendarenko in pull request [23081](https://github.com/magento/magento2/pull/23081)*. [GitHub-23080](https://github.com/magento/magento2/issues/23080) +* White space between words now appears as expected in non-English websites. *Fix submitted by Alexey Arendarenko in pull request [23081](https://github.com/magento/magento2/pull/23081)*. [GitHub-23080](https://github.com/magento/magento2/issues/23080) -* The payment method area of the shipment and credit memo emails that are sent to customers now have correctly translated strings. *Fix submitted by Alexey Arendarenko in pull request [23338](https://github.com/magento/magento2/pull/23338)*. +* The payment method area of the shipment and credit memo emails that are sent to customers now have correctly translated strings. *Fix submitted by Alexey Arendarenko in pull request [23338](https://github.com/magento/magento2/pull/23338)*. ### UI -* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. +* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. -* The calendar date picker now updates values as expected when the linked input value is changed. +* The calendar date picker now updates values as expected when the linked input value is changed. -* The URL rewrites category tree now includes all relevant categories. Previously, when you selected **For Category** after selecting **Create URL Rewrite** from (**Marketing** > **Url Rewrites**), Magento did not include most categories in the resulting view. +* The URL rewrites category tree now includes all relevant categories. Previously, when you selected **For Category** after selecting **Create URL Rewrite** from (**Marketing** > **Url Rewrites**), Magento did not include most categories in the resulting view. -* Magento now saves order views with the date ranges you enter while creating the filter (**Sales** > **Orders**). Previously, when you opened a saved filtered order view, Magento indicated that the dates you entered were invalid. +* Magento now saves order views with the date ranges you enter while creating the filter (**Sales** > **Orders**). Previously, when you opened a saved filtered order view, Magento indicated that the dates you entered were invalid. -* Form element validation is now triggered as expected when form validation rules change. Previously, when you changed form validation rules for a form element during runtime, the new validation rules were not applied. *Fix submitted by Roman Kis in pull request [21992](https://github.com/magento/magento2/pull/21992)*. [GitHub-21473](https://github.com/magento/magento2/issues/21473) +* Form element validation is now triggered as expected when form validation rules change. Previously, when you changed form validation rules for a form element during runtime, the new validation rules were not applied. *Fix submitted by Roman Kis in pull request [21992](https://github.com/magento/magento2/pull/21992)*. [GitHub-21473](https://github.com/magento/magento2/issues/21473) -* The arrow toggle page element now works as expected throughout the Admin. *Fix submitted by Arvinda Kumar in pull request [22644](https://github.com/magento/magento2/pull/22644)*. [GitHub-22636](https://github.com/magento/magento2/issues/22636) +* The arrow toggle page element now works as expected throughout the Admin. *Fix submitted by Arvinda Kumar in pull request [22644](https://github.com/magento/magento2/pull/22644)*. [GitHub-22636](https://github.com/magento/magento2/issues/22636) -* The height setting in `.admin__control-textarea` component is no longer hard-coded. Previously, this hard-coded value prevented you from changing the height of this text field through the UI. *Fix submitted by Serhiy Zhovnir in pull request [22779](https://github.com/magento/magento2/pull/22779)*. [GitHub-22771](https://github.com/magento/magento2/issues/22771) +* The height setting in `.admin__control-textarea` component is no longer hard-coded. Previously, this hard-coded value prevented you from changing the height of this text field through the UI. *Fix submitted by Serhiy Zhovnir in pull request [22779](https://github.com/magento/magento2/pull/22779)*. [GitHub-22771](https://github.com/magento/magento2/issues/22771) -* Added appropriate white space between elements of product descriptions on the product list view. *Fix submitted by Hitesh in pull request [22931](https://github.com/magento/magento2/pull/22931)*. [GitHub-20788](https://github.com/magento/magento2/issues/20788) +* Added appropriate white space between elements of product descriptions on the product list view. *Fix submitted by Hitesh in pull request [22931](https://github.com/magento/magento2/pull/22931)*. [GitHub-20788](https://github.com/magento/magento2/issues/20788) -* Scrolling now behaves as expected on the create order page. *Fix submitted by Denis Kopylov in pull request [23035](https://github.com/magento/magento2/pull/23035)*. [GitHub-23034](https://github.com/magento/magento2/issues/23034) +* Scrolling now behaves as expected on the create order page. *Fix submitted by Denis Kopylov in pull request [23035](https://github.com/magento/magento2/pull/23035)*. [GitHub-23034](https://github.com/magento/magento2/issues/23034) -* Page element layout issues on **Stores** > **Configuration** > **Advanced** > **Admin** have been resolved. Previously, when you expanded the security block on this page, the **Use system value** text appeared at the top of the page, not adjacent to the checkbox it applied to. +* Page element layout issues on **Stores** > **Configuration** > **Advanced** > **Admin** have been resolved. Previously, when you expanded the security block on this page, the **Use system value** text appeared at the top of the page, not adjacent to the checkbox it applied to. -* The missing **Update Totals** button has been added to the Credit Memo page. +* The missing **Update Totals** button has been added to the Credit Memo page. -* Magento now displays an error message as needed when you click the **Catalog** > **Products** > **Create Configurations** button and submit invalid data. Previously, Magento did not display the error message after validation due to lack of autofocus on the error field. +* Magento now displays an error message as needed when you click the **Catalog** > **Products** > **Create Configurations** button and submit invalid data. Previously, Magento did not display the error message after validation due to lack of autofocus on the error field. *Fix submitted by Eden Duong in pull request [23905](https://github.com/magento/magento2/pull/23905)*. [GitHub-23904](https://github.com/magento/magento2/issues/23904) -* The toggle icon on the **Catalog** > **Products** > **New Product (Configurable)** > **Create Configuration** page now works as expected. *Fix submitted by Eden Duong in pull request [23803](https://github.com/magento/magento2/pull/23803)*. [GitHub-22702](https://github.com/magento/magento2/issues/22702) +* The toggle icon on the **Catalog** > **Products** > **New Product (Configurable)** > **Create Configuration** page now works as expected. *Fix submitted by Eden Duong in pull request [23803](https://github.com/magento/magento2/pull/23803)*. [GitHub-22702](https://github.com/magento/magento2/issues/22702) -* Magento no longer validates data in the **Discount Amount** field after page load until the user performs an action in the Create New Catalog Rule form. Previously, Magento ran validation checks on that field despite its inactivity, and threw an error. *Fix submitted by Eden Duong in pull request [23779](https://github.com/magento/magento2/pull/23779)*. [GitHub-23777](https://github.com/magento/magento2/issues/23777) +* Magento no longer validates data in the **Discount Amount** field after page load until the user performs an action in the Create New Catalog Rule form. Previously, Magento ran validation checks on that field despite its inactivity, and threw an error. *Fix submitted by Eden Duong in pull request [23779](https://github.com/magento/magento2/pull/23779)*. [GitHub-23777](https://github.com/magento/magento2/issues/23777) -* You can now edit the status label for the storefront from the Admin in single-store mode. Previously, there was no status field available from **Stores** > **Order Status** when single-store mode was enabled. *Fix submitted by Eden Duong in pull request [23681](https://github.com/magento/magento2/pull/23681)*. [GitHub-22654](https://github.com/magento/magento2/issues/22654) +* You can now edit the status label for the storefront from the Admin in single-store mode. Previously, there was no status field available from **Stores** > **Order Status** when single-store mode was enabled. *Fix submitted by Eden Duong in pull request [23681](https://github.com/magento/magento2/pull/23681)*. [GitHub-22654](https://github.com/magento/magento2/issues/22654) -* The design of the Review & Payments **Apply Discount Coupon** box of the checkout page has been improved. *Fix submitted by Abrar Pathan in pull request [21215](https://github.com/magento/magento2/pull/21215)*. [GitHub-21214](https://github.com/magento/magento2/issues/21214) +* The design of the Review & Payments **Apply Discount Coupon** box of the checkout page has been improved. *Fix submitted by Abrar Pathan in pull request [21215](https://github.com/magento/magento2/pull/21215)*. [GitHub-21214](https://github.com/magento/magento2/issues/21214) -* The `always` action that precedes the opening of the alert and confirm widgets is now called once. Previously, the `always triggering` text was logged twice after you clicked the **OK** button. *Fix submitted by Eduard Chitoraga in pull request [23234](https://github.com/magento/magento2/pull/23234)*. [GitHub-23233](https://github.com/magento/magento2/issues/23233) +* The `always` action that precedes the opening of the alert and confirm widgets is now called once. Previously, the `always triggering` text was logged twice after you clicked the **OK** button. *Fix submitted by Eduard Chitoraga in pull request [23234](https://github.com/magento/magento2/pull/23234)*. [GitHub-23233](https://github.com/magento/magento2/issues/23233) -* Magento now sets the `last` CSS class to the top menu when one or more parent items are not active. As a result, menu items will be filtered before they are processed for HTML output. *Fix submitted by Arnoud Beekman in pull request [22071](https://github.com/magento/magento2/pull/22071)*. [GitHub-13266](https://github.com/magento/magento2/issues/13266) +* Magento now sets the `last` CSS class to the top menu when one or more parent items are not active. As a result, menu items will be filtered before they are processed for HTML output. *Fix submitted by Arnoud Beekman in pull request [22071](https://github.com/magento/magento2/pull/22071)*. [GitHub-13266](https://github.com/magento/magento2/issues/13266) -* The form reset feature now clears the **date** field in Admin forms as expected. *Fix submitted by Nirav Patel in pull request [23007](https://github.com/magento/magento2/pull/23007)*. [GitHub-22940](https://github.com/magento/magento2/issues/22940) +* The form reset feature now clears the **date** field in Admin forms as expected. *Fix submitted by Nirav Patel in pull request [23007](https://github.com/magento/magento2/pull/23007)*. [GitHub-22940](https://github.com/magento/magento2/issues/22940) -* You can now specify custom fonts for use in your deployment. Previously, the `.lib-font-face()` mixin required that you include the font in all the formats listed (for example, `eot`, `woff2`, `woff`, `ttf`, and `svg`). If your font was not available in these formats, Magento displayed a 404 error. *Fix submitted by Karla Saaremäe in pull request [22854](https://github.com/magento/magento2/pull/22854)*. [GitHub-4628](https://github.com/magento/magento2/issues/4628) +* You can now specify custom fonts for use in your deployment. Previously, the `.lib-font-face()` mixin required that you include the font in all the formats listed (for example, `eot`, `woff2`, `woff`, `ttf`, and `svg`). If your font was not available in these formats, Magento displayed a 404 error. *Fix submitted by Karla Saaremäe in pull request [22854](https://github.com/magento/magento2/pull/22854)*. [GitHub-4628](https://github.com/magento/magento2/issues/4628) -* The **Refund** button on the credit memo page now remains active after a merchant enters a value in the Refund Totals section. *Fix submitted by Nishant Jariwala in pull request [23286](https://github.com/magento/magento2/pull/23286)*. [GitHub-23285](https://github.com/magento/magento2/issues/23285) +* The **Refund** button on the credit memo page now remains active after a merchant enters a value in the Refund Totals section. *Fix submitted by Nishant Jariwala in pull request [23286](https://github.com/magento/magento2/pull/23286)*. [GitHub-23285](https://github.com/magento/magento2/issues/23285) -* The behavior of the mobile menu JavaScript now triggers at the same breakpoint as the mobile menu styles. *Fix submitted by bobemoe in pull request [23528](https://github.com/magento/magento2/pull/23528)*. [GitHub-8298](https://github.com/magento/magento2/issues/8298) +* The behavior of the mobile menu JavaScript now triggers at the same breakpoint as the mobile menu styles. *Fix submitted by bobemoe in pull request [23528](https://github.com/magento/magento2/pull/23528)*. [GitHub-8298](https://github.com/magento/magento2/issues/8298) -* The `font-size` setting for all `input-field` labels with a tooltip is no longer set to 0, and time fields are separated by colons (:) as expected. *Fix submitted by Geeta Modi in pull request [23393](https://github.com/magento/magento2/pull/23393)*. [GitHub-21974](https://github.com/magento/magento2/issues/21974) +* The `font-size` setting for all `input-field` labels with a tooltip is no longer set to 0, and time fields are separated by colons (:) as expected. *Fix submitted by Geeta Modi in pull request [23393](https://github.com/magento/magento2/pull/23393)*. [GitHub-21974](https://github.com/magento/magento2/issues/21974) -* Magento now displays the Admin grid header as expected when there are no buttons in the toolbar. *Fix submitted by Shankar Konar in pull request [23247](https://github.com/magento/magento2/pull/23247)*. +* Magento now displays the Admin grid header as expected when there are no buttons in the toolbar. *Fix submitted by Shankar Konar in pull request [23247](https://github.com/magento/magento2/pull/23247)*. ### URL rewrites -* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. +* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. -* Redundant URL rewrite operations that were triggered by category operations have been eliminated, and page load performance has been improved. Previously, updating a category to add or delete products triggered URL rewrite regeneration for all products with changed positions. +* Redundant URL rewrite operations that were triggered by category operations have been eliminated, and page load performance has been improved. Previously, updating a category to add or delete products triggered URL rewrite regeneration for all products with changed positions. -* Magento no longer removes the query string from URLs when the query string is preceded by a slash. Previously, when a customer opened a URL that contained a trailing slash and query string (for example, `http://magento.host.com/sample-url-key/?cupcakes`), Magento redirected the user to a URL that omitted the slash (`http://magento.host.com/sample-url-key`). +* Magento no longer removes the query string from URLs when the query string is preceded by a slash. Previously, when a customer opened a URL that contained a trailing slash and query string (for example, `http://magento.host.com/sample-url-key/?cupcakes`), Magento redirected the user to a URL that omitted the slash (`http://magento.host.com/sample-url-key`). -* URL redirects now work as expected when you click **Save** after editing a product view from the Customer tab (**Customer** > **Product Reviews** > **Edit Review**). *Fix submitted by Ravi Chandra in pull request [22426](https://github.com/magento/magento2/pull/22426)*. [GitHub-22425](https://github.com/magento/magento2/issues/22425) +* URL redirects now work as expected when you click **Save** after editing a product view from the Customer tab (**Customer** > **Product Reviews** > **Edit Review**). *Fix submitted by Ravi Chandra in pull request [22426](https://github.com/magento/magento2/pull/22426)*. [GitHub-22425](https://github.com/magento/magento2/issues/22425) -* Magento now correctly renders the value of a product’s customizable option field of type `Area` when you enter a multi-line value from the Admin. Previously, a multi-line value was rendered with an HTML `
` tag as part of the value. *Fix submitted by Sunil in pull request [23524](https://github.com/magento/magento2/pull/23524)*. [GitHub-23510](https://github.com/magento/magento2/issues/23510) +* Magento now correctly renders the value of a product’s customizable option field of type `Area` when you enter a multi-line value from the Admin. Previously, a multi-line value was rendered with an HTML `
` tag as part of the value. *Fix submitted by Sunil in pull request [23524](https://github.com/magento/magento2/pull/23524)*. [GitHub-23510](https://github.com/magento/magento2/issues/23510) -* You can now use a plus sign (+) character in content contained within a widget on a CMS page. Previously, Magento did not render the character, although it appeared in the page content stored in the database and when editing the widget. *Fix submitted by Sarfaraz Bheda in pull request [23496](https://github.com/magento/magento2/pull/23496)*. +* You can now use a plus sign (+) character in content contained within a widget on a CMS page. Previously, Magento did not render the character, although it appeared in the page content stored in the database and when editing the widget. *Fix submitted by Sarfaraz Bheda in pull request [23496](https://github.com/magento/magento2/pull/23496)*. -* Product URLs are now updated as expected after Magento changes the URL key of the category in multi-site deployment. *Fix submitted by Alastair Mucklow in pull request [23309](https://github.com/magento/magento2/pull/23309)*. [GitHub-23074](https://github.com/magento/magento2/issues/23074) +* Product URLs are now updated as expected after Magento changes the URL key of the category in multi-site deployment. *Fix submitted by Alastair Mucklow in pull request [23309](https://github.com/magento/magento2/pull/23309)*. [GitHub-23074](https://github.com/magento/magento2/issues/23074) ### Vertex -* Incorrect Customer Codes are no longer sent when Vertex invoices are set to send during an order status change. +* Incorrect Customer Codes are no longer sent when Vertex invoices are set to send during an order status change. -* Resolved an issue where assisted parameters were not requested and logged during Invoice calls made during Order Status Change. +* Resolved an issue where assisted parameters were not requested and logged during Invoice calls made during Order Status Change. -* Calls to Vertex are now made when string values exceed the maximum allowed length in the Vertex SDK. +* Calls to Vertex are now made when string values exceed the maximum allowed length in the Vertex SDK. -* Tax code, vertex tax code, and invoice text codes are now saved for orders created during Guest Checkout. +* Tax code, vertex tax code, and invoice text codes are now saved for orders created during Guest Checkout. -* Guest Orders are no longer invoiced twice if logging was enabled. +* Guest Orders are no longer invoiced twice if logging was enabled. -* Shipping is now included on a Vertex invoice if that invoice was sent in the same request that its order was created in if that order was placed using guest checkout. +* Shipping is now included on a Vertex invoice if that invoice was sent in the same request that its order was created in if that order was placed using guest checkout. -* Taxes for Magento Commerce gift wrap are now properly written to the Vertex tax journal. +* Taxes for Magento Commerce gift wrap are now properly written to the Vertex tax journal. ### Visual Merchandiser -* You can now add tier price conditions to smart categories. +* You can now add tier price conditions to smart categories. -* The Visual Merchandiser product list now renders properly when product names exceed 50 characters. +* The Visual Merchandiser product list now renders properly when product names exceed 50 characters. ### Web API framework -* Magento now renders shipment details for an order without a fatal error when you use REST to create a shipment. *Fix submitted by Milind Singh in pull request [22687](https://github.com/magento/magento2/pull/22687)*. [GitHub-22686](https://github.com/magento/magento2/issues/22686) +* Magento now renders shipment details for an order without a fatal error when you use REST to create a shipment. *Fix submitted by Milind Singh in pull request [22687](https://github.com/magento/magento2/pull/22687)*. [GitHub-22686](https://github.com/magento/magento2/issues/22686) -* You can now use REST to update a customer that has no associated `store_id` without unintentionally changing other information. Previously, Magento changed the `store_id` to the default `store_id` if this field was left empty in the PUT request. *Fix submitted by Mateusz Wira in pull request [22893](https://github.com/magento/magento2/pull/22893)*. [GitHub-22869](https://github.com/magento/magento2/issues/22869) +* You can now use REST to update a customer that has no associated `store_id` without unintentionally changing other information. Previously, Magento changed the `store_id` to the default `store_id` if this field was left empty in the PUT request. *Fix submitted by Mateusz Wira in pull request [22893](https://github.com/magento/magento2/pull/22893)*. [GitHub-22869](https://github.com/magento/magento2/issues/22869) -* Swagger now accepts requests in XML and can display results in the same format. *Fix submitted by Simon Schröer in pull request [23025](https://github.com/magento/magento2/pull/23025)*. +* Swagger now accepts requests in XML and can display results in the same format. *Fix submitted by Simon Schröer in pull request [23025](https://github.com/magento/magento2/pull/23025)*. -* The `POST` on `/orders` REST calls no longer fail when properties in the request body are out of order. Previously, when billing address data preceded customer data in the Order Create API JSON payload, the billing address email was not populated, so the order was empty. *Fix submitted by Mateusz Wira in pull request [23048](https://github.com/magento/magento2/pull/23048)*. +* The `POST` on `/orders` REST calls no longer fail when properties in the request body are out of order. Previously, when billing address data preceded customer data in the Order Create API JSON payload, the billing address email was not populated, so the order was empty. *Fix submitted by Mateusz Wira in pull request [23048](https://github.com/magento/magento2/pull/23048)*. ### Website restriction -* Administrators with appropriate permissions can now create a new customer account on the Admin when the **Website Restriction** setting is enabled. Previously, Magento threw this exception: `Can not register new customer due to restrictions are enabled`. +* Administrators with appropriate permissions can now create a new customer account on the Admin when the **Website Restriction** setting is enabled. Previously, Magento threw this exception: `Can not register new customer due to restrictions are enabled`. ### Wishlist -* Wishlists now accurately reflect product availability when a product has been added to a wishlist and then subsequently disabled. Previously, the wishlist displayed these contradictory messages: **You have no items in your wish list** and **1 item in wish list**. +* Wishlists now accurately reflect product availability when a product has been added to a wishlist and then subsequently disabled. Previously, the wishlist displayed these contradictory messages: **You have no items in your wish list** and **1 item in wish list**. -* Wishlist names can now be edited from the storefront. +* Wishlist names can now be edited from the storefront. -* The `Magento\FunctionalTestingFramework.functional.StorefrontAddMultipleStoreProductsToWishlistTest` test no longer fails randomly. +* The `Magento\FunctionalTestingFramework.functional.StorefrontAddMultipleStoreProductsToWishlistTest` test no longer fails randomly. -* The wishlist no longer shows an item that has been disabled on the Admin. +* The wishlist no longer shows an item that has been disabled on the Admin. -* Wishlist items now display decimal values as appropriate. Previously, Magento saved decimal quantities for wishlist items but did not display these values in the wishlist on the storefront. *Fix submitted by Max Fickers in pull request [23933](https://github.com/magento/magento2/pull/23933)*. [GitHub-23932](https://github.com/magento/magento2/issues/23932) +* Wishlist items now display decimal values as appropriate. Previously, Magento saved decimal quantities for wishlist items but did not display these values in the wishlist on the storefront. *Fix submitted by Max Fickers in pull request [23933](https://github.com/magento/magento2/pull/23933)*. [GitHub-23932](https://github.com/magento/magento2/issues/23932) + +## Known issue + +**Issue**: +With this release, the `\Magento\Framework\Mail\MessageInterface` class has been replaced with `\Magento\Framework\Mail\EmailMessageInterface`. This new class supports the sending of multi-part MIME-type content within email and extends the existing `MailMessageInterface` and `MessageInterface` classes to ensure backward compatibility and provide a transition period for extension developers. Extension developers and merchants who are deploying third-party extensions that implement `\Magento\Framework\Mail\MessageInterface` should be aware of these changes. + +The  `Magento\Framework\Mail\Template\TransportBuilder` and `Magento\Newsletter\Model\Queue\TransportBuilder` structures were refactored to return this new `EmailMessageInterface` instead of the `MessageInterface`,  which was previously returned. Although the signature of the `Transport::getMessage()` method was not changed, extensions can start using the new `EmailMessageInterface`. + +**Workaround**: In deployments that include third-party customizations, the old `MessageInterface` might still be instantiated. How you prevent this instantiation depends upon the particular usage of `MessageInterface` in your code. See the Magento forum DevBlog post [Backward-incompatible Changes in the Mail Library for Magento 2.3.3](https://community.magento.com/t5/Magento-DevBlog/Backward-incompatible-Changes-in-the-Mail-Library-for-Magento-2/ba-p/144787) for more information. **This issue has been addressed in the EmailMessageInterface backward compatibility issue patch, which was released on October 14, 2019. Merchants should apply this patch as soon as possible, especially if their deployments include extensions or customizations that use the Mail interface.** ## Community contributions We are grateful to the wider Magento community and would like to acknowledge their contributions to this release. Check out the following ways you can learn about the community contributions to our current releases: -* If a community member has provided a fix for this release, we identify the fix in the Fixed Issue section of these notes with the phrase, "*Fix provided by community member*". +* If a community member has provided a fix for this release, we identify the fix in the Fixed Issue section of these notes with the phrase, "*Fix provided by community member*". -* The Magento Community Engineering team [Magento Contributors](https://magento.com/magento-contributors) maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub. +* The Magento Community Engineering team [Magento Contributors](https://magento.com/magento-contributors) maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub. ### Partner contributions diff --git a/guides/v2.3/release-notes/release-notes-2-3-3-open-source.md b/guides/v2.3/release-notes/release-notes-2-3-3-open-source.md index 0ff6f92c89a..d4ae1b5214d 100644 --- a/guides/v2.3/release-notes/release-notes-2-3-3-open-source.md +++ b/guides/v2.3/release-notes/release-notes-2-3-3-open-source.md @@ -23,8 +23,13 @@ Although code for these features is bundled with quarterly releases of the Magen ## Apply the Catalog pagination issue on Elasticsearch 6.x patch to resolve a critical search result pagination issue -This patch resolves issues that users of Magento 2.3.3 experience in deployments where Elasticsearch 6.x is used as the catalog search engine. -Users who attempt to navigate past the first page of search results are unsuccessful, and Magento displays an error message. After this patch is installed, users will be able to page through all search results. See [Applying patches](https://devdocs.magento.com/guides/v2.3/comp-mgr/patching.html) for specific instructions on downloading and applying Magento patches. To find the patch, navigate to [Tech Resources](https://magento.com/tech-resources/download), and select the 'Catalog pagination issue on Elasticsearch 6.x' patch associated with the version of Magento you are running. +This patch resolves issues that users of Magento 2.3.3 experience in deployments where Elasticsearch 6.x is used as the catalog search engine. Users who attempt to navigate past the first page of search results are unsuccessful, and Magento displays an error message. After this patch is installed, users will be able to page through all search results. See [Applying patches](https://devdocs.magento.com/guides/v2.3/comp-mgr/patching.html) for specific instructions on downloading and applying Magento patches. To find the patch, navigate to [Tech Resources](https://magento.com/tech-resources/download), and select the 'Catalog pagination issue on Elasticsearch 6.x' patch associated with the version of Magento you are running. + +## Apply the EmailMessageInterface backward compatibility issue patch to resolve an email interface backward-incompatibility issue + +This patch addresses backward-incompatibility issues that extension developers may have experienced after the introduction of `Magento\Framework\Mail\EmailMessageInterface`,  which was released in Magento 2.3.3. In the scope of this patch, the new `EmailMessageInterface` inherits from the old `MessageInterface`, and core modules are changed back to rely on `MessageInterface`. **Merchants should apply this patch as soon as possible, especially if their deployments include extensions or customizations that use the mail interface**. + +See [Applying patches](https://devdocs.magento.com/guides/v2.3/comp-mgr/patching.html) for specific instructions on downloading and applying Magento patches. To find the patch, navigate to [Tech Resources](https://magento.com/tech-resources/download), and select the EmailMessageInterface backward compatibility issue patch associated with the version of Magento you are running. ## Highlights @@ -34,9 +39,9 @@ Look for the following highlights in this release: This release includes the following security enhancements: -* PSD2 compliance to core payment methods -* Fixes for 75 critical security issues -* Significant platform-security enhancements that boost XSS (cross-site scripting) protection against future exploits. This effort is the culmination of several months of concentrated effort on Magento's part to reduce our backlog of security enhancements. +* PSD2 compliance to core payment methods +* Fixes for 75 critical security issues +* Significant platform-security enhancements that boost XSS (cross-site scripting) protection against future exploits. This effort is the culmination of several months of concentrated effort on Magento's part to reduce our backlog of security enhancements. #### Core payment methods integrations are now compliant with PSD2 regulations @@ -44,16 +49,16 @@ The European Union recently revised the Payment Services Directive (PSD) regulat This release contains the following major PSD-related changes: -* The **Braintree payment method now complies with PSD2 regulations**. Its core integration API has been upgraded to the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. +* The **Braintree payment method now complies with PSD2 regulations**. Its core integration API has been upgraded to the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. -* Authorize.net now provides the ability, through the `cardholderAuthentication` request field, to make 3D Secure verification through third-party services such as CardinalCommerce. Starting with this release, **Authorize.net accept.js integration will support 3DS 2.0 through CardinalCommerce**. +* Authorize.net now provides the ability, through the `cardholderAuthentication` request field, to make 3D Secure verification through third-party services such as CardinalCommerce. Starting with this release, **Authorize.net accept.js integration will support 3DS 2.0 through CardinalCommerce**. -* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. +* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. #### Security enhancements and fixes to core code -* **75 security enhancements** that help close cross-site scripting (XSS) and remote code execution (RCE) vulnerabilities as well as other security issues. No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts: IP whitelisting, [two-factor authentication](https://devdocs.magento.com/guides/v2.3/security/two-factor-authentication.html), use of a VPN, the use of a unique location rather than `/admin`, and good password hygiene. See [Magento Security Center](https://magento.com/security/patches/magento-2.3.3-2.2.10-security-update) for a comprehensive discussion of these issues. All known exploitable security issues fixed in this release (2.3.3) have been ported to 2.2.10, 1.14.4.3, and 1.9.4.3, as appropriate. +* **75 security enhancements** that help close cross-site scripting (XSS) and remote code execution (RCE) vulnerabilities as well as other security issues. No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts: IP whitelisting, [two-factor authentication](https://devdocs.magento.com/guides/v2.3/security/two-factor-authentication.html), use of a VPN, the use of a unique location rather than `/admin`, and good password hygiene. See [Magento Security Center](https://magento.com/security/patches/magento-2.3.3-2.2.10-security-update) for a comprehensive discussion of these issues. All known exploitable security issues fixed in this release (2.3.3) have been ported to 2.2.10, 1.14.4.3, and 1.9.4.3, as appropriate. {:.bs-callout-info} Starting with the release of Magento Open Source 2.3.2, Magento will assign and publish indexed Common Vulnerabilities and Exposures (CVE) numbers with each security bug reported to us by external parties. This allows users of Magento Open Source to more easily identify unaddressed vulnerabilities in their deployment. @@ -63,51 +68,51 @@ Starting with the release of Magento Open Source 2.3.2, Magento will assign and The following upgrades to core platform components boost platform security and support PCI compliance: -* Magento 2.3.3 now supports **PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21)**. +* Magento 2.3.3 now supports **PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21)**. -* Magento now supports **Varnish 6.2.0**. +* Magento now supports **Varnish 6.2.0**. -* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. +* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. ### Performance boosts -* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. +* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. -* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). +* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). -* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. +* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. -* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. +* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. ### Infrastructure improvements This release contains enhancements to core quality, which improve the quality of the Framework and these modules: `Catalog`, `Sales`, `Checkout/One Page Checkout`, `UrlRewrite`, `Customer`, and `Ui`. Here are some additional core enhancements: -* The WYSIWYG editor has been upgraded to TinyMCE v. 4.9.5​. +* The WYSIWYG editor has been upgraded to TinyMCE v. 4.9.5​. ### Merchant tool enhancements -* As part of our efforts to better understand the Admin user experience and improve product design, Magento is introducing the tracking of user actions and events on the Admin. After you upgrade to Magento 2.3.3, the first administrative user who logs into the Admin will be prompted to **Allow admin usage data collection**. If the user agrees to data collection, the data captured from Admin activity is sent to Adobe Analytics for analysis and reporting. Typical events include page views, save actions, and changes to Magento mode. See [Store Admin](https://docs.magento.com/m2/ce/user_guide/stores/admin.html) for more information. +* As part of our efforts to better understand the Admin user experience and improve product design, Magento is introducing the tracking of user actions and events on the Admin. After you upgrade to Magento 2.3.3, the first administrative user who logs into the Admin will be prompted to **Allow admin usage data collection**. If the user agrees to data collection, the data captured from Admin activity is sent to Adobe Analytics for analysis and reporting. Typical events include page views, save actions, and changes to Magento mode. See [Store Admin](https://docs.magento.com/m2/ce/user_guide/stores/admin.html) for more information. ### Inventory Management enhancements -* Fixes to multiple bugs. See [Inventory Management release notes](https://devdocs.magento.com/guides/v2.3/inventory/release-notes.html). +* Fixes to multiple bugs. See [Inventory Management release notes](https://devdocs.magento.com/guides/v2.3/inventory/release-notes.html). ### GraphQL Expanded GraphQL functionality and improved coverage for PayPal payment integrations, gift cards, and store credit features. Added mutations and queries that support these tasks: -* Process payments through PayPal Express checkout, Payflow Pro and Link Express Checkout, and other supported PayPal payment methods, Authorize.net, and Braintree -* Redeem gift cards and convert to store credit balance for logged-in users -* Update shopping carts for guest users to apply or remove gift cards and check card balance -* Add configurable products to cart +* Process payments through PayPal Express checkout, Payflow Pro and Link Express Checkout, and other supported PayPal payment methods, Authorize.net, and Braintree +* Redeem gift cards and convert to store credit balance for logged-in users +* Update shopping carts for guest users to apply or remove gift cards and check card balance +* Add configurable products to cart See [Release notes](https://devdocs.magento.com/guides/v2.3/graphql/release-notes.html) for a more detailed discussion of recent GraphQL bug fixes. @@ -123,9 +128,9 @@ The Google Shopping ads Channel Marketplace extension is now available as a bund This release of Magento Shipping includes: -* Improvements to batch-order processing, carrier integration, shipping method preview in the shipping portal, checkout. +* Improvements to batch-order processing, carrier integration, shipping method preview in the shipping portal, checkout. -* Support for bundled products and prepackage options. +* Support for bundled products and prepackage options. See [Magento Shipping](https://docs.magento.com/m2/ee/user_guide/shipping/magento-shipping.html). @@ -139,28 +144,28 @@ Amazon Pay is now compliant with the PSD2 directive for UK and Germany. See [Pay #### dotdigital -* Improved product catalog sync for bundled and custom products. +* Improved product catalog sync for bundled and custom products. -* Enhanced communications for abandoned cart. +* Enhanced communications for abandoned cart. #### Klarna -* Merchants can now disable the sending of customer information. +* Merchants can now disable the sending of customer information. -* New options now support B2B transactions in select markets. +* New options now support B2B transactions in select markets. -* PayBright, a Canadian payment coverage option, is now supported. +* PayBright, a Canadian payment coverage option, is now supported. See [Klarna](https://docs.magento.com/m2/ee/user_guide/payment/klarna.html). #### Vertex -* Added support for Vertex Flexible Fields. Vertex flexible fields allow merchants to send additional information to the tax engine, which can then be used in Tax Assist Rules to refine a product’s applicable tax. +* Added support for Vertex Flexible Fields. Vertex flexible fields allow merchants to send additional information to the tax engine, which can then be used in Tax Assist Rules to refine a product’s applicable tax. -* Several attributes are provided by default, including administrator-created Customer attributes, Address attributes, and Product attributes. Documentation is provided in the module’s README file on how integrators can add additional options to these attributes. +* Several attributes are provided by default, including administrator-created Customer attributes, Address attributes, and Product attributes. Documentation is provided in the module’s README file on how integrators can add additional options to these attributes. -* You can now add custom fields to the Vertex connector. +* You can now add custom fields to the Vertex connector. #### Yotpo @@ -177,830 +182,830 @@ We've fixed hundreds of issues in the Magento 2.3.3 core code. ### Installation, upgrade, deployment -* Magento font icons now load as expected when deployment optimization is implemented. +* Magento font icons now load as expected when deployment optimization is implemented. -* The short form versions of the `—lock-env` and `—lock-config` `bin/magento config:set` options now work as expected. *Fix submitted by Satya Prakash in pull request [22720](https://github.com/magento/magento2/pull/22720)*. [GitHub-22395](https://github.com/magento/magento2/issues/22395) +* The short form versions of the `—lock-env` and `—lock-config` `bin/magento config:set` options now work as expected. *Fix submitted by Satya Prakash in pull request [22720](https://github.com/magento/magento2/pull/22720)*. [GitHub-22395](https://github.com/magento/magento2/issues/22395) -* Magento now displays an exception message when an error occurs during static content deployment. Previously, if an error occurred, Magento showed the stack trace only. *Fix submitted by Ihor Sviziev in pull request [22884](https://github.com/magento/magento2/pull/22884)*. [GitHub-22882](https://github.com/magento/magento2/issues/22882) +* Magento now displays an exception message when an error occurs during static content deployment. Previously, if an error occurred, Magento showed the stack trace only. *Fix submitted by Ihor Sviziev in pull request [22884](https://github.com/magento/magento2/pull/22884)*. [GitHub-22882](https://github.com/magento/magento2/issues/22882) -* You can now use JSON to set a configuration value for a configuration option through the command line. *Fix submitted by Shikha Mishra in pull request [22513](https://github.com/magento/magento2/pull/22513)*. [GitHub-22396](https://github.com/magento/magento2/issues/22396) +* You can now use JSON to set a configuration value for a configuration option through the command line. *Fix submitted by Shikha Mishra in pull request [22513](https://github.com/magento/magento2/pull/22513)*. [GitHub-22396](https://github.com/magento/magento2/issues/22396) -* PHP unit tests no longer fail by default when Magento is installed from Composer. +* PHP unit tests no longer fail by default when Magento is installed from Composer. -* Removed the obsolete `system.xml` file from the `app/code/Magento/Theme/etc` directory. *Fix submitted by Alexander Taranovsky in pull request [23140](https://github.com/magento/magento2/pull/23140)*. [GitHub-23138](https://github.com/magento/magento2/issues/23138) +* Removed the obsolete `system.xml` file from the `app/code/Magento/Theme/etc` directory. *Fix submitted by Alexander Taranovsky in pull request [23140](https://github.com/magento/magento2/pull/23140)*. [GitHub-23138](https://github.com/magento/magento2/issues/23138) -* Magento now displays a more informative message when a data patch cannot be applied due to an exception. *Fix submitted by Ash Smith in pull request [23046](https://github.com/magento/magento2/pull/23046)*. [GitHub-23045](https://github.com/magento/magento2/issues/23045) +* Magento now displays a more informative message when a data patch cannot be applied due to an exception. *Fix submitted by Ash Smith in pull request [23046](https://github.com/magento/magento2/pull/23046)*. [GitHub-23045](https://github.com/magento/magento2/issues/23045) -* The static content deployment progress bar now works as expected. *Fix submitted by Amit Vishvakarma in pull request [23216](https://github.com/magento/magento2/pull/23216)*. [GitHub-23213](https://github.com/magento/magento2/issues/23213) +* The static content deployment progress bar now works as expected. *Fix submitted by Amit Vishvakarma in pull request [23216](https://github.com/magento/magento2/pull/23216)*. [GitHub-23213](https://github.com/magento/magento2/issues/23213) -* The `setup:upgrade` command now throws an exception if the `app:config:import` command fails. *Fix submitted by Simon Frost in pull request [23310](https://github.com/magento/magento2/pull/23310)*. +* The `setup:upgrade` command now throws an exception if the `app:config:import` command fails. *Fix submitted by Simon Frost in pull request [23310](https://github.com/magento/magento2/pull/23310)*. -* Fields that have been disabled through configuration settings (**Admin** > **Stores** > **Configuration** > **General** > **General** > **Store Information**) can no longer be overwritten from the Admin. *Fix submitted by Rafael Kassner in pull request [22891](https://github.com/magento/magento2/pull/22891)*. [GitHub-22890](https://github.com/magento/magento2/issues/22890) +* Fields that have been disabled through configuration settings (**Admin** > **Stores** > **Configuration** > **General** > **General** > **Store Information**) can no longer be overwritten from the Admin. *Fix submitted by Rafael Kassner in pull request [22891](https://github.com/magento/magento2/pull/22891)*. [GitHub-22890](https://github.com/magento/magento2/issues/22890) -* The Magento installation process no longer checks for `dev php` extension dependencies from non-root `composer.json` files. *Fix submitted by Oleksii Lisovyi in pull request [22116](https://github.com/magento/magento2/pull/22116)* [GitHub-21136](https://github.com/magento/magento2/issues/21136) +* The Magento installation process no longer checks for `dev php` extension dependencies from non-root `composer.json` files. *Fix submitted by Oleksii Lisovyi in pull request [22116](https://github.com/magento/magento2/pull/22116)* [GitHub-21136](https://github.com/magento/magento2/issues/21136) -* Parallel execution of static content deployment has been improved to prevent errors and make it more stable. *Fix submitted by David Alger in pull request [22607](https://github.com/magento/magento2/pull/22607)*. [GitHub-21852](https://github.com/magento/magento2/issues/21852) +* Parallel execution of static content deployment has been improved to prevent errors and make it more stable. *Fix submitted by David Alger in pull request [22607](https://github.com/magento/magento2/pull/22607)*. [GitHub-21852](https://github.com/magento/magento2/issues/21852) -* Magento now runs an additional check when determining the password hashing algorithm to use for the libsodium library to see if it supports `argon2id`. The `bin/magento` command did not run successfully if the version of libsodium that you were running did not include `argon2id` support. *Fix submitted by Matei Stefanescu in pull request [23866](https://github.com/magento/magento2/pull/23866)*. [GitHub-23405](https://github.com/magento/magento2/issues/23405) +* Magento now runs an additional check when determining the password hashing algorithm to use for the libsodium library to see if it supports `argon2id`. The `bin/magento` command did not run successfully if the version of libsodium that you were running did not include `argon2id` support. *Fix submitted by Matei Stefanescu in pull request [23866](https://github.com/magento/magento2/pull/23866)*. [GitHub-23405](https://github.com/magento/magento2/issues/23405) ### Backend -* The Magento Admin now loads without issue after you change the store domain or set cookies to a different domain. Previously, the page did not redirect as expected. +* The Magento Admin now loads without issue after you change the store domain or set cookies to a different domain. Previously, the page did not redirect as expected. -* The Admin no longer displays incorrect currency codes when the default base currency differs from the default website currency. +* The Admin no longer displays incorrect currency codes when the default base currency differs from the default website currency. -* The store view drop-down menu no longer displays unnecessary symbols. +* The store view drop-down menu no longer displays unnecessary symbols. ### Bundle products -* You can now successfully check out bundle products using the Braintree payment method with the payment method set to **Authorize and Capture**. +* You can now successfully check out bundle products using the Braintree payment method with the payment method set to **Authorize and Capture**. -* Discount coupons now work as expected for bundle products that include both virtual and simple products when the **Ship Bundle Items** setting is set to **Separately**. *Fix submitted by Nikolay Sumrak in pull request [22987](https://github.com/magento/magento2/pull/22987)*. +* Discount coupons now work as expected for bundle products that include both virtual and simple products when the **Ship Bundle Items** setting is set to **Separately**. *Fix submitted by Nikolay Sumrak in pull request [22987](https://github.com/magento/magento2/pull/22987)*. ### Cache -* Varnish cache support has been upgraded for compatibility with version 6.2.0. +* Varnish cache support has been upgraded for compatibility with version 6.2.0. -* Full-page cache no longer clears out the checkout session data on uncached pages when the `Magento_Persistent` module is disabled. [GitHub-21614](https://github.com/magento/magento2/issues/21614) +* Full-page cache no longer clears out the checkout session data on uncached pages when the `Magento_Persistent` module is disabled. [GitHub-21614](https://github.com/magento/magento2/issues/21614) -* Magento now displays simple products on the storefront after the cancellation of an order that contains the bundled simple product. Previously, products did not appear on the storefront after an order containing the bundle product to which the simple product belongs was canceled. +* Magento now displays simple products on the storefront after the cancellation of an order that contains the bundled simple product. Previously, products did not appear on the storefront after an order containing the bundle product to which the simple product belongs was canceled. -* The Varnish health check no longer fails to the presence of `id_prefix` in `env.php`. Previously, Varnish returned a `503 Backend fetch failed` error. *Fix submitted by Nazar Klovanych in pull request [22307](https://github.com/magento/magento2/pull/22307)*. [GitHub-22143](https://github.com/magento/magento2/issues/22143) +* The Varnish health check no longer fails to the presence of `id_prefix` in `env.php`. Previously, Varnish returned a `503 Backend fetch failed` error. *Fix submitted by Nazar Klovanych in pull request [22307](https://github.com/magento/magento2/pull/22307)*. [GitHub-22143](https://github.com/magento/magento2/issues/22143) ### Cart and checkout -* The REST calls for adding an item to a cart (`POST V1/guest-carts/:cartId/items` and `POST V1/guest-carts/:cartId/items`) now include the product price when a call returns the product from an already populated cart. Previously, the item price was not returned if that cart had been emptied before the call was made. +* The REST calls for adding an item to a cart (`POST V1/guest-carts/:cartId/items` and `POST V1/guest-carts/:cartId/items`) now include the product price when a call returns the product from an already populated cart. Previously, the item price was not returned if that cart had been emptied before the call was made. -* Magento now submits an order only once when an order is submitted using **Enter**. Previously, Magento submitted several `payment-information` requests, and several orders with the same quote ID were placed. +* Magento now submits an order only once when an order is submitted using **Enter**. Previously, Magento submitted several `payment-information` requests, and several orders with the same quote ID were placed. -* Products added to a shopping cart through REST now display correct product prices. Previously, the shopping cart displayed product prices of zero. [GitHub-2991](https://github.com/magento/magento2/issues/2991) +* Products added to a shopping cart through REST now display correct product prices. Previously, the shopping cart displayed product prices of zero. [GitHub-2991](https://github.com/magento/magento2/issues/2991) -* Magento now displays an informative message when an error is thrown after the user Internet connection has been reset after placing an order. +* Magento now displays an informative message when an error is thrown after the user Internet connection has been reset after placing an order. -* You can now add product quantities that require four digits to the shopping cart. Previously, Magento could not add four-digit product quantities to the cart. +* You can now add product quantities that require four digits to the shopping cart. Previously, Magento could not add four-digit product quantities to the cart. -* Administrators with appropriate permissions can now view the contents of a cart for a registered customer from the Admin customer edit interface. *Fix submitted by Rav in pull request [20918](https://github.com/magento/magento2/pull/20918)*. +* Administrators with appropriate permissions can now view the contents of a cart for a registered customer from the Admin customer edit interface. *Fix submitted by Rav in pull request [20918](https://github.com/magento/magento2/pull/20918)*. -* Magento now applies the sort preferences that you set in website scope configuration for a particular website to the layout of the checkout page. Previously, sort order for elements of this page was derived from the default configuration, not website-specific values. *Fix submitted by Karan Shah in pull request [22387](https://github.com/magento/magento2/pull/22387)*. [GitHub-22380](https://github.com/magento/magento2/issues/22380) +* Magento now applies the sort preferences that you set in website scope configuration for a particular website to the layout of the checkout page. Previously, sort order for elements of this page was derived from the default configuration, not website-specific values. *Fix submitted by Karan Shah in pull request [22387](https://github.com/magento/magento2/pull/22387)*. [GitHub-22380](https://github.com/magento/magento2/issues/22380) -* The Review & Payment section of the One Page Checkout no longer displays custom customer attribute code when a guest checks out. +* The Review & Payment section of the One Page Checkout no longer displays custom customer attribute code when a guest checks out. -* The checkout order summary now displays the correct number of ordered items. +* The checkout order summary now displays the correct number of ordered items. -* The minicart loader is now visible when you add a product to the minicart. *Fix submitted by Geeta Modi in pull request [23394](https://github.com/magento/magento2/pull/23394)*. [GitHub-23377](https://github.com/magento/magento2/issues/23377) +* The minicart loader is now visible when you add a product to the minicart. *Fix submitted by Geeta Modi in pull request [23394](https://github.com/magento/magento2/pull/23394)*. [GitHub-23377](https://github.com/magento/magento2/issues/23377) -* Magento no longer throws an array-to-string conversion error when a customer changes the country setting from one-page checkout. Instead, shipping method, tax values, and payment providers now change according to country selection. Previously, Magento displayed an error about array-to-string conversion. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-12612](https://github.com/magento/magento2/issues/12612) +* Magento no longer throws an array-to-string conversion error when a customer changes the country setting from one-page checkout. Instead, shipping method, tax values, and payment providers now change according to country selection. Previously, Magento displayed an error about array-to-string conversion. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-12612](https://github.com/magento/magento2/issues/12612) -* Magento now validates the VAT number as expected during checkout when the customer address region field is empty. Previously, Magento threw an informative error: `Internal Error. Details are available in Magento log file` if the `regionId` was not set. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-22556](https://github.com/magento/magento2/issues/22556). +* Magento now validates the VAT number as expected during checkout when the customer address region field is empty. Previously, Magento threw an informative error: `Internal Error. Details are available in Magento log file` if the `regionId` was not set. *Fix submitted by Grzegorz Bogusz in pull request [22558](https://github.com/magento/magento2/pull/22558)*. [GitHub-22556](https://github.com/magento/magento2/issues/22556). -* Magento now creates an invoice for an order that has a zero subtotal when **Automatically Invoice All Items** is set to **yes**. *Fix submitted by Eden Duong in pull request [23688](https://github.com/magento/magento2/pull/23688)*. [GitHub-23211](https://github.com/magento/magento2/issues/23211) +* Magento now creates an invoice for an order that has a zero subtotal when **Automatically Invoice All Items** is set to **yes**. *Fix submitted by Eden Duong in pull request [23688](https://github.com/magento/magento2/pull/23688)*. [GitHub-23211](https://github.com/magento/magento2/issues/23211) ### Cart Price rules -* Coupon codes now work as expected. Previously, coupons sent for specific dates in a cart price rule were not applied. *Fix submitted by Adarsh Shukla in pull request [22718](https://github.com/magento/magento2/pull/22718)*. [GitHub-18183](https://github.com/magento/magento2/issues/18183) +* Coupon codes now work as expected. Previously, coupons sent for specific dates in a cart price rule were not applied. *Fix submitted by Adarsh Shukla in pull request [22718](https://github.com/magento/magento2/pull/22718)*. [GitHub-18183](https://github.com/magento/magento2/issues/18183) ### Catalog -* You can now use the Select all option when creating a mass-update action when the total number of products exceeds the number of displayed products per page. Previously, Magento only selected and applied mass-update actions to the number of products that were displayed per page. *Fix submitted by Shikha Mishra in pull request [22704](https://github.com/magento/magento2/pull/22704)*. [GitHub-22004](https://github.com/magento/magento2/issues/22004) +* You can now use the Select all option when creating a mass-update action when the total number of products exceeds the number of displayed products per page. Previously, Magento only selected and applied mass-update actions to the number of products that were displayed per page. *Fix submitted by Shikha Mishra in pull request [22704](https://github.com/magento/magento2/pull/22704)*. [GitHub-22004](https://github.com/magento/magento2/issues/22004) -* Magento no longer throws an error when you run the `php bin/magento catalog:images:resize` command on a deployment that contains images with a zero byte size. Instead, the operation skips the offending file and updates the log file to indicate where the problematic file resides. [GitHub-8204](https://github.com/magento/magento2/issues/8204) +* Magento no longer throws an error when you run the `php bin/magento catalog:images:resize` command on a deployment that contains images with a zero byte size. Instead, the operation skips the offending file and updates the log file to indicate where the problematic file resides. [GitHub-8204](https://github.com/magento/magento2/issues/8204) -* You can now successfully clone a product with a linked product. Previously, cloning failed and Magento displayed this error: `The linked products data is invalid. Verify the data and try again`. +* You can now successfully clone a product with a linked product. Previously, cloning failed and Magento displayed this error: `The linked products data is invalid. Verify the data and try again`. -* Magento disables the **New Category** button on the Product page if the user is an administrator with restricted permissions for managing categories. Previously, the button was active, and Magento threw a 403 error if the restricted user clicked the button to create a category. +* Magento disables the **New Category** button on the Product page if the user is an administrator with restricted permissions for managing categories. Previously, the button was active, and Magento threw a 403 error if the restricted user clicked the button to create a category. -* The Items Ordered table (**Admin** > **Sales** > **Orders**) no longer displays bundle option discount amounts with tags. +* The Items Ordered table (**Admin** > **Sales** > **Orders**) no longer displays bundle option discount amounts with tags. -* Magento now creates resized images for all products for which images exist and lists the errors when you run the `php bin/catalog:image:resize` command. Previously, execution halted at the first missing image. +* Magento now creates resized images for all products for which images exist and lists the errors when you run the `php bin/catalog:image:resize` command. Previously, execution halted at the first missing image. -* You can now add a bundle product from a wishlist to your shopping cart. Previously, Magento threw a fatal error. +* You can now add a bundle product from a wishlist to your shopping cart. Previously, Magento threw a fatal error. -* The `\Magento\Catalog\Model\CategoryList::getList` operation now returns a sorted list of categories as expected. +* The `\Magento\Catalog\Model\CategoryList::getList` operation now returns a sorted list of categories as expected. -* The Admin Product Edit page and Customers page now load without JavaScript errors. [GitHub-5967](https://github.com/magento/magento2/issues/5967) +* The Admin Product Edit page and Customers page now load without JavaScript errors. [GitHub-5967](https://github.com/magento/magento2/issues/5967) -* A duplicated product that has been set to **Is in Stock** and **Enabled** now appears as expected on the storefront. +* A duplicated product that has been set to **Is in Stock** and **Enabled** now appears as expected on the storefront. -* Custom options prices that are assigned to a website scope no longer rewrite prices on all scopes. +* Custom options prices that are assigned to a website scope no longer rewrite prices on all scopes. -* Videos in product descriptions now appear as they do in the Admin WYSIWYG editor. Previously, videos in the storefront product descriptions had the incorrect height. +* Videos in product descriptions now appear as they do in the Admin WYSIWYG editor. Previously, videos in the storefront product descriptions had the incorrect height. -* Sample data now scales correctly when resized in mobile view. +* Sample data now scales correctly when resized in mobile view. -* Customers no longer receive product alerts after they have unsubscribed from product alerts. Previously, the product alert was not removed from the `product_alert_stock` table as expected, but Magento still displayed this message on the storefront: **You will no longer receive stock alerts for this product**. *Fix submitted by yuriichayka in pull request [23459](https://github.com/magento/magento2/pull/23459)*. [GitHub-22814](https://github.com/magento/magento2/issues/22814) +* Customers no longer receive product alerts after they have unsubscribed from product alerts. Previously, the product alert was not removed from the `product_alert_stock` table as expected, but Magento still displayed this message on the storefront: **You will no longer receive stock alerts for this product**. *Fix submitted by yuriichayka in pull request [23459](https://github.com/magento/magento2/pull/23459)*. [GitHub-22814](https://github.com/magento/magento2/issues/22814) -* Magento no longer automatically assigns a storeID to a saved product that is not assigned to a store. *Fix submitted by manishgoswamij in pull request [23500](https://github.com/magento/magento2/pull/23500)*. [GitHub-23383](https://github.com/magento/magento2/issues/23383), [GitHub-23500](https://github.com/magento/magento2/issues/23500) +* Magento no longer automatically assigns a storeID to a saved product that is not assigned to a store. *Fix submitted by manishgoswamij in pull request [23500](https://github.com/magento/magento2/pull/23500)*. [GitHub-23383](https://github.com/magento/magento2/issues/23383), [GitHub-23500](https://github.com/magento/magento2/issues/23500) -* Corrected misspellings in the `lib/web/css/docs/source/_actions-toolbar.less` and `lib/web/css/docs/source/_layout.less` files. *Fix submitted by Prashant Sharma in pull request [22624](https://github.com/magento/magento2/pull/22624)*. +* Corrected misspellings in the `lib/web/css/docs/source/_actions-toolbar.less` and `lib/web/css/docs/source/_layout.less` files. *Fix submitted by Prashant Sharma in pull request [22624](https://github.com/magento/magento2/pull/22624)*. -* Magento now displays the currency code as expected in the Cost column of the Admin catalog product list. *Fix submitted by Vlad Veselov in pull request [22739](https://github.com/magento/magento2/pull/22739)*. [GitHub-20906](https://github.com/magento/magento2/issues/20906) +* Magento now displays the currency code as expected in the Cost column of the Admin catalog product list. *Fix submitted by Vlad Veselov in pull request [22739](https://github.com/magento/magento2/pull/22739)*. [GitHub-20906](https://github.com/magento/magento2/issues/20906) -* The **Add to Cart** button is no longer visible to users who do not have Add to Cart category permissions. Previously, guest users could add items to the cart without being granted Add to Cart permission. +* The **Add to Cart** button is no longer visible to users who do not have Add to Cart category permissions. Previously, guest users could add items to the cart without being granted Add to Cart permission. -* We’ve refined how Magento validates partial permissions. Design edit permissions for categories, products, and CMS pages are now validated for each endpoint (web API and other) outside of the related model-layer classes. The web API now returns an error when design-related fields are being overridden. Previously, this behavior was ignored. +* We’ve refined how Magento validates partial permissions. Design edit permissions for categories, products, and CMS pages are now validated for each endpoint (web API and other) outside of the related model-layer classes. The web API now returns an error when design-related fields are being overridden. Previously, this behavior was ignored. -* Product availability is no longer tied to events associated with the categories to which they belong. Instead, Magento now uses the current category event for the page on which the product is displayed. Previously, products that were tied to categories with no events could be purchased, and products that were tied to expired events could not be purchased. +* Product availability is no longer tied to events associated with the categories to which they belong. Instead, Magento now uses the current category event for the page on which the product is displayed. Previously, products that were tied to categories with no events could be purchased, and products that were tied to expired events could not be purchased. -* Magento now renames images with the same name in the `pub/media/catalog/category` directory. Previously, images with the same name that belonged to different categories were not uploaded properly. [GitHub-23376](https://github.com/magento/magento2/issues/23376) +* Magento now renames images with the same name in the `pub/media/catalog/category` directory. Previously, images with the same name that belonged to different categories were not uploaded properly. [GitHub-23376](https://github.com/magento/magento2/issues/23376) -* Magento now displays a validation alert message when you click **Add Attribute**, and then click **Add selected** without first selecting an attribute. Previously, when you clicked **Add selected**, Magento selected all possible attributes. *Fix submitted by Mahesh Singh in pull request [22724](https://github.com/magento/magento2/pull/22724)*. [GitHub-22639](https://github.com/magento/magento2/issues/22639) +* Magento now displays a validation alert message when you click **Add Attribute**, and then click **Add selected** without first selecting an attribute. Previously, when you clicked **Add selected**, Magento selected all possible attributes. *Fix submitted by Mahesh Singh in pull request [22724](https://github.com/magento/magento2/pull/22724)*. [GitHub-22639](https://github.com/magento/magento2/issues/22639) -* The catalog products filter now filters on enabled or disabled status as expected. Previously, the SQL generated by the `Magento\Catalog\Ui\DataProvider\Product\ProductCollection` class omitted the `attribute_id` condition, which resulted in any attribute of the same type (`int` or `varchar`, for example) matching the query if the values were the same. *Fix submitted by Matti Vapa in pull request [23444](https://github.com/magento/magento2/pull/23444)*. [GitHub-23435](https://github.com/magento/magento2/issues/23435) +* The catalog products filter now filters on enabled or disabled status as expected. Previously, the SQL generated by the `Magento\Catalog\Ui\DataProvider\Product\ProductCollection` class omitted the `attribute_id` condition, which resulted in any attribute of the same type (`int` or `varchar`, for example) matching the query if the values were the same. *Fix submitted by Matti Vapa in pull request [23444](https://github.com/magento/magento2/pull/23444)*. [GitHub-23435](https://github.com/magento/magento2/issues/23435) -* `ProductRepository` now updates and saves existing products with changed SKUs as expected. Previously, Magento threw an error, and you were not able to save the product. *Fix submitted by Pavel Bystritsky in pull request [22933](https://github.com/magento/magento2/pull/22933)*. [GitHub-22870](https://github.com/magento/magento2/issues/22870) +* `ProductRepository` now updates and saves existing products with changed SKUs as expected. Previously, Magento threw an error, and you were not able to save the product. *Fix submitted by Pavel Bystritsky in pull request [22933](https://github.com/magento/magento2/pull/22933)*. [GitHub-22870](https://github.com/magento/magento2/issues/22870) -* You can now change the position of the last two related products in a list of related products that spans multiple pages. Previously, drag and drop functionality allowed you to change only the position of products on the current page. *Fix submitted by Maxim Tkachuk in pull request [22984](https://github.com/magento/magento2/pull/22984)*. [GitHub-14071](https://github.com/magento/magento2/issues/14071) +* You can now change the position of the last two related products in a list of related products that spans multiple pages. Previously, drag and drop functionality allowed you to change only the position of products on the current page. *Fix submitted by Maxim Tkachuk in pull request [22984](https://github.com/magento/magento2/pull/22984)*. [GitHub-14071](https://github.com/magento/magento2/issues/14071) -* The **Select from gallery** button on the category edit page now works as expected. Previously, the image was not saved, and Magento did not display an image in the image preview. *Fix submitted by Bartłomiej Szubert in pull request [21131](https://github.com/magento/magento2/pull/21131)*. [GitHub-19872](https://github.com/magento/magento2/issues/19872), [GitHub-22092](https://github.com/magento/magento2/issues/22092) +* The **Select from gallery** button on the category edit page now works as expected. Previously, the image was not saved, and Magento did not display an image in the image preview. *Fix submitted by Bartłomiej Szubert in pull request [21131](https://github.com/magento/magento2/pull/21131)*. [GitHub-19872](https://github.com/magento/magento2/issues/19872), [GitHub-22092](https://github.com/magento/magento2/issues/22092) ### CatalogInventory -* The status (in stock or out of stock) of a configurable product in the Admin now matches the status displayed on the storefront. +* The status (in stock or out of stock) of a configurable product in the Admin now matches the status displayed on the storefront. -* Magento now correctly updates the `qty_backordered` value in the `sales_order_item` table after you create an order that contains a backordered item. +* Magento now correctly updates the `qty_backordered` value in the `sales_order_item` table after you create an order that contains a backordered item. -* Stock status records for all products are now added as expected to the `cataloginventory_stock_status` table after a partial re-indexing. +* Stock status records for all products are now added as expected to the `cataloginventory_stock_status` table after a partial re-indexing. ### Catalog rule -* The CatalogRule module now handles discrepancies between the Magento time zone offset and the system time zone offset (which is in UTC). Previously, when the Magento time zone offset was greater than the system time zone offset, the active ranges set for special prices were inaccurate. This is a consequence of how catalog price rules special prices are stored and updated. (Catalog price rules special prices are stored in the `catalogrule_product_price` table. This table’s daily update is triggered by the `catalogrule_apply_all` cron job, which is scheduled at 01:00 every day. Cron schedule times are scheduled in Magento timezone.) +* The CatalogRule module now handles discrepancies between the Magento time zone offset and the system time zone offset (which is in UTC). Previously, when the Magento time zone offset was greater than the system time zone offset, the active ranges set for special prices were inaccurate. This is a consequence of how catalog price rules special prices are stored and updated. (Catalog price rules special prices are stored in the `catalogrule_product_price` table. This table’s daily update is triggered by the `catalogrule_apply_all` cron job, which is scheduled at 01:00 every day. Cron schedule times are scheduled in Magento timezone.) ### Cleanup and simple code refactoring -* Corrected poor positioning of the Shop By menu on product pages in mobile view on an iPhone 5. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) +* Corrected poor positioning of the Shop By menu on product pages in mobile view on an iPhone 5. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) -* Corrected misalignment of Wishlist and Compare icons on the product page. *Fix submitted by sanjaychouhan-webkul in pull request [22532](https://github.com/magento/magento2/pull/22532)*. [GitHub-22527](https://github.com/magento/magento2/issues/22527) +* Corrected misalignment of Wishlist and Compare icons on the product page. *Fix submitted by sanjaychouhan-webkul in pull request [22532](https://github.com/magento/magento2/pull/22532)*. [GitHub-22527](https://github.com/magento/magento2/issues/22527) -* Store view-specific labels are no longer truncated in the left navigation menu of the Cart Price Rule Store View Specific Labels window (**Marketing** > **Cart Price rule** > **Labels** ). *Fix submitted by Sudhanshu Bajaj in pull request [22423](https://github.com/magento/magento2/pull/22423)*. [GitHub-22406](https://github.com/magento/magento2/issues/22406) +* Store view-specific labels are no longer truncated in the left navigation menu of the Cart Price Rule Store View Specific Labels window (**Marketing** > **Cart Price rule** > **Labels** ). *Fix submitted by Sudhanshu Bajaj in pull request [22423](https://github.com/magento/magento2/pull/22423)*. [GitHub-22406](https://github.com/magento/magento2/issues/22406) -* Added missing header to the Customer Sales Order table and corrected multiple typos. *Fix submitted by Vishal Sutariya in pull request [22643](https://github.com/magento/magento2/pull/22643)*. [GitHub-22641](https://github.com/magento/magento2/issues/22641) +* Added missing header to the Customer Sales Order table and corrected multiple typos. *Fix submitted by Vishal Sutariya in pull request [22643](https://github.com/magento/magento2/pull/22643)*. [GitHub-22641](https://github.com/magento/magento2/issues/22641) -* Improved awkward formatting of the customer account create page in mobile view. *Fix submitted by Arvinda Kumar in pull request [22656](https://github.com/magento/magento2/pull/22656)*. [GitHub-22647](https://github.com/magento/magento2/issues/22647) +* Improved awkward formatting of the customer account create page in mobile view. *Fix submitted by Arvinda Kumar in pull request [22656](https://github.com/magento/magento2/pull/22656)*. [GitHub-22647](https://github.com/magento/magento2/issues/22647) -* The checkbox on the Add New Tax Rule form has been redesigned to match the Admin checkbox. *Fix submitted by Surabhi Srivastava in pull request [22655](https://github.com/magento/magento2/pull/22655)*. [GitHub-22640](https://github.com/magento/magento2/issues/22640) +* The checkbox on the Add New Tax Rule form has been redesigned to match the Admin checkbox. *Fix submitted by Surabhi Srivastava in pull request [22655](https://github.com/magento/magento2/pull/22655)*. [GitHub-22640](https://github.com/magento/magento2/issues/22640) -* Corrected typo in CONTRIBUTING.md. *Fix submitted by Raul E Watson in pull request [23244](https://github.com/magento/magento2/pull/23244)*. +* Corrected typo in CONTRIBUTING.md. *Fix submitted by Raul E Watson in pull request [23244](https://github.com/magento/magento2/pull/23244)*. -* Corrected poor spacing in the Gift message section of the My Account page. *Fix submitted by Amjad M in pull request [23226](https://github.com/magento/magento2/pull/23226)*. [GitHub-22950](https://github.com/magento/magento2/issues/22950) +* Corrected poor spacing in the Gift message section of the My Account page. *Fix submitted by Amjad M in pull request [23226](https://github.com/magento/magento2/pull/23226)*. [GitHub-22950](https://github.com/magento/magento2/issues/22950) -* The asterisk sign indicating a required field is now consistently positioned throughout the Admin. *Fix submitted by sanjaychouhan-webkul in pull request [22800](https://github.com/magento/magento2/pull/22800)*. [GitHub-22638](https://github.com/magento/magento2/issues/22638) +* The asterisk sign indicating a required field is now consistently positioned throughout the Admin. *Fix submitted by sanjaychouhan-webkul in pull request [22800](https://github.com/magento/magento2/pull/22800)*. [GitHub-22638](https://github.com/magento/magento2/issues/22638) -* Corrected misspelling in the `app/code/Magento/Ui/Block/Wrapper.php` file. *Fix submitted by Ravi Chandra in pull request [23335](https://github.com/magento/magento2/pull/23335)*. +* Corrected misspelling in the `app/code/Magento/Ui/Block/Wrapper.php` file. *Fix submitted by Ravi Chandra in pull request [23335](https://github.com/magento/magento2/pull/23335)*. -* Corrected typo in the tooltip toggle selector. *Fix submitted by Karla Saaremäe in pull request [23248](https://github.com/magento/magento2/pull/23248)*. +* Corrected typo in the tooltip toggle selector. *Fix submitted by Karla Saaremäe in pull request [23248](https://github.com/magento/magento2/pull/23248)*. -* Corrected misalignment of the Compare Products and My Wish List counters in the sidebar. *Fix submitted by sanjaychouhan-webkul in pull request [22742](https://github.com/magento/magento2/pull/22742)*. [GitHub-22676](https://github.com/magento/magento2/issues/22676) +* Corrected misalignment of the Compare Products and My Wish List counters in the sidebar. *Fix submitted by sanjaychouhan-webkul in pull request [22742](https://github.com/magento/magento2/pull/22742)*. [GitHub-22676](https://github.com/magento/magento2/issues/22676) -* Corrected scrolling behavior on Product page. Previously, after you clicked on a product reviews count on a product page, you had to scroll in order to see customer reviews. *Fix submitted by sanjaychouhan-webkul in pull request [22794](https://github.com/magento/magento2/pull/22794)*. [GitHub-21558](https://github.com/magento/magento2/issues/21558) +* Corrected scrolling behavior on Product page. Previously, after you clicked on a product reviews count on a product page, you had to scroll in order to see customer reviews. *Fix submitted by sanjaychouhan-webkul in pull request [22794](https://github.com/magento/magento2/pull/22794)*. [GitHub-21558](https://github.com/magento/magento2/issues/21558) -* Magento now displays the cursor to the right of the search keyword box as expected after multiple clicks on the search field in mobile view. *Fix submitted by sanjaychouhan-webkul in pull request [22795](https://github.com/magento/magento2/pull/22795)*. [GitHub-22736](https://github.com/magento/magento2/issues/22736) +* Magento now displays the cursor to the right of the search keyword box as expected after multiple clicks on the search field in mobile view. *Fix submitted by sanjaychouhan-webkul in pull request [22795](https://github.com/magento/magento2/pull/22795)*. [GitHub-22736](https://github.com/magento/magento2/issues/22736) -* Refactored the page title of the billing agreements page. *Fix submitted by Amit Vishvakarma in pull request [22876](https://github.com/magento/magento2/pull/22876)*. [GitHub-22875](https://github.com/magento/magento2/issues/22875) +* Refactored the page title of the billing agreements page. *Fix submitted by Amit Vishvakarma in pull request [22876](https://github.com/magento/magento2/pull/22876)*. [GitHub-22875](https://github.com/magento/magento2/issues/22875) -* The Shop By Menu no longer overlays the **Sort By** label on the product listing page. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) +* The Shop By Menu no longer overlays the **Sort By** label on the product listing page. *Fix submitted by Arvinda Kumar in pull request [20135](https://github.com/magento/magento2/pull/20135)*. [GitHub-20124](https://github.com/magento/magento2/issues/20124) -* Adjusted the position of the store-view label on **Admin** > **Content** > **Design** > **Configuration** > **Theme**. *Fix submitted by Kajal Solanki in pull request [22926](https://github.com/magento/magento2/pull/22926)*. [GitHub-22924](https://github.com/magento/magento2/issues/22924) +* Adjusted the position of the store-view label on **Admin** > **Content** > **Design** > **Configuration** > **Theme**. *Fix submitted by Kajal Solanki in pull request [22926](https://github.com/magento/magento2/pull/22926)*. [GitHub-22924](https://github.com/magento/magento2/issues/22924) -* Fixed spacing issue on **Admin** > **System** > **Import**. *Fix submitted by Kajal Solanki in pull request [21128](https://github.com/magento/magento2/pull/21128)*. +* Fixed spacing issue on **Admin** > **System** > **Import**. *Fix submitted by Kajal Solanki in pull request [21128](https://github.com/magento/magento2/pull/21128)*. -* Fixed misspelling in the `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` file. *Fix submitted by Ravi Chandra in pull request [23366](https://github.com/magento/magento2/pull/23366)*. +* Fixed misspelling in the `app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php` file. *Fix submitted by Ravi Chandra in pull request [23366](https://github.com/magento/magento2/pull/23366)*. -* Removed unnecessary `` element from the **Test connection** button. *Fix submitted by Shankar Konar in pull request [23367](https://github.com/magento/magento2/pull/23367)*. +* Removed unnecessary `` element from the **Test connection** button. *Fix submitted by Shankar Konar in pull request [23367](https://github.com/magento/magento2/pull/23367)*. -* The `lib/internal/Magento/Framework/Mview/View.php` file has been refactored to improve readability. *Fix submitted by Lukasz Bajsarowicz in pull request [23240](https://github.com/magento/magento2/pull/23240)*. +* The `lib/internal/Magento/Framework/Mview/View.php` file has been refactored to improve readability. *Fix submitted by Lukasz Bajsarowicz in pull request [23240](https://github.com/magento/magento2/pull/23240)*. ### CMS content -* Corrected alignment of the search suggestion panel with the **Advance reporting** button. *Fix submitted by webkul-ajaysaini in pull request [22520](https://github.com/magento/magento2/pull/22520)*. [GitHub-22506](https://github.com/magento/magento2/issues/22506) +* Corrected alignment of the search suggestion panel with the **Advance reporting** button. *Fix submitted by webkul-ajaysaini in pull request [22520](https://github.com/magento/magento2/pull/22520)*. [GitHub-22506](https://github.com/magento/magento2/issues/22506) -* You can now remove text that is placed adjacent to a TinyMCE4 widget. +* You can now remove text that is placed adjacent to a TinyMCE4 widget. ### Configurable products -* Magento now validates the uniqueness of attribute option values during product creation. Previously, Magento did not save the product and displayed this error: `The value of Admin must be unique`. +* Magento now validates the uniqueness of attribute option values during product creation. Previously, Magento did not save the product and displayed this error: `The value of Admin must be unique`. -* The design of the tax rule form check box now matches the Admin checkbox design. +* The design of the tax rule form check box now matches the Admin checkbox design. -* The configurable product gallery now displays images in the correct order when the image list has more than 10 images. The correct order complies with the order assigned in the Admin. *Fix submitted by Mateusz Wira in pull request [22287](https://github.com/magento/magento2/pull/22287)*. [GitHub-22249](https://github.com/magento/magento2/issues/22249) +* The configurable product gallery now displays images in the correct order when the image list has more than 10 images. The correct order complies with the order assigned in the Admin. *Fix submitted by Mateusz Wira in pull request [22287](https://github.com/magento/magento2/pull/22287)*. [GitHub-22249](https://github.com/magento/magento2/issues/22249) -* You can now use the `POST V1/configurable-products/:sku/child` call to assign positions to configurable product attributes as expected. Previously, when you use REST to assign positions to configurable product attributes, the position value was overwritten after you linked simple products to the configurable product. +* You can now use the `POST V1/configurable-products/:sku/child` call to assign positions to configurable product attributes as expected. Previously, when you use REST to assign positions to configurable product attributes, the position value was overwritten after you linked simple products to the configurable product. -* Setting the **Update Product Preview Image** to **no** now works as expected. Previously, when you clicked on a size or image that represented another variation for a configurable product, Magento displayed the image for one of the simple products associated with the configurable product. *Fix submitted by Ravi Chandra in pull request [19184](https://github.com/magento/magento2/pull/19184)*. [GitHub-16446](https://github.com/magento/magento2/issues/16446) +* Setting the **Update Product Preview Image** to **no** now works as expected. Previously, when you clicked on a size or image that represented another variation for a configurable product, Magento displayed the image for one of the simple products associated with the configurable product. *Fix submitted by Ravi Chandra in pull request [19184](https://github.com/magento/magento2/pull/19184)*. [GitHub-16446](https://github.com/magento/magento2/issues/16446) -* The `POST V1/configurable-products/:sku/options` call now adds attribute options to a configurable product as expected. This resolves issues previously caused by the MySQL table imposing a unique constraint on `product_id` and `attribute_id` values. *Fix submitted by Lieven Pouwelse in pull request [23529](https://github.com/magento/magento2/pull/23529)*. [GitHub-9798](https://github.com/magento/magento2/issues/9798) +* The `POST V1/configurable-products/:sku/options` call now adds attribute options to a configurable product as expected. This resolves issues previously caused by the MySQL table imposing a unique constraint on `product_id` and `attribute_id` values. *Fix submitted by Lieven Pouwelse in pull request [23529](https://github.com/magento/magento2/pull/23529)*. [GitHub-9798](https://github.com/magento/magento2/issues/9798) ### Coupon -* The **Apply** button now functions as expected when you create a new order and apply a coupon from the Admin. Previously, clicking **Apply** removed the coupon instead of applying it. *Fix submitted by Gaurav Agarwal in pull request [23250](https://github.com/magento/magento2/pull/23250)*. [GitHub-23238](https://github.com/magento/magento2/issues/23238) +* The **Apply** button now functions as expected when you create a new order and apply a coupon from the Admin. Previously, clicking **Apply** removed the coupon instead of applying it. *Fix submitted by Gaurav Agarwal in pull request [23250](https://github.com/magento/magento2/pull/23250)*. [GitHub-23238](https://github.com/magento/magento2/issues/23238) ### Cron -* Runtime exception handling for cron jobs has been improved. Now, when an exception occurs, the current run is marked as **failed** in the `cron_schedule` table. Then, when the next run completes correctly, Magento updates job status at the end of the `cron_schedule` table. Previously, when a job failed, the `cron_schedule` table was filled with pending jobs; the `indexer_update_all_views` job was not run; no output was sent to the `var/log/cron.log` file, and no status updates were appended to the `cron_schedule` table. +* Runtime exception handling for cron jobs has been improved. Now, when an exception occurs, the current run is marked as **failed** in the `cron_schedule` table. Then, when the next run completes correctly, Magento updates job status at the end of the `cron_schedule` table. Previously, when a job failed, the `cron_schedule` table was filled with pending jobs; the `indexer_update_all_views` job was not run; no output was sent to the `var/log/cron.log` file, and no status updates were appended to the `cron_schedule` table. -* Cron jobs are no longer duplicated. Previously, after a cron job was run, Magento cleared the cache and processed the job again. *Fix submitted by Douglas Radburn in pull request [23312](https://github.com/magento/magento2/pull/23312)*. +* Cron jobs are no longer duplicated. Previously, after a cron job was run, Magento cleared the cache and processed the job again. *Fix submitted by Douglas Radburn in pull request [23312](https://github.com/magento/magento2/pull/23312)*. -* Consumers run from `cron` no longer create deadlocks in the database. +* Consumers run from `cron` no longer create deadlocks in the database. -* The `magento_newrelicreporting_cron` cron job now successfully completes as expected. Previously, `magento_newrelicreporting_cron` threw this error: `Warning: Invalid argument supplied for foreach() in /var/www/shop_test/src/www/vendor/magento/module-configurable-product/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php on line 83`. +* The `magento_newrelicreporting_cron` cron job now successfully completes as expected. Previously, `magento_newrelicreporting_cron` threw this error: `Warning: Invalid argument supplied for foreach() in /var/www/shop_test/src/www/vendor/magento/module-configurable-product/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php on line 83`. ### Customer -* Custom customer address attributes are populated with the values that have been assigned for the selected address when the **Same As Billing Address** setting is disabled. Previously, when a merchant tried to change an address while creating an order from the Admin, the drop-down menu of available addresses was not populated. +* Custom customer address attributes are populated with the values that have been assigned for the selected address when the **Same As Billing Address** setting is disabled. Previously, when a merchant tried to change an address while creating an order from the Admin, the drop-down menu of available addresses was not populated. * The account status list now updates as expected to correctly indicate the account lock status after `cron` is run. Previously, this list displayed status as unlocked only. -* Import checks now finish successfully when the csv file contains a customer `gender` field. Previously, Magento threw this error: `Value for gender attribute contains incorrect value, see acceptable values on settings specified for Admin in row(s): 1`. +* Import checks now finish successfully when the csv file contains a customer `gender` field. Previously, Magento threw this error: `Value for gender attribute contains incorrect value, see acceptable values on settings specified for Admin in row(s): 1`. -* Custom customer attributes are now always displayed in the Admin customer create and edit forms. Previously, the Admin did not display these attributes unless they were configured to show on either the Customer Registration or Customer Account Edit forms. [GitHub-14456](https://github.com/magento/magento2/issues/14456) +* Custom customer attributes are now always displayed in the Admin customer create and edit forms. Previously, the Admin did not display these attributes unless they were configured to show on either the Customer Registration or Customer Account Edit forms. [GitHub-14456](https://github.com/magento/magento2/issues/14456) -* You can now create an order from the Admin when you have a customer segment for customers with 0 or more orders. Previously, if you had a customer segment for customers with 0 or more orders, an SQL error occurred when you tried to create an order in the Admin. +* You can now create an order from the Admin when you have a customer segment for customers with 0 or more orders. Previously, if you had a customer segment for customers with 0 or more orders, an SQL error occurred when you tried to create an order in the Admin. -* You can now create an order from the Admin with a customer segment based on zero or more orders and the table prefix is specified. Previously, Magento threw an error when you tried to create an order from the Admin under these conditions. +* You can now create an order from the Admin with a customer segment based on zero or more orders and the table prefix is specified. Previously, Magento threw an error when you tried to create an order from the Admin under these conditions. -* The **Phone Number** field is now marked as required on the My account page. +* The **Phone Number** field is now marked as required on the My account page. -* Magento no longer displays editable text fields for customer phone numbers and zip codes if customers have not saved an address. *Fix submitted by Kazim Noorani in pull request [23494](https://github.com/magento/magento2/pull/23494)*. +* Magento no longer displays editable text fields for customer phone numbers and zip codes if customers have not saved an address. *Fix submitted by Kazim Noorani in pull request [23494](https://github.com/magento/magento2/pull/23494)*. -* Magento no longer duplicates the state/province fields of customer addresses in Admin forms. *Fix submitted by Shikha Mishra in pull request [22637](https://github.com/magento/magento2/pull/22637)*. [GitHub-22484](https://github.com/magento/magento2/issues/22484) +* Magento no longer duplicates the state/province fields of customer addresses in Admin forms. *Fix submitted by Shikha Mishra in pull request [22637](https://github.com/magento/magento2/pull/22637)*. [GitHub-22484](https://github.com/magento/magento2/issues/22484) -* Newly created customer accounts now require confirmation. Previously, Magento directly confirmed the new account even if the customer never logged in or confirmed the account. *Fix submitted by Maksym Novik in pull request [21394](https://github.com/magento/magento2/pull/21394)*. [GitHub-14492](https://github.com/magento/magento2/issues/14492) +* Newly created customer accounts now require confirmation. Previously, Magento directly confirmed the new account even if the customer never logged in or confirmed the account. *Fix submitted by Maksym Novik in pull request [21394](https://github.com/magento/magento2/pull/21394)*. [GitHub-14492](https://github.com/magento/magento2/issues/14492) ### Custom customer attributes -* Custom customer address attribute values are populated as expected when an administrator changes a customer address during order creation from the Admin. Previously, the custom attribute drop-down was empty. +* Custom customer address attribute values are populated as expected when an administrator changes a customer address during order creation from the Admin. Previously, the custom attribute drop-down was empty. -* You can now edit a customer address from the Admin (**Admin** > **Customer** > **Address** > **Edit Address**) when the customer address attribute is of type `file` or `image`. Previously, Magento did not display the Edit Address form when you clicked on **Edit Address**. +* You can now edit a customer address from the Admin (**Admin** > **Customer** > **Address** > **Edit Address**) when the customer address attribute is of type `file` or `image`. Previously, Magento did not display the Edit Address form when you clicked on **Edit Address**. ### Database media storage -* The PDF logo file is now database-aware. Consequently, logo images always appear on PDF invoices, even after the local `pub/media` directory is cleared. *Fix submitted by gwharton in pull request [23752](https://github.com/magento/magento2/pull/23752)*. [GitHub-23751](https://github.com/magento/magento2/issues/23751) +* The PDF logo file is now database-aware. Consequently, logo images always appear on PDF invoices, even after the local `pub/media` directory is cleared. *Fix submitted by gwharton in pull request [23752](https://github.com/magento/magento2/pull/23752)*. [GitHub-23751](https://github.com/magento/magento2/issues/23751) -* The `bin/magento catalog:images:resize` command is now database-media-storage-mode aware. As a result, resized images are now extracted from the database if they don’t exist locally prior to resizing, and are now stored back into the database once the resize operation completes. *Fix submitted by gwharton in pull request [23598](https://github.com/magento/magento2/pull/23598)*. [GitHub-23595](https://github.com/magento/magento2/issues/23595), [GitHub-23594](https://github.com/magento/magento2/issues/23594), [GitHub-23596](https://github.com/magento/magento2/issues/23596) +* The `bin/magento catalog:images:resize` command is now database-media-storage-mode aware. As a result, resized images are now extracted from the database if they don’t exist locally prior to resizing, and are now stored back into the database once the resize operation completes. *Fix submitted by gwharton in pull request [23598](https://github.com/magento/magento2/pull/23598)*. [GitHub-23595](https://github.com/magento/magento2/issues/23595), [GitHub-23594](https://github.com/magento/magento2/issues/23594), [GitHub-23596](https://github.com/magento/magento2/issues/23596) -* The **use default value** checkbox on the Media Storage Location configuration setting has been removed. Previously, the JavaScript routines on the page interfered with that option, and consequently, the checkbox could be enabled but was still ignored. *Fix submitted by gwharton in pull request [23710](https://github.com/magento/magento2/pull/23710)*. [GitHub-23597](https://github.com/magento/magento2/issues/23597) +* The **use default value** checkbox on the Media Storage Location configuration setting has been removed. Previously, the JavaScript routines on the page interfered with that option, and consequently, the checkbox could be enabled but was still ignored. *Fix submitted by gwharton in pull request [23710](https://github.com/magento/magento2/pull/23710)*. [GitHub-23597](https://github.com/magento/magento2/issues/23597) -* Transactional email now copies the configured email logo image from the database when the logo file does not exist in the local `pub/media` directory. Previously, emails used the default LUMA logo if it did not exist in the local directory. *Fix submitted by gwharton in pull requests [21675](https://github.com/magento/magento2/pull/21675) and [21674](https://github.com/magento/magento2/pull/21674)*. [GitHub-21672](https://github.com/magento/magento2/issues/21672) +* Transactional email now copies the configured email logo image from the database when the logo file does not exist in the local `pub/media` directory. Previously, emails used the default LUMA logo if it did not exist in the local directory. *Fix submitted by gwharton in pull requests [21675](https://github.com/magento/magento2/pull/21675) and [21674](https://github.com/magento/magento2/pull/21674)*. [GitHub-21672](https://github.com/magento/magento2/issues/21672) -* Magento now copies any image needed for the Admin Product Edit page from the database to local storage as needed. Previously, if the image was not in local storage, Magento used a placeholder image. *Fix submitted by gwharton in pull request [21605](https://github.com/magento/magento2/pull/21605)*. [GitHub-21604](https://github.com/magento/magento2/issues/21604), [GitHub-21546](https://github.com/magento/magento2/issues/21546) +* Magento now copies any image needed for the Admin Product Edit page from the database to local storage as needed. Previously, if the image was not in local storage, Magento used a placeholder image. *Fix submitted by gwharton in pull request [21605](https://github.com/magento/magento2/pull/21605)*. [GitHub-21604](https://github.com/magento/magento2/issues/21604), [GitHub-21546](https://github.com/magento/magento2/issues/21546) ### Directory -* The country drop-down list no longer includes an extraneous zero (0) when the allowed countries in the list differ from countries identified as top destinations. [GitHub-23141](https://github.com/magento/magento2/issues/23141) +* The country drop-down list no longer includes an extraneous zero (0) when the allowed countries in the list differ from countries identified as top destinations. [GitHub-23141](https://github.com/magento/magento2/issues/23141) ### Downloadable products -* Downloadable products are now immediately accessible after they have been paid for. Previously, a downloadable product’s status remained in the pending state after payment for the product has been completed. *Fix submitted by Shikha Mishra in pull request [22658](https://github.com/magento/magento2/pull/22658)*. [GitHub-22545](https://github.com/magento/magento2/issues/22545) +* Downloadable products are now immediately accessible after they have been paid for. Previously, a downloadable product’s status remained in the pending state after payment for the product has been completed. *Fix submitted by Shikha Mishra in pull request [22658](https://github.com/magento/magento2/pull/22658)*. [GitHub-22545](https://github.com/magento/magento2/issues/22545) -* New downloadable products now appear in the downloadable products section after a customer checks out as a guest and then creates an account. +* New downloadable products now appear in the downloadable products section after a customer checks out as a guest and then creates an account. ### EAV -* Starting and ending spaces are now trimmed from phone numbers before JavaScript validation. Previously, Magento did not trim these spaces and displayed this error: `*Phone Number* contains non-numeric characters`. +* Starting and ending spaces are now trimmed from phone numbers before JavaScript validation. Previously, Magento did not trim these spaces and displayed this error: `*Phone Number* contains non-numeric characters`. -* You can now save multiselect and select attribute options when swatches modules are disabled. +* You can now save multiselect and select attribute options when swatches modules are disabled. [GitHub-23326](https://github.com/magento/magento2/issues/23326) ### Email -* Email created using a CSS-heavy template is now sent successfully. Previously, these emails were rejected by the server with this message: `Message too big`. *Fix submitted by gwharton in pull request [23649](https://github.com/magento/magento2/pull/23649)*. [GitHub-23643](https://github.com/magento/magento2/issues/23643) +* Email created using a CSS-heavy template is now sent successfully. Previously, these emails were rejected by the server with this message: `Message too big`. *Fix submitted by gwharton in pull request [23649](https://github.com/magento/magento2/pull/23649)*. [GitHub-23643](https://github.com/magento/magento2/issues/23643) -* The Template Preview tab now loads with the default content that was assigned during the creation of a New Shipment email template as expected. Previously, the Template Preview tab did not load the default content. *Fix submitted by Gaurav Agarwal in pull request [22791](https://github.com/magento/magento2/pull/22791)*. [GitHub-22788](https://github.com/magento/magento2/issues/22788) +* The Template Preview tab now loads with the default content that was assigned during the creation of a New Shipment email template as expected. Previously, the Template Preview tab did not load the default content. *Fix submitted by Gaurav Agarwal in pull request [22791](https://github.com/magento/magento2/pull/22791)*. [GitHub-22788](https://github.com/magento/magento2/issues/22788) -* All emails are now sent with correct MIME encoding. *Fix submitted by gwharton in pull request [23535](https://github.com/magento/magento2/pull/23535)*. +* All emails are now sent with correct MIME encoding. *Fix submitted by gwharton in pull request [23535](https://github.com/magento/magento2/pull/23535)*. ### Frameworks -* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. +* Zend Framework 2 Components have been upgraded to the Active/LTS versions. See [Support and Long Term Support Policies](https://framework.zend.com/long-term-support) for a discussion of Zend Framework long-term support policy. -* The `equalArrays` function in `lib/web/mage/utils/compare.js` file has been refactored to remove quadratic complexity. Previously, this feature significantly slowed Admin operations that were performed on large number of products (for example, adding a product to category by SKU). +* The `equalArrays` function in `lib/web/mage/utils/compare.js` file has been refactored to remove quadratic complexity. Previously, this feature significantly slowed Admin operations that were performed on large number of products (for example, adding a product to category by SKU). -* The performance of resize image operations has been improved. Previously, an SQL operation involved in the process returned redundant data, which resulted in images being saved multiple times. +* The performance of resize image operations has been improved. Previously, an SQL operation involved in the process returned redundant data, which resulted in images being saved multiple times. -* The error message that Magento displays when the user creates an attribute that starts with the reserved word `container` has been improved. For example, when a user created product attributes named `container_attributename` and `attributename`, Magento threw this error: `Exception in Magento/Framework/View/Element/UiComponentFactory.php` rather than stating which user behavior was causing the system problem. +* The error message that Magento displays when the user creates an attribute that starts with the reserved word `container` has been improved. For example, when a user created product attributes named `container_attributename` and `attributename`, Magento threw this error: `Exception in Magento/Framework/View/Element/UiComponentFactory.php` rather than stating which user behavior was causing the system problem. -* The Magento Framework API now has a module manager to detect module features and support enablement of third-party modules. *Fix submitted by Navarr Barnier in pull request [18748](https://github.com/magento/magento2/pull/18748)*. +* The Magento Framework API now has a module manager to detect module features and support enablement of third-party modules. *Fix submitted by Navarr Barnier in pull request [18748](https://github.com/magento/magento2/pull/18748)*. #### JavaScript framework -* The cursor on the email field of the login page now behaves as expected when running Magento on Safari. Previously, the cursor repeatedly moved to the end of the email address field when you tried to edit this field. +* The cursor on the email field of the login page now behaves as expected when running Magento on Safari. Previously, the cursor repeatedly moved to the end of the email address field when you tried to edit this field. -* Magento now displays previously missing validation messages on the storefront when JavaScript errors are caught by validation scripts in DatePicker form elements. *Fix submitted by Ravi Chandra in pull request [21397](https://github.com/magento/magento2/pull/21397)*. [GitHub-3795](https://github.com/magento/magento2/issues/3795) +* Magento now displays previously missing validation messages on the storefront when JavaScript errors are caught by validation scripts in DatePicker form elements. *Fix submitted by Ravi Chandra in pull request [21397](https://github.com/magento/magento2/pull/21397)*. [GitHub-3795](https://github.com/magento/magento2/issues/3795) ### General fixes -* Magento now displays the correct content for a selected store in multi-site deployments where the websites have the same URL but the CMS pages have different content. +* Magento now displays the correct content for a selected store in multi-site deployments where the websites have the same URL but the CMS pages have different content. -* Enabling a product now clears the full-page cache for PDP if the product is not assigned to a category. +* Enabling a product now clears the full-page cache for PDP if the product is not assigned to a category. -* The **Save in address book** checkbox on the Shipping Address section of the Admin Create Order page now behaves as expected. When this checkbox is enabled, the address in the Shipping Address field is saved, and merchants can disable or enable the checkbox +* The **Save in address book** checkbox on the Shipping Address section of the Admin Create Order page now behaves as expected. When this checkbox is enabled, the address in the Shipping Address field is saved, and merchants can disable or enable the checkbox -* Updated the type and format for all `store_name` fields used in Sales and Quote modules. All fields are now type `text` instead of type `varchar`, and the field length has been extended to 255 symbols. +* Updated the type and format for all `store_name` fields used in Sales and Quote modules. All fields are now type `text` instead of type `varchar`, and the field length has been extended to 255 symbols. -* Preloading of fonts has been moved from the Blank theme to the Luma theme. +* Preloading of fonts has been moved from the Blank theme to the Luma theme. -* Magento no longer includes canceled orders when calculating how many times a coupon code has been used. *Fix submitted by Pavel Bystritsky in pull request [20579](https://github.com/magento/magento2/pull/20579)*. [GitHub-12817](https://github.com/magento/magento2/issues/12817) +* Magento no longer includes canceled orders when calculating how many times a coupon code has been used. *Fix submitted by Pavel Bystritsky in pull request [20579](https://github.com/magento/magento2/pull/20579)*. [GitHub-12817](https://github.com/magento/magento2/issues/12817) -* Code Sniffer no longer marks correctly aligned DocBlock elements as code style violations. *Fix submitted by Pavel Bystritsky in pull request [22444](https://github.com/magento/magento2/pull/22444)*. [GitHub-22317](https://github.com/magento/magento2/issues/22317) +* Code Sniffer no longer marks correctly aligned DocBlock elements as code style violations. *Fix submitted by Pavel Bystritsky in pull request [22444](https://github.com/magento/magento2/pull/22444)*. [GitHub-22317](https://github.com/magento/magento2/issues/22317) -* Tier prices can now be float values. Previously, Magento converted float percentage values to `int` before saving it. *Fix submitted by Maksym Novik in pull request [19584](https://github.com/magento/magento2/pull/19584)*. [GitHub-18651](https://github.com/magento/magento2/issues/18651) +* Tier prices can now be float values. Previously, Magento converted float percentage values to `int` before saving it. *Fix submitted by Maksym Novik in pull request [19584](https://github.com/magento/magento2/pull/19584)*. [GitHub-18651](https://github.com/magento/magento2/issues/18651) -* Full page cache works as expected for non-default store views. +* Full page cache works as expected for non-default store views. -* Magento no longer creates a persistent cart session for logged-in users when the persistent cart feature has been disabled. Previously, Magento did not empty shopping carts for users when the user logged out. +* Magento no longer creates a persistent cart session for logged-in users when the persistent cart feature has been disabled. Previously, Magento did not empty shopping carts for users when the user logged out. -* The unused namespace import was removed from the `CartTotalRepository.php` file. *Fix submitted by Ulyana Kiklevich in pull request [23457](https://github.com/magento/magento2/pull/23457)*. +* The unused namespace import was removed from the `CartTotalRepository.php` file. *Fix submitted by Ulyana Kiklevich in pull request [23457](https://github.com/magento/magento2/pull/23457)*. -* The back-in-stock alert emails that Magento sends to both wholesale and general customers now include the appropriate wholesale and general product prices. +* The back-in-stock alert emails that Magento sends to both wholesale and general customers now include the appropriate wholesale and general product prices. -* The `MsrpSampleData` module installation script no longer generates incorrect data. Previously, this installation script did not set any data from fixtures due to incorrect dependencies between sample data modules. +* The `MsrpSampleData` module installation script no longer generates incorrect data. Previously, this installation script did not set any data from fixtures due to incorrect dependencies between sample data modules. -* Tooltips have been added to the store-view labels for CMS tables and blocks. *Fix submitted by Dipesh Rangani in pull request [23474](https://github.com/magento/magento2/pull/23474)*. +* Tooltips have been added to the store-view labels for CMS tables and blocks. *Fix submitted by Dipesh Rangani in pull request [23474](https://github.com/magento/magento2/pull/23474)*. -* Validation of `max-word` data now works as expected for forms. *Fix submitted by Sunil in pull request [23541](https://github.com/magento/magento2/pull/23541)*. +* Validation of `max-word` data now works as expected for forms. *Fix submitted by Sunil in pull request [23541](https://github.com/magento/magento2/pull/23541)*. -* Magento now subscribes a customer to a price or stock notification when they opt to subscribe to a price or stock alert on a product page without first logging in. Previously, Magento redirected the customer to a 404 page. *Fix submitted by Arjen Miedema in pull request [23218](https://github.com/magento/magento2/pull/23218)*. +* Magento now subscribes a customer to a price or stock notification when they opt to subscribe to a price or stock alert on a product page without first logging in. Previously, Magento redirected the customer to a 404 page. *Fix submitted by Arjen Miedema in pull request [23218](https://github.com/magento/magento2/pull/23218)*. -* The sendfriend feature now verifies product visibility as expected. Previously, this feature verified product status only. *Fix submitted by Mateusz Wira in pull request [23118](https://github.com/magento/magento2/pull/23118)*. [GitHub-23053](https://github.com/magento/magento2/issues/23053) +* The sendfriend feature now verifies product visibility as expected. Previously, this feature verified product status only. *Fix submitted by Mateusz Wira in pull request [23118](https://github.com/magento/magento2/pull/23118)*. [GitHub-23053](https://github.com/magento/magento2/issues/23053) -* Search input is no longer missing the `aria-expanded` required attribute. Previously, the W3C HTML validator threw errors for the `#search` element. *Fix submitted by Geeta Modi in pull request [22942](https://github.com/magento/magento2/pull/22942)*. [GitHub-18337](https://github.com/magento/magento2/issues/18337) +* Search input is no longer missing the `aria-expanded` required attribute. Previously, the W3C HTML validator threw errors for the `#search` element. *Fix submitted by Geeta Modi in pull request [22942](https://github.com/magento/magento2/pull/22942)*. [GitHub-18337](https://github.com/magento/magento2/issues/18337) -* The **Use Default Value** check boxes on the Advanced Pricing pop-up window now remain checked on both the **Special From** and **Special To** dates, and display the values set in the All Store scope. *Fix submitted by Mahesh Singh in pull request [22521](https://github.com/magento/magento2/pull/22521)*. [GitHub-22511](https://github.com/magento/magento2/issues/22511) +* The **Use Default Value** check boxes on the Advanced Pricing pop-up window now remain checked on both the **Special From** and **Special To** dates, and display the values set in the All Store scope. *Fix submitted by Mahesh Singh in pull request [22521](https://github.com/magento/magento2/pull/22521)*. [GitHub-22511](https://github.com/magento/magento2/issues/22511) -* The Recently Viewed feature now accurately lists the products and category paths that the user has recently visited. Previously, this list was inaccurate when the **Use Categories Path for Product URLs** setting was disabled. *Fix submitted by Atish Goswami in pull request [22650](https://github.com/magento/magento2/pull/22650)*. [GitHub-13227](https://github.com/magento/magento2/issues/13227) +* The Recently Viewed feature now accurately lists the products and category paths that the user has recently visited. Previously, this list was inaccurate when the **Use Categories Path for Product URLs** setting was disabled. *Fix submitted by Atish Goswami in pull request [22650](https://github.com/magento/magento2/pull/22650)*. [GitHub-13227](https://github.com/magento/magento2/issues/13227) -* The **Be the First to Review Product** link now directs the user to the product review form at the bottom of the product page as expected in deployments that include PageBuilder. +* The **Be the First to Review Product** link now directs the user to the product review form at the bottom of the product page as expected in deployments that include PageBuilder. -* You can now set the **minute** values for Analytics data collection (**Store** > **Configuration** > **General** > **Advanced Reporting**). Previously, due to an earlier fix that has now been reverted (see [GitHub-8258](https://github.com/magento/magento2/issues/8258)), validation failed when you set a value that exceeded 24. +* You can now set the **minute** values for Analytics data collection (**Store** > **Configuration** > **General** > **Advanced Reporting**). Previously, due to an earlier fix that has now been reverted (see [GitHub-8258](https://github.com/magento/magento2/issues/8258)), validation failed when you set a value that exceeded 24. -* The `getProductUrl()` method now returns the product URL for a specified website. Previously, this method did not let you retrieve the product URL for a specified website in multisite deployments. *Fix submitted by Nazar Klovanych in pull request [21876](https://github.com/magento/magento2/pull/21876)*. [GitHub-4247](https://github.com/magento/magento2/issues/4247) +* The `getProductUrl()` method now returns the product URL for a specified website. Previously, this method did not let you retrieve the product URL for a specified website in multisite deployments. *Fix submitted by Nazar Klovanych in pull request [21876](https://github.com/magento/magento2/pull/21876)*. [GitHub-4247](https://github.com/magento/magento2/issues/4247) ### Image -* You can now programmatically move an image to the gallery using the `addImageToMediaGallery` method with `$move`. Previously, when you tried to move an image programmatically, Magento threw this exception: `[InvalidArgumentException] File 'pub/media/import/' doesn't exist`. *Fix submitted by dudzio12 in pull request [22020](https://github.com/magento/magento2/pull/22020)*. [GitHub-21978](https://github.com/magento/magento2/issues/21978) +* You can now programmatically move an image to the gallery using the `addImageToMediaGallery` method with `$move`. Previously, when you tried to move an image programmatically, Magento threw this exception: `[InvalidArgumentException] File 'pub/media/import/' doesn't exist`. *Fix submitted by dudzio12 in pull request [22020](https://github.com/magento/magento2/pull/22020)*. [GitHub-21978](https://github.com/magento/magento2/issues/21978) -* The performance of the `catalog:images:resize` command has been improved. This command now resizes only the images that are actually in use and lists any errors. *Fix submitted by Timon de Groot in pull request [23005](https://github.com/magento/magento2/pull/23005)*. [GitHub-22808](https://github.com/magento/magento2/issues/22808) +* The performance of the `catalog:images:resize` command has been improved. This command now resizes only the images that are actually in use and lists any errors. *Fix submitted by Timon de Groot in pull request [23005](https://github.com/magento/magento2/pull/23005)*. [GitHub-22808](https://github.com/magento/magento2/issues/22808) ### Import/export -* Import statistics now accurately reflect the results of import. +* Import statistics now accurately reflect the results of import. -* Magento now successfully saves product URL keys in Arabic. +* Magento now successfully saves product URL keys in Arabic. -* Only modified or updated product records are flushed from the catalog cache after importing, re-indexing, and running `bin/magento cron:run --group index`. Previously, all products in the catalog were flushed. +* Only modified or updated product records are flushed from the catalog cache after importing, re-indexing, and running `bin/magento cron:run --group index`. Previously, all products in the catalog were flushed. -* You can now successfully download a CSV file after export. Previously, Magento redirected you to the Admin dashboard when you tried to download the CSV file that was created during export. +* You can now successfully download a CSV file after export. Previously, Magento redirected you to the Admin dashboard when you tried to download the CSV file that was created during export. -* Products are successfully updated through import of an CSV file in **Add/Update** mode. Previously, the import process failed, and Magento displayed this error: `The value specified in the URL Key field would generate a URL that already exists`. +* Products are successfully updated through import of an CSV file in **Add/Update** mode. Previously, the import process failed, and Magento displayed this error: `The value specified in the URL Key field would generate a URL that already exists`. -* Magento no longer throws a fatal error during import or export if the category path contains deleted category IDs. +* Magento no longer throws a fatal error during import or export if the category path contains deleted category IDs. -* The import process maintain custom option prices that were assigned to different websites and scope before import. Previously, after import, these custom option prices were set to the default scope values. +* The import process maintain custom option prices that were assigned to different websites and scope before import. Previously, after import, these custom option prices were set to the default scope values. -* You can now update products through import of a CSV file when the updated products have `product_id` values that range widely (for example, a value 1 to a value 6000). Previously, when you initiated the import of the CSV file (**Admin** > **System** > **Import** > **Product** > **Add/Update**), Magento threw this error: `General error: 1114 The table 'catalog_product_index_price_temp' is full occurs`. *Fix submitted by Mateusz Wegrzycki in pull request [22575](https://github.com/magento/magento2/pull/22575)*. [GitHub-22028](https://github.com/magento/magento2/issues/22028) +* You can now update products through import of a CSV file when the updated products have `product_id` values that range widely (for example, a value 1 to a value 6000). Previously, when you initiated the import of the CSV file (**Admin** > **System** > **Import** > **Product** > **Add/Update**), Magento threw this error: `General error: 1114 The table 'catalog_product_index_price_temp' is full occurs`. *Fix submitted by Mateusz Wegrzycki in pull request [22575](https://github.com/magento/magento2/pull/22575)*. [GitHub-22028](https://github.com/magento/magento2/issues/22028) ### Index -* We have improved the processing of memory tables in the Galera Cluster. +* We have improved the processing of memory tables in the Galera Cluster. -* The pricing index can now be fully rebuilt and moved into the active price database table in a reasonable amount of time. Previously, this index ran without completing. [GitHub-22156](https://github.com/magento/magento2/issues/22156) +* The pricing index can now be fully rebuilt and moved into the active price database table in a reasonable amount of time. Previously, this index ran without completing. [GitHub-22156](https://github.com/magento/magento2/issues/22156) -* We improved the performance of product flat data re-indexing. [GitHub-23462](https://github.com/magento/magento2/issues/23462) +* We improved the performance of product flat data re-indexing. [GitHub-23462](https://github.com/magento/magento2/issues/23462) -* You can now filter administrative users by ID. Previously, when you tried to filter these users by ID, Magento threw a 500 error. *Fix submitted by Jeroen in pull request [23267](https://github.com/magento/magento2/pull/23267)*. [GitHub-23266](https://github.com/magento/magento2/issues/23266) +* You can now filter administrative users by ID. Previously, when you tried to filter these users by ID, Magento threw a 500 error. *Fix submitted by Jeroen in pull request [23267](https://github.com/magento/magento2/pull/23267)*. [GitHub-23266](https://github.com/magento/magento2/issues/23266) ### Infrastructure -* Magento 2.3.3 now supports PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21). +* Magento 2.3.3 now supports PHP 7.3.x (tested with PHP 7.3.8) and PHP 7.2.x (tested with 7.2.21). -* Varnish cache now supports version 6.2.0. +* Varnish cache now supports version 6.2.0. -* You can now use copy service on extension attributes for classes that extend Data Object. *Fix submitted by Oleksandr Kravchuk in pull request [23387](https://github.com/magento/magento2/pull/23387)*. [GitHub-23386](https://github.com/magento/magento2/issues/23386) +* You can now use copy service on extension attributes for classes that extend Data Object. *Fix submitted by Oleksandr Kravchuk in pull request [23387](https://github.com/magento/magento2/pull/23387)*. [GitHub-23386](https://github.com/magento/magento2/issues/23386) -* Removed an extraneous closing tag from the store-switcher template. *Fix submitted by Alastair Mucklow in pull request [23403](https://github.com/magento/magento2/pull/23403)*. +* Removed an extraneous closing tag from the store-switcher template. *Fix submitted by Alastair Mucklow in pull request [23403](https://github.com/magento/magento2/pull/23403)*. -* `\Magento\ConfigurableProduct\Pricing\Price\PriceResolverInterface` has been added to the `di.xml` file. *Fix submitted by Eden Duong in pull request [23753](https://github.com/magento/magento2/pull/23753)*. [GitHub-23717](https://github.com/magento/magento2/issues/23717) +* `\Magento\ConfigurableProduct\Pricing\Price\PriceResolverInterface` has been added to the `di.xml` file. *Fix submitted by Eden Duong in pull request [23753](https://github.com/magento/magento2/pull/23753)*. [GitHub-23717](https://github.com/magento/magento2/issues/23717) -* We improved validation of forms that contain multiple fields with identical names. Previously, Magento validated the first file in the form, but did not validate subsequent fields with that name. *Fix submitted by Jay Ghosh in pull request [15383](https://github.com/magento/magento2/pull/15383)*. [GitHub-8258](https://github.com/magento/magento2/issues/8258) +* We improved validation of forms that contain multiple fields with identical names. Previously, Magento validated the first file in the form, but did not validate subsequent fields with that name. *Fix submitted by Jay Ghosh in pull request [15383](https://github.com/magento/magento2/pull/15383)*. [GitHub-8258](https://github.com/magento/magento2/issues/8258) -* Magento now identifies review entity IDs programmatically instead of retrieving a hard-coded value. *Fix submitted by Danilo Argentiero in pull request [23353](https://github.com/magento/magento2/pull/23353)*. +* Magento now identifies review entity IDs programmatically instead of retrieving a hard-coded value. *Fix submitted by Danilo Argentiero in pull request [23353](https://github.com/magento/magento2/pull/23353)*. -* The array type hints in the Visibility model now correctly reference `string` instead of `int`. *Fix submitted by Patrick McLain in pull request [23532](https://github.com/magento/magento2/pull/23532)*. +* The array type hints in the Visibility model now correctly reference `string` instead of `int`. *Fix submitted by Patrick McLain in pull request [23532](https://github.com/magento/magento2/pull/23532)*. -* The `getListByCustomerId` function in `PaymentTokenManagementInterface` now returns an array. *Fix submitted by Serhiy Zhovnir in pull request [22914](https://github.com/magento/magento2/pull/22914)*. [GitHub-22899](https://github.com/magento/magento2/issues/22899) +* The `getListByCustomerId` function in `PaymentTokenManagementInterface` now returns an array. *Fix submitted by Serhiy Zhovnir in pull request [22914](https://github.com/magento/magento2/pull/22914)*. [GitHub-22899](https://github.com/magento/magento2/issues/22899) -* The description of the `setStoreId` function has been amended to more clearly explain how the function helps load CMS pages. *Fix submitted by Mahesh Singh in pull request [22772](https://github.com/magento/magento2/pull/22772)*. [GitHub-22767](https://github.com/magento/magento2/issues/22767) +* The description of the `setStoreId` function has been amended to more clearly explain how the function helps load CMS pages. *Fix submitted by Mahesh Singh in pull request [22772](https://github.com/magento/magento2/pull/22772)*. [GitHub-22767](https://github.com/magento/magento2/issues/22767) -* The `phpcs` script for PHP_CodeSniffer now displays all errors and warnings in the console. Previously, Magento threw a fatal error when it encountered an uncaught type error. *Fix submitted by Nazar Klovanych in pull request [22947](https://github.com/magento/magento2/pull/22947)*. [GitHub-20186](https://github.com/magento/magento2/issues/20186) +* The `phpcs` script for PHP_CodeSniffer now displays all errors and warnings in the console. Previously, Magento threw a fatal error when it encountered an uncaught type error. *Fix submitted by Nazar Klovanych in pull request [22947](https://github.com/magento/magento2/pull/22947)*. [GitHub-20186](https://github.com/magento/magento2/issues/20186) -* The `oauth` handshake is now followed by a redirect as expected for third-party integrations. +* The `oauth` handshake is now followed by a redirect as expected for third-party integrations. ### Newsletter -* Magento now sends only a subscribe email when you create an account from an email invitation. Previously, you received two emails -- one that subscribed you to the newsletter, and another that unsubscribed you. +* Magento now sends only a subscribe email when you create an account from an email invitation. Previously, you received two emails -- one that subscribed you to the newsletter, and another that unsubscribed you. -* You can now export newsletter subscribers from the Admin. Previously, Magento displayed this error when you selected a subscriber name and clicked **Export**: `error: URI too long`. +* You can now export newsletter subscribers from the Admin. Previously, Magento displayed this error when you selected a subscriber name and clicked **Export**: `error: URI too long`. ### Orders -* The creditmemo `getOrder()` method now returns the expected extension attributes for an order. Previously, this method did not load orders correctly. *Fix submitted by Pavel Bystritsky in pull request [23358](https://github.com/magento/magento2/pull/23358)*. [GitHub-23345](https://github.com/magento/magento2/issues/23345) +* The creditmemo `getOrder()` method now returns the expected extension attributes for an order. Previously, this method did not load orders correctly. *Fix submitted by Pavel Bystritsky in pull request [23358](https://github.com/magento/magento2/pull/23358)*. [GitHub-23345](https://github.com/magento/magento2/issues/23345) -* Magento now displays an informative error message when you try to update the product quantity and shipping address for an order when the product quantity field is empty. *Fix submitted by Shankar Konar in pull request [23360](https://github.com/magento/magento2/pull/23360)*. +* Magento now displays an informative error message when you try to update the product quantity and shipping address for an order when the product quantity field is empty. *Fix submitted by Shankar Konar in pull request [23360](https://github.com/magento/magento2/pull/23360)*. ### Payment methods This release includes the following changes to integrations for core payment methods to support compliance with PSD2 regulations: -* The Braintree payment method now complies with PSD2 regulations. The core integration API for Braintree now supports the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. +* The Braintree payment method now complies with PSD2 regulations. The core integration API for Braintree now supports the latest JavaScript SDK v3 API, which is a requirement for supporting native Braintree 3D Secure 2.0 adoption. Braintree transactions are now also verified by using the native Braintree 3D Secure 2.0 service. -* Authorize.net now provides 3D Secure verification through third-party services through the `cardholderAuthentication` request field. Starting from this release,the Authorize.Net `accept.js` integration will support 3DS 2.0 through CardinalCommerce. +* Authorize.net now provides 3D Secure verification through third-party services through the `cardholderAuthentication` request field. Starting from this release,the Authorize.Net `accept.js` integration will support 3DS 2.0 through CardinalCommerce. -* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. +* The Cybersource and eWay payment modules have been deprecated in this release to comply with PSD2 SCA regulation, which takes effect on September 14, 2019. Use the official Marketplace extensions for these features instead. #### Other payment issues -* Magento now displays a more informative error message (`CVV verification failed`) when you enter an invalid CVV code while using the Braintree payment method. Previously, Magento displayed a generic error message. +* Magento now displays a more informative error message (`CVV verification failed`) when you enter an invalid CVV code while using the Braintree payment method. Previously, Magento displayed a generic error message. -* Customers can now successfully place an order when the order is partially paid for by gift card or when a discount is applied to the order. Previously, customers could not place an order, and Magento displayed this error: `error: Field format error: 10413-The totals of the cart item amounts do not match order amounts`. +* Customers can now successfully place an order when the order is partially paid for by gift card or when a discount is applied to the order. Previously, customers could not place an order, and Magento displayed this error: `error: Field format error: 10413-The totals of the cart item amounts do not match order amounts`. -* When you create orders using Braintree, Magento now successfully creates the orders that contain both simple and virtual products with the **Checkout with Multiple Addresses** option enabled. Previously, Magento listed an order created with these features as an empty order with a grand total of zero on the Orders list. +* When you create orders using Braintree, Magento now successfully creates the orders that contain both simple and virtual products with the **Checkout with Multiple Addresses** option enabled. Previously, Magento listed an order created with these features as an empty order with a grand total of zero on the Orders list. -* Magento no longer processes payment for an order that has an empty email field in the quote. Previously, Braintree processed the payment, but displayed an error message on the storefront and did not create the order. +* Magento no longer processes payment for an order that has an empty email field in the quote. Previously, Braintree processed the payment, but displayed an error message on the storefront and did not create the order. -* Customers can now place an order for virtual products that have a zero subtotal after they have entered address information. Previously, customers could not place an order for virtual products with a zero subtotal if they had modified their address, and Magento displayed this message: `The requested Payment Method is not available`. +* Customers can now place an order for virtual products that have a zero subtotal after they have entered address information. Previously, customers could not place an order for virtual products with a zero subtotal if they had modified their address, and Magento displayed this message: `The requested Payment Method is not available`. -* Magento now displays Chinese locale text strings for PayPal buttons as expected. +* Magento now displays Chinese locale text strings for PayPal buttons as expected. -* You can now cancel orders placed with PayPal Express even after authorization has expired. +* You can now cancel orders placed with PayPal Express even after authorization has expired. -* The Transactions tab now displays the correct status for a capture transaction for an order that was placed with the Authorize.net `accept.js` payment method. +* The Transactions tab now displays the correct status for a capture transaction for an order that was placed with the Authorize.net `accept.js` payment method. -* The Admin sales list now displays the payment method for each order. [GitHub-22231](https://github.com/magento/magento2/issues/22231) +* The Admin sales list now displays the payment method for each order. [GitHub-22231](https://github.com/magento/magento2/issues/22231) -* Magento now displays stored payment methods and billing agreements if the related payment method is active. Previously, Magento displayed disabled payment methods in the customer dashboard. *Fix submitted by Torben Höhn in pull request [22850](https://github.com/magento/magento2/pull/22850)*. [GitHub-6659](https://github.com/magento/magento2/issues/6659) +* Magento now displays stored payment methods and billing agreements if the related payment method is active. Previously, Magento displayed disabled payment methods in the customer dashboard. *Fix submitted by Torben Höhn in pull request [22850](https://github.com/magento/magento2/pull/22850)*. [GitHub-6659](https://github.com/magento/magento2/issues/6659) -* Magento no longer saves credit card information when the **Save for later use** checkbox on the payment page is not enabled during order creation. *Fix submitted by Patrick McLain in pull request [19767](https://github.com/magento/magento2/pull/19767)*. [GitHub-19515](https://github.com/magento/magento2/issues/19515) +* Magento no longer saves credit card information when the **Save for later use** checkbox on the payment page is not enabled during order creation. *Fix submitted by Patrick McLain in pull request [19767](https://github.com/magento/magento2/pull/19767)*. [GitHub-19515](https://github.com/magento/magento2/issues/19515) -* When placing an order with Authorize.net, Magento now disables the Order page's **Place Order** button until billing information has been updated. Previously, this button remained enabled, no matter the status of the order in progress. *Fix submitted by Eden Duong in pull request [23718](https://github.com/magento/magento2/pull/23718)*. [GitHub-23624](https://github.com/magento/magento2/issues/23624) +* When placing an order with Authorize.net, Magento now disables the Order page's **Place Order** button until billing information has been updated. Previously, this button remained enabled, no matter the status of the order in progress. *Fix submitted by Eden Duong in pull request [23718](https://github.com/magento/magento2/pull/23718)*. [GitHub-23624](https://github.com/magento/magento2/issues/23624) -* Magento now displays an informative email message about invalid credentials when a user tries to pay for an order with the Authorize.net payment method that has an incompletely configured Authorize.net `accept.js` account. +* Magento now displays an informative email message about invalid credentials when a user tries to pay for an order with the Authorize.net payment method that has an incompletely configured Authorize.net `accept.js` account. -* You can now place an order from the Admin using Authorize.net as the payment method. Previously, Magento did not place the order and displayed this message: `Transaction has been declined. Please try again later`. +* You can now place an order from the Admin using Authorize.net as the payment method. Previously, Magento did not place the order and displayed this message: `Transaction has been declined. Please try again later`. -* The **Credentials** button on the Configure PayPal Express Checkout page (**Admin** > **Stores** > **Configuration** > **Sales** > **Payment Methods** > **PayPal Express Checkout**) is now displayed properly in modes. +* The **Credentials** button on the Configure PayPal Express Checkout page (**Admin** > **Stores** > **Configuration** > **Sales** > **Payment Methods** > **PayPal Express Checkout**) is now displayed properly in modes. -* Magento no longer throws an error when you place an order using a custom payment method in deployments running Signifyd. Previously, when you tried to place an order using a custom payment method, an error related to the merge of `signifyd_payment_mapping.xml` files occurred. +* Magento no longer throws an error when you place an order using a custom payment method in deployments running Signifyd. Previously, when you tried to place an order using a custom payment method, an error related to the merge of `signifyd_payment_mapping.xml` files occurred. -* Data type validation now occurs on data entered into the minimum and maximum order totals for all payment methods accessed under **Store** > **Configurations** > **Sales** > **Payment Method**. Previously, you could add values with invalid data types, and Magento saved these values with the wrong data type. *Fix submitted by Eden Duong in pull request [23917](https://github.com/magento/magento2/pull/23917)*. [GitHub-23916](https://github.com/magento/magento2/issues/23916) +* Data type validation now occurs on data entered into the minimum and maximum order totals for all payment methods accessed under **Store** > **Configurations** > **Sales** > **Payment Method**. Previously, you could add values with invalid data types, and Magento saved these values with the wrong data type. *Fix submitted by Eden Duong in pull request [23917](https://github.com/magento/magento2/pull/23917)*. [GitHub-23916](https://github.com/magento/magento2/issues/23916) -* The **PayPal Express Checkout** button now appears on the product details page only when the **Display on Product Details Page** and **Enable Instant Purchase** configuration settings are enabled. *Fix submitted by Nazar Klovanych in pull request [22260](https://github.com/magento/magento2/pull/22260)*. [GitHub-22045](https://github.com/magento/magento2/issues/22045), [GitHub-22134](https://github.com/magento/magento2/issues/22134) +* The **PayPal Express Checkout** button now appears on the product details page only when the **Display on Product Details Page** and **Enable Instant Purchase** configuration settings are enabled. *Fix submitted by Nazar Klovanych in pull request [22260](https://github.com/magento/magento2/pull/22260)*. [GitHub-22045](https://github.com/magento/magento2/issues/22045), [GitHub-22134](https://github.com/magento/magento2/issues/22134) -* The location of the Zero Subtotal Checkout payment settings has been changed to **Stores** > **Configuration** > **Sales** > **Payment Methods**. *Fix submitted by Andrea Parmeggiani in pull request [23679](https://github.com/magento/magento2/pull/23679)*. [GitHub-23678](https://github.com/magento/magento2/issues/23678) +* The location of the Zero Subtotal Checkout payment settings has been changed to **Stores** > **Configuration** > **Sales** > **Payment Methods**. *Fix submitted by Andrea Parmeggiani in pull request [23679](https://github.com/magento/magento2/pull/23679)*. [GitHub-23678](https://github.com/magento/magento2/issues/23678) -* Magento now displays the loading icon while processing a Braintree payment until the user is redirected to the new Order page. *Fix submitted by Kunal Soni in pull request [22675](https://github.com/magento/magento2/pull/22675)*. [GitHub-20038](https://github.com/magento/magento2/issues/20038) +* Magento now displays the loading icon while processing a Braintree payment until the user is redirected to the new Order page. *Fix submitted by Kunal Soni in pull request [22675](https://github.com/magento/magento2/pull/22675)*. [GitHub-20038](https://github.com/magento/magento2/issues/20038) ### Performance -* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. +* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. -* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). +* Page load speeds have been improved by moving non-critical CSS elements to the bottom of the page. This enables the browser to render and display a storefront page more quickly. This setting is disabled by default, but you can enable it using **Stores** > **Configuration** > **Advanced** > **Developer** > **CSS Settings** > **Use CSS critical path**. For more information, see [CSS critical path documentation]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-critical-path.html). -* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. +* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. -* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. +* Store pages now display text in readable system fonts while loading custom fonts, which significantly increases page load speed. Merchants who deploy stores that implement large CSS files and many fonts will notice the greatest improvement. ### Pricing -* You can now save a special price that exceeds three characters in Japanese Yen. Previously, you could not apply denominations that exceeded three characters with a comma separator when representing Yen. +* You can now save a special price that exceeds three characters in Japanese Yen. Previously, you could not apply denominations that exceeded three characters with a comma separator when representing Yen. -* You can now set product price that exceeds 100,000,000. +* You can now set product price that exceeds 100,000,000. ### Reports -* The default date range for report filters is now set to the past month instead of the past 18 years. Previously, the default was set to 18 years, which resulted in errors in the filtered results. *Fix submitted by Yaroslav Rogoza in pull request [23607](https://github.com/magento/magento2/pull/23607)*. [GitHub-23606](https://github.com/magento/magento2/issues/23606) +* The default date range for report filters is now set to the past month instead of the past 18 years. Previously, the default was set to 18 years, which resulted in errors in the filtered results. *Fix submitted by Yaroslav Rogoza in pull request [23607](https://github.com/magento/magento2/pull/23607)*. [GitHub-23606](https://github.com/magento/magento2/issues/23606) -* The start and finish date in reports now correspond to the entered values when you create a report from the Admin. Previously, the start and finish dates in the displayed report was one day earlier than you entered. +* The start and finish date in reports now correspond to the entered values when you create a report from the Admin. Previously, the start and finish dates in the displayed report was one day earlier than you entered. -* The access controls on the **Reports** > **Product** > **Downloads** have been refactored to permit access to only administrators with the correct permissions. Previously, administrators with no access to this area could access the Downloads report. *Fix submitted by Eden Duong in pull request [23901](https://github.com/magento/magento2/pull/23901)*. [GitHub-23900](https://github.com/magento/magento2/issues/23900) +* The access controls on the **Reports** > **Product** > **Downloads** have been refactored to permit access to only administrators with the correct permissions. Previously, administrators with no access to this area could access the Downloads report. *Fix submitted by Eden Duong in pull request [23901](https://github.com/magento/magento2/pull/23901)*. [GitHub-23900](https://github.com/magento/magento2/issues/23900) -* Selecting **Show by year** when filtering **Reports** > **Products** > **Ordered** now results in a list of products sold per year that is grouped by product quantity in descending order. Previously, Magento displayed a list of products sold per year that contained multiple entries for a single product on a per-order basis. *Fix submitted by Surabhi Srivastava in pull request [22087](https://github.com/magento/magento2/pull/22087)*. [GitHub-22646](https://github.com/magento/magento2/issues/22646), [GitHub-22087](https://github.com/magento/magento2/issues/22087) +* Selecting **Show by year** when filtering **Reports** > **Products** > **Ordered** now results in a list of products sold per year that is grouped by product quantity in descending order. Previously, Magento displayed a list of products sold per year that contained multiple entries for a single product on a per-order basis. *Fix submitted by Surabhi Srivastava in pull request [22087](https://github.com/magento/magento2/pull/22087)*. [GitHub-22646](https://github.com/magento/magento2/issues/22646), [GitHub-22087](https://github.com/magento/magento2/issues/22087) ### Reviews -* Administrators with restricted privileges to reviews can now edit review status from the pending reviews list. +* Administrators with restricted privileges to reviews can now edit review status from the pending reviews list. ### Sales -* The Orders Total now reflects relevant product discounts when you re-order a product. Previously, discounts were not included when you re-ordered. +* The Orders Total now reflects relevant product discounts when you re-order a product. Previously, discounts were not included when you re-ordered. -* Custom order statuses no longer override default statuses in drop-down menus. +* Custom order statuses no longer override default statuses in drop-down menus. -* The Admin payment method validation now uses the updated billing address country for orders placed in the Admin. Previously, order creation failed when the **Payment from Applicable Countries** setting was set to **Specific Countries** and a non-US country was selected from the Payment from Specific Countries list. +* The Admin payment method validation now uses the updated billing address country for orders placed in the Admin. Previously, order creation failed when the **Payment from Applicable Countries** setting was set to **Specific Countries** and a non-US country was selected from the Payment from Specific Countries list. -* You can now edit an order that contains a custom address attribute on its order form. Previously, Magento threw this error if you tried to edit an order with a custom address attribute: `We can't update the order address right now`. +* You can now edit an order that contains a custom address attribute on its order form. Previously, Magento threw this error if you tried to edit an order with a custom address attribute: `We can't update the order address right now`. -* You can now use quotation marks to create exact search terms in the Admin menu search grid (**Customers** > **All Customers**). +* You can now use quotation marks to create exact search terms in the Admin menu search grid (**Customers** > **All Customers**). -* The date format used in tables throughout the product interface is now based on the Admin-defined locale. +* The date format used in tables throughout the product interface is now based on the Admin-defined locale. -* Magento no longer lets you add a disabled variation of configurable product to the shopping cart from the Admin. +* Magento no longer lets you add a disabled variation of configurable product to the shopping cart from the Admin. -* Magento now includes the correct price for a discounted product when the Customer Group is not set to the default group. Previously, when you re-ordered a discounted product, the correct price was not displayed in the Items Ordered field. +* Magento now includes the correct price for a discounted product when the Customer Group is not set to the default group. Previously, when you re-ordered a discounted product, the correct price was not displayed in the Items Ordered field. -* Magento no longer adds to an order any selected products that have not been explicitly added to the cart when you create an order from the Admin. +* Magento no longer adds to an order any selected products that have not been explicitly added to the cart when you create an order from the Admin. -* Magento no longer throws a fatal error when you click **View Order** on an order that contains a product that was available when the order was created but which was subsequently deleted from the storefront. +* Magento no longer throws a fatal error when you click **View Order** on an order that contains a product that was available when the order was created but which was subsequently deleted from the storefront. -* The Allowed Countries drop-down list that is available in multisite deployments now reflects the settings that are configured in **Stores** > **Configuration** > **General** > **General** > **Country Options** > **Allow Countries**. +* The Allowed Countries drop-down list that is available in multisite deployments now reflects the settings that are configured in **Stores** > **Configuration** > **General** > **General** > **Country Options** > **Allow Countries**. ### Search -* Search results now reflect the search weight that you assign to product attributes in attribute configuration. +* Search results now reflect the search weight that you assign to product attributes in attribute configuration. -* Search by keyword now supports searching on zero (0). *Fix submitted by jeysmook in pull request [23424](https://github.com/magento/magento2/pull/23424)*. +* Search by keyword now supports searching on zero (0). *Fix submitted by jeysmook in pull request [23424](https://github.com/magento/magento2/pull/23424)*. -* You can now use Elasticsearch to run a query that includes the `<` character. Previously, when you used this symbol in a query, Magento threw this error: +* You can now use Elasticsearch to run a query that includes the `<` character. Previously, when you used this symbol in a query, Magento threw this error: `{"0":"SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected $end, query was: SELECT`. -* Disabled products now appear in the list of available products in the search results of the Page Builder link attribute–on buttons, images, banners, sliders. Previously, these products did not appear in search results, which prevented users from creating content that went live with a schedule update. +* Disabled products now appear in the list of available products in the search results of the Page Builder link attribute–on buttons, images, banners, sliders. Previously, these products did not appear in search results, which prevented users from creating content that went live with a schedule update. ### Shipping -* You can now use Cybersource as a payment method when multishipping is enabled. Previously, when you tried to place an order, Magento threw this error: `Invalid Form Key. Please refresh the page`. This resulted from a problem with auto-attaching a form key on the submit event when one form contained another form. +* You can now use Cybersource as a payment method when multishipping is enabled. Previously, when you tried to place an order, Magento threw this error: `Invalid Form Key. Please refresh the page`. This resulted from a problem with auto-attaching a form key on the submit event when one form contained another form. -* The Order Tracking page now displays the Contact us link as expected when this feature is enabled and the designated shipping carrier is not available on the Order page. *Fix submitted by Eduard Chitoraga in pull request [22823](https://github.com/magento/magento2/pull/22823)*. [GitHub-22822](https://github.com/magento/magento2/issues/22822) +* The Order Tracking page now displays the Contact us link as expected when this feature is enabled and the designated shipping carrier is not available on the Order page. *Fix submitted by Eduard Chitoraga in pull request [22823](https://github.com/magento/magento2/pull/22823)*. [GitHub-22822](https://github.com/magento/magento2/issues/22822) -* Magento no longer tries to validate UPS required fields (UPS Access License Number, User ID, and Password fields) when UPS shipping is not active. *Fix submitted by Serhiy Zhovnir in pull request [22787](https://github.com/magento/magento2/pull/22787)*. [GitHub-22786](https://github.com/magento/magento2/issues/22786) +* Magento no longer tries to validate UPS required fields (UPS Access License Number, User ID, and Password fields) when UPS shipping is not active. *Fix submitted by Serhiy Zhovnir in pull request [22787](https://github.com/magento/magento2/pull/22787)*. [GitHub-22786](https://github.com/magento/magento2/issues/22786) -* You can now use more than 35 characters in the shipper’s address field when booking a UPS shipment or generating a UPS shipment label. Previously, if this address exceeded 35 characters, Magento threw an error. *Fix submitted by Ankur Raiyani in pull request [23523](https://github.com/magento/magento2/pull/23523)*. +* You can now use more than 35 characters in the shipper’s address field when booking a UPS shipment or generating a UPS shipment label. Previously, if this address exceeded 35 characters, Magento threw an error. *Fix submitted by Ankur Raiyani in pull request [23523](https://github.com/magento/magento2/pull/23523)*. -* Magento now validates values entered into the **quantity** field on the Shipping to Multiple Addresses page. *Fix submitted by Nirmal Raval in pull request [23477](https://github.com/magento/magento2/pull/23477)*. +* Magento now validates values entered into the **quantity** field on the Shipping to Multiple Addresses page. *Fix submitted by Nirmal Raval in pull request [23477](https://github.com/magento/magento2/pull/23477)*. -* The updates that a customer makes to the shipping address during the checkout shipping step is maintained during the billing step. Previously, the information in the **Ship To** area was updated with empty values in the billing step when the **My billing and shipping address are the same** setting is set to **no**. *Fix submitted by rsimmons07 in pull request [23656](https://github.com/magento/magento2/pull/23656)*. [GitHub-22112](https://github.com/magento/magento2/issues/22112) +* The updates that a customer makes to the shipping address during the checkout shipping step is maintained during the billing step. Previously, the information in the **Ship To** area was updated with empty values in the billing step when the **My billing and shipping address are the same** setting is set to **no**. *Fix submitted by rsimmons07 in pull request [23656](https://github.com/magento/magento2/pull/23656)*. [GitHub-22112](https://github.com/magento/magento2/issues/22112) ### Sitemap -* Magento now generates all relevant product URLS when the **Use Categories Path for Product URLs** setting is enabled. +* Magento now generates all relevant product URLS when the **Use Categories Path for Product URLs** setting is enabled. -* The sitemap product generation for the **Use Categories Path for Product URLs** setting has been refactored. *Fix submitted by Sergiy Vasiutynskyi in pull request [23129](https://github.com/magento/magento2/pull/23129)*. [GitHub-22934](https://github.com/magento/magento2/issues/22934), [GitHub-4788](https://github.com/magento/magento2/issues/4788) +* The sitemap product generation for the **Use Categories Path for Product URLs** setting has been refactored. *Fix submitted by Sergiy Vasiutynskyi in pull request [23129](https://github.com/magento/magento2/pull/23129)*. [GitHub-22934](https://github.com/magento/magento2/issues/22934), [GitHub-4788](https://github.com/magento/magento2/issues/4788) ### Swatches -* You can update the dropdown attributes (**Admin** > **Stores** > **Attributes** > **Product**) when swatches have been disabled. Previously, when swatches were disabled, Magento displayed this error in the console: `Uncaught TypeError: panel.addClass is not a function`. *Fix submitted by Mark van der Sanden in pull request [22560](https://github.com/magento/magento2/pull/22560)*. [GitHub-20843](https://github.com/magento/magento2/issues/20843) +* You can update the dropdown attributes (**Admin** > **Stores** > **Attributes** > **Product**) when swatches have been disabled. Previously, when swatches were disabled, Magento displayed this error in the console: `Uncaught TypeError: panel.addClass is not a function`. *Fix submitted by Mark van der Sanden in pull request [22560](https://github.com/magento/magento2/pull/22560)*. [GitHub-20843](https://github.com/magento/magento2/issues/20843) -* The image gallery now correctly loads images for swatch colors. Previously, the gallery did not switch to the designated first image as expected. *Fix submitted by Milind Singh in pull request [23033](https://github.com/magento/magento2/pull/23033)*. [GitHub-23030](https://github.com/magento/magento2/issues/23030) +* The image gallery now correctly loads images for swatch colors. Previously, the gallery did not switch to the designated first image as expected. *Fix submitted by Milind Singh in pull request [23033](https://github.com/magento/magento2/pull/23033)*. [GitHub-23030](https://github.com/magento/magento2/issues/23030) ### Templates -* The Insert Variables popup window is now populated with template variables as expected. (This window is accessed from **Marketing** > **Email Templates** > **Add New Template**.) *Fix submitted by Mahesh Singh in pull request [23173](https://github.com/magento/magento2/pull/23173)*. [GitHub-23135](https://github.com/magento/magento2/issues/23135) +* The Insert Variables popup window is now populated with template variables as expected. (This window is accessed from **Marketing** > **Email Templates** > **Add New Template**.) *Fix submitted by Mahesh Singh in pull request [23173](https://github.com/magento/magento2/pull/23173)*. [GitHub-23135](https://github.com/magento/magento2/issues/23135) ### Testing -* The following tests have been improved: +* The following tests have been improved: `CheckoutWithBraintreePaypalMinicartTest` `Magento\Catalog\Setup\Patch\Schema\ChangeTmpTablesEngine` `MAGETWO-69516: Cart Price Rule with related Banner for specific Customer Segment is persisted under long-term cookie` @@ -1008,175 +1013,184 @@ This release includes the following changes to integrations for core payment met `Mftf Test: StorefrontApplyCategoryPermissionsToSecondWebsiteTest` -* The Dependency static test now detects URL dependencies as expected. +* The Dependency static test now detects URL dependencies as expected. -* `Magento.Framework.Image.Adapter.InterfaceTest.testValidateUploadFileException` with data set `image_empty` no longer fails on 2.3.3-develop. +* `Magento.Framework.Image.Adapter.InterfaceTest.testValidateUploadFileException` with data set `image_empty` no longer fails on 2.3.3-develop. -* `CommentLevelsSniff` now works correctly with the `@magento_import` statement. Previously, when you ran `Magento\Test\Less\LiveCodeTest`, Magento threw an error on lines that contained `@magento_import`. *Fix submitted by Pavel Bystritsky in pull request [23790](https://github.com/magento/magento2/pull/23790)*. [GitHub-23789](https://github.com/magento/magento2/issues/23789) +* `CommentLevelsSniff` now works correctly with the `@magento_import` statement. Previously, when you ran `Magento\Test\Less\LiveCodeTest`, Magento threw an error on lines that contained `@magento_import`. *Fix submitted by Pavel Bystritsky in pull request [23790](https://github.com/magento/magento2/pull/23790)*. [GitHub-23789](https://github.com/magento/magento2/issues/23789) -* Magento now deletes the stub modules that tests create. Previously, integration tests created stub modules in `app/code`, which could potentially affect production code. *Fix submitted by Andreas von Studnitz in pull request [18459](https://github.com/magento/magento2/pull/18459)*. [GitHub-12696](https://github.com/magento/magento2/issues/12696) +* Magento now deletes the stub modules that tests create. Previously, integration tests created stub modules in `app/code`, which could potentially affect production code. *Fix submitted by Andreas von Studnitz in pull request [18459](https://github.com/magento/magento2/pull/18459)*. [GitHub-12696](https://github.com/magento/magento2/issues/12696) ### Translation and locales -* White space between words now appears as expected in non-English websites. *Fix submitted by Alexey Arendarenko in pull request [23081](https://github.com/magento/magento2/pull/23081)*. [GitHub-23080](https://github.com/magento/magento2/issues/23080) +* White space between words now appears as expected in non-English websites. *Fix submitted by Alexey Arendarenko in pull request [23081](https://github.com/magento/magento2/pull/23081)*. [GitHub-23080](https://github.com/magento/magento2/issues/23080) -* The payment method area of the shipment and credit memo emails that are sent to customers now have correctly translated strings. *Fix submitted by Alexey Arendarenko in pull request [23338](https://github.com/magento/magento2/pull/23338)*. +* The payment method area of the shipment and credit memo emails that are sent to customers now have correctly translated strings. *Fix submitted by Alexey Arendarenko in pull request [23338](https://github.com/magento/magento2/pull/23338)*. ### UI -* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. +* The `jQuery/ui` library has been refactored into separate widgets so that core modules load only the widgets they need. This update improves the performance of core storefront tasks including the loading of category, configurable product, home, and checkout pages. -* The calendar date picker now updates values as expected when the linked input value is changed. +* The calendar date picker now updates values as expected when the linked input value is changed. -* The URL rewrites category tree now includes all relevant categories. Previously, when you selected **For Category** after selecting **Create URL Rewrite** from (**Marketing** > **Url Rewrites**), Magento did not include most categories in the resulting view. +* The URL rewrites category tree now includes all relevant categories. Previously, when you selected **For Category** after selecting **Create URL Rewrite** from (**Marketing** > **Url Rewrites**), Magento did not include most categories in the resulting view. -* Magento now saves order views with the date ranges you enter while creating the filter (**Sales** > **Orders**). Previously, when you opened a saved filtered order view, Magento indicated that the dates you entered were invalid. +* Magento now saves order views with the date ranges you enter while creating the filter (**Sales** > **Orders**). Previously, when you opened a saved filtered order view, Magento indicated that the dates you entered were invalid. -* Form element validation is now triggered as expected when form validation rules change. Previously, when you changed form validation rules for a form element during runtime, the new validation rules were not applied. *Fix submitted by Roman Kis in pull request [21992](https://github.com/magento/magento2/pull/21992)*. [GitHub-21473](https://github.com/magento/magento2/issues/21473) +* Form element validation is now triggered as expected when form validation rules change. Previously, when you changed form validation rules for a form element during runtime, the new validation rules were not applied. *Fix submitted by Roman Kis in pull request [21992](https://github.com/magento/magento2/pull/21992)*. [GitHub-21473](https://github.com/magento/magento2/issues/21473) -* The arrow toggle page element now works as expected throughout the Admin. *Fix submitted by Arvinda Kumar in pull request [22644](https://github.com/magento/magento2/pull/22644)*. [GitHub-22636](https://github.com/magento/magento2/issues/22636) +* The arrow toggle page element now works as expected throughout the Admin. *Fix submitted by Arvinda Kumar in pull request [22644](https://github.com/magento/magento2/pull/22644)*. [GitHub-22636](https://github.com/magento/magento2/issues/22636) -* The height setting in `.admin__control-textarea` component is no longer hard-coded. Previously, this hard-coded value prevented you from changing the height of this text field through the UI. *Fix submitted by Serhiy Zhovnir in pull request [22779](https://github.com/magento/magento2/pull/22779)*. [GitHub-22771](https://github.com/magento/magento2/issues/22771) +* The height setting in `.admin__control-textarea` component is no longer hard-coded. Previously, this hard-coded value prevented you from changing the height of this text field through the UI. *Fix submitted by Serhiy Zhovnir in pull request [22779](https://github.com/magento/magento2/pull/22779)*. [GitHub-22771](https://github.com/magento/magento2/issues/22771) -* Added appropriate white space between elements of product descriptions on the product list view. *Fix submitted by Hitesh in pull request [22931](https://github.com/magento/magento2/pull/22931)*. [GitHub-20788](https://github.com/magento/magento2/issues/20788) +* Added appropriate white space between elements of product descriptions on the product list view. *Fix submitted by Hitesh in pull request [22931](https://github.com/magento/magento2/pull/22931)*. [GitHub-20788](https://github.com/magento/magento2/issues/20788) -* Scrolling now behaves as expected on the create order page. *Fix submitted by Denis Kopylov in pull request [23035](https://github.com/magento/magento2/pull/23035)*. [GitHub-23034](https://github.com/magento/magento2/issues/23034) +* Scrolling now behaves as expected on the create order page. *Fix submitted by Denis Kopylov in pull request [23035](https://github.com/magento/magento2/pull/23035)*. [GitHub-23034](https://github.com/magento/magento2/issues/23034) -* Page element layout issues on **Stores** > **Configuration** > **Advanced** > **Admin** have been resolved. Previously, when you expanded the security block on this page, the **Use system value** text appeared at the top of the page, not adjacent to the checkbox it applied to. +* Page element layout issues on **Stores** > **Configuration** > **Advanced** > **Admin** have been resolved. Previously, when you expanded the security block on this page, the **Use system value** text appeared at the top of the page, not adjacent to the checkbox it applied to. -* The missing **Update Totals** button has been added to the Credit Memo page. +* The missing **Update Totals** button has been added to the Credit Memo page. -* Magento now displays an error message as needed when you click the **Catalog** > **Products** > **Create Configurations** button and submit invalid data. Previously, Magento did not display the error message after validation due to lack of autofocus on the error field. +* Magento now displays an error message as needed when you click the **Catalog** > **Products** > **Create Configurations** button and submit invalid data. Previously, Magento did not display the error message after validation due to lack of autofocus on the error field. *Fix submitted by Eden Duong in pull request [23905](https://github.com/magento/magento2/pull/23905)*. [GitHub-23904](https://github.com/magento/magento2/issues/23904) -* The toggle icon on the **Catalog** > **Products** > **New Product (Configurable)** > **Create Configuration** page now works as expected. *Fix submitted by Eden Duong in pull request [23803](https://github.com/magento/magento2/pull/23803)*. [GitHub-22702](https://github.com/magento/magento2/issues/22702) +* The toggle icon on the **Catalog** > **Products** > **New Product (Configurable)** > **Create Configuration** page now works as expected. *Fix submitted by Eden Duong in pull request [23803](https://github.com/magento/magento2/pull/23803)*. [GitHub-22702](https://github.com/magento/magento2/issues/22702) -* Magento no longer validates data in the **Discount Amount** field after page load until the user performs an action in the Create New Catalog Rule form. Previously, Magento ran validation checks on that field despite its inactivity, and threw an error. *Fix submitted by Eden Duong in pull request [23779](https://github.com/magento/magento2/pull/23779)*. [GitHub-23777](https://github.com/magento/magento2/issues/23777) +* Magento no longer validates data in the **Discount Amount** field after page load until the user performs an action in the Create New Catalog Rule form. Previously, Magento ran validation checks on that field despite its inactivity, and threw an error. *Fix submitted by Eden Duong in pull request [23779](https://github.com/magento/magento2/pull/23779)*. [GitHub-23777](https://github.com/magento/magento2/issues/23777) -* You can now edit the status label for the storefront from the Admin in single-store mode. Previously, there was no status field available from **Stores** > **Order Status** when single-store mode was enabled. *Fix submitted by Eden Duong in pull request [23681](https://github.com/magento/magento2/pull/23681)*. [GitHub-22654](https://github.com/magento/magento2/issues/22654) +* You can now edit the status label for the storefront from the Admin in single-store mode. Previously, there was no status field available from **Stores** > **Order Status** when single-store mode was enabled. *Fix submitted by Eden Duong in pull request [23681](https://github.com/magento/magento2/pull/23681)*. [GitHub-22654](https://github.com/magento/magento2/issues/22654) -* The design of the Review & Payments **Apply Discount Coupon** box of the checkout page has been improved. *Fix submitted by Abrar Pathan in pull request [21215](https://github.com/magento/magento2/pull/21215)*. [GitHub-21214](https://github.com/magento/magento2/issues/21214) +* The design of the Review & Payments **Apply Discount Coupon** box of the checkout page has been improved. *Fix submitted by Abrar Pathan in pull request [21215](https://github.com/magento/magento2/pull/21215)*. [GitHub-21214](https://github.com/magento/magento2/issues/21214) -* The `always` action that precedes the opening of the alert and confirm widgets is now called once. Previously, the `always triggering` text was logged twice after you clicked the **OK** button. *Fix submitted by Eduard Chitoraga in pull request [23234](https://github.com/magento/magento2/pull/23234)*. [GitHub-23233](https://github.com/magento/magento2/issues/23233) +* The `always` action that precedes the opening of the alert and confirm widgets is now called once. Previously, the `always triggering` text was logged twice after you clicked the **OK** button. *Fix submitted by Eduard Chitoraga in pull request [23234](https://github.com/magento/magento2/pull/23234)*. [GitHub-23233](https://github.com/magento/magento2/issues/23233) -* Magento now sets the `last` CSS class to the top menu when one or more parent items are not active. As a result, menu items will be filtered before they are processed for HTML output. *Fix submitted by Arnoud Beekman in pull request [22071](https://github.com/magento/magento2/pull/22071)*. [GitHub-13266](https://github.com/magento/magento2/issues/13266) +* Magento now sets the `last` CSS class to the top menu when one or more parent items are not active. As a result, menu items will be filtered before they are processed for HTML output. *Fix submitted by Arnoud Beekman in pull request [22071](https://github.com/magento/magento2/pull/22071)*. [GitHub-13266](https://github.com/magento/magento2/issues/13266) -* The form reset feature now clears the **date** field in Admin forms as expected. *Fix submitted by Nirav Patel in pull request [23007](https://github.com/magento/magento2/pull/23007)*. [GitHub-22940](https://github.com/magento/magento2/issues/22940) +* The form reset feature now clears the **date** field in Admin forms as expected. *Fix submitted by Nirav Patel in pull request [23007](https://github.com/magento/magento2/pull/23007)*. [GitHub-22940](https://github.com/magento/magento2/issues/22940) -* You can now specify custom fonts for use in your deployment. Previously, the `.lib-font-face()` mixin required that you include the font in all the formats listed (for example, `eot`, `woff2`, `woff`, `ttf`, and `svg`). If your font was not available in these formats, Magento displayed a 404 error. *Fix submitted by Karla Saaremäe in pull request [22854](https://github.com/magento/magento2/pull/22854)*. [GitHub-4628](https://github.com/magento/magento2/issues/4628) +* You can now specify custom fonts for use in your deployment. Previously, the `.lib-font-face()` mixin required that you include the font in all the formats listed (for example, `eot`, `woff2`, `woff`, `ttf`, and `svg`). If your font was not available in these formats, Magento displayed a 404 error. *Fix submitted by Karla Saaremäe in pull request [22854](https://github.com/magento/magento2/pull/22854)*. [GitHub-4628](https://github.com/magento/magento2/issues/4628) -* The **Refund** button on the credit memo page now remains active after a merchant enters a value in the Refund Totals section. *Fix submitted by Nishant Jariwala in pull request [23286](https://github.com/magento/magento2/pull/23286)*. [GitHub-23285](https://github.com/magento/magento2/issues/23285) +* The **Refund** button on the credit memo page now remains active after a merchant enters a value in the Refund Totals section. *Fix submitted by Nishant Jariwala in pull request [23286](https://github.com/magento/magento2/pull/23286)*. [GitHub-23285](https://github.com/magento/magento2/issues/23285) -* The behavior of the mobile menu JavaScript now triggers at the same breakpoint as the mobile menu styles. *Fix submitted by bobemoe in pull request [23528](https://github.com/magento/magento2/pull/23528)*. [GitHub-8298](https://github.com/magento/magento2/issues/8298) +* The behavior of the mobile menu JavaScript now triggers at the same breakpoint as the mobile menu styles. *Fix submitted by bobemoe in pull request [23528](https://github.com/magento/magento2/pull/23528)*. [GitHub-8298](https://github.com/magento/magento2/issues/8298) -* The `font-size` setting for all `input-field` labels with a tooltip is no longer set to 0, and time fields are separated by colons (:) as expected. *Fix submitted by Geeta Modi in pull request [23393](https://github.com/magento/magento2/pull/23393)*. [GitHub-21974](https://github.com/magento/magento2/issues/21974) +* The `font-size` setting for all `input-field` labels with a tooltip is no longer set to 0, and time fields are separated by colons (:) as expected. *Fix submitted by Geeta Modi in pull request [23393](https://github.com/magento/magento2/pull/23393)*. [GitHub-21974](https://github.com/magento/magento2/issues/21974) -* Magento now displays the Admin grid header as expected when there are no buttons in the toolbar. *Fix submitted by Shankar Konar in pull request [23247](https://github.com/magento/magento2/pull/23247)*. +* Magento now displays the Admin grid header as expected when there are no buttons in the toolbar. *Fix submitted by Shankar Konar in pull request [23247](https://github.com/magento/magento2/pull/23247)*. ### URL rewrites -* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. +* Merchants now have the ability to turn off the automatic URL rewrite generation that occurs by default on products when the category they belong to is saved. The new **Generate "category/product" URL Rewrites** configuration option controls this behavior. When this feature is enabled, Magento will generate a lot of data when saving a category that contains many assigned products. This generated data is saved into rewrite tables that can degrade Magento performance. -* Redundant URL rewrite operations that were triggered by category operations have been eliminated, and page load performance has been improved. Previously, updating a category to add or delete products triggered URL rewrite regeneration for all products with changed positions. +* Redundant URL rewrite operations that were triggered by category operations have been eliminated, and page load performance has been improved. Previously, updating a category to add or delete products triggered URL rewrite regeneration for all products with changed positions. -* Magento no longer removes the query string from URLs when the query string is preceded by a slash. Previously, when a customer opened a URL that contained a trailing slash and query string (for example, `http://magento.host.com/sample-url-key/?cupcakes`), Magento redirected the user to a URL that omitted the slash (`http://magento.host.com/sample-url-key`). +* Magento no longer removes the query string from URLs when the query string is preceded by a slash. Previously, when a customer opened a URL that contained a trailing slash and query string (for example, `http://magento.host.com/sample-url-key/?cupcakes`), Magento redirected the user to a URL that omitted the slash (`http://magento.host.com/sample-url-key`). -* URL redirects now work as expected when you click **Save** after editing a product view from the Customer tab (**Customer** > **Product Reviews** > **Edit Review**). *Fix submitted by Ravi Chandra in pull request [22426](https://github.com/magento/magento2/pull/22426)*. [GitHub-22425](https://github.com/magento/magento2/issues/22425) +* URL redirects now work as expected when you click **Save** after editing a product view from the Customer tab (**Customer** > **Product Reviews** > **Edit Review**). *Fix submitted by Ravi Chandra in pull request [22426](https://github.com/magento/magento2/pull/22426)*. [GitHub-22425](https://github.com/magento/magento2/issues/22425) -* Magento now correctly renders the value of a product’s customizable option field of type `Area` when you enter a multi-line value from the Admin. Previously, a multi-line value was rendered with an HTML `
` tag as part of the value. *Fix submitted by Sunil in pull request [23524](https://github.com/magento/magento2/pull/23524)*. [GitHub-23510](https://github.com/magento/magento2/issues/23510) +* Magento now correctly renders the value of a product’s customizable option field of type `Area` when you enter a multi-line value from the Admin. Previously, a multi-line value was rendered with an HTML `
` tag as part of the value. *Fix submitted by Sunil in pull request [23524](https://github.com/magento/magento2/pull/23524)*. [GitHub-23510](https://github.com/magento/magento2/issues/23510) -* You can now use a plus sign (+) character in content contained within a widget on a CMS page. Previously, Magento did not render the character, although it appeared in the page content stored in the database and when editing the widget. *Fix submitted by Sarfaraz Bheda in pull request [23496](https://github.com/magento/magento2/pull/23496)*. +* You can now use a plus sign (+) character in content contained within a widget on a CMS page. Previously, Magento did not render the character, although it appeared in the page content stored in the database and when editing the widget. *Fix submitted by Sarfaraz Bheda in pull request [23496](https://github.com/magento/magento2/pull/23496)*. -* Product URLs are now updated as expected after Magento changes the URL key of the category in multi-site deployment. *Fix submitted by Alastair Mucklow in pull request [23309](https://github.com/magento/magento2/pull/23309)*. [GitHub-23074](https://github.com/magento/magento2/issues/23074) +* Product URLs are now updated as expected after Magento changes the URL key of the category in multi-site deployment. *Fix submitted by Alastair Mucklow in pull request [23309](https://github.com/magento/magento2/pull/23309)*. [GitHub-23074](https://github.com/magento/magento2/issues/23074) ### Vertex -* Incorrect Customer Codes are no longer sent when Vertex invoices are set to send during an order status change. +* Incorrect Customer Codes are no longer sent when Vertex invoices are set to send during an order status change. -* Resolved an issue where assisted parameters were not requested and logged during Invoice calls made during Order Status Change. +* Resolved an issue where assisted parameters were not requested and logged during Invoice calls made during Order Status Change. -* Calls to Vertex are now made when string values exceed the maximum allowed length in the Vertex SDK. +* Calls to Vertex are now made when string values exceed the maximum allowed length in the Vertex SDK. -* Tax code, vertex tax code, and invoice text codes are now saved for orders created during Guest Checkout. +* Tax code, vertex tax code, and invoice text codes are now saved for orders created during Guest Checkout. -* Guest Orders are no longer invoiced twice if logging was enabled. +* Guest Orders are no longer invoiced twice if logging was enabled. -* Shipping is now included on a Vertex invoice if that invoice was sent in the same request that its order was created in if that order was placed using guest checkout. +* Shipping is now included on a Vertex invoice if that invoice was sent in the same request that its order was created in if that order was placed using guest checkout. ### Web API framework -* Magento now renders shipment details for an order without a fatal error when you use REST to create a shipment. *Fix submitted by Milind Singh in pull request [22687](https://github.com/magento/magento2/pull/22687)*. [GitHub-22686](https://github.com/magento/magento2/issues/22686) +* Magento now renders shipment details for an order without a fatal error when you use REST to create a shipment. *Fix submitted by Milind Singh in pull request [22687](https://github.com/magento/magento2/pull/22687)*. [GitHub-22686](https://github.com/magento/magento2/issues/22686) -* You can now use REST to update a customer that has no associated `store_id` without unintentionally changing other information. Previously, Magento changed the `store_id` to the default `store_id` if this field was left empty in the PUT request. *Fix submitted by Mateusz Wira in pull request [22893](https://github.com/magento/magento2/pull/22893)*. [GitHub-22869](https://github.com/magento/magento2/issues/22869) +* You can now use REST to update a customer that has no associated `store_id` without unintentionally changing other information. Previously, Magento changed the `store_id` to the default `store_id` if this field was left empty in the PUT request. *Fix submitted by Mateusz Wira in pull request [22893](https://github.com/magento/magento2/pull/22893)*. [GitHub-22869](https://github.com/magento/magento2/issues/22869) -* Swagger now accepts requests in XML and can display results in the same format. *Fix submitted by Simon Schröer in pull request [23025](https://github.com/magento/magento2/pull/23025)*. +* Swagger now accepts requests in XML and can display results in the same format. *Fix submitted by Simon Schröer in pull request [23025](https://github.com/magento/magento2/pull/23025)*. -* The `POST` on `/orders` REST calls no longer fail when properties in the request body are out of order. Previously, when billing address data preceded customer data in the Order Create API JSON payload, the billing address email was not populated, so the order was empty. *Fix submitted by Mateusz Wira in pull request [23048](https://github.com/magento/magento2/pull/23048)*. +* The `POST` on `/orders` REST calls no longer fail when properties in the request body are out of order. Previously, when billing address data preceded customer data in the Order Create API JSON payload, the billing address email was not populated, so the order was empty. *Fix submitted by Mateusz Wira in pull request [23048](https://github.com/magento/magento2/pull/23048)*. ### Wishlist -* Wishlists now accurately reflect product availability when a product has been added to a wishlist and then subsequently disabled. Previously, the wishlist displayed these contradictory messages: **You have no items in your wish list** and **1 item in wish list**. +* Wishlists now accurately reflect product availability when a product has been added to a wishlist and then subsequently disabled. Previously, the wishlist displayed these contradictory messages: **You have no items in your wish list** and **1 item in wish list**. -* Wishlist names can now be edited from the storefront. +* Wishlist names can now be edited from the storefront. -* The `Magento\FunctionalTestingFramework.functional.StorefrontAddMultipleStoreProductsToWishlistTest` test no longer fails randomly. +* The `Magento\FunctionalTestingFramework.functional.StorefrontAddMultipleStoreProductsToWishlistTest` test no longer fails randomly. -* The wishlist no longer shows an item that has been disabled on the Admin. +* The wishlist no longer shows an item that has been disabled on the Admin. -* Wishlist items now display decimal values as appropriate. Previously, Magento saved decimal quantities for wishlist items but did not display these values in the wishlist on the storefront. *Fix submitted by Max Fickers in pull request [23933](https://github.com/magento/magento2/pull/23933)*. [GitHub-23932](https://github.com/magento/magento2/issues/23932) +* Wishlist items now display decimal values as appropriate. Previously, Magento saved decimal quantities for wishlist items but did not display these values in the wishlist on the storefront. *Fix submitted by Max Fickers in pull request [23933](https://github.com/magento/magento2/pull/23933)*. [GitHub-23932](https://github.com/magento/magento2/issues/23932) + +## Known issue + +**Issue**: +With this release, the `\Magento\Framework\Mail\MessageInterface` class has been replaced with `\Magento\Framework\Mail\EmailMessageInterface`. This new class supports the sending of multi-part MIME-type content within email and extends the existing `MailMessageInterface` and `MessageInterface` classes to ensure backward compatibility and provide a transition period for extension developers. Extension developers and merchants who are deploying third-party extensions that implement `\Magento\Framework\Mail\MessageInterface` should be aware of these changes. + +The  `Magento\Framework\Mail\Template\TransportBuilder` and `Magento\Newsletter\Model\Queue\TransportBuilder` structures were refactored to return this new `EmailMessageInterface` instead of the `MessageInterface`,  which was previously returned. Although the signature of the `Transport::getMessage()` method was not changed, extensions can start using the new `EmailMessageInterface`. + +**Workaround**: In deployments that include third-party customizations, the old `MessageInterface` might still be instantiated. How you prevent this instantiation depends upon the particular usage of `MessageInterface` in your code. See the Magento forum DevBlog post [Backward-incompatible Changes in the Mail Library for Magento 2.3.3](https://community.magento.com/t5/Magento-DevBlog/Backward-incompatible-Changes-in-the-Mail-Library-for-Magento-2/ba-p/144787) for more information. **This issue has been addressed in the EmailMessageInterface backward compatibility issue patch, which was released on October 14, 2019. Merchants should apply this patch as soon as possible, especially if their deployments include extensions or customizations that use the Mail interface.** ## Community contributions We are grateful to the wider Magento community and would like to acknowledge their contributions to this release. Check out the following ways you can learn about the community contributions to our current releases: -* If a community member has provided a fix for this release, we identify the fix in the Fixed Issue section of these notes with the phrase, "*Fix provided by community member @member_name*". +* If a community member has provided a fix for this release, we identify the fix in the Fixed Issue section of these notes with the phrase, "*Fix provided by community member @member_name*". -* The Magento Community Engineering team [Magento Contributors](https://magento.com/magento-contributors) maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub. +* The Magento Community Engineering team [Magento Contributors](https://magento.com/magento-contributors) maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub. ### Partner contributions @@ -1202,4 +1216,4 @@ You can install {{site.data.var.ce}} 2.3.3 using Composer. The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see [Install the Data Migration Tool]({{page.baseurl}}/migration/migration-tool-install.html). Consider exploring or contributing to the [Magento Data Migration repository](https://github.com/magento/data-migration-tool). -The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. +The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. diff --git a/guides/v2.3/rest/tutorials/inventory/configure-environment.md b/guides/v2.3/rest/tutorials/inventory/configure-environment.md index 9a7da925f54..ac2fdd476c5 100644 --- a/guides/v2.3/rest/tutorials/inventory/configure-environment.md +++ b/guides/v2.3/rest/tutorials/inventory/configure-environment.md @@ -31,7 +31,7 @@ In this tutorial, we'll create the infrastructure needed to implement a US and a Click **Save Web Site**. -2. Click **Create Store** and assign the following values: +1. Click **Create Store** and assign the following values: Field | Value --- | --- @@ -42,7 +42,7 @@ In this tutorial, we'll create the infrastructure needed to implement a US and a Click **Save Store**. -3. Click **Create Store View** and assign the following values: +1. Click **Create Store View** and assign the following values: Field | Value --- | --- @@ -64,7 +64,7 @@ In this tutorial, we'll create the infrastructure needed to implement a US and a Click **Save Web Site**. -2. Click **Create Store** and assign the following values: +1. Click **Create Store** and assign the following values: Field | Value --- | --- @@ -75,7 +75,7 @@ In this tutorial, we'll create the infrastructure needed to implement a US and a Click **Save Store**. -3. Click **Create Store View** and assign the following values: +1. Click **Create Store View** and assign the following values: Field | Value --- | --- @@ -91,8 +91,8 @@ In this tutorial, we'll create the infrastructure needed to implement a US and a To make it easier to locate products and log in as a customer later in this tutorial, configure Magento to add the store code to the URL. 1. Click **Stores** > Setting* > **Configuration** > **Web** and expand the **Url Options** section. -2. Change the value of **Add Store Code to Urls** to **Yes**. -3. Click **Save Config**. +1. Change the value of **Add Store Code to Urls** to **Yes**. +1. Click **Save Config**. ## Configure payment and shipping methods diff --git a/guides/v2.3/rest/tutorials/inventory/create-customer.md b/guides/v2.3/rest/tutorials/inventory/create-customer.md index 3eb5a47f950..e3801bebc71 100644 --- a/guides/v2.3/rest/tutorials/inventory/create-customer.md +++ b/guides/v2.3/rest/tutorials/inventory/create-customer.md @@ -205,6 +205,7 @@ By default, a customer token is valid for 1 hour. To change this value, click ** "password": "Password1" } ``` + **Response** Magento returns the customer's access token. Your integration must specify a customer token in the authorization header of every call customers make on their own behalf. @@ -214,5 +215,5 @@ Magento returns the customer's access token. Your integration must specify a cus ## Verify this step {#verify-step} 1. Log in to the Test website using the email `jdoe@example.com` and password `Password1`. -2. Click the account name (Jane) in the upper right corner and select **My Account**. -3. Click **Address Book** to view the default billing and shipping addresses. +1. Click the account name (Jane) in the upper right corner and select **My Account**. +1. Click **Address Book** to view the default billing and shipping addresses. diff --git a/guides/v2.3/rest/tutorials/inventory/create-invoice.md b/guides/v2.3/rest/tutorials/inventory/create-invoice.md index cdee1f769d6..6c23a9b95f3 100644 --- a/guides/v2.3/rest/tutorials/inventory/create-invoice.md +++ b/guides/v2.3/rest/tutorials/inventory/create-invoice.md @@ -53,4 +53,4 @@ An invoice `id`, such as `3`. 1. Click **Sales** > **Invoices**. The invoice displays in the grid with a status of Paid. Then click **Sales** > **Orders**. The status is Processing. -2. Click **Catalog** > **Products**. For `vp1`, Magento adjusted the value of **Quantity per Source** and **Salable Quantity** to 9998 for all sources and stocks. +1. Click **Catalog** > **Products**. For `vp1`, Magento adjusted the value of **Quantity per Source** and **Salable Quantity** to 9998 for all sources and stocks. diff --git a/guides/v2.3/rest/tutorials/inventory/create-order.md b/guides/v2.3/rest/tutorials/inventory/create-order.md index 333c842ddfe..bc1405df4d1 100644 --- a/guides/v2.3/rest/tutorials/inventory/create-order.md +++ b/guides/v2.3/rest/tutorials/inventory/create-order.md @@ -64,5 +64,5 @@ An `orderID`, such as `3` ## Verify this step {#verify-step} 1. Log in to the US store as the customer. The dashboard shows the order. -2. Log in to [Admin](https://glossary.magento.com/admin). Click **Sales** > **Orders**. The order is displayed in the grid. Its status is Pending. -3. Click **Catalog** > **Products**. The **Salable Quantity** column shows that fewer items of the ordered products are available. The values in the **Quantity per Source** are not affected until shipment. +1. Log in to [Admin](https://glossary.magento.com/admin). Click **Sales** > **Orders**. The order is displayed in the grid. Its status is Pending. +1. Click **Catalog** > **Products**. The **Salable Quantity** column shows that fewer items of the ordered products are available. The values in the **Quantity per Source** are not affected until shipment. diff --git a/guides/v2.3/rest/tutorials/inventory/create-shipment.md b/guides/v2.3/rest/tutorials/inventory/create-shipment.md index f764c07beb7..2a9e7cc1efe 100644 --- a/guides/v2.3/rest/tutorials/inventory/create-shipment.md +++ b/guides/v2.3/rest/tutorials/inventory/create-shipment.md @@ -266,4 +266,4 @@ Use the same endpoint to ship the remaining 35 `sp2` items from the Reno warehou ## Verify this step {#verify-step} 1. Click **Sales** > **Shipments**. The two shipments for this order are displayed in the grid. -2. Click **Catalog** > **Products**. Verify that the **Quantity per Source** values are correct for each product, based on the selections you made at shipment. +1. Click **Catalog** > **Products**. Verify that the **Quantity per Source** values are correct for each product, based on the selections you made at shipment. diff --git a/guides/v2.3/rest/tutorials/inventory/run-ssa.md b/guides/v2.3/rest/tutorials/inventory/run-ssa.md index fb8c07e23ff..d2387ccb072 100644 --- a/guides/v2.3/rest/tutorials/inventory/run-ssa.md +++ b/guides/v2.3/rest/tutorials/inventory/run-ssa.md @@ -146,6 +146,6 @@ Product | Source | Quantity ## Verify this step {#verify-step} 1. Click **Sales** > **Orders**. -2. Click the **View** link in the Action column for the order. -3. Click **Ship**. -4. Select different sources from the **Sources** menu. +1. Click the **View** link in the Action column for the order. +1. Click **Ship**. +1. Select different sources from the **Sources** menu. diff --git a/guides/v2.3/test/integration/annotations/magento-config-fixture.md b/guides/v2.3/test/integration/annotations/magento-config-fixture.md index 3934a6d8596..66d928474d1 100644 --- a/guides/v2.3/test/integration/annotations/magento-config-fixture.md +++ b/guides/v2.3/test/integration/annotations/magento-config-fixture.md @@ -13,18 +13,18 @@ To set the Magento configuration values for individual tests and revert them aft */ ``` -- `` is a code of the store to be configured. +- `` is a code of the store to be configured. By default, the configuration option is applied globally. To specify the current store, use `current`. -- `` is an XPath to the configuration option. +- `` is an XPath to the configuration option. See [configuration reference][] for available options. -- `` is a fixture value for the configuration option. +- `` is a fixture value for the configuration option. ## Principles 1. The `@magentoConfigFixture` is available at a test method level only. It is not available on a test case level. -2. A test can contain several configuration options. +1. A test can contain several configuration options. ## Example @@ -200,4 +200,4 @@ class ConfigFixtureTest extends \PHPUnit\Framework\TestCase -[configuration reference]: {{ page.baseurl }}/config-guide/prod/config-reference-sens.html \ No newline at end of file +[configuration reference]: {{ page.baseurl }}/config-guide/prod/config-reference-sens.html diff --git a/guides/v2.3/test/integration/annotations/magento-data-fixture.md b/guides/v2.3/test/integration/annotations/magento-data-fixture.md index 0f6c4afaed9..977b7b6b551 100644 --- a/guides/v2.3/test/integration/annotations/magento-data-fixture.md +++ b/guides/v2.3/test/integration/annotations/magento-data-fixture.md @@ -20,34 +20,35 @@ To set up a date fixture, use the `@magentoDataFixture` annotation. */ ``` -- `` is a filename of the PHP script. -- `` is a name of the method declared in the current class. +- `` is a filename of the PHP script. +- `` is a name of the method declared in the current class. ## Principles 1. Do not use a direct database connection in fixtures to avoid dependencies on the database structure and vendor. -2. Use an application API to implement your data fixtures. -3. A method that implements a data fixture must be declared as `public` and `static`. -4. Fixtures declared at a test level have a higher priority then fixtures declared at a test case level. -5. Test case fixtures are applied to each test in the test case, unless a test has its own fixtures declared. -6. Annotation declaration at a test case level doesn't affect tests that have their own annotation declarations. +1. Use an application API to implement your data fixtures. +1. A method that implements a data fixture must be declared as `public` and `static`. +1. Fixtures declared at a test level have a higher priority then fixtures declared at a test case level. +1. Test case fixtures are applied to each test in the test case, unless a test has its own fixtures declared. +1. Annotation declaration at a test case level doesn't affect tests that have their own annotation declarations. ## Usage As mentioned above, there are two ways to declare fixtures: -- as a PHP script file that is used by other tests and test cases. -- as a local method that is used by other tests in the test cases. +- as a PHP script file that is used by other tests and test cases. +- as a local method that is used by other tests in the test cases. ### Fixture as a separate file Define the fixture in a separate file when you want to reuse it in different test cases. To declare the fixture, use the following conventions for a path -- Relative to `dev/tests/integration/` -- With forward slashes `/` -- No leading slash - Example: `Magento/Cms/_files/pages.php` +- Relative to `dev/tests/integration/` +- With forward slashes `/` +- No leading slash + + Example: `Magento/Cms/_files/pages.php` The ITF includes the declared PHP script to your test and executes it during test run. @@ -78,9 +79,9 @@ The following is an example of the `testCreatePageWithSameModuleName()` test met The `@magentoDataFixture` can be specified for a particular test or for an entire test case. The basic rules for fixture annotation at different levels are: -- `@magentoDataFixture` at a test case level makes the framework to apply the declared fixtures to each test in the test case. +- `@magentoDataFixture` at a test case level makes the framework to apply the declared fixtures to each test in the test case. When the final test is complete, all class-level fixtures are reverted. -- `@magentoDataFixture` for a particular test signals the framework to revert the fixtures declared on a test case level and applies the fixtures declared at a test method level instead. +- `@magentoDataFixture` for a particular test signals the framework to revert the fixtures declared on a test case level and applies the fixtures declared at a test method level instead. When the test is complete, the ITF reverts the applied fixtures. {: .bs-callout-info } @@ -94,8 +95,8 @@ Rollbacks are run after reverting all the fixtures related to database transacti A fixture rollback must be of the same format as the corresponding fixture: a script or a method: -- A rollback script must be named according to the corresponding fixture suffixed with `_rollback` and stored in the same directory. -- Rollback methods must be of the same class as the corresponding fixture and suffixed with `Rollback`. +- A rollback script must be named according to the corresponding fixture suffixed with `_rollback` and stored in the same directory. +- Rollback methods must be of the same class as the corresponding fixture and suffixed with `Rollback`. Examples: diff --git a/guides/v2.3/ui_comp_guide/bk-ui_comps.md b/guides/v2.3/ui_comp_guide/bk-ui_comps.md index 8499ddbc7cd..bcfc23a89cc 100644 --- a/guides/v2.3/ui_comp_guide/bk-ui_comps.md +++ b/guides/v2.3/ui_comp_guide/bk-ui_comps.md @@ -33,9 +33,9 @@ In Magento 2 there are basic and secondary UI components. Basic components are: -* [Listing component]({{ page.baseurl }}/ui_comp_guide/components/ui-listing-grid.html) +* [Listing component]({{ page.baseurl }}/ui_comp_guide/components/ui-listing-grid.html) -* [Form component]({{ page.baseurl }}/ui_comp_guide/components/ui-form.html) +* [Form component]({{ page.baseurl }}/ui_comp_guide/components/ui-form.html) All other UI components are secondary. @@ -50,13 +50,13 @@ You need to configure styles manually for components on the storefront. With Magento, you may apply different approaches to implementing a UI element, and use: -* [PHTML](https://glossary.magento.com/phtml) template with inline JavaScript +* [PHTML](https://glossary.magento.com/phtml) template with inline JavaScript -* PHTML template with declaration of related JavaScript file via [XML](https://glossary.magento.com/xml) [layout](https://glossary.magento.com/layout) +* PHTML template with declaration of related JavaScript file via [XML](https://glossary.magento.com/xml) [layout](https://glossary.magento.com/layout) -* [jQuery](https://glossary.magento.com/jquery) [widget](https://glossary.magento.com/widget) +* [jQuery](https://glossary.magento.com/jquery) [widget](https://glossary.magento.com/widget) -* Magento 2 [UI component](https://glossary.magento.com/ui-component) +* Magento 2 [UI component](https://glossary.magento.com/ui-component) We recommend using UI components as much as possible and tend to do the same in Magento core. @@ -68,9 +68,9 @@ UI component is a combination of: 1. **XML declaration** that specifies the component's configuration settings and inner structure. -2. **JavaScript** class inherited from one of the Magento JavaScript framework UI components base classes (such as [UIElement]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uielement_concept.html), [UIClass]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uiclass_concept.html) or [UICollection]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uicollection_concept.html)). +1. **JavaScript** class inherited from one of the Magento JavaScript framework UI components base classes (such as [UIElement]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uielement_concept.html), [UIClass]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uiclass_concept.html) or [UICollection]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uicollection_concept.html)). -3. **Related template(s)** +1. **Related template(s)** ### XML Declaration @@ -101,15 +101,15 @@ A UI component can be bound to one or more [HTML](https://glossary.magento.com/h A particular instance of a UI component is defined primarily by the following: 1. `/view/base/ui_component/etc/definition.xml`: default component configuration. Can be extended in custom modules. -2. [UI component's XML declaration]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_xmldeclaration_concept.html). -3. [Backend/PHP modifiers]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_modifier_concept.html). -4. Configuration inside the JavaScript classes. +1. [UI component's XML declaration]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_xmldeclaration_concept.html). +1. [Backend/PHP modifiers]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_modifier_concept.html). +1. Configuration inside the JavaScript classes. ## UI component used in the frontend design area -* Configured through layout XML. +* Configured through layout XML. -* The `jsLayout` argument is used to specify information. +* The `jsLayout` argument is used to specify information. ```xml @@ -125,9 +125,9 @@ A particular instance of a UI component is defined primarily by the following: ## UI component used in the Adminhtml area -* Configured through dedicated XML file (view/.../ui_component/[ui_component_name.xml]) +* Configured through dedicated XML file (view/.../ui_component/[ui_component_name.xml]) -* Included in layout XML with uiComponent tag +* Included in layout XML with uiComponent tag ## Things to remember when working with UI components diff --git a/guides/v2.3/ui_comp_guide/components/ui-form.md b/guides/v2.3/ui_comp_guide/components/ui-form.md index 496a71fc85d..82a75612b54 100644 --- a/guides/v2.3/ui_comp_guide/components/ui-form.md +++ b/guides/v2.3/ui_comp_guide/components/ui-form.md @@ -213,8 +213,8 @@ For more details see the ` diff --git a/guides/v2.3/ui_comp_guide/components/ui-wysiwyg.md b/guides/v2.3/ui_comp_guide/components/ui-wysiwyg.md index d0fb266dc52..16a978c49e4 100644 --- a/guides/v2.3/ui_comp_guide/components/ui-wysiwyg.md +++ b/guides/v2.3/ui_comp_guide/components/ui-wysiwyg.md @@ -73,23 +73,23 @@ See [Events and observers]({{ page.baseurl }}/extension-dev-guide/events-and-obs The following are available events for use in the WYSIWYG component adapter for TinyMCE4: -* `tinymceBeforeSetContent` - fires before the contents are inserted into the editor -* `tinymcePaste` - fires when a paste is done within the editor -* `tinymceSaveContent` - fires when the contents in the editor are saved -* `tinymceSaveContent` (`PostProcess`) - fires when the contents in the editor are being serialized -* `tinymceUndo` - fires when the contents have been reverted to a previous state -* `tinymceFocus` - fires when the editor is focused -* `tinymceBlur` - fires when the editor is blurred -* `tinymceChange` - fires when undo level is added to the editor -* `wysiwygEditorInitialized` - fires when the WYSIWYG editor is initialized +* `tinymceBeforeSetContent` - fires before the contents are inserted into the editor +* `tinymcePaste` - fires when a paste is done within the editor +* `tinymceSaveContent` - fires when the contents in the editor are saved +* `tinymceSaveContent` (`PostProcess`) - fires when the contents in the editor are being serialized +* `tinymceUndo` - fires when the contents have been reverted to a previous state +* `tinymceFocus` - fires when the editor is focused +* `tinymceBlur` - fires when the editor is blurred +* `tinymceChange` - fires when undo level is added to the editor +* `wysiwygEditorInitialized` - fires when the WYSIWYG editor is initialized ## Add a default editor Adding the default Magento WYSIWYG editor to a page requires the following steps: 1. Create a layout -2. Create a form -3. Add a data provider, controller, and routes +1. Create a form +1. Add a data provider, controller, and routes The following example shows how to integrate the default Magento WYSIWYG editor as a UI component inside a custom form. @@ -360,4 +360,3 @@ Here's an example that connects the data provider and modifier created in the pr {: .bs-callout-info } If your form already uses the [ModifierPool]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_modifier_concept.html), you can continue using it to control the configuration of your WYSIWYG components. - diff --git a/guides/v2.3/ui_comp_guide/howto/update-url-type.md b/guides/v2.3/ui_comp_guide/howto/update-url-type.md index cf826abc198..c424d0a64ae 100644 --- a/guides/v2.3/ui_comp_guide/howto/update-url-type.md +++ b/guides/v2.3/ui_comp_guide/howto/update-url-type.md @@ -12,10 +12,10 @@ This topic describes how to extend the existing [`UrlInput` component](../compon To update a page URL type, you must: 1. [Create the link class](#link-class). -2. [Add the link to the di.xml file](#di-xml). -3. [Create the component's JavaScript implementation](#js-implementation). -4. [Create a controller to search the page](#search-page). -5. [Create a controller to return the page or array by `cmsPageId`](#return-page). +1. [Add the link to the di.xml file](#di-xml). +1. [Create the component's JavaScript implementation](#js-implementation). +1. [Create a controller to search the page](#search-page). +1. [Create a controller to return the page or array by `cmsPageId`](#return-page). ## Create the link class {#link-class} @@ -194,6 +194,7 @@ define([ }); }); ``` + ## Create a controller to search the page {#search-page} Create a controller to search the page using a search key. @@ -273,6 +274,7 @@ class Search extends \Magento\Backend\App\Action } } ``` + ## Create a controller to return the page or array {#return-page} Create a controller to return the page, or empty array if the option doesn't exist, by the `cmsPageId`.