Moderate severityNVD Advisory· Published Jul 29, 2020· Updated Aug 4, 2024
CVE-2020-9690
CVE-2020-9690
Description
Magento versions 2.3.5-p1 and earlier, and 2.3.5-p1 and earlier have an observable timing discrepancy vulnerability. Successful exploitation could lead to signature verification bypass.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
magento/community-editionPackagist | < 2.3.5-p2 | 2.3.5-p2 |
Affected products
1- Range: 2.3.5-p1 and earlier, and 2.3.5-p1 and earlier versions
Patches
19436781734e4MC-35770: Magento 2.3.5-p2 Publication
300 files changed · +2584 −1558
app/code/Magento/AdminAnalytics/composer.json+13 −12 modified@@ -6,23 +6,24 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-ui": "*", - "magento/module-release-notification": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-ui": "101.1.*", + "magento/module-release-notification": "100.3.*" }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "files": [ - "registration.php" - ], - "psr-4": { - "Magento\\AdminAnalytics\\": "" - } - } + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdminAnalytics\\": "" + } + }, + "version": "100.3.2" }
app/code/Magento/AdminNotification/composer.json+8 −7 modified@@ -7,12 +7,12 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-config": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\AdminNotification\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/AdvancedPricingImportExport/composer.json+10 −9 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-catalog-inventory": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\AdvancedPricingImportExport\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/AdvancedSearch/composer.json+10 −9 modified@@ -5,14 +5,14 @@ "sort-packages": true }, "require": { - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-search": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-search": "*", - "magento/module-store": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", "php": "~7.1.3||~7.2.0||~7.3.0" }, "type": "magento2-module", @@ -27,5 +27,6 @@ "psr-4": { "Magento\\AdvancedSearch\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Amqp/composer.json+5 −4 modified@@ -5,9 +5,9 @@ "sort-packages": true }, "require": { - "magento/framework": "*", - "magento/framework-amqp": "*", - "magento/framework-message-queue": "*", + "magento/framework": "102.0.*", + "magento/framework-amqp": "100.3.*", + "magento/framework-message-queue": "100.3.*", "php": "~7.1.3||~7.2.0||~7.3.0" }, "type": "magento2-module", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\Amqp\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/AmqpStore/composer.json+7 −6 modified@@ -5,14 +5,14 @@ "sort-packages": true }, "require": { - "magento/framework": "*", - "magento/framework-amqp": "*", - "magento/module-store": "*", + "magento/framework": "102.0.*", + "magento/framework-amqp": "100.3.*", + "magento/module-store": "101.0.*", "php": "~7.1.3||~7.2.0||~7.3.0" }, "suggest": { - "magento/module-asynchronous-operations": "*", - "magento/framework-message-queue": "*" + "magento/module-asynchronous-operations": "100.3.*", + "magento/framework-message-queue": "100.3.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\AmqpStore\\": "" } - } + }, + "version": "100.3.1" }
app/code/Magento/Analytics/composer.json+7 −6 modified@@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-integration": "*", - "magento/module-store": "*", - "magento/framework": "*" + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "101.0.*", + "magento/framework": "102.0.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\Analytics\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/AsynchronousOperations/composer.json+9 −8 modified@@ -5,16 +5,16 @@ "sort-packages": true }, "require": { - "magento/framework": "*", - "magento/framework-bulk": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-ui": "*", + "magento/framework": "102.0.*", + "magento/framework-bulk": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", "php": "~7.1.3||~7.2.0||~7.3.0" }, "suggest": { - "magento/module-admin-notification": "*", - "magento/module-logging": "*" + "magento/module-admin-notification": "100.3.*", + "magento/module-logging": "101.1.*" }, "type": "magento2-module", "license": [ @@ -28,5 +28,6 @@ "psr-4": { "Magento\\AsynchronousOperations\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Authorization/composer.json+4 −3 modified@@ -6,8 +6,8 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\Authorization\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/AuthorizenetAcceptjs/composer.json+10 −9 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-payment": "*", - "magento/module-sales": "*", - "magento/module-config": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-store": "*", - "magento/module-quote": "*" + "magento/framework": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-quote": "101.1.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\AuthorizenetAcceptjs\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/AuthorizenetCardinal/composer.json+10 −9 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-authorizenet-acceptjs": "*", - "magento/framework": "*", - "magento/module-cardinal-commerce": "*", - "magento/module-payment": "*", - "magento/module-sales": "*", - "magento/module-quote": "*", - "magento/module-checkout": "*", - "magento/module-store": "*" + "magento/module-authorizenet-acceptjs": "100.3.*", + "magento/framework": "102.0.*", + "magento/module-cardinal-commerce": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-checkout": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\AuthorizenetCardinal\\": "" } - } + }, + "version": "100.3.1" }
app/code/Magento/Authorizenet/composer.json+11 −10 modified@@ -6,17 +6,17 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -30,5 +30,6 @@ "psr-4": { "Magento\\Authorizenet\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/AuthorizenetGraphQl/composer.json+5 −4 modified@@ -4,11 +4,11 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-quote-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-quote-graph-ql": "100.3.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -21,5 +21,6 @@ "psr-4": { "Magento\\AuthorizenetGraphQl\\": "" } - } + }, + "version": "100.3.2" }
app/code/Magento/Backend/App/AbstractAction.php+22 −6 modified@@ -5,9 +5,12 @@ */ namespace Magento\Backend\App; +use Magento\Framework\Encryption\Helper\Security; + /** * Generic backend controller * + * phpcs:disable Magento2.Classes.AbstractApi * @api * @SuppressWarnings(PHPMD.NumberOfChildren) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -101,6 +104,8 @@ public function __construct(Action\Context $context) } /** + * Checking if the user has access to requested component. + * * @return bool */ protected function _isAllowed() @@ -119,6 +124,8 @@ protected function _getSession() } /** + * Get message manager. + * * @return \Magento\Framework\Message\ManagerInterface */ protected function getMessageManager() @@ -146,6 +153,8 @@ protected function _setActiveMenu($itemId) } /** + * Prepare breadcrumbs. + * * @param string $label * @param string $title * @param string|null $link @@ -158,6 +167,8 @@ protected function _addBreadcrumb($label, $title, $link = null) } /** + * Add content to specified block. + * * @param \Magento\Framework\View\Element\AbstractBlock $block * @return $this */ @@ -167,6 +178,8 @@ protected function _addContent(\Magento\Framework\View\Element\AbstractBlock $bl } /** + * Move block to left container. + * * @param \Magento\Framework\View\Element\AbstractBlock $block * @return $this */ @@ -176,6 +189,8 @@ protected function _addLeft(\Magento\Framework\View\Element\AbstractBlock $block } /** + * Add js to specified block. + * * @param \Magento\Framework\View\Element\AbstractBlock $block * @return $this */ @@ -200,6 +215,8 @@ private function _moveBlockToContainer(\Magento\Framework\View\Element\AbstractB } /** + * Dispatch request. + * * @param \Magento\Framework\App\RequestInterface $request * @return \Magento\Framework\App\ResponseInterface */ @@ -286,8 +303,7 @@ public function _processUrlKeys() } /** - * Set session locale, - * process force locale set through url params + * Set session locale, process force locale set through url params. * * @return $this */ @@ -309,8 +325,8 @@ protected function _processLocaleSettings() * Set redirect into response * * @TODO MAGETWO-28356: Refactor controller actions to new ResultInterface - * @param string $path - * @param array $arguments + * @param string $path + * @param array $arguments * @return \Magento\Framework\App\ResponseInterface */ protected function _redirect($path, $arguments = []) @@ -333,7 +349,7 @@ protected function _redirect($path, $arguments = []) protected function _forward($action, $controller = null, $module = null, array $params = null) { $this->_getSession()->setIsUrlNotice($this->_actionFlag->get('', self::FLAG_IS_URLS_CHECKED)); - return parent::_forward($action, $controller, $module, $params); + parent::_forward($action, $controller, $module, $params); } /** @@ -360,7 +376,7 @@ protected function _validateSecretKey() } $secretKey = $this->getRequest()->getParam(\Magento\Backend\Model\UrlInterface::SECRET_KEY_PARAM_NAME, null); - if (!$secretKey || $secretKey != $this->_backendUrl->getSecretKey()) { + if (!$secretKey || !Security::compareStrings($secretKey, $this->_backendUrl->getSecretKey())) { return false; } return true;
app/code/Magento/Backend/Block/Widget.php+1 −1 modified@@ -91,7 +91,7 @@ public function getButtonHtml($label, $onclick, $class = '', $buttonId = null, $ \Magento\Backend\Block\Widget\Button::class )->setData( [ - 'label' => $this->escapeHtml($label), + 'label' => $label, 'onclick' => $onclick, 'class' => $class, 'type' => 'button',
app/code/Magento/Backend/composer.json+21 −20 modified@@ -5,27 +5,27 @@ "sort-packages": true }, "require": { - "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backup": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-developer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-require-js": "*", - "magento/module-sales": "*", - "magento/module-security": "*", - "magento/module-store": "*", - "magento/module-translation": "*", - "magento/module-ui": "*", - "magento/module-user": "*" + "php": "~7.1.3||~7.2.0||~7.3.0", + "magento/framework": "102.0.*", + "magento/module-backup": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-developer": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-translation": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*" }, "suggest": { - "magento/module-theme": "*" + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -39,5 +39,6 @@ "psr-4": { "Magento\\Backend\\": "" } - } + }, + "version": "101.0.5-p2" }
app/code/Magento/Backend/Test/Mftf/ActionGroup/CliCacheCleanActionGroup.xml+21 −0 added@@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="CliCacheCleanActionGroup"> + <annotations> + <description>Run cache:clean by CLI with specified cache tags (space separated).</description> + </annotations> + <arguments> + <argument name="tags" type="string"/> + </arguments> + + <magentoCLI command="cache:clean" arguments="{{tags}}" stepKey="cleanSpecifiedCache"/> + </actionGroup> +</actionGroups>
app/code/Magento/Backend/Test/Mftf/ActionGroup/CliCacheFlushActionGroup.xml+21 −0 added@@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="CliCacheFlushActionGroup"> + <annotations> + <description>Run cache:flush by CLI with specified cache tags (space separated).</description> + </annotations> + <arguments> + <argument name="tags" type="string"/> + </arguments> + + <magentoCLI command="cache:flush" arguments="{{tags}}" stepKey="flushSpecifiedCache"/> + </actionGroup> +</actionGroups>
app/code/Magento/Backup/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cron": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cron": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\Backup\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Braintree/composer.json+19 −18 modified@@ -7,26 +7,26 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "braintree/braintree_php": "3.35.0", - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*", - "magento/module-catalog": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-instant-purchase": "*", - "magento/module-payment": "*", - "magento/module-paypal": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-ui": "*", - "magento/module-vault": "*", - "magento/module-multishipping": "*", - "magento/module-theme": "*" + "magento/module-catalog": "103.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-instant-purchase": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-paypal": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-ui": "101.1.*", + "magento/module-vault": "101.1.*", + "magento/module-multishipping": "100.3.*", + "magento/module-theme": "101.0.*" }, "suggest": { - "magento/module-checkout-agreements": "*" + "magento/module-checkout-agreements": "100.3.*" }, "type": "magento2-module", "license": [ @@ -40,5 +40,6 @@ "psr-4": { "Magento\\Braintree\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/BraintreeGraphQl/composer.json+8 −7 modified@@ -4,14 +4,14 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-braintree": "*", - "magento/module-store": "*", - "magento/module-quote": "*", - "magento/module-quote-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-braintree": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-quote": "101.1.*", + "magento/module-quote-graph-ql": "100.3.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -24,5 +24,6 @@ "psr-4": { "Magento\\BraintreeGraphQl\\": "" } - } + }, + "version": "100.3.2" }
app/code/Magento/Bundle/composer.json+21 −20 modified@@ -6,27 +6,27 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-rule": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-gift-message": "*", - "magento/module-media-storage": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-webapi": "*", - "magento/module-bundle-sample-data": "*", - "magento/module-sales-rule": "*" + "magento/module-webapi": "100.3.*", + "magento/module-bundle-sample-data": "Sample Data version: 100.3.*", + "magento/module-sales-rule": "101.1.*" }, "type": "magento2-module", "license": [ @@ -40,5 +40,6 @@ "psr-4": { "Magento\\Bundle\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/BundleGraphQl/composer.json+9 −8 modified@@ -4,13 +4,13 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-catalog": "*", - "magento/module-bundle": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-quote": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-store": "*", - "magento/framework": "*" + "magento/module-catalog": "103.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-quote-graph-ql": "100.3.*", + "magento/module-store": "101.0.*", + "magento/framework": "102.0.*" }, "license": [ "OSL-3.0", @@ -23,5 +23,6 @@ "psr-4": { "Magento\\BundleGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/BundleImportExport/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-bundle": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*" + "magento/framework": "102.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\BundleImportExport\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Bundle/Test/Mftf/Test/AdminAddDefaultVideoBundleProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-110"/> <group value="Bundle"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <createData entity="SimpleProduct2" stepKey="simpleProduct1"/>
app/code/Magento/Bundle/Test/Mftf/Test/AdminRemoveDefaultVideoBundleProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-205"/> <group value="Bundle"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <createData entity="SimpleProduct2" stepKey="simpleProduct1"/>
app/code/Magento/Bundle/Test/Mftf/Test/AdminShouldBeAbleToMassUpdateAttributesForBundleProductsTest.xml+5 −3 modified@@ -55,9 +55,11 @@ <actionGroup ref="AdminUpdateProductNameAndDescriptionAttributes" stepKey="updateProductAttribute"> <argument name="product" value="UpdateAttributeNameAndDescription"/> </actionGroup> - <!--Run cron twice--> - <magentoCLI command="cron:run" stepKey="cronRun"/> - <magentoCLI command="cron:run" stepKey="cronRunTwice"/> + <comment userInput="Apply changes" stepKey="cronRun"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="cronRunTwice"> + <argument name="consumerName" value="{{AdminProductAttributeUpdateMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminProductAttributeUpdateMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Search for a product with a new name and Open Product --> <actionGroup ref="filterProductGridByName" stepKey="searchWithNewProductName"> <argument name="product" value="UpdateAttributeNameAndDescription"/>
app/code/Magento/CacheInvalidate/composer.json+4 −3 modified@@ -6,8 +6,8 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-page-cache": "*" + "magento/framework": "102.0.*", + "magento/module-page-cache": "100.3.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\CacheInvalidate\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Captcha/composer.json+7 −6 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-store": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", "laminas/laminas-captcha": "^2.7.1", "laminas/laminas-db": "^2.8.2", "laminas/laminas-session": "^2.7.3" @@ -27,5 +27,6 @@ "psr-4": { "Magento\\Captcha\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CardinalCommerce/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-payment": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\CardinalCommerce\\": "" } - } + }, + "version": "100.3.2" }
app/code/Magento/CatalogAnalytics/composer.json+5 −4 modified@@ -3,9 +3,9 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-analytics": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-analytics": "100.3.*" }, "type": "magento2-module", "license": [ @@ -19,5 +19,6 @@ "psr-4": { "Magento\\CatalogAnalytics\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Catalog/Api/SpecialPriceInterface.php+1 −0 modified@@ -32,6 +32,7 @@ interface SpecialPriceInterface * @since 101.1.0 * @since 102.0.0 * @since 102.0.0 + * @since 102.0.0 */ public function get(array $skus);
app/code/Magento/CatalogCmsGraphQl/composer.json+8 −7 modified@@ -4,14 +4,14 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-cms-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-cms-graph-ql": "100.3.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-cms": "*", - "magento/module-catalog-graph-ql": "*" + "magento/module-graph-ql": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -24,5 +24,6 @@ "psr-4": { "Magento\\CatalogCmsGraphQl\\": "" } - } + }, + "version": "100.3.0" }
app/code/Magento/Catalog/composer.json+31 −30 modified@@ -6,37 +6,37 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-asynchronous-operations": "*", - "magento/module-backend": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-rule": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-checkout": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-indexer": "*", - "magento/module-media-storage": "*", - "magento/module-msrp": "*", - "magento/module-page-cache": "*", - "magento/module-product-alert": "*", - "magento/module-quote": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-url-rewrite": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*" + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-asynchronous-operations": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-indexer": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-product-alert": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-url-rewrite": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*" }, "suggest": { - "magento/module-cookie": "*", - "magento/module-sales": "*", - "magento/module-catalog-sample-data": "*" + "magento/module-cookie": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-catalog-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -50,5 +50,6 @@ "psr-4": { "Magento\\Catalog\\": "" } - } + }, + "version": "103.0.5-p2" }
app/code/Magento/CatalogCustomerGraphQl/composer.json+7 −6 modified@@ -4,11 +4,11 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-store": "101.0.*" }, "license": [ "OSL-3.0", @@ -21,5 +21,6 @@ "psr-4": { "Magento\\CatalogCustomerGraphQl\\": "" } - } + }, + "version": "100.3.0" }
app/code/Magento/CatalogGraphQl/composer.json+13 −12 modified@@ -4,19 +4,19 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-eav": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-search": "*", - "magento/module-store": "*", - "magento/module-eav-graph-ql": "*", - "magento/module-catalog-search": "*", - "magento/framework": "*" + "magento/module-eav": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-eav-graph-ql": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-graph-ql-cache": "*", - "magento/module-store-graph-ql": "*" + "magento/module-graph-ql": "100.3.*", + "magento/module-graph-ql-cache": "100.3.*", + "magento/module-store-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -29,5 +29,6 @@ "psr-4": { "Magento\\CatalogGraphQl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CatalogImportExport/composer.json+13 −12 modified@@ -7,17 +7,17 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "ext-ctype": "*", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-authorization": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-authorization": "100.3.*" }, "type": "magento2-module", "license": [ @@ -31,5 +31,6 @@ "psr-4": { "Magento\\CatalogImportExport\\": "" } - } + }, + "version": "101.0.5-p2" }
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportBundleProductTest.xml+13 −6 modified@@ -80,9 +80,13 @@ <requiredEntity createDataKey="secondSimpleProductForFixedWithAttribute"/> </createData> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <!-- Run cron twice (To reduce the load and with introducing BIC cron runs have been removed) --> + <actionGroup ref="CliIndexerReindexActionGroup" stepKey="runCron1"> + <argument name="indices" value="catalog_category_product catalogrule_product catalog_product_price catalogsearch_fulltext "/> + </actionGroup> + <actionGroup ref="CliCacheCleanActionGroup" stepKey="runCron2"> + <argument name="tags" value="full_page"/> + </actionGroup> <!-- Login as admin --> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> @@ -118,9 +122,12 @@ <!-- Export created below products --> <actionGroup ref="exportAllProducts" stepKey="exportCreatedProducts"/> - <!-- Run cron --> - <magentoCLI command="cron:run" stepKey="runCron3"/> - <magentoCLI command="cron:run" stepKey="runCron4"/> + <!-- Run cron (To reduce the load and with introducing BIC cron runs have been removed) --> + <magentoCLI command="help" stepKey="runCron3"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron4"> + <argument name="consumerName" value="exportProcessor"/> + <argument name="maxMessages" value="10"/> + </actionGroup> <!-- Download product --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportGroupedProductWithSpecialPriceTest.xml+7 −6 modified@@ -48,9 +48,8 @@ <requiredEntity createDataKey="createSecondSimpleProduct"/> </updateData> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Reindex invalidated indices" stepKey="runCron1"/> + <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="runCron2"/> <!-- Login as admin --> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> @@ -80,9 +79,11 @@ <!-- Export created below products --> <actionGroup ref="exportAllProducts" stepKey="exportCreatedProducts"/> - <!-- Run cron --> - <magentoCLI command="cron:run" stepKey="runCron3"/> - <magentoCLI command="cron:run" stepKey="runCron4"/> + <comment userInput="Start message queue for export consumer" stepKey="runCron3"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron4"> + <argument name="consumerName" value="{{AdminExportMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminExportMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Download product --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportImportConfigurableProductWithImagesTest.xml+6 −3 modified@@ -167,9 +167,12 @@ <argument name="attributeData" value="$$createExportImportConfigurableProduct.sku$$"/> </actionGroup> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCronFirstTime"/> - <magentoCLI command="cron:run" stepKey="runCronSecondTime"/> + <!-- Run cron twice (To reduce the load and with introducing BIC cron runs have been removed) --> + <magentoCLI command="help" stepKey="runCronFirstTime"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCronSecondTime"> + <argument name="consumerName" value="exportProcessor"/> + <argument name="maxMessages" value="10"/> + </actionGroup> <!-- Save exported file: file successfully downloaded --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleAndConfigurableProductsWithCustomOptionsTest.xml+7 −6 modified@@ -73,9 +73,8 @@ <requiredEntity createDataKey="createConfigSecondChildProduct"/> </createData> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Reindex invalidated indices after product attribute has been created/deleted" stepKey="runCron1"/> + <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="runCron2"/> <!-- Login as admin --> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> @@ -110,9 +109,11 @@ <argument name="attributeData" value="$$createConfigProduct.sku$$"/> </actionGroup> - <!-- Run cron --> - <magentoCLI command="cron:run" stepKey="runCron3"/> - <magentoCLI command="cron:run" stepKey="runCron4"/> + <comment userInput="Start message queue for export consumer" stepKey="runCron3"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron4"> + <argument name="consumerName" value="{{AdminExportMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminExportMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Download product --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleProductAndConfigurableProductsWithAssignedImagesTest.xml+7 −6 modified@@ -89,9 +89,8 @@ <requiredEntity createDataKey="createConfigProduct"/> </createData> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Reindex invalidated indices after product attribute has been created/deleted" stepKey="runCron1"/> + <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="runCron2"/> <!-- Login as admin --> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> @@ -125,9 +124,11 @@ <argument name="attributeData" value="$$createConfigProduct.sku$$"/> </actionGroup> - <!-- Run cron --> - <magentoCLI command="cron:run" stepKey="runCron3"/> - <magentoCLI command="cron:run" stepKey="runCron4"/> + <comment userInput="Start message queue for export consumer" stepKey="runCron3"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron4"> + <argument name="consumerName" value="{{AdminExportMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminExportMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Download product --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleProductAssignedToMainWebsiteAndConfigurableProductAssignedToCustomWebsiteTest.xml+7 −6 modified@@ -71,9 +71,8 @@ <requiredEntity createDataKey="createConfigSecondChildProduct"/> </createData> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Reindex invalidated indices after product attribute has been created/deleted" stepKey="runCron1"/> + <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="runCron2"/> <!-- Login as admin --> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> @@ -108,9 +107,11 @@ <!-- Export created below products --> <actionGroup ref="exportAllProducts" stepKey="exportCreatedProducts"/> - <!-- Run cron --> - <magentoCLI command="cron:run" stepKey="runCron3"/> - <magentoCLI command="cron:run" stepKey="runCron4"/> + <comment userInput="Start message queue for export consumer" stepKey="runCron3"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron4"> + <argument name="consumerName" value="{{AdminExportMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminExportMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Download product --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleProductWithCustomAttributeTest.xml+10 −6 modified@@ -28,9 +28,8 @@ <requiredEntity createDataKey="createAttributeSet"/> </createData> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Reindex invalidated indices after product attribute has been created/deleted" stepKey="runCron1"/> + <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="runCron2"/> <!-- Login as admin --> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> @@ -48,6 +47,9 @@ </actionGroup> <!-- Log out --> <actionGroup ref="logout" stepKey="logout"/> + + <!-- Reindex invalidated indices after product attribute has been created/deleted --> + <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/> </after> <!-- Go to export page --> @@ -57,9 +59,11 @@ <!-- Export created below products --> <actionGroup ref="exportAllProducts" stepKey="exportCreatedProducts"/> - <!-- Run cron --> - <magentoCLI command="cron:run" stepKey="runCron3"/> - <magentoCLI command="cron:run" stepKey="runCron4"/> + <comment userInput="Start message queue for export consumer" stepKey="runCron3"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron4"> + <argument name="consumerName" value="{{AdminExportMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminExportMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Download product --> <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts">
app/code/Magento/CatalogInventory/composer.json+10 −9 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-quote": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "type": "magento2-module", "license": [ @@ -28,5 +28,6 @@ "Magento\\CatalogInventory\\": "" } }, - "abandoned": "magento/inventory-composer-metapackage" + "abandoned": "magento/inventory-composer-metapackage", + "version": "100.3.5" }
app/code/Magento/CatalogInventoryGraphQl/composer.json+6 −5 modified@@ -4,10 +4,10 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*" }, "license": [ "OSL-3.0", @@ -20,5 +20,6 @@ "psr-4": { "Magento\\CatalogInventoryGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Catalog/Model/Template/Filter.php+2 −2 modified@@ -28,7 +28,7 @@ class Filter extends \Magento\Framework\Filter\Template * Whether to allow SID in store directive: NO * * @var bool - * @deprecated SID query parameter is not used in URLs anymore. + * @deprecated 103.0.5 SID query parameter is not used in URLs anymore. */ protected $_useSessionInUrl = false; @@ -81,7 +81,7 @@ public function setUseAbsoluteLinks($flag) * @param bool $flag * @return $this * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * @deprecated SID query parameter is not used in URLs anymore. + * @deprecated 103.0.5 SID query parameter is not used in URLs anymore. */ public function setUseSessionInUrl($flag) {
app/code/Magento/CatalogRule/composer.json+12 −11 modified@@ -6,18 +6,18 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-rule": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-rule": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-import-export": "*", - "magento/module-catalog-rule-sample-data": "*" + "magento/module-import-export": "100.3.*", + "magento/module-catalog-rule-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -31,5 +31,6 @@ "psr-4": { "Magento\\CatalogRule\\": "" } - } + }, + "version": "101.1.5" }
app/code/Magento/CatalogRuleConfigurable/composer.json+7 −6 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*", - "magento/module-catalog": "*", - "magento/module-catalog-rule": "*", - "magento/module-configurable-product": "*" + "magento/module-catalog": "103.0.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-configurable-product": "100.3.*" }, "suggest": { - "magento/module-catalog-rule": "*" + "magento/module-catalog-rule": "101.1.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\CatalogRuleConfigurable\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php+1 −1 modified@@ -446,7 +446,7 @@ private function assignProductToRule(Rule $rule, int $productEntityId, array $we * @param Product $product * @return $this * @throws \Exception - * @deprecated + * @deprecated 101.1.5 * @see ReindexRuleProduct::execute * @SuppressWarnings(PHPMD.NPathComplexity) */
app/code/Magento/CatalogSearch/composer.json+15 −14 modified@@ -6,21 +6,21 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-indexer": "*", - "magento/module-catalog-inventory": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-search": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-indexer": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -34,5 +34,6 @@ "psr-4": { "Magento\\CatalogSearch\\": "" } - } + }, + "version": "101.0.5" }
app/code/Magento/Catalog/Test/Mftf/Data/QueueConsumerData.xml+19 −0 added@@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="AdminProductAttributeUpdateConsumerData"> + <data key="consumerName">product_action_attribute.update</data> + <data key="messageLimit">100</data> + </entity> + <entity name="AdminProductAttributeWebsiteUpdateConsumerData"> + <data key="consumerName">product_action_attribute.website.update</data> + <data key="messageLimit">100</data> + </entity> +</entities>
app/code/Magento/Catalog/Test/Mftf/Test/AdminAddDefaultVideoSimpleProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-111"/> <group value="Catalog"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <actionGroup ref="EnableAdminAccountSharingActionGroup" stepKey="enableAdminAccountSharing"/>
app/code/Magento/Catalog/Test/Mftf/Test/AdminAddDefaultVideoVirtualProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-109"/> <group value="Catalog"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <!-- Replacing steps in base AdminAddDefaultVideoSimpleProductTest -->
app/code/Magento/Catalog/Test/Mftf/Test/AdminMassProductPriceUpdateTest.xml+7 −3 modified@@ -56,9 +56,13 @@ <waitForPageLoad stepKey="waitForUpdatedProductToSave" /> <see selector="{{AdminProductMessagesSection.successMessage}}" userInput="Message is added to queue" stepKey="seeAttributeUpateSuccessMsg"/> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <!-- Start message queue --> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron1"> + <argument name="consumerName" value="{{AdminProductAttributeUpdateConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminProductAttributeUpdateConsumerData.messageLimit}}"/> + </actionGroup> + <!-- Run cron --> + <magentoCLI command="cron:run --group=index" stepKey="runCron2"/> <reloadPage stepKey="refreshPage"/> <waitForPageLoad stepKey="waitFormToReload1"/>
app/code/Magento/Catalog/Test/Mftf/Test/AdminMassUpdateProductAttributesGlobalScopeTest.xml+13 −8 modified@@ -59,22 +59,27 @@ <actionGroup ref="AdminSwitchStoreViewActionGroup" stepKey="AdminSwitchStoreViewActionGroup"/> <!-- Update attribute --> <checkOption selector="{{AdminEditProductAttributesSection.ChangeAttributePriceToggle}}" stepKey="toggleToChangePrice"/> - <fillField selector="{{AdminEditProductAttributesSection.AttributePrice}}" userInput="$$createProductOne.price$$0" stepKey="fillAttributeNameField"/> + <fillField selector="{{AdminEditProductAttributesSection.AttributePrice}}" userInput="$createProductOne.price$0" stepKey="fillAttributeNameField"/> <click selector="{{AdminEditProductAttributesSection.Save}}" stepKey="save"/> <waitForElementVisible selector="{{AdminMessagesSection.success}}" time="60" stepKey="waitForSuccessMessage"/> <see selector="{{AdminMessagesSection.success}}" userInput="Message is added to queue" stepKey="seeAttributeUpdateSuccessMsg"/> - <!-- Run cron twice --> - <magentoCLI command="cron:run" arguments="--group=consumers" stepKey="runCron1"/> - <magentoCLI command="cron:run" arguments="--group=consumers" stepKey="runCron2"/> - <magentoCLI command="indexer:reindex" stepKey="reindex"/> + <!-- Start message queue for product attribute consumer --> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron1"> + <argument name="consumerName" value="{{AdminProductAttributeUpdateMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminProductAttributeUpdateMessageConsumerData.messageLimit}}"/> + </actionGroup> + <magentoCLI command="cron:run --group=index" stepKey="runCron2"/> + <actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindex"> + <argument name="indices" value=""/> + </actionGroup> <!-- Assert on storefront default view --> <actionGroup ref="GoToStoreViewAdvancedCatalogSearchActionGroup" stepKey="GoToStoreViewAdvancedCatalogSearchActionGroupDefault"/> <actionGroup ref="StorefrontAdvancedCatalogSearchByProductNameAndPriceActionGroup" stepKey="searchByNameDefault"> - <argument name="name" value=""$$createProductOne.name$$""/> - <argument name="priceFrom" value="$$createProductOne.price$$0"/> - <argument name="priceTo" value="$$createProductOne.price$$0"/> + <argument name="name" value=""$createProductOne.name$""/> + <argument name="priceFrom" value="$createProductOne.price$0"/> + <argument name="priceTo" value="$createProductOne.price$0"/> </actionGroup> <actionGroup ref="StorefrontCheckAdvancedSearchResultActionGroup" stepKey="StorefrontCheckAdvancedSearchResultDefault"/> <waitForElementVisible selector="{{StorefrontCatalogSearchAdvancedResultMainSection.itemFound}}" stepKey="waitForSearchResultInDefaultView"/>
app/code/Magento/Catalog/Test/Mftf/Test/AdminMassUpdateProductAttributesStoreViewScopeTest.xml+5 −3 modified@@ -133,9 +133,11 @@ <click selector="{{AdminEditProductAttributesSection.Save}}" stepKey="save"/> <see selector="{{AdminProductMessagesSection.successMessage}}" userInput="Message is added to queue" stepKey="seeAttributeUpateSuccessMsg"/> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Apply changes" stepKey="runCron1"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron2"> + <argument name="consumerName" value="{{AdminProductAttributeUpdateMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminProductAttributeUpdateMessageConsumerData.messageLimit}}"/> + </actionGroup> <reloadPage stepKey="refreshPage"/> <waitForPageLoad stepKey="waitFormToReload1"/>
app/code/Magento/Catalog/Test/Mftf/Test/AdminRemoveDefaultVideoSimpleProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-206"/> <group value="Catalog"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <actionGroup ref="EnableAdminAccountSharingActionGroup" stepKey="enableAdminAccountSharing"/>
app/code/Magento/Catalog/Test/Mftf/Test/AdminRemoveDefaultVideoVirtualProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-204"/> <group value="Catalog"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <!-- Replacing steps in base AdminRemoveDefaultVideoSimpleProductTest -->
app/code/Magento/Catalog/Test/Mftf/Test/StoreFrontRecentlyViewedAtStoreViewLevelTest.xml+1 −1 modified@@ -12,7 +12,7 @@ <stories value="Recently Viewed Product"/> <title value="Recently Viewed Product at store view level"/> <description value="Recently Viewed Product should not be displayed on second store view, if configured as, Per Store View "/> - <testCaseId value="MC-31877"/> + <testCaseId value="MC-31876"/> <severity value="CRITICAL"/> <group value="catalog"/> <group value="WYSIWYGDisabled"/>
app/code/Magento/CatalogUrlRewrite/composer.json+12 −11 modified@@ -6,18 +6,18 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-url-rewrite": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-url-rewrite": "101.1.*" }, "suggest": { - "magento/module-webapi": "*" + "magento/module-webapi": "100.3.*" }, "type": "magento2-module", "license": [ @@ -31,5 +31,6 @@ "psr-4": { "Magento\\CatalogUrlRewrite\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CatalogUrlRewriteGraphQl/composer.json+8 −7 modified@@ -4,14 +4,14 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/framework": "*" + "magento/module-store": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-catalog-url-rewrite": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-url-rewrite-graph-ql": "*" + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-url-rewrite-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -24,5 +24,6 @@ "psr-4": { "Magento\\CatalogUrlRewriteGraphQl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Catalog/ViewModel/Product/Breadcrumbs.php+1 −1 modified@@ -117,7 +117,7 @@ public function getJsonConfigurationHtmlEscaped() : string * Returns breadcrumb json. * * @return string - * @deprecated 103.0.0 in favor of new method with name {suffix}Html{postfix}() + * @deprecated 102.0.11 in favor of new method with name {suffix}Html{postfix}() */ public function getJsonConfiguration() {
app/code/Magento/CatalogWidget/composer.json+12 −11 modified@@ -6,16 +6,16 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-rule": "*", - "magento/module-store": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*", - "magento/module-theme": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-rule": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -29,5 +29,6 @@ "psr-4": { "Magento\\CatalogWidget\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CheckoutAgreements/composer.json+7 −6 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-quote": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\CheckoutAgreements\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CheckoutAgreementsGraphQl/composer.json+6 −5 modified@@ -4,12 +4,12 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-checkout-agreements": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-checkout-agreements": "100.3.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\CheckoutAgreementsGraphQl\\": "" } - } + }, + "version": "100.3.1" }
app/code/Magento/Checkout/composer.json+22 −21 modified@@ -6,28 +6,28 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-msrp": "*", - "magento/module-page-cache": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-captcha": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-msrp": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-captcha": "100.3.*" }, "suggest": { - "magento/module-cookie": "*" + "magento/module-cookie": "100.3.*" }, "type": "magento2-module", "license": [ @@ -41,5 +41,6 @@ "psr-4": { "Magento\\Checkout\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/Checkout/Test/Mftf/Page/CheckoutPage.xml+1 −0 modified@@ -9,6 +9,7 @@ <pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/PageObject.xsd"> <page name="CheckoutPage" url="/checkout" area="storefront" module="Magento_Checkout"> + <section name="StorefrontCheckoutPageMessagesSection"/> <section name="CheckoutShippingSection"/> <section name="CheckoutShippingMethodsSection"/> <section name="CheckoutOrderSummarySection"/>
app/code/Magento/Checkout/Test/Mftf/Section/StorefrontCheckoutPageMessagesSection.xml+14 −0 added@@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> + <section name="StorefrontCheckoutPageMessagesSection"> + <element name="successMessage" type="text" selector="//div[@id='checkout']//div[@data-role='checkout-messages']//div[contains(@class,'message-success')]//div[contains(.,'{{message}}')]" parameterized="true"/> + </section> +</sections>
app/code/Magento/Checkout/view/frontend/web/template/summary/item/details.html+7 −3 modified@@ -12,7 +12,7 @@ <div class="product-item-inner"> <div class="product-item-name-block"> - <strong class="product-item-name" data-bind="html: $parent.name"></strong> + <strong class="product-item-name" data-bind="text: $parent.name"></strong> <div class="details-qty"> <span class="label"><!-- ko i18n: 'Qty' --><!-- /ko --></span> <span class="value" data-bind="text: $parent.qty"></span> @@ -32,10 +32,14 @@ <!--ko foreach: JSON.parse($parent.options)--> <dt class="label" data-bind="text: label"></dt> <!-- ko if: ($data.full_view)--> - <dd class="values" data-bind="html: full_view"></dd> + <!-- ko with: {full_viewUnsanitizedHtml: $data.full_view}--> + <dd class="values" data-bind="html: full_viewUnsanitizedHtml"></dd> + <!-- /ko --> <!-- /ko --> <!-- ko ifnot: ($data.full_view)--> - <dd class="values" data-bind="html: value"></dd> + <!-- ko with: {valueUnsanitizedHtml: $data.value}--> + <dd class="values" data-bind="html: valueUnsanitizedHtml"></dd> + <!-- /ko --> <!-- /ko --> <!-- /ko --> </dl>
app/code/Magento/Cms/composer.json+13 −12 modified@@ -6,19 +6,19 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-email": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-variable": "*", - "magento/module-widget": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-email": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-variable": "100.3.*", + "magento/module-widget": "101.1.*" }, "suggest": { - "magento/module-cms-sample-data": "*" + "magento/module-cms-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -32,5 +32,6 @@ "psr-4": { "Magento\\Cms\\": "" } - } + }, + "version": "103.0.5-p2" }
app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php+29 −26 modified@@ -4,73 +4,76 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Cms\Controller\Adminhtml\Wysiwyg\Images; +use Magento\Backend\App\Action\Context; +use Magento\Cms\Controller\Adminhtml\Wysiwyg\Images; use Magento\Framework\App\Action\HttpPostActionInterface; -use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\Filesystem\DirectoryResolver; +use Magento\Framework\Controller\Result\Json; +use Magento\Framework\Controller\Result\JsonFactory; +use Magento\Framework\Controller\Result\RawFactory; +use Magento\Framework\Controller\ResultInterface; +use Magento\Framework\Registry; /** * Delete image folder. */ -class DeleteFolder extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images implements HttpPostActionInterface +class DeleteFolder extends Images implements HttpPostActionInterface { /** - * @var \Magento\Framework\Controller\Result\JsonFactory + * @var JsonFactory */ protected $resultJsonFactory; /** - * @var \Magento\Framework\Controller\Result\RawFactory + * @var RawFactory */ protected $resultRawFactory; /** - * @var \Magento\Framework\App\Filesystem\DirectoryResolver + * @var DirectoryResolver */ private $directoryResolver; /** - * @param \Magento\Backend\App\Action\Context $context - * @param \Magento\Framework\Registry $coreRegistry - * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory - * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory - * @param \Magento\Framework\App\Filesystem\DirectoryResolver|null $directoryResolver + * @param Context $context + * @param Registry $coreRegistry + * @param JsonFactory $resultJsonFactory + * @param RawFactory $resultRawFactory + * @param DirectoryResolver|null $directoryResolver */ public function __construct( - \Magento\Backend\App\Action\Context $context, - \Magento\Framework\Registry $coreRegistry, - \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory, - \Magento\Framework\Controller\Result\RawFactory $resultRawFactory, - \Magento\Framework\App\Filesystem\DirectoryResolver $directoryResolver = null + Context $context, + Registry $coreRegistry, + JsonFactory $resultJsonFactory, + RawFactory $resultRawFactory, + DirectoryResolver $directoryResolver = null ) { parent::__construct($context, $coreRegistry); $this->resultRawFactory = $resultRawFactory; $this->resultJsonFactory = $resultJsonFactory; - $this->directoryResolver = $directoryResolver - ?: $this->_objectManager->get(\Magento\Framework\App\Filesystem\DirectoryResolver::class); + $this->directoryResolver = $directoryResolver ?? $this->_objectManager->get(DirectoryResolver::class); } /** * Delete folder action. * - * @return \Magento\Framework\Controller\ResultInterface - * @throws \Magento\Framework\Exception\LocalizedException + * @return ResultInterface */ public function execute() { try { $path = $this->getStorage()->getCmsWysiwygImages()->getCurrentPath(); - if (!$this->directoryResolver->validatePath($path, DirectoryList::MEDIA)) { - throw new \Magento\Framework\Exception\LocalizedException( - __('Directory %1 is not under storage root path.', $path) - ); - } $this->getStorage()->deleteDirectory($path); - + return $this->resultRawFactory->create(); } catch (\Exception $e) { $result = ['error' => true, 'message' => $e->getMessage()]; - /** @var \Magento\Framework\Controller\Result\Json $resultJson */ + /** @var Json $resultJson */ $resultJson = $this->resultJsonFactory->create(); return $resultJson->setData($result);
app/code/Magento/CmsGraphQl/composer.json+8 −7 modified@@ -4,14 +4,14 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-widget": "*" + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-widget": "101.1.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-graph-ql-cache": "*", - "magento/module-store-graph-ql": "*" + "magento/module-graph-ql": "100.3.*", + "magento/module-graph-ql-cache": "100.3.*", + "magento/module-store-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -24,5 +24,6 @@ "psr-4": { "Magento\\CmsGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php+36 −5 modified@@ -225,6 +225,8 @@ public function __construct( * * @param string $path * @return void + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\ValidatorException */ protected function createSubDirectories($path) { @@ -295,6 +297,7 @@ protected function removeItemFromCollection($collection, $conditions) * * @param string $path Parent directory path * @return \Magento\Framework\Data\Collection\Filesystem + * @throws \Exception */ public function getDirsCollection($path) { @@ -393,6 +396,7 @@ public function getFilesCollection($path, $type = null) * * @param string $path Path to the directory * @return \Magento\Cms\Model\Wysiwyg\Images\Storage\Collection + * @throws \Exception */ public function getCollection($path = null) { @@ -485,6 +489,9 @@ public function deleteDirectory($path) * * @param string $path * @return void + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\LocalizedException + * @throws \Magento\Framework\Exception\ValidatorException */ protected function _deleteByPath($path) { @@ -500,6 +507,8 @@ protected function _deleteByPath($path) * * @param string $target File path to be deleted * @return $this + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\ValidatorException */ public function deleteFile($target) { @@ -561,9 +570,11 @@ public function uploadFile($targetPath, $type = null) /** * Thumbnail path getter * - * @param string $filePath original file path - * @param bool $checkFile OPTIONAL is it necessary to check file availability + * @param string $filePath original file path + * @param bool $checkFile OPTIONAL is it necessary to check file availability * @return string|false + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\ValidatorException */ public function getThumbnailPath($filePath, $checkFile = false) { @@ -587,9 +598,11 @@ public function getThumbnailPath($filePath, $checkFile = false) /** * Thumbnail URL getter * - * @param string $filePath original file path - * @param bool $checkFile OPTIONAL is it necessary to check file availability + * @param string $filePath original file path + * @param bool $checkFile OPTIONAL is it necessary to check file availability * @return string|false + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\ValidatorException */ public function getThumbnailUrl($filePath, $checkFile = false) { @@ -610,6 +623,8 @@ public function getThumbnailUrl($filePath, $checkFile = false) * @param string $source Image path to be resized * @param bool $keepRatio Keep aspect ratio or not * @return bool|string Resized filepath or false if errors were occurred + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\ValidatorException */ public function resizeFile($source, $keepRatio = true) { @@ -643,6 +658,9 @@ public function resizeFile($source, $keepRatio = true) * * @param string $filename File basename * @return bool|string Thumbnail path or false for errors + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\LocalizedException + * @throws \Magento\Framework\Exception\ValidatorException */ public function resizeOnTheFly($filename) { @@ -658,6 +676,8 @@ public function resizeOnTheFly($filename) * * @param bool|string $filePath Path to the file * @return string + * @throws \Magento\Framework\Exception\FileSystemException + * @throws \Magento\Framework\Exception\ValidatorException */ public function getThumbsPath($filePath = false) { @@ -782,17 +802,28 @@ protected function _validatePath($path) * * @param string $path * @return string + * @throws \Magento\Framework\Exception\ValidatorException */ protected function _sanitizePath($path) { - return rtrim(preg_replace('~[/\\\]+~', '/', $this->_directory->getDriver()->getRealPathSafety($path)), '/'); + return rtrim( + preg_replace( + '~[/\\\]+~', + '/', + $this->_directory->getDriver()->getRealPathSafety( + $this->_directory->getAbsolutePath($path) + ) + ), + '/' + ); } /** * Get path in root storage dir * * @param string $path * @return string|bool + * @throws \Magento\Framework\Exception\ValidatorException */ protected function _getRelativePathToRoot($path) {
app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminDisableWYSIWYGActionGroup.xml+18 −0 added@@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminDisableWYSIWYGActionGroup"> + <annotations> + <description>Runs bin/magento command to disable WYSIWYG</description> + </annotations> + + <magentoCLI stepKey="disableWYSIWYG" command="config:set cms/wysiwyg/enabled disabled"/> + </actionGroup> +</actionGroups>
app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminEnableWYSIWYGActionGroup.xml+18 −0 added@@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminEnableWYSIWYGActionGroup"> + <annotations> + <description>Runs bin/magento command to enable WYSIWYG</description> + </annotations> + + <magentoCLI stepKey="enableWYSIWYG" command="config:set cms/wysiwyg/enabled enabled"/> + </actionGroup> +</actionGroups>
app/code/Magento/Cms/Test/Mftf/Suite/WYSIWYGDisabledSuite.xml+4 −4 renamed@@ -5,10 +5,10 @@ * See COPYING.txt for license details. */ --> -<suites xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Suite/etc/suiteSchema.xsd"> +<suites xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Suite/etc/suiteSchema.xsd"> <suite name="WYSIWYGDisabledSuite"> <before> - <magentoCLI stepKey="disableWYSYWYG" command="config:set cms/wysiwyg/enabled disabled" /> + <actionGroup ref="AdminDisableWYSIWYGActionGroup" stepKey="disableWYSYWYG" /> </before> <include> <group name="WYSIWYGDisabled"/> @@ -17,7 +17,7 @@ <group name="skip"/> </exclude> <after> - <magentoCLI stepKey="disableWYSYWYG" command="config:set cms/wysiwyg/enabled enabled" /> + <actionGroup ref="AdminEnableWYSIWYGActionGroup" stepKey="disableWYSYWYG" /> </after> </suite> -</suites> \ No newline at end of file +</suites>
app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php+3 −1 modified@@ -138,7 +138,7 @@ protected function setUp() $this->directoryMock = $this->createPartialMock( \Magento\Framework\Filesystem\Directory\Write::class, - ['delete', 'getDriver', 'create', 'getRelativePath', 'isExist', 'isFile'] + ['delete', 'getDriver', 'create', 'getRelativePath', 'getAbsolutePath', 'isExist', 'isFile'] ); $this->directoryMock->expects( $this->any() @@ -282,6 +282,7 @@ public function testGetResizeHeight() public function testDeleteDirectoryOverRoot() { $this->driverMock->expects($this->atLeastOnce())->method('getRealPathSafety')->will($this->returnArgument(0)); + $this->directoryMock->expects($this->atLeastOnce())->method('getAbsolutePath')->will($this->returnArgument(0)); $this->imagesStorage->deleteDirectory(self::INVALID_DIRECTORY_OVER_ROOT); } @@ -293,6 +294,7 @@ public function testDeleteDirectoryOverRoot() public function testDeleteRootDirectory() { $this->driverMock->expects($this->atLeastOnce())->method('getRealPathSafety')->will($this->returnArgument(0)); + $this->directoryMock->expects($this->atLeastOnce())->method('getAbsolutePath')->will($this->returnArgument(0)); $this->imagesStorage->deleteDirectory(self::STORAGE_ROOT_DIR); }
app/code/Magento/CmsUrlRewrite/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-store": "*", - "magento/module-url-rewrite": "*" + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite": "101.1.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\CmsUrlRewrite\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/CmsUrlRewriteGraphQl/composer.json+8 −7 modified@@ -4,14 +4,14 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-store": "*", - "magento/module-url-rewrite-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite-graph-ql": "100.3.*" }, "suggest": { - "magento/module-cms-url-rewrite": "*", - "magento/module-catalog-graph-ql": "*" + "magento/module-cms-url-rewrite": "100.3.*", + "magento/module-catalog-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -24,5 +24,6 @@ "psr-4": { "Magento\\CmsUrlRewriteGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Config/composer.json+10 −9 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cron": "*", - "magento/module-deploy": "*", - "magento/module-directory": "*", - "magento/module-email": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cron": "100.3.*", + "magento/module-deploy": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-email": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\Config\\": "" } - } + }, + "version": "101.1.5" }
app/code/Magento/ConfigurableImportExport/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-configurable-product": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\ConfigurableImportExport\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/ConfigurableProduct/composer.json+21 −20 modified@@ -6,27 +6,27 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-quote": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-msrp": "*", - "magento/module-webapi": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-product-video": "*", - "magento/module-configurable-sample-data": "*", - "magento/module-product-links-sample-data": "*", - "magento/module-tax": "*" + "magento/module-msrp": "100.3.*", + "magento/module-webapi": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-product-video": "100.3.*", + "magento/module-configurable-sample-data": "Sample Data version: 100.3.*", + "magento/module-product-links-sample-data": "Sample Data version: 100.3.*", + "magento/module-tax": "100.3.*" }, "type": "magento2-module", "license": [ @@ -40,5 +40,6 @@ "psr-4": { "Magento\\ConfigurableProduct\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/ConfigurableProductGraphQl/composer.json+8 −7 modified@@ -4,12 +4,12 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-catalog": "*", - "magento/module-configurable-product": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-quote": "*", - "magento/module-quote-graph-ql": "*", - "magento/framework": "*" + "magento/module-catalog": "103.0.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-quote-graph-ql": "100.3.*", + "magento/framework": "102.0.*" }, "license": [ "OSL-3.0", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\ConfigurableProductGraphQl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/ConfigurableProductSales/composer.json+7 −6 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-configurable-product": "*" + "magento/module-configurable-product": "100.3.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\ConfigurableProductSales\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductUpdateTest.xml+6 −4 modified@@ -66,10 +66,12 @@ <waitForElementVisible selector="{{AdminProductMessagesSection.successMessage}}" time="60" stepKey="waitForSuccessMessage"/> <see selector="{{AdminProductMessagesSection.successMessage}}" userInput="Message is added to queue" stepKey="seeAttributeUpdateSuccessMsg"/> - <!-- Run cron twice --> - <magentoCLI command="cron:run" arguments="--group=consumers" stepKey="runCron1"/> - <magentoCLI command="cron:run" arguments="--group=consumers" stepKey="runCron2"/> - <magentoCLI command="indexer:reindex" stepKey="reindex"/> + <comment userInput="Apply changes" stepKey="runCron1"/> + <comment userInput="Run consumer to apply changes" stepKey="runCron2"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="reindex"> + <argument name="consumerName" value="{{AdminProductAttributeUpdateMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminProductAttributeUpdateMessageConsumerData.messageLimit}}"/> + </actionGroup> <!-- Check storefront for description --> <amOnPage url="{{StorefrontProductPage.url($$createProduct1.custom_attributes[url_key]$$)}}" stepKey="goToFirstProductPageOnStorefront"/>
app/code/Magento/Contact/composer.json+7 −6 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\Contact\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Cookie/composer.json+5 −4 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-backend": "*" + "magento/module-backend": "101.0.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\Cookie\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Cron/composer.json+5 −4 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\Cron\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Csp/composer.json+4 −3 modified@@ -6,8 +6,8 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\Csp\\": "" } - } + }, + "version": "100.3.0" }
app/code/Magento/CurrencySymbol/composer.json+8 −7 modified@@ -6,12 +6,12 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-page-cache": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\CurrencySymbol\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/CustomerAnalytics/composer.json+5 −4 modified@@ -3,9 +3,9 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-customer": "*", - "magento/module-analytics": "*" + "magento/framework": "102.0.*", + "magento/module-customer": "102.0.*", + "magento/module-analytics": "100.3.*" }, "type": "magento2-module", "license": [ @@ -19,5 +19,6 @@ "psr-4": { "Magento\\CustomerAnalytics\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Customer/composer.json+24 −23 modified@@ -6,30 +6,30 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-integration": "*", - "magento/module-media-storage": "*", - "magento/module-newsletter": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-review": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-wishlist": "*" + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-integration": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-review": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-wishlist": "101.1.*" }, "suggest": { - "magento/module-cookie": "*", - "magento/module-customer-sample-data": "*" + "magento/module-cookie": "100.3.*", + "magento/module-customer-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -43,5 +43,6 @@ "psr-4": { "Magento\\Customer\\": "" } - } + }, + "version": "102.0.5-p2" }
app/code/Magento/CustomerDownloadableGraphQl/composer.json+6 −5 modified@@ -4,12 +4,12 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-downloadable-graph-ql": "*", - "magento/module-graph-ql": "*", - "magento/framework": "*" + "magento/module-downloadable-graph-ql": "100.3.*", + "magento/module-graph-ql": "100.3.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-catalog-graph-ql": "*" + "magento/module-catalog-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\CustomerDownloadableGraphQl\\": "" } - } + }, + "version": "100.3.0" }
app/code/Magento/CustomerGraphQl/composer.json+27 −26 modified@@ -1,29 +1,30 @@ { - "name": "magento/module-customer-graph-ql", - "description": "N/A", - "type": "magento2-module", - "require": { - "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-authorization": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-graph-ql": "*", - "magento/module-newsletter": "*", - "magento/module-integration": "*", - "magento/module-store": "*", - "magento/framework": "*", - "magento/module-directory": "*" - }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], - "autoload": { - "files": [ - "registration.php" + "name": "magento/module-customer-graph-ql", + "description": "N/A", + "type": "magento2-module", + "require": { + "php": "~7.1.3||~7.2.0||~7.3.0", + "magento/module-authorization": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-graph-ql": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "101.0.*", + "magento/framework": "102.0.*", + "magento/module-directory": "100.3.*" + }, + "license": [ + "OSL-3.0", + "AFL-3.0" ], - "psr-4": { - "Magento\\CustomerGraphQl\\": "" - } - } + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerGraphQl\\": "" + } + }, + "version": "100.3.5" }
app/code/Magento/CustomerImportExport/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\CustomerImportExport\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Customer/Model/Metadata/Form/Image.php+88 −27 modified@@ -3,17 +3,33 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Customer\Model\Metadata\Form; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\CustomerMetadataInterface; +use Magento\Customer\Api\Data\AttributeMetadataInterface; use Magento\Customer\Model\FileProcessor; +use Magento\Customer\Model\FileProcessorFactory; use Magento\Framework\Api\ArrayObjectSearch; use Magento\Framework\Api\Data\ImageContentInterface; use Magento\Framework\Api\Data\ImageContentInterfaceFactory; use Magento\Framework\App\ObjectManager; +use Magento\Framework\Exception\FileSystemException; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\File\UploaderFactory; use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\Filesystem\Io\File as IoFileSystem; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem\Directory\WriteFactory; +use Magento\Framework\Locale\ResolverInterface; +use Magento\Framework\Stdlib\DateTime\TimezoneInterface; +use Magento\Framework\Url\EncoderInterface; +use Magento\MediaStorage\Model\File\Validator\NotProtectedExtension; +use Psr\Log\LoggerInterface; /** * Metadata for form image field @@ -27,38 +43,55 @@ class Image extends File */ private $imageContentFactory; + /** + * @var IoFileSystem + */ + private $ioFileSystem; + + /** + * @var WriteInterface + */ + private $mediaEntityTmpDirectory; + /** * Constructor * - * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate - * @param \Psr\Log\LoggerInterface $logger - * @param \Magento\Customer\Api\Data\AttributeMetadataInterface $attribute - * @param \Magento\Framework\Locale\ResolverInterface $localeResolver + * @param TimezoneInterface $localeDate + * @param LoggerInterface $logger + * @param AttributeMetadataInterface $attribute + * @param ResolverInterface $localeResolver * @param null|string $value * @param string $entityTypeCode * @param bool $isAjax - * @param \Magento\Framework\Url\EncoderInterface $urlEncoder - * @param \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $fileValidator + * @param EncoderInterface $urlEncoder + * @param NotProtectedExtension $fileValidator * @param Filesystem $fileSystem * @param UploaderFactory $uploaderFactory - * @param \Magento\Customer\Model\FileProcessorFactory|null $fileProcessorFactory - * @param \Magento\Framework\Api\Data\ImageContentInterfaceFactory|null $imageContentInterfaceFactory + * @param FileProcessorFactory|null $fileProcessorFactory + * @param ImageContentInterfaceFactory|null $imageContentInterfaceFactory + * @param IoFileSystem|null $ioFileSystem + * @param DirectoryList|null $directoryList + * @param WriteFactory|null $writeFactory * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @throws FileSystemException */ public function __construct( - \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, - \Psr\Log\LoggerInterface $logger, - \Magento\Customer\Api\Data\AttributeMetadataInterface $attribute, - \Magento\Framework\Locale\ResolverInterface $localeResolver, + TimezoneInterface $localeDate, + LoggerInterface $logger, + AttributeMetadataInterface $attribute, + ResolverInterface $localeResolver, $value, $entityTypeCode, $isAjax, - \Magento\Framework\Url\EncoderInterface $urlEncoder, - \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $fileValidator, + EncoderInterface $urlEncoder, + NotProtectedExtension $fileValidator, Filesystem $fileSystem, UploaderFactory $uploaderFactory, - \Magento\Customer\Model\FileProcessorFactory $fileProcessorFactory = null, - \Magento\Framework\Api\Data\ImageContentInterfaceFactory $imageContentInterfaceFactory = null + FileProcessorFactory $fileProcessorFactory = null, + ImageContentInterfaceFactory $imageContentInterfaceFactory = null, + IoFileSystem $ioFileSystem = null, + ?DirectoryList $directoryList = null, + ?WriteFactory $writeFactory = null ) { parent::__construct( $localeDate, @@ -75,7 +108,16 @@ public function __construct( $fileProcessorFactory ); $this->imageContentFactory = $imageContentInterfaceFactory ?: ObjectManager::getInstance() - ->get(\Magento\Framework\Api\Data\ImageContentInterfaceFactory::class); + ->get(ImageContentInterfaceFactory::class); + $this->ioFileSystem = $ioFileSystem ?: ObjectManager::getInstance() + ->get(IoFileSystem::class); + $writeFactory = $writeFactory ?? ObjectManager::getInstance()->get(WriteFactory::class); + $directoryList = $directoryList ?? ObjectManager::getInstance()->get(DirectoryList::class); + $this->mediaEntityTmpDirectory = $writeFactory->create( + $directoryList->getPath($directoryList::MEDIA) + . '/' . $this->_entityTypeCode + . '/' . FileProcessor::TMP_DIR + ); } /** @@ -85,6 +127,7 @@ public function __construct( * * @param array $value * @return string[] + * @throws LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ @@ -93,7 +136,11 @@ protected function _validateByRules($value) $label = $value['name']; $rules = $this->getAttribute()->getValidationRules(); - $imageProp = @getimagesize($value['tmp_name']); + try { + $imageProp = getimagesize($value['tmp_name']); + } catch (\Throwable $e) { + $imageProp = false; + } if (!$this->_isUploadedFile($value['tmp_name']) || !$imageProp) { return [__('"%1" is not a valid file.', $label)]; @@ -106,9 +153,11 @@ protected function _validateByRules($value) } // modify image name - $extension = pathinfo($value['name'], PATHINFO_EXTENSION); + $extension = $this->ioFileSystem->getPathInfo($value['name'])['extension']; if ($extension != $allowImageTypes[$imageProp[2]]) { - $value['name'] = pathinfo($value['name'], PATHINFO_FILENAME) . '.' . $allowImageTypes[$imageProp[2]]; + $value['name'] = $this->ioFileSystem->getPathInfo($value['name'])['filename'] + . '.' + . $allowImageTypes[$imageProp[2]]; } $maxFileSize = ArrayObjectSearch::getArrayElementByName( @@ -153,6 +202,7 @@ protected function _validateByRules($value) * * @param array $value * @return bool|int|ImageContentInterface|string + * @throws LocalizedException */ protected function processUiComponentValue(array $value) { @@ -174,32 +224,43 @@ protected function processUiComponentValue(array $value) * * @param array $value * @return string + * @throws LocalizedException */ protected function processCustomerAddressValue(array $value) { - $result = $this->getFileProcessor()->moveTemporaryFile($value['file']); - return $result; + $fileName = $this->mediaEntityTmpDirectory + ->getDriver() + ->getRealPathSafety( + $this->mediaEntityTmpDirectory->getAbsolutePath( + ltrim( + $value['file'], + '/' + ) + ) + ); + return $this->getFileProcessor()->moveTemporaryFile( + $this->mediaEntityTmpDirectory->getRelativePath($fileName) + ); } /** * Process file uploader UI component data for customer entity * * @param array $value * @return bool|int|ImageContentInterface|string + * @throws LocalizedException */ protected function processCustomerValue(array $value) { - $temporaryFile = FileProcessor::TMP_DIR . '/' . ltrim($value['file'], '/'); - - if ($this->getFileProcessor()->isExist($temporaryFile)) { + $file = ltrim($value['file'], '/'); + if ($this->mediaEntityTmpDirectory->isExist($file)) { + $temporaryFile = FileProcessor::TMP_DIR . '/' . $file; $base64EncodedData = $this->getFileProcessor()->getBase64EncodedData($temporaryFile); - /** @var ImageContentInterface $imageContentDataObject */ $imageContentDataObject = $this->imageContentFactory->create() ->setName($value['name']) ->setBase64EncodedData($base64EncodedData) ->setType($value['type']); - // Remove temporary file $this->getFileProcessor()->removeUploadedFile($temporaryFile);
app/code/Magento/Customer/Test/Unit/Model/Metadata/Form/ImageTest.php+146 −26 modified@@ -3,101 +3,173 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Customer\Test\Unit\Model\Metadata\Form; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\CustomerMetadataInterface; use Magento\Customer\Model\FileProcessor; -use Magento\MediaStorage\Model\File\Validator\NotProtectedExtension; +use Magento\Customer\Model\FileProcessorFactory; +use Magento\Customer\Model\Metadata\Form\Image; use Magento\Framework\Api\Data\ImageContentInterfaceFactory; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\Request\Http; +use Magento\Framework\Exception\FileSystemException; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\File\UploaderFactory; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteFactory; +use Magento\Framework\Filesystem\Directory\Write; +use Magento\Framework\Filesystem\Driver\File as Driver; +use Magento\Framework\Filesystem\Io\File; +use Magento\Framework\Url\EncoderInterface; +use Magento\MediaStorage\Model\File\Validator\NotProtectedExtension; +use PHPUnit_Framework_MockObject_MockObject; /** + * Tests Metadata/Form/Image class + * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ImageTest extends AbstractFormTestCase { /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Url\EncoderInterface + * @var PHPUnit_Framework_MockObject_MockObject|EncoderInterface */ private $urlEncode; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\MediaStorage\Model\File\Validator\NotProtectedExtension + * @var PHPUnit_Framework_MockObject_MockObject|NotProtectedExtension */ private $fileValidatorMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Filesystem + * @var PHPUnit_Framework_MockObject_MockObject|Filesystem */ private $fileSystemMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Request\Http + * @var PHPUnit_Framework_MockObject_MockObject|Http */ private $requestMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\File\UploaderFactory + * @var PHPUnit_Framework_MockObject_MockObject|UploaderFactory */ private $uploaderFactoryMock; /** - * @var FileProcessor|\PHPUnit_Framework_MockObject_MockObject + * @var FileProcessor|PHPUnit_Framework_MockObject_MockObject */ private $fileProcessorMock; /** - * @var \Magento\Framework\Api\Data\ImageContentInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject + * @var ImageContentInterfaceFactory|PHPUnit_Framework_MockObject_MockObject */ private $imageContentFactory; /** - * @var \Magento\Customer\Model\FileProcessorFactory|\PHPUnit_Framework_MockObject_MockObject + * @var FileProcessorFactory|PHPUnit_Framework_MockObject_MockObject */ private $fileProcessorFactoryMock; + /** + * @var File|PHPUnit_Framework_MockObject_MockObject + */ + private $ioFileSystemMock; + + /** + * @var DirectoryList|PHPUnit_Framework_MockObject_MockObject + */ + private $directoryListMock; + + /** + * @var WriteFactory|PHPUnit_Framework_MockObject_MockObject + */ + private $writeFactoryMock; + + /** + * @var Write|PHPUnit_Framework_MockObject_MockObject + */ + private $mediaEntityTmpDirectoryMock; + + /** + * @var Driver|PHPUnit_Framework_MockObject_MockObject + */ + private $driverMock; + + /** + * @inheritdoc + */ protected function setUp() { parent::setUp(); - $this->urlEncode = $this->getMockBuilder(\Magento\Framework\Url\EncoderInterface::class) + $this->urlEncode = $this->getMockBuilder(EncoderInterface::class) ->disableOriginalConstructor() ->getMock(); $this->fileValidatorMock = $this->getMockBuilder(NotProtectedExtension::class) ->disableOriginalConstructor() ->getMock(); - $this->fileSystemMock = $this->getMockBuilder(\Magento\Framework\Filesystem::class) + $this->fileSystemMock = $this->getMockBuilder(Filesystem::class) ->disableOriginalConstructor() ->getMock(); - $this->requestMock = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class) + $this->requestMock = $this->getMockBuilder(Http::class) ->disableOriginalConstructor() ->getMock(); - $this->uploaderFactoryMock = $this->getMockBuilder(\Magento\Framework\File\UploaderFactory::class) + $this->uploaderFactoryMock = $this->getMockBuilder(UploaderFactory::class) ->disableOriginalConstructor() ->getMock(); - $this->fileProcessorMock = $this->getMockBuilder(\Magento\Customer\Model\FileProcessor::class) + $this->fileProcessorMock = $this->getMockBuilder(FileProcessor::class) ->disableOriginalConstructor() ->getMock(); $this->imageContentFactory = $this->getMockBuilder(ImageContentInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $this->fileProcessorFactoryMock = $this->getMockBuilder(\Magento\Customer\Model\FileProcessorFactory::class) + $this->fileProcessorFactoryMock = $this->getMockBuilder(FileProcessorFactory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $this->fileProcessorFactoryMock->expects($this->any()) ->method('create') ->willReturn($this->fileProcessorMock); + $this->ioFileSystemMock = $this->getMockBuilder(File::class) + ->disableOriginalConstructor() + ->getMock(); + $this->directoryListMock = $this->getMockBuilder(DirectoryList::class) + ->disableOriginalConstructor() + ->getMock(); + $this->writeFactoryMock = $this->getMockBuilder(WriteFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + $this->mediaEntityTmpDirectoryMock = $this->getMockBuilder(Write::class) + ->disableOriginalConstructor() + ->getMock(); + $this->driverMock = $this->getMockBuilder(Driver::class) + ->disableOriginalConstructor() + ->getMock(); + $this->writeFactoryMock->expects($this->any()) + ->method('create') + ->willReturn($this->mediaEntityTmpDirectoryMock); + $this->mediaEntityTmpDirectoryMock->expects($this->any()) + ->method('getDriver') + ->willReturn($this->driverMock); } /** + * Initializes an image instance + * * @param array $data - * @return \Magento\Customer\Model\Metadata\Form\File + * @return Image + * @throws FileSystemException */ - private function initialize(array $data) + private function initialize(array $data): Image { - return new \Magento\Customer\Model\Metadata\Form\Image( + return new Image( $this->localeMock, $this->loggerMock, $this->attributeMetadataMock, @@ -110,10 +182,17 @@ private function initialize(array $data) $this->fileSystemMock, $this->uploaderFactoryMock, $this->fileProcessorFactoryMock, - $this->imageContentFactory + $this->imageContentFactory, + $this->ioFileSystemMock, + $this->directoryListMock, + $this->writeFactoryMock ); } + /** + * Test for validateValue method for not valid file + * @throws LocalizedException + */ public function testValidateIsNotValidFile() { $value = [ @@ -139,6 +218,10 @@ public function testValidateIsNotValidFile() $this->assertEquals(['"realFileName" is not a valid file.'], $model->validateValue($value)); } + /** + * Test for validateValue method + * @throws LocalizedException + */ public function testValidate() { $value = [ @@ -164,6 +247,10 @@ public function testValidate() $this->assertTrue($model->validateValue($value)); } + /** + * Test for validateValue method for max file size + * @throws LocalizedException + */ public function testValidateMaxFileSize() { $value = [ @@ -205,6 +292,10 @@ public function testValidateMaxFileSize() $this->assertEquals(['"logo.gif" exceeds the allowed file size.'], $model->validateValue($value)); } + /** + * Test for validateValue method for max image width + * @throws LocalizedException + */ public function testValidateMaxImageWidth() { $value = [ @@ -245,6 +336,10 @@ public function testValidateMaxImageWidth() $this->assertEquals(['"logo.gif" width exceeds allowed value of 1 px.'], $model->validateValue($value)); } + /** + * Test for validateValue method for max image height + * @throws LocalizedException + */ public function testValidateMaxImageHeight() { $value = [ @@ -285,6 +380,10 @@ public function testValidateMaxImageHeight() $this->assertEquals(['"logo.gif" height exceeds allowed value of 1 px.'], $model->validateValue($value)); } + /** + * Test for compactValue method + * @throws LocalizedException + */ public function testCompactValueNoChanges() { $originValue = 'filename.ext1'; @@ -302,6 +401,10 @@ public function testCompactValueNoChanges() $this->assertEquals($originValue, $model->compactValue($value)); } + /** + * Test for compactValue method for address image + * @throws LocalizedException + */ public function testCompactValueUiComponentAddress() { $originValue = 'filename.ext1'; @@ -310,20 +413,33 @@ public function testCompactValueUiComponentAddress() 'file' => 'filename.ext2', ]; + $this->driverMock->expects($this->once()) + ->method('getRealPathSafety') + ->with($value['file']) + ->willReturn($value['file']); + $this->mediaEntityTmpDirectoryMock->expects($this->once()) + ->method('getAbsolutePath') + ->willReturn($value['file']); + $this->mediaEntityTmpDirectoryMock->expects($this->once()) + ->method('getRelativePath') + ->willReturn($value['file']); $this->fileProcessorMock->expects($this->once()) ->method('moveTemporaryFile') ->with($value['file']) - ->willReturn(true); - + ->willReturn($value['file']); $model = $this->initialize([ 'value' => $originValue, 'isAjax' => false, 'entityTypeCode' => AddressMetadataInterface::ENTITY_TYPE_ADDRESS, ]); - $this->assertTrue($model->compactValue($value)); + $this->assertEquals($value['file'], $model->compactValue($value)); } + /** + * Test for compactValue method for image + * @throws LocalizedException + */ public function testCompactValueUiComponentCustomer() { $originValue = 'filename.ext1'; @@ -336,9 +452,9 @@ public function testCompactValueUiComponentCustomer() $base64EncodedData = 'encoded_data'; - $this->fileProcessorMock->expects($this->once()) + $this->mediaEntityTmpDirectoryMock->expects($this->once()) ->method('isExist') - ->with(FileProcessor::TMP_DIR . '/' . $value['file']) + ->with($value['file']) ->willReturn(true); $this->fileProcessorMock->expects($this->once()) ->method('getBase64EncodedData') @@ -378,6 +494,10 @@ public function testCompactValueUiComponentCustomer() $this->assertEquals($imageContentMock, $model->compactValue($value)); } + /** + * Test for compactValue method for non-existing customer + * @throws LocalizedException + */ public function testCompactValueUiComponentCustomerNotExists() { $originValue = 'filename.ext1'; @@ -388,9 +508,9 @@ public function testCompactValueUiComponentCustomerNotExists() 'type' => 'image', ]; - $this->fileProcessorMock->expects($this->once()) + $this->mediaEntityTmpDirectoryMock->expects($this->once()) ->method('isExist') - ->with(FileProcessor::TMP_DIR . '/' . $value['file']) + ->with($value['file']) ->willReturn(false); $model = $this->initialize([
app/code/Magento/Deploy/composer.json+7 −6 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-config": "*", - "magento/module-require-js": "*", - "magento/module-store": "*", - "magento/module-user": "*" + "magento/framework": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\Deploy\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Developer/composer.json+5 −4 modified@@ -6,9 +6,9 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-config": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -22,5 +22,6 @@ "psr-4": { "Magento\\Developer\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Dhl/composer.json+13 −12 modified@@ -7,19 +7,19 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-checkout": "*" + "magento/module-checkout": "100.3.*" }, "type": "magento2-module", "license": [ @@ -33,5 +33,6 @@ "psr-4": { "Magento\\Dhl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Directory/composer.json+6 −5 modified@@ -7,10 +7,10 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\Directory\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/DirectoryGraphQl/composer.json+22 −21 modified@@ -1,24 +1,25 @@ { - "name": "magento/module-directory-graph-ql", - "description": "N/A", - "type": "magento2-module", - "require": { - "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-directory": "*", - "magento/module-store": "*", - "magento/module-graph-ql": "*", - "magento/framework": "*" - }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], - "autoload": { - "files": [ - "registration.php" + "name": "magento/module-directory-graph-ql", + "description": "N/A", + "type": "magento2-module", + "require": { + "php": "~7.1.3||~7.2.0||~7.3.0", + "magento/module-directory": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-graph-ql": "100.3.*", + "magento/framework": "102.0.*" + }, + "license": [ + "OSL-3.0", + "AFL-3.0" ], - "psr-4": { - "Magento\\DirectoryGraphQl\\": "" - } - } + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DirectoryGraphQl\\": "" + } + }, + "version": "100.3.3" }
app/code/Magento/Downloadable/composer.json+20 −19 modified@@ -6,26 +6,26 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-gift-message": "*", - "magento/module-media-storage": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-downloadable-sample-data": "*" + "magento/module-downloadable-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -39,5 +39,6 @@ "psr-4": { "Magento\\Downloadable\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/DownloadableGraphQl/composer.json+8 −7 modified@@ -4,14 +4,14 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-catalog": "*", - "magento/module-downloadable": "*", - "magento/module-quote": "*", - "magento/module-quote-graph-ql": "*", - "magento/framework": "*" + "magento/module-catalog": "103.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-quote-graph-ql": "100.3.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-catalog-graph-ql": "*" + "magento/module-catalog-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -24,5 +24,6 @@ "psr-4": { "Magento\\DownloadableGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/DownloadableImportExport/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-downloadable": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\DownloadableImportExport\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Downloadable/Test/Mftf/Test/AdminAddDefaultVideoDownloadableProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-114"/> <group value="Downloadable"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <magentoCLI stepKey="addDownloadableDomain" command="downloadable:domains:add static.magento.com" before="enableAdminAccountSharing"/>
app/code/Magento/Downloadable/Test/Mftf/Test/AdminRemoveDefaultVideoDownloadableProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-207"/> <group value="Downloadable"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <magentoCLI stepKey="addDownloadableDomain" command="downloadable:domains:add static.magento.com" before="enableAdminAccountSharing"/>
app/code/Magento/Eav/composer.json+8 −7 modified@@ -6,12 +6,12 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\Eav\\": "" } - } + }, + "version": "102.0.5-p2" }
app/code/Magento/EavGraphQl/composer.json+5 −4 modified@@ -4,11 +4,11 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-eav": "*" + "magento/framework": "102.0.*", + "magento/module-eav": "102.0.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -21,5 +21,6 @@ "psr-4": { "Magento\\EavGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Eav/Model/Attribute/Data/File.php+22 −7 modified@@ -6,13 +6,16 @@ namespace Magento\Eav\Model\Attribute\Data; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\RequestInterface; +use Magento\Framework\Filesystem\Io\File as FileIo; /** * EAV Entity Attribute File Data Model * * @api * @since 100.0.2 + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class File extends \Magento\Eav\Model\Attribute\Data\AbstractData { @@ -38,13 +41,19 @@ class File extends \Magento\Eav\Model\Attribute\Data\AbstractData */ protected $_directory; + /** + * @var FileIo + */ + private $fileIo; + /** * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param \Magento\Framework\Url\EncoderInterface $urlEncoder * @param \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $fileValidator * @param \Magento\Framework\Filesystem $filesystem + * @param FileIo|null $fileIo * @codeCoverageIgnore */ public function __construct( @@ -53,12 +62,14 @@ public function __construct( \Magento\Framework\Locale\ResolverInterface $localeResolver, \Magento\Framework\Url\EncoderInterface $urlEncoder, \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $fileValidator, - \Magento\Framework\Filesystem $filesystem + \Magento\Framework\Filesystem $filesystem, + FileIo $fileIo = null ) { parent::__construct($localeDate, $logger, $localeResolver); $this->urlEncoder = $urlEncoder; $this->_fileValidator = $fileValidator; $this->_directory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); + $this->fileIo = $fileIo ?? ObjectManager::getInstance()->get(FileIo::class); } /** @@ -86,7 +97,7 @@ public function extractValue(RequestInterface $request) $mainScope = $this->_requestScope; $scopes = []; } - + // phpcs:disable Magento2.Security.Superglobal if (!empty($_FILES[$mainScope])) { foreach ($_FILES[$mainScope] as $fileKey => $scopeData) { foreach ($scopes as $scopeName) { @@ -104,12 +115,15 @@ public function extractValue(RequestInterface $request) } else { $value = []; } + // phpcs:enable Magento2.Security.Superglobal } else { + // phpcs:disable Magento2.Security.Superglobal if (isset($_FILES[$attrCode])) { $value = $_FILES[$attrCode]; } else { $value = []; } + // phpcs:enable Magento2.Security.Superglobal } if (!empty($extend['delete'])) { @@ -129,7 +143,7 @@ protected function _validateByRules($value) { $label = $this->getAttribute()->getStoreLabel(); $rules = $this->getAttribute()->getValidateRules(); - $extension = pathinfo($value['name'], PATHINFO_EXTENSION); + $extension = $this->fileIo->getPathInfo($value['name'])['extension']; if (!empty($rules['file_extensions'])) { $extensions = explode(',', $rules['file_extensions']); @@ -146,7 +160,9 @@ protected function _validateByRules($value) return $this->_fileValidator->getMessages(); } - if (!empty($value['tmp_name']) && !file_exists($value['tmp_name'])) { + if (!empty($value['tmp_name']) + && !$this->_directory->getDriver()->isExists($value['tmp_name']) + ) { return [__('"%1" is not a valid file.', $label)]; } @@ -177,8 +193,9 @@ public function validateValue($value) if (is_string($value) && !empty($value)) { $dir = $this->_directory->getAbsolutePath($this->getAttribute()->getEntityType()->getEntityTypeCode()); + $stat = $this->_directory->getDriver()->stat($dir . $value); $fileData = [ - 'size' => filesize($dir . $value), + 'size' => $stat['size'], 'name' => $value, 'tmp_name' => $dir . $value ]; @@ -209,8 +226,6 @@ public function validateValue($value) if (count($errors) == 0) { return true; - } elseif (is_string($value) && !empty($value)) { - $this->_directory->delete($dir . $value); } return $errors;
app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/FileTest.php+36 −17 modified@@ -6,15 +6,32 @@ namespace Magento\Eav\Test\Unit\Model\Attribute\Data; +use Magento\Eav\Model\Attribute; +use Magento\Eav\Model\Attribute\Data\File; +use Magento\Eav\Model\AttributeDataFactory; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Io\File as FileIo; +use Magento\Framework\Locale\ResolverInterface; +use Magento\Framework\Model\AbstractModel; +use Magento\Framework\Stdlib\DateTime\TimezoneInterface; +use Magento\Framework\Url\EncoderInterface; +use Magento\MediaStorage\Model\File\Validator\NotProtectedExtension; +use Psr\Log\LoggerInterface; + +/** + * Test for Magento\Eav\Model\Attribute\Data\File class. + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class FileTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Eav\Model\Attribute\Data\File + * @var File */ protected $model; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Url\EncoderInterface + * @var \PHPUnit_Framework_MockObject_MockObject|EncoderInterface */ protected $urlEncoder; @@ -25,23 +42,25 @@ class FileTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $timezoneMock = $this->createMock(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class); - $loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class); - $localeResolverMock = $this->createMock(\Magento\Framework\Locale\ResolverInterface::class); - $this->urlEncoder = $this->createMock(\Magento\Framework\Url\EncoderInterface::class); + $timezoneMock = $this->createMock(TimezoneInterface::class); + $loggerMock = $this->createMock(LoggerInterface::class); + $localeResolverMock = $this->createMock(ResolverInterface::class); + $this->urlEncoder = $this->createMock(EncoderInterface::class); $this->fileValidatorMock = $this->createPartialMock( - \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension::class, + NotProtectedExtension::class, ['isValid', 'getMessages'] ); - $filesystemMock = $this->createMock(\Magento\Framework\Filesystem::class); + $filesystemMock = $this->createMock(Filesystem::class); + $fileIo = $this->createMock(FileIo::class); - $this->model = new \Magento\Eav\Model\Attribute\Data\File( + $this->model = new File( $timezoneMock, $loggerMock, $localeResolverMock, $this->urlEncoder, $this->fileValidatorMock, - $filesystemMock + $filesystemMock, + $fileIo ); } @@ -56,10 +75,10 @@ protected function setUp() */ public function testOutputValue($format, $value, $callTimes, $expectedResult) { - $entityMock = $this->createMock(\Magento\Framework\Model\AbstractModel::class); + $entityMock = $this->createMock(AbstractModel::class); $entityMock->expects($this->once())->method('getData')->will($this->returnValue($value)); - $attributeMock = $this->createMock(\Magento\Eav\Model\Attribute::class); + $attributeMock = $this->createMock(Attribute::class); $this->urlEncoder->expects($this->exactly($callTimes)) ->method('encode') ->will($this->returnValue('url_key')); @@ -76,19 +95,19 @@ public function outputValueDataProvider() { return [ [ - 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_JSON, + 'format' => AttributeDataFactory::OUTPUT_FORMAT_JSON, 'value' => 'value', 'callTimes' => 1, 'expectedResult' => ['value' => 'value', 'url_key' => 'url_key'], ], [ - 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_TEXT, + 'format' => AttributeDataFactory::OUTPUT_FORMAT_TEXT, 'value' => 'value', 'callTimes' => 0, 'expectedResult' => '' ], [ - 'format' => \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_TEXT, + 'format' => AttributeDataFactory::OUTPUT_FORMAT_TEXT, 'value' => false, 'callTimes' => 0, 'expectedResult' => '' @@ -119,10 +138,10 @@ public function testValidateValue( $expectedResult ) { $this->markTestSkipped('MAGETWO-34751: Test fails after being moved. Might have hidden dependency.'); - $entityMock = $this->createMock(\Magento\Framework\Model\AbstractModel::class); + $entityMock = $this->createMock(AbstractModel::class); $entityMock->expects($this->any())->method('getData')->will($this->returnValue($originalValue)); - $attributeMock = $this->createMock(\Magento\Eav\Model\Attribute::class); + $attributeMock = $this->createMock(Attribute::class); $attributeMock->expects($this->any())->method('getStoreLabel')->will($this->returnValue('Label')); $attributeMock->expects($this->any())->method('getIsRequired')->will($this->returnValue($isRequired)); $attributeMock->expects($this->any())->method('getIsAjaxRequest')->will($this->returnValue($isAjaxRequest));
app/code/Magento/Elasticsearch6/composer.json+8 −7 modified@@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-advanced-search": "*", - "magento/module-catalog-search": "*", - "magento/module-search": "*", - "magento/module-elasticsearch": "*", + "magento/framework": "102.0.*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-search": "101.0.*", + "magento/module-elasticsearch": "100.3.*", "elasticsearch/elasticsearch": "~2.0||~5.1||~6.1||~7.6" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\Elasticsearch6\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Elasticsearch7/composer.json+8 −7 modified@@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-advanced-search": "*", - "magento/module-catalog-search": "*", - "magento/module-search": "*", - "magento/module-elasticsearch": "*", + "magento/framework": "102.0.*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-search": "101.0.*", + "magento/module-elasticsearch": "100.3.*", "elasticsearch/elasticsearch": "~2.0||~5.1||~6.1||~7.6 " }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\Elasticsearch7\\": "" } - } + }, + "version": "100.3.0" }
app/code/Magento/Elasticsearch/Block/Adminhtml/System/Config/Elasticsearch5/TestConnection.php+1 −1 modified@@ -8,7 +8,7 @@ /** * Elasticsearch 5x test connection block * @codeCoverageIgnore - * @deprecated because of EOL for Elasticsearch5 + * @deprecated 100.3.5 because of EOL for Elasticsearch5 */ class TestConnection extends \Magento\AdvancedSearch\Block\Adminhtml\System\Config\TestConnection {
app/code/Magento/Elasticsearch/Block/Adminhtml/System/Config/TestConnection.php+1 −1 modified@@ -8,7 +8,7 @@ /** * Elasticsearch test connection block * @codeCoverageIgnore - * @deprecated because of EOL for Elasticsearch2 + * @deprecated 100.3.5 because of EOL for Elasticsearch2 */ class TestConnection extends \Magento\AdvancedSearch\Block\Adminhtml\System\Config\TestConnection {
app/code/Magento/Elasticsearch/composer.json+12 −11 modified@@ -3,19 +3,19 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-advanced-search": "*", - "magento/module-catalog": "*", - "magento/module-catalog-search": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-search": "*", - "magento/module-store": "*", - "magento/module-catalog-inventory": "*", - "magento/framework": "*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/framework": "102.0.*", "elasticsearch/elasticsearch": "~2.0||~5.1||~6.1||~7.6" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -29,5 +29,6 @@ "psr-4": { "Magento\\Elasticsearch\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Elasticsearch/Elasticsearch5/Model/Client/Elasticsearch.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Elasticsearch client * - * @deprecated the Elasticsearch 5 doesn't supported due to EOL + * @deprecated 100.3.5 the Elasticsearch 5 doesn't supported due to EOL */ class Elasticsearch implements ClientInterface {
app/code/Magento/Elasticsearch/Model/Adapter/BatchDataMapper/CategoryFieldsProvider.php+1 −1 modified@@ -15,7 +15,7 @@ /** * Provide data mapping for categories fields * - * @deprecated because of EOL for Elasticsearch2 + * @deprecated 100.3.5 because of EOL for Elasticsearch2 */ class CategoryFieldsProvider implements AdditionalFieldsProviderInterface {
app/code/Magento/Elasticsearch/Model/Adapter/BatchDataMapper/DataMapperFactory.php+1 −1 modified@@ -13,7 +13,7 @@ /** * Data mapper factory uses to create appropriate mapper class * - * @deprecated because of EOL for Elasticsearch2 + * @deprecated 100.3.5 because of EOL for Elasticsearch2 */ class DataMapperFactory {
app/code/Magento/Elasticsearch/Model/Adapter/BatchDataMapper/DataMapperResolver.php+1 −1 modified@@ -13,7 +13,7 @@ /** * Map index data to search engine metadata * - * @deprecated because of EOL for Elasticsearch2 + * @deprecated 100.3.5 because of EOL for Elasticsearch2 */ class DataMapperResolver implements BatchDataMapperInterface {
app/code/Magento/Elasticsearch/Model/DataProvider/Suggestions.php+1 −1 modified@@ -18,7 +18,7 @@ /** * The implementation to provide suggestions mechanism for Elasticsearch2 * - * @deprecated because of EOL for Elasticsearch2 + * @deprecated 100.3.5 because of EOL for Elasticsearch2 * @see \Magento\Elasticsearch\Model\DataProvider\Base\Suggestions */ class Suggestions implements SuggestedQueriesInterface
app/code/Magento/Elasticsearch/SearchAdapter/Mapper.php+1 −1 modified@@ -17,7 +17,7 @@ * * @api * @since 100.1.0 - * @deprecated because of EOL for Elasticsearch2 + * @deprecated 100.3.5 because of EOL for Elasticsearch2 */ class Mapper extends Elasticsearch5Mapper {
app/code/Magento/Email/composer.json+12 −11 modified@@ -6,18 +6,18 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-require-js": "*", - "magento/module-media-storage": "*", - "magento/module-variable": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-require-js": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-variable": "100.3.*" }, "suggest": { - "magento/module-theme": "*" + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -31,5 +31,6 @@ "psr-4": { "Magento\\Email\\": "" } - } + }, + "version": "101.0.5" }
app/code/Magento/Email/Model/Template/Filter.php+2 −2 modified@@ -45,7 +45,7 @@ class Filter extends \Magento\Framework\Filter\Template * Whether to allow SID in store directive: NO * * @var bool - * @deprecated SID is not being used as query parameter anymore. + * @deprecated 101.0.5 SID is not being used as query parameter anymore. */ protected $_useSessionInUrl = false; @@ -266,7 +266,7 @@ public function setUseAbsoluteLinks($flag) * @param bool $flag * @return $this * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * @deprecated SID query parameter is not used in URLs anymore. + * @deprecated 101.0.5 SID query parameter is not used in URLs anymore. */ public function setUseSessionInUrl($flag) {
app/code/Magento/EncryptionKey/composer.json+5 −4 modified@@ -6,9 +6,9 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -22,5 +22,6 @@ "psr-4": { "Magento\\EncryptionKey\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Fedex/composer.json+11 −10 modified@@ -7,15 +7,15 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -29,5 +29,6 @@ "psr-4": { "Magento\\Fedex\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/GiftMessage/composer.json+13 −12 modified@@ -6,19 +6,19 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-eav": "*", - "magento/module-multishipping": "*" + "magento/module-eav": "102.0.*", + "magento/module-multishipping": "100.3.*" }, "type": "magento2-module", "license": [ @@ -32,5 +32,6 @@ "psr-4": { "Magento\\GiftMessage\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/GoogleAdwords/composer.json+5 −4 modified@@ -6,9 +6,9 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -22,5 +22,6 @@ "psr-4": { "Magento\\GoogleAdwords\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/GoogleAnalytics/composer.json+7 −6 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-cookie": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-cookie": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\GoogleAnalytics\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/GoogleOptimizer/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-cms": "*", - "magento/module-google-analytics": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-cms": "103.0.*", + "magento/module-google-analytics": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\GoogleOptimizer\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/GraphQlCache/composer.json+5 −4 modified@@ -4,9 +4,9 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-page-cache": "*", - "magento/module-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -19,5 +19,6 @@ "psr-4": { "Magento\\GraphQlCache\\": "" } - } + }, + "version": "100.3.2" }
app/code/Magento/GraphQl/composer.json+6 −5 modified@@ -4,12 +4,12 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-eav": "*", - "magento/framework": "*" + "magento/module-eav": "102.0.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-webapi": "*", - "magento/module-graph-ql-cache": "*" + "magento/module-webapi": "100.3.*", + "magento/module-graph-ql-cache": "100.3.*" }, "license": [ "OSL-3.0", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\GraphQl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/GroupedCatalogInventory/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-grouped-product": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-grouped-product": "100.3.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\GroupedCatalogInventory\\": "" } - } + }, + "version": "100.3.3" }
app/code/Magento/GroupedImportExport/composer.json+8 −7 modified@@ -6,12 +6,12 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-eav": "*", - "magento/module-grouped-product": "*", - "magento/module-import-export": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-import-export": "100.3.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\GroupedImportExport\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/GroupedProduct/composer.json+16 −15 modified@@ -6,22 +6,22 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-msrp": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-grouped-product-sample-data": "*" + "magento/module-grouped-product-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -35,5 +35,6 @@ "psr-4": { "Magento\\GroupedProduct\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/GroupedProductGraphQl/composer.json+6 −5 modified@@ -4,10 +4,10 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-grouped-product": "*", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*", - "magento/framework": "*" + "magento/module-grouped-product": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/framework": "102.0.*" }, "license": [ "OSL-3.0", @@ -20,5 +20,6 @@ "psr-4": { "Magento\\GroupedProductGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/GroupedProduct/Test/Mftf/Test/AdminAddDefaultVideoGroupedProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-108"/> <group value="GroupedProduct"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <createData entity="SimpleProduct2" stepKey="simpleProduct1"/>
app/code/Magento/GroupedProduct/Test/Mftf/Test/AdminRemoveDefaultVideoGroupedProductTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="MAJOR"/> <testCaseId value="MC-203"/> <group value="GroupedProduct"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before> <createData entity="SimpleProduct2" stepKey="simpleProduct1"/>
app/code/Magento/ImportExport/Block/Adminhtml/Grid/Column/Renderer/Download.php+2 −2 modified@@ -20,9 +20,9 @@ class Download extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Text */ public function _getValue(\Magento\Framework\DataObject $row) { - return '<p> ' . $row->getData('imported_file') . '</p><a href="' + return '<p> ' . $this->escapeHtml($row->getData('imported_file')) . '</p><a href="' . $this->getUrl('*/*/download', ['filename' => $row->getData('imported_file')]) . '">' - . __('Download') + . $this->escapeHtml(__('Download')) . '</a>'; } }
app/code/Magento/ImportExport/Block/Adminhtml/Grid/Column/Renderer/Error.php+2 −2 modified@@ -22,9 +22,9 @@ public function _getValue(\Magento\Framework\DataObject $row) { $result = ''; if ($row->getData('error_file') != '') { - $result = '<p> ' . $row->getData('error_file') . '</p><a href="' + $result = '<p> ' . $this->escapeHtml($row->getData('error_file')) . '</p><a href="' . $this->getUrl('*/*/download', ['filename' => $row->getData('error_file')]) . '">' - . __('Download') + . $this->escapeHtml(__('Download')) . '</a>'; } return $result;
app/code/Magento/ImportExport/composer.json+9 −8 modified@@ -7,13 +7,13 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "ext-ctype": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\ImportExport\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Delete.php+27 −9 modified@@ -13,9 +13,15 @@ use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Exception\ValidatorException; use Magento\ImportExport\Controller\Adminhtml\Export as ExportController; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\DriverInterface; +use Magento\Framework\App\ResponseInterface; +use Magento\Framework\Controller\ResultInterface; +use Magento\Framework\Filesystem\Directory\WriteFactory; +use Magento\Backend\Model\View\Result\Redirect; +use \Magento\Framework\Filesystem\Directory\WriteInterface; /** * Controller that delete file by name. @@ -34,29 +40,40 @@ class Delete extends ExportController implements HttpPostActionInterface /** * @var DriverInterface + * @deprecated 100.3.5 Is not used anymore. + * @see WriteInterface */ private $file; + /** + * @var WriteFactory + */ + private $writeFactory; + /** * Delete constructor. + * * @param Action\Context $context * @param Filesystem $filesystem * @param DriverInterface $file + * @param WriteFactory $writeFactory */ public function __construct( Action\Context $context, Filesystem $filesystem, - DriverInterface $file + DriverInterface $file, + WriteFactory $writeFactory ) { $this->filesystem = $filesystem; $this->file = $file; + $this->writeFactory = $writeFactory; parent::__construct($context); } /** * Controller basic method implementation. * - * @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface + * @return ResponseInterface|ResultInterface * @throws LocalizedException */ public function execute() @@ -65,17 +82,18 @@ public function execute() if (empty($fileName = $this->getRequest()->getParam('filename'))) { throw new LocalizedException(__('Please provide export file name')); } - $directory = $this->filesystem->getDirectoryRead(DirectoryList::VAR_DIR); - $path = $directory->getAbsolutePath() . 'export/' . $fileName; - - if (!$directory->isFile($path)) { + $directoryWrite = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_EXPORT); + try { + $directoryWrite->delete($directoryWrite->getAbsolutePath($fileName)); + } catch (ValidatorException $exception) { + throw new LocalizedException(__('Sorry, but the data is invalid or the file is not uploaded.')); + } catch (FileSystemException $exception) { throw new LocalizedException(__('Sorry, but the data is invalid or the file is not uploaded.')); } - - $this->file->deleteFile($path); - /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ + /** @var Redirect $resultRedirect */ $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); $resultRedirect->setPath('adminhtml/export/index'); + return $resultRedirect; } catch (FileSystemException $exception) { throw new LocalizedException(__('There are no export file with such name %1', $fileName));
app/code/Magento/ImportExport/Model/Export/Adapter/Csv.php+1 −0 modified@@ -39,6 +39,7 @@ class Csv extends AbstractAdapter /** * Object destructor + * @since 100.3.5 */ public function __destruct() {
app/code/Magento/ImportExport/Test/Unit/Block/Adminhtml/Grid/Column/Renderer/DownloadTest.php+29 −6 modified@@ -5,12 +5,20 @@ */ namespace Magento\ImportExport\Test\Unit\Block\Adminhtml\Grid\Column\Renderer; +use Magento\Backend\Block\Context; +use Magento\Backend\Model\Url; +use Magento\Framework\DataObject; +use Magento\Framework\Escaper; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; +use Magento\ImportExport\Block\Adminhtml\Grid\Column\Renderer\Download; +/** + * Test for \Magento\ImportExport\Block\Adminhtml\Grid\Column\Renderer\Download class. + */ class DownloadTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Backend\Block\Context + * @var Context */ protected $context; @@ -20,24 +28,31 @@ class DownloadTest extends \PHPUnit\Framework\TestCase protected $objectManagerHelper; /** - * @var \Magento\ImportExport\Block\Adminhtml\Grid\Column\Renderer\Download + * @var Download */ protected $download; + /** + * @var Escaper|\PHPUnit_Framework_MockObject_MockObjecti + */ + private $escaperMock; + /** * Set up */ protected function setUp() { - $urlModel = $this->createPartialMock(\Magento\Backend\Model\Url::class, ['getUrl']); + $this->escaperMock = $this->createMock(Escaper::class); + $urlModel = $this->createPartialMock(Url::class, ['getUrl']); $urlModel->expects($this->any())->method('getUrl')->willReturn('url'); - $this->context = $this->createPartialMock(\Magento\Backend\Block\Context::class, ['getUrlBuilder']); + $this->context = $this->createPartialMock(Context::class, ['getUrlBuilder', 'getEscaper']); $this->context->expects($this->any())->method('getUrlBuilder')->willReturn($urlModel); + $this->context->expects($this->any())->method('getEscaper')->willReturn($this->escaperMock); $data = []; $this->objectManagerHelper = new ObjectManagerHelper($this); $this->download = $this->objectManagerHelper->getObject( - \Magento\ImportExport\Block\Adminhtml\Grid\Column\Renderer\Download::class, + Download::class, [ 'context' => $this->context, 'data' => $data @@ -51,7 +66,15 @@ protected function setUp() public function testGetValue() { $data = ['imported_file' => 'file.csv']; - $row = new \Magento\Framework\DataObject($data); + $row = new DataObject($data); + $this->escaperMock->expects($this->at(0)) + ->method('escapeHtml') + ->with('file.csv') + ->willReturn('file.csv'); + $this->escaperMock->expects($this->at(1)) + ->method('escapeHtml') + ->with('Download') + ->willReturn('Download'); $this->assertEquals('<p> file.csv</p><a href="url">Download</a>', $this->download->_getValue($row)); } }
app/code/Magento/Indexer/composer.json+4 −3 modified@@ -6,8 +6,8 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\Indexer\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/Indexer/Test/Mftf/ActionGroup/CliIndexerReindexActionGroup.xml+20 −0 added@@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="CliIndexerReindexActionGroup"> + <annotations> + <description>Run reindex by CLI with specified indexers (space separated).</description> + </annotations> + <arguments> + <argument name="indices" type="string"/> + </arguments> + + <magentoCLI command="indexer:reindex" arguments="{{indices}}" stepKey="reindexSpecifiedIndexers"/> + </actionGroup> +</actionGroups>
app/code/Magento/InstantPurchase/composer.json+10 −9 modified@@ -8,14 +8,14 @@ ], "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-quote": "*", - "magento/module-vault": "*", - "magento/framework": "*" + "magento/module-store": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-vault": "101.1.*", + "magento/framework": "102.0.*" }, "autoload": { "files": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\InstantPurchase\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Integration/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-security": "*", - "magento/module-store": "*", - "magento/module-user": "*" + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\Integration\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/LayeredNavigation/composer.json+5 −4 modified@@ -6,9 +6,9 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-config": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -22,5 +22,6 @@ "psr-4": { "Magento\\LayeredNavigation\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Marketplace/composer.json+4 −3 modified@@ -6,8 +6,8 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\Marketplace\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/MediaGalleryApi/composer.json+3 −2 modified@@ -3,7 +3,7 @@ "description": "Magento module responsible for media gallery asset attributes storage and management", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*" + "magento/framework": "102.0.*" }, "type": "magento2-module", "license": [ @@ -17,5 +17,6 @@ "psr-4": { "Magento\\MediaGalleryApi\\": "" } - } + }, + "version": "100.3.0" }
app/code/Magento/MediaGallery/composer.json+6 −5 modified@@ -3,10 +3,10 @@ "description": "Magento module responsible for media handling", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-media-gallery-api": "*", - "magento/module-cms": "*", - "magento/module-catalog": "*" + "magento/framework": "102.0.*", + "magento/module-media-gallery-api": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-catalog": "103.0.*" }, "type": "magento2-module", "license": [ @@ -20,5 +20,6 @@ "psr-4": { "Magento\\MediaGallery\\": "" } - } + }, + "version": "100.3.1" }
app/code/Magento/MediaStorage/composer.json+8 −7 modified@@ -6,12 +6,12 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-theme": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\MediaStorage\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/MessageQueue/composer.json+3 −2 modified@@ -5,7 +5,7 @@ "sort-packages": true }, "require": { - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*", "php": "~7.1.3||~7.2.0||~7.3.0" }, @@ -21,5 +21,6 @@ "psr-4": { "Magento\\MessageQueue\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/MessageQueue/Test/Mftf/ActionGroup/CliConsumerStartActionGroup.xml+22 −0 added@@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="CliConsumerStartActionGroup"> + <annotations> + <description>Starts message queue for specific consumer by CLI.</description> + </annotations> + <arguments> + <argument name="consumerName" type="string"/> + <argument name="maxMessages" type="string"/> + </arguments> + + <magentoCLI command="queue:consumers:start {{consumerName}} --max-messages={{maxMessages}}" stepKey="startMessageQueue"/> + </actionGroup> +</actionGroups>
app/code/Magento/MessageQueue/Test/Mftf/Data/QueueConsumerData.xml+23 −0 added@@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="AdminExportMessageConsumerData"> + <data key="consumerName">exportProcessor</data> + <data key="messageLimit">100</data> + </entity> + <entity name="AdminProductAttributeUpdateMessageConsumerData"> + <data key="consumerName">product_action_attribute.update</data> + <data key="messageLimit">100</data> + </entity> + <entity name="AdminCodeGeneratorMessageConsumerData"> + <data key="consumerName">codegeneratorProcessor</data> + <data key="messageLimit">100</data> + </entity> +</entities>
app/code/Magento/Msrp/composer.json+10 −9 modified@@ -6,16 +6,16 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-downloadable": "*", - "magento/module-eav": "*", - "magento/module-store": "*", - "magento/module-tax": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*" }, "suggest": { - "magento/module-bundle": "*", - "magento/module-msrp-sample-data": "*" + "magento/module-bundle": "100.3.*", + "magento/module-msrp-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -29,5 +29,6 @@ "psr-4": { "Magento\\Msrp\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/MsrpConfigurableProduct/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-msrp": "*", - "magento/module-configurable-product": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-msrp": "100.3.*", + "magento/module-configurable-product": "100.3.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\MsrpConfigurableProduct\\": "" } - } + }, + "version": "100.3.3" }
app/code/Magento/MsrpGroupedProduct/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-msrp": "*", - "magento/module-grouped-product": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-msrp": "100.3.*", + "magento/module-grouped-product": "100.3.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\MsrpGroupedProduct\\": "" } - } + }, + "version": "100.3.3" }
app/code/Magento/Multishipping/composer.json+12 −11 modified@@ -6,16 +6,16 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*" + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -29,5 +29,6 @@ "psr-4": { "Magento\\Multishipping\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/MysqlMq/composer.json+4 −3 modified@@ -5,9 +5,9 @@ "sort-packages": true }, "require": { - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*", - "magento/module-store": "*", + "magento/module-store": "101.0.*", "php": "~7.1.3||~7.2.0||~7.3.0" }, "type": "magento2-module", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\MysqlMq\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/NewRelicReporting/composer.json+9 −8 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-configurable-product": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\NewRelicReporting\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Newsletter/composer.json+11 −10 modified@@ -6,15 +6,15 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cms": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-email": "*", - "magento/module-require-js": "*", - "magento/module-store": "*", - "magento/module-widget": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-email": "101.0.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-widget": "101.1.*" }, "type": "magento2-module", "license": [ @@ -28,5 +28,6 @@ "psr-4": { "Magento\\Newsletter\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/Newsletter/Controller/Adminhtml/Template/Save.php+4 −4 modified@@ -1,6 +1,5 @@ <?php /** - * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ @@ -10,6 +9,9 @@ use Magento\Framework\App\TemplateTypesInterface; use Magento\Framework\Exception\LocalizedException; +/** + * An action that saves a template. + */ class Save extends \Magento\Newsletter\Controller\Adminhtml\Template implements HttpPostActionInterface { /** @@ -32,9 +34,7 @@ public function execute() } try { - $template->addData( - $request->getParams() - )->setTemplateSubject( + $template->setTemplateSubject( $request->getParam('subject') )->setTemplateCode( $request->getParam('code')
app/code/Magento/OfflinePayments/composer.json+6 −5 modified@@ -6,12 +6,12 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-payment": "*" + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\OfflinePayments\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/OfflineShipping/composer.json+14 −13 modified@@ -6,20 +6,20 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-checkout": "*", - "magento/module-offline-shipping-sample-data": "*" + "magento/module-checkout": "100.3.*", + "magento/module-offline-shipping-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -33,5 +33,6 @@ "psr-4": { "Magento\\OfflineShipping\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/PageCache/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\PageCache\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Payment/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\Payment\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/PaypalCaptcha/composer.json+7 −6 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-captcha": "*", - "magento/module-checkout": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-captcha": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-paypal": "*" + "magento/module-paypal": "100.3.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\PaypalCaptcha\\": "" } - } + }, + "version": "100.3.2" }
app/code/Magento/Paypal/composer.json+20 −19 modified@@ -7,26 +7,26 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-instant-purchase": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-vault": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-instant-purchase": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-vault": "101.1.*" }, "suggest": { - "magento/module-checkout-agreements": "*" + "magento/module-checkout-agreements": "100.3.*" }, "type": "magento2-module", "license": [ @@ -40,5 +40,6 @@ "psr-4": { "Magento\\Paypal\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/PaypalGraphQl/composer.json+11 −10 modified@@ -6,17 +6,17 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-quote": "*", - "magento/module-checkout": "*", - "magento/module-paypal": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-sales": "*", - "magento/module-payment": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-checkout": "100.3.*", + "magento/module-paypal": "100.3.*", + "magento/module-quote-graph-ql": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.3.*" }, "type": "magento2-module", "license": [ @@ -30,5 +30,6 @@ "psr-4": { "Magento\\PaypalGraphQl\\": "" } - } + }, + "version": "100.3.1" }
app/code/Magento/Paypal/Test/Mftf/Test/StorefrontPaypalSmartButtonInCheckoutPageTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <severity value="CRITICAL"/> <testCaseId value="MC-13690"/> <group value="paypal"/> + <skip> + <issueId value="MC-35083"/> + </skip> </annotations> <before>
app/code/Magento/Persistent/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-cron": "*", - "magento/module-customer": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-cron": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\Persistent\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/ProductAlert/composer.json+8 −7 modified@@ -6,14 +6,14 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -27,5 +27,6 @@ "psr-4": { "Magento\\ProductAlert\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/ProductVideo/composer.json+10 −9 modified@@ -6,17 +6,17 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*" + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-customer": "*", - "magento/module-config": "*" + "magento/module-customer": "102.0.*", + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -30,5 +30,6 @@ "psr-4": { "Magento\\ProductVideo\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/ProductVideo/Test/Mftf/Test/YoutubeVideoWindowOnProductPageTest.xml+3 −0 modified@@ -17,6 +17,9 @@ <description value="Check Youtube video window on the product page"/> <severity value="MAJOR"/> <group value="ProductVideo"/> + <skip> + <issueId value="MC-34256"/> + </skip> </annotations> <before>
app/code/Magento/QuoteAnalytics/composer.json+5 −4 modified@@ -3,9 +3,9 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-quote": "*", - "magento/module-analytics": "*" + "magento/framework": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-analytics": "100.3.*" }, "type": "magento2-module", "license": [ @@ -19,5 +19,6 @@ "psr-4": { "Magento\\QuoteAnalytics\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Quote/composer.json+18 −17 modified@@ -6,24 +6,24 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-payment": "*", - "magento/module-sales": "*", - "magento/module-sales-sequence": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-tax": "*" + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*" }, "suggest": { - "magento/module-webapi": "*" + "magento/module-webapi": "100.3.*" }, "type": "magento2-module", "license": [ @@ -37,5 +37,6 @@ "psr-4": { "Magento\\Quote\\": "" } - } + }, + "version": "101.1.5-p2" }
app/code/Magento/QuoteGraphQl/composer.json+13 −12 modified@@ -4,19 +4,19 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-quote": "*", - "magento/module-checkout": "*", - "magento/module-catalog": "*", - "magento/module-store": "*", - "magento/module-customer": "*", - "magento/module-customer-graph-ql": "*", - "magento/module-sales": "*", - "magento/module-directory": "*", - "magento/module-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-checkout": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-customer-graph-ql": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-graph-ql": "100.3.*" }, "suggest": { - "magento/module-graph-ql-cache": "*" + "magento/module-graph-ql-cache": "100.3.*" }, "license": [ "OSL-3.0", @@ -29,5 +29,6 @@ "psr-4": { "Magento\\QuoteGraphQl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Quote/Setup/Patch/Data/WishlistDataCleanUp.php+154 −0 added@@ -0,0 +1,154 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); +namespace Magento\Quote\Setup\Patch\Data; + +use Magento\Framework\DB\Query\Generator; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Serialize\Serializer\Json; +use Magento\Framework\Setup\Patch\DataPatchInterface; +use Magento\Quote\Setup\QuoteSetupFactory; +use Psr\Log\LoggerInterface; + +/** + * Class Clean Up Data Removes unused data + */ +class WishlistDataCleanUp implements DataPatchInterface +{ + /** + * Batch size for query + */ + private const BATCH_SIZE = 1000; + + /** + * @var QuoteSetupFactory + */ + private $quoteSetupFactory; + + /** + * @var Generator + */ + private $queryGenerator; + + /** + * @var Json + */ + private $json; + + /** + * @var LoggerInterface + */ + private $logger; + + /** + * RemoveData constructor. + * @param Json $json + * @param Generator $queryGenerator + * @param QuoteSetupFactory $quoteSetupFactory + * @param LoggerInterface $logger + */ + public function __construct( + Json $json, + Generator $queryGenerator, + QuoteSetupFactory $quoteSetupFactory, + LoggerInterface $logger + ) { + $this->json = $json; + $this->queryGenerator = $queryGenerator; + $this->quoteSetupFactory = $quoteSetupFactory; + $this->logger = $logger; + } + + /** + * @inheritdoc + */ + public function apply() + { + try { + $this->cleanQuoteItemOptionTable(); + } catch (\Throwable $e) { + $this->logger->warning( + 'Quote module WishlistDataCleanUp patch experienced an error and could not be completed.' + . ' Please submit a support ticket or email us at security@magento.com.' + ); + + return $this; + } + + return $this; + } + + /** + * Remove login data from quote_item_option table. + * + * @throws LocalizedException + */ + private function cleanQuoteItemOptionTable() + { + $quoteSetup = $this->quoteSetupFactory->create(); + $tableName = $quoteSetup->getTable('quote_item_option'); + $select = $quoteSetup + ->getConnection() + ->select() + ->from( + $tableName, + ['option_id', 'value'] + ) + ->where( + 'value LIKE ?', + '%login%' + ); + $iterator = $this->queryGenerator->generate('option_id', $select, self::BATCH_SIZE); + $rowErrorFlag = false; + foreach ($iterator as $selectByRange) { + $optionRows = $quoteSetup->getConnection()->fetchAll($selectByRange); + foreach ($optionRows as $optionRow) { + try { + $rowValue = $this->json->unserialize($optionRow['value']); + if (is_array($rowValue) + && array_key_exists('login', $rowValue) + ) { + unset($rowValue['login']); + } + $rowValue = $this->json->serialize($rowValue); + $quoteSetup->getConnection()->update( + $tableName, + ['value' => $rowValue], + ['option_id = ?' => $optionRow['option_id']] + ); + } catch (\Throwable $e) { + $rowErrorFlag = true; + continue; + } + } + } + if ($rowErrorFlag) { + $this->logger->warning( + 'Data clean up could not be completed due to unexpected data format in the table "' + . $tableName + . '". Please submit a support ticket or email us at security@magento.com.' + ); + } + } + + /** + * @inheritdoc + */ + public static function getDependencies() + { + return [ + ConvertSerializedDataToJson::class + ]; + } + + /** + * @inheritdoc + */ + public function getAliases() + { + return []; + } +}
app/code/Magento/RelatedProductGraphQl/composer.json+6 −5 modified@@ -4,12 +4,12 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*", - "magento/framework": "*" + "magento/module-catalog": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\RelatedProductGraphQl\\": "" } - } + }, + "version": "100.3.1" }
app/code/Magento/ReleaseNotification/composer.json+7 −6 modified@@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/module-user": "*", - "magento/module-backend": "*", - "magento/module-ui": "*", - "magento/framework": "*" + "magento/module-user": "101.1.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\ReleaseNotification\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Reports/composer.json+19 −18 modified@@ -6,23 +6,23 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-downloadable": "*", - "magento/module-eav": "*", - "magento/module-quote": "*", - "magento/module-review": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-review": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*" }, "type": "magento2-module", "license": [ @@ -36,5 +36,6 @@ "psr-4": { "Magento\\Reports\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Reports/Model/ResourceModel/Review/Product/Collection.php+1 −0 modified@@ -106,6 +106,7 @@ public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC) * @param array|null $condition * @param string $joinType * @return $this|\Magento\Catalog\Model\ResourceModel\Product\Collection + * @since 100.3.5 */ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') {
app/code/Magento/RequireJs/composer.json+3 −2 modified@@ -6,7 +6,7 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*" + "magento/framework": "102.0.*" }, "type": "magento2-module", "license": [ @@ -20,5 +20,6 @@ "psr-4": { "Magento\\RequireJs\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/ReviewAnalytics/composer.json+5 −4 modified@@ -3,9 +3,9 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-review": "*", - "magento/module-analytics": "*" + "magento/framework": "102.0.*", + "magento/module-review": "100.3.*", + "magento/module-analytics": "100.3.*" }, "type": "magento2-module", "license": [ @@ -19,5 +19,6 @@ "psr-4": { "Magento\\ReviewAnalytics\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Review/composer.json+13 −12 modified@@ -6,19 +6,19 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-newsletter": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-newsletter": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*" }, "suggest": { - "magento/module-cookie": "*", - "magento/module-review-sample-data": "*" + "magento/module-cookie": "100.3.*", + "magento/module-review-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -32,5 +32,6 @@ "psr-4": { "Magento\\Review\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Robots/composer.json+5 −4 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-theme": "*" + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\Robots\\": "" } - } + }, + "version": "101.0.4" }
app/code/Magento/Rss/composer.json+6 −5 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -23,5 +23,6 @@ "psr-4": { "Magento\\Rss\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Rule/composer.json+7 −6 modified@@ -7,11 +7,11 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\Rule\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/SalesAnalytics/composer.json+5 −4 modified@@ -3,9 +3,9 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-sales": "*", - "magento/module-analytics": "*" + "magento/framework": "102.0.*", + "magento/module-sales": "102.0.*", + "magento/module-analytics": "100.3.*" }, "type": "magento2-module", "license": [ @@ -19,5 +19,6 @@ "psr-4": { "Magento\\SalesAnalytics\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php+1 −1 modified@@ -556,7 +556,7 @@ public function getConfigureButtonHtml($item) $options['onclick'] = sprintf('order.showQuoteItemConfiguration(%s)', $item->getId()); } else { $options['class'] = ' disabled'; - $options['title'] = $this->escapeHtml(__('This product does not have any configurable options')); + $options['title'] = $this->escapeHtmlAttr(__('This product does not have any configurable options')); } return $this->getLayout()->createBlock(
app/code/Magento/Sales/Block/Order/Creditmemo/Items.php+1 −1 modified@@ -97,7 +97,7 @@ public function getCommentsHtml($creditmemo) $html = ''; $comments = $this->getChildBlock('creditmemo_comments'); if ($comments) { - $comments->setEntity($creditmemo)->setTitle($this->escapeHtml(__('About Your Refund'))); + $comments->setEntity($creditmemo)->setTitle($this->escapeHtmlAttr(__('About Your Refund'))); $html = $comments->toHtml(); } return $html;
app/code/Magento/Sales/Block/Order/Invoice/Items.php+1 −1 modified@@ -99,7 +99,7 @@ public function getInvoiceCommentsHtml($invoice) $html = ''; $comments = $this->getChildBlock('invoice_comments'); if ($comments) { - $comments->setEntity($invoice)->setTitle($this->escapeHtml(__('About Your Invoice'))); + $comments->setEntity($invoice)->setTitle($this->escapeHtmlAttr(__('About Your Invoice'))); $html = $comments->toHtml(); } return $html;
app/code/Magento/Sales/composer.json+28 −27 modified@@ -6,34 +6,34 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-bundle": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-gift-message": "*", - "magento/module-media-storage": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-sales-rule": "*", - "magento/module-sales-sequence": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*" + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*" }, "suggest": { - "magento/module-sales-sample-data": "*" + "magento/module-sales-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -47,5 +47,6 @@ "psr-4": { "Magento\\Sales\\": "" } - } + }, + "version": "102.0.5-p2" }
app/code/Magento/SalesGraphQl/composer.json+5 −4 modified@@ -4,9 +4,9 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-sales": "*", - "magento/module-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-sales": "102.0.*", + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -19,5 +19,6 @@ "psr-4": { "Magento\\SalesGraphQl\\": "" } - } + }, + "version": "100.3.3" }
app/code/Magento/SalesInventory/composer.json+7 −6 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\SalesInventory\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/SalesRule/composer.json+23 −22 modified@@ -6,29 +6,29 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-rule": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-rule": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-widget": "*", - "magento/module-captcha": "*", - "magento/module-checkout": "*", - "magento/module-authorization": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-rule": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-captcha": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-authorization": "100.3.*" }, "suggest": { - "magento/module-sales-rule-sample-data": "*" + "magento/module-sales-rule-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -42,5 +42,6 @@ "psr-4": { "Magento\\SalesRule\\": "" } - } + }, + "version": "101.1.5-p2" }
app/code/Magento/SalesRule/Test/Mftf/Test/AdminCreateCartPriceRuleForGeneratedCouponTest.xml+5 −3 modified@@ -55,9 +55,11 @@ <click selector="{{AdminCartPriceRulesFormSection.generateCouponsButton}}" stepKey="clickGenerate"/> <see selector="{{AdminCartPriceRulesFormSection.successMessage}}" userInput="Message is added to queue, wait to get your coupons soon" stepKey="seeGenerationSuccess"/> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Apply changes" stepKey="runCron1"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron2"> + <argument name="consumerName" value="{{AdminCodeGeneratorMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminCodeGeneratorMessageConsumerData.messageLimit}}"/> + </actionGroup> <reloadPage stepKey="refreshPage"/> <waitForPageLoad stepKey="waitFormToReload1"/> <click selector="{{AdminCartPriceRulesFormSection.manageCouponCodesHeader}}" stepKey="expandCouponSection2"/>
app/code/Magento/SalesRule/Test/Mftf/Test/StorefrontAutoGeneratedCouponCodeTest.xml+5 −3 modified@@ -59,9 +59,11 @@ <see selector="{{AdminCartPriceRulesFormSection.successMessage}}" userInput="Message is added to queue, wait to get your coupons soon" stepKey="seeSuccessMessage"/> - <!-- Run cron twice --> - <magentoCLI command="cron:run" stepKey="runCron1"/> - <magentoCLI command="cron:run" stepKey="runCron2"/> + <comment userInput="Apply changes" stepKey="runCron1"/> + <actionGroup ref="CliConsumerStartActionGroup" stepKey="runCron2"> + <argument name="consumerName" value="{{AdminCodeGeneratorMessageConsumerData.consumerName}}"/> + <argument name="maxMessages" value="{{AdminCodeGeneratorMessageConsumerData.messageLimit}}"/> + </actionGroup> <reloadPage stepKey="refreshPage"/> <waitForPageLoad stepKey="waitFormToReload1"/> <conditionalClick selector="{{AdminCartPriceRulesFormSection.manageCouponCodesHeader}}"
app/code/Magento/SalesSequence/composer.json+3 −2 modified@@ -6,7 +6,7 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*" + "magento/framework": "102.0.*" }, "type": "magento2-module", "license": [ @@ -20,5 +20,6 @@ "psr-4": { "Magento\\SalesSequence\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Sales/Setup/Patch/Data/WishlistDataCleanUp.php+157 −0 added@@ -0,0 +1,157 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); +namespace Magento\Sales\Setup\Patch\Data; + +use Magento\Framework\DB\Query\Generator; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Serialize\Serializer\Json; +use Magento\Framework\Setup\Patch\DataPatchInterface; +use Magento\Sales\Setup\SalesSetupFactory; +use Psr\Log\LoggerInterface; + +/** + * Class Clean Up Data Removes unused data + */ +class WishlistDataCleanUp implements DataPatchInterface +{ + /** + * Batch size for query + */ + private const BATCH_SIZE = 1000; + + /** + * @var SalesSetupFactory + */ + private $salesSetupFactory; + + /** + * @var Generator + */ + private $queryGenerator; + + /** + * @var Json + */ + private $json; + + /** + * @var LoggerInterface + */ + private $logger; + + /** + * RemoveData constructor. + * @param Json $json + * @param Generator $queryGenerator + * @param SalesSetupFactory $salesSetupFactory + * @param LoggerInterface $logger + */ + public function __construct( + Json $json, + Generator $queryGenerator, + SalesSetupFactory $salesSetupFactory, + LoggerInterface $logger + ) { + $this->json = $json; + $this->queryGenerator = $queryGenerator; + $this->salesSetupFactory = $salesSetupFactory; + $this->logger = $logger; + } + + /** + * @inheritdoc + * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + */ + public function apply() + { + try { + $this->cleanSalesOrderItemTable(); + } catch (\Throwable $e) { + $this->logger->warning( + 'Sales module WishlistDataCleanUp patch experienced an error and could not be completed.' + . ' Please submit a support ticket or email us at security@magento.com.' + ); + + return $this; + } + + return $this; + } + + /** + * Remove login data from sales_order_item table. + * + * @throws LocalizedException + */ + private function cleanSalesOrderItemTable() + { + $salesSetup = $this->salesSetupFactory->create(); + $tableName = $salesSetup->getTable('sales_order_item'); + $select = $salesSetup + ->getConnection() + ->select() + ->from( + $tableName, + ['item_id', 'product_options'] + ) + ->where( + 'product_options LIKE ?', + '%login%' + ); + $iterator = $this->queryGenerator->generate('item_id', $select, self::BATCH_SIZE); + $rowErrorFlag = false; + foreach ($iterator as $selectByRange) { + $itemRows = $salesSetup->getConnection()->fetchAll($selectByRange); + foreach ($itemRows as $itemRow) { + try { + $rowValue = $this->json->unserialize($itemRow['product_options']); + if (is_array($rowValue) + && array_key_exists('info_buyRequest', $rowValue) + && array_key_exists('login', $rowValue['info_buyRequest']) + ) { + unset($rowValue['info_buyRequest']['login']); + } + $rowValue = $this->json->serialize($rowValue); + $salesSetup->getConnection()->update( + $tableName, + ['product_options' => $rowValue], + ['item_id = ?' => $itemRow['item_id']] + ); + } catch (\Throwable $e) { + $rowErrorFlag = true; + continue; + } + } + } + if ($rowErrorFlag) { + $this->logger->warning( + 'Data clean up could not be completed due to unexpected data format in the table "' + . $tableName + . '". Please submit a support ticket or email us at security@magento.com.' + ); + } + } + + /** + * @inheritdoc + */ + public static function getDependencies() + { + return [ + ConvertSerializedDataToJson::class + ]; + } + + /** + * @inheritdoc + */ + public function getAliases() + { + return []; + } +}
app/code/Magento/Sales/Test/Mftf/Test/AdminUnassignCustomOrderStatusTest.xml+1 −0 modified@@ -55,6 +55,7 @@ <!--Click unassign and verify AssertOrderStatusSuccessUnassignMessage--> <click selector="{{AdminOrderStatusGridSection.unassign}}" stepKey="clickUnassign"/> + <waitForElementVisible selector="{{AdminMessagesSection.success}}" stepKey="waitForSuccessMessageAppeared"/> <see selector="{{AdminMessagesSection.success}}" userInput="You have unassigned the order status." stepKey="seeAssertOrderStatusSuccessUnassignMessage"/> <!--Verify the order status grid page shows the updated order status and verify AssertOrderStatusInGrid-->
app/code/Magento/SampleData/composer.json+4 −3 modified@@ -6,10 +6,10 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*" + "magento/framework": "102.0.*" }, "suggest": { - "magento/sample-data-media": "*" + "magento/sample-data-media": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\SampleData\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Search/composer.json+8 −7 modified@@ -6,12 +6,12 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog-search": "*", - "magento/module-reports": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-reports": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*" }, "type": "magento2-module", "license": [ @@ -25,5 +25,6 @@ "psr-4": { "Magento\\Search\\": "" } - } + }, + "version": "101.0.5" }
app/code/Magento/Security/composer.json+7 −6 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-store": "*", - "magento/module-user": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*" }, "suggest": { - "magento/module-customer": "*" + "magento/module-customer": "102.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\Security\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/SendFriend/composer.json+9 −8 modified@@ -6,13 +6,13 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-store": "*", - "magento/module-captcha": "*", - "magento/module-authorization": "*", - "magento/module-theme": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-captcha": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-theme": "101.0.*" }, "type": "magento2-module", "license": [ @@ -26,5 +26,6 @@ "psr-4": { "Magento\\SendFriend\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/SendFriendGraphQl/composer.json+6 −5 modified@@ -4,10 +4,10 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-send-friend": "*", - "magento/module-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-send-friend": "100.3.*", + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -20,5 +20,6 @@ "psr-4": { "Magento\\SendFriendGraphQl\\": "" } - } + }, + "version": "100.3.3" }
app/code/Magento/Shipping/Block/Items.php+1 −1 modified@@ -83,7 +83,7 @@ public function getCommentsHtml($shipment) $html = ''; $comments = $this->getChildBlock('shipment_comments'); if ($comments) { - $comments->setEntity($shipment)->setTitle($this->escapeHtml(__('About Your Shipment'))); + $comments->setEntity($shipment)->setTitle($this->escapeHtmlAttr(__('About Your Shipment'))); $html = $comments->toHtml(); } return $html;
app/code/Magento/Shipping/composer.json+19 −18 modified@@ -7,25 +7,25 @@ "require": { "php": "~7.1.3||~7.2.0||~7.3.0", "ext-gd": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-contact": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-ui": "*", - "magento/module-user": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-contact": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*" }, "suggest": { - "magento/module-fedex": "*", - "magento/module-ups": "*", - "magento/module-config": "*" + "magento/module-fedex": "100.3.*", + "magento/module-ups": "100.3.*", + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -39,5 +39,6 @@ "psr-4": { "Magento\\Shipping\\": "" } - } + }, + "version": "100.3.5-p2" }
app/code/Magento/Signifyd/Api/CaseCreationServiceInterface.php+1 −1 modified@@ -13,7 +13,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface CaseCreationServiceInterface
app/code/Magento/Signifyd/Api/CaseManagementInterface.php+1 −1 modified@@ -11,7 +11,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface CaseManagementInterface
app/code/Magento/Signifyd/Api/CaseRepositoryInterface.php+1 −1 modified@@ -10,7 +10,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface CaseRepositoryInterface
app/code/Magento/Signifyd/Api/Data/CaseInterface.php+1 −1 modified@@ -13,7 +13,7 @@ * @api * @see https://www.signifyd.com/docs/api/#/reference/cases/retrieve-a-case/get-a-case * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface CaseInterface
app/code/Magento/Signifyd/Api/Data/CaseSearchResultsInterface.php+1 −1 modified@@ -12,7 +12,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface CaseSearchResultsInterface extends SearchResultsInterface
app/code/Magento/Signifyd/Api/GuaranteeCancelingServiceInterface.php+1 −1 modified@@ -13,7 +13,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface GuaranteeCancelingServiceInterface
app/code/Magento/Signifyd/Api/GuaranteeCreationServiceInterface.php+1 −1 modified@@ -13,7 +13,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface GuaranteeCreationServiceInterface
app/code/Magento/Signifyd/Block/Adminhtml/CaseInfo.php+1 −1 modified@@ -15,7 +15,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseInfo extends Template
app/code/Magento/Signifyd/Block/Adminhtml/System/Config/Fieldset/Info.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Fieldset renderer with url attached to comment. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Info extends Fieldset
app/code/Magento/Signifyd/Block/Adminhtml/System/Config/Field/WebhookUrl.php+1 −1 modified@@ -13,7 +13,7 @@ /** * Input field transformed to text node with link to store Signifyd webhooks controller. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class WebhookUrl extends Field
app/code/Magento/Signifyd/Block/Fingerprint.php+1 −1 modified@@ -20,7 +20,7 @@ * @api * @see https://www.signifyd.com/docs/api/#/reference/device-fingerprint/create-a-case * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Fingerprint extends Template
app/code/Magento/Signifyd/composer.json+12 −11 modified@@ -5,19 +5,19 @@ "sort-packages": true }, "require": { - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-payment": "*", - "magento/module-sales": "*", - "magento/module-store": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", "php": "~7.1.3||~7.2.0||~7.3.0" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -31,5 +31,6 @@ "psr-4": { "Magento\\Signifyd\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Signifyd/Controller/Webhooks/Handler.php+1 −1 modified@@ -22,7 +22,7 @@ * Responsible for handling webhook posts from Signifyd service. * * @see https://www.signifyd.com/docs/api/#/reference/webhooks/ - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Handler extends Action implements \Magento\Framework\App\CsrfAwareActionInterface
app/code/Magento/Signifyd/Model/CaseEntity.php+1 −1 modified@@ -16,7 +16,7 @@ /** * Implementation of Signifyd Case interface. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseEntity extends AbstractModel implements CaseInterface
app/code/Magento/Signifyd/Model/CaseManagement.php+1 −1 modified@@ -18,7 +18,7 @@ * * Default case management implementation * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseManagement implements CaseManagementInterface
app/code/Magento/Signifyd/Model/CaseRepository.php+1 −1 modified@@ -20,7 +20,7 @@ * Repository for Case interface * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseRepository implements CaseRepositoryInterface
app/code/Magento/Signifyd/Model/CaseSearchResults.php+1 −1 modified@@ -13,7 +13,7 @@ /** * Service Data Object with Case entities search results. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseSearchResults extends SearchResults implements CaseSearchResultsInterface
app/code/Magento/Signifyd/Model/CaseServices/CreationService.php+1 −1 modified@@ -19,7 +19,7 @@ * * Creates new Case entity and register it at Signifyd * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CreationService implements CaseCreationServiceInterface
app/code/Magento/Signifyd/Model/CaseServices/StubUpdatingService.php+1 −1 modified@@ -11,7 +11,7 @@ * Stub implementation for case updating service interface and might be used * for test Signifyd webhooks * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class StubUpdatingService implements UpdatingServiceInterface
app/code/Magento/Signifyd/Model/CaseServices/UpdatingServiceFactory.php+1 −1 modified@@ -14,7 +14,7 @@ * The message generator initialization depends on specified type (like, case creation, re-scoring, review and * guarantee completion). * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class UpdatingServiceFactory
app/code/Magento/Signifyd/Model/CaseServices/UpdatingServiceInterface.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Common abstraction to perform updating operations with Signifyd case entity. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface UpdatingServiceInterface
app/code/Magento/Signifyd/Model/CaseServices/UpdatingService.php+1 −1 modified@@ -17,7 +17,7 @@ /** * Performs Signifyd case entity updating operations. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class UpdatingService implements UpdatingServiceInterface
app/code/Magento/Signifyd/Model/CommentsHistoryUpdater.php+1 −1 modified@@ -13,7 +13,7 @@ /** * Updates case order comments history. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CommentsHistoryUpdater
app/code/Magento/Signifyd/Model/Config.php+1 −1 modified@@ -13,7 +13,7 @@ * * Class is a proxy service for retrieving configuration settings. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Config
app/code/Magento/Signifyd/Model/CustomerOrders.php+1 −1 modified@@ -18,7 +18,7 @@ * Provides information about customer orders. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CustomerOrders
app/code/Magento/Signifyd/Model/Guarantee/CancelGuaranteeAbility.php+1 −1 modified@@ -14,7 +14,7 @@ /** * Checks if is possible to cancel Guarantee for order. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CancelGuaranteeAbility
app/code/Magento/Signifyd/Model/Guarantee/CancelingService.php+1 −1 modified@@ -15,7 +15,7 @@ /** * Sends request to Signifyd to cancel guarantee and updates case entity. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CancelingService implements GuaranteeCancelingServiceInterface
app/code/Magento/Signifyd/Model/Guarantee/CreateGuaranteeAbility.php+1 −1 modified@@ -16,7 +16,7 @@ /** * Checks if is possible to create Guarantee for order. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CreateGuaranteeAbility
app/code/Magento/Signifyd/Model/Guarantee/CreationService.php+1 −1 modified@@ -17,7 +17,7 @@ /** * Register guarantee at Signifyd and updates case entity * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CreationService implements GuaranteeCreationServiceInterface
app/code/Magento/Signifyd/Model/MessageGenerators/CaseRescore.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Generates message based on previous and current Case scores. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseRescore implements GeneratorInterface
app/code/Magento/Signifyd/Model/MessageGenerators/GeneratorException.php+1 −1 modified@@ -12,7 +12,7 @@ * * @api * @since 100.2.0 - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class GeneratorException extends LocalizedException
app/code/Magento/Signifyd/Model/MessageGenerators/GeneratorFactory.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Creates instance of message generator based on received type of message. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class GeneratorFactory
app/code/Magento/Signifyd/Model/MessageGenerators/GeneratorInterface.php+1 −1 modified@@ -9,7 +9,7 @@ * Represents common abstraction for Signifyd Case/Guarantee messages. * Each interface implementation might use Case/Guarantee data to generate specific message. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface GeneratorInterface
app/code/Magento/Signifyd/Model/MessageGenerators/PatternGenerator.php+1 −1 modified@@ -15,7 +15,7 @@ * Message is 'Case Update: New score for the order is %1. Previous score was %2.', then the required params order * should be ['new_score', 'prev_score']. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PatternGenerator implements GeneratorInterface
app/code/Magento/Signifyd/Model/OrderStateService.php+1 −1 modified@@ -13,7 +13,7 @@ /** * Updates order state. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class OrderStateService
app/code/Magento/Signifyd/Model/PaymentMethodMapper/PaymentMethodMapper.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Load and cache configuration data. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PaymentMethodMapper
app/code/Magento/Signifyd/Model/PaymentMethodMapper/XmlToArrayConfigConverter.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Converts XML config file to payment methods mapping. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class XmlToArrayConfigConverter implements \Magento\Framework\Config\ConverterInterface
app/code/Magento/Signifyd/Model/PaymentVerificationFactory.php+1 −1 modified@@ -14,7 +14,7 @@ * Creates verification service for provided payment method, or PaymentVerificationInterface::class * if payment method does not support AVS, CVV verifications. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PaymentVerificationFactory
app/code/Magento/Signifyd/Model/PredefinedVerificationCode.php+1 −1 modified@@ -12,7 +12,7 @@ * Default implementation of payment verification interface. * The default code value can be configured via DI. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PredefinedVerificationCode implements PaymentVerificationInterface
app/code/Magento/Signifyd/Model/QuoteSession/Adminhtml/BackendSession.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Implementation of QuoteSessionInterface for Magento backend checkout. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class BackendSession implements QuoteSessionInterface
app/code/Magento/Signifyd/Model/QuoteSession/FrontendSession.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Implementation of QuoteSessionInterface for Magento frontend checkout. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class FrontendSession implements QuoteSessionInterface
app/code/Magento/Signifyd/Model/QuoteSession/QuoteSessionInterface.php+1 −1 modified@@ -8,7 +8,7 @@ /** * Interface QuoteSessionInterface * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface QuoteSessionInterface
app/code/Magento/Signifyd/Model/ResourceModel/CaseEntity/Collection.php+1 −1 modified@@ -12,7 +12,7 @@ /** * Collection of case entities * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Collection extends AbstractCollection
app/code/Magento/Signifyd/Model/ResourceModel/CaseEntity.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Implementation of case resource model * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CaseEntity extends AbstractDb
app/code/Magento/Signifyd/Model/SalesOrderGrid/NotSyncedOrderIdListProvider.php+1 −1 modified@@ -12,7 +12,7 @@ /** * Provides order ids list which Signifyd Case guaranty status were changed * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class NotSyncedOrderIdListProvider implements NotSyncedDataProviderInterface
app/code/Magento/Signifyd/Model/SalesOrderGrid/OrderGridUpdater.php+1 −1 modified@@ -13,7 +13,7 @@ * * Serves order grid updates in both synchronous and asynchronous modes. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class OrderGridUpdater
app/code/Magento/Signifyd/Model/SignifydGateway/ApiCallException.php+1 −1 modified@@ -8,7 +8,7 @@ /** * Exception of interaction with Signifyd API * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class ApiCallException extends GatewayException
app/code/Magento/Signifyd/Model/SignifydGateway/ApiClient.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Encapsulates Signifyd API protocol. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class ApiClient
app/code/Magento/Signifyd/Model/SignifydGateway/Client/HttpClientFactory.php+1 −1 modified@@ -14,7 +14,7 @@ * Class HttpClientFactory * Creates and configures HTTP client for RequestBuilder * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class HttpClientFactory
app/code/Magento/Signifyd/Model/SignifydGateway/Client/RequestBuilder.php+1 −1 modified@@ -9,7 +9,7 @@ * Class RequestBuilder * Creates HTTP client, sends request to Signifyd and handles response * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class RequestBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Client/RequestSender.php+1 −1 modified@@ -13,7 +13,7 @@ * Class RequestSender * Gets HTTP client end sends request to Signifyd API * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class RequestSender
app/code/Magento/Signifyd/Model/SignifydGateway/Client/ResponseHandler.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Class ResponseHandler * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class ResponseHandler
app/code/Magento/Signifyd/Model/SignifydGateway/Debugger/BlackHole.php+1 −1 modified@@ -11,7 +11,7 @@ * This debugger ignores any information. * Optimal production environment. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class BlackHole implements DebuggerInterface
app/code/Magento/Signifyd/Model/SignifydGateway/Debugger/DebuggerFactory.php+1 −1 modified@@ -15,7 +15,7 @@ * - config.xml * - at Admin panel (Stores > Configuration > Sales > Fraud Detection > Signifyd > Debug) * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class DebuggerFactory
app/code/Magento/Signifyd/Model/SignifydGateway/Debugger/DebuggerInterface.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Interface for debugging interaction with Signifyd API * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface DebuggerInterface
app/code/Magento/Signifyd/Model/SignifydGateway/Debugger/Log.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Debugger writes information about request, response and possible exception to standard system log. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Log implements DebuggerInterface
app/code/Magento/Signifyd/Model/SignifydGateway/GatewayException.php+1 −1 modified@@ -8,7 +8,7 @@ /** * Exception of interaction with Signifyd API * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class GatewayException extends \Exception
app/code/Magento/Signifyd/Model/SignifydGateway/Gateway.php+1 −1 modified@@ -14,7 +14,7 @@ * * Encapsulates interaction with Signifyd API. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Gateway
app/code/Magento/Signifyd/Model/SignifydGateway/Request/AddressBuilder.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Prepare address data * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class AddressBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Request/CardBuilder.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Prepare data related to the card that was used for the purchase and its cardholder. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CardBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Request/ClientVersionBuilder.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Provides platform name, edition and version info * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class ClientVersionBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Request/CreateCaseBuilderInterface.php+1 −1 modified@@ -10,7 +10,7 @@ * * @see https://www.signifyd.com/docs/api/#/reference/cases/create-a-case * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ interface CreateCaseBuilderInterface
app/code/Magento/Signifyd/Model/SignifydGateway/Request/CreateCaseBuilder.php+1 −1 modified@@ -12,7 +12,7 @@ * * Handles the conversion from Magento Order to Signifyd Case. * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class CreateCaseBuilder implements CreateCaseBuilderInterface
app/code/Magento/Signifyd/Model/SignifydGateway/Request/PurchaseBuilder.php+1 −1 modified@@ -18,7 +18,7 @@ /** * Prepare data related to purchase event represented in case creation request. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PurchaseBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Request/RecipientBuilder.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Prepare data related to person or organization receiving the items purchased * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class RecipientBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Request/SellerBuilder.php+1 −1 modified@@ -19,7 +19,7 @@ * This information is optional unless you are operating a marketplace, * listing goods on behalf of multiple sellers who each hold a seller account registered with your site. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class SellerBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Request/UserAccountBuilder.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Prepares details based on registered user account info * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class UserAccountBuilder
app/code/Magento/Signifyd/Model/SignifydGateway/Response/WebhookMessage.php+1 −1 modified@@ -14,7 +14,7 @@ * * @see https://www.signifyd.com/docs/api/#/reference/webhooks * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class WebhookMessage
app/code/Magento/Signifyd/Model/SignifydGateway/Response/WebhookMessageReader.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Reads request and produces webhook message data object based on request params. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class WebhookMessageReader
app/code/Magento/Signifyd/Model/SignifydGateway/Response/WebhookRequest.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Reads Signifyd webhook request data. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class WebhookRequest
app/code/Magento/Signifyd/Model/SignifydGateway/Response/WebhookRequestValidator.php+1 −1 modified@@ -11,7 +11,7 @@ /** * Validates webhook request. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class WebhookRequestValidator
app/code/Magento/Signifyd/Model/SignifydOrderSessionId.php+1 −1 modified@@ -10,7 +10,7 @@ /** * Encapsulates generation of uuid by quote id. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class SignifydOrderSessionId
app/code/Magento/Signifyd/Observer/PlaceOrder.php+1 −1 modified@@ -19,7 +19,7 @@ * Observer should be triggered when new order is created and placed. * If Signifyd integration enabled in configuration then new case will be created. * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PlaceOrder implements ObserverInterface
app/code/Magento/Signifyd/Plugin/OrderPlugin.php+1 −1 modified@@ -13,7 +13,7 @@ * Plugin for Magento\Sales\Model\Order. * * @see Order - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class OrderPlugin
app/code/Magento/Signifyd/Plugin/PaymentPlugin.php+1 −1 modified@@ -13,7 +13,7 @@ * Plugin for Magento\Payment\Model\MethodInterface. * * @see MethodInterface - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class PaymentPlugin
app/code/Magento/Signifyd/Ui/Component/Listing/Column/Guarantee/Options.php+1 −1 modified@@ -12,7 +12,7 @@ /** * Class Options * - * @deprecated Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of + * @deprecated 100.3.5 Starting from Magento 2.3.5 Signifyd core integration is deprecated in favor of * official Signifyd integration available on the marketplace */ class Options implements OptionSourceInterface
app/code/Magento/Sitemap/composer.json+13 −12 modified@@ -6,19 +6,19 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-robots": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-robots": "101.0.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -32,5 +32,6 @@ "psr-4": { "Magento\\Sitemap\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/Store/composer.json+12 −11 modified@@ -6,18 +6,18 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-media-storage": "*", - "magento/module-ui": "*", - "magento/module-customer": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*" + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*" }, "suggest": { - "magento/module-deploy": "*" + "magento/module-deploy": "100.3.*" }, "type": "magento2-module", "license": [ @@ -31,5 +31,6 @@ "psr-4": { "Magento\\Store\\": "" } - } + }, + "version": "101.0.5" }
app/code/Magento/StoreGraphQl/composer.json+5 −4 modified@@ -4,9 +4,9 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-graph-ql": "*" + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -19,5 +19,6 @@ "psr-4": { "Magento\\StoreGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Store/Model/Store.php+1 −1 modified@@ -278,7 +278,7 @@ class Store extends AbstractExtensibleModel implements /** * @var \Magento\Framework\Session\SidResolverInterface - * @deprecated Not used anymore. + * @deprecated 101.0.5 Not used anymore. */ protected $_sidResolver;
app/code/Magento/Swagger/composer.json+3 −2 modified@@ -6,7 +6,7 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*" + "magento/framework": "102.0.*" }, "type": "magento2-module", "license": [ @@ -20,5 +20,6 @@ "psr-4": { "Magento\\Swagger\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/SwaggerWebapiAsync/composer.json+5 −4 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-swagger": "*" + "magento/framework": "102.0.*", + "magento/module-swagger": "100.3.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.1.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\SwaggerWebapiAsync\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/SwaggerWebapi/composer.json+4 −3 modified@@ -6,8 +6,8 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-swagger": "*" + "magento/framework": "102.0.*", + "magento/module-swagger": "100.3.*" }, "type": "magento2-module", "license": [ @@ -21,5 +21,6 @@ "psr-4": { "Magento\\SwaggerWebapi\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Swatches/composer.json+15 −14 modified@@ -6,21 +6,21 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-configurable-product": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-page-cache": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-theme": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*" }, "suggest": { - "magento/module-layered-navigation": "*", - "magento/module-swatches-sample-data": "*" + "magento/module-layered-navigation": "100.3.*", + "magento/module-swatches-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -34,5 +34,6 @@ "psr-4": { "Magento\\Swatches\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/SwatchesGraphQl/composer.json+6 −5 modified@@ -4,12 +4,12 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-swatches": "*", - "magento/module-catalog": "*" + "magento/framework": "102.0.*", + "magento/module-swatches": "100.3.*", + "magento/module-catalog": "103.0.*" }, "suggest": { - "magento/module-catalog-graph-ql": "*" + "magento/module-catalog-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -22,5 +22,6 @@ "psr-4": { "Magento\\SwatchesGraphQl\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/SwatchesLayeredNavigation/composer.json+3 −2 modified@@ -6,7 +6,7 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", + "magento/framework": "102.0.*", "magento/magento-composer-installer": "*" }, "type": "magento2-module", @@ -21,5 +21,6 @@ "psr-4": { "Magento\\SwatchesLayeredNavigation\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/Tax/composer.json+17 −16 modified@@ -6,23 +6,23 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*" }, "suggest": { - "magento/module-tax-sample-data": "*" + "magento/module-tax-sample-data": "Sample Data version: 100.3.*" }, "type": "magento2-module", "license": [ @@ -36,5 +36,6 @@ "psr-4": { "Magento\\Tax\\": "" } - } + }, + "version": "100.3.5" }
app/code/Magento/TaxGraphQl/composer.json+5 −4 modified@@ -4,11 +4,11 @@ "type": "magento2-module", "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*" + "magento/framework": "102.0.*" }, "suggest": { - "magento/module-tax": "*", - "magento/module-catalog-graph-ql": "*" + "magento/module-tax": "100.3.*", + "magento/module-catalog-graph-ql": "100.3.*" }, "license": [ "OSL-3.0", @@ -21,5 +21,6 @@ "psr-4": { "Magento\\TaxGraphQl\\": "" } - } + }, + "version": "100.3.4" }
app/code/Magento/TaxImportExport/composer.json+7 −6 modified@@ -6,11 +6,11 @@ }, "require": { "php": "~7.1.3||~7.2.0||~7.3.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-directory": "*", - "magento/module-store": "*", - "magento/module-tax": "*" + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-directory": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*" }, "type": "magento2-module", "license": [ @@ -24,5 +24,6 @@ "psr-4": { "Magento\\TaxImportExport\\": "" } - } + }, + "version": "100.3.4" }
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
4- github.com/advisories/GHSA-xgp9-j48h-jjf9ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2020-9690ghsaADVISORY
- github.com/magento/magento2/commit/9436781734e47c83e96977fa770d255217680d5eghsaWEB
- helpx.adobe.com/security/products/magento/apsb20-47.htmlghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.