From dd0f4bb3b55ebe1e8833dc1e2c0e3ef21fc5d350 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Fri, 2 Mar 2018 20:45:13 +0200 Subject: [PATCH 01/71] MAGETWO-84849: Update Changelog based on delivered scope --- CHANGELOG.md | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44844f62b6449..bc8186b776232 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,81 @@ +2.1.13 +============= +* GitHub issues: + * [#9869](https://github.com/magento/magento2/issues/9869) -- datetime type product attribute showing current date (fixed in [magento/magento2#12033](https://github.com/magento/magento2/pull/12033)) + * [#10765](https://github.com/magento/magento2/issues/10765) -- Export data from grid not adding custom rendered data magento2 (fixed in [magento/magento2#12373](https://github.com/magento/magento2/pull/12373)) + * [#9410](https://github.com/magento/magento2/issues/9410) -- Impossible to add swatch options via Service Contracts if there is no existing swatch option for attribute (fixed in [magento/magento2#12043](https://github.com/magento/magento2/pull/12043)) + * [#10707](https://github.com/magento/magento2/issues/10707) -- Create attribute option via API for swatch attribute fails (fixed in [magento/magento2#12043](https://github.com/magento/magento2/pull/12043)) + * [#10737](https://github.com/magento/magento2/issues/10737) -- Can't import attribute option over API if option is 'visual swatch' (fixed in [magento/magento2#12043](https://github.com/magento/magento2/pull/12043)) + * [#11032](https://github.com/magento/magento2/issues/11032) -- Unable to add new options to swatch attribute (fixed in [magento/magento2#12043](https://github.com/magento/magento2/pull/12043)) + * [#10210](https://github.com/magento/magento2/issues/10210) -- Transport variable can not be altered in email_invoice_set_template_vars_before Event (fixed in [magento/magento2#12135](https://github.com/magento/magento2/pull/12135)) + * [#11341](https://github.com/magento/magento2/issues/11341) -- Attribute category_ids issue (fixed in [magento/magento2#11807](https://github.com/magento/magento2/pull/11807)) + * [#11825](https://github.com/magento/magento2/issues/11825) -- 2.1.9 Item not added to the Wishlist if the user is not logged at the moment he click on the button to add it. (fixed in [magento/magento2#12041](https://github.com/magento/magento2/pull/12041)) + * [#11908](https://github.com/magento/magento2/issues/11908) -- Adding to wishlist doesn't work when not logged in (fixed in [magento/magento2#12041](https://github.com/magento/magento2/pull/12041)) + * [#9768](https://github.com/magento/magento2/issues/9768) -- Admin dashboard Most Viewed Products Tab only gives default attribute set's products (fixed in [magento/magento2#12137](https://github.com/magento/magento2/pull/12137)) + * [#11409](https://github.com/magento/magento2/issues/11409) -- Too many password reset requests even when disabled in settings (fixed in [magento/magento2#11436](https://github.com/magento/magento2/pull/11436)) + * [#8009](https://github.com/magento/magento2/issues/8009) -- Magento 2.1.3 out of stock associated products to configurable are not full page cache cleaned (fixed in [magento/magento2#12548](https://github.com/magento/magento2/pull/12548)) + * [#12268](https://github.com/magento/magento2/issues/12268) -- Gallery issues on configurable product page (fixed in [magento/magento2#12558](https://github.com/magento/magento2/pull/12558)) + * [#8069](https://github.com/magento/magento2/issues/8069) -- Saving Category with existing image causes an exception (fixed in [magento/magento2#12368](https://github.com/magento/magento2/pull/12368)) + * [#6770](https://github.com/magento/magento2/issues/6770) -- M2.1.1 : Re-saving a product attribute with a different name than it's code results in an error (fixed in [magento/magento2#11618](https://github.com/magento/magento2/pull/11618)) + * [#12627](https://github.com/magento/magento2/issues/12627) -- Referer is not added to login url in checkout config (fixed in [magento/magento2#12629](https://github.com/magento/magento2/pull/12629)) + * [#8415](https://github.com/magento/magento2/issues/8415) -- Content Block Administration fails when I delete more than one record (fixed in [magento/magento2#12840](https://github.com/magento/magento2/pull/12840)) + * [#9243](https://github.com/magento/magento2/issues/9243) -- Upgrade ZF components. Zend_Service (fixed in [magento/magento2#12958](https://github.com/magento/magento2/pull/12958)) + * [#10812](https://github.com/magento/magento2/issues/10812) -- htaccess Options override (fixed in [magento/magento2#12959](https://github.com/magento/magento2/pull/12959)) + * [#7441](https://github.com/magento/magento2/issues/7441) -- Configurable attribute options are not sorted (fixed in [magento/magento2#12962](https://github.com/magento/magento2/pull/12962)) + * [#10682](https://github.com/magento/magento2/issues/10682) -- Meta description and keywords transform to html entities for non latin/cyrilic characters in category and product pages (fixed in [magento/magento2#12956](https://github.com/magento/magento2/pull/12956)) + * [#9969](https://github.com/magento/magento2/issues/9969) -- Cancel order and restore quote methods increase stocks twice (fixed in [magento/magento2#12952](https://github.com/magento/magento2/pull/12952)) + * [#2156](https://github.com/magento/magento2/issues/2156) -- Why does \Magento\Translation\Model\Js\DataProvider use \Magento\Framework\Phrase\Renderer\Translate, not \Magento\Framework\Phrase\Renderer\Composite? (fixed in [magento/magento2#12954](https://github.com/magento/magento2/pull/12954)) + * [#12967](https://github.com/magento/magento2/issues/12967) -- Undeclared dependency magento/zendframework1 by magento/framework (fixed in [magento/magento2#12991](https://github.com/magento/magento2/pull/12991)) + * [#12393](https://github.com/magento/magento2/issues/12393) -- Attribute with "Catalog Input Type for Store Owner" equal "Fixed Product Tax" for Multi-store (fixed in [magento/magento2#13020](https://github.com/magento/magento2/pull/13020)) + * [#10168](https://github.com/magento/magento2/issues/10168) -- Coupon codes not showing in invoice (fixed in [magento/magento2#13261](https://github.com/magento/magento2/pull/13261)) + * [#8621](https://github.com/magento/magento2/issues/8621) -- M2.1 Multishipping Checkout step New Address - Old State is saved when country is changed (fixed in [magento/magento2#13367](https://github.com/magento/magento2/pull/13367)) + * [#10738](https://github.com/magento/magento2/issues/10738) -- Empty attribute label is displayed on product page when other language used. (fixed in [magento/magento2#13532](https://github.com/magento/magento2/pull/13532)) + * [#6207](https://github.com/magento/magento2/issues/6207) -- Checkbox IDs for Terms and Conditions should be unique in Checkout (fixed in [magento/magento2#13543](https://github.com/magento/magento2/pull/13543)) + * [#10565](https://github.com/magento/magento2/issues/10565) -- Magento ver. 2.1.8 New Product with Custom attribute set not working (fixed in [magento/magento2#13549](https://github.com/magento/magento2/pull/13549)) + * [#6457](https://github.com/magento/magento2/issues/6457) -- Expired special_price is still shown for configurable products when no variant is selected (fixed in [magento/magento2#13490](https://github.com/magento/magento2/pull/13490)) + * [#6729](https://github.com/magento/magento2/issues/6729) -- Configurable product old price with taxes displayed wrong (fixed in [magento/magento2#13490](https://github.com/magento/magento2/pull/13490)) + * [#7362](https://github.com/magento/magento2/issues/7362) -- Special price vigency for configurable childs (simple products associated) doesn´t work (fixed in [magento/magento2#13490](https://github.com/magento/magento2/pull/13490)) +* GitHub pull requests: + * [magento/magento2#12033](https://github.com/magento/magento2/pull/12033) -- Backport 2.1-develop] Fix datetime type product that show current date when is empty in grids (by @enriquei4) + * [magento/magento2#12373](https://github.com/magento/magento2/pull/12373) -- #10765 Export data from grid not adding custom rendered data magento2 (by @Zefiryn) + * [magento/magento2#12043](https://github.com/magento/magento2/pull/12043) -- [Backport 2.1] Add swatch option: Prevent loosing data and default value if data is not populated via adminhtml (by @gomencal) + * [magento/magento2#12135](https://github.com/magento/magento2/pull/12135) -- 10210: Transport variable can not be altered in email_invoice_set_template_vars_before Event (backport MAGETWO-69482 to 2.1). (by @RomaKis) + * [magento/magento2#11807](https://github.com/magento/magento2/pull/11807) -- [backport 2.1] Attribute category_ids issue #11389 (by @manuelson) + * [magento/magento2#12246](https://github.com/magento/magento2/pull/12246) -- Clear `mage-cache-sessid` cookie on Ajax Login (by @pmclain) + * [magento/magento2#12041](https://github.com/magento/magento2/pull/12041) -- [Backport 2.1] #11825: Generate new FormKey and replace for oldRequestParams Wishlist (by @osrecio) + * [magento/magento2#12137](https://github.com/magento/magento2/pull/12137) -- 9768: Admin dashboard Most Viewed Products Tab only gives default attribute set's products (backport for 2.1) (by @RomaKis) + * [magento/magento2#12519](https://github.com/magento/magento2/pull/12519) -- Duplicate array key (by @lfluvisotto) + * [magento/magento2#11860](https://github.com/magento/magento2/pull/11860) -- [Backport 2.1-develop] CMS Page - Force validate layout update xml in production mode when saving CMS Page - Handle layout update xml validation exceptions (by @adrian-martinez-interactiv4) + * [magento/magento2#12522](https://github.com/magento/magento2/pull/12522) -- PR#12466 [BACKPORT 2.1] (by @atishgoswami) + * [magento/magento2#12321](https://github.com/magento/magento2/pull/12321) -- Trying to get data from non existent products (by @angelo983) + * [magento/magento2#11436](https://github.com/magento/magento2/pull/11436) -- [Backport 2.1-develop] #11409: Too many password reset requests even when disabled in settings (by @adrian-martinez-interactiv4) + * [magento/magento2#12548](https://github.com/magento/magento2/pull/12548) -- Fixes #8009 (by @ajpevers) + * [magento/magento2#12050](https://github.com/magento/magento2/pull/12050) -- [2.1] - Add command to view mview state and queue (by @convenient) + * [magento/magento2#12558](https://github.com/magento/magento2/pull/12558) -- [Backport-2.1] Added namespace to product videos fotorama events (by @roma84) + * [magento/magento2#12579](https://github.com/magento/magento2/pull/12579) -- [Backport 2.1-develop] Fix swagger-ui on instances of Magento running on a non-standard port (by @JeroenVanLeusden) + * [magento/magento2#12368](https://github.com/magento/magento2/pull/12368) -- [Backport for 2.1 of #9904] #8069: Saving Category with existing imag… (by @nemesis-back) + * [magento/magento2#11618](https://github.com/magento/magento2/pull/11618) -- Re saving product attribute [backport 2.1] (by @raumatbel) + * [magento/magento2#12611](https://github.com/magento/magento2/pull/12611) -- Backport #4958 to 2.1 (by @slackerzz) + * [magento/magento2#12629](https://github.com/magento/magento2/pull/12629) -- [2.1-develop] Add customer login url from Customer Url model to checkout config so … (by @quisse) + * [magento/magento2#12840](https://github.com/magento/magento2/pull/12840) -- Backport PR8418 - Fatal error on cms block grid delete (by @duckchip) + * [magento/magento2#12930](https://github.com/magento/magento2/pull/12930) -- Fix wishlist item getBuyRequest with no options (by @jameshalsall) + * [magento/magento2#12959](https://github.com/magento/magento2/pull/12959) -- [Backport to 2.1-develop] Fix #10812: htaccess Options override (by @dverkade) + * [magento/magento2#12958](https://github.com/magento/magento2/pull/12958) -- [Backport to 2.1-develop] Fix #9243 - Upgrade ZF components. Zend_Service (by @dverkade) + * [magento/magento2#12956](https://github.com/magento/magento2/pull/12956) -- [Backport to 2.1-develop] Fix #10682: Meta description and keywords transform to html entities (by @dverkade) + * [magento/magento2#12962](https://github.com/magento/magento2/pull/12962) -- [Backport to 2.1-develop] Fix configurable attribute options not being sorted (by @wardcapp) + * [magento/magento2#12952](https://github.com/magento/magento2/pull/12952) -- [Backport #12668 into 2.1-develop] Fix for reverting stock twice for cancelled orders (by @dverkade) + * [magento/magento2#12954](https://github.com/magento/magento2/pull/12954) -- [Backport to 2.1-develop] Fix #2156 Js\Dataprovider uses the RendererInterface. (by @dverkade) + * [magento/magento2#12991](https://github.com/magento/magento2/pull/12991) -- [2.1.x] Fix undeclared dependency magento/zendframework1 by magento/framework (by @ihor-sviziev) + * [magento/magento2#13020](https://github.com/magento/magento2/pull/13020) -- [Backport to 2.1-develop] Attribute with "Catalog Input Type for Store Owner" equal "Fixed Product Tax" for Multi-store (by @dverkade) + * [magento/magento2#13261](https://github.com/magento/magento2/pull/13261) -- Backport 2.1 for MAGETWO-80428 (by @PieterCappelle) + * [magento/magento2#13367](https://github.com/magento/magento2/pull/13367) -- [Backport 2.1] In checkout->multishipping-> new addres clean region when select country without dropdown for states (by @enriquei4) + * [magento/magento2#13489](https://github.com/magento/magento2/pull/13489) -- [Backport 2.1] #9247 fixed layout handle for cms page (by @simpleadm) + * [magento/magento2#13532](https://github.com/magento/magento2/pull/13532) -- Backport of PR-11169 for Magento 2.1: Fixed issue #10738: Empty attribute label is displayed on product pag… (by @hostep) + * [magento/magento2#13543](https://github.com/magento/magento2/pull/13543) -- Backport of MAGETWO-69379 for Magento 2.1: use payment method name to… (by @hostep) + * [magento/magento2#13549](https://github.com/magento/magento2/pull/13549) -- Backport of MAGETWO-80198 for Magento 2.1: Fix issue #10565 #10575 (by @hostep) + * [magento/magento2#13490](https://github.com/magento/magento2/pull/13490) -- [Backport 2.1] #9796 configurable product price options provider (by @simpleadm) + * [magento/magento2#13916](https://github.com/magento/magento2/pull/13916) -- Pass Expected Data Type in backgroundColor Call (2.1) (by @northernco) + 2.1.11 ============= * GitHub issues: From 46ab4067dd3fabe631ec71a57435b2c8c168499e Mon Sep 17 00:00:00 2001 From: Yevhen Miroshnychenko Date: Mon, 5 Mar 2018 13:04:25 +0200 Subject: [PATCH 02/71] MAGETWO-88336: [Backport] JS merging fails when JS bundling is enabled and bundle folder contains any other files --- app/code/Magento/RequireJs/Model/FileManager.php | 3 +++ app/code/Magento/RequireJs/Test/Unit/Model/FileManagerTest.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/RequireJs/Model/FileManager.php b/app/code/Magento/RequireJs/Model/FileManager.php index f13e3e050999e..8037fe44ee056 100644 --- a/app/code/Magento/RequireJs/Model/FileManager.php +++ b/app/code/Magento/RequireJs/Model/FileManager.php @@ -164,6 +164,9 @@ public function createBundleJsPool() } foreach ($libDir->read($bundleDir) as $bundleFile) { + if (pathinfo($bundleFile, PATHINFO_EXTENSION) !== 'js') { + continue; + } $relPath = $libDir->getRelativePath($bundleFile); $bundles[] = $this->assetRepo->createArbitrary($relPath, ''); } diff --git a/app/code/Magento/RequireJs/Test/Unit/Model/FileManagerTest.php b/app/code/Magento/RequireJs/Test/Unit/Model/FileManagerTest.php index 057f03edb9ba2..1963c860a5935 100644 --- a/app/code/Magento/RequireJs/Test/Unit/Model/FileManagerTest.php +++ b/app/code/Magento/RequireJs/Test/Unit/Model/FileManagerTest.php @@ -150,7 +150,7 @@ public function testCreateBundleJsPool() ->expects($this->once()) ->method('read') ->with('path/to/bundle/dir/js/bundle') - ->willReturn(['bundle1.js', 'bundle2.js']); + ->willReturn(['bundle1.js', 'bundle2.js', 'some_file.not_js']); $dirRead ->expects($this->exactly(2)) ->method('getRelativePath') From ac5ef5e7002dc43332f72f696030554e502543e3 Mon Sep 17 00:00:00 2001 From: Viktor Sevch Date: Tue, 13 Mar 2018 14:25:47 +0200 Subject: [PATCH 03/71] MAGETWO-88992: Broken image in Schedule update. --- .../Category/Attribute/Backend/Image.php | 27 ++++--------------- .../Category/Attribute/Backend/ImageTest.php | 5 ++-- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php b/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php index 3950fd1eee719..818a761814548 100644 --- a/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php +++ b/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php @@ -52,11 +52,6 @@ class Image extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend */ private $imageUploader; - /** - * @var string - */ - private $additionalData = '_additional_data_'; - /** * Image constructor. * @@ -85,9 +80,9 @@ public function beforeSave($object) { $attributeName = $this->getAttribute()->getName(); $value = $object->getData($attributeName); + $imageName = $this->getUploadedImageName($value); - if ($imageName = $this->getUploadedImageName($value)) { - $object->setData($this->additionalData . $attributeName, $value); + if ($imageName) { $object->setData($attributeName, $imageName); } else if (!is_string($value)) { $object->setData($attributeName, ''); @@ -130,27 +125,15 @@ private function getImageUploader() } /** - * Check if temporary file is available for new image upload. - * - * @param array $value - * @return bool - */ - private function isTmpFileAvailable($value) - { - return is_array($value) && isset($value[0]['tmp_name']); - } - - /** - * Save uploaded file and set its name to category + * Save uploaded file and set its name to category. * * @param \Magento\Framework\DataObject $object * @return \Magento\Catalog\Model\Category\Attribute\Backend\Image */ public function afterSave($object) { - $value = $object->getData($this->additionalData . $this->getAttribute()->getName()); - - if ($this->isTmpFileAvailable($value) && $imageName = $this->getUploadedImageName($value)) { + $imageName = $object->getData($this->getAttribute()->getName(), null); + if ($imageName) { try { $this->getImageUploader()->moveFileFromTmp($imageName); } catch (\Exception $e) { diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Backend/ImageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Backend/ImageTest.php index 88ab0f5a1ce63..247a124a7af1d 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Backend/ImageTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Backend/ImageTest.php @@ -164,8 +164,7 @@ public function testAfterSave() $object = new \Magento\Framework\DataObject( [ - 'test_attribute' => 'test1234.jpg', - '_additional_data_test_attribute' => [['name' => 'test1234.jpg', 'tmp_name' => 'test-test-1234']] + 'test_attribute' => 'test1234.jpg' ] ); $model->afterSave($object); @@ -208,7 +207,7 @@ public function testAfterSaveWithExceptions() ->with($this->equalTo($exception)); $object = new \Magento\Framework\DataObject( [ - '_additional_data_test_attribute' => [['name' => 'test1234.jpg', 'tmp_name' => 'test-test-1234']] + 'test_attribute' => 'test1234.jpg' ] ); $model->afterSave($object); From 05f655ae79959f92d902ce47273297e38d699733 Mon Sep 17 00:00:00 2001 From: Andrii Meysar Date: Tue, 13 Mar 2018 19:04:01 +0200 Subject: [PATCH 04/71] MAGETWO-89066: Category chooser shows blank block --- app/code/Magento/Backend/Model/Url.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/code/Magento/Backend/Model/Url.php b/app/code/Magento/Backend/Model/Url.php index 764ab297605d5..b1f7e0a74d981 100644 --- a/app/code/Magento/Backend/Model/Url.php +++ b/app/code/Magento/Backend/Model/Url.php @@ -213,6 +213,10 @@ public function getUrl($routePath = null, $routeParams = null) $routeParams[self::SECRET_KEY_PARAM_NAME] = $secretKey; } + if (is_array($this->_getRouteParams())) { + $routeParams = array_merge($this->_getRouteParams(), $routeParams); + } + return parent::getUrl("{$routeName}/{$controllerName}/{$actionName}", $routeParams); } From 9202b40bcfb743bcd2b6da207c0c455090353c4a Mon Sep 17 00:00:00 2001 From: Andrii Meysar Date: Wed, 14 Mar 2018 10:45:47 +0200 Subject: [PATCH 05/71] MAGETWO-89066: Category chooser shows blank block --- app/code/Magento/Backend/Model/Url.php | 6 ++++-- .../integration/testsuite/Magento/Backend/Model/UrlTest.php | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Backend/Model/Url.php b/app/code/Magento/Backend/Model/Url.php index b1f7e0a74d981..e91344f341269 100644 --- a/app/code/Magento/Backend/Model/Url.php +++ b/app/code/Magento/Backend/Model/Url.php @@ -198,7 +198,9 @@ public function getUrl($routePath = null, $routeParams = null) return $result; } + $this->getRouteParamsResolver()->unsetData('route_params'); $this->_setRoutePath($routePath); + $extraParams = $this->getRouteParamsResolver()->getRouteParams(); $routeName = $this->_getRouteName('*'); $controllerName = $this->_getControllerName(self::DEFAULT_CONTROLLER_NAME); $actionName = $this->_getActionName(self::DEFAULT_ACTION_NAME); @@ -213,8 +215,8 @@ public function getUrl($routePath = null, $routeParams = null) $routeParams[self::SECRET_KEY_PARAM_NAME] = $secretKey; } - if (is_array($this->_getRouteParams())) { - $routeParams = array_merge($this->_getRouteParams(), $routeParams); + if (!empty($extraParams)) { + $routeParams = array_merge($extraParams, $routeParams); } return parent::getUrl("{$routeName}/{$controllerName}/{$actionName}", $routeParams); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php index 32cc75afa7acc..ae29a37679536 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php @@ -75,6 +75,9 @@ public function testGetUrl() ]; $url = $this->_model->getUrl('path', $routeParams); $this->assertContains('/param4/' . $paramEncoder->encode('a4==') . '/', $url); + + $url = $this->_model->getUrl('route/controller/action/id/100'); + $this->assertContains('id/100', $url); } /** From 9cdae251523389f844c689a99aecf4f2199284ed Mon Sep 17 00:00:00 2001 From: Viktor Sevch Date: Fri, 23 Mar 2018 15:48:15 +0200 Subject: [PATCH 06/71] MAGETWO-89535: Category navigation menu is not updated after moving sub category to the same level as parent --- app/code/Magento/Catalog/Model/Category.php | 28 ++++++++++--------- .../Catalog/Test/Unit/Model/CategoryTest.php | 18 ++++++++++++ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Category.php b/app/code/Magento/Catalog/Model/Category.php index 5b812052d730d..19e566195e45d 100644 --- a/app/code/Magento/Catalog/Model/Category.php +++ b/app/code/Magento/Catalog/Model/Category.php @@ -1132,19 +1132,21 @@ public function getIdentities() { $identities = []; if ($this->getId()) { - $identities[] = self::CACHE_TAG . '_' . $this->getId(); - } - if ($this->getId() - && ( - $this->hasDataChanges() - || $this->isDeleted() - || $this->dataHasChangedFor(self::KEY_INCLUDE_IN_MENU) - ) - ) { - $identities[] = Product::CACHE_PRODUCT_CATEGORY_TAG . '_' . $this->getId(); - } - if ($this->getId() && $this->isObjectNew()) { - $identities[] = self::CACHE_TAG; + if ($this->getAffectedCategoryIds()) { + foreach (array_unique($this->getAffectedCategoryIds()) as $affectedCategoryId) { + $identities[] = self::CACHE_TAG . '_' . $affectedCategoryId; + } + } else { + $identities[] = self::CACHE_TAG . '_' . $this->getId(); + } + + if ($this->hasDataChanges() || $this->isDeleted() || $this->dataHasChangedFor(self::KEY_INCLUDE_IN_MENU)) { + $identities[] = Product::CACHE_PRODUCT_CATEGORY_TAG . '_' . $this->getId(); + } + + if ($this->isObjectNew()) { + $identities[] = self::CACHE_TAG; + } } return $identities; diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php index 41dd17ac203b4..e79134af4787e 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php @@ -655,4 +655,22 @@ public function testGetIdentities() $category->setId(42); $this->assertNotEmpty($category->getIdentities()); } + + /** + * @return void + */ + public function testGetIdentitiesWithAffectedCategories() + { + $category = $this->getCategoryModel(); + $expectedIdentities = [ + 'catalog_category_1', + 'catalog_category_2', + 'catalog_category_3', + 'catalog_category_product_1' + ]; + $category->setId(1); + $category->setAffectedCategoryIds([1,2,3]); + + $this->assertEquals($expectedIdentities, $category->getIdentities()); + } } From 2641f3e8f0d0f6032db79006c7f4f5245d1f5955 Mon Sep 17 00:00:00 2001 From: Viktor Sevch Date: Fri, 23 Mar 2018 16:40:15 +0200 Subject: [PATCH 07/71] MAGETWO-89535: Category navigation menu is not updated after moving sub category to the same level as parent --- app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php index e79134af4787e..c8ee0fc13758d 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php @@ -666,7 +666,7 @@ public function testGetIdentitiesWithAffectedCategories() 'catalog_category_1', 'catalog_category_2', 'catalog_category_3', - 'catalog_category_product_1' + 'catalog_category_product_1', ]; $category->setId(1); $category->setAffectedCategoryIds([1,2,3]); From 6bfda98e9fc8a7d301e211f2eaeedb7774e1ec57 Mon Sep 17 00:00:00 2001 From: OlgaVasyltsun Date: Tue, 27 Mar 2018 16:02:54 +0300 Subject: [PATCH 08/71] MAGETWO-89646: Hidden value is presented in Download product page --- .../base/templates/product/price/amount/default.phtml | 10 +++------- .../luma/Magento_Catalog/web/css/source/_module.less | 4 ---- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml b/app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml index ef6b1cd15c7c9..be4d682e5a367 100644 --- a/app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml +++ b/app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml @@ -19,14 +19,10 @@ getPriceDisplayLabel()) ? 'data-label="' . $block->getPriceDisplayLabel() . $block->getPriceDisplayInclExclTaxes() . '"' : '' ?> data-price-amount="getDisplayValue(); ?>" data-price-type="getPriceType(); ?>" - class="price-wrapper getPriceWrapperCss(); ?>"> - formatCurrency($block->getDisplayValue(), (bool)$block->getIncludeContainer()) ?> + class="price-wrapper getPriceWrapperCss(); ?>" + getSchema() ? ' itemprop="price"' : '' ?>> + formatCurrency($block->getDisplayValue(), (bool)$block->getIncludeContainer()) ?> - getSchema()): ?> - - getDisplayValue() ?> - - hasAdjustmentsHtml()): ?> getAdjustmentsHtml() ?> diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less index e76aacf2b3293..c64efa65ae2f9 100644 --- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less +++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less @@ -189,10 +189,6 @@ &:last-child { margin-bottom: 0; } - - &._hidden { - display: none; - } } } } From 30c0d5155f97eb3d245479df80eb1332de8ee79a Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 12 Apr 2018 10:23:19 +0300 Subject: [PATCH 09/71] MAGETWO-88715: Update Changelog based on delivered scope --- CHANGELOG.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc8186b776232..e4b7a0c1ea743 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,60 @@ +2.1.14 +============= +* GitHub issues: + * [#7723](https://github.com/magento/magento2/issues/7723) -- Catalog rule contains-condition not saving multiple selection in 2.1.2 (fixed in [magento/magento2#13546](https://github.com/magento/magento2/pull/13546)) + * [#13214](https://github.com/magento/magento2/issues/13214) -- Not a correct displaying for Robots.txt (fixed in [magento/magento2#13550](https://github.com/magento/magento2/pull/13550)) + * [#13315](https://github.com/magento/magento2/issues/13315) -- Mobile "Payment Methods" step looks bad on mobile (fixed in [magento/magento2#13980](https://github.com/magento/magento2/pull/13980)) + * [#13474](https://github.com/magento/magento2/issues/13474) -- [2.1.10] Swagger not working for multistore installs? (fixed in [magento/magento2#13486](https://github.com/magento/magento2/pull/13486)) + * [#4173](https://github.com/magento/magento2/issues/4173) -- Cron schedule bug (fixed in [magento/magento2#14096](https://github.com/magento/magento2/pull/14096)) + * [#5808](https://github.com/magento/magento2/issues/5808) -- [2.1.0] Problem on mobile when catalog gallery allowfullscreen is false (fixed in [magento/magento2#14098](https://github.com/magento/magento2/pull/14098)) + * [#6694](https://github.com/magento/magento2/issues/6694) -- Override zip_codes.xml (fixed in [magento/magento2#14117](https://github.com/magento/magento2/pull/14117)) + * [#10559](https://github.com/magento/magento2/issues/10559) -- Extending swatch functionality using javascript mixins does not work in Safari and MS Edge (fixed in [magento/magento2#12928](https://github.com/magento/magento2/pull/12928)) + * [#3489](https://github.com/magento/magento2/issues/3489) -- CURL Json POST (fixed in [magento/magento2#14151](https://github.com/magento/magento2/pull/14151)) + * [#5463](https://github.com/magento/magento2/issues/5463) -- The ability to store passwords using different hashing algorithms is limited (fixed in [magento/magento2#13886](https://github.com/magento/magento2/pull/13886)) + * [#3882](https://github.com/magento/magento2/issues/3882) -- An XML comment node as parameter in widget.xml fails with fatal error (fixed in [magento/magento2#14219](https://github.com/magento/magento2/pull/14219)) + * [#1931](https://github.com/magento/magento2/issues/1931) -- Can't cancel removal of a block or container in layout by setting remove attribute value to false (fixed in [magento/magento2#14198](https://github.com/magento/magento2/pull/14198)) + * [#7403](https://github.com/magento/magento2/issues/7403) -- JS Translation Regex leads to unexpected results and untranslatable strings (fixed in [magento/magento2#14349](https://github.com/magento/magento2/pull/14349)) + * [#7816](https://github.com/magento/magento2/issues/7816) -- Customer_account.xml file abused (fixed in [magento/magento2#14323](https://github.com/magento/magento2/pull/14323)) + * [#10700](https://github.com/magento/magento2/issues/10700) -- Magento 2 Admin panel show loading on each page (fixed in [magento/magento2#14417](https://github.com/magento/magento2/pull/14417)) + * [#11930](https://github.com/magento/magento2/issues/11930) -- setup:di:compile's generated cache files inaccessible by the web-server user (fixed in [magento/magento2#14417](https://github.com/magento/magento2/pull/14417)) + * [#14572](https://github.com/magento/magento2/issues/14572) -- Specify the table when adding field to filter for the collection Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php (fixed in [magento/magento2#14596](https://github.com/magento/magento2/pull/14596)) +* GitHub pull requests: + * [magento/magento2#13949](https://github.com/magento/magento2/pull/13949) -- Fix misnamed namespace (by @Ethan3600) + * [magento/magento2#13545](https://github.com/magento/magento2/pull/13545) -- Backport of PR-5028 for Magento 2.1: Load jquery using requirejs to p… (by @hostep) + * [magento/magento2#13546](https://github.com/magento/magento2/pull/13546) -- Backport of PR-8246 for Magento 2.1: Fixes #7723 - saving multi selec… (by @hostep) + * [magento/magento2#13550](https://github.com/magento/magento2/pull/13550) -- Backport of MAGETWO-84006 for Magento 2.1: Fix robots.txt content typ… (by @hostep) + * [magento/magento2#13896](https://github.com/magento/magento2/pull/13896) -- MAGETWO-59112 Backport 2.1.x (by @Ctucker9233) + * [magento/magento2#13812](https://github.com/magento/magento2/pull/13812) -- [Backport 2.1] Add RewriteBase directive template in .htaccess file into pub/static folder (by @ccasciotti) + * [magento/magento2#13658](https://github.com/magento/magento2/pull/13658) -- [Backport 2.1-develop] Show redirect_to_base config in store scope (by @JeroenVanLeusden) + * [magento/magento2#13980](https://github.com/magento/magento2/pull/13980) -- Backport of PR-13777. Mobile 'Payments methods' step looks bad on mobile (by @Frodigo) + * [magento/magento2#13987](https://github.com/magento/magento2/pull/13987) -- Backport of PR-13750 for Magento 2.1: Less clean up (by @Karlasa) + * [magento/magento2#14022](https://github.com/magento/magento2/pull/14022) -- fix catalog_rule_promo_catalog_edit.xml layout (by @Karlasa) + * [magento/magento2#13806](https://github.com/magento/magento2/pull/13806) -- [Backport 2.1] Add quoting for base path in DI compile command (by @simpleadm) + * [magento/magento2#13486](https://github.com/magento/magento2/pull/13486) -- [Backport 2.1-develop] Change the store code in Swagger based on a param (by @JeroenVanLeusden) + * [magento/magento2#14096](https://github.com/magento/magento2/pull/14096) -- [Backport 2.1] Schedule generation was broken (by @simpleadm) + * [magento/magento2#14098](https://github.com/magento/magento2/pull/14098) -- [Backport 2.1] MAGETWO-64250 Problem on mobile when catalog gallery allowfullscreen is false (by @simpleadm) + * [magento/magento2#14115](https://github.com/magento/magento2/pull/14115) -- [Backport 2.1] MAGETWO-71697: Fix possible bug when saving address with empty street line (by @simpleadm) + * [magento/magento2#14117](https://github.com/magento/magento2/pull/14117) -- [Backport 2.1] MAGETWO-59258: Override module-directory/etc/zip_codes.xml only the last code of a country gets include (by @simpleadm) + * [magento/magento2#12928](https://github.com/magento/magento2/pull/12928) -- Issues #10559 - Extend swatch using mixins (M2.1) (by @srenon) + * [magento/magento2#14151](https://github.com/magento/magento2/pull/14151) -- [Backport 2.1] 8373: Fix CURL Json POST (by @simpleadm) + * [magento/magento2#13886](https://github.com/magento/magento2/pull/13886) -- #5463 - Use specified hashing algo in \Magento\Framework\Encryption\Encryptor::getHash (by @k4emic) + * [magento/magento2#14168](https://github.com/magento/magento2/pull/14168) -- [Backport 2.1] Added mage/translate component to customers's ajax login (by @ccasciotti) + * [magento/magento2#13654](https://github.com/magento/magento2/pull/13654) -- [Backport 2.1-develop] Update Store getConfig() to respect valid false return value (by @JeroenVanLeusden) + * [magento/magento2#14219](https://github.com/magento/magento2/pull/14219) -- Backport of PR-8772 for Magento 2.1: magento/magento2#3882 (by @hostep) + * [magento/magento2#14198](https://github.com/magento/magento2/pull/14198) -- [Backport] Can't cancel removal of a block or container in layout by setting remove attribute value to false (by @quisse) + * [magento/magento2#14349](https://github.com/magento/magento2/pull/14349) -- Backport of PR-10445 for Magento 2.1: Fix JS translation search (by @hostep) + * [magento/magento2#14332](https://github.com/magento/magento2/pull/14332) -- Backport: Fix for broken navigation menu on IE11 #14230 (by @sergiy-v) + * [magento/magento2#14323](https://github.com/magento/magento2/pull/14323) -- #7816: Customer_account.xml file abused (2.1) (by @mikewhitby) + * [magento/magento2#14417](https://github.com/magento/magento2/pull/14417) -- [BACKPORT 2.1] Removed cache backend option which explicitly set file permissions (by @xtremeperf) + * [magento/magento2#14436](https://github.com/magento/magento2/pull/14436) -- Fix HTML tags in meta description (by @vseager) + * [magento/magento2#14480](https://github.com/magento/magento2/pull/14480) -- [Backport 2.1] Return status in console commands (by @simpleadm) + * [magento/magento2#14497](https://github.com/magento/magento2/pull/14497) -- [backport] fix for button color in email template (by @Karlasa) + * [magento/magento2#14348](https://github.com/magento/magento2/pull/14348) -- [Backport 2.1] Add json and xml support to the post method in socket client (by @simpleadm) + * [magento/magento2#14479](https://github.com/magento/magento2/pull/14479) -- [Backport 2.1] Configurable product price options by store (by @simpleadm) + * [magento/magento2#14505](https://github.com/magento/magento2/pull/14505) -- [Backport] Check if store id is not null instead of empty (by @quisse) + * [magento/magento2#14524](https://github.com/magento/magento2/pull/14524) -- [backport] fix translation issue with rating stars (by @Karlasa) + * [magento/magento2#14596](https://github.com/magento/magento2/pull/14596) -- Specify the table when adding field to filter (by @PierreLeMaguer) + 2.1.13 ============= * GitHub issues: From 508def85b77aa54c9ff06f79857114a9db2e5d41 Mon Sep 17 00:00:00 2001 From: mage2-team Date: Mon, 2 Apr 2018 08:36:39 -0700 Subject: [PATCH 10/71] MAGETWO-88697: Magento 2.1.13 Publication - (build 2.1.13.011) --- .../Magento/AdminNotification/composer.json | 2 +- .../AdvancedPricingImportExport/composer.json | 2 +- app/code/Magento/Authorization/composer.json | 2 +- app/code/Magento/Authorizenet/composer.json | 2 +- app/code/Magento/Backend/composer.json | 2 +- app/code/Magento/Backup/composer.json | 2 +- app/code/Magento/Braintree/composer.json | 2 +- app/code/Magento/Bundle/composer.json | 2 +- .../Magento/BundleImportExport/composer.json | 2 +- .../Magento/CacheInvalidate/composer.json | 2 +- app/code/Magento/Captcha/composer.json | 2 +- app/code/Magento/Catalog/composer.json | 2 +- .../Magento/CatalogImportExport/composer.json | 2 +- .../Magento/CatalogInventory/composer.json | 2 +- app/code/Magento/CatalogRule/composer.json | 2 +- .../CatalogRuleConfigurable/composer.json | 2 +- app/code/Magento/CatalogSearch/composer.json | 2 +- .../Magento/CatalogUrlRewrite/composer.json | 2 +- app/code/Magento/CatalogWidget/composer.json | 2 +- app/code/Magento/Checkout/composer.json | 2 +- .../Magento/CheckoutAgreements/composer.json | 2 +- app/code/Magento/Cms/composer.json | 2 +- app/code/Magento/CmsUrlRewrite/composer.json | 2 +- app/code/Magento/Config/composer.json | 2 +- .../ConfigurableImportExport/composer.json | 2 +- .../Magento/ConfigurableProduct/composer.json | 2 +- app/code/Magento/Contact/composer.json | 2 +- app/code/Magento/Cookie/composer.json | 2 +- app/code/Magento/Cron/composer.json | 2 +- app/code/Magento/CurrencySymbol/composer.json | 2 +- app/code/Magento/Customer/composer.json | 2 +- .../CustomerImportExport/composer.json | 2 +- app/code/Magento/Deploy/composer.json | 2 +- app/code/Magento/Developer/composer.json | 2 +- app/code/Magento/Dhl/composer.json | 2 +- app/code/Magento/Directory/composer.json | 2 +- app/code/Magento/Downloadable/composer.json | 2 +- .../DownloadableImportExport/composer.json | 2 +- app/code/Magento/Eav/composer.json | 2 +- app/code/Magento/Email/composer.json | 2 +- app/code/Magento/EncryptionKey/composer.json | 2 +- app/code/Magento/Fedex/composer.json | 2 +- app/code/Magento/GiftMessage/composer.json | 2 +- app/code/Magento/GoogleAdwords/composer.json | 2 +- .../Magento/GoogleAnalytics/composer.json | 2 +- .../Magento/GoogleOptimizer/composer.json | 2 +- .../Magento/GroupedImportExport/composer.json | 2 +- app/code/Magento/GroupedProduct/composer.json | 2 +- app/code/Magento/ImportExport/composer.json | 2 +- app/code/Magento/Indexer/composer.json | 2 +- app/code/Magento/Integration/composer.json | 2 +- .../Magento/LayeredNavigation/composer.json | 2 +- app/code/Magento/Marketplace/composer.json | 2 +- app/code/Magento/MediaStorage/composer.json | 2 +- app/code/Magento/Msrp/composer.json | 2 +- app/code/Magento/Multishipping/composer.json | 2 +- .../Magento/NewRelicReporting/composer.json | 2 +- app/code/Magento/Newsletter/composer.json | 2 +- .../Magento/OfflinePayments/composer.json | 2 +- .../Magento/OfflineShipping/composer.json | 2 +- app/code/Magento/PageCache/composer.json | 2 +- app/code/Magento/Payment/composer.json | 2 +- app/code/Magento/Paypal/composer.json | 2 +- app/code/Magento/Persistent/composer.json | 2 +- app/code/Magento/ProductAlert/composer.json | 2 +- app/code/Magento/ProductVideo/composer.json | 2 +- app/code/Magento/Quote/composer.json | 2 +- app/code/Magento/Reports/composer.json | 2 +- app/code/Magento/RequireJs/composer.json | 2 +- app/code/Magento/Review/composer.json | 2 +- app/code/Magento/Robots/composer.json | 2 +- app/code/Magento/Rss/composer.json | 2 +- app/code/Magento/Rule/composer.json | 2 +- app/code/Magento/Sales/composer.json | 2 +- app/code/Magento/SalesInventory/composer.json | 2 +- app/code/Magento/SalesRule/composer.json | 2 +- app/code/Magento/SalesSequence/composer.json | 2 +- app/code/Magento/SampleData/composer.json | 2 +- app/code/Magento/Search/composer.json | 2 +- app/code/Magento/Security/composer.json | 2 +- app/code/Magento/SendFriend/composer.json | 2 +- app/code/Magento/Shipping/composer.json | 2 +- app/code/Magento/Sitemap/composer.json | 2 +- app/code/Magento/Store/composer.json | 2 +- app/code/Magento/Swagger/composer.json | 2 +- app/code/Magento/Swatches/composer.json | 2 +- .../SwatchesLayeredNavigation/composer.json | 2 +- app/code/Magento/Tax/composer.json | 2 +- .../Magento/TaxImportExport/composer.json | 2 +- app/code/Magento/Theme/composer.json | 2 +- app/code/Magento/Translation/composer.json | 2 +- app/code/Magento/Ui/composer.json | 2 +- app/code/Magento/Ups/composer.json | 2 +- app/code/Magento/UrlRewrite/composer.json | 2 +- app/code/Magento/User/composer.json | 2 +- app/code/Magento/Usps/composer.json | 2 +- app/code/Magento/Variable/composer.json | 2 +- app/code/Magento/Vault/composer.json | 2 +- app/code/Magento/Version/composer.json | 2 +- app/code/Magento/Webapi/composer.json | 2 +- app/code/Magento/WebapiSecurity/composer.json | 2 +- app/code/Magento/Weee/composer.json | 2 +- app/code/Magento/Widget/composer.json | 2 +- app/code/Magento/Wishlist/composer.json | 2 +- .../adminhtml/Magento/backend/composer.json | 2 +- .../frontend/Magento/blank/composer.json | 2 +- .../frontend/Magento/luma/composer.json | 2 +- app/i18n/Magento/de_DE/composer.json | 2 +- app/i18n/Magento/en_US/composer.json | 2 +- app/i18n/Magento/es_ES/composer.json | 2 +- app/i18n/Magento/fr_FR/composer.json | 2 +- app/i18n/Magento/nl_NL/composer.json | 2 +- app/i18n/Magento/pt_BR/composer.json | 2 +- app/i18n/Magento/zh_Hans_CN/composer.json | 2 +- composer.json | 230 +++++++++--------- composer.lock | 216 ++++++++-------- lib/internal/Magento/Framework/composer.json | 2 +- 117 files changed, 338 insertions(+), 338 deletions(-) diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json index cc0f1d9c5abbb..ca1ca07d44a50 100644 --- a/app/code/Magento/AdminNotification/composer.json +++ b/app/code/Magento/AdminNotification/composer.json @@ -10,7 +10,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json index b52a4b8c3e532..19d3a4e96f82f 100644 --- a/app/code/Magento/AdvancedPricingImportExport/composer.json +++ b/app/code/Magento/AdvancedPricingImportExport/composer.json @@ -13,7 +13,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json index 0d50099d2e79f..5a19aeabb8b9b 100644 --- a/app/code/Magento/Authorization/composer.json +++ b/app/code/Magento/Authorization/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Authorizenet/composer.json b/app/code/Magento/Authorizenet/composer.json index 27c012020c1e6..d127e7527e21c 100644 --- a/app/code/Magento/Authorizenet/composer.json +++ b/app/code/Magento/Authorizenet/composer.json @@ -13,7 +13,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "proprietary" ], diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json index 2bd19145e94f5..ffbe1007d3a35 100644 --- a/app/code/Magento/Backend/composer.json +++ b/app/code/Magento/Backend/composer.json @@ -22,7 +22,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json index e0fd45697cca9..626899580e441 100644 --- a/app/code/Magento/Backup/composer.json +++ b/app/code/Magento/Backup/composer.json @@ -9,7 +9,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Braintree/composer.json b/app/code/Magento/Braintree/composer.json index f74b5d22c776a..107a29730a8f4 100644 --- a/app/code/Magento/Braintree/composer.json +++ b/app/code/Magento/Braintree/composer.json @@ -24,7 +24,7 @@ "magento/module-checkout-agreements": "100.1.*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "proprietary" ], diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json index 474275f00c069..66111e373a162 100644 --- a/app/code/Magento/Bundle/composer.json +++ b/app/code/Magento/Bundle/composer.json @@ -25,7 +25,7 @@ "magento/module-bundle-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/BundleImportExport/composer.json b/app/code/Magento/BundleImportExport/composer.json index 7ef6c6cd48f6b..3c6c318fccee6 100644 --- a/app/code/Magento/BundleImportExport/composer.json +++ b/app/code/Magento/BundleImportExport/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CacheInvalidate/composer.json b/app/code/Magento/CacheInvalidate/composer.json index 01bbd0d8d97bd..c5051eed283ef 100644 --- a/app/code/Magento/CacheInvalidate/composer.json +++ b/app/code/Magento/CacheInvalidate/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json index 63f6b9c84279b..8216b31defa51 100644 --- a/app/code/Magento/Captcha/composer.json +++ b/app/code/Magento/Captcha/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json index c28a3855cbea4..5f0f089030160 100644 --- a/app/code/Magento/Catalog/composer.json +++ b/app/code/Magento/Catalog/composer.json @@ -33,7 +33,7 @@ "magento/module-catalog-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "101.0.12", + "version": "101.0.13", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json index 59412887bfaaf..920bf0941cd47 100644 --- a/app/code/Magento/CatalogImportExport/composer.json +++ b/app/code/Magento/CatalogImportExport/composer.json @@ -16,7 +16,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json index 536d9a0b7ebc0..61ace08b645ec 100644 --- a/app/code/Magento/CatalogInventory/composer.json +++ b/app/code/Magento/CatalogInventory/composer.json @@ -13,7 +13,7 @@ "magento/module-ui": "100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json index b9d25a29e7f65..8c33932e08cdb 100644 --- a/app/code/Magento/CatalogRule/composer.json +++ b/app/code/Magento/CatalogRule/composer.json @@ -17,7 +17,7 @@ "magento/module-catalog-rule-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRuleConfigurable/composer.json b/app/code/Magento/CatalogRuleConfigurable/composer.json index 2f01e9617e449..db6548145966d 100644 --- a/app/code/Magento/CatalogRuleConfigurable/composer.json +++ b/app/code/Magento/CatalogRuleConfigurable/composer.json @@ -14,7 +14,7 @@ "magento/module-catalog-rule": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json index 0990dc8b01349..281db72dfcd16 100644 --- a/app/code/Magento/CatalogSearch/composer.json +++ b/app/code/Magento/CatalogSearch/composer.json @@ -15,7 +15,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json index 5bbccfc4b77ae..c0abedfa012cc 100644 --- a/app/code/Magento/CatalogUrlRewrite/composer.json +++ b/app/code/Magento/CatalogUrlRewrite/composer.json @@ -14,7 +14,7 @@ "magento/module-ui": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogWidget/composer.json b/app/code/Magento/CatalogWidget/composer.json index 734be1c11523e..29c38a350fe3b 100644 --- a/app/code/Magento/CatalogWidget/composer.json +++ b/app/code/Magento/CatalogWidget/composer.json @@ -14,7 +14,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json index 43f752fdd6869..041e9c4aa50bd 100644 --- a/app/code/Magento/Checkout/composer.json +++ b/app/code/Magento/Checkout/composer.json @@ -26,7 +26,7 @@ "magento/module-cookie": "100.1.*" }, "type": "magento2-module", - "version": "100.1.11", + "version": "100.1.12", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json index 82032daa092e8..0306f6b14e64e 100644 --- a/app/code/Magento/CheckoutAgreements/composer.json +++ b/app/code/Magento/CheckoutAgreements/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json index 649971c4a01fd..c9f2365548fbd 100644 --- a/app/code/Magento/Cms/composer.json +++ b/app/code/Magento/Cms/composer.json @@ -18,7 +18,7 @@ "magento/module-cms-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "101.0.10", + "version": "101.0.11", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json index b3a85874a3faf..fdc0a52cac714 100644 --- a/app/code/Magento/CmsUrlRewrite/composer.json +++ b/app/code/Magento/CmsUrlRewrite/composer.json @@ -9,7 +9,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json index 238e0c80a38ce..c996a6d97d47a 100644 --- a/app/code/Magento/Config/composer.json +++ b/app/code/Magento/Config/composer.json @@ -15,7 +15,7 @@ "magento/module-deploy": "100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json index 542981da181fd..d4c32b905ed11 100644 --- a/app/code/Magento/ConfigurableImportExport/composer.json +++ b/app/code/Magento/ConfigurableImportExport/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json index 8319b63075fe3..1e771034969d3 100644 --- a/app/code/Magento/ConfigurableProduct/composer.json +++ b/app/code/Magento/ConfigurableProduct/composer.json @@ -23,7 +23,7 @@ "magento/module-product-links-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.12", + "version": "100.1.13", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json index 401451d1f3977..628681ee2912a 100644 --- a/app/code/Magento/Contact/composer.json +++ b/app/code/Magento/Contact/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cookie/composer.json b/app/code/Magento/Cookie/composer.json index 0af97399a3e3e..3e8e4706324f6 100644 --- a/app/code/Magento/Cookie/composer.json +++ b/app/code/Magento/Cookie/composer.json @@ -10,7 +10,7 @@ "magento/module-backend": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json index e6a3d74dd06d3..72ea22c1abf56 100644 --- a/app/code/Magento/Cron/composer.json +++ b/app/code/Magento/Cron/composer.json @@ -10,7 +10,7 @@ "magento/module-config": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json index b49a56e4baa8b..29d3ce3a25392 100644 --- a/app/code/Magento/CurrencySymbol/composer.json +++ b/app/code/Magento/CurrencySymbol/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json index ab91be082f482..53c8c633bcdbb 100644 --- a/app/code/Magento/Customer/composer.json +++ b/app/code/Magento/Customer/composer.json @@ -29,7 +29,7 @@ "magento/module-customer-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.11", + "version": "100.1.12", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json index b19596bb92aee..d6da01b001618 100644 --- a/app/code/Magento/CustomerImportExport/composer.json +++ b/app/code/Magento/CustomerImportExport/composer.json @@ -12,7 +12,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Deploy/composer.json b/app/code/Magento/Deploy/composer.json index 1455f39aaa94a..0e1fe6851b695 100644 --- a/app/code/Magento/Deploy/composer.json +++ b/app/code/Magento/Deploy/composer.json @@ -9,7 +9,7 @@ "magento/module-user": "100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json index 3f074b0f08667..2db8b7b844917 100644 --- a/app/code/Magento/Developer/composer.json +++ b/app/code/Magento/Developer/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json index c636c41f0c479..b1d801abd94ad 100644 --- a/app/code/Magento/Dhl/composer.json +++ b/app/code/Magento/Dhl/composer.json @@ -19,7 +19,7 @@ "magento/module-checkout": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json index 814bd48cc2e42..10c2b48d747dd 100644 --- a/app/code/Magento/Directory/composer.json +++ b/app/code/Magento/Directory/composer.json @@ -10,7 +10,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json index 3c69445bcc4db..3642dc98d5965 100644 --- a/app/code/Magento/Downloadable/composer.json +++ b/app/code/Magento/Downloadable/composer.json @@ -25,7 +25,7 @@ "magento/module-downloadable-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/DownloadableImportExport/composer.json b/app/code/Magento/DownloadableImportExport/composer.json index 137b6e3db6fc8..b321bb764b984 100644 --- a/app/code/Magento/DownloadableImportExport/composer.json +++ b/app/code/Magento/DownloadableImportExport/composer.json @@ -12,7 +12,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json index a5ce865abd11c..1b6b54ea7d921 100644 --- a/app/code/Magento/Eav/composer.json +++ b/app/code/Magento/Eav/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.9", + "version": "100.1.10", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json index 268e870410687..8d72c33304f52 100644 --- a/app/code/Magento/Email/composer.json +++ b/app/code/Magento/Email/composer.json @@ -12,7 +12,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/EncryptionKey/composer.json b/app/code/Magento/EncryptionKey/composer.json index 18430a9dc6cd2..347da260d4b1e 100644 --- a/app/code/Magento/EncryptionKey/composer.json +++ b/app/code/Magento/EncryptionKey/composer.json @@ -8,7 +8,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "proprietary" ], diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json index fa05ec535e762..ddb7a4acacdf4 100644 --- a/app/code/Magento/Fedex/composer.json +++ b/app/code/Magento/Fedex/composer.json @@ -15,7 +15,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json index a5e64bf0510f5..e4f6a8034c244 100644 --- a/app/code/Magento/GiftMessage/composer.json +++ b/app/code/Magento/GiftMessage/composer.json @@ -17,7 +17,7 @@ "magento/module-multishipping": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json index 978bfec048d72..46bf25e507c67 100644 --- a/app/code/Magento/GoogleAdwords/composer.json +++ b/app/code/Magento/GoogleAdwords/composer.json @@ -8,7 +8,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json index 19a92b342f749..d43d38a6bf3e6 100644 --- a/app/code/Magento/GoogleAnalytics/composer.json +++ b/app/code/Magento/GoogleAnalytics/composer.json @@ -9,7 +9,7 @@ "magento/module-cookie": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json index 4b239d8b0d841..1a7ba2ae079f9 100644 --- a/app/code/Magento/GoogleOptimizer/composer.json +++ b/app/code/Magento/GoogleOptimizer/composer.json @@ -12,7 +12,7 @@ "magento/module-ui": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json index ffff3da95ee29..4a1ea82244444 100644 --- a/app/code/Magento/GroupedImportExport/composer.json +++ b/app/code/Magento/GroupedImportExport/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json index de98bc401b0bc..62c09e6074357 100644 --- a/app/code/Magento/GroupedProduct/composer.json +++ b/app/code/Magento/GroupedProduct/composer.json @@ -21,7 +21,7 @@ "magento/module-grouped-product-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json index 4f3b3a04a287c..fb91b9fba1742 100644 --- a/app/code/Magento/ImportExport/composer.json +++ b/app/code/Magento/ImportExport/composer.json @@ -11,7 +11,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json index ccd49b04facbf..3a19601a31133 100644 --- a/app/code/Magento/Indexer/composer.json +++ b/app/code/Magento/Indexer/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json index d99534f1b4d72..c2902815f2958 100644 --- a/app/code/Magento/Integration/composer.json +++ b/app/code/Magento/Integration/composer.json @@ -12,7 +12,7 @@ "magento/module-authorization": "100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json index 276adcb7c9dd0..78d84bd51e7ea 100644 --- a/app/code/Magento/LayeredNavigation/composer.json +++ b/app/code/Magento/LayeredNavigation/composer.json @@ -8,7 +8,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Marketplace/composer.json b/app/code/Magento/Marketplace/composer.json index 11fd465e177b9..deac1cc4780cc 100644 --- a/app/code/Magento/Marketplace/composer.json +++ b/app/code/Magento/Marketplace/composer.json @@ -7,7 +7,7 @@ "magento/module-backend": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json index 628387436f522..22f07e1747e00 100644 --- a/app/code/Magento/MediaStorage/composer.json +++ b/app/code/Magento/MediaStorage/composer.json @@ -9,7 +9,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json index 96196da0f11a8..0c9d39da67e8d 100644 --- a/app/code/Magento/Msrp/composer.json +++ b/app/code/Magento/Msrp/composer.json @@ -16,7 +16,7 @@ "magento/module-msrp-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json index cf3abc07a83f8..1183e5e44600d 100644 --- a/app/code/Magento/Multishipping/composer.json +++ b/app/code/Magento/Multishipping/composer.json @@ -14,7 +14,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/NewRelicReporting/composer.json b/app/code/Magento/NewRelicReporting/composer.json index 9440dfae7b988..2d3d3649dfd42 100644 --- a/app/code/Magento/NewRelicReporting/composer.json +++ b/app/code/Magento/NewRelicReporting/composer.json @@ -13,7 +13,7 @@ "magento/magento-composer-installer": "*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json index 733568f17916b..c3b6feb158d96 100644 --- a/app/code/Magento/Newsletter/composer.json +++ b/app/code/Magento/Newsletter/composer.json @@ -15,7 +15,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json index 404e6e9619285..11ee83313d760 100644 --- a/app/code/Magento/OfflinePayments/composer.json +++ b/app/code/Magento/OfflinePayments/composer.json @@ -8,7 +8,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json index 419e57aaa44ff..be2187077d3dc 100644 --- a/app/code/Magento/OfflineShipping/composer.json +++ b/app/code/Magento/OfflineShipping/composer.json @@ -19,7 +19,7 @@ "magento/module-offline-shipping-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json index 7d789cc753f82..fcf7c90a9a6e8 100644 --- a/app/code/Magento/PageCache/composer.json +++ b/app/code/Magento/PageCache/composer.json @@ -9,7 +9,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json index 81e7dc53d56de..8adac0125dffc 100644 --- a/app/code/Magento/Payment/composer.json +++ b/app/code/Magento/Payment/composer.json @@ -12,7 +12,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Paypal/composer.json b/app/code/Magento/Paypal/composer.json index b389927471723..a183129b7d867 100644 --- a/app/code/Magento/Paypal/composer.json +++ b/app/code/Magento/Paypal/composer.json @@ -25,7 +25,7 @@ "magento/module-checkout-agreements": "100.1.*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "proprietary" ], diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json index 1293dce77941f..57a27aa97a61c 100644 --- a/app/code/Magento/Persistent/composer.json +++ b/app/code/Magento/Persistent/composer.json @@ -12,7 +12,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json index 1e54998731794..979e006419218 100644 --- a/app/code/Magento/ProductAlert/composer.json +++ b/app/code/Magento/ProductAlert/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ProductVideo/composer.json b/app/code/Magento/ProductVideo/composer.json index b99745ddc0dff..933e5497d9013 100644 --- a/app/code/Magento/ProductVideo/composer.json +++ b/app/code/Magento/ProductVideo/composer.json @@ -15,7 +15,7 @@ "magento/module-customer": "100.1.*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "proprietary" ], diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json index 1f4931b5a34f6..6849f34d9aa94 100644 --- a/app/code/Magento/Quote/composer.json +++ b/app/code/Magento/Quote/composer.json @@ -20,7 +20,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json index 176c972ad45ba..968d201d577dc 100644 --- a/app/code/Magento/Reports/composer.json +++ b/app/code/Magento/Reports/composer.json @@ -22,7 +22,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json index 4f0d3028a3b60..3c05a8bf63982 100644 --- a/app/code/Magento/RequireJs/composer.json +++ b/app/code/Magento/RequireJs/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json index cd7114721bf40..4bb76ead4a548 100644 --- a/app/code/Magento/Review/composer.json +++ b/app/code/Magento/Review/composer.json @@ -18,7 +18,7 @@ "magento/module-review-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Robots/composer.json b/app/code/Magento/Robots/composer.json index 218a59138d998..a23211c6fa5d3 100644 --- a/app/code/Magento/Robots/composer.json +++ b/app/code/Magento/Robots/composer.json @@ -10,7 +10,7 @@ "magento/module-theme": "100.1.*" }, "type": "magento2-module", - "version": "100.1.0", + "version": "100.1.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json index 2202ad5ceabfd..dec7ee02e5196 100644 --- a/app/code/Magento/Rss/composer.json +++ b/app/code/Magento/Rss/composer.json @@ -9,7 +9,7 @@ "magento/module-customer": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json index 5744235ab0bd8..18b3ac2ee98d9 100644 --- a/app/code/Magento/Rule/composer.json +++ b/app/code/Magento/Rule/composer.json @@ -11,7 +11,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json index 4e54681e1525f..d39a344ce9ca3 100644 --- a/app/code/Magento/Sales/composer.json +++ b/app/code/Magento/Sales/composer.json @@ -32,7 +32,7 @@ "magento/module-sales-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.10", + "version": "100.1.11", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesInventory/composer.json b/app/code/Magento/SalesInventory/composer.json index 783382f0d4af6..1efbde227d20c 100644 --- a/app/code/Magento/SalesInventory/composer.json +++ b/app/code/Magento/SalesInventory/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json index 77bca4537aeaf..ce3923b8c648c 100644 --- a/app/code/Magento/SalesRule/composer.json +++ b/app/code/Magento/SalesRule/composer.json @@ -25,7 +25,7 @@ "magento/module-sales-rule-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesSequence/composer.json b/app/code/Magento/SalesSequence/composer.json index 32397fa0399c3..c51e9704c051a 100644 --- a/app/code/Magento/SalesSequence/composer.json +++ b/app/code/Magento/SalesSequence/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SampleData/composer.json b/app/code/Magento/SampleData/composer.json index 99d41c91d09ef..07f6d6e7cd3e6 100644 --- a/app/code/Magento/SampleData/composer.json +++ b/app/code/Magento/SampleData/composer.json @@ -9,7 +9,7 @@ "magento/sample-data-media": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json index c8ffd9323e561..d3fd9854b5f1a 100644 --- a/app/code/Magento/Search/composer.json +++ b/app/code/Magento/Search/composer.json @@ -11,7 +11,7 @@ "magento/module-ui": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Security/composer.json b/app/code/Magento/Security/composer.json index 0bd8008b96689..a20481d091c6e 100644 --- a/app/code/Magento/Security/composer.json +++ b/app/code/Magento/Security/composer.json @@ -11,7 +11,7 @@ "magento/module-customer": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SendFriend/composer.json b/app/code/Magento/SendFriend/composer.json index afda90dea6059..523ee5de43b42 100644 --- a/app/code/Magento/SendFriend/composer.json +++ b/app/code/Magento/SendFriend/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json index 7bedac5d38778..58c58ab4f5555 100644 --- a/app/code/Magento/Shipping/composer.json +++ b/app/code/Magento/Shipping/composer.json @@ -24,7 +24,7 @@ "magento/module-ups": "100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json index 0342f5ba00965..4f5ff36017ba5 100644 --- a/app/code/Magento/Sitemap/composer.json +++ b/app/code/Magento/Sitemap/composer.json @@ -14,7 +14,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index c830c6c071c52..d14fbc6d9ae57 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -14,7 +14,7 @@ "magento/module-deploy": "100.1.*" }, "type": "magento2-module", - "version": "100.1.9", + "version": "100.1.10", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swagger/composer.json b/app/code/Magento/Swagger/composer.json index eef7a23fe1806..770261260acda 100644 --- a/app/code/Magento/Swagger/composer.json +++ b/app/code/Magento/Swagger/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swatches/composer.json b/app/code/Magento/Swatches/composer.json index d4514b4c13144..648f61329ade3 100644 --- a/app/code/Magento/Swatches/composer.json +++ b/app/code/Magento/Swatches/composer.json @@ -19,7 +19,7 @@ "magento/module-swatches-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.10", + "version": "100.1.11", "license": [ "proprietary" ], diff --git a/app/code/Magento/SwatchesLayeredNavigation/composer.json b/app/code/Magento/SwatchesLayeredNavigation/composer.json index 11dd456885353..99823150e378d 100644 --- a/app/code/Magento/SwatchesLayeredNavigation/composer.json +++ b/app/code/Magento/SwatchesLayeredNavigation/composer.json @@ -7,7 +7,7 @@ "magento/magento-composer-installer": "*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json index 75e91ef3e2cac..67a656e47e083 100644 --- a/app/code/Magento/Tax/composer.json +++ b/app/code/Magento/Tax/composer.json @@ -22,7 +22,7 @@ "magento/module-tax-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json index 184b545ec06b0..21f645b3dc3ab 100644 --- a/app/code/Magento/TaxImportExport/composer.json +++ b/app/code/Magento/TaxImportExport/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json index 61a8e728e2236..a3cfa4cbe9b4a 100644 --- a/app/code/Magento/Theme/composer.json +++ b/app/code/Magento/Theme/composer.json @@ -21,7 +21,7 @@ "magento/module-theme-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.9", + "version": "100.1.10", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json index b776021b248cd..936a6e9dfef88 100644 --- a/app/code/Magento/Translation/composer.json +++ b/app/code/Magento/Translation/composer.json @@ -13,7 +13,7 @@ "magento/module-deploy": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index 403269f894136..c9bc0aa0d64ee 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -10,7 +10,7 @@ "magento/module-user": "100.1.*" }, "type": "magento2-module", - "version": "100.1.10", + "version": "100.1.11", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json index 4ce3e2e20cc12..8f81ad73aa08c 100644 --- a/app/code/Magento/Ups/composer.json +++ b/app/code/Magento/Ups/composer.json @@ -13,7 +13,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json index 639d60653e293..af0be1814df91 100644 --- a/app/code/Magento/UrlRewrite/composer.json +++ b/app/code/Magento/UrlRewrite/composer.json @@ -12,7 +12,7 @@ "magento/module-cms-url-rewrite": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json index 7d207ffbaf86d..e7e39cea332f0 100644 --- a/app/code/Magento/User/composer.json +++ b/app/code/Magento/User/composer.json @@ -12,7 +12,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json index e79d6c05b0d31..09fa8ed8b7445 100644 --- a/app/code/Magento/Usps/composer.json +++ b/app/code/Magento/Usps/composer.json @@ -15,7 +15,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json index 3cd7db9f5fa9b..fa5318c980c71 100644 --- a/app/code/Magento/Variable/composer.json +++ b/app/code/Magento/Variable/composer.json @@ -9,7 +9,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Vault/composer.json b/app/code/Magento/Vault/composer.json index 3618ffda9f043..ad4be58226e51 100644 --- a/app/code/Magento/Vault/composer.json +++ b/app/code/Magento/Vault/composer.json @@ -13,7 +13,7 @@ "magento/module-theme": "100.1.*" }, "type": "magento2-module", - "version": "100.2.2", + "version": "100.2.3", "license": [ "proprietary" ], diff --git a/app/code/Magento/Version/composer.json b/app/code/Magento/Version/composer.json index bed6c5367eb80..00fa9a97d4b2c 100644 --- a/app/code/Magento/Version/composer.json +++ b/app/code/Magento/Version/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json index b4726720cb731..f935fd12cee64 100644 --- a/app/code/Magento/Webapi/composer.json +++ b/app/code/Magento/Webapi/composer.json @@ -14,7 +14,7 @@ "magento/module-customer": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/WebapiSecurity/composer.json b/app/code/Magento/WebapiSecurity/composer.json index a937fd11b9eb2..e99e5626b9246 100644 --- a/app/code/Magento/WebapiSecurity/composer.json +++ b/app/code/Magento/WebapiSecurity/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json index 5e0b95168269f..24e694f1108fe 100644 --- a/app/code/Magento/Weee/composer.json +++ b/app/code/Magento/Weee/composer.json @@ -18,7 +18,7 @@ "magento/module-ui": "100.1.*" }, "type": "magento2-module", - "version": "100.1.2", + "version": "100.1.3", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json index 307cb6007d6da..54bcddc835670 100644 --- a/app/code/Magento/Widget/composer.json +++ b/app/code/Magento/Widget/composer.json @@ -16,7 +16,7 @@ "magento/module-widget-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json index 1c0cade018a4e..4bf6895b01b79 100644 --- a/app/code/Magento/Wishlist/composer.json +++ b/app/code/Magento/Wishlist/composer.json @@ -24,7 +24,7 @@ "magento/module-wishlist-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json index d92f18488f3b9..943ed7a3de9dc 100644 --- a/app/design/adminhtml/Magento/backend/composer.json +++ b/app/design/adminhtml/Magento/backend/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-theme", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json index a9b0f41c244ae..57dac63f88f9e 100644 --- a/app/design/frontend/Magento/blank/composer.json +++ b/app/design/frontend/Magento/blank/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-theme", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json index c384fca399c73..689a3b69ec652 100644 --- a/app/design/frontend/Magento/luma/composer.json +++ b/app/design/frontend/Magento/luma/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-theme", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/de_DE/composer.json b/app/i18n/Magento/de_DE/composer.json index 69754a3d36275..87fc7768723ef 100644 --- a/app/i18n/Magento/de_DE/composer.json +++ b/app/i18n/Magento/de_DE/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-de_de", "description": "German (Germany) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/en_US/composer.json b/app/i18n/Magento/en_US/composer.json index e6a0dce3ca405..07a53bd955369 100644 --- a/app/i18n/Magento/en_US/composer.json +++ b/app/i18n/Magento/en_US/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-en_us", "description": "English (United States) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/es_ES/composer.json b/app/i18n/Magento/es_ES/composer.json index 0d4730969311c..b8864fdee92d2 100644 --- a/app/i18n/Magento/es_ES/composer.json +++ b/app/i18n/Magento/es_ES/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-es_es", "description": "Spanish (Spain) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/fr_FR/composer.json b/app/i18n/Magento/fr_FR/composer.json index 2f9b6693bc356..92e7b98e3f2b4 100644 --- a/app/i18n/Magento/fr_FR/composer.json +++ b/app/i18n/Magento/fr_FR/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-fr_fr", "description": "French (France) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/nl_NL/composer.json b/app/i18n/Magento/nl_NL/composer.json index bb7ae85ee1231..d3ee1f1b0f10b 100644 --- a/app/i18n/Magento/nl_NL/composer.json +++ b/app/i18n/Magento/nl_NL/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-nl_nl", "description": "Dutch (Netherlands) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/pt_BR/composer.json b/app/i18n/Magento/pt_BR/composer.json index 8e5615bcb80ca..a786aade7d7d3 100644 --- a/app/i18n/Magento/pt_BR/composer.json +++ b/app/i18n/Magento/pt_BR/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-pt_br", "description": "Portuguese (Brazil) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/i18n/Magento/zh_Hans_CN/composer.json b/app/i18n/Magento/zh_Hans_CN/composer.json index 6072102fb3b35..b277e6c1bea08 100644 --- a/app/i18n/Magento/zh_Hans_CN/composer.json +++ b/app/i18n/Magento/zh_Hans_CN/composer.json @@ -1,7 +1,7 @@ { "name": "magento/language-zh_hans_cn", "description": "Chinese (China) language", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/composer.json b/composer.json index 27bfd003cafe2..f7d579f7b1430 100644 --- a/composer.json +++ b/composer.json @@ -76,121 +76,121 @@ "sebastian/phpcpd": "2.0.0" }, "replace": { - "magento/module-marketplace": "100.1.2", - "magento/module-admin-notification": "100.1.3", - "magento/module-advanced-pricing-import-export": "100.1.3", - "magento/module-authorization": "100.1.2", - "magento/module-authorizenet": "100.1.6", - "magento/module-backend": "100.1.7", - "magento/module-backup": "100.1.5", - "magento/module-braintree": "100.1.8", - "magento/module-bundle": "100.1.6", - "magento/module-bundle-import-export": "100.1.4", - "magento/module-cache-invalidate": "100.1.3", - "magento/module-captcha": "100.1.3", - "magento/module-catalog": "101.0.12", - "magento/module-catalog-import-export": "100.1.8", - "magento/module-catalog-inventory": "100.1.7", - "magento/module-catalog-rule": "100.1.5", - "magento/module-catalog-rule-configurable": "100.1.3", - "magento/module-catalog-search": "100.1.8", - "magento/module-catalog-url-rewrite": "100.1.5", - "magento/module-catalog-widget": "100.1.4", - "magento/module-checkout": "100.1.11", - "magento/module-checkout-agreements": "100.1.3", - "magento/module-cms": "101.0.10", - "magento/module-cms-url-rewrite": "100.1.3", - "magento/module-config": "100.1.7", - "magento/module-configurable-import-export": "100.1.3", - "magento/module-configurable-product": "100.1.12", - "magento/module-contact": "100.1.3", - "magento/module-cookie": "100.1.3", - "magento/module-cron": "100.1.4", - "magento/module-currency-symbol": "100.1.3", - "magento/module-customer": "100.1.11", - "magento/module-customer-import-export": "100.1.5", - "magento/module-deploy": "100.1.6", - "magento/module-developer": "100.1.3", - "magento/module-dhl": "100.1.3", - "magento/module-directory": "100.1.5", - "magento/module-downloadable": "100.1.5", - "magento/module-downloadable-import-export": "100.1.2", - "magento/module-eav": "100.1.9", - "magento/module-email": "100.1.6", - "magento/module-encryption-key": "100.1.2", - "magento/module-fedex": "100.1.4", - "magento/module-gift-message": "100.1.4", - "magento/module-google-adwords": "100.1.2", - "magento/module-google-analytics": "100.1.2", - "magento/module-google-optimizer": "100.1.2", - "magento/module-grouped-import-export": "100.1.2", - "magento/module-grouped-product": "100.1.4", - "magento/module-import-export": "100.1.7", - "magento/module-indexer": "100.1.5", - "magento/module-integration": "100.1.6", - "magento/module-layered-navigation": "100.1.2", - "magento/module-media-storage": "100.1.3", - "magento/module-msrp": "100.1.3", - "magento/module-multishipping": "100.1.3", - "magento/module-new-relic-reporting": "100.1.3", - "magento/module-newsletter": "100.1.6", - "magento/module-offline-payments": "100.1.2", - "magento/module-offline-shipping": "100.1.4", - "magento/module-page-cache": "100.1.5", - "magento/module-payment": "100.1.8", - "magento/module-paypal": "100.1.8", - "magento/module-persistent": "100.1.4", - "magento/module-product-alert": "100.1.3", - "magento/module-product-video": "100.1.8", - "magento/module-quote": "100.1.7", - "magento/module-reports": "100.1.7", - "magento/module-require-js": "100.1.3", - "magento/module-review": "100.1.6", - "magento/module-robots": "100.1.0", - "magento/module-rss": "100.1.3", - "magento/module-rule": "100.1.7", - "magento/module-sales": "100.1.10", - "magento/module-sales-rule": "100.1.6", - "magento/module-sales-inventory": "100.1.1", - "magento/module-sales-sequence": "100.1.3", - "magento/module-sample-data": "100.1.4", - "magento/module-search": "100.1.4", - "magento/module-security": "100.1.3", - "magento/module-send-friend": "100.1.2", - "magento/module-shipping": "100.1.6", - "magento/module-sitemap": "100.1.5", - "magento/module-store": "100.1.9", - "magento/module-swagger": "100.1.2", - "magento/module-swatches": "100.1.10", - "magento/module-swatches-layered-navigation": "100.1.2", - "magento/module-tax": "100.1.4", - "magento/module-tax-import-export": "100.1.2", - "magento/module-theme": "100.1.9", - "magento/module-translation": "100.1.4", - "magento/module-ui": "100.1.10", - "magento/module-ups": "100.1.4", - "magento/module-url-rewrite": "100.1.4", - "magento/module-user": "100.1.4", - "magento/module-usps": "100.1.5", - "magento/module-variable": "100.1.3", - "magento/module-vault": "100.2.2", - "magento/module-version": "100.1.2", - "magento/module-webapi": "100.1.5", - "magento/module-webapi-security": "100.1.2", - "magento/module-weee": "100.1.2", - "magento/module-widget": "100.1.6", - "magento/module-wishlist": "100.1.7", - "magento/theme-adminhtml-backend": "100.1.3", - "magento/theme-frontend-blank": "100.1.7", - "magento/theme-frontend-luma": "100.1.7", - "magento/language-de_de": "100.1.1", - "magento/language-en_us": "100.1.1", - "magento/language-es_es": "100.1.1", - "magento/language-fr_fr": "100.1.1", - "magento/language-nl_nl": "100.1.1", - "magento/language-pt_br": "100.1.1", - "magento/language-zh_hans_cn": "100.1.1", - "magento/framework": "100.1.12", + "magento/module-marketplace": "100.1.3", + "magento/module-admin-notification": "100.1.4", + "magento/module-advanced-pricing-import-export": "100.1.4", + "magento/module-authorization": "100.1.3", + "magento/module-authorizenet": "100.1.7", + "magento/module-backend": "100.1.8", + "magento/module-backup": "100.1.6", + "magento/module-braintree": "100.1.9", + "magento/module-bundle": "100.1.7", + "magento/module-bundle-import-export": "100.1.5", + "magento/module-cache-invalidate": "100.1.4", + "magento/module-captcha": "100.1.4", + "magento/module-catalog": "101.0.13", + "magento/module-catalog-import-export": "100.1.9", + "magento/module-catalog-inventory": "100.1.8", + "magento/module-catalog-rule": "100.1.6", + "magento/module-catalog-rule-configurable": "100.1.4", + "magento/module-catalog-search": "100.1.9", + "magento/module-catalog-url-rewrite": "100.1.6", + "magento/module-catalog-widget": "100.1.5", + "magento/module-checkout": "100.1.12", + "magento/module-checkout-agreements": "100.1.4", + "magento/module-cms": "101.0.11", + "magento/module-cms-url-rewrite": "100.1.4", + "magento/module-config": "100.1.8", + "magento/module-configurable-import-export": "100.1.4", + "magento/module-configurable-product": "100.1.13", + "magento/module-contact": "100.1.4", + "magento/module-cookie": "100.1.4", + "magento/module-cron": "100.1.5", + "magento/module-currency-symbol": "100.1.4", + "magento/module-customer": "100.1.12", + "magento/module-customer-import-export": "100.1.6", + "magento/module-deploy": "100.1.7", + "magento/module-developer": "100.1.4", + "magento/module-dhl": "100.1.4", + "magento/module-directory": "100.1.6", + "magento/module-downloadable": "100.1.6", + "magento/module-downloadable-import-export": "100.1.3", + "magento/module-eav": "100.1.10", + "magento/module-email": "100.1.7", + "magento/module-encryption-key": "100.1.3", + "magento/module-fedex": "100.1.5", + "magento/module-gift-message": "100.1.5", + "magento/module-google-adwords": "100.1.3", + "magento/module-google-analytics": "100.1.3", + "magento/module-google-optimizer": "100.1.3", + "magento/module-grouped-import-export": "100.1.3", + "magento/module-grouped-product": "100.1.5", + "magento/module-import-export": "100.1.8", + "magento/module-indexer": "100.1.6", + "magento/module-integration": "100.1.7", + "magento/module-layered-navigation": "100.1.3", + "magento/module-media-storage": "100.1.4", + "magento/module-msrp": "100.1.4", + "magento/module-multishipping": "100.1.4", + "magento/module-new-relic-reporting": "100.1.4", + "magento/module-newsletter": "100.1.7", + "magento/module-offline-payments": "100.1.3", + "magento/module-offline-shipping": "100.1.5", + "magento/module-page-cache": "100.1.6", + "magento/module-payment": "100.1.9", + "magento/module-paypal": "100.1.9", + "magento/module-persistent": "100.1.5", + "magento/module-product-alert": "100.1.4", + "magento/module-product-video": "100.1.9", + "magento/module-quote": "100.1.8", + "magento/module-reports": "100.1.8", + "magento/module-require-js": "100.1.4", + "magento/module-review": "100.1.7", + "magento/module-robots": "100.1.1", + "magento/module-rss": "100.1.4", + "magento/module-rule": "100.1.8", + "magento/module-sales": "100.1.11", + "magento/module-sales-rule": "100.1.7", + "magento/module-sales-inventory": "100.1.2", + "magento/module-sales-sequence": "100.1.4", + "magento/module-sample-data": "100.1.5", + "magento/module-search": "100.1.5", + "magento/module-security": "100.1.4", + "magento/module-send-friend": "100.1.3", + "magento/module-shipping": "100.1.7", + "magento/module-sitemap": "100.1.6", + "magento/module-store": "100.1.10", + "magento/module-swagger": "100.1.3", + "magento/module-swatches": "100.1.11", + "magento/module-swatches-layered-navigation": "100.1.3", + "magento/module-tax": "100.1.5", + "magento/module-tax-import-export": "100.1.3", + "magento/module-theme": "100.1.10", + "magento/module-translation": "100.1.5", + "magento/module-ui": "100.1.11", + "magento/module-ups": "100.1.5", + "magento/module-url-rewrite": "100.1.5", + "magento/module-user": "100.1.5", + "magento/module-usps": "100.1.6", + "magento/module-variable": "100.1.4", + "magento/module-vault": "100.2.3", + "magento/module-version": "100.1.3", + "magento/module-webapi": "100.1.6", + "magento/module-webapi-security": "100.1.3", + "magento/module-weee": "100.1.3", + "magento/module-widget": "100.1.7", + "magento/module-wishlist": "100.1.8", + "magento/theme-adminhtml-backend": "100.1.4", + "magento/theme-frontend-blank": "100.1.8", + "magento/theme-frontend-luma": "100.1.8", + "magento/language-de_de": "100.1.2", + "magento/language-en_us": "100.1.2", + "magento/language-es_es": "100.1.2", + "magento/language-fr_fr": "100.1.2", + "magento/language-nl_nl": "100.1.2", + "magento/language-pt_br": "100.1.2", + "magento/language-zh_hans_cn": "100.1.2", + "magento/framework": "100.1.13", "trentrichardson/jquery-timepicker-addon": "1.4.3", "components/jquery": "1.11.0", "blueimp/jquery-file-upload": "5.6.14", diff --git a/composer.lock b/composer.lock index 16b51aa31e299..f55ca6616c4b5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "689d4cec7e32f7154e64436e9f9c89b8", - "content-hash": "fec7251c27752c42c5135fec4752286c", + "hash": "ce54fa59c43162fb2b9c73f53f0cd927", + "content-hash": "f1a03c3a768b9206620e20ac4a7a020f", "packages": [ { "name": "braintree/braintree_php", @@ -52,7 +52,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2015-11-19 19:14:47" + "time": "2015-11-19T19:14:47+00:00" }, { "name": "colinmollenhour/cache-backend-file", @@ -88,7 +88,7 @@ ], "description": "The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the number of cached items increases. This backend makes many changes resulting in a huge performance boost, especially for tag cleaning.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_File", - "time": "2016-05-02 16:24:47" + "time": "2016-05-02T16:24:47+00:00" }, { "name": "colinmollenhour/cache-backend-redis", @@ -96,12 +96,12 @@ "source": { "type": "git", "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", - "reference": "6319714bb3a4fe699c5db0edb887f5e8fe40a6dc" + "reference": "155f4dc20240aae06dd5cb8747475f37974d053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/6319714bb3a4fe699c5db0edb887f5e8fe40a6dc", - "reference": "6319714bb3a4fe699c5db0edb887f5e8fe40a6dc", + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/155f4dc20240aae06dd5cb8747475f37974d053a", + "reference": "155f4dc20240aae06dd5cb8747475f37974d053a", "shasum": "" }, "require": { @@ -124,7 +124,7 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2016-05-02 16:23:36" + "time": "2016-05-02T16:23:36+00:00" }, { "name": "colinmollenhour/credis", @@ -164,7 +164,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2017-07-05 15:32:38" + "time": "2017-07-05T15:32:38+00:00" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -201,7 +201,7 @@ ], "description": "A Redis-based session handler with optimistic locking", "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", - "time": "2017-03-22 16:13:03" + "time": "2017-03-22T16:13:03+00:00" }, { "name": "composer/composer", @@ -276,7 +276,7 @@ "dependency", "package" ], - "time": "2016-03-03 15:15:10" + "time": "2016-03-03T15:15:10+00:00" }, { "name": "composer/semver", @@ -338,7 +338,7 @@ "validation", "versioning" ], - "time": "2016-08-30 16:08:34" + "time": "2016-08-30T16:08:34+00:00" }, { "name": "composer/spdx-licenses", @@ -399,7 +399,7 @@ "spdx", "validator" ], - "time": "2018-01-31 13:17:27" + "time": "2018-01-31T13:17:27+00:00" }, { "name": "justinrainbow/json-schema", @@ -465,7 +465,7 @@ "json", "schema" ], - "time": "2016-01-25 15:43:01" + "time": "2016-01-25T15:43:01+00:00" }, { "name": "league/climate", @@ -514,7 +514,7 @@ "php", "terminal" ], - "time": "2015-01-18 14:31:58" + "time": "2015-01-18T14:31:58+00:00" }, { "name": "magento/composer", @@ -550,7 +550,7 @@ "AFL-3.0" ], "description": "Magento composer library helps to instantiate Composer application and run composer commands.", - "time": "2016-03-08 20:50:51" + "time": "2016-03-08T20:50:51+00:00" }, { "name": "magento/magento-composer-installer", @@ -629,7 +629,7 @@ "composer-installer", "magento" ], - "time": "2017-12-29 16:45:24" + "time": "2017-12-29T16:45:24+00:00" }, { "name": "magento/zendframework1", @@ -676,7 +676,7 @@ "ZF1", "framework" ], - "time": "2017-02-27 21:19:07" + "time": "2017-02-27T21:19:07+00:00" }, { "name": "monolog/monolog", @@ -752,7 +752,7 @@ "logging", "psr-3" ], - "time": "2015-08-09 17:44:44" + "time": "2015-08-09T17:44:44+00:00" }, { "name": "oyejorge/less.php", @@ -814,7 +814,7 @@ "php", "stylesheet" ], - "time": "2017-03-28 22:19:25" + "time": "2017-03-28T22:19:25+00:00" }, { "name": "pelago/emogrifier", @@ -870,7 +870,7 @@ ], "description": "Converts CSS styles into inline style attributes in your HTML code", "homepage": "http://www.pelagodesign.com/sidecar/emogrifier/", - "time": "2015-05-15 11:37:51" + "time": "2015-05-15T11:37:51+00:00" }, { "name": "phpseclib/phpseclib", @@ -962,7 +962,7 @@ "x.509", "x509" ], - "time": "2018-02-19 04:29:13" + "time": "2018-02-19T04:29:13+00:00" }, { "name": "psr/log", @@ -1009,7 +1009,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "seld/cli-prompt", @@ -1057,7 +1057,7 @@ "input", "prompt" ], - "time": "2017-03-18 11:32:45" + "time": "2017-03-18T11:32:45+00:00" }, { "name": "seld/jsonlint", @@ -1106,7 +1106,7 @@ "parser", "validator" ], - "time": "2018-01-24 12:46:19" + "time": "2018-01-24T12:46:19+00:00" }, { "name": "seld/phar-utils", @@ -1150,7 +1150,7 @@ "keywords": [ "phra" ], - "time": "2015-10-13 18:44:15" + "time": "2015-10-13T18:44:15+00:00" }, { "name": "sjparkinson/static-review", @@ -1204,7 +1204,7 @@ ], "description": "An extendable framework for version control hooks.", "abandoned": "phpro/grumphp", - "time": "2014-09-22 08:40:36" + "time": "2014-09-22T08:40:36+00:00" }, { "name": "symfony/console", @@ -1262,20 +1262,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2015-07-26 09:08:40" + "time": "2015-07-26T09:08:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.34", + "version": "v2.8.37", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d64be24fc1eba62f9daace8a8918f797fc8e87cc" + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d64be24fc1eba62f9daace8a8918f797fc8e87cc", - "reference": "d64be24fc1eba62f9daace8a8918f797fc8e87cc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", "shasum": "" }, "require": { @@ -1322,20 +1322,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:36:31" + "time": "2018-02-11T16:53:59+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.4", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e078773ad6354af38169faf31c21df0f18ace03d" + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", - "reference": "e078773ad6354af38169faf31c21df0f18ace03d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", "shasum": "" }, "require": { @@ -1371,20 +1371,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:34" + "time": "2018-02-22T10:48:49+00:00" }, { "name": "symfony/finder", - "version": "v3.4.4", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" + "reference": "a479817ce0a9e4adfd7d39c6407c95d97c254625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", - "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/a479817ce0a9e4adfd7d39c6407c95d97c254625", + "reference": "a479817ce0a9e4adfd7d39c6407c95d97c254625", "shasum": "" }, "require": { @@ -1420,20 +1420,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:34" + "time": "2018-03-05T18:28:11+00:00" }, { "name": "symfony/process", - "version": "v2.8.34", + "version": "v2.8.37", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "905efe90024caa75a2fc93f54e14b26f2a099d96" + "reference": "c2fc900ee54e1e44aa956eae8ba041a5347ba93c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/905efe90024caa75a2fc93f54e14b26f2a099d96", - "reference": "905efe90024caa75a2fc93f54e14b26f2a099d96", + "url": "https://api.github.com/repos/symfony/process/zipball/c2fc900ee54e1e44aa956eae8ba041a5347ba93c", + "reference": "c2fc900ee54e1e44aa956eae8ba041a5347ba93c", "shasum": "" }, "require": { @@ -1469,7 +1469,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-01-29 08:54:45" + "time": "2018-03-19T21:11:56+00:00" }, { "name": "tedivm/jshrink", @@ -1515,7 +1515,7 @@ "javascript", "minifier" ], - "time": "2014-11-11 03:54:14" + "time": "2014-11-11T03:54:14+00:00" }, { "name": "tubalmartin/cssmin", @@ -1559,7 +1559,7 @@ "minify", "yui" ], - "time": "2014-09-22 08:08:50" + "time": "2014-09-22T08:08:50+00:00" }, { "name": "zendframework/zend-code", @@ -1612,7 +1612,7 @@ "code", "zf2" ], - "time": "2015-05-11 16:17:05" + "time": "2015-05-11T16:17:05+00:00" }, { "name": "zendframework/zend-config", @@ -1669,7 +1669,7 @@ "config", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-console", @@ -1719,7 +1719,7 @@ "console", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-crypt", @@ -1771,7 +1771,7 @@ "crypt", "zf2" ], - "time": "2015-11-23 16:33:27" + "time": "2015-11-23T16:33:27+00:00" }, { "name": "zendframework/zend-di", @@ -1822,7 +1822,7 @@ "di", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-escaper", @@ -1867,7 +1867,7 @@ "escaper", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-eventmanager", @@ -1913,7 +1913,7 @@ "eventmanager", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-filter", @@ -1969,7 +1969,7 @@ "filter", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-form", @@ -2040,7 +2040,7 @@ "form", "zf2" ], - "time": "2015-09-09 19:11:05" + "time": "2015-09-09T19:11:05+00:00" }, { "name": "zendframework/zend-http", @@ -2091,7 +2091,7 @@ "http", "zf2" ], - "time": "2015-09-14 16:11:20" + "time": "2015-09-14T16:11:20+00:00" }, { "name": "zendframework/zend-i18n", @@ -2155,7 +2155,7 @@ "i18n", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-inputfilter", @@ -2206,7 +2206,7 @@ "inputfilter", "zf2" ], - "time": "2015-09-09 15:44:54" + "time": "2015-09-09T15:44:54+00:00" }, { "name": "zendframework/zend-json", @@ -2260,7 +2260,7 @@ "json", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-loader", @@ -2305,7 +2305,7 @@ "loader", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-log", @@ -2367,7 +2367,7 @@ "logging", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-math", @@ -2418,7 +2418,7 @@ "math", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-modulemanager", @@ -2476,7 +2476,7 @@ "modulemanager", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-mvc", @@ -2564,7 +2564,7 @@ "mvc", "zf2" ], - "time": "2015-09-14 16:32:50" + "time": "2015-09-14T16:32:50+00:00" }, { "name": "zendframework/zend-serializer", @@ -2617,7 +2617,7 @@ "serializer", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-server", @@ -2664,7 +2664,7 @@ "server", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-servicemanager", @@ -2714,7 +2714,7 @@ "servicemanager", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-soap", @@ -2766,7 +2766,7 @@ "soap", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-stdlib", @@ -2821,7 +2821,7 @@ "stdlib", "zf2" ], - "time": "2015-07-21 13:55:46" + "time": "2015-07-21T13:55:46+00:00" }, { "name": "zendframework/zend-text", @@ -2868,7 +2868,7 @@ "text", "zf2" ], - "time": "2015-05-07 14:55:31" + "time": "2015-05-07T14:55:31+00:00" }, { "name": "zendframework/zend-uri", @@ -2916,7 +2916,7 @@ "uri", "zf2" ], - "time": "2015-09-14 16:17:10" + "time": "2015-09-14T16:17:10+00:00" }, { "name": "zendframework/zend-validator", @@ -2981,7 +2981,7 @@ "validator", "zf2" ], - "time": "2015-09-08 21:04:17" + "time": "2015-09-08T21:04:17+00:00" }, { "name": "zendframework/zend-view", @@ -3058,7 +3058,7 @@ "view", "zf2" ], - "time": "2015-06-16 15:22:37" + "time": "2015-06-16T15:22:37+00:00" } ], "packages-dev": [ @@ -3114,7 +3114,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "fabpot/php-cs-fixer", @@ -3173,7 +3173,7 @@ ], "description": "A tool to automatically fix PHP code style", "abandoned": "friendsofphp/php-cs-fixer", - "time": "2017-09-11 14:11:16" + "time": "2017-09-11T14:11:16+00:00" }, { "name": "lusitanian/oauth", @@ -3240,7 +3240,7 @@ "oauth", "security" ], - "time": "2015-10-07 00:20:04" + "time": "2015-10-07T00:20:04+00:00" }, { "name": "pdepend/pdepend", @@ -3280,7 +3280,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2017-01-10 13:45:16" + "time": "2017-01-10T13:45:16+00:00" }, { "name": "phpmd/phpmd", @@ -3345,7 +3345,7 @@ "phpmd", "pmd" ], - "time": "2016-11-23 20:33:32" + "time": "2016-11-23T20:33:32+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3407,7 +3407,7 @@ "testing", "xunit" ], - "time": "2015-10-06 15:47:00" + "time": "2015-10-06T15:47:00+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3452,7 +3452,7 @@ "filesystem", "iterator" ], - "time": "2013-10-10 15:34:57" + "time": "2013-10-10T15:34:57+00:00" }, { "name": "phpunit/php-text-template", @@ -3493,7 +3493,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -3542,7 +3542,7 @@ "keywords": [ "timer" ], - "time": "2017-02-26 11:10:40" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", @@ -3591,7 +3591,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04 08:55:13" + "time": "2017-12-04T08:55:13+00:00" }, { "name": "phpunit/phpunit", @@ -3665,7 +3665,7 @@ "testing", "xunit" ], - "time": "2014-05-02 07:13:40" + "time": "2014-05-02T07:13:40+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -3721,7 +3721,7 @@ "mock", "xunit" ], - "time": "2015-10-02 06:51:40" + "time": "2015-10-02T06:51:40+00:00" }, { "name": "sebastian/comparator", @@ -3785,7 +3785,7 @@ "compare", "equality" ], - "time": "2017-01-29 09:50:25" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", @@ -3837,7 +3837,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22 07:24:03" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -3887,7 +3887,7 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-08-18T05:49:44+00:00" }, { "name": "sebastian/exporter", @@ -3954,7 +3954,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/finder-facade", @@ -3993,7 +3993,7 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2017-11-18 17:31:49" + "time": "2017-11-18T17:31:49+00:00" }, { "name": "sebastian/phpcpd", @@ -4044,7 +4044,7 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2013-11-08 09:05:42" + "time": "2013-11-08T09:05:42+00:00" }, { "name": "sebastian/recursion-context", @@ -4097,7 +4097,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-10-03 07:41:43" + "time": "2016-10-03T07:41:43+00:00" }, { "name": "sebastian/version", @@ -4132,7 +4132,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" + "time": "2015-06-21T13:59:46+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -4207,7 +4207,7 @@ "phpcs", "standards" ], - "time": "2014-05-01 03:07:07" + "time": "2014-05-01T03:07:07+00:00" }, { "name": "symfony/config", @@ -4263,7 +4263,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-04-12 14:13:17" + "time": "2017-04-12T14:13:17+00:00" }, { "name": "symfony/dependency-injection", @@ -4323,20 +4323,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-01-28 00:04:57" + "time": "2017-01-28T00:04:57+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.4", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "c865551df7c17e63fc1f09f763db04387f91ae4d" + "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/c865551df7c17e63fc1f09f763db04387f91ae4d", - "reference": "c865551df7c17e63fc1f09f763db04387f91ae4d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/eb17cfa072cab26537ac37e9c4ece6c0361369af", + "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af", "shasum": "" }, "require": { @@ -4372,11 +4372,11 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:34" + "time": "2018-02-17T14:55:25+00:00" }, { "name": "symfony/yaml", - "version": "v2.8.34", + "version": "v2.8.37", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", @@ -4421,7 +4421,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:36:31" + "time": "2018-01-03T07:36:31+00:00" }, { "name": "theseer/fdomdocument", @@ -4461,7 +4461,7 @@ ], "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2017-06-30 11:53:12" + "time": "2017-06-30T11:53:12+00:00" } ], "aliases": [], diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index 09b631dc6b0eb..a42ec4231f2d7 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -2,7 +2,7 @@ "name": "magento/framework", "description": "N/A", "type": "magento2-library", - "version": "100.1.12", + "version": "100.1.13", "license": [ "OSL-3.0", "AFL-3.0" From d7954d65f9ee1fed89ad6e528e4baab7828939f4 Mon Sep 17 00:00:00 2001 From: Dmytro Voskoboinikov Date: Mon, 16 Apr 2018 19:23:36 +0300 Subject: [PATCH 11/71] MAGETWO-88602: Incorect Design Configuration --- .../Adminhtml/Design/Config/Save.php | 12 ++++++---- .../Adminhtml/Design/Config/SaveTest.php | 22 +++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/Save.php b/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/Save.php index be8ae3c092ac2..0effa170316b1 100644 --- a/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/Save.php +++ b/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/Save.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Theme\Controller\Adminhtml\Design\Config; use Magento\Backend\App\Action; @@ -68,9 +69,12 @@ public function execute() $data = $this->getRequestData(); try { + if (!$this->getRequest()->isPost()) { + throw new LocalizedException(__('Wrong request.')); + } $designConfigData = $this->configFactory->create($scope, $scopeId, $data); $this->designConfigRepository->save($designConfigData); - $this->messageManager->addSuccess(__('You saved the configuration.')); + $this->messageManager->addSuccessMessage(__('You saved the configuration.')); $this->dataPersistor->clear('theme_design_config'); @@ -83,10 +87,10 @@ public function execute() } catch (LocalizedException $e) { $messages = explode("\n", $e->getMessage()); foreach ($messages as $message) { - $this->messageManager->addError(__('%1', $message)); + $this->messageManager->addErrorMessage(__('%1', $message)); } } catch (\Exception $e) { - $this->messageManager->addException( + $this->messageManager->addExceptionMessage( $e, __('Something went wrong while saving this configuration:') . ' ' . $e->getMessage() ); @@ -110,7 +114,7 @@ protected function getRequestData() $this->getRequest()->getFiles()->toArray() ); $data = array_filter($data, function ($param) { - return isset($param['error']) && $param['error'] > 0 ? false : true; + return !(isset($param['error']) && $param['error'] > 0); }); return $data; } diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/SaveTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/SaveTest.php index d3c4465d7f415..bdaca2bdf4783 100644 --- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/SaveTest.php +++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/SaveTest.php @@ -71,15 +71,13 @@ public function setUp() '', false ); - $this->request = $this->getMockForAbstractClass( - 'Magento\Framework\App\RequestInterface', - [], - '', - false, - false, - true, - ['getFiles', 'getParam', 'getParams'] - ); + $this->request = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class) + ->disableOriginalConstructor()->getMock(); + + $this->request->expects($this->atLeastOnce()) + ->method('isPost') + ->willReturn(true); + $this->context = $objectManager->getObject( 'Magento\Backend\App\Action\Context', [ @@ -147,7 +145,7 @@ public function testSave() ->method('save') ->with($this->designConfig); $this->messageManager->expects($this->once()) - ->method('addSuccess') + ->method('addSuccessMessage') ->with(__('You saved the configuration.')); $this->dataPersistor->expects($this->once()) ->method('clear') @@ -203,7 +201,7 @@ public function testSaveWithLocalizedException() ->with($this->designConfig) ->willThrowException(new \Magento\Framework\Exception\LocalizedException(__('Exception message'))); $this->messageManager->expects($this->once()) - ->method('addError') + ->method('addErrorMessage') ->with(__('Exception message')->render()); $this->dataPersistor->expects($this->once()) @@ -258,7 +256,7 @@ public function testSaveWithException() ->with($this->designConfig) ->willThrowException($exception); $this->messageManager->expects($this->once()) - ->method('addException') + ->method('addExceptionMessage') ->with($exception, 'Something went wrong while saving this configuration: Exception message'); $this->dataPersistor->expects($this->once()) From c3908b444734a8b13398bf72fe362d3205e66d0f Mon Sep 17 00:00:00 2001 From: Myroslav Dobra Date: Thu, 12 Apr 2018 10:39:33 +0300 Subject: [PATCH 12/71] MAGETWO-90410: Prepare codebase for 2.1.14 --- .../Magento/Catalog/Model/ImageUploader.php | 17 ++ .../Model/Product/Gallery/UpdateHandler.php | 3 + .../Test/Unit/Model/ImageUploaderTest.php | 166 ++++++++++++++++++ .../Model/Import/Uploader.php | 19 +- .../Test/Unit/Model/Import/UploaderTest.php | 58 +++++- .../Cms/Model/Wysiwyg/Images/Storage.php | 44 ++++- .../Unit/Model/Wysiwyg/Images/StorageTest.php | 111 +++++++++++- app/code/Magento/Cms/etc/di.xml | 28 +-- .../Model/System/Currencysymbol.php | 30 +++- .../Unit/Model/System/CurrencysymbolTest.php | 131 ++++++++++---- .../Model/File/Storage/Response.php | 6 +- .../Swatches/Model/Plugin/EavAttribute.php | 15 +- .../Unit/Model/Plugin/EavAttributeTest.php | 11 ++ .../Ui/view/base/web/js/modal/modal.js | 2 +- dev/tests/functional/utils/command.php | 43 ++--- .../Catalog/Model/ImageUploaderTest.php | 145 +++++++++++++++ .../Model/Import/UploaderTest.php | 82 +++++++++ .../Cms/Model/Wysiwyg/Images/StorageTest.php | 154 +++++++++++----- .../Magento/Framework/Api/SortOrder.php | 25 ++- .../Framework/Api/Test/Unit/SortOrderTest.php | 23 +++ lib/internal/Magento/Framework/File/Mime.php | 63 ++++++- .../Test/Unit/Transfer/Adapter/HttpTest.php | 25 ++- .../File/Test/Unit/_files/UPPERCASE.WEIRD | 1 + .../File/Test/Unit/_files/file.weird | 1 + .../Framework/File/Transfer/Adapter/Http.php | 34 +++- .../Magento/Framework/File/Uploader.php | 15 +- .../HTTP/PhpEnvironment/RemoteAddress.php | 120 ++++++++++--- .../Unit/PhpEnvironment/RemoteAddressTest.php | 129 ++++++++++++-- 28 files changed, 1298 insertions(+), 203 deletions(-) create mode 100644 app/code/Magento/Catalog/Test/Unit/Model/ImageUploaderTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/ImageUploaderTest.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/UploaderTest.php create mode 100644 lib/internal/Magento/Framework/File/Test/Unit/_files/UPPERCASE.WEIRD diff --git a/app/code/Magento/Catalog/Model/ImageUploader.php b/app/code/Magento/Catalog/Model/ImageUploader.php index 6aa76ca8c1e43..be0a8580bf500 100644 --- a/app/code/Magento/Catalog/Model/ImageUploader.php +++ b/app/code/Magento/Catalog/Model/ImageUploader.php @@ -64,6 +64,18 @@ class ImageUploader */ protected $allowedExtensions; + /** + * List of allowed image mime types. + * + * @var array + */ + private $allowedMimeTypes = [ + 'image/jpg', + 'image/jpeg', + 'image/gif', + 'image/png', + ]; + /** * ImageUploader constructor * @@ -218,6 +230,7 @@ public function moveFileFromTmp($imageName) * @return string[] * * @throws \Magento\Framework\Exception\LocalizedException + * @throws \Exception */ public function saveFileToTmpDir($fileId) { @@ -228,6 +241,10 @@ public function saveFileToTmpDir($fileId) $uploader->setAllowedExtensions($this->getAllowedExtensions()); $uploader->setAllowRenameFiles(true); + if (!$uploader->checkMimeType($this->allowedMimeTypes)) { + throw new \Magento\Framework\Exception\LocalizedException(__('File validation failed.')); + } + $result = $uploader->save($this->mediaDirectory->getAbsolutePath($baseTmpPath)); unset($result['path']); diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/UpdateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/UpdateHandler.php index ee53db35abb3c..3bbe3b9171d06 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/UpdateHandler.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/UpdateHandler.php @@ -28,6 +28,9 @@ protected function processDeletedImages($product, array &$images) foreach ($images as &$image) { if (!empty($image['removed'])) { if (!empty($image['value_id']) && !isset($picturesInOtherStores[$image['file']])) { + if (preg_match('/\.\.(\\\|\/)/', $image['file'])) { + continue; + } $recordsToDelete[] = $image['value_id']; $catalogPath = $this->mediaConfig->getBaseMediaPath(); $isFile = $this->mediaDirectory->isFile($catalogPath . $image['file']); diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ImageUploaderTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ImageUploaderTest.php new file mode 100644 index 0000000000000..2a6754f7c092a --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/ImageUploaderTest.php @@ -0,0 +1,166 @@ +coreFileStorageDatabaseMock = $this->getMockBuilder( + \Magento\MediaStorage\Helper\File\Storage\Database::class + ) + ->disableOriginalConstructor() + ->getMock(); + $this->mediaDirectoryMock = $this->getMockBuilder( + \Magento\Framework\Filesystem::class + ) + ->disableOriginalConstructor() + ->getMock(); + $this->mediaWriteDirectoryMock = $this->getMockBuilder( + \Magento\Framework\Filesystem\Directory\WriteInterface::class + ) + ->disableOriginalConstructor() + ->getMock(); + $this->mediaDirectoryMock->expects($this->any())->method('getDirectoryWrite')->willReturn( + $this->mediaWriteDirectoryMock + ); + $this->uploaderFactoryMock = $this->getMockBuilder( + \Magento\MediaStorage\Model\File\UploaderFactory::class + ) + ->disableOriginalConstructor() + ->getMock(); + $this->storeManagerMock = $this->getMockBuilder( + \Magento\Store\Model\StoreManagerInterface::class + ) + ->disableOriginalConstructor() + ->getMock(); + $this->loggerMock = $this->getMockBuilder(\Psr\Log\LoggerInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $this->baseTmpPath = 'base/tmp/'; + $this->basePath = 'base/real/'; + $this->allowedExtensions = ['.jpg']; + + $this->imageUploader = + new \Magento\Catalog\Model\ImageUploader( + $this->coreFileStorageDatabaseMock, + $this->mediaDirectoryMock, + $this->uploaderFactoryMock, + $this->storeManagerMock, + $this->loggerMock, + $this->baseTmpPath, + $this->basePath, + $this->allowedExtensions + ); + } + + public function testSaveFileToTmpDir() + { + $fileId = 'file.jpg'; + $allowedMimeTypes = [ + 'image/jpg', + 'image/jpeg', + 'image/gif', + 'image/png', + ]; + /** @var \Magento\MediaStorage\Model\File\Uploader|\PHPUnit_Framework_MockObject_MockObject $uploader */ + $uploader = $this->getMockBuilder(\Magento\MediaStorage\Model\File\Uploader::class) + ->disableOriginalConstructor() + ->getMock(); + $this->uploaderFactoryMock->expects($this->once())->method('create')->willReturn($uploader); + $uploader->expects($this->once())->method('setAllowedExtensions')->with($this->allowedExtensions); + $uploader->expects($this->once())->method('setAllowRenameFiles')->with(true); + $this->mediaWriteDirectoryMock->expects($this->once())->method('getAbsolutePath')->with($this->baseTmpPath) + ->willReturn($this->basePath); + $uploader->expects($this->once())->method('save')->with($this->basePath) + ->willReturn(['tmp_name' => $this->baseTmpPath, 'file' => $fileId, 'path' => $this->basePath]); + $uploader->expects($this->atLeastOnce())->method('checkMimeType')->with($allowedMimeTypes)->willReturn(true); + $storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) + ->disableOriginalConstructor() + ->setMethods(['getBaseUrl']) + ->getMock(); + + $this->storeManagerMock->expects($this->once())->method('getStore')->willReturn($storeMock); + $storeMock->expects($this->once())->method('getBaseUrl'); + $this->coreFileStorageDatabaseMock->expects($this->once())->method('saveFile'); + + $result = $this->imageUploader->saveFileToTmpDir($fileId); + + $this->assertArrayNotHasKey('path', $result); + } +} diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php b/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php index 3e4d324ef533b..daf00f225fb9b 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php @@ -7,10 +7,12 @@ use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem\DriverPool; +use Magento\Framework\App\ObjectManager; /** * Import entity product model * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @author Magento Core Team */ class Uploader extends \Magento\MediaStorage\Model\File\Uploader @@ -85,6 +87,11 @@ class Uploader extends \Magento\MediaStorage\Model\File\Uploader */ protected $_coreFileStorage; + /** + * @var \Magento\Framework\App\Filesystem\DirectoryResolver + */ + private $directoryResolver; + /** * @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb * @param \Magento\MediaStorage\Helper\File\Storage $coreFileStorage @@ -93,6 +100,7 @@ class Uploader extends \Magento\MediaStorage\Model\File\Uploader * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filesystem\File\ReadFactory $readFactory * @param null $filePath + * @param \Magento\Framework\App\Filesystem\DirectoryResolver|null $directoryResolver * @throws \Magento\Framework\Exception\LocalizedException */ public function __construct( @@ -102,7 +110,8 @@ public function __construct( \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $validator, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filesystem\File\ReadFactory $readFactory, - $filePath = null + $filePath = null, + \Magento\Framework\App\Filesystem\DirectoryResolver $directoryResolver = null ) { if ($filePath !== null) { $this->_setUploadFile($filePath); @@ -113,6 +122,8 @@ public function __construct( $this->_validator = $validator; $this->_directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT); $this->_readFactory = $readFactory; + $this->directoryResolver = $directoryResolver + ?: ObjectManager::getInstance()->get(\Magento\Framework\App\Filesystem\DirectoryResolver::class); } /** @@ -217,6 +228,7 @@ protected function _validateFile() $fileExtension = pathinfo($filePath, PATHINFO_EXTENSION); if (!$this->checkAllowedExtension($fileExtension)) { + $this->_directory->delete($filePath); throw new \Exception('Disallowed file type.'); } //run validate callbacks @@ -262,7 +274,10 @@ public function getTmpDir() */ public function setTmpDir($path) { - if (is_string($path) && $this->_directory->isReadable($path)) { + if (is_string($path) + && $this->_directory->isReadable($path) + && $this->directoryResolver->validatePath($this->_directory->getAbsolutePath($path), DirectoryList::ROOT) + ) { $this->_tmpDir = $path; return true; } diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/UploaderTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/UploaderTest.php index ab298dbaa1a52..f87c901ddaceb 100644 --- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/UploaderTest.php +++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/UploaderTest.php @@ -39,10 +39,15 @@ class UploaderTest extends \PHPUnit_Framework_TestCase protected $readFactory; /** - * @var \Magento\Framework\Filesystem\Directory\Writer| \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Filesystem\Directory\Writer|\PHPUnit_Framework_MockObject_MockObject */ protected $directoryMock; + /** + * @var \Magento\Framework\App\Filesystem\DirectoryResolver|\PHPUnit_Framework_MockObject_MockObject + */ + private $directoryResolver; + /** * @var \Magento\CatalogImportExport\Model\Import\Uploader|\PHPUnit_Framework_MockObject_MockObject */ @@ -72,7 +77,7 @@ protected function setUp() ->getMock(); $this->directoryMock = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\Writer::class) - ->setMethods(['writeFile', 'getRelativePath', 'isWritable', 'getAbsolutePath']) + ->setMethods(['writeFile', 'getRelativePath', 'isWritable', 'isReadable', 'getAbsolutePath']) ->disableOriginalConstructor() ->getMock(); @@ -84,6 +89,11 @@ protected function setUp() ->method('getDirectoryWrite') ->will($this->returnValue($this->directoryMock)); + $this->directoryResolver = $this->getMockBuilder(\Magento\Framework\App\Filesystem\DirectoryResolver::class) + ->disableOriginalConstructor() + ->setMethods(['validatePath']) + ->getMock(); + $this->uploader = $this->getMockBuilder(\Magento\CatalogImportExport\Model\Import\Uploader::class) ->setConstructorArgs([ $this->coreFileStorageDb, @@ -92,6 +102,8 @@ protected function setUp() $this->validator, $this->filesystem, $this->readFactory, + null, + $this->directoryResolver, ]) ->setMethods(['_setUploadFile', 'save', 'getTmpDir']) ->getMock(); @@ -169,4 +181,46 @@ public function moveFileUrlDataProvider() ], ]; } + + /** + * @dataProvider validatePathDataProvider + * + * @param bool $pathIsValid + * @return void + */ + public function testSetTmpDir($pathIsValid) + { + $path = 'path'; + $absolutePath = 'absolute_path'; + $this->directoryMock + ->expects($this->atLeastOnce()) + ->method('isReadable') + ->with($path) + ->willReturn(true); + $this->directoryMock + ->expects($this->atLeastOnce()) + ->method('getAbsolutePath') + ->with($path) + ->willReturn($absolutePath); + $this->directoryResolver + ->expects($this->atLeastOnce()) + ->method('validatePath') + ->with($absolutePath, 'base') + ->willReturn($pathIsValid); + + $this->assertEquals($pathIsValid, $this->uploader->setTmpDir($path)); + } + + /** + * Data provider for the testSetTmpDir() + * + * @return array + */ + public function validatePathDataProvider() + { + return [ + [true], + [false], + ]; + } } diff --git a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php index eed561a3cc5c6..faf0f8fbce45e 100644 --- a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php +++ b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php @@ -466,12 +466,13 @@ public function deleteFile($target) } /** - * Upload and resize new file + * Upload and resize new file. * * @param string $targetPath Target directory * @param string $type Type of storage, e.g. image, media etc. * @return array File info Array * @throws \Magento\Framework\Exception\LocalizedException + * @throws \Exception */ public function uploadFile($targetPath, $type = null) { @@ -483,6 +484,9 @@ public function uploadFile($targetPath, $type = null) } $uploader->setAllowRenameFiles(true); $uploader->setFilesDispersion(false); + if (!$uploader->checkMimeType($this->getAllowedMimeTypes($type))) { + throw new \Magento\Framework\Exception\LocalizedException(__('File validation failed.')); + } $result = $uploader->save($targetPath); if (!$result) { @@ -632,18 +636,14 @@ public function getSession() } /** - * Prepare allowed_extensions config settings + * Prepare allowed_extensions config settings. * * @param string $type Type of storage, e.g. image, media etc. * @return array Array of allowed file extensions */ public function getAllowedExtensions($type = null) { - if (is_string($type) && array_key_exists("{$type}_allowed", $this->_extensions)) { - $allowed = $this->_extensions["{$type}_allowed"]; - } else { - $allowed = $this->_extensions['allowed']; - } + $allowed = $this->getExtensionsList($type); return array_keys(array_filter($allowed)); } @@ -749,4 +749,34 @@ protected function _getRelativePathToRoot($path) strlen($this->_sanitizePath($this->_cmsWysiwygImages->getStorageRoot())) ); } + + /** + * Prepare mime types config settings. + * + * @param string|null $type Type of storage, e.g. image, media etc. + * @return array Array of allowed file extensions + */ + private function getAllowedMimeTypes($type = null) + { + $allowed = $this->getExtensionsList($type); + + return array_values(array_filter($allowed)); + } + + /** + * Get list of allowed file extensions with mime type in values. + * + * @param string|null $type + * @return array + */ + private function getExtensionsList($type = null) + { + if (is_string($type) && array_key_exists("{$type}_allowed", $this->_extensions)) { + $allowed = $this->_extensions["{$type}_allowed"]; + } else { + $allowed = $this->_extensions['allowed']; + } + + return $allowed; + } } diff --git a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php index 6efd13716925e..ff3c221c8ac56 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php @@ -107,6 +107,16 @@ class StorageTest extends \PHPUnit_Framework_TestCase */ protected $objectManagerHelper; + /** + * @var array + */ + private $allowedImageExtensions = [ + 'jpg' => 'image/jpg', + 'jpeg' => 'image/jpeg', + 'png' => 'image/png', + 'gif' => 'image/png', + ]; + /** * @return void * @SuppressWarnings(PHPMD.ExcessiveMethodLength) @@ -127,7 +137,7 @@ protected function setUp() $this->directoryMock = $this->getMock( \Magento\Framework\Filesystem\Directory\Write::class, - ['delete', 'getDriver', 'create'], + ['delete', 'getDriver', 'create', 'getRelativePath', 'isExist', 'isFile'], [], '', false @@ -216,6 +226,11 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); + $allowedExtensions = [ + 'allowed' => $this->allowedImageExtensions, + 'image_allowed' => $this->allowedImageExtensions, + ]; + $this->objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->imagesStorage = $this->objectManagerHelper->getObject( @@ -238,6 +253,7 @@ protected function setUp() 'exclude' => [], 'include' => [], ], + 'extensions' => $allowedExtensions, ] ); } @@ -442,4 +458,97 @@ protected function generalTestGetDirsCollection($path, array $collectionArray = $this->imagesStorage->getDirsCollection($path); } + + /** + * @return void + */ + public function testUploadFile() + { + $targetPath = '/target/path'; + $fileName = 'image.gif'; + $realPath = $targetPath . '/' . $fileName; + $thumbnailTargetPath = self::STORAGE_ROOT_DIR . '/.thumbs'; + $thumbnailDestination = $thumbnailTargetPath . '/' . $fileName; + $type = 'image'; + $result = [ + 'result', + 'cookie' => [ + 'name' => 'session_name', + 'value' => '1', + 'lifetime' => '50', + 'path' => 'cookie/path', + 'domain' => 'cookie_domain', + ], + ]; + $uploader = $this->getMockBuilder(\Magento\MediaStorage\Model\File\Uploader::class) + ->disableOriginalConstructor() + ->setMethods( + [ + 'setAllowedExtensions', + 'setAllowRenameFiles', + 'setFilesDispersion', + 'checkMimeType', + 'save', + 'getUploadedFileName', + ] + ) + ->getMock(); + $this->uploaderFactoryMock->expects($this->atLeastOnce())->method('create')->with(['fileId' => 'image']) + ->willReturn($uploader); + $uploader->expects($this->atLeastOnce())->method('setAllowedExtensions') + ->with(array_keys($this->allowedImageExtensions))->willReturnSelf(); + $uploader->expects($this->atLeastOnce())->method('setAllowRenameFiles')->with(true)->willReturnSelf(); + $uploader->expects($this->atLeastOnce())->method('setFilesDispersion')->with(false) + ->willReturnSelf(); + $uploader->expects($this->atLeastOnce())->method('checkMimeType') + ->with(array_values($this->allowedImageExtensions))->willReturnSelf(); + $uploader->expects($this->atLeastOnce())->method('save')->with($targetPath)->willReturn($result); + $uploader->expects($this->atLeastOnce())->method('getUploadedFileName')->willReturn($fileName); + + $this->directoryMock->expects($this->atLeastOnce())->method('getRelativePath')->willReturnMap( + [ + [$realPath, $realPath], + [$thumbnailTargetPath, $thumbnailTargetPath], + [$thumbnailDestination, $thumbnailDestination], + ] + ); + $this->directoryMock->expects($this->atLeastOnce())->method('isFile') + ->willReturnMap( + [ + [$realPath, true], + [$thumbnailDestination, true], + ] + ); + $this->directoryMock->expects($this->atLeastOnce())->method('isExist') + ->willReturnMap( + [ + [$realPath, true], + [$thumbnailTargetPath, true], + ] + ); + + $image = $this->getMockBuilder(\Magento\Catalog\Model\Product\Image::class) + ->disableOriginalConstructor() + ->setMethods(['open', 'keepAspectRatio', 'resize', 'save']) + ->getMock(); + $image->expects($this->atLeastOnce())->method('open')->with($realPath); + $image->expects($this->atLeastOnce())->method('keepAspectRatio')->with(true); + $image->expects($this->atLeastOnce())->method('resize')->with(100, 50); + $image->expects($this->atLeastOnce())->method('save')->with($thumbnailDestination); + + $this->adapterFactoryMock->expects($this->atLeastOnce())->method('create')->willReturn($image); + + $this->sessionMock->expects($this->atLeastOnce())->method('getName') + ->willReturn($result['cookie']['name']); + $this->sessionMock->expects($this->atLeastOnce())->method('getSessionId') + ->willReturn($result['cookie']['value']); + $this->sessionMock->expects($this->atLeastOnce())->method('getCookieLifetime') + ->willReturn($result['cookie']['lifetime']); + $this->sessionMock->expects($this->atLeastOnce())->method('getCookiePath') + ->willReturn($result['cookie']['path']); + $this->sessionMock->expects($this->atLeastOnce())->method('getCookieDomain') + ->willReturn($result['cookie']['domain']); + + $this->assertEquals($result, $this->imagesStorage->uploadFile($targetPath, $type)); + } } diff --git a/app/code/Magento/Cms/etc/di.xml b/app/code/Magento/Cms/etc/di.xml index b543c54536438..12946d72bbc79 100644 --- a/app/code/Magento/Cms/etc/di.xml +++ b/app/code/Magento/Cms/etc/di.xml @@ -30,24 +30,24 @@ - 1 - 1 - 1 - 1 + image/jpg + image/jpeg + image/png + image/gif - 1 - 1 - 1 - 1 + image/jpg + image/jpeg + image/png + image/gif - 1 - 1 - 1 - 1 - 1 - 1 + video/x-flv + application/x-shockwave-flash + video/x-msvideo + video/x-sgi-movie + application/vnd.rn-realmedia + video/x-ms-wmv diff --git a/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php b/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php index dfd12d7fa21c7..0a518ad14eb28 100644 --- a/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php +++ b/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php @@ -6,9 +6,13 @@ namespace Magento\CurrencySymbol\Model\System; use Magento\Framework\Locale\Bundle\CurrencyBundle; +use Magento\Framework\Unserialize\SecureUnserializer; +use Magento\Framework\App\ObjectManager; +use Psr\Log\LoggerInterface; /** * Custom currency symbol model + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Currencysymbol { @@ -106,6 +110,16 @@ class Currencysymbol */ protected $_scopeConfig; + /** + * @var SecureUnserializer + */ + private $unserializer; + + /** + * @var LoggerInterface + */ + private $logger; + /** * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Framework\App\Config\ReinitableConfigInterface $coreConfig @@ -115,6 +129,10 @@ class Currencysymbol * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param \Magento\Store\Model\System\Store $systemStore * @param \Magento\Framework\Event\ManagerInterface $eventManager + * @param SecureUnserializer|null $unserializer + * @param LoggerInterface|null $logger + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, @@ -124,7 +142,9 @@ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Locale\ResolverInterface $localeResolver, \Magento\Store\Model\System\Store $systemStore, - \Magento\Framework\Event\ManagerInterface $eventManager + \Magento\Framework\Event\ManagerInterface $eventManager, + SecureUnserializer $unserializer = null, + LoggerInterface $logger = null ) { $this->_coreConfig = $coreConfig; $this->_configFactory = $configFactory; @@ -134,6 +154,8 @@ public function __construct( $this->_systemStore = $systemStore; $this->_eventManager = $eventManager; $this->_scopeConfig = $scopeConfig; + $this->unserializer = $unserializer ?: ObjectManager::getInstance()->get(SecureUnserializer::class); + $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class); } /** @@ -262,7 +284,11 @@ protected function _unserializeStoreConfig($configPath, $storeId = null) $storeId ); if ($configData) { - $result = unserialize($configData); + try { + $result = $this->unserializer->unserialize($configData); + } catch (\InvalidArgumentException $e) { + $this->logger->critical($e); + } } return is_array($result) ? $result : []; diff --git a/app/code/Magento/CurrencySymbol/Test/Unit/Model/System/CurrencysymbolTest.php b/app/code/Magento/CurrencySymbol/Test/Unit/Model/System/CurrencysymbolTest.php index 4cab467c4713c..790a4611a6131 100644 --- a/app/code/Magento/CurrencySymbol/Test/Unit/Model/System/CurrencysymbolTest.php +++ b/app/code/Magento/CurrencySymbol/Test/Unit/Model/System/CurrencysymbolTest.php @@ -7,9 +7,12 @@ use Magento\CurrencySymbol\Model\System\Currencysymbol; use Magento\Store\Model\ScopeInterface; +use Magento\Framework\Unserialize\SecureUnserializer; +use Psr\Log\LoggerInterface; /** - * Class CurrencysymbolTest + * Test for Magento\CurrencySymbol\Model\System\Currencysymbol + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CurrencysymbolTest extends \PHPUnit_Framework_TestCase { @@ -65,19 +68,29 @@ class CurrencysymbolTest extends \PHPUnit_Framework_TestCase */ protected $model; + /** + * @var SecureUnserializer|\PHPUnit_Framework_MockObject_MockObject + */ + private $unserializerMock; + + /** + * @var LoggerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $loggerMock; + protected function setUp() { $this->objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->scopeConfigMock = $this->getMock( - 'Magento\Framework\App\Config\ScopeConfigInterface', + \Magento\Framework\App\Config\ScopeConfigInterface::class, ['getValue', 'isSetFlag'], [], '', false ); $this->localeResolverMock = $this->getMock( - 'Magento\Framework\Locale\ResolverInterface', + \Magento\Framework\Locale\ResolverInterface::class, [ 'getLocale', 'getDefaultLocalePath', @@ -85,57 +98,63 @@ protected function setUp() 'getDefaultLocale', 'setLocale', 'emulate', - 'revert' + 'revert', ], [], '', false ); $this->systemStoreMock = $this->getMock( - 'Magento\Store\Model\System\Store', + \Magento\Store\Model\System\Store::class, ['getWebsiteCollection', 'getGroupCollection', 'getStoreCollection'], [], '', false ); $this->configFactoryMock = $this->getMock( - 'Magento\Config\Model\Config\Factory', + \Magento\Config\Model\Config\Factory::class, ['create'], [], '', false ); $this->eventManagerMock = $this->getMock( - 'Magento\Framework\Event\ManagerInterface', + \Magento\Framework\Event\ManagerInterface::class, ['dispatch'], [], '', false ); $this->coreConfigMock = $this->getMock( - 'Magento\Framework\App\Config\ReinitableConfigInterface', + \Magento\Framework\App\Config\ReinitableConfigInterface::class, ['reinit', 'setValue', 'getValue', 'isSetFlag'], [], '', false ); $this->storeManagerMock = $this->getMock( - 'Magento\Store\Model\StoreManagerInterface', + \Magento\Store\Model\StoreManagerInterface::class, [], [], '', false ); $this->cacheTypeListMock = $this->getMock( - 'Magento\Framework\App\Cache\TypeListInterface', + \Magento\Framework\App\Cache\TypeListInterface::class, [], [], '', false ); - + $this->unserializerMock = $this->getMockBuilder(SecureUnserializer::class) + ->disableOriginalConstructor() + ->getMock(); + $this->loggerMock = $this->getMockBuilder(LoggerInterface::class) + ->disableOriginalConstructor() + ->setMethods(['critical']) + ->getMockForAbstractClass(); $this->model = $this->objectManagerHelper->getObject( - 'Magento\CurrencySymbol\Model\System\Currencysymbol', + \Magento\CurrencySymbol\Model\System\Currencysymbol::class, [ 'scopeConfig' => $this->scopeConfigMock, 'localeResolver' => $this->localeResolverMock, @@ -145,6 +164,8 @@ protected function setUp() 'coreConfig' => $this->coreConfigMock, 'storeManager' => $this->storeManagerMock, 'cacheTypeList' => $this->cacheTypeListMock, + 'unserializer' => $this->unserializerMock, + 'logger' => $this->loggerMock, ] ); } @@ -161,14 +182,14 @@ public function testGetCurrencySymbolData() 'parentSymbol' => '€', 'displayName' => 'Euro', 'displaySymbol' => '€', - 'inherited' => true + 'inherited' => true, ], 'USD' => [ 'parentSymbol' => '$', 'displayName' => 'US Dollar', 'displaySymbol' => '$', - 'inherited' => true - ] + 'inherited' => true, + ], ]; $websiteId = 1; $groupId = 2; @@ -192,7 +213,7 @@ public function testSetCurrencySymbolData() * @var \Magento\Config\Model\Config|\PHPUnit_Framework_MockObject_MockObject */ $configMock = $this->getMock( - 'Magento\Config\Model\Config', + \Magento\Config\Model\Config::class, ['setSection', 'setWebsite', 'setStore', 'setGroups', 'save'], [], '', @@ -219,13 +240,18 @@ public function testSetCurrencySymbolData() ); $this->assertInstanceOf( - 'Magento\CurrencySymbol\Model\System\Currencysymbol', + \Magento\CurrencySymbol\Model\System\Currencysymbol::class, $this->model->setCurrencySymbolsData($symbols) ); } /** * @dataProvider getCurrencySymbolDataProvider + * @param string $code + * @param string $expectedSymbol + * @param string $serializedCustomSymbols + * + * @return void */ public function testGetCurrencySymbol($code, $expectedSymbol, $serializedCustomSymbols) { @@ -234,33 +260,72 @@ public function testGetCurrencySymbol($code, $expectedSymbol, $serializedCustomS ->willReturnMap( [ [ - CurrencySymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL, + Currencysymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL, ScopeInterface::SCOPE_STORE, null, - $serializedCustomSymbols + $serializedCustomSymbols, ], ] ); + $this->unserializerMock->expects($this->any()) + ->method('unserialize') + ->willReturn([$code => $expectedSymbol]); + $currencySymbol = $this->model->getCurrencySymbol($code); $this->assertEquals($expectedSymbol, $currencySymbol); } + /** + * @return array + */ public function getCurrencySymbolDataProvider() { return [ 'existentCustomSymbol' => [ 'code' => 'USD', 'expectedSymbol' => '$', - 'serializedCustomSymbols' => 'a:1:{s:3:"USD";s:1:"$";}' + 'serializedCustomSymbols' => 'a:1:{s:3:"USD";s:1:"$";}', ], 'nonExistentCustomSymbol' => [ 'code' => 'UAH', 'expectedSymbol' => false, - 'serializedCustomSymbols' => 'a:1:{s:3:"USD";s:1:"$";}' - ] + 'serializedCustomSymbols' => 'a:1:{s:3:"USD";s:1:"$";}', + ], ]; } + /** + * @return void + */ + public function testGetBadCurrencySymbol() + { + $serializedBadCustomSymbols = 'a:1:{i:0;O:8:"stdClass":0:{}}'; + $exceptionMessage = 'Data contains serialized object and cannot be unserialized'; + $exception = new \InvalidArgumentException($exceptionMessage); + + $this->scopeConfigMock->expects($this->any()) + ->method('getValue') + ->willReturnMap( + [ + [ + Currencysymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL, + ScopeInterface::SCOPE_STORE, + null, + $serializedBadCustomSymbols, + ], + ] + ); + $this->unserializerMock->expects($this->once()) + ->method('unserialize') + ->with($serializedBadCustomSymbols) + ->willThrowException($exception); + $this->loggerMock->expects($this->once()) + ->method('critical') + ->with($exception); + + $this->assertEquals(false, $this->model->getCurrencySymbol('')); + } + /** * Prepare mocks for getCurrencySymbolsData * @@ -273,17 +338,17 @@ protected function prepareMocksForGetCurrencySymbolsData($websiteId, $groupId, $ /** * @var \Magento\Store\Model\Website|\PHPUnit_Framework_MockObject_MockObject */ - $websiteMock = $this->getMock('Magento\Store\Model\Website', ['getId', 'getConfig'], [], '', false); + $websiteMock = $this->getMock(\Magento\Store\Model\Website::class, ['getId', 'getConfig'], [], '', false); /** * @var \Magento\Store\Model\Group|\PHPUnit_Framework_MockObject_MockObject */ - $groupMock = $this->getMock('Magento\Store\Model\Group', ['getId', 'getWebsiteId'], [], '', false); + $groupMock = $this->getMock(\Magento\Store\Model\Group::class, ['getId', 'getWebsiteId'], [], '', false); /** * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject */ - $storeMock = $this->getMock('Magento\Store\Model\Store', ['getGroupId'], [], '', false); + $storeMock = $this->getMock(\Magento\Store\Model\Store::class, ['getGroupId'], [], '', false); $this->systemStoreMock->expects($this->once()) ->method('getWebsiteCollection') @@ -299,26 +364,26 @@ protected function prepareMocksForGetCurrencySymbolsData($websiteId, $groupId, $ ->method('getValue') ->willReturnMap( [ - [CurrencySymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL, ScopeInterface::SCOPE_STORE, null, ''], + [Currencysymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL, ScopeInterface::SCOPE_STORE, null, ''], [ - CurrencySymbol::XML_PATH_ALLOWED_CURRENCIES, + Currencysymbol::XML_PATH_ALLOWED_CURRENCIES, ScopeInterface::SCOPE_STORE, $storeMock, - $currencies + $currencies, ], - [CurrencySymbol::XML_PATH_ALLOWED_CURRENCIES, ScopeInterface::SCOPE_STORE, null, $currencies], + [Currencysymbol::XML_PATH_ALLOWED_CURRENCIES, ScopeInterface::SCOPE_STORE, null, $currencies], [ - CurrencySymbol::XML_PATH_ALLOWED_CURRENCIES, + Currencysymbol::XML_PATH_ALLOWED_CURRENCIES, ScopeInterface::SCOPE_STORE, $storeMock, - $currencies - ] + $currencies, + ], ] ); $websiteMock->expects($this->any()) ->method('getConfig') - ->with(CurrencySymbol::XML_PATH_ALLOWED_CURRENCIES) + ->with(Currencysymbol::XML_PATH_ALLOWED_CURRENCIES) ->willReturn($currencies); $this->localeResolverMock->expects($this->any())->method('getLocale')->willReturn('en'); } diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Response.php b/app/code/Magento/MediaStorage/Model/File/Storage/Response.php index 216068c9fc32a..1125dfd81ad84 100644 --- a/app/code/Magento/MediaStorage/Model/File/Storage/Response.php +++ b/app/code/Magento/MediaStorage/Model/File/Storage/Response.php @@ -56,7 +56,11 @@ public function __construct( public function sendResponse() { if ($this->_filePath && $this->getHttpResponseCode() == 200) { - $this->_transferAdapter->send($this->_filePath); + $options = [ + 'filepath' => $this->_filePath, + 'headers' => $this->getHeaders(), + ]; + $this->_transferAdapter->send($options); } else { parent::sendResponse(); } diff --git a/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php b/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php index 2028200a4370a..a91f420b5e6dd 100644 --- a/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php +++ b/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php @@ -8,6 +8,8 @@ use Magento\Catalog\Model\ResourceModel\Eav\Attribute; use Magento\Framework\Exception\InputException; use Magento\Swatches\Model\Swatch; +use Magento\Framework\Unserialize\SecureUnserializer; +use Magento\Framework\App\ObjectManager; /** * Plugin model for Catalog Resource Attribute @@ -50,19 +52,28 @@ class EavAttribute */ protected $isSwatchExists; + /** + * @var SecureUnserializer + */ + private $secureUnserializer; + /** * @param \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory $collectionFactory * @param \Magento\Swatches\Model\SwatchFactory $swatchFactory * @param \Magento\Swatches\Helper\Data $swatchHelper + * @param SecureUnserializer|null $secureUnserializer */ public function __construct( \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory $collectionFactory, \Magento\Swatches\Model\SwatchFactory $swatchFactory, - \Magento\Swatches\Helper\Data $swatchHelper + \Magento\Swatches\Helper\Data $swatchHelper, + SecureUnserializer $secureUnserializer = null ) { $this->swatchCollectionFactory = $collectionFactory; $this->swatchFactory = $swatchFactory; $this->swatchHelper = $swatchHelper; + $this->secureUnserializer = $secureUnserializer + ?: ObjectManager::getInstance()->get(SecureUnserializer::class); } /** @@ -143,7 +154,7 @@ protected function convertSwatchToDropdown(Attribute $attribute) if ($attribute->getData(Swatch::SWATCH_INPUT_TYPE_KEY) == Swatch::SWATCH_INPUT_TYPE_DROPDOWN) { $additionalData = $attribute->getData('additional_data'); if (!empty($additionalData)) { - $additionalData = unserialize($additionalData); + $additionalData = $this->secureUnserializer->unserialize($additionalData); if (is_array($additionalData) && isset($additionalData[Swatch::SWATCH_INPUT_TYPE_KEY])) { unset($additionalData[Swatch::SWATCH_INPUT_TYPE_KEY]); $attribute->setData('additional_data', serialize($additionalData)); diff --git a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php index 26117fac61f99..2b078c608dfe6 100644 --- a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php +++ b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php @@ -78,6 +78,11 @@ protected function setUp() false ); + $secureUnserializer = $this->getMock( + \Magento\Framework\Unserialize\SecureUnserializer::class, + ['unserialize'] + ); + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->eavAttribute = $objectManager->getObject( \Magento\Swatches\Model\Plugin\EavAttribute::class, @@ -85,9 +90,15 @@ protected function setUp() 'collectionFactory' => $this->collectionFactory, 'swatchFactory' => $this->swatchFactory, 'swatchHelper' => $this->swatchHelper, + 'secureUnserializer' => $secureUnserializer, ] ); + $secureUnserializer->expects($this->any()) + ->method('unserialize')->willReturnCallback(function ($parameter) { + return unserialize($parameter); + }); + $this->optionIds = [ 'value' => ['option 89' => 'test 1', 'option 114' => 'test 2', 'option 170' => 'test 3'], 'delete' => ['option 89' => 0, 'option 114' => 1, 'option 170' => 0], diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js index cb8831d6c7ad1..b2ce644afce45 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js @@ -196,7 +196,7 @@ define([ */ setSubTitle: function (subTitle) { this.options.subTitle = subTitle; - this.modal.find(this.options.modalSubTitle).html(subTitle); + this.modal.find(this.options.modalSubTitle).text(subTitle); }, /** diff --git a/dev/tests/functional/utils/command.php b/dev/tests/functional/utils/command.php index 895b117df5095..8eaf82475a4e4 100644 --- a/dev/tests/functional/utils/command.php +++ b/dev/tests/functional/utils/command.php @@ -4,41 +4,20 @@ * See COPYING.txt for license details. */ -$commandList = [ - 'cache:flush', - 'cache:disable', - 'cache:enable', - 'setup:static-content:deploy', - 'cron:run', -]; +require_once __DIR__ . '/../../../../app/bootstrap.php'; + +use Symfony\Component\Console\Input\StringInput; +use Symfony\Component\Console\Output\NullOutput; if (isset($_GET['command'])) { - $php = PHP_BINARY ?: (PHP_BINDIR ? PHP_BINDIR . '/php' : 'php'); $command = urldecode($_GET['command']); - if (!strpos($command, '&&') && !strpos($command, ';')) { - if (in_array(explode(' ', $command)[0], $commandList)) { - exec(escapeCommand($php . ' -f ../../../../bin/magento ' . $command)); - } - } + $magentoObjectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, $_SERVER); + $magentoObjectManager = $magentoObjectManagerFactory->create($_SERVER); + $cli = $magentoObjectManager->create(\Magento\Framework\Console\Cli::class); + $input = new StringInput($command); + $input->setInteractive(false); + $output = new NullOutput(); + $cli->doRun($input, $output); } else { throw new \InvalidArgumentException("Command GET parameter is not set."); } - -/** - * Returns escaped command. - * - * @param string $command - * @return string - */ -function escapeCommand($command) -{ - $escapeExceptions = [ - '> /dev/null &' => '--dev-null-amp--' - ]; - - $command = escapeshellcmd( - str_replace(array_keys($escapeExceptions), array_values($escapeExceptions), $command) - ); - - return str_replace(array_values($escapeExceptions), array_keys($escapeExceptions), $command); -} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ImageUploaderTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ImageUploaderTest.php new file mode 100644 index 0000000000000..5b65a2286d654 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ImageUploaderTest.php @@ -0,0 +1,145 @@ +objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + /** @var \Magento\Framework\Filesystem $filesystem */ + $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); + $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); + /** @var $uploader \Magento\MediaStorage\Model\File\Uploader */ + $this->imageUploader = $this->objectManager->create( + \Magento\Catalog\Model\ImageUploader::class, + [ + 'baseTmpPath' => $this->mediaDirectory->getRelativePath('tmp'), + 'basePath' => __DIR__, + 'allowedExtensions' => ['jpg', 'jpeg', 'gif', 'png'], + ] + ); + } + + /** + * @return void + */ + public function testSaveFileToTmpDir() + { + $fileName = 'magento_small_image.jpg'; + $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); + $fixtureDir = realpath(__DIR__ . '/../_files'); + $filePath = $tmpDirectory->getAbsolutePath($fileName); + copy($fixtureDir . DIRECTORY_SEPARATOR . $fileName, $filePath); + + $_FILES['image'] = [ + 'name' => $fileName, + 'type' => 'image/jpeg', + 'tmp_name' => $filePath, + 'error' => 0, + 'size' => 12500, + ]; + + $this->imageUploader->saveFileToTmpDir('image'); + $filePath = $this->imageUploader->getBaseTmpPath() . DIRECTORY_SEPARATOR. $fileName; + $this->assertTrue(is_file($this->mediaDirectory->getAbsolutePath($filePath))); + } + + /** + * @return void + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage File validation failed. + */ + public function testSaveFileToTmpDirWithWrongExtension() + { + $fileName = 'text.txt'; + $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); + $filePath = $tmpDirectory->getAbsolutePath($fileName); + $file = fopen($filePath, "wb"); + fwrite($file, 'just a text'); + + $_FILES['image'] = [ + 'name' => $fileName, + 'type' => 'text/plain', + 'tmp_name' => $filePath, + 'error' => 0, + 'size' => 12500, + ]; + + $this->imageUploader->saveFileToTmpDir('image'); + $filePath = $this->imageUploader->getBaseTmpPath() . DIRECTORY_SEPARATOR. $fileName; + $this->assertFalse(is_file($this->mediaDirectory->getAbsolutePath($filePath))); + } + + /** + * @return void + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage File validation failed. + */ + public function testSaveFileToTmpDirWithWrongFile() + { + $fileName = 'file.gif'; + $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); + $filePath = $tmpDirectory->getAbsolutePath($fileName); + $file = fopen($filePath, "wb"); + fwrite($file, 'just a text'); + + $_FILES['image'] = [ + 'name' => $fileName, + 'type' => 'image/gif', + 'tmp_name' => $filePath, + 'error' => 0, + 'size' => 12500, + ]; + + $this->imageUploader->saveFileToTmpDir('image'); + $filePath = $this->imageUploader->getBaseTmpPath() . DIRECTORY_SEPARATOR. $fileName; + $this->assertFalse(is_file($this->mediaDirectory->getAbsolutePath($filePath))); + } + + /** + * @inheritdoc + */ + public static function tearDownAfterClass() + { + parent::tearDownAfterClass(); + $filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + \Magento\Framework\Filesystem::class + ); + /** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */ + $mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); + $mediaDirectory->delete('tmp'); + } +} diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/UploaderTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/UploaderTest.php new file mode 100644 index 0000000000000..a550095c57bfb --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/UploaderTest.php @@ -0,0 +1,82 @@ +objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->uploader = $this->objectManager->create(\Magento\CatalogImportExport\Model\Import\Uploader::class); + + $filesystem = $this->objectManager->create(\Magento\Framework\Filesystem::class); + + $appParams = \Magento\TestFramework\Helper\Bootstrap::getInstance() + ->getBootstrap() + ->getApplication() + ->getInitParams()[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS]; + $mediaPath = $appParams[DirectoryList::MEDIA][DirectoryList::PATH]; + $this->directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT); + $tmpDir = $this->directory->getRelativePath($mediaPath . '/import'); + $this->uploader->setTmpDir($tmpDir); + + parent::setUp(); + } + + /** + * @return void + * @magentoAppIsolation enabled + */ + public function testMoveWithValidFile() + { + $fileName = 'magento_additional_image_one.jpg'; + $filePath = $this->directory->getAbsolutePath($this->uploader->getTmpDir() . '/' . $fileName); + copy(__DIR__ . '/_files/' . $fileName, $filePath); + $this->uploader->move($fileName); + + $this->assertTrue($this->directory->isExist($this->uploader->getTmpDir() . '/' . $fileName)); + } + + /** + * @return void + * @magentoAppIsolation enabled + * @expectedException \Exception + */ + public function testMoveWithInvalidFile() + { + $fileName = 'media_import_image.php'; + $filePath = $this->directory->getAbsolutePath($this->uploader->getTmpDir() . '/' . $fileName); + copy(__DIR__ . '/_files/' . $fileName, $filePath); + $this->uploader->move($fileName); + + $this->assertFalse($this->directory->isExist($this->uploader->getTmpDir() . '/' . $fileName)); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php index 44cd8a0f0dd40..6160ff4612e9f 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php @@ -19,10 +19,28 @@ class StorageTest extends \PHPUnit_Framework_TestCase */ protected static $_baseDir; + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * @var \Magento\Framework\Filesystem + */ + private $filesystem; + + /** + * @var \Magento\Cms\Model\Wysiwyg\Images\Storage + */ + private $storage; + + /** + * @inheritdoc + */ public static function setUpBeforeClass() { self::$_baseDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( - 'Magento\Cms\Helper\Wysiwyg\Images' + \Magento\Cms\Helper\Wysiwyg\Images::class )->getCurrentPath() . 'MagentoCmsModelWysiwygImagesStorageTest'; if (!file_exists(self::$_baseDir)) { mkdir(self::$_baseDir); @@ -30,79 +48,129 @@ public static function setUpBeforeClass() touch(self::$_baseDir . '/1.swf'); } + /** + * @inheritdoc + */ public static function tearDownAfterClass() { \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - 'Magento\Framework\Filesystem\Driver\File' + \Magento\Framework\Filesystem\Driver\File::class )->deleteDirectory( self::$_baseDir ); } /** + * @inheritdoc + */ + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); + $this->storage = $this->objectManager->create(\Magento\Cms\Model\Wysiwyg\Images\Storage::class); + } + + /** + * @return void * @magentoAppIsolation enabled */ public function testGetFilesCollection() { \Magento\TestFramework\Helper\Bootstrap::getInstance() ->loadArea(\Magento\Backend\App\Area\FrontNameResolver::AREA_CODE); - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Framework\View\DesignInterface') - ->setDesignTheme('Magento/backend'); - /** @var $model \Magento\Cms\Model\Wysiwyg\Images\Storage */ - $model = $objectManager->create('Magento\Cms\Model\Wysiwyg\Images\Storage'); - $collection = $model->getFilesCollection(self::$_baseDir, 'media'); - $this->assertInstanceOf('Magento\Cms\Model\Wysiwyg\Images\Storage\Collection', $collection); + $collection = $this->storage->getFilesCollection(self::$_baseDir, 'media'); + $this->assertInstanceOf(\Magento\Cms\Model\Wysiwyg\Images\Storage\Collection::class, $collection); foreach ($collection as $item) { - $this->assertInstanceOf('Magento\Framework\DataObject', $item); + $this->assertInstanceOf(\Magento\Framework\DataObject::class, $item); $this->assertStringEndsWith('/1.swf', $item->getUrl()); $this->assertStringMatchesFormat( 'http://%s/static/%s/adminhtml/%s/%s/Magento_Cms/images/placeholder_thumbnail.jpg', $item->getThumbUrl() ); + return; } } /** + * @return void * @magentoAppArea adminhtml */ public function testGetThumbsPath() { - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Framework\Filesystem $filesystem */ - $filesystem = $objectManager->get('Magento\Framework\Filesystem'); - $session = $objectManager->get('Magento\Backend\Model\Session'); - $backendUrl = $objectManager->get('Magento\Backend\Model\UrlInterface'); - $imageFactory = $objectManager->get('Magento\Framework\Image\AdapterFactory'); - $assetRepo = $objectManager->get('Magento\Framework\View\Asset\Repository'); - $imageHelper = $objectManager->get('Magento\Cms\Helper\Wysiwyg\Images'); - $coreFileStorageDb = $objectManager->get('Magento\MediaStorage\Helper\File\Storage\Database'); - $storageCollectionFactory = $objectManager->get('Magento\Cms\Model\Wysiwyg\Images\Storage\CollectionFactory'); - $storageFileFactory = $objectManager->get('Magento\MediaStorage\Model\File\Storage\FileFactory'); - $storageDatabaseFactory = $objectManager->get('Magento\MediaStorage\Model\File\Storage\DatabaseFactory'); - $directoryDatabaseFactory = $objectManager->get( - 'Magento\MediaStorage\Model\File\Storage\Directory\DatabaseFactory' - ); - $uploaderFactory = $objectManager->get('Magento\MediaStorage\Model\File\UploaderFactory'); - - $model = new \Magento\Cms\Model\Wysiwyg\Images\Storage( - $session, - $backendUrl, - $imageHelper, - $coreFileStorageDb, - $filesystem, - $imageFactory, - $assetRepo, - $storageCollectionFactory, - $storageFileFactory, - $storageDatabaseFactory, - $directoryDatabaseFactory, - $uploaderFactory - ); $this->assertStringStartsWith( - $filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath(), - $model->getThumbsPath() + $this->filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath(), + $this->storage->getThumbsPath() ); } + + public function testUploadFile() + { + $fileName = 'magento_small_image.jpg'; + $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); + $filePath = $tmpDirectory->getAbsolutePath($fileName); + $fixtureDir = realpath(__DIR__ . '/../../../../Catalog/_files'); + copy($fixtureDir . DIRECTORY_SEPARATOR . $fileName, $filePath); + + $_FILES['image'] = [ + 'name' => $fileName, + 'type' => 'image/jpeg', + 'tmp_name' => $filePath, + 'error' => 0, + 'size' => 12500, + ]; + + $this->storage->uploadFile(self::$_baseDir); + $this->assertTrue(is_file(self::$_baseDir . DIRECTORY_SEPARATOR . $fileName)); + } + + /** + * @return void + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage File validation failed. + */ + public function testUploadFileWithWrongExtension() + { + $fileName = 'text.txt'; + $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); + $filePath = $tmpDirectory->getAbsolutePath($fileName); + $file = fopen($filePath, "wb"); + fwrite($file, 'just a text'); + + $_FILES['image'] = [ + 'name' => $fileName, + 'type' => 'text/plain', + 'tmp_name' => $filePath, + 'error' => 0, + 'size' => 12500, + ]; + + $this->storage->uploadFile(self::$_baseDir); + $this->assertFalse(is_file(self::$_baseDir . DIRECTORY_SEPARATOR . $fileName)); + } + + /** + * @return void + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage File validation failed. + */ + public function testUploadFileWithWrongFile() + { + $fileName = 'file.gif'; + $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); + $filePath = $tmpDirectory->getAbsolutePath($fileName); + $file = fopen($filePath, "wb"); + fwrite($file, 'just a text'); + + $_FILES['image'] = [ + 'name' => $fileName, + 'type' => 'image/gif', + 'tmp_name' => $filePath, + 'error' => 0, + 'size' => 12500, + ]; + + $this->storage->uploadFile(self::$_baseDir); + $this->assertFalse(is_file(self::$_baseDir . DIRECTORY_SEPARATOR . $fileName)); + } } diff --git a/lib/internal/Magento/Framework/Api/SortOrder.php b/lib/internal/Magento/Framework/Api/SortOrder.php index 5e7b67565cfb8..6abde4c7d4f36 100644 --- a/lib/internal/Magento/Framework/Api/SortOrder.php +++ b/lib/internal/Magento/Framework/Api/SortOrder.php @@ -30,9 +30,11 @@ public function __construct(array $data = []) if (null !== $this->getDirection()) { $this->validateDirection($this->getDirection()); } + if ($this->getField() !== null) { + $this->validateField($this->getField()); + } } - /** * Get sorting field. * @@ -51,6 +53,8 @@ public function getField() */ public function setField($field) { + $this->validateField($field); + return $this->setData(SortOrder::FIELD, $field); } @@ -128,4 +132,23 @@ private function normalizeDirectionInput($direction) { return strtoupper($direction); } + + /** + * Check if given value can be used as sorting field. + * + * @param string $field + * @return void + * @throws InputException + */ + private function validateField($field) + { + if (preg_match('/[^a-z0-9\_]/i', $field)) { + throw new InputException( + new Phrase( + 'Sort order field %1 contains restricted symbols', + [$field] + ) + ); + } + } } diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/SortOrderTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/SortOrderTest.php index 100ac8bb7b00a..cfcd0e91bd8de 100644 --- a/lib/internal/Magento/Framework/Api/Test/Unit/SortOrderTest.php +++ b/lib/internal/Magento/Framework/Api/Test/Unit/SortOrderTest.php @@ -86,4 +86,27 @@ public function testItValidatesADirectionAssignedDuringInstantiation() SortOrder::DIRECTION => 'not-asc-or-desc' ]); } + + /** + * @expectedException \Magento\Framework\Exception\InputException + * @expectedExceptionMessage Sort order field invalid field (value); contains restricted symbols + */ + public function testSetFieldValidateException() + { + $this->sortOrder = new SortOrder([ + SortOrder::FIELD => 'value', + ]); + $this->sortOrder->setField('invalid field (value);'); + } + + /** + * @expectedException \Magento\Framework\Exception\InputException + * @expectedExceptionMessage Sort order field invalid field (value); contains restricted symbols + */ + public function testValidateField() + { + $this->sortOrder = new SortOrder([ + SortOrder::FIELD => 'invalid field (value);', + ]); + } } diff --git a/lib/internal/Magento/Framework/File/Mime.php b/lib/internal/Magento/Framework/File/Mime.php index 2fa3de869b759..a378724d193b6 100644 --- a/lib/internal/Magento/Framework/File/Mime.php +++ b/lib/internal/Magento/Framework/File/Mime.php @@ -59,7 +59,23 @@ class Mime ]; /** - * Get mime type of a file + * List of mime types that can be defined by file extension. + * + * @var array $defineByExtensionList + */ + private $defineByExtensionList = [ + 'txt' => 'text/plain', + 'htm' => 'text/html', + 'html' => 'text/html', + 'php' => 'text/html', + 'css' => 'text/css', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'xml' => 'application/xml', + ]; + + /** + * Get mime type of a file. * * @param string $file * @return string @@ -71,19 +87,50 @@ public function getMimeType($file) throw new \InvalidArgumentException("File '$file' doesn't exist"); } - $extension = pathinfo($file, PATHINFO_EXTENSION); - if (isset($this->mimeTypes[$extension])) { - $result = $this->mimeTypes[$extension]; - } + $result = null; + $extension = $this->getFileExtension($file); - if (empty($result) && (function_exists('mime_content_type') && ini_get('mime_magic.magicfile'))) { - $result = mime_content_type($file); + if (function_exists('mime_content_type')) { + $result = $this->getNativeMimeType($file); } - if (empty($result)) { + if (null === $result && isset($this->mimeTypes[$extension])) { + $result = $this->mimeTypes[$extension]; + } elseif (null === $result) { $result = 'application/octet-stream'; } return $result; } + + /** + * Get mime type by the native mime_content_type function. + * Search for extended mime type if mime_content_type() returned 'application/octet-stream' or 'text/plain' + * + * @param string $file + * @return string + */ + private function getNativeMimeType($file) + { + $extension = $this->getFileExtension($file); + $result = mime_content_type($file); + if (isset($this->mimeTypes[$extension], $this->defineByExtensionList[$extension]) + && strpos($result, 'text/') === 0 + ) { + $result = $this->mimeTypes[$extension]; + } + + return $result; + } + + /** + * Get file extension by file name. + * + * @param string $file + * @return string + */ + private function getFileExtension($file) + { + return strtolower(pathinfo($file, PATHINFO_EXTENSION)); + } } diff --git a/lib/internal/Magento/Framework/File/Test/Unit/Transfer/Adapter/HttpTest.php b/lib/internal/Magento/Framework/File/Test/Unit/Transfer/Adapter/HttpTest.php index 68664fc6a03ba..7d1162b157e86 100644 --- a/lib/internal/Magento/Framework/File/Test/Unit/Transfer/Adapter/HttpTest.php +++ b/lib/internal/Magento/Framework/File/Test/Unit/Transfer/Adapter/HttpTest.php @@ -28,7 +28,7 @@ protected function setUp() { $this->response = $this->getMock( '\Magento\Framework\HTTP\PhpEnvironment\Response', - ['setHeader', 'sendHeaders'], + ['setHeader', 'sendHeaders', 'setHeaders'], [], '', false @@ -59,6 +59,29 @@ public function testSend() $this->object->send($file); } + public function testSendWithOptions() + { + $file = __DIR__ . '/../../_files/javascript.js'; + $contentType = 'content/type'; + + $headers = $this->getMockBuilder(\Zend\Http\Headers::class)->getMock(); + $this->response->expects($this->atLeastOnce()) + ->method('setHeader') + ->withConsecutive(['Content-length', filesize($file)], ['Content-Type', $contentType]); + $this->response->expects($this->once()) + ->method('setHeaders') + ->with($headers); + $this->response->expects($this->once()) + ->method('sendHeaders'); + $this->mime->expects($this->once()) + ->method('getMimeType') + ->with($file) + ->willReturn($contentType); + $this->expectOutputString(file_get_contents($file)); + + $this->object->send(['filepath' => $file, 'headers' => $headers]); + } + /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage Filename is not set diff --git a/lib/internal/Magento/Framework/File/Test/Unit/_files/UPPERCASE.WEIRD b/lib/internal/Magento/Framework/File/Test/Unit/_files/UPPERCASE.WEIRD new file mode 100644 index 0000000000000..f4d9182aa98b2 --- /dev/null +++ b/lib/internal/Magento/Framework/File/Test/Unit/_files/UPPERCASE.WEIRD @@ -0,0 +1 @@ +� \ No newline at end of file diff --git a/lib/internal/Magento/Framework/File/Test/Unit/_files/file.weird b/lib/internal/Magento/Framework/File/Test/Unit/_files/file.weird index e69de29bb2d1d..f4d9182aa98b2 100644 --- a/lib/internal/Magento/Framework/File/Test/Unit/_files/file.weird +++ b/lib/internal/Magento/Framework/File/Test/Unit/_files/file.weird @@ -0,0 +1 @@ +� \ No newline at end of file diff --git a/lib/internal/Magento/Framework/File/Transfer/Adapter/Http.php b/lib/internal/Magento/Framework/File/Transfer/Adapter/Http.php index d2626e73ad2fc..5a35faf3eb70c 100644 --- a/lib/internal/Magento/Framework/File/Transfer/Adapter/Http.php +++ b/lib/internal/Magento/Framework/File/Transfer/Adapter/Http.php @@ -40,13 +40,7 @@ public function __construct(\Magento\Framework\HTTP\PhpEnvironment\Response $res */ public function send($options = null) { - if (is_string($options)) { - $filepath = $options; - } elseif (is_array($options) && isset($options['filepath'])) { - $filepath = $options['filepath']; - } else { - throw new \InvalidArgumentException("Filename is not set."); - } + $filepath = $this->getFilePath($options); if (!is_file($filepath) || !is_readable($filepath)) { throw new \InvalidArgumentException("File '{$filepath}' does not exists."); @@ -54,6 +48,10 @@ public function send($options = null) $mimeType = $this->mime->getMimeType($filepath); + if (isset($options['headers']) && $options['headers'] instanceof \Zend\Http\Headers) { + $this->response->setHeaders($options['headers']); + } + $this->response->setHeader('Content-length', filesize($filepath)); $this->response->setHeader('Content-Type', $mimeType); @@ -70,4 +68,26 @@ public function send($options = null) fclose($handle); } } + + /** + * Get filepath by provided parameter $options. + * If the $options is a string it assumes it's a file path. If the option is an array method will look for the + * 'filepath' key and return it's value. + * + * @param string|array|null $options + * @return string + * @throws \InvalidArgumentException + */ + private function getFilePath($options = null) + { + if (is_string($options)) { + $filePath = $options; + } elseif (isset($options['filepath'])) { + $filePath = $options['filepath']; + } else { + throw new \InvalidArgumentException("Filename is not set."); + } + + return $filePath; + } } diff --git a/lib/internal/Magento/Framework/File/Uploader.php b/lib/internal/Magento/Framework/File/Uploader.php index f4b7f1fa50109..6aedac8fae733 100644 --- a/lib/internal/Magento/Framework/File/Uploader.php +++ b/lib/internal/Magento/Framework/File/Uploader.php @@ -118,6 +118,11 @@ class Uploader */ protected $_validateCallbacks = []; + /** + * @var \Magento\Framework\File\Mime + */ + private $fileMime; + /**#@+ * File upload type (multiple or single) */ @@ -154,10 +159,13 @@ class Uploader * Init upload * * @param string|array $fileId + * @param null|\Magento\Framework\File\Mime $fileMime * @throws \Exception */ - public function __construct($fileId) - { + public function __construct( + $fileId, + Mime $fileMime = null + ) { $this->_setUploadFileId($fileId); if (!file_exists($this->_file['tmp_name'])) { $code = empty($this->_file['tmp_name']) ? self::TMP_NAME_EMPTY : 0; @@ -165,6 +173,7 @@ public function __construct($fileId) } else { $this->_fileExists = true; } + $this->fileMime = $fileMime ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Mime::class); } /** @@ -511,7 +520,7 @@ public function checkAllowedExtension($extension) */ private function _getMimeType() { - return $this->_file['type']; + return $this->fileMime->getMimeType($this->_file['tmp_name']); } /** diff --git a/lib/internal/Magento/Framework/HTTP/PhpEnvironment/RemoteAddress.php b/lib/internal/Magento/Framework/HTTP/PhpEnvironment/RemoteAddress.php index cb7fa45f07109..4a688a7d9c561 100644 --- a/lib/internal/Magento/Framework/HTTP/PhpEnvironment/RemoteAddress.php +++ b/lib/internal/Magento/Framework/HTTP/PhpEnvironment/RemoteAddress.php @@ -5,20 +5,22 @@ */ namespace Magento\Framework\HTTP\PhpEnvironment; +use Magento\Framework\App\RequestInterface; + /** - * Library for working with client ip address + * Library for working with client ip address. */ class RemoteAddress { /** - * Request object + * Request object. * - * @var \Magento\Framework\App\RequestInterface + * @var RequestInterface */ protected $request; /** - * Remote address cache + * Remote address cache. * * @var string */ @@ -30,46 +32,114 @@ class RemoteAddress protected $alternativeHeaders; /** - * @param \Magento\Framework\App\RequestInterface $httpRequest + * @var string[]|null + */ + private $trustedProxies; + + /** + * @param RequestInterface $httpRequest * @param array $alternativeHeaders + * @param string[]|null $trustedProxies */ - public function __construct(\Magento\Framework\App\RequestInterface $httpRequest, array $alternativeHeaders = []) - { + public function __construct( + RequestInterface $httpRequest, + array $alternativeHeaders = [], + array $trustedProxies = null + ) { $this->request = $httpRequest; $this->alternativeHeaders = $alternativeHeaders; + $this->trustedProxies = $trustedProxies; } /** - * Retrieve Client Remote Address + * Read address based on settings. * - * @param bool $ipToLong converting IP to long format - * @return string IPv4|long + * @return string|null */ - public function getRemoteAddress($ipToLong = false) + private function readAddress() { - if ($this->remoteAddress === null) { - foreach ($this->alternativeHeaders as $var) { - if ($this->request->getServer($var, false)) { - $this->remoteAddress = $this->request->getServer($var); - break; - } + $remoteAddress = null; + foreach ($this->alternativeHeaders as $var) { + if ($this->request->getServer($var, false)) { + $remoteAddress = $this->request->getServer($var); + break; } + } + + if (!$remoteAddress) { + $remoteAddress = $this->request->getServer('REMOTE_ADDR'); + } + + return $remoteAddress; + } - if (!$this->remoteAddress) { - $this->remoteAddress = $this->request->getServer('REMOTE_ADDR'); + /** + * Filter addresses by trusted proxies list. + * + * @param string $remoteAddress + * @return string|null + */ + private function filterAddress($remoteAddress) + { + if (strpos($remoteAddress, ',') !== false) { + $ipList = explode(',', $remoteAddress); + } else { + $ipList = [$remoteAddress]; + } + $ipList = array_filter( + $ipList, + function ($ip) { + return filter_var(trim($ip), FILTER_VALIDATE_IP); } + ); + if ($this->trustedProxies !== null) { + $ipList = array_filter( + $ipList, + function ($ip) { + return !in_array(trim($ip), $this->trustedProxies, true); + } + ); + $remoteAddress = trim(array_pop($ipList)); + } else { + $remoteAddress = trim(reset($ipList)); } - if (!$this->remoteAddress) { - return false; + return $remoteAddress ?: null; + } + + /** + * Retrieve Client Remote Address. + * If alternative headers are used and said headers allow multiple IPs + * it is suggested that trusted proxies is also used + * for more accurate IP recognition. + * + * @param bool $ipToLong converting IP to long format + * + * @return string IPv4|long + */ + public function getRemoteAddress($ipToLong = false) + { + if ($this->remoteAddress !== null) { + return $this->remoteAddress; } - if (strpos($this->remoteAddress, ',') !== false) { - $ipList = explode(',', $this->remoteAddress); - $this->remoteAddress = trim(reset($ipList)); + $remoteAddress = $this->readAddress(); + if (!$remoteAddress) { + $this->remoteAddress = false; + + return false; } + $remoteAddress = $this->filterAddress($remoteAddress); - return $ipToLong ? ip2long($this->remoteAddress) : $this->remoteAddress; + if (!$remoteAddress) { + $this->remoteAddress = false; + + return false; + } else { + $this->remoteAddress = $remoteAddress; + + return $ipToLong ? ip2long($this->remoteAddress) : $this->remoteAddress; + } } /** diff --git a/lib/internal/Magento/Framework/HTTP/Test/Unit/PhpEnvironment/RemoteAddressTest.php b/lib/internal/Magento/Framework/HTTP/Test/Unit/PhpEnvironment/RemoteAddressTest.php index cf0d688947c94..f07d30fedf993 100644 --- a/lib/internal/Magento/Framework/HTTP/Test/Unit/PhpEnvironment/RemoteAddressTest.php +++ b/lib/internal/Magento/Framework/HTTP/Test/Unit/PhpEnvironment/RemoteAddressTest.php @@ -5,44 +5,67 @@ */ namespace Magento\Framework\HTTP\Test\Unit\PhpEnvironment; +use Magento\Framework\HTTP\PhpEnvironment\RemoteAddress; +use Magento\Framework\App\Request\Http as HttpRequest; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + class RemoteAddressTest extends \PHPUnit_Framework_TestCase { /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Request\Http + * @var \PHPUnit_Framework_MockObject_MockObject|\HttpRequest */ protected $_request; /** - * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager + * @var ObjectManager */ protected $_objectManager; protected function setUp() { - $this->_request = $this->getMockBuilder( - 'Magento\Framework\App\Request\Http' - )->disableOriginalConstructor()->setMethods( - ['getServer'] - )->getMock(); + $this->_request = $this->getMockBuilder(HttpRequest::class) + ->disableOriginalConstructor() + ->setMethods(['getServer']) + ->getMock(); - $this->_objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->_objectManager = new ObjectManager($this); } /** + * @param string[] $alternativeHeaders + * @param array $serverValueMap + * @param string|bool $expected + * @param bool $ipToLong + * @param string[]|null $trustedProxies + * @return void * @dataProvider getRemoteAddressProvider */ - public function testGetRemoteAddress($alternativeHeaders, $serverValueMap, $expected, $ipToLong) - { + public function testGetRemoteAddress( + array $alternativeHeaders, + array $serverValueMap, + $expected, + $ipToLong, + array $trustedProxies = null + ) { $remoteAddress = $this->_objectManager->getObject( - 'Magento\Framework\HTTP\PhpEnvironment\RemoteAddress', - ['httpRequest' => $this->_request, 'alternativeHeaders' => $alternativeHeaders] + RemoteAddress::class, + [ + 'httpRequest' => $this->_request, + 'alternativeHeaders' => $alternativeHeaders, + 'trustedProxies' => $trustedProxies, + ] ); - $this->_request->expects($this->any())->method('getServer')->will($this->returnValueMap($serverValueMap)); + $this->_request->expects($this->any()) + ->method('getServer') + ->will($this->returnValueMap($serverValueMap)); + $this->assertEquals($expected, $remoteAddress->getRemoteAddress($ipToLong)); } /** * @return array + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getRemoteAddressProvider() { @@ -52,18 +75,21 @@ public function getRemoteAddressProvider() 'serverValueMap' => [['REMOTE_ADDR', null, null]], 'expected' => false, 'ipToLong' => false, + 'trustedProxies' => null, ], [ 'alternativeHeaders' => [], 'serverValueMap' => [['REMOTE_ADDR', null, '192.168.0.1']], 'expected' => '192.168.0.1', - 'ipToLong' => false + 'ipToLong' => false, + 'trustedProxies' => null, ], [ 'alternativeHeaders' => [], 'serverValueMap' => [['REMOTE_ADDR', null, '192.168.1.1']], 'expected' => ip2long('192.168.1.1'), - 'ipToLong' => true + 'ipToLong' => true, + 'trustedProxies' => null, ], [ 'alternativeHeaders' => ['TEST_HEADER'], @@ -73,7 +99,8 @@ public function getRemoteAddressProvider() ['TEST_HEADER', false, '192.168.0.1'], ], 'expected' => '192.168.0.1', - 'ipToLong' => false + 'ipToLong' => false, + 'trustedProxies' => null, ], [ 'alternativeHeaders' => ['TEST_HEADER'], @@ -83,8 +110,74 @@ public function getRemoteAddressProvider() ['TEST_HEADER', false, '192.168.0.1'], ], 'expected' => ip2long('192.168.0.1'), - 'ipToLong' => true - ] + 'ipToLong' => true, + 'trustedProxies' => null, + ], + [ + 'alternativeHeaders' => [], + 'serverValueMap' => [ + ['REMOTE_ADDR', null, 'NotValidIp'], + ], + 'expected' => false, + 'ipToLong' => false, + 'trustedProxies' => ['127.0.0.1'], + ], + [ + 'alternativeHeaders' => ['TEST_HEADER'], + 'serverValueMap' => [ + ['TEST_HEADER', null, 'NotValid, 192.168.0.1'], + ['TEST_HEADER', false, 'NotValid, 192.168.0.1'], + ], + 'expected' => '192.168.0.1', + 'ipToLong' => false, + 'trustedProxies' => ['127.0.0.1'], + ], + [ + 'alternativeHeaders' => ['TEST_HEADER'], + 'serverValueMap' => [ + ['TEST_HEADER', null, '192.168.0.2, 192.168.0.1'], + ['TEST_HEADER', false, '192.168.0.2, 192.168.0.1'], + ], + 'expected' => '192.168.0.2', + 'ipToLong' => false, + 'trustedProxies' => null, + ], + [ + 'alternativeHeaders' => [], + 'serverValueMap' => [ + [ + 'REMOTE_ADDR', + null, + '192.168.0.2, 192.168.0.1, 192.168.0.3', + ], + [ + 'REMOTE_ADDR', + false, + '192.168.0.2, 192.168.0.1, 192.168.0.3', + ], + ], + 'expected' => '192.168.0.1', + 'ipToLong' => false, + 'trustedProxies' => ['192.168.0.3'], + ], + [ + 'alternativeHeaders' => [], + 'serverValueMap' => [ + [ + 'REMOTE_ADDR', + null, + '192.168.0.2, 192.168.0.1, 192.168.0.3', + ], + [ + 'REMOTE_ADDR', + false, + '192.168.0.2, 192.168.0.1, 192.168.0.3', + ], + ], + 'expected' => '192.168.0.3', + 'ipToLong' => false, + 'trustedProxies' => [], + ], ]; } } From 21405e2c3362e0abd6cccc35954818a4138903b4 Mon Sep 17 00:00:00 2001 From: Bohdan Korablov Date: Thu, 26 Apr 2018 16:32:41 +0300 Subject: [PATCH 13/71] MAGETWO-90925: Wrong case in classname CLI in ProcessCronQueueObserver --- app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php index 08c7a80c7639d..3a0ece662b802 100644 --- a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php +++ b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php @@ -170,7 +170,7 @@ public function execute(\Magento\Framework\Event\Observer $observer) ) == 1 )) { $this->_shell->execute( - $phpPath . ' %s cron:run --group=' . $groupId . ' --' . CLI::INPUT_KEY_BOOTSTRAP . '=' + $phpPath . ' %s cron:run --group=' . $groupId . ' --' . Cli::INPUT_KEY_BOOTSTRAP . '=' . self::STANDALONE_PROCESS_STARTED . '=1', [ BP . '/bin/magento' From fa59ff997294d406ebcfba4be03fd01052cb1b8c Mon Sep 17 00:00:00 2001 From: Stas Kozar Date: Wed, 2 May 2018 14:55:34 +0300 Subject: [PATCH 14/71] MAGETWO-91017: Incorrectly generates logo --- lib/internal/Magento/Framework/File/Mime.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/File/Mime.php b/lib/internal/Magento/Framework/File/Mime.php index a378724d193b6..2ce61bb36e184 100644 --- a/lib/internal/Magento/Framework/File/Mime.php +++ b/lib/internal/Magento/Framework/File/Mime.php @@ -71,7 +71,8 @@ class Mime 'css' => 'text/css', 'js' => 'application/javascript', 'json' => 'application/json', - 'xml' => 'application/xml', + 'xml' => 'application/xml', + 'svg' => 'image/svg+xml', ]; /** From 11020c277f5003619628d0151a5c0989fa527eee Mon Sep 17 00:00:00 2001 From: vitaliyboyko Date: Tue, 15 May 2018 21:50:59 +0300 Subject: [PATCH 15/71] Add price calculation improvement for product option value price --- .../Catalog/Model/Product/Option/Value.php | 3 ++- .../Unit/Model/Product/Option/ValueTest.php | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index 9ee191c2f30a4..4ff8a2c4e753a 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -8,6 +8,7 @@ namespace Magento\Catalog\Model\Product\Option; +use Magento\Catalog\Pricing\Price\BasePrice; use Magento\Framework\Model\AbstractModel; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Option; @@ -225,7 +226,7 @@ public function saveValues() public function getPrice($flag = false) { if ($flag && $this->getPriceType() == self::TYPE_PERCENT) { - $basePrice = $this->getOption()->getProduct()->getFinalPrice(); + $basePrice = $this->getOption()->getProduct()->getPriceInfo()->getPrice(BasePrice::PRICE_CODE)->getValue(); $price = $basePrice * ($this->_getData(self::KEY_PRICE) / 100); return $price; } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php index 7fa5140884582..4a3b008ad4bb1 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php @@ -170,13 +170,30 @@ private function getMockedOption() private function getMockedProduct() { $mockBuilder = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) - ->setMethods(['getFinalPrice', '__wakeup']) + ->setMethods(['getPriceInfo', '__wakeup']) ->disableOriginalConstructor(); $mock = $mockBuilder->getMock(); $mock->expects($this->any()) ->method('getFinalPrice') ->will($this->returnValue(10)); + $priceInfoMock = $this->getMockForAbstractClass( + \Magento\Framework\Pricing\PriceInfoInterface::class, + [], + '', + false, + false, + true, + ['getPrice'] + ); + + $priceMock = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Price\PriceInterface::class); + + $priceInfoMock->expects($this->any())->method('getPrice')->willReturn($priceMock); + + $mock->expects($this->any())->method('getPriceInfo')->willReturn($priceInfoMock); + + $priceMock->expects($this->any())->method('getValue')->willReturn(10); return $mock; } From 81f2600e5e7157171ef0ef365603f4d276fdeb75 Mon Sep 17 00:00:00 2001 From: vitaliyboyko Date: Thu, 17 May 2018 21:29:04 +0300 Subject: [PATCH 16/71] Handle empty or incorrect lines in a language CSV --- .../Magento/Framework/App/Language/_files/bar/en_gb/1.csv | 2 +- lib/internal/Magento/Framework/App/Language/Dictionary.php | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv index 0c13b51b55287..2083540af9432 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv @@ -1,2 +1,2 @@ four and 75/100,4.75 -four and 5/10,4.50 \ No newline at end of file +four and 5/10,4.50 diff --git a/lib/internal/Magento/Framework/App/Language/Dictionary.php b/lib/internal/Magento/Framework/App/Language/Dictionary.php index a8dc20d9465a3..02ee6ca2c9579 100644 --- a/lib/internal/Magento/Framework/App/Language/Dictionary.php +++ b/lib/internal/Magento/Framework/App/Language/Dictionary.php @@ -193,7 +193,9 @@ private function readPackCsv($vendor, $package) foreach ($foundCsvFiles as $foundCsvFile) { $file = $directoryRead->openFile($foundCsvFile); while (($row = $file->readCsv()) !== false) { - $result[$row[0]] = $row[1]; + if (is_array($row) && count($row) > 1) { + $result[$row[0]] = $row[1]; + } } } } From e9b144f03096ea102ecfc62358713dc61157472c Mon Sep 17 00:00:00 2001 From: vitaliyboyko Date: Thu, 17 May 2018 21:57:13 +0300 Subject: [PATCH 17/71] Naming collision in Javascript ui registry (backend) to 2.2 --- .../view/adminhtml/web/js/variations/variations.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js index 3b1e15bc3b9d6..bb3ea2c5a6eda 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js @@ -276,12 +276,12 @@ define([ var element; _.each(this.disabledAttributes, function (attribute) { - registry.get('index = ' + attribute).disabled(false); + registry.get('code = ' + attribute, 'index = ' + attribute).disabled(false); }); this.disabledAttributes = []; _.each(attributes, function (attribute) { - element = registry.get('index = ' + attribute.code); + element = registry.get('code = ' + attribute.code, 'index = ' + attribute.code); if (!_.isUndefined(element)) { element.disabled(true); this.disabledAttributes.push(attribute.code); From e8fc7b42c89cffdd5a2a549a4db77a2c018b764f Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Sat, 19 May 2018 10:47:34 +0300 Subject: [PATCH 18/71] Update 1.csv Added one more empty line --- .../Magento/Framework/App/Language/_files/bar/en_gb/1.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv index 2083540af9432..235d18468b739 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv @@ -1,2 +1,3 @@ four and 75/100,4.75 four and 5/10,4.50 + From 371eb1daf12b5cb6128db7f072726528b0d606d7 Mon Sep 17 00:00:00 2001 From: Rahul Kachhadiya Date: Sat, 19 May 2018 13:12:58 +0530 Subject: [PATCH 19/71] Refactor message popup js --- .../templates/system/messages/popup.phtml | 24 +++++++------------ .../adminhtml/web/js/system/messages/popup.js | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml index 624f4d35fee1c..93ae4efaa3abd 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml +++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml @@ -19,20 +19,12 @@ - + \ No newline at end of file diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js new file mode 100644 index 0000000000000..4463f3bee84ea --- /dev/null +++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js @@ -0,0 +1,24 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. +*/ + +define([ + "jquery", + "Magento_Ui/js/modal/modal" +], function($){ + 'use strict'; + + return function (data, element) { + if (this.modal) { + this.modal.html($(element).html()); + } else { + this.modal = $(element).modal({ + modalClass: data.class, + type: 'popup', + buttons: [] + }); + } + this.modal.modal('openModal'); + }; +}); \ No newline at end of file From 29400dd375d244349466c5a53e8f6db92825d12e Mon Sep 17 00:00:00 2001 From: Vishal Gelani Date: Sat, 19 May 2018 21:12:59 +0530 Subject: [PATCH 20/71] Fixed coding standard issue. --- .../view/adminhtml/web/js/system/messages/popup.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js index 4463f3bee84ea..42b9fa144dc7a 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js +++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js @@ -4,9 +4,10 @@ */ define([ - "jquery", - "Magento_Ui/js/modal/modal" -], function($){ + 'jquery', + 'Magento_Ui/js/modal/modal' +], function ($) { + 'use strict'; return function (data, element) { @@ -21,4 +22,4 @@ define([ } this.modal.modal('openModal'); }; -}); \ No newline at end of file +}); From f82e844ce6df373a5f604cfd3d3c9e8880e71232 Mon Sep 17 00:00:00 2001 From: Vishal Gelani Date: Sun, 20 May 2018 20:16:14 +0530 Subject: [PATCH 21/71] Updated coding standard issue --- .../view/adminhtml/web/js/system/messages/popup.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js index 42b9fa144dc7a..f3f6a5fb1a123 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js +++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js @@ -7,7 +7,6 @@ define([ 'jquery', 'Magento_Ui/js/modal/modal' ], function ($) { - 'use strict'; return function (data, element) { From db762d336c74cc05e6ab358b8886340768d47cc8 Mon Sep 17 00:00:00 2001 From: Kishan Date: Thu, 24 May 2018 12:01:34 +0530 Subject: [PATCH 22/71] Variant product image in sidebar wishlist block --- app/code/Magento/Wishlist/CustomerData/Wishlist.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/code/Magento/Wishlist/CustomerData/Wishlist.php b/app/code/Magento/Wishlist/CustomerData/Wishlist.php index ec5ed1fedda95..67d32efa7c821 100644 --- a/app/code/Magento/Wishlist/CustomerData/Wishlist.php +++ b/app/code/Magento/Wishlist/CustomerData/Wishlist.php @@ -147,6 +147,13 @@ protected function getItemData(\Magento\Wishlist\Model\Item $wishlistItem) */ protected function getImageData($product) { + /* Set variant product if it is configurable product. It will show variant product image in sidebar instead of configurable product image. */ + $simpleOption = $product->getCustomOption('simple_product'); + if ($simpleOption !== null) { + $optionProduct = $simpleOption->getProduct(); + $product = $optionProduct; + } + /** @var \Magento\Catalog\Helper\Image $helper */ $helper = $this->imageHelperFactory->create() ->init($product, 'wishlist_sidebar_block'); From 488c8a9f97166fa769c2533ac415254efb27c811 Mon Sep 17 00:00:00 2001 From: kishanpatadia Date: Thu, 24 May 2018 13:39:14 +0530 Subject: [PATCH 23/71] Update Wishlist.php --- app/code/Magento/Wishlist/CustomerData/Wishlist.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Wishlist/CustomerData/Wishlist.php b/app/code/Magento/Wishlist/CustomerData/Wishlist.php index 67d32efa7c821..1b8a1f4f0c399 100644 --- a/app/code/Magento/Wishlist/CustomerData/Wishlist.php +++ b/app/code/Magento/Wishlist/CustomerData/Wishlist.php @@ -147,7 +147,8 @@ protected function getItemData(\Magento\Wishlist\Model\Item $wishlistItem) */ protected function getImageData($product) { - /* Set variant product if it is configurable product. It will show variant product image in sidebar instead of configurable product image. */ + /*Set variant product if it is configurable product. + It will show variant product image in sidebar instead of configurable product image.*/ $simpleOption = $product->getCustomOption('simple_product'); if ($simpleOption !== null) { $optionProduct = $simpleOption->getProduct(); From 5111760d65f1004969883bb395ffbd10b92694eb Mon Sep 17 00:00:00 2001 From: Timon de Groot Date: Mon, 14 May 2018 14:18:43 +0200 Subject: [PATCH 24/71] Fix Magento_ImportExport not supporting unicode characters in column names --- app/code/Magento/ImportExport/Model/Import/AbstractEntity.php | 2 +- .../Magento/ImportExport/Model/Import/Entity/AbstractEntity.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php index 8a95b2815eb85..fe7d1692c4a16 100644 --- a/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php +++ b/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php @@ -803,7 +803,7 @@ public function validateData() if (!$this->isAttributeParticular($columnName)) { if (trim($columnName) == '') { $emptyHeaderColumns[] = $columnNumber; - } elseif (!preg_match('/^[a-z][a-z0-9_]*$/', $columnName)) { + } elseif (!preg_match('/^[a-z][\w]*$/u', $columnName)) { $invalidColumns[] = $columnName; } elseif ($this->needColumnCheck && !in_array($columnName, $this->getValidColumnNames())) { $invalidAttributes[] = $columnName; diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php index 47b0935e31470..3e9e239b3b05f 100644 --- a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php +++ b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php @@ -769,7 +769,7 @@ public function validateData() if (!$this->isAttributeParticular($columnName)) { if (trim($columnName) == '') { $emptyHeaderColumns[] = $columnNumber; - } elseif (!preg_match('/^[a-z][a-z0-9_]*$/', $columnName)) { + } elseif (!preg_match('/^[a-z][\w]*$/u', $columnName)) { $invalidColumns[] = $columnName; } elseif ($this->needColumnCheck && !in_array($columnName, $this->getValidColumnNames())) { $invalidAttributes[] = $columnName; From 5e6abd502f500d50cdde91af6c97dfc6f6dc861f Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 3 Jan 2018 14:30:23 +0530 Subject: [PATCH 25/71] #12601 - A space between the category page and the main footer when applying specific settings --- .../blank/Magento_Catalog/web/css/source/_module.less | 10 ++++++++++ .../luma/Magento_Catalog/web/css/source/_module.less | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less index e1d1851267afa..1576141fe0596 100644 --- a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less +++ b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less @@ -494,6 +494,16 @@ } } + // + // Category page 1 column layout + // --------------------------------------------- + + .catalog-category-view.page-layout-1column { + .column.main { + min-height: inherit; + } + } + } // diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less index c64efa65ae2f9..980e3367678f1 100644 --- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less +++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less @@ -562,6 +562,16 @@ } } } + + // + // Category page 1 column layout + // --------------------------------------------- + + .catalog-category-view.page-layout-1column { + .column.main { + min-height: inherit; + } + } } // From 2fcaf53c31040ca89d2eba98d53441dbe94b5fe6 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Sat, 19 May 2018 11:23:56 +0530 Subject: [PATCH 26/71] #14063 - Wrong invoice prefix in multistore setup due to default store id --- .../Magento/Sales/Model/ResourceModel/EntityAbstract.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php index 8a8ee5e9c799f..2152ff7c84556 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php +++ b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php @@ -121,10 +121,15 @@ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object) { /** @var \Magento\Sales\Model\AbstractModel $object */ if ($object instanceof EntityInterface && $object->getIncrementId() == null) { + $store = $object->getStore(); + $storeId = $store->getId(); + if ($storeId === null) { + $storeId = $store->getGroup()->getDefaultStoreId(); + } $object->setIncrementId( $this->sequenceManager->getSequence( $object->getEntityType(), - $object->getStore()->getGroup()->getDefaultStoreId() + $storeId )->getNextValue() ); } From 1839f97c1852d19477b92baf868ce22dcf0da041 Mon Sep 17 00:00:00 2001 From: Kaushik Chavda Date: Wed, 16 May 2018 13:57:20 +0530 Subject: [PATCH 27/71] ISSUE-14747 Newsletter subscription confirmation message does not display after clicking link in email --- app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php b/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php index 004677b899cd0..4e338c2d1df34 100644 --- a/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php +++ b/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php @@ -32,6 +32,8 @@ public function execute() } } - $this->getResponse()->setRedirect($this->_storeManager->getStore()->getBaseUrl()); + $resultRedirect = $this->resultRedirectFactory->create(); + $resultRedirect->setUrl($this->_storeManager->getStore()->getBaseUrl()); + return $resultRedirect; } } From 6bc1e63de1a740236100b562bfaf4931c65ff822 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Tue, 12 Jun 2018 12:43:52 +0300 Subject: [PATCH 28/71] Fixed split button error on backend --- .../base/web/js/grid/controls/button/split.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.js diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.js new file mode 100644 index 0000000000000..d37e80213f650 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.js @@ -0,0 +1,17 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery' +], function ($) { + 'use strict'; + + return function (data, element) { + + $(element).on('click.splitDefault', '.action-default', function () { + $(this).siblings('.dropdown-menu').find('.item-default').trigger('click'); + }); + }; +}); From 4966a50830ec6ef1a103691e28c8804255826ca2 Mon Sep 17 00:00:00 2001 From: mage2-team Date: Thu, 14 Jun 2018 02:57:26 -0700 Subject: [PATCH 29/71] MAGETWO-90394: Magento 2.1.14 Publication (build 2.1.14.013) --- app/code/Magento/Backend/composer.json | 2 +- app/code/Magento/Catalog/composer.json | 2 +- .../Magento/CatalogImportExport/composer.json | 2 +- app/code/Magento/CatalogRule/composer.json | 2 +- app/code/Magento/Cms/composer.json | 2 +- .../Magento/ConfigurableProduct/composer.json | 2 +- app/code/Magento/Cron/composer.json | 2 +- app/code/Magento/CurrencySymbol/composer.json | 2 +- app/code/Magento/Customer/composer.json | 2 +- app/code/Magento/Directory/composer.json | 2 +- app/code/Magento/Eav/composer.json | 2 +- app/code/Magento/MediaStorage/composer.json | 2 +- app/code/Magento/Paypal/composer.json | 2 +- app/code/Magento/Review/composer.json | 2 +- app/code/Magento/Robots/composer.json | 2 +- app/code/Magento/Store/composer.json | 2 +- app/code/Magento/Swagger/composer.json | 2 +- app/code/Magento/Swatches/composer.json | 2 +- app/code/Magento/Theme/composer.json | 2 +- app/code/Magento/Translation/composer.json | 2 +- app/code/Magento/Ui/composer.json | 2 +- app/code/Magento/Widget/composer.json | 2 +- .../frontend/Magento/blank/composer.json | 2 +- .../frontend/Magento/luma/composer.json | 2 +- composer.json | 52 ++++---- composer.lock | 117 +++++++++++++----- lib/internal/Magento/Framework/composer.json | 2 +- 27 files changed, 138 insertions(+), 81 deletions(-) diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json index ffbe1007d3a35..a1f57203b2191 100644 --- a/app/code/Magento/Backend/composer.json +++ b/app/code/Magento/Backend/composer.json @@ -22,7 +22,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.8", + "version": "100.1.9", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json index 5f0f089030160..de85f7a556419 100644 --- a/app/code/Magento/Catalog/composer.json +++ b/app/code/Magento/Catalog/composer.json @@ -33,7 +33,7 @@ "magento/module-catalog-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "101.0.13", + "version": "101.0.14", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json index 920bf0941cd47..a166650c7d8b4 100644 --- a/app/code/Magento/CatalogImportExport/composer.json +++ b/app/code/Magento/CatalogImportExport/composer.json @@ -16,7 +16,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.1.9", + "version": "100.1.10", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json index 8c33932e08cdb..241e5601653c4 100644 --- a/app/code/Magento/CatalogRule/composer.json +++ b/app/code/Magento/CatalogRule/composer.json @@ -17,7 +17,7 @@ "magento/module-catalog-rule-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json index c9f2365548fbd..6a6504f870fff 100644 --- a/app/code/Magento/Cms/composer.json +++ b/app/code/Magento/Cms/composer.json @@ -18,7 +18,7 @@ "magento/module-cms-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "101.0.11", + "version": "101.0.12", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json index 1e771034969d3..fc1364c3138c8 100644 --- a/app/code/Magento/ConfigurableProduct/composer.json +++ b/app/code/Magento/ConfigurableProduct/composer.json @@ -23,7 +23,7 @@ "magento/module-product-links-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.13", + "version": "100.1.14", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json index 72ea22c1abf56..12ca72ed8c933 100644 --- a/app/code/Magento/Cron/composer.json +++ b/app/code/Magento/Cron/composer.json @@ -10,7 +10,7 @@ "magento/module-config": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json index 29d3ce3a25392..f014cbd2623d4 100644 --- a/app/code/Magento/CurrencySymbol/composer.json +++ b/app/code/Magento/CurrencySymbol/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json index 53c8c633bcdbb..1360c4e8f690d 100644 --- a/app/code/Magento/Customer/composer.json +++ b/app/code/Magento/Customer/composer.json @@ -29,7 +29,7 @@ "magento/module-customer-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.12", + "version": "100.1.13", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json index 10c2b48d747dd..dad955db5049f 100644 --- a/app/code/Magento/Directory/composer.json +++ b/app/code/Magento/Directory/composer.json @@ -10,7 +10,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.1.6", + "version": "100.1.7", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json index 1b6b54ea7d921..f74bac34fc069 100644 --- a/app/code/Magento/Eav/composer.json +++ b/app/code/Magento/Eav/composer.json @@ -11,7 +11,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.10", + "version": "100.1.11", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json index 22f07e1747e00..28df5df4e50e1 100644 --- a/app/code/Magento/MediaStorage/composer.json +++ b/app/code/Magento/MediaStorage/composer.json @@ -9,7 +9,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.4", + "version": "100.1.5", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Paypal/composer.json b/app/code/Magento/Paypal/composer.json index a183129b7d867..d99ba747ce938 100644 --- a/app/code/Magento/Paypal/composer.json +++ b/app/code/Magento/Paypal/composer.json @@ -25,7 +25,7 @@ "magento/module-checkout-agreements": "100.1.*" }, "type": "magento2-module", - "version": "100.1.9", + "version": "100.1.10", "license": [ "proprietary" ], diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json index 4bb76ead4a548..498fa88eb9022 100644 --- a/app/code/Magento/Review/composer.json +++ b/app/code/Magento/Review/composer.json @@ -18,7 +18,7 @@ "magento/module-review-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Robots/composer.json b/app/code/Magento/Robots/composer.json index a23211c6fa5d3..f0fcaf7d4c9ce 100644 --- a/app/code/Magento/Robots/composer.json +++ b/app/code/Magento/Robots/composer.json @@ -10,7 +10,7 @@ "magento/module-theme": "100.1.*" }, "type": "magento2-module", - "version": "100.1.1", + "version": "100.1.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index d14fbc6d9ae57..92fcd2e46ea50 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -14,7 +14,7 @@ "magento/module-deploy": "100.1.*" }, "type": "magento2-module", - "version": "100.1.10", + "version": "100.1.11", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swagger/composer.json b/app/code/Magento/Swagger/composer.json index 770261260acda..35c34dcf6461f 100644 --- a/app/code/Magento/Swagger/composer.json +++ b/app/code/Magento/Swagger/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-module", - "version": "100.1.3", + "version": "100.1.4", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swatches/composer.json b/app/code/Magento/Swatches/composer.json index 648f61329ade3..ac817f3d58db6 100644 --- a/app/code/Magento/Swatches/composer.json +++ b/app/code/Magento/Swatches/composer.json @@ -19,7 +19,7 @@ "magento/module-swatches-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.11", + "version": "100.1.12", "license": [ "proprietary" ], diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json index a3cfa4cbe9b4a..72804eb521879 100644 --- a/app/code/Magento/Theme/composer.json +++ b/app/code/Magento/Theme/composer.json @@ -21,7 +21,7 @@ "magento/module-theme-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.10", + "version": "100.1.11", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json index 936a6e9dfef88..9fe0b662ec8bc 100644 --- a/app/code/Magento/Translation/composer.json +++ b/app/code/Magento/Translation/composer.json @@ -13,7 +13,7 @@ "magento/module-deploy": "100.1.*" }, "type": "magento2-module", - "version": "100.1.5", + "version": "100.1.6", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index c9bc0aa0d64ee..4f1bbd806a973 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -10,7 +10,7 @@ "magento/module-user": "100.1.*" }, "type": "magento2-module", - "version": "100.1.11", + "version": "100.1.12", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json index 54bcddc835670..173e991f700b0 100644 --- a/app/code/Magento/Widget/composer.json +++ b/app/code/Magento/Widget/composer.json @@ -16,7 +16,7 @@ "magento/module-widget-sample-data": "Sample Data version:100.1.*" }, "type": "magento2-module", - "version": "100.1.7", + "version": "100.1.8", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json index 57dac63f88f9e..f4815e60698fe 100644 --- a/app/design/frontend/Magento/blank/composer.json +++ b/app/design/frontend/Magento/blank/composer.json @@ -6,7 +6,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-theme", - "version": "100.1.8", + "version": "100.1.9", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json index 689a3b69ec652..469095f9f704a 100644 --- a/app/design/frontend/Magento/luma/composer.json +++ b/app/design/frontend/Magento/luma/composer.json @@ -7,7 +7,7 @@ "magento/framework": "100.1.*" }, "type": "magento2-theme", - "version": "100.1.8", + "version": "100.1.9", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/composer.json b/composer.json index f7d579f7b1430..2dc268e0e7648 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2ce", "description": "Magento 2 (Community Edition)", "type": "project", - "version": "2.1.14-dev", + "version": "2.1.14", "license": [ "OSL-3.0", "AFL-3.0" @@ -81,41 +81,41 @@ "magento/module-advanced-pricing-import-export": "100.1.4", "magento/module-authorization": "100.1.3", "magento/module-authorizenet": "100.1.7", - "magento/module-backend": "100.1.8", + "magento/module-backend": "100.1.9", "magento/module-backup": "100.1.6", "magento/module-braintree": "100.1.9", "magento/module-bundle": "100.1.7", "magento/module-bundle-import-export": "100.1.5", "magento/module-cache-invalidate": "100.1.4", "magento/module-captcha": "100.1.4", - "magento/module-catalog": "101.0.13", - "magento/module-catalog-import-export": "100.1.9", + "magento/module-catalog": "101.0.14", + "magento/module-catalog-import-export": "100.1.10", "magento/module-catalog-inventory": "100.1.8", - "magento/module-catalog-rule": "100.1.6", + "magento/module-catalog-rule": "100.1.7", "magento/module-catalog-rule-configurable": "100.1.4", "magento/module-catalog-search": "100.1.9", "magento/module-catalog-url-rewrite": "100.1.6", "magento/module-catalog-widget": "100.1.5", "magento/module-checkout": "100.1.12", "magento/module-checkout-agreements": "100.1.4", - "magento/module-cms": "101.0.11", + "magento/module-cms": "101.0.12", "magento/module-cms-url-rewrite": "100.1.4", "magento/module-config": "100.1.8", "magento/module-configurable-import-export": "100.1.4", - "magento/module-configurable-product": "100.1.13", + "magento/module-configurable-product": "100.1.14", "magento/module-contact": "100.1.4", "magento/module-cookie": "100.1.4", - "magento/module-cron": "100.1.5", - "magento/module-currency-symbol": "100.1.4", - "magento/module-customer": "100.1.12", + "magento/module-cron": "100.1.6", + "magento/module-currency-symbol": "100.1.5", + "magento/module-customer": "100.1.13", "magento/module-customer-import-export": "100.1.6", "magento/module-deploy": "100.1.7", "magento/module-developer": "100.1.4", "magento/module-dhl": "100.1.4", - "magento/module-directory": "100.1.6", + "magento/module-directory": "100.1.7", "magento/module-downloadable": "100.1.6", "magento/module-downloadable-import-export": "100.1.3", - "magento/module-eav": "100.1.10", + "magento/module-eav": "100.1.11", "magento/module-email": "100.1.7", "magento/module-encryption-key": "100.1.3", "magento/module-fedex": "100.1.5", @@ -129,7 +129,7 @@ "magento/module-indexer": "100.1.6", "magento/module-integration": "100.1.7", "magento/module-layered-navigation": "100.1.3", - "magento/module-media-storage": "100.1.4", + "magento/module-media-storage": "100.1.5", "magento/module-msrp": "100.1.4", "magento/module-multishipping": "100.1.4", "magento/module-new-relic-reporting": "100.1.4", @@ -138,15 +138,15 @@ "magento/module-offline-shipping": "100.1.5", "magento/module-page-cache": "100.1.6", "magento/module-payment": "100.1.9", - "magento/module-paypal": "100.1.9", + "magento/module-paypal": "100.1.10", "magento/module-persistent": "100.1.5", "magento/module-product-alert": "100.1.4", "magento/module-product-video": "100.1.9", "magento/module-quote": "100.1.8", "magento/module-reports": "100.1.8", "magento/module-require-js": "100.1.4", - "magento/module-review": "100.1.7", - "magento/module-robots": "100.1.1", + "magento/module-review": "100.1.8", + "magento/module-robots": "100.1.2", "magento/module-rss": "100.1.4", "magento/module-rule": "100.1.8", "magento/module-sales": "100.1.11", @@ -159,15 +159,15 @@ "magento/module-send-friend": "100.1.3", "magento/module-shipping": "100.1.7", "magento/module-sitemap": "100.1.6", - "magento/module-store": "100.1.10", - "magento/module-swagger": "100.1.3", - "magento/module-swatches": "100.1.11", + "magento/module-store": "100.1.11", + "magento/module-swagger": "100.1.4", + "magento/module-swatches": "100.1.12", "magento/module-swatches-layered-navigation": "100.1.3", "magento/module-tax": "100.1.5", "magento/module-tax-import-export": "100.1.3", - "magento/module-theme": "100.1.10", - "magento/module-translation": "100.1.5", - "magento/module-ui": "100.1.11", + "magento/module-theme": "100.1.11", + "magento/module-translation": "100.1.6", + "magento/module-ui": "100.1.12", "magento/module-ups": "100.1.5", "magento/module-url-rewrite": "100.1.5", "magento/module-user": "100.1.5", @@ -178,11 +178,11 @@ "magento/module-webapi": "100.1.6", "magento/module-webapi-security": "100.1.3", "magento/module-weee": "100.1.3", - "magento/module-widget": "100.1.7", + "magento/module-widget": "100.1.8", "magento/module-wishlist": "100.1.8", "magento/theme-adminhtml-backend": "100.1.4", - "magento/theme-frontend-blank": "100.1.8", - "magento/theme-frontend-luma": "100.1.8", + "magento/theme-frontend-blank": "100.1.9", + "magento/theme-frontend-luma": "100.1.9", "magento/language-de_de": "100.1.2", "magento/language-en_us": "100.1.2", "magento/language-es_es": "100.1.2", @@ -190,7 +190,7 @@ "magento/language-nl_nl": "100.1.2", "magento/language-pt_br": "100.1.2", "magento/language-zh_hans_cn": "100.1.2", - "magento/framework": "100.1.13", + "magento/framework": "100.1.14", "trentrichardson/jquery-timepicker-addon": "1.4.3", "components/jquery": "1.11.0", "blueimp/jquery-file-upload": "5.6.14", diff --git a/composer.lock b/composer.lock index 251bccfdb8694..ebf61299f811f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "f1a03c3a768b9206620e20ac4a7a020f", + "content-hash": "435910f73aea6f0225ce697f397b4599", "packages": [ { "name": "braintree/braintree_php", @@ -341,16 +341,16 @@ }, { "name": "composer/spdx-licenses", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "7e111c50db92fa2ced140f5ba23b4e261bc77a30" + "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7e111c50db92fa2ced140f5ba23b4e261bc77a30", - "reference": "7e111c50db92fa2ced140f5ba23b4e261bc77a30", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b", + "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b", "shasum": "" }, "require": { @@ -398,7 +398,7 @@ "spdx", "validator" ], - "time": "2018-01-31T13:17:27+00:00" + "time": "2018-04-30T10:33:04+00:00" }, { "name": "justinrainbow/json-schema", @@ -1265,7 +1265,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.39", + "version": "v2.8.41", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1325,20 +1325,21 @@ }, { "name": "symfony/filesystem", - "version": "v3.4.8", + "version": "v3.4.11", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" + "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", - "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", + "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { @@ -1370,20 +1371,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-02-22T10:48:49+00:00" + "time": "2018-05-16T08:49:21+00:00" }, { "name": "symfony/finder", - "version": "v3.4.8", + "version": "v3.4.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "bd14efe8b1fabc4de82bf50dce62f05f9a102433" + "reference": "472a92f3df8b247b49ae364275fb32943b9656c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/bd14efe8b1fabc4de82bf50dce62f05f9a102433", - "reference": "bd14efe8b1fabc4de82bf50dce62f05f9a102433", + "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6", + "reference": "472a92f3df8b247b49ae364275fb32943b9656c6", "shasum": "" }, "require": { @@ -1419,20 +1420,75 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-04-04T05:07:11+00:00" + "time": "2018-05-16T08:49:21+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", + "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-04-30T19:57:29+00:00" }, { "name": "symfony/process", - "version": "v2.8.39", + "version": "v2.8.41", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "ee2c91470ff262b1a00aec27875d38594aa87629" + "reference": "713952f2ccbcc8342ecdbe1cb313d3e2da8aad28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/ee2c91470ff262b1a00aec27875d38594aa87629", - "reference": "ee2c91470ff262b1a00aec27875d38594aa87629", + "url": "https://api.github.com/repos/symfony/process/zipball/713952f2ccbcc8342ecdbe1cb313d3e2da8aad28", + "reference": "713952f2ccbcc8342ecdbe1cb313d3e2da8aad28", "shasum": "" }, "require": { @@ -1468,7 +1524,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-04-03T05:20:27+00:00" + "time": "2018-05-15T21:17:45+00:00" }, { "name": "tedivm/jshrink", @@ -4326,7 +4382,7 @@ }, { "name": "symfony/stopwatch", - "version": "v3.4.8", + "version": "v3.4.11", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -4375,20 +4431,21 @@ }, { "name": "symfony/yaml", - "version": "v2.8.39", + "version": "v2.8.41", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d20bd2bdee063863e426297af41eda45ccad6f7e" + "reference": "51356b7a2ff7c9fd06b2f1681cc463bb62b5c1ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d20bd2bdee063863e426297af41eda45ccad6f7e", - "reference": "d20bd2bdee063863e426297af41eda45ccad6f7e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/51356b7a2ff7c9fd06b2f1681cc463bb62b5c1ff", + "reference": "51356b7a2ff7c9fd06b2f1681cc463bb62b5c1ff", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { @@ -4420,7 +4477,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-04-08T07:53:13+00:00" + "time": "2018-05-01T22:52:40+00:00" }, { "name": "theseer/fdomdocument", diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index a42ec4231f2d7..be2c1eec5dc58 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -2,7 +2,7 @@ "name": "magento/framework", "description": "N/A", "type": "magento2-library", - "version": "100.1.13", + "version": "100.1.14", "license": [ "OSL-3.0", "AFL-3.0" From 0f3c71dc404e94d6cbca9d1fe8a4f6d2af309b56 Mon Sep 17 00:00:00 2001 From: IvanPletnyov Date: Mon, 18 Jun 2018 17:17:41 +0300 Subject: [PATCH 30/71] ENGCOM-1888: [Backport] Refactored javascript code of admin notification modal popup --- .../templates/system/messages/popup.phtml | 4 ++-- .../view/adminhtml/web/js/system/messages/popup.js | 14 ++++++++------ .../Tax/Test/Page/Adminhtml/TaxConfiguration.xml | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml index 93ae4efaa3abd..3c96ccd9a1937 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml +++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml @@ -23,8 +23,8 @@ { "[data-role=system_messages_list]": { "Magento_AdminNotification/js/system/messages/popup": { - class: 'modal-system-messages ui-popup-message' + "class":"modal-system-messages ui-popup-message" } } } - \ No newline at end of file + diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js index f3f6a5fb1a123..39c61d6e07d29 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js +++ b/app/code/Magento/AdminNotification/view/adminhtml/web/js/system/messages/popup.js @@ -1,24 +1,26 @@ /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. -*/ + */ define([ 'jquery', 'Magento_Ui/js/modal/modal' -], function ($) { +], function ($, modal) { 'use strict'; return function (data, element) { - if (this.modal) { - this.modal.html($(element).html()); + + if (modal.modal) { + modal.modal.html($(element).html()); } else { - this.modal = $(element).modal({ + modal.modal = $(element).modal({ modalClass: data.class, type: 'popup', buttons: [] }); } - this.modal.modal('openModal'); + + modal.modal.modal('openModal'); }; }); diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxConfiguration.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxConfiguration.xml index 037d6f744d067..9bcc875968255 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxConfiguration.xml +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxConfiguration.xml @@ -7,7 +7,7 @@ --> - + From 39f6740fa27a1f8d4e4dd71bad80bdb24b68f555 Mon Sep 17 00:00:00 2001 From: tejash Date: Wed, 13 Jun 2018 10:13:13 +0530 Subject: [PATCH 31/71] Navigation dropdown caret icon. --- lib/web/css/source/lib/_navigation.less | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/lib/web/css/source/lib/_navigation.less b/lib/web/css/source/lib/_navigation.less index 56aa2e7ef86b9..b2ed4352a334a 100644 --- a/lib/web/css/source/lib/_navigation.less +++ b/lib/web/css/source/lib/_navigation.less @@ -355,6 +355,25 @@ overflow: visible !important; } + &.parent { + > .level-top { + padding-right: 20px; + + > .ui-menu-icon { + position: absolute; + right: 0; + + .lib-icon-font( + @icon-down, + @_icon-font-size: 12px, + @_icon-font-line-height: 20px, + @_icon-font-text-hide: true, + @_icon-font-position: after + ); + } + } + } + .submenu { .lib-css(background, @_submenu-background-color); .lib-css(border, @_submenu-border-width @_submenu-border-style @_submenu-border-color); @@ -414,6 +433,26 @@ left: auto !important; right: 100%; } + + li { + margin: 0; + &.parent { + > a { + > .ui-menu-icon { + position: absolute; + right: 3px; + + .lib-icon-font( + @icon-next, + @_icon-font-size: 12px, + @_icon-font-line-height: 20px, + @_icon-font-text-hide: true, + @_icon-font-position: after + ); + } + } + } + } } &.more { From d09dbe43f20e8a1ef8b943a6d4db181d780860df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karla=20Saarem=C3=A4e?= Date: Sat, 16 Jun 2018 19:48:17 +0300 Subject: [PATCH 32/71] Added translation possibility for moreButtonText --- .../Magento/Swatches/view/frontend/web/js/swatch-renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js index 05757825b205c..00f7f5d0e44f7 100644 --- a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js +++ b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js @@ -235,7 +235,7 @@ define([ controlLabelId: '', // text for more button - moreButtonText: 'More', + moreButtonText: $t('More'), // Callback url for media mediaCallback: '', From 957cb34afb757ab95e5b4fd5713834c1df2a67a8 Mon Sep 17 00:00:00 2001 From: IvanPletnyov Date: Tue, 19 Jun 2018 14:47:52 +0300 Subject: [PATCH 33/71] ENGCOM-2031: [Backport] #14063 - Wrong invoice prefix in multistore setup due to default store id (fix order increment id) --- .../Quote/Model/ResourceModel/Quote.php | 4 +- .../Unit/Model/ResourceModel/QuoteTest.php | 99 +++++++++++++++++++ .../Backend/SubtractQtyFromQuotesObserver.php | 2 +- .../SubtractQtyFromQuotesObserverTest.php | 6 +- 4 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index 7065e8bb51b40..06d2960bc0384 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -171,7 +171,7 @@ public function getReservedOrderId($quote) { return $this->sequenceManager->getSequence( \Magento\Sales\Model\Order::ENTITY, - $quote->getStore()->getGroup()->getDefaultStoreId() + $quote->getStoreId() ) ->getNextValue(); } @@ -236,7 +236,7 @@ public function markQuotesRecollectOnCatalogRules() * @param \Magento\Catalog\Model\Product $product * @return $this */ - public function substractProductFromQuotes($product) + public function subtractProductFromQuotes($product) { $productId = (int)$product->getId(); if (!$productId) { diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php new file mode 100644 index 0000000000000..1bd9b2a5dc5ca --- /dev/null +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php @@ -0,0 +1,99 @@ +getMockBuilder(Context::class) + ->disableOriginalConstructor() + ->getMock(); + $snapshot = $this->getMockBuilder(Snapshot::class) + ->disableOriginalConstructor() + ->getMock(); + $relationComposite = $this->getMockBuilder(RelationComposite::class) + ->disableOriginalConstructor() + ->getMock(); + $this->quoteMock = $this->getMockBuilder(Quote::class) + ->disableOriginalConstructor() + ->getMock(); + $this->sequenceManagerMock = $this->getMockBuilder(Manager::class) + ->disableOriginalConstructor() + ->getMock(); + $this->sequenceMock = $this->getMockBuilder(SequenceInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $this->quote = new \Magento\Quote\Model\ResourceModel\Quote( + $context, + $snapshot, + $relationComposite, + $this->sequenceManagerMock, + null + ); + } + + /** + * @param $entityType + * @param $storeId + * @param $reservedOrderId + * @dataProvider getReservedOrderIdDataProvider + */ + public function testGetReservedOrderId($entityType, $storeId, $reservedOrderId) + { + $this->sequenceManagerMock->expects($this->once()) + ->method('getSequence') + ->with($entityType, $storeId) + ->willReturn($this->sequenceMock); + $this->quoteMock->expects($this->once()) + ->method('getStoreId') + ->willReturn($storeId); + $this->sequenceMock->expects($this->once()) + ->method('getNextValue') + ->willReturn($reservedOrderId); + $this->assertEquals($reservedOrderId, $this->quote->getReservedOrderId($this->quoteMock)); + } + + /** + * @return array + */ + public function getReservedOrderIdDataProvider() + { + return [ + [\Magento\Sales\Model\Order::ENTITY, 1, '1000000001'], + [\Magento\Sales\Model\Order::ENTITY, 2, '2000000001'], + [\Magento\Sales\Model\Order::ENTITY, 3, '3000000001'] + ]; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php index 775a7dab95cfe..cd8c705750d6c 100644 --- a/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php +++ b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php @@ -31,6 +31,6 @@ public function __construct(\Magento\Quote\Model\ResourceModel\Quote $quote) public function execute(\Magento\Framework\Event\Observer $observer) { $product = $observer->getEvent()->getProduct(); - $this->_quote->substractProductFromQuotes($product); + $this->_quote->subtractProductFromQuotes($product); } } diff --git a/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php index 1208e3a755543..8e2174775b117 100644 --- a/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php @@ -15,12 +15,12 @@ class SubtractQtyFromQuotesObserverTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Quote\Model\ResourceModel\Quote|\PHPUnit_Framework_MockObject_MockObject */ protected $_quoteMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject */ protected $_observerMock; @@ -54,7 +54,7 @@ public function testSubtractQtyFromQuotes() false ); $this->_eventMock->expects($this->once())->method('getProduct')->will($this->returnValue($productMock)); - $this->_quoteMock->expects($this->once())->method('substractProductFromQuotes')->with($productMock); + $this->_quoteMock->expects($this->once())->method('subtractProductFromQuotes')->with($productMock); $this->_model->execute($this->_observerMock); } } From a04191663bfdfe3b25fcce8fa63cdf56386f329f Mon Sep 17 00:00:00 2001 From: OlgaVasyltsun Date: Tue, 19 Jun 2018 17:17:04 +0300 Subject: [PATCH 34/71] MAGETWO-90840: Can't save customer address on adminhtml when country restriction is enabled --- .../Model/ResourceModel/AddressRepository.php | 45 ++++++++++++- .../ResourceModel/AddressRepositoryTest.php | 63 ++++++++++--------- 2 files changed, 77 insertions(+), 31 deletions(-) diff --git a/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php b/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php index b1c54a1f01260..043a6c01abfea 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php +++ b/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php @@ -13,6 +13,8 @@ use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Api\SortOrder; use Magento\Framework\Exception\InputException; +use Magento\Framework\App\ObjectManager; +use Magento\Store\Model\ScopeInterface; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -61,6 +63,16 @@ class AddressRepository implements \Magento\Customer\Api\AddressRepositoryInterf */ protected $extensionAttributesJoinProcessor; + /** + * @var \Magento\Directory\Model\AllowedCountries + */ + private $allowedCountriesReader; + + /** + * @var \Magento\Customer\Model\Config\Share + */ + private $shareConfig; + /** * @param \Magento\Customer\Model\AddressFactory $addressFactory * @param \Magento\Customer\Model\AddressRegistry $addressRegistry @@ -70,6 +82,10 @@ class AddressRepository implements \Magento\Customer\Api\AddressRepositoryInterf * @param \Magento\Customer\Api\Data\AddressSearchResultsInterfaceFactory $addressSearchResultsFactory * @param \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressCollectionFactory * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor + * @param \Magento\Directory\Model\AllowedCountries|null $allowedCountriesReader + * @param \Magento\Customer\Model\Config\Share|null $shareConfig + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Customer\Model\AddressFactory $addressFactory, @@ -79,7 +95,9 @@ public function __construct( \Magento\Directory\Helper\Data $directoryData, \Magento\Customer\Api\Data\AddressSearchResultsInterfaceFactory $addressSearchResultsFactory, \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressCollectionFactory, - \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor + \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor, + \Magento\Directory\Model\AllowedCountries $allowedCountriesReader = null, + \Magento\Customer\Model\Config\Share $shareConfig = null ) { $this->addressFactory = $addressFactory; $this->addressRegistry = $addressRegistry; @@ -89,6 +107,10 @@ public function __construct( $this->addressSearchResultsFactory = $addressSearchResultsFactory; $this->addressCollectionFactory = $addressCollectionFactory; $this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor; + $this->allowedCountriesReader = $allowedCountriesReader + ?: ObjectManager::getInstance()->get(\Magento\Directory\Model\AllowedCountries::class); + $this->shareConfig = $shareConfig + ?: ObjectManager::getInstance()->get(\Magento\Customer\Model\Config\Share::class); } /** @@ -290,7 +312,7 @@ private function _validate(CustomerAddressModel $customerAddressModel) $exception->addError(__('%fieldName is a required field.', ['fieldName' => 'countryId'])); } else { //Checking if such country exists. - if (!in_array($countryId, $this->directoryData->getCountryCollection()->getAllIds(), true)) { + if (!in_array($countryId, $this->getWebsiteAllowedCountries($customerAddressModel), true)) { $exception->addError( __( 'Invalid value of "%value" provided for the %fieldName field.', @@ -334,4 +356,23 @@ private function _validate(CustomerAddressModel $customerAddressModel) return $exception; } + + /** + * Return allowed counties per website. + * + * @param \Magento\Customer\Model\Address $customerAddressModel + * @return array + */ + private function getWebsiteAllowedCountries(\Magento\Customer\Model\Address $customerAddressModel): array + { + $websiteId = null; + + if (!$this->shareConfig->isGlobalScope()) { + $websiteId = $customerAddressModel->getCustomer() + ? $customerAddressModel->getCustomer()->getWebsiteId() + : null; + } + + return $this->allowedCountriesReader->getAllowedCountries(ScopeInterface::SCOPE_WEBSITE, $websiteId); + } } diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php index 8df72f96f93c7..338f6d1dffed5 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php @@ -6,8 +6,8 @@ namespace Magento\Customer\Test\Unit\Model\ResourceModel; use Magento\Customer\Api\Data\AddressInterface as AddressData; -use Magento\Directory\Model\ResourceModel\Country\Collection as Countries; use Magento\Framework\Exception\InputException; +use Magento\Store\Model\ScopeInterface; /** * Unit test for Magento\Customer\Model\ResourceModel\AddressRepository @@ -71,6 +71,16 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase */ protected $repository; + /** + * @var \Magento\Directory\Model\AllowedCountries|\PHPUnit_Framework_MockObject_MockObject + */ + private $allowedCountriesReaderMock; + + /** + * @var \Magento\Customer\Model\Config\Share|\PHPUnit_Framework_MockObject_MockObject + */ + private $shareConfigMock; + protected function setUp() { $this->addressFactory = $this->getMock( @@ -137,6 +147,26 @@ protected function setUp() false ); + $this->allowedCountriesReaderMock = $this->getMock( + \Magento\Directory\Model\AllowedCountries::class, + ['getAllowedCountries'], + [], + '', + false + ); + $this->shareConfigMock = $this->getMock( + \Magento\Customer\Model\Config\Share::class, + ['isGlobalScope'], + [], + '', + false + ); + $this->shareConfigMock->method('isGlobalScope')->willReturn(false); + $this->allowedCountriesReaderMock + ->method('getAllowedCountries') + ->with(ScopeInterface::SCOPE_WEBSITE, null) + ->willReturn(['1', '2']); + $this->repository = new \Magento\Customer\Model\ResourceModel\AddressRepository( $this->addressFactory, $this->addressRegistry, @@ -145,7 +175,9 @@ protected function setUp() $this->directoryData, $this->addressSearchResultsFactory, $this->addressCollectionFactory, - $this->extensionAttributesJoinProcessor + $this->extensionAttributesJoinProcessor, + $this->allowedCountriesReaderMock, + $this->shareConfigMock ); } @@ -315,15 +347,6 @@ public function testSaveWithInvalidRegion() ->method('getRegion') ->willReturn(''); - /** @var \PHPUnit_Framework_MockObject_MockObject $countryCollection */ - $countryCollection = $this->getMockBuilder(Countries::class) - ->disableOriginalConstructor() - ->getMock(); - $countryCollection->expects($this->once())->method('getAllIds')->willReturn(['1', '2']); - $this->directoryData->expects($this->once()) - ->method('getCountryCollection') - ->willReturn($countryCollection); - $this->repository->save($customerAddress); } @@ -408,15 +431,6 @@ public function testSaveWithInvalidRegionId() ->method('getRegion') ->willReturn(''); - /** @var \PHPUnit_Framework_MockObject_MockObject $countryCollection */ - $countryCollection = $this->getMockBuilder(Countries::class) - ->disableOriginalConstructor() - ->getMock(); - $countryCollection->expects($this->once())->method('getAllIds')->willReturn(['1', '2']); - $this->directoryData->expects($this->once()) - ->method('getCountryCollection') - ->willReturn($countryCollection); - $this->repository->save($customerAddress); } @@ -714,15 +728,6 @@ private function prepareAddressData($countryId, $regionId) $countryModel->expects($this->any())->method('getRegionCollection')->willReturn($regionCollection); $regionCollection->expects($this->any())->method('getAllIds')->willReturn(['3', '4']); - /** @var \PHPUnit_Framework_MockObject_MockObject $countryCollection */ - $countryCollection = $this->getMockBuilder(Countries::class) - ->disableOriginalConstructor() - ->getMock(); - $countryCollection->expects($this->once())->method('getAllIds')->willReturn(['1', '2']); - $this->directoryData->expects($this->once()) - ->method('getCountryCollection') - ->willReturn($countryCollection); - return $customerAddress; } } From be0f9bcacec24c78955d5773886ab942722f1c20 Mon Sep 17 00:00:00 2001 From: "andrea.gaspardo@webformat.com" Date: Sat, 26 May 2018 14:59:59 +0200 Subject: [PATCH 35/71] magento/magento2#15255 unlock customer after password reset --- app/code/Magento/Customer/Model/AccountManagement.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php index 1b309635e329d..931d58bec2b18 100644 --- a/app/code/Magento/Customer/Model/AccountManagement.php +++ b/app/code/Magento/Customer/Model/AccountManagement.php @@ -586,6 +586,7 @@ public function resetPassword($email, $resetToken, $newPassword) $customerSecure->setRpToken(null); $customerSecure->setRpTokenCreatedAt(null); $customerSecure->setPasswordHash($this->createPasswordHash($newPassword)); + $this->getAuthentication()->unlock($customer->getId()); $this->sessionManager->destroy(); $this->destroyCustomerSessions($customer->getId()); $this->customerRepository->save($customer); From a6b0d37254da9825fa66db9959586dd4797d1c70 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Wed, 20 Jun 2018 11:57:48 +0300 Subject: [PATCH 36/71] Fixed static test failures --- app/code/Magento/Quote/Model/ResourceModel/Quote.php | 11 +++++++++++ .../Quote/Test/Unit/Model/ResourceModel/QuoteTest.php | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index 06d2960bc0384..afa76aba5366e 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -230,6 +230,17 @@ public function markQuotesRecollectOnCatalogRules() return $this; } + /** + * @param \Magento\Catalog\Model\Product $product + * @return Quote + * @deprecated + * @see subtractProductFromQuotes + */ + public function substractProductFromQuotes($product) + { + return $this->subtractProductFromQuotes($product); + } + /** * Subtract product from all quotes quantities * diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php index 1bd9b2a5dc5ca..915241f5721e1 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php @@ -19,14 +19,17 @@ class QuoteTest extends \PHPUnit_Framework_TestCase * @var Quote|\PHPUnit_Framework_MockObject_MockObject */ private $quoteMock; + /** * @var Manager|\PHPUnit_Framework_MockObject_MockObject */ private $sequenceManagerMock; + /** * @var SequenceInterface|\PHPUnit_Framework_MockObject_MockObject */ private $sequenceMock; + /** * @var \Magento\Quote\Model\ResourceModel\Quote */ @@ -96,4 +99,4 @@ public function getReservedOrderIdDataProvider() [\Magento\Sales\Model\Order::ENTITY, 3, '3000000001'] ]; } -} \ No newline at end of file +} From c9e5239a2786b1169f6f06f61f9589b8078c0865 Mon Sep 17 00:00:00 2001 From: Chirag Matholiya Date: Wed, 20 Jun 2018 15:39:19 +0530 Subject: [PATCH 37/71] Fix duplicate element id issue. --- .../view/frontend/web/template/gift-message-form.html | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/GiftMessage/view/frontend/web/template/gift-message-form.html b/app/code/Magento/GiftMessage/view/frontend/web/template/gift-message-form.html index 20739f621ecff..15a36cc0e977a 100644 --- a/app/code/Magento/GiftMessage/view/frontend/web/template/gift-message-form.html +++ b/app/code/Magento/GiftMessage/view/frontend/web/template/gift-message-form.html @@ -12,26 +12,24 @@
-
-
@@ -46,7 +44,6 @@
- From 67a9e13ae7472a66cafb84b5614cfd511aee2b8c Mon Sep 17 00:00:00 2001 From: vgelani Date: Wed, 20 Jun 2018 16:32:16 +0530 Subject: [PATCH 38/71] Refactor validate code in Tax module --- .../adminhtml/templates/class/page/edit.phtml | 14 +++++++------- .../Magento/Tax/view/adminhtml/web/js/validate.js | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 app/code/Magento/Tax/view/adminhtml/web/js/validate.js diff --git a/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml index 32f692c32fccf..2170b3ccd9a83 100644 --- a/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml +++ b/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml @@ -11,10 +11,10 @@ getSaveButtonHtml(); ?> getRenameFormHtml(); ?> - + \ No newline at end of file diff --git a/app/code/Magento/Tax/view/adminhtml/web/js/validate.js b/app/code/Magento/Tax/view/adminhtml/web/js/validate.js new file mode 100644 index 0000000000000..a49f199ba56b6 --- /dev/null +++ b/app/code/Magento/Tax/view/adminhtml/web/js/validate.js @@ -0,0 +1,15 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'mage/mage' +], function (jQuery) { + 'use strict'; + + return function (data, element) { + jQuery(element).mage('form').mage('validation'); + }; +}); From c70863833664043cab09854cea9cca04fb44a54a Mon Sep 17 00:00:00 2001 From: vgelani Date: Wed, 20 Jun 2018 18:51:07 +0530 Subject: [PATCH 39/71] Removed commented line --- .../Sales/Block/Adminhtml/Order/Create/Totals/Discount.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php index cdeb596a54ac7..b28dbda5f3810 100644 --- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php +++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php @@ -15,8 +15,6 @@ */ class Discount extends \Magento\Sales\Block\Adminhtml\Order\Create\Totals\DefaultTotals { - //protected $_template = 'tax/checkout/subtotal.phtml'; - /** * Tax config * From 2b27c951c07d29f12f98edd0f8d94fcdca6f90a2 Mon Sep 17 00:00:00 2001 From: Myroslav Dobra Date: Wed, 20 Jun 2018 18:17:20 +0300 Subject: [PATCH 40/71] MAGETWO-90840: Can't save customer address on adminhtml when country restriction is enabled --- .../Magento/Customer/Model/ResourceModel/AddressRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php b/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php index 043a6c01abfea..3b67c0cc0694e 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php +++ b/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php @@ -363,7 +363,7 @@ private function _validate(CustomerAddressModel $customerAddressModel) * @param \Magento\Customer\Model\Address $customerAddressModel * @return array */ - private function getWebsiteAllowedCountries(\Magento\Customer\Model\Address $customerAddressModel): array + private function getWebsiteAllowedCountries(\Magento\Customer\Model\Address $customerAddressModel) { $websiteId = null; From ce38bc87478f629ed7158df526f1977f2e3d76ef Mon Sep 17 00:00:00 2001 From: Vasilii Burlacu Date: Wed, 20 Jun 2018 22:52:50 +0300 Subject: [PATCH 41/71] MAGETWO-61209: Fixed issue with mage/calendar when setting `numberOfMonths` to show more than 1 month (cherry picked from commit 54e1a715be3ef0bdfdb45b6fde99912d6e19fca6) --- lib/web/mage/calendar.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/web/mage/calendar.js b/lib/web/mage/calendar.js index 11186b5761efd..de4292b56e684 100644 --- a/lib/web/mage/calendar.js +++ b/lib/web/mage/calendar.js @@ -238,12 +238,14 @@ firstDay = parseInt(this._get(inst, 'firstDay'), 10); firstDay = isNaN(firstDay) ? 0 : firstDay; - for (row; row < numMonths[0]; row++) { + for (row = 0; row < numMonths[0]; row++) { this.maxRows = 4; - for (col; col < numMonths[1]; col++) { + for (col = 0; col < numMonths[1]; col++) { selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + calender = ''; + if (isMultiMonth) { calender += '
' + this._get(inst, 'weekHeader') + '' : ''; - for (dow; dow < 7; dow++) { // days of the week + for (dow = 0; dow < 7; dow++) { // days of the week day = (dow + firstDay) % 7; thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + @@ -291,7 +293,7 @@ this.maxRows = numRows; printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); - for (dRow; dRow < numRows; dRow++) { // create date picker rows + for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows calender += ''; tbody = !showWeek ? '' : '' + this._get(inst, 'calculateWeek')(printDate) + ''; From 5064cb838fe3173299bd9e3086657f2e3c7e2179 Mon Sep 17 00:00:00 2001 From: vgelani Date: Thu, 21 Jun 2018 06:25:00 +0530 Subject: [PATCH 42/71] fixed Submitting search form (mini) with enter key fires event handle --- app/code/Magento/Search/view/frontend/web/form-mini.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Search/view/frontend/web/form-mini.js b/app/code/Magento/Search/view/frontend/web/form-mini.js index 51398168c6e19..02a8f618a2298 100644 --- a/app/code/Magento/Search/view/frontend/web/form-mini.js +++ b/app/code/Magento/Search/view/frontend/web/form-mini.js @@ -207,6 +207,7 @@ define([ break; case $.ui.keyCode.ENTER: this.searchForm.trigger('submit'); + e.preventDefault(); break; case $.ui.keyCode.DOWN: if (this.responseList.indexList) { From c601b844777251ce08f402c1cc0d6ebf67f14428 Mon Sep 17 00:00:00 2001 From: Chirag Matholiya Date: Thu, 21 Jun 2018 14:53:11 +0530 Subject: [PATCH 43/71] Fixes overlapping issue on category page. --- .../luma/Magento_Catalog/web/css/source/module/_listings.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_listings.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_listings.less index 7acb082bdff65..84f116c2c9547 100644 --- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_listings.less +++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_listings.less @@ -425,7 +425,7 @@ .product-item { margin-left: calc(~'(100% - 4 * 24.439%) / 3'); - padding: 0; + padding: 5px; width: 24.439%; &:nth-child(4n + 1) { From 96af9cfe69ee2d0ecb558e5205621e2cc4902f01 Mon Sep 17 00:00:00 2001 From: Piyush Dankhara Date: Thu, 21 Jun 2018 18:19:20 +0530 Subject: [PATCH 44/71] Improve trim email address in customer account login page --- .../view/frontend/templates/form/login.phtml | 11 +--- .../view/frontend/web/js/trim-username.js | 65 ------------------- lib/web/mage/trim-input.js | 60 +++++++++++++++++ 3 files changed, 61 insertions(+), 75 deletions(-) delete mode 100644 app/code/Magento/Customer/view/frontend/web/js/trim-username.js create mode 100644 lib/web/mage/trim-input.js diff --git a/app/code/Magento/Customer/view/frontend/templates/form/login.phtml b/app/code/Magento/Customer/view/frontend/templates/form/login.phtml index 241ab1451238a..4b041f4052e7e 100644 --- a/app/code/Magento/Customer/view/frontend/templates/form/login.phtml +++ b/app/code/Magento/Customer/view/frontend/templates/form/login.phtml @@ -32,7 +32,7 @@
@@ -51,12 +51,3 @@
- diff --git a/app/code/Magento/Customer/view/frontend/web/js/trim-username.js b/app/code/Magento/Customer/view/frontend/web/js/trim-username.js deleted file mode 100644 index 1b6aab6086853..0000000000000 --- a/app/code/Magento/Customer/view/frontend/web/js/trim-username.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -define([ - 'jquery' -], function ($) { - 'use strict'; - - $.widget('mage.trimUsername', { - options: { - cache: {}, - formSelector: 'form', - emailSelector: 'input[type="email"]' - }, - - /** - * Widget initialization - * @private - */ - _create: function () { - // We need to look outside the module for backward compatibility, since someone can already use the module. - // @todo Narrow this selector in 2.3 so it doesn't accidentally finds the email field from the - // newsletter email field or any other "email" field. - this.options.cache.email = $(this.options.formSelector).find(this.options.emailSelector); - this._bind(); - }, - - /** - * Event binding, will monitor change, keyup and paste events. - * @private - */ - _bind: function () { - if (this.options.cache.email.length) { - this._on(this.options.cache.email, { - 'change': this._trimUsername, - 'keyup': this._trimUsername, - 'paste': this._trimUsername - }); - } - }, - - /** - * Trim username - * @private - */ - _trimUsername: function () { - var username = this._getUsername().trim(); - - this.options.cache.email.val(username); - }, - - /** - * Get username value - * @returns {*} - * @private - */ - _getUsername: function () { - return this.options.cache.email.val(); - } - }); - - return $.mage.trimUsername; -}); diff --git a/lib/web/mage/trim-input.js b/lib/web/mage/trim-input.js new file mode 100644 index 0000000000000..678192dcf61ac --- /dev/null +++ b/lib/web/mage/trim-input.js @@ -0,0 +1,60 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery' +], function ($) { + 'use strict'; + + $.widget('mage.trimInput', { + options: { + cache: {} + }, + + /** + * Widget initialization + * @private + */ + _create: function () { + this.options.cache.input = $(this.element); + this._bind(); + }, + + /** + * Event binding, will monitor change, keyup and paste events. + * @private + */ + _bind: function () { + if (this.options.cache.input.length) { + this._on(this.options.cache.input, { + 'change': this._trimInput, + 'keyup': this._trimInput, + 'paste': this._trimInput + }); + } + }, + + /** + * Trim value + * @private + */ + _trimInput: function () { + var input = this._getInputValue().trim(); + + this.options.cache.input.val(input); + }, + + /** + * Get input value + * @returns {*} + * @private + */ + _getInputValue: function () { + return this.options.cache.input.val(); + } + }); + + return $.mage.trimInput; +}); From 5e58bacfe85e0af80620417c27d8dbd2294319bd Mon Sep 17 00:00:00 2001 From: Piyush Dankhara Date: Thu, 21 Jun 2018 18:24:03 +0530 Subject: [PATCH 45/71] Trim email address in customer account create page --- .../Customer/view/frontend/templates/form/register.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/view/frontend/templates/form/register.phtml b/app/code/Magento/Customer/view/frontend/templates/form/register.phtml index c59c16ee3601c..516c5aa971ab8 100644 --- a/app/code/Magento/Customer/view/frontend/templates/form/register.phtml +++ b/app/code/Magento/Customer/view/frontend/templates/form/register.phtml @@ -134,7 +134,7 @@
- +
From 4ec83ec9aac74ef120d15a3f95c3868138eda3c9 Mon Sep 17 00:00:00 2001 From: Piyush Dankhara Date: Thu, 21 Jun 2018 18:26:31 +0530 Subject: [PATCH 46/71] Trim email address in customer authentication popup --- .../Customer/view/frontend/web/js/model/authentication-popup.js | 2 +- .../view/frontend/web/template/authentication-popup.html | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js b/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js index fa62ebf5f9d48..9739fc1226917 100644 --- a/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js +++ b/app/code/Magento/Customer/view/frontend/web/js/model/authentication-popup.js @@ -31,7 +31,7 @@ define( /** Show login popup window */ showModal: function () { - $(this.modalWindow).modal('openModal'); + $(this.modalWindow).modal('openModal').trigger('contentUpdated'); } } } diff --git a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html index 046cc38d39149..f412d3d15d11f 100644 --- a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html +++ b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html @@ -60,6 +60,7 @@ id="email" type="email" class="input-text" + data-mage-init='{"mage/trim-input":{}}' data-bind="attr: {autocomplete: autocomplete}" data-validate="{required:true, 'validate-email':true}">
From cbbe04f22491d8d6d8a939be5d74014b3eedcf97 Mon Sep 17 00:00:00 2001 From: Sviatoslav Mankivskyi Date: Thu, 21 Jun 2018 14:02:05 -0500 Subject: [PATCH 47/71] DEVOPS-2632: Sample Data Builds Migrated from Bamboo --- dev/tests/functional/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index 7f9805767240a..aebaa3c01f640 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -1,6 +1,6 @@ { "require": { - "magento/mtf": "2.1.x-dev", + "magento/mtf": "2.1.1.x-dev", "php": "~5.6.5|7.0.2|7.0.4|~7.0.6", "phpunit/phpunit": "4.1.0", "phpunit/phpunit-selenium": ">=1.2" From 85eae4fc26036611a7f60930ca3288c8655759ea Mon Sep 17 00:00:00 2001 From: vgelani Date: Tue, 19 Jun 2018 19:10:19 +0530 Subject: [PATCH 48/71] Fixed typo error --- app/code/Magento/Paypal/view/frontend/web/order-review.js | 4 ++-- lib/web/modernizr/modernizr.js | 2 +- lib/web/tiny_mce/classes/Formatter.js | 2 +- lib/web/tiny_mce/classes/dom/DOMUtils.js | 2 +- lib/web/tiny_mce/tiny_mce_jquery_src.js | 2 +- lib/web/tiny_mce/tiny_mce_prototype_src.js | 2 +- lib/web/tiny_mce/tiny_mce_src.js | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Paypal/view/frontend/web/order-review.js b/app/code/Magento/Paypal/view/frontend/web/order-review.js index eb9319aa98cd2..524a604b6763d 100644 --- a/app/code/Magento/Paypal/view/frontend/web/order-review.js +++ b/app/code/Magento/Paypal/view/frontend/web/order-review.js @@ -88,7 +88,7 @@ define([ }, /** - * trigger change for the update of shippping methods from server + * trigger change for the update of shipping methods from server */ _updateOrderHandler: function () { $(this.options.shippingSelector).trigger('change'); @@ -246,7 +246,7 @@ define([ this._updateOrderSubmit(true); this._toggleButton(this.options.updateOrderSelector, true); - // form data and callBack updated based on the shippping Form element + // form data and callBack updated based on the shipping Form element if (this.isShippingSubmitForm) { formData = $(this.options.shippingSubmitFormSelector).serialize() + "&isAjax=true"; callBackResponseHandler = function (response) { diff --git a/lib/web/modernizr/modernizr.js b/lib/web/modernizr/modernizr.js index 9b4f68aaaaaa9..0833cfb105cee 100644 --- a/lib/web/modernizr/modernizr.js +++ b/lib/web/modernizr/modernizr.js @@ -910,7 +910,7 @@ window.Modernizr = (function( window, document, undefined ) { bool = inputElem.checkValidity && inputElem.checkValidity() === false; } else { - // If the upgraded input compontent rejects the :) text, we got a winner + // If the upgraded input component rejects the :) text, we got a winner bool = inputElem.value != smile; } } diff --git a/lib/web/tiny_mce/classes/Formatter.js b/lib/web/tiny_mce/classes/Formatter.js index 0cbca75ec504b..5f05d3f3015ad 100644 --- a/lib/web/tiny_mce/classes/Formatter.js +++ b/lib/web/tiny_mce/classes/Formatter.js @@ -445,7 +445,7 @@ childCount = getChildCount(node); // Remove empty nodes but only if there is multiple wrappers and they are not block - // elements so never remove single

since that would remove the currrent empty block element where the caret is at + // elements so never remove single

since that would remove the current empty block element where the caret is at if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { dom.remove(node, 1); return; diff --git a/lib/web/tiny_mce/classes/dom/DOMUtils.js b/lib/web/tiny_mce/classes/dom/DOMUtils.js index 783dbea1cacb9..eb8b4b7ab5d78 100644 --- a/lib/web/tiny_mce/classes/dom/DOMUtils.js +++ b/lib/web/tiny_mce/classes/dom/DOMUtils.js @@ -1106,7 +1106,7 @@ /** * Returns a unique id. This can be useful when generating elements on the fly. - * This method will not check if the element allready exists. + * This method will not check if the element already exists. * * @method uniqueId * @param {String} p Optional prefix to add infront of all ids defaults to "mce_". diff --git a/lib/web/tiny_mce/tiny_mce_jquery_src.js b/lib/web/tiny_mce/tiny_mce_jquery_src.js index 0c03d0d0ade44..8b474eee25796 100644 --- a/lib/web/tiny_mce/tiny_mce_jquery_src.js +++ b/lib/web/tiny_mce/tiny_mce_jquery_src.js @@ -14451,7 +14451,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', { childCount = getChildCount(node); // Remove empty nodes but only if there is multiple wrappers and they are not block - // elements so never remove single

since that would remove the currrent empty block element where the caret is at + // elements so never remove single

since that would remove the current empty block element where the caret is at if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { dom.remove(node, 1); return; diff --git a/lib/web/tiny_mce/tiny_mce_prototype_src.js b/lib/web/tiny_mce/tiny_mce_prototype_src.js index 0eb43989cb919..b6f9a42b48e7e 100644 --- a/lib/web/tiny_mce/tiny_mce_prototype_src.js +++ b/lib/web/tiny_mce/tiny_mce_prototype_src.js @@ -15301,7 +15301,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', { childCount = getChildCount(node); // Remove empty nodes but only if there is multiple wrappers and they are not block - // elements so never remove single

since that would remove the currrent empty block element where the caret is at + // elements so never remove single

since that would remove the current empty block element where the caret is at if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { dom.remove(node, 1); return; diff --git a/lib/web/tiny_mce/tiny_mce_src.js b/lib/web/tiny_mce/tiny_mce_src.js index 7189ca9e1592d..e64998971ef7f 100644 --- a/lib/web/tiny_mce/tiny_mce_src.js +++ b/lib/web/tiny_mce/tiny_mce_src.js @@ -15275,7 +15275,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', { childCount = getChildCount(node); // Remove empty nodes but only if there is multiple wrappers and they are not block - // elements so never remove single

since that would remove the currrent empty block element where the caret is at + // elements so never remove single

since that would remove the current empty block element where the caret is at if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { dom.remove(node, 1); return; From b358efaaf53fe052a025bc328e9588667be77c35 Mon Sep 17 00:00:00 2001 From: Sviatoslav Mankivskyi Date: Fri, 22 Jun 2018 11:42:21 -0500 Subject: [PATCH 49/71] DEVOPS-2632: Sample Data Builds Migrated from Bamboo --- dev/tests/functional/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index aebaa3c01f640..7f9805767240a 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -1,6 +1,6 @@ { "require": { - "magento/mtf": "2.1.1.x-dev", + "magento/mtf": "2.1.x-dev", "php": "~5.6.5|7.0.2|7.0.4|~7.0.6", "phpunit/phpunit": "4.1.0", "phpunit/phpunit-selenium": ">=1.2" From d8cab67cfe836de3cf1156dc492a8cc28f0899f6 Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza Date: Fri, 22 Jun 2018 18:43:05 +0200 Subject: [PATCH 50/71] Added integration test for checking admin login attempts cleanup --- .../ResetAttemptForBackendObserverTest.php | 58 +++++++++++++++++++ .../Captcha/_files/failed_logins_backend.php | 16 +++++ .../_files/failed_logins_backend_rollback.php | 16 +++++ 3 files changed, 90 insertions(+) create mode 100644 dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php create mode 100644 dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php b/dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php new file mode 100644 index 0000000000000..ef28eef8531ef --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Captcha/Observer/ResetAttemptForBackendObserverTest.php @@ -0,0 +1,58 @@ +objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoDataFixture Magento/Captcha/_files/failed_logins_backend.php + */ + public function testLoginAttemptsRemovedAfterSuccessfulLogin() + { + $login = 'mageadmin'; + $userFactory = $this->objectManager->get(UserFactory::class); + $captchaLogFactory = $this->objectManager->get(LogFactory::class); + $eventManager = $this->objectManager->get(ManagerInterface::class); + + /** @var User $user */ + $user = $userFactory->create(); + $user->setUserName($login); + + $eventManager->dispatch( + 'backend_auth_user_login_success', + ['user' => $user] + ); + + /** + * @var CaptchaLog $captchaLog + */ + $captchaLog = $captchaLogFactory->create(); + + self::assertEquals(0, $captchaLog->countAttemptsByUserLogin($login)); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php new file mode 100644 index 0000000000000..ff2483e1ceaf7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend.php @@ -0,0 +1,16 @@ +get(LogFactory::class); + +/** @var Log $captchaLog */ +$captchaLog = $logFactory->create(); +$captchaLog->logAttempt('mageadmin'); diff --git a/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php new file mode 100644 index 0000000000000..9c05a4c4c04a5 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Captcha/_files/failed_logins_backend_rollback.php @@ -0,0 +1,16 @@ +get(LogFactory::class); + +/** @var Log $captchaLog */ +$captchaLog = $logFactory->create(); +$captchaLog->deleteUserAttempts('mageadmin'); From 1440b232bb04649a759d02d3d97b19a45f39683f Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Fri, 22 Jun 2018 20:52:46 +0300 Subject: [PATCH 51/71] Fixed static test failures --- .../Magento/Tax/view/adminhtml/templates/class/page/edit.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml index 2170b3ccd9a83..bb8ac51236d2c 100644 --- a/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml +++ b/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml @@ -13,7 +13,7 @@ getRenameFormHtml(); ?>