From eb1fa975475bc450035936cc8ff55150f0a352e3 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 09:59:51 +0000 Subject: [PATCH 001/316] Remove unused attribute Kept in constructor for backwards compatibility --- app/code/Magento/SampleData/Model/Dependency.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index 611f69e0babc1..d4f653d39e462 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -26,11 +26,6 @@ class Dependency */ protected $composerInformation; - /** - * @var Filesystem - */ - private $filesystem; - /** * @var PackageFactory */ @@ -54,7 +49,6 @@ public function __construct( ComponentRegistrar $componentRegistrar ) { $this->composerInformation = $composerInformation; - $this->filesystem = $filesystem; $this->packageFactory = $packageFactory; $this->componentRegistrar = $componentRegistrar; } From 479a443df80985a5052395fd7ff477f32bef50ca Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 10:07:59 +0000 Subject: [PATCH 002/316] Change type hint to interface --- app/code/Magento/SampleData/Model/Dependency.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index d4f653d39e462..9c5c89154ee11 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -6,10 +6,11 @@ namespace Magento\SampleData\Model; use Magento\Framework\Component\ComponentRegistrar; +use Magento\Framework\Component\ComponentRegistrarInterface; use Magento\Framework\Composer\ComposerInformation; -use Magento\Framework\Filesystem; use Magento\Framework\Config\Composer\Package; use Magento\Framework\Config\Composer\PackageFactory; +use Magento\Framework\Filesystem; /** * Sample Data dependency @@ -32,7 +33,7 @@ class Dependency private $packageFactory; /** - * @var ComponentRegistrar + * @var ComponentRegistrarInterface */ private $componentRegistrar; @@ -40,13 +41,13 @@ class Dependency * @param ComposerInformation $composerInformation * @param Filesystem $filesystem * @param PackageFactory $packageFactory - * @param ComponentRegistrar $componentRegistrar + * @param ComponentRegistrarInterface $componentRegistrar */ public function __construct( ComposerInformation $composerInformation, Filesystem $filesystem, PackageFactory $packageFactory, - ComponentRegistrar $componentRegistrar + ComponentRegistrarInterface $componentRegistrar ) { $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; From 9768fc614f070bb7a43713f67f01d13d3013d2f7 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 11:59:24 +0000 Subject: [PATCH 003/316] Add unit test for Magento\SampleData\Model\Dependency --- .../Magento/SampleData/Model/Dependency.php | 29 +++- .../Test/Unit/Model/DependencyTest.php | 147 ++++++++++++++++++ 2 files changed, 168 insertions(+), 8 deletions(-) create mode 100644 app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index 9c5c89154ee11..dc6277acdbb93 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -5,6 +5,7 @@ */ namespace Magento\SampleData\Model; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Component\ComponentRegistrarInterface; use Magento\Framework\Composer\ComposerInformation; @@ -37,6 +38,11 @@ class Dependency */ private $componentRegistrar; + /** + * @var Filesystem\Directory\ReadInterfaceFactory + */ + private $directoryReadFactory; + /** * @param ComposerInformation $composerInformation * @param Filesystem $filesystem @@ -47,11 +53,16 @@ public function __construct( ComposerInformation $composerInformation, Filesystem $filesystem, PackageFactory $packageFactory, - ComponentRegistrarInterface $componentRegistrar + ComponentRegistrarInterface $componentRegistrar, + \Magento\Framework\Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; $this->componentRegistrar = $componentRegistrar; + if ($directoryReadFactory === null) { + $directoryReadFactory = ObjectManager::getInstance()->get(Filesystem\Directory\ReadInterfaceFactory::class); + } + $this->directoryReadFactory = $directoryReadFactory; } /** @@ -81,14 +92,15 @@ protected function getSuggestsFromModules() { $suggests = []; foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleDir) { - $file = $moduleDir . '/composer.json'; - - if (!file_exists($file) || !is_readable($file)) { + /** @var Filesystem\Directory\ReadInterface $directory */ + $directory = $this->directoryReadFactory->create(['path' => $moduleDir]); + echo "path=$moduleDir\n"; + if (!$directory->isExist('composer.json') || !$directory->isReadable('composer.json')) { continue; } /** @var Package $package */ - $package = $this->getModuleComposerPackage($file); + $package = $this->getModuleComposerPackage($directory); $suggest = json_decode(json_encode($package->get('suggest')), true); if (!empty($suggest)) { $suggests += $suggest; @@ -100,11 +112,12 @@ protected function getSuggestsFromModules() /** * Load package * - * @param string $file + * @param Filesystem\Directory\ReadInterface $directory * @return Package + * @throws \Magento\Framework\Exception\FileSystemException */ - protected function getModuleComposerPackage($file) + protected function getModuleComposerPackage(Filesystem\Directory\ReadInterface $directory) { - return $this->packageFactory->create(['json' => json_decode(file_get_contents($file))]); + return $this->packageFactory->create(['json' => json_decode($directory->readFile('composer.json'))]); } } diff --git a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php new file mode 100644 index 0000000000000..75c69a598580d --- /dev/null +++ b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php @@ -0,0 +1,147 @@ +getMockBuilder(ComposerInformation::class) + ->disableOriginalConstructor() + ->getMock(); + $composerInformation->method('getSuggestedPackages') + ->willReturn($suggestionsFromLockFile); + + /** @var Filesystem|\PHPUnit_Framework_MockObject_MockObject $filesystem */ + $filesystem = $this->getMockBuilder(Filesystem::class)->disableOriginalConstructor()->getMock(); + + /** @var PackageFactory|\PHPUnit_Framework_MockObject_MockObject $packageFactory */ + $packageFactory = $this->getMockBuilder(PackageFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $packageFactory->method('create') + ->willReturnCallback(function($args) { + return new Package($args['json']); + }); + + /** @var ComponentRegistrarInterface|\PHPUnit_Framework_MockObject_MockObject $componentRegistrar */ + $componentRegistrar = $this->getMockBuilder(ComponentRegistrarInterface::class) + ->getMockForAbstractClass(); + $componentRegistrar->method('getPaths') + ->with(ComponentRegistrar::MODULE) + ->willReturn( + $moduleDirectories + ); + + $directoryReadFactory = $this->getMockBuilder(Filesystem\Directory\ReadInterfaceFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $directoryReadFactory->method('create') + ->willReturnMap($composerJsonGenerator($this)); + + $dependency = new Dependency( + $composerInformation, + $filesystem, + $packageFactory, + $componentRegistrar, + $directoryReadFactory + ); + $this->assertEquals($expectedPackages, $dependency->getSampleDataPackages()); + } + public static function dataPackagesFromComposerSuggest() + { + return [ + [ + 'moduleDirectories' => [ + 'app/code/LocalModule', + 'app/code/LocalModuleWithoutComposerJson', + 'vendor/company/module', + ], + 'composerJsonGenerator' => function(DependencyTest $test) { + return [ + [ + ['path' => 'app/code/LocalModule'], + $test->stubComposerJsonReader( + ['name' => 'local/module', 'suggest' => ['local/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '0.1.0']] + ) + ], + [ + ['path' => 'app/code/LocalModuleWithoutComposerJson'], + $test->stubFileNotFoundReader() + ], + [ + ['path' => 'vendor/company/module'], + $test->stubComposerJsonReader( + ['name' => 'company/module', 'suggest' => ['company/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.0.0-beta']] + ) + ], + ]; + }, + 'suggestions' => [ + 'magento/foo-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '100.0.0', + 'thirdparty/bar-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.2.3', + 'thirdparty/something-else' => 'Just a suggested package', + ], + 'expectedPackages' => [ + 'magento/foo-sample-data' => '100.0.0', + 'thirdparty/bar-sample-data' => '1.2.3', + 'local/module-sample-data' => '0.1.0', + 'company/module-sample-data' => '1.0.0-beta', + ] + ] + ]; + } + + public function stubComposerJsonReader(array $composerJsonContent) + { + $stub = $this->getMockBuilder(Filesystem\Directory\ReadInterface::class) + ->getMockForAbstractClass(); + $stub->method('isExist') + ->with('composer.json') + ->willReturn(true); + $stub->method('isReadable') + ->with('composer.json') + ->willReturn(true); + $stub->method('readFile') + ->with('composer.json') + ->willReturn(json_encode($composerJsonContent)); + return $stub; + } + + public function stubFileNotFoundReader() + { + $stub = $this->getMockBuilder(Filesystem\Directory\ReadInterface::class) + ->getMockForAbstractClass(); + $stub->method('isExist') + ->with('composer.json') + ->willReturn(false); + $stub->method('readFile') + ->with('composer.json') + ->willThrowException(new FileSystemException(new Phrase('File not found'))); + return $stub; + } +} + From 29bc089e79ac40c822611b195b6008601eecde6a Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 12:27:12 +0000 Subject: [PATCH 004/316] Look for composer.json in parent of registered module directory for sample data suggestions This allows modules to follow the pds/skeleton standard and have their source code in a 'src' subdirectory of the repository --- .../Magento/SampleData/Model/Dependency.php | 36 ++++++++++++------- .../Test/Unit/Model/DependencyTest.php | 24 +++++++++++++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index dc6277acdbb93..7d665ed7e5a2e 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -48,13 +48,15 @@ class Dependency * @param Filesystem $filesystem * @param PackageFactory $packageFactory * @param ComponentRegistrarInterface $componentRegistrar + * @param Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory + * @throws \RuntimeException */ public function __construct( ComposerInformation $composerInformation, Filesystem $filesystem, PackageFactory $packageFactory, ComponentRegistrarInterface $componentRegistrar, - \Magento\Framework\Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null + Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; @@ -69,6 +71,7 @@ public function __construct( * Retrieve list of sample data packages from suggests * * @return array + * @throws \Magento\Framework\Exception\FileSystemException */ public function getSampleDataPackages() { @@ -87,20 +90,13 @@ public function getSampleDataPackages() * Retrieve suggested sample data packages from modules composer.json * * @return array + * @throws \Magento\Framework\Exception\FileSystemException */ protected function getSuggestsFromModules() { $suggests = []; foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleDir) { - /** @var Filesystem\Directory\ReadInterface $directory */ - $directory = $this->directoryReadFactory->create(['path' => $moduleDir]); - echo "path=$moduleDir\n"; - if (!$directory->isExist('composer.json') || !$directory->isReadable('composer.json')) { - continue; - } - - /** @var Package $package */ - $package = $this->getModuleComposerPackage($directory); + $package = $this->getModuleComposerPackage($moduleDir); $suggest = json_decode(json_encode($package->get('suggest')), true); if (!empty($suggest)) { $suggests += $suggest; @@ -112,12 +108,26 @@ protected function getSuggestsFromModules() /** * Load package * - * @param Filesystem\Directory\ReadInterface $directory + * @param string $moduleDir * @return Package * @throws \Magento\Framework\Exception\FileSystemException */ - protected function getModuleComposerPackage(Filesystem\Directory\ReadInterface $directory) + private function getModuleComposerPackage($moduleDir): Package { - return $this->packageFactory->create(['json' => json_decode($directory->readFile('composer.json'))]); + /* + * Also look in parent directory of registered module directory to allow modules to follow the pds/skeleton + * standard and have their source code in a "src" subdirectory of the repository + * + * see: https://github.com/php-pds/skeleton + */ + foreach ([$moduleDir, $moduleDir . DIRECTORY_SEPARATOR . '..'] as $dir) { + /** @var Filesystem\Directory\ReadInterface $directory */ + $directory = $this->directoryReadFactory->create(['path' => $dir]); + if ($directory->isExist('composer.json') && $directory->isReadable('composer.json')) { + /** @var Package $package */ + return $this->packageFactory->create(['json' => json_decode($directory->readFile('composer.json'))]); + } + } + return $this->packageFactory->create(['json' => new \stdClass]); } } diff --git a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php index 75c69a598580d..b32118f6b864c 100644 --- a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php +++ b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php @@ -79,6 +79,7 @@ public static function dataPackagesFromComposerSuggest() 'app/code/LocalModule', 'app/code/LocalModuleWithoutComposerJson', 'vendor/company/module', + 'vendor/company2/module/src' ], 'composerJsonGenerator' => function(DependencyTest $test) { return [ @@ -98,6 +99,28 @@ public static function dataPackagesFromComposerSuggest() ['name' => 'company/module', 'suggest' => ['company/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.0.0-beta']] ) ], + [ + ['path' => 'vendor/company2/module/src/..'], + $test->stubComposerJsonReader( + ['name' => 'company2/module', 'suggest' => ['company2/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.10']] + ) + ], + [ + ['path' => 'vendor/company2/module/src'], + $test->stubFileNotFoundReader() + ], + [ + ['path' => 'vendor/company/module/..'], + $test->stubFileNotFoundReader() + ], + [ + ['path' => 'app/code/LocalModuleWithoutComposerJson/..'], + $test->stubFileNotFoundReader() + ], + [ + ['path' => 'app/code/LocalModule/..'], + $test->stubFileNotFoundReader() + ], ]; }, 'suggestions' => [ @@ -110,6 +133,7 @@ public static function dataPackagesFromComposerSuggest() 'thirdparty/bar-sample-data' => '1.2.3', 'local/module-sample-data' => '0.1.0', 'company/module-sample-data' => '1.0.0-beta', + 'company2/module-sample-data' => '1.10', ] ] ]; From e45250ab4458db0165e09a3990d492e5239cc4a4 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 13:31:09 +0000 Subject: [PATCH 005/316] Fix code style issues --- .../Magento/SampleData/Model/Dependency.php | 3 ++ .../Test/Unit/Model/DependencyTest.php | 34 ++++++++++++++----- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index 7d665ed7e5a2e..bf9a8f501be94 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -53,9 +53,12 @@ class Dependency */ public function __construct( ComposerInformation $composerInformation, + // $filesystem kept for BC + // @codingStandardsIgnoreLine Filesystem $filesystem, PackageFactory $packageFactory, ComponentRegistrarInterface $componentRegistrar, + // $directoryReadFactory optional for BC Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { $this->composerInformation = $composerInformation; diff --git a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php index b32118f6b864c..3be13af6ae91b 100644 --- a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php +++ b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php @@ -24,8 +24,12 @@ class DependencyTest extends \PHPUnit_Framework_TestCase * @param string[] $suggestionsFromLockFile * @param string[] $expectedPackages */ - public function testPackagesFromComposerSuggest($moduleDirectories, callable $composerJsonGenerator, $suggestionsFromLockFile, $expectedPackages) - { + public function testPackagesFromComposerSuggest( + array $moduleDirectories, + callable $composerJsonGenerator, + array $suggestionsFromLockFile, + array $expectedPackages + ) { /** @var ComposerInformation|\PHPUnit_Framework_MockObject_MockObject $composerInformation */ $composerInformation = $this->getMockBuilder(ComposerInformation::class) ->disableOriginalConstructor() @@ -42,7 +46,7 @@ public function testPackagesFromComposerSuggest($moduleDirectories, callable $co ->setMethods(['create']) ->getMock(); $packageFactory->method('create') - ->willReturnCallback(function($args) { + ->willReturnCallback(function ($args) { return new Package($args['json']); }); @@ -81,12 +85,17 @@ public static function dataPackagesFromComposerSuggest() 'vendor/company/module', 'vendor/company2/module/src' ], - 'composerJsonGenerator' => function(DependencyTest $test) { + 'composerJsonGenerator' => function (DependencyTest $test) { return [ [ ['path' => 'app/code/LocalModule'], $test->stubComposerJsonReader( - ['name' => 'local/module', 'suggest' => ['local/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '0.1.0']] + [ + 'name' => 'local/module', + 'suggest' => [ + 'local/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '0.1.0' + ] + ] ) ], [ @@ -96,13 +105,23 @@ public static function dataPackagesFromComposerSuggest() [ ['path' => 'vendor/company/module'], $test->stubComposerJsonReader( - ['name' => 'company/module', 'suggest' => ['company/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.0.0-beta']] + [ + 'name' => 'company/module', + 'suggest' => [ + 'company/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.0.0-beta' + ] + ] ) ], [ ['path' => 'vendor/company2/module/src/..'], $test->stubComposerJsonReader( - ['name' => 'company2/module', 'suggest' => ['company2/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.10']] + [ + 'name' => 'company2/module', + 'suggest' => [ + 'company2/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.10' + ] + ] ) ], [ @@ -168,4 +187,3 @@ public function stubFileNotFoundReader() return $stub; } } - From 4355d78e7f98aa0b03067c88c1a3aedabb652edb Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 13:55:30 +0000 Subject: [PATCH 006/316] Add missing DI preference for Filesystem\Directory\ReadInterface --- app/code/Magento/SampleData/etc/di.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/SampleData/etc/di.xml b/app/code/Magento/SampleData/etc/di.xml index cfc9a280bb80e..aedd2d31f58dc 100644 --- a/app/code/Magento/SampleData/etc/di.xml +++ b/app/code/Magento/SampleData/etc/di.xml @@ -15,4 +15,5 @@ + From 3319ea0f58ef4014d4d2c89457e521a785c80c47 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Thu, 23 Mar 2017 17:24:47 +0000 Subject: [PATCH 007/316] Keep it PHP 5.6 compatible for now --- app/code/Magento/SampleData/Model/Dependency.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index bf9a8f501be94..03e1999d72898 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -51,16 +51,17 @@ class Dependency * @param Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory * @throws \RuntimeException */ + // @codingStandardsIgnoreStart public function __construct( ComposerInformation $composerInformation, // $filesystem kept for BC - // @codingStandardsIgnoreLine Filesystem $filesystem, PackageFactory $packageFactory, ComponentRegistrarInterface $componentRegistrar, // $directoryReadFactory optional for BC Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { + // @codingStandardsIgnoreEnd $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; $this->componentRegistrar = $componentRegistrar; @@ -115,7 +116,7 @@ protected function getSuggestsFromModules() * @return Package * @throws \Magento\Framework\Exception\FileSystemException */ - private function getModuleComposerPackage($moduleDir): Package + private function getModuleComposerPackage($moduleDir) { /* * Also look in parent directory of registered module directory to allow modules to follow the pds/skeleton From 9efec7e00b7d041297a8650f971bdce1f90b4ae8 Mon Sep 17 00:00:00 2001 From: olysenko Date: Wed, 19 Apr 2017 17:24:05 +0300 Subject: [PATCH 008/316] MAGETWO-57995: [GITHUB] Simple product videos display the thumbnail image rather than the embedded video player. #6360 --- .../Block/Plugin/Product/Media/Gallery.php | 80 +++++++++++++++ .../Plugin/Product/Media/GalleryTest.php | 99 +++++++++++++++++++ .../Magento/ConfigurableProduct/etc/di.xml | 3 + 3 files changed, 182 insertions(+) create mode 100644 app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php create mode 100644 app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php diff --git a/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php new file mode 100644 index 0000000000000..1ea04f5ef99fc --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php @@ -0,0 +1,80 @@ +json = $json; + parent::__construct($context, $arrayUtils, $data); + } + + /** + * @param \Magento\Catalog\Block\Product\View\Gallery $subject + * @param string $result + * @return string + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterGetOptionsMediaGalleryDataJson( + \Magento\Catalog\Block\Product\View\Gallery $subject, + $result + ) { + $result = $this->json->unserialize($result); + if ($this->getProduct()->getTypeId() == 'configurable') { + /** @var Configurable $productType */ + $productType = $this->getProduct()->getTypeInstance(); + $products = $productType->getUsedProducts($this->getProduct()); + /** @var Product $product */ + foreach ($products as $product) { + $key = $product->getId(); + $result[$key] = $this->getProductGallery($product); + } + } + return $this->json->serialize($result); + } + + /** + * @param Product $product + * @return array + */ + private function getProductGallery($product) + { + $result = []; + $images = $product->getMediaGalleryImages(); + foreach ($images as $image) { + $result[] = [ + 'mediaType' => $image->getMediaType(), + 'videoUrl' => $image->getVideoUrl(), + 'isBase' => $product->getImage() == $image->getFile(), + ]; + } + return $result; + } +} diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php new file mode 100644 index 0000000000000..f2f497996ed6b --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php @@ -0,0 +1,99 @@ +json = $this->getMockBuilder(Json::class) + ->disableOriginalConstructor() + ->getMock(); + + $productMock = $this->getMockBuilder(Product::class) + ->setMethods(['getTypeId', 'getTypeInstance']) + ->disableOriginalConstructor() + ->getMock(); + + $variationProduct = $this->getMockBuilder(Product::class) + ->setMethods(['setMediaGalleryEntries', 'getId', 'getMediaGalleryImages', 'getImage']) + ->disableOriginalConstructor() + ->getMock(); + $image = new \Magento\Framework\DataObject( + ['media_type' => 'type', 'video_url' => 'url', 'file' => 'image.jpg'] + ); + $variationProduct->expects($this->any())->method('setMediaGalleryEntries')->willReturn([]); + $variationProduct->expects($this->any())->method('getId')->willReturn($this->variationProductId); + $variationProduct->expects($this->any())->method('getMediaGalleryImages')->willReturn([$image]); + $variationProduct->expects($this->any())->method('getImage')->willReturn('image.jpg'); + + $configurableType = $this->getMockBuilder(\Magento\ConfigurableProduct\Model\Product\Type\Configurable::class) + ->disableOriginalConstructor() + ->setMethods(['getUsedProducts']) + ->getMock(); + $configurableType->expects($this->any())->method('getUsedProducts')->with($productMock) + ->willReturn([$variationProduct]); + + $productMock->expects($this->any())->method('getTypeId')->willReturn('configurable'); + $productMock->expects($this->any())->method('getTypeInstance')->willReturn($configurableType); + + $this->plugin = $helper->getObject( + Gallery::class, + [ + 'json' => $this->json + ] + ); + $this->plugin->setData('product', $productMock); + } + + public function testAfterGetOptions() + { + $resultJson = '[]'; + $this->json->expects($this->once())->method('unserialize')->with('[]')->willReturn([]); + $expected = [ + $this->variationProductId => [ + [ + 'mediaType' => 'type', + 'videoUrl' => 'url', + 'isBase' => true + ] + ] + ]; + $this->json->expects($this->any())->method('serialize')->with($expected) + ->willReturn(json_encode($expected)); + + $blockMock = $this->getMockBuilder(\Magento\ProductVideo\Block\Product\View\Gallery::class) + ->disableOriginalConstructor() + ->getMock(); + + $result = $this->plugin->afterGetOptionsMediaGalleryDataJson($blockMock, $resultJson); + $this->assertEquals(json_encode($expected), $result); + } +} diff --git a/app/code/Magento/ConfigurableProduct/etc/di.xml b/app/code/Magento/ConfigurableProduct/etc/di.xml index 496d85310e817..cbfb7e24dfcca 100644 --- a/app/code/Magento/ConfigurableProduct/etc/di.xml +++ b/app/code/Magento/ConfigurableProduct/etc/di.xml @@ -147,6 +147,9 @@ + + + Magento\Framework\App\Cache\Type\Collection From 1543c70ccd42c3ab097d5b826eb34752d00e3dfb Mon Sep 17 00:00:00 2001 From: olysenko Date: Thu, 20 Apr 2017 11:54:11 +0300 Subject: [PATCH 009/316] MAGETWO-57995: [GITHUB] Simple product videos display the thumbnail image rather than the embedded video player. #6360 --- .../Block/Plugin/Product/Media/Gallery.php | 20 +-- .../Plugin/Product/Media/GalleryTest.php | 127 +++++++++--------- 2 files changed, 71 insertions(+), 76 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php index 1ea04f5ef99fc..8f712d3a1d8d9 100644 --- a/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php +++ b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php @@ -12,7 +12,7 @@ /** * Class Gallery */ -class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView +class Gallery { /** * @var Json @@ -20,37 +20,29 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView private $json; /** - * @param \Magento\Catalog\Block\Product\Context $context - * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils * @param Json $json - * @param array $data */ public function __construct( - \Magento\Catalog\Block\Product\Context $context, - \Magento\Framework\Stdlib\ArrayUtils $arrayUtils, - Json $json, - array $data = [] + Json $json ) { $this->json = $json; - parent::__construct($context, $arrayUtils, $data); } /** * @param \Magento\Catalog\Block\Product\View\Gallery $subject * @param string $result * @return string - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterGetOptionsMediaGalleryDataJson( \Magento\Catalog\Block\Product\View\Gallery $subject, $result ) { $result = $this->json->unserialize($result); - if ($this->getProduct()->getTypeId() == 'configurable') { + $parentProduct = $subject->getProduct(); + if ($parentProduct->getTypeId() == Configurable::TYPE_CODE) { /** @var Configurable $productType */ - $productType = $this->getProduct()->getTypeInstance(); - $products = $productType->getUsedProducts($this->getProduct()); + $productType = $parentProduct->getTypeInstance(); + $products = $productType->getUsedProducts($parentProduct); /** @var Product $product */ foreach ($products as $product) { $key = $product->getId(); diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php index f2f497996ed6b..34e4925c7bc9b 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php @@ -14,86 +14,89 @@ */ class GalleryTest extends \PHPUnit_Framework_TestCase { - /** - * @var Gallery - */ - private $plugin; - - /** - * @var Json|\PHPUnit_Framework_MockObject_MockObject - */ - private $json; - - /** - * @var int - */ - private $variationProductId = 1; - protected function setUp() + public function testAfterGetOptions() { - $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - - $this->json = $this->getMockBuilder(Json::class) - ->disableOriginalConstructor() - ->getMock(); - - $productMock = $this->getMockBuilder(Product::class) - ->setMethods(['getTypeId', 'getTypeInstance']) - ->disableOriginalConstructor() - ->getMock(); + $jsonMock = $this->createJsonMock(); + $productMock = $this->createProductMock(); + $galleryMock = $this->createGalleryMock(); + $variationProductMock = $this->createProductMock(); + $configurableTypeMock = $this->createConfigurableTypeMock(); - $variationProduct = $this->getMockBuilder(Product::class) - ->setMethods(['setMediaGalleryEntries', 'getId', 'getMediaGalleryImages', 'getImage']) - ->disableOriginalConstructor() - ->getMock(); + $resultJson = '[]'; + $variationProductId = 1; + $expectedGalleryJson = [ + $variationProductId => [ + [ + 'mediaType' => 'type', + 'videoUrl' => 'url', + 'isBase' => true + ] + ] + ]; $image = new \Magento\Framework\DataObject( ['media_type' => 'type', 'video_url' => 'url', 'file' => 'image.jpg'] ); - $variationProduct->expects($this->any())->method('setMediaGalleryEntries')->willReturn([]); - $variationProduct->expects($this->any())->method('getId')->willReturn($this->variationProductId); - $variationProduct->expects($this->any())->method('getMediaGalleryImages')->willReturn([$image]); - $variationProduct->expects($this->any())->method('getImage')->willReturn('image.jpg'); - $configurableType = $this->getMockBuilder(\Magento\ConfigurableProduct\Model\Product\Type\Configurable::class) - ->disableOriginalConstructor() - ->setMethods(['getUsedProducts']) - ->getMock(); - $configurableType->expects($this->any())->method('getUsedProducts')->with($productMock) - ->willReturn([$variationProduct]); - - $productMock->expects($this->any())->method('getTypeId')->willReturn('configurable'); - $productMock->expects($this->any())->method('getTypeInstance')->willReturn($configurableType); + $galleryMock->expects(($this->any()))->method('getProduct')->willReturn($productMock); + $productMock->expects($this->once())->method('getTypeId')->willReturn('configurable'); + $productMock->expects($this->once())->method('getTypeInstance')->willReturn($configurableTypeMock); + $configurableTypeMock->expects($this->once())->method('getUsedProducts')->with($productMock) + ->willReturn([$variationProductMock]); + $variationProductMock->expects($this->once())->method('getId')->willReturn($variationProductId); + $variationProductMock->expects($this->once())->method('getMediaGalleryImages')->willReturn([$image]); + $variationProductMock->expects($this->once())->method('getImage')->willReturn('image.jpg'); + $jsonMock->expects($this->once())->method('serialize')->with($expectedGalleryJson) + ->willReturn(json_encode($expectedGalleryJson)); - $this->plugin = $helper->getObject( + $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $plugin = $helper->getObject( Gallery::class, [ - 'json' => $this->json + 'json' => $jsonMock ] ); - $this->plugin->setData('product', $productMock); + $result = $plugin->afterGetOptionsMediaGalleryDataJson($galleryMock, $resultJson); + $this->assertEquals(json_encode($expectedGalleryJson), $result); } - public function testAfterGetOptions() + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createJsonMock() { - $resultJson = '[]'; - $this->json->expects($this->once())->method('unserialize')->with('[]')->willReturn([]); - $expected = [ - $this->variationProductId => [ - [ - 'mediaType' => 'type', - 'videoUrl' => 'url', - 'isBase' => true - ] - ] - ]; - $this->json->expects($this->any())->method('serialize')->with($expected) - ->willReturn(json_encode($expected)); + return $this->getMockBuilder(Json::class) + ->disableOriginalConstructor() + ->getMock(); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createProductMock() + { + return $this->getMockBuilder(Product::class) + ->disableOriginalConstructor() + ->getMock(); + } - $blockMock = $this->getMockBuilder(\Magento\ProductVideo\Block\Product\View\Gallery::class) + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createGalleryMock() + { + return $this->getMockBuilder(\Magento\Catalog\Block\Product\View\Gallery::class) ->disableOriginalConstructor() ->getMock(); + } - $result = $this->plugin->afterGetOptionsMediaGalleryDataJson($blockMock, $resultJson); - $this->assertEquals(json_encode($expected), $result); + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createConfigurableTypeMock() + { + return $this->getMockBuilder(\Magento\ConfigurableProduct\Model\Product\Type\Configurable::class) + ->disableOriginalConstructor() + ->getMock(); } } From 8a22ae9328a9e262c61acf31c659ffc3f409bce8 Mon Sep 17 00:00:00 2001 From: olysenko Date: Fri, 21 Apr 2017 12:20:04 +0300 Subject: [PATCH 010/316] MAGETWO-57995: [GITHUB] Simple product videos display the thumbnail image rather than the embedded video player. #6360 --- .../ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php index 8f712d3a1d8d9..1df68482eb6b8 100644 --- a/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php +++ b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php @@ -10,7 +10,7 @@ use Magento\Framework\Serialize\Serializer\Json; /** - * Class Gallery + * Provides a serialized media gallery data for configurable product options. */ class Gallery { From f7449dfcec46acd9843f50152d2710b29101cc08 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Wed, 3 May 2017 11:03:59 -0500 Subject: [PATCH 011/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - returning saved url on replace method so we can output what hasn't been saved --- .../Model/Category/Plugin/Storage.php | 7 ++-- ...ProductProcessUrlRewriteSavingObserver.php | 9 ++++- .../Magento/CatalogUrlRewrite/etc/events.xml | 3 ++ .../Model/Storage/AbstractStorage.php | 14 +++----- .../UrlRewrite/Model/Storage/DbStorage.php | 36 +++++++++++++++---- .../UrlRewrite/Model/UrlPersistInterface.php | 2 +- 6 files changed, 50 insertions(+), 21 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php index fc31d96f85234..745977f9190a5 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Storage.php @@ -33,15 +33,15 @@ public function __construct( /** * @param \Magento\UrlRewrite\Model\StorageInterface $object - * @param null $result + * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $result * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls - * @return void + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterReplace(StorageInterface $object, $result, array $urls) { $toSave = []; - foreach ($this->filterUrls($urls) as $record) { + foreach ($this->filterUrls($result) as $record) { $metadata = $record->getMetadata(); $toSave[] = [ 'url_rewrite_id' => $record->getUrlRewriteId(), @@ -52,6 +52,7 @@ public function afterReplace(StorageInterface $object, $result, array $urls) if ($toSave) { $this->productResource->saveMultiple($toSave); } + return $result; } /** diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php index ad0220ea30ef3..018e3c3e59340 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php @@ -58,7 +58,14 @@ public function execute(\Magento\Framework\Event\Observer $observer) ]); if ($product->isVisibleInSiteVisibility()) { - $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); + $generatedUrls = $this->productUrlRewriteGenerator->generate($product); + $product->setData( + 'unsaved_urls', + array_diff_key( + $generatedUrls, + $this->urlPersist->replace($generatedUrls) + ) + ); } } } diff --git a/app/code/Magento/CatalogUrlRewrite/etc/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/events.xml index cc558fe81f16d..bf543173538cd 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/events.xml @@ -33,4 +33,7 @@ + + + diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index 6296f0acbfe83..c9c06ec514815 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -76,24 +76,18 @@ abstract protected function doFindOneByData($data); public function replace(array $urls) { if (!$urls) { - return; + return []; } - try { - $this->doReplace($urls); - } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { - throw new \Magento\Framework\Exception\AlreadyExistsException( - __('URL key for specified store already exists.') - ); - } + return $this->doReplace($urls); } /** * Save new url rewrites and remove old if exist. Template method * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls - * @return int - * @throws \Magento\Framework\Exception\AlreadyExistsException + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls + * @throws \Magento\Framework\Exception\AlreadyExistsException|\Exception */ abstract protected function doReplace($urls); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 3093e10e63091..3e8185a7665f4 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -20,7 +20,7 @@ class DbStorage extends AbstractStorage /** * Code of "Integrity constraint violation: 1062 Duplicate entry" error */ - const ERROR_CODE_DUPLICATE_ENTRY = 23000; + const ERROR_CODE_DUPLICATE_ENTRY = 1062; /** * @var \Magento\Framework\DB\Adapter\AdapterInterface @@ -90,11 +90,12 @@ protected function doReplace($urls) $urlData[UrlRewrite::ENTITY_TYPE] = $type; $this->deleteByData($urlData); } - $data = []; - foreach ($urls as $url) { - $data[] = $url->toArray(); + foreach ($urls as $key => $url) { + if (!$this->insert($url->toArray())) { + unset($urls[$key]); + } } - $this->insertMultiple($data); + return $urls; } /** @@ -104,13 +105,14 @@ protected function doReplace($urls) * @return void * @throws \Magento\Framework\Exception\AlreadyExistsException * @throws \Exception + * @deprecated */ protected function insertMultiple($data) { try { $this->connection->insertMultiple($this->resource->getTableName(self::TABLE_NAME), $data); } catch (\Exception $e) { - if ($e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY + if (($e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY) && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) ) { throw new \Magento\Framework\Exception\AlreadyExistsException( @@ -121,6 +123,28 @@ protected function insertMultiple($data) } } + /** + * Insert multiple + * + * @param array $data + * @return bool + * @throws \Exception + */ + private function insert($data) + { + try { + return $this->connection->insert($this->resource->getTableName(self::TABLE_NAME), $data) > 0; + } catch (\Exception $e) { + if ($e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY + && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) + ) { + return false; + } else { + throw $e; + } + } + } + /** * Get filter for url rows deletion due to provided urls * diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php index d1ec01b5a2d9f..44443fb8ce56d 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php @@ -15,7 +15,7 @@ interface UrlPersistInterface * Save new url rewrites and remove old if exist * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls - * @return void + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @throws \Magento\Framework\Exception\AlreadyExistsException */ public function replace(array $urls); From d3b1de3c53057080dd918d57f6a986c539c0623c Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Wed, 3 May 2017 14:15:19 -0500 Subject: [PATCH 012/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding observer for notice on controller --- ...uplicateUrlControllerAfterSaveObserver.php | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php new file mode 100644 index 0000000000000..3653cc9d2b057 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -0,0 +1,62 @@ +messageManager = $messageManager; + $this->escaper = $escaper; + } + + /** + * Add url collisions notices + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + /** @var \Magento\Catalog\Model\Product $product */ + $product = $observer->getEvent()->getProduct(); + if ($product->getData('unsaved_urls')) { + $urls = ''; + foreach ($product->getData('unsaved_urls') as $url) { + /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url */ + $urls .= $url->getRequestPath() . ', '; + } + $urls = rtrim($urls, ', '); + $this->messageManager->addNoticeMessage( + __( + 'The following urls have not been saved for product %1: %2', + $this->escaper->escapeHtml($product->getName()), + $this->escaper->escapeHtml($urls) + ) + ); + } + } +} From 4d10e7cd37ecd347933b433c6b3316e31621d975 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Wed, 3 May 2017 17:31:56 -0500 Subject: [PATCH 013/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - fixing returns --- app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php | 4 ++-- app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index c9c06ec514815..607acb16cadf5 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -86,8 +86,8 @@ public function replace(array $urls) * Save new url rewrites and remove old if exist. Template method * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls - * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls - * @throws \Magento\Framework\Exception\AlreadyExistsException|\Exception + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + * @throws \Exception */ abstract protected function doReplace($urls); diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php index 44443fb8ce56d..590eb2debffd5 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php @@ -15,7 +15,7 @@ interface UrlPersistInterface * Save new url rewrites and remove old if exist * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls - * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] * @throws \Magento\Framework\Exception\AlreadyExistsException */ public function replace(array $urls); From d9a0475d8203f875e86318bb8e483689e5317551 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Wed, 3 May 2017 22:06:23 -0500 Subject: [PATCH 014/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding logging, removing throwing exception --- ...uplicateUrlControllerAfterSaveObserver.php | 5 ++- .../Model/Storage/AbstractStorage.php | 1 - .../UrlRewrite/Model/Storage/DbStorage.php | 32 ++++++++++++++++--- .../UrlRewrite/Model/UrlPersistInterface.php | 1 - 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php index 3653cc9d2b057..34d7c9d13a11f 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -50,10 +50,9 @@ public function execute(\Magento\Framework\Event\Observer $observer) $urls .= $url->getRequestPath() . ', '; } $urls = rtrim($urls, ', '); - $this->messageManager->addNoticeMessage( + $this->messageManager->addWarningMessage( __( - 'The following urls have not been saved for product %1: %2', - $this->escaper->escapeHtml($product->getName()), + 'The following URL keys for specified store already exists %1', $this->escaper->escapeHtml($urls) ) ); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index 607acb16cadf5..3de311505f08d 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -87,7 +87,6 @@ public function replace(array $urls) * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @throws \Exception */ abstract protected function doReplace($urls); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 3e8185a7665f4..a594739082c24 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -9,6 +9,7 @@ use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory; use Magento\Framework\Api\DataObjectHelper; +use Psr\Log\LoggerInterface; class DbStorage extends AbstractStorage { @@ -32,18 +33,27 @@ class DbStorage extends AbstractStorage */ protected $resource; + /** + * @var \Psr\Log\LoggerInterface + */ + private $logger; + /** * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory * @param DataObjectHelper $dataObjectHelper * @param \Magento\Framework\App\ResourceConnection $resource + * @param \Psr\Log\LoggerInterface|null $logger */ public function __construct( UrlRewriteFactory $urlRewriteFactory, DataObjectHelper $dataObjectHelper, - ResourceConnection $resource + ResourceConnection $resource, + LoggerInterface $logger = null ) { $this->connection = $resource->getConnection(); $this->resource = $resource; + $this->logger = $logger ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Psr\Log\LoggerInterface::class); parent::__construct($urlRewriteFactory, $dataObjectHelper); } @@ -128,21 +138,33 @@ protected function insertMultiple($data) * * @param array $data * @return bool - * @throws \Exception */ private function insert($data) { try { return $this->connection->insert($this->resource->getTableName(self::TABLE_NAME), $data) > 0; } catch (\Exception $e) { - if ($e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY + if (isset($data['request_path']) + && isset($data['entity_type']) + && isset($data['store_id']) + && isset($data['entity_id']) + && $e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) ) { - return false; + $this->logger->warning( + __( + 'Could not insert a duplicate URL when trying to insert %1 for %3 on store %2, entity id %4.', + $data['request_path'], + $data['entity_type'], + $data['store_id'], + $data['entity_id'] + ) + ); } else { - throw $e; + $this->logger->warning($e->getMessage()); } } + return false; } /** diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php index 590eb2debffd5..371a683351eea 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php @@ -16,7 +16,6 @@ interface UrlPersistInterface * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @throws \Magento\Framework\Exception\AlreadyExistsException */ public function replace(array $urls); From 756101e69d5a61ea2479b3943ec82fded4301592 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 4 May 2017 10:44:53 -0500 Subject: [PATCH 015/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding registry instead of setting data to product --- ...uplicateUrlControllerAfterSaveObserver.php | 22 +++++++++++----- ...ProductProcessUrlRewriteSavingObserver.php | 26 ++++++++++++------- .../UrlRewrite/Model/Storage/DbStorage.php | 4 +-- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php index 34d7c9d13a11f..d4cfd14c9e81e 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -8,6 +8,7 @@ use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Message\ManagerInterface; use Magento\Framework\Escaper; +use Magento\CatalogUrlRewrite\Model\UrlDuplicatesRegistry; class DuplicateUrlControllerAfterSaveObserver implements ObserverInterface { @@ -21,38 +22,45 @@ class DuplicateUrlControllerAfterSaveObserver implements ObserverInterface */ private $escaper; + /** + * @var UrlDuplicatesRegistry + */ + private $urlDuplicatesRegistry; + /** * @param ManagerInterface $messageManager * @param Escaper $escaper + * @param UrlDuplicatesRegistry $urlDuplicatesRegistry */ public function __construct( ManagerInterface $messageManager, - Escaper $escaper + Escaper $escaper, + UrlDuplicatesRegistry $urlDuplicatesRegistry ) { $this->messageManager = $messageManager; $this->escaper = $escaper; + $this->urlDuplicatesRegistry = $urlDuplicatesRegistry; } /** - * Add url collisions notices + * Add url rewrite duplicates warnings * * @param \Magento\Framework\Event\Observer $observer * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute(\Magento\Framework\Event\Observer $observer) { - /** @var \Magento\Catalog\Model\Product $product */ - $product = $observer->getEvent()->getProduct(); - if ($product->getData('unsaved_urls')) { + if (!empty($this->urlDuplicatesRegistry->getUrlDuplicates())) { $urls = ''; - foreach ($product->getData('unsaved_urls') as $url) { + foreach ($this->urlDuplicatesRegistry->getUrlDuplicates() as $url) { /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url */ $urls .= $url->getRequestPath() . ', '; } $urls = rtrim($urls, ', '); $this->messageManager->addWarningMessage( __( - 'The following URL keys for specified store already exists %1', + 'Could not save the following URL keys for specified store because they already exist: %1', $this->escaper->escapeHtml($urls) ) ); diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php index 018e3c3e59340..005153bab030c 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php @@ -10,29 +10,38 @@ use Magento\UrlRewrite\Model\UrlPersistInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use Magento\Framework\Event\ObserverInterface; +use Magento\CatalogUrlRewrite\Model\UrlDuplicatesRegistry; class ProductProcessUrlRewriteSavingObserver implements ObserverInterface { /** * @var ProductUrlRewriteGenerator */ - protected $productUrlRewriteGenerator; + private $productUrlRewriteGenerator; /** * @var UrlPersistInterface */ - protected $urlPersist; + private $urlPersist; + + /** + * @var UrlDuplicatesRegistry + */ + private $urlDuplicatesRegistry; /** * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator * @param UrlPersistInterface $urlPersist + * @param UrlDuplicatesRegistry $urlDuplicatesRegistry */ public function __construct( ProductUrlRewriteGenerator $productUrlRewriteGenerator, - UrlPersistInterface $urlPersist + UrlPersistInterface $urlPersist, + UrlDuplicatesRegistry $urlDuplicatesRegistry ) { $this->productUrlRewriteGenerator = $productUrlRewriteGenerator; $this->urlPersist = $urlPersist; + $this->urlDuplicatesRegistry = $urlDuplicatesRegistry; } /** @@ -59,13 +68,12 @@ public function execute(\Magento\Framework\Event\Observer $observer) if ($product->isVisibleInSiteVisibility()) { $generatedUrls = $this->productUrlRewriteGenerator->generate($product); - $product->setData( - 'unsaved_urls', - array_diff_key( - $generatedUrls, - $this->urlPersist->replace($generatedUrls) - ) + $unsavedUrlsDuplicates = array_diff_key( + $generatedUrls, + $this->urlPersist->replace($generatedUrls) ); + // Set the duplicates to registry so it can be processed by the presentation layer + $this->urlDuplicatesRegistry->setUrlDuplicates($unsavedUrlsDuplicates); } } } diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index a594739082c24..297bd9f150bc5 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -134,12 +134,12 @@ protected function insertMultiple($data) } /** - * Insert multiple + * Inserts a url as array to database * * @param array $data * @return bool */ - private function insert($data) + private function insert(array $data) { try { return $this->connection->insert($this->resource->getTableName(self::TABLE_NAME), $data) > 0; From e98c5f66fa743e0bc5544a6df16ddb63b4ac83c2 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 4 May 2017 10:47:46 -0500 Subject: [PATCH 016/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding registry instead of setting data to product --- .../Model/UrlDuplicatesRegistry.php | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php diff --git a/app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php b/app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php new file mode 100644 index 0000000000000..330e0b737dec1 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php @@ -0,0 +1,46 @@ +urlDuplicates)) { + $this->urlDuplicates = $urlDuplicates; + } else { + throw new \Magento\Framework\Exception\RuntimeException(__('Url rewrites duplicates can only be set once')); + } + } + + /** + * Returns the stored url rewrites duplicates + * + * @return array|\Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + */ + public function getUrlDuplicates() + { + return $this->urlDuplicates; + } +} From 84aa1cd705b68320769d9cd6fef50d6c48ad2f4f Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 4 May 2017 12:46:14 -0500 Subject: [PATCH 017/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - moving registry to url rewrites --- ...uplicateUrlControllerAfterSaveObserver.php | 6 +++-- ...ProductProcessUrlRewriteSavingObserver.php | 11 +++------ .../Model/Storage/AbstractStorage.php | 23 +++++++++++++++++-- .../Model/UrlDuplicatesRegistry.php | 14 +++++++++-- 4 files changed, 40 insertions(+), 14 deletions(-) rename app/code/Magento/{CatalogUrlRewrite => UrlRewrite}/Model/UrlDuplicatesRegistry.php (79%) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php index d4cfd14c9e81e..ca464d129b29d 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -8,7 +8,7 @@ use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Message\ManagerInterface; use Magento\Framework\Escaper; -use Magento\CatalogUrlRewrite\Model\UrlDuplicatesRegistry; +use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; class DuplicateUrlControllerAfterSaveObserver implements ObserverInterface { @@ -60,7 +60,9 @@ public function execute(\Magento\Framework\Event\Observer $observer) $urls = rtrim($urls, ', '); $this->messageManager->addWarningMessage( __( - 'Could not save the following URL keys for specified store because they already exist: %1', + 'There is a conflict between the product\'s URL keys and other URLs.' + . 'The product can\'t be accessed in the frontend in the specified store, through this URL: %1' + . 'To fix the conflict, under Search Engine Optimization, edit the URL key to make it unique.', $this->escaper->escapeHtml($urls) ) ); diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php index 005153bab030c..364559b9086b2 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php @@ -10,7 +10,7 @@ use Magento\UrlRewrite\Model\UrlPersistInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use Magento\Framework\Event\ObserverInterface; -use Magento\CatalogUrlRewrite\Model\UrlDuplicatesRegistry; +use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; class ProductProcessUrlRewriteSavingObserver implements ObserverInterface { @@ -67,13 +67,8 @@ public function execute(\Magento\Framework\Event\Observer $observer) ]); if ($product->isVisibleInSiteVisibility()) { - $generatedUrls = $this->productUrlRewriteGenerator->generate($product); - $unsavedUrlsDuplicates = array_diff_key( - $generatedUrls, - $this->urlPersist->replace($generatedUrls) - ); - // Set the duplicates to registry so it can be processed by the presentation layer - $this->urlDuplicatesRegistry->setUrlDuplicates($unsavedUrlsDuplicates); + $this->urlDuplicatesRegistry->clearUrlDuplicates(); + $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); } } } diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index 3de311505f08d..0b6ad0677002e 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -8,6 +8,7 @@ use Magento\UrlRewrite\Model\StorageInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory; use Magento\Framework\Api\DataObjectHelper; +use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; /** * Abstract db storage @@ -20,14 +21,25 @@ abstract class AbstractStorage implements StorageInterface /** @var DataObjectHelper */ protected $dataObjectHelper; + /** + * @var UrlDuplicatesRegistry + */ + private $urlDuplicatesRegistry; + /** * @param UrlRewriteFactory $urlRewriteFactory * @param DataObjectHelper $dataObjectHelper + * @param UrlDuplicatesRegistry $urlDuplicatesRegistry */ - public function __construct(UrlRewriteFactory $urlRewriteFactory, DataObjectHelper $dataObjectHelper) - { + public function __construct( + UrlRewriteFactory $urlRewriteFactory, + DataObjectHelper $dataObjectHelper, + UrlDuplicatesRegistry $urlDuplicatesRegistry = null + ) { $this->urlRewriteFactory = $urlRewriteFactory; $this->dataObjectHelper = $dataObjectHelper; + $this->urlDuplicatesRegistry = $urlDuplicatesRegistry ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(UrlDuplicatesRegistry::class); } /** @@ -79,6 +91,13 @@ public function replace(array $urls) return []; } + $savedUrls = $this->doReplace($urls); + $unsavedUrlsDuplicates = array_diff_key( + $urls, + $savedUrls + ); + // Set the duplicates to registry so it can be processed by the presentation layer + $this->urlDuplicatesRegistry->setUrlDuplicates($unsavedUrlsDuplicates); return $this->doReplace($urls); } diff --git a/app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php similarity index 79% rename from app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php rename to app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php index 330e0b737dec1..939c57401bafa 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/UrlDuplicatesRegistry.php +++ b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php @@ -1,10 +1,10 @@ urlDuplicates = []; + } + /** * Set the url rewrites duplicates that resulted from a saving process * From 6f73f13318160726ae057bc08bb3df6f34c232c3 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 4 May 2017 13:55:43 -0500 Subject: [PATCH 018/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding complex warning --- ...uplicateUrlControllerAfterSaveObserver.php | 10 +++---- .../CatalogUrlRewrite/etc/adminhtml/di.xml | 12 +++++++++ .../etc/adminhtml/events.xml | 3 +++ .../Magento/CatalogUrlRewrite/etc/events.xml | 3 --- .../addProductUrlDuplicateMessage.phtml | 27 +++++++++++++++++++ 5 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php index ca464d129b29d..bb90cffa7f9bc 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -58,13 +58,9 @@ public function execute(\Magento\Framework\Event\Observer $observer) $urls .= $url->getRequestPath() . ', '; } $urls = rtrim($urls, ', '); - $this->messageManager->addWarningMessage( - __( - 'There is a conflict between the product\'s URL keys and other URLs.' - . 'The product can\'t be accessed in the frontend in the specified store, through this URL: %1' - . 'To fix the conflict, under Search Engine Optimization, edit the URL key to make it unique.', - $this->escaper->escapeHtml($urls) - ) + $this->messageManager->addComplexWarningMessage( + 'addProductUrlDuplicateMessage', + ['urls' => $this->escaper->escapeHtml($urls)] ); } } diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index 32ecc97d0f85f..0b363956ba9d7 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -35,4 +35,16 @@ + + + + + \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE + + Magento_CatalogUrlRewrite::messages/addProductUrlDuplicateMessage.phtml + + + + + diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml index 9c4a8aaf41231..79c4ae1ec1073 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml @@ -9,4 +9,7 @@ + + + diff --git a/app/code/Magento/CatalogUrlRewrite/etc/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/events.xml index bf543173538cd..cc558fe81f16d 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/events.xml @@ -33,7 +33,4 @@ - - - diff --git a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml new file mode 100644 index 0000000000000..816ebd29af8b0 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml @@ -0,0 +1,27 @@ + +

+ + escapeHtml(__('There is a conflict between the product\'s URL keys and other URLs keys.')); ?> + +

+

+ escapeHtml( + __('The product can\'t be accessed in the frontend in the specified store, through this URL key:') + ); ?> + + getData('urls');?> + +

+

+ escapeHtml( + __('To fix the conflict, under Search Engine Optimization section, edit the URL key to make it unique.') + ); + ?> +

\ No newline at end of file From 968a2b67ba95ef2505457fbe1790a778d1e9a2bc Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 4 May 2017 14:41:50 -0500 Subject: [PATCH 019/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - styles change --- .../messages/addProductUrlDuplicateMessage.phtml | 11 ++++------- .../Magento/UrlRewrite/Model/Storage/DbStorage.php | 4 ++-- .../backend/web/css/source/components/_messages.less | 3 +-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml index 816ebd29af8b0..bae5d00f596a7 100644 --- a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml +++ b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml @@ -6,11 +6,9 @@ /** @var \Magento\Framework\View\Element\Template $block */ ?> -

- +

escapeHtml(__('There is a conflict between the product\'s URL keys and other URLs keys.')); ?> - -

+

escapeHtml( __('The product can\'t be accessed in the frontend in the specified store, through this URL key:') @@ -18,10 +16,9 @@ getData('urls');?> -

-

+
escapeHtml( - __('To fix the conflict, under Search Engine Optimization section, edit the URL key to make it unique.') + __('To fix the conflict, under the Search Engine Optimization section, edit the URL key to make it unique.') ); ?>

\ No newline at end of file diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 297bd9f150bc5..a73671ea322cf 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -153,7 +153,7 @@ private function insert(array $data) ) { $this->logger->warning( __( - 'Could not insert a duplicate URL when trying to insert %1 for %3 on store %2, entity id %4.', + 'Could not insert a duplicate URL when trying to insert %1 for %2 on store %3, entity id %4.', $data['request_path'], $data['entity_type'], $data['store_id'], @@ -161,7 +161,7 @@ private function insert(array $data) ) ); } else { - $this->logger->warning($e->getMessage()); + $this->logger->error($e->getMessage()); } } return false; diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less index cbf1e28661173..6564b22e4f0ea 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less @@ -73,11 +73,10 @@ height: auto; left: 1.9rem; line-height: inherit; - margin-top: -1.3rem; position: absolute; speak: none; text-shadow: none; - top: 50%; + top: 1.5rem; width: auto; } } From edc0c999fdb4f985a0fce7098065d8ca7333f93f Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 4 May 2017 15:00:10 -0500 Subject: [PATCH 020/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - text change --- .../templates/messages/addProductUrlDuplicateMessage.phtml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml index bae5d00f596a7..6e96f9c894aac 100644 --- a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml +++ b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml @@ -7,18 +7,18 @@ /** @var \Magento\Framework\View\Element\Template $block */ ?>

- escapeHtml(__('There is a conflict between the product\'s URL keys and other URLs keys.')); ?> + escapeHtml(__('A conflict has occurred between the product\'s URL and other URL.')); ?>

escapeHtml( - __('The product can\'t be accessed in the frontend in the specified store, through this URL key:') + __('As a result, you cannot access this product through the specified URL:') ); ?> getData('urls');?>
escapeHtml( - __('To fix the conflict, under the Search Engine Optimization section, edit the URL key to make it unique.') + __('To fix the conflict, navigate to Search Engine Optimization section, then edit the URL key to make it unique.') ); ?>

\ No newline at end of file From 84d436d1b07d63f01b8d338a5a34341e8b72c9c6 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 5 May 2017 16:05:51 -0500 Subject: [PATCH 021/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - changing controllers to handle partial save with observers by introducing proper events - adding complex messages templates --- .../Controller/Adminhtml/Category/Move.php | 4 ++ .../Controller/Adminhtml/Category/Save.php | 4 ++ ...ategoryProcessUrlRewriteMovingObserver.php | 64 ++++++++++++------- ...uplicateUrlControllerAfterSaveObserver.php | 5 +- ...ProductProcessUrlRewriteSavingObserver.php | 1 - .../CatalogUrlRewrite/etc/adminhtml/di.xml | 4 +- .../etc/adminhtml/events.xml | 6 ++ .../addProductUrlDuplicateMessage.phtml | 24 ------- .../addUrlDuplicateWarningMessage.phtml | 51 +++++++++++++++ .../Cms/Controller/Adminhtml/Page/Save.php | 6 ++ app/code/Magento/Cms/etc/adminhtml/di.xml | 12 ++++ app/code/Magento/Cms/etc/adminhtml/events.xml | 12 ++++ .../Model/Storage/AbstractStorage.php | 2 +- .../UrlRewrite/Model/Storage/DbStorage.php | 7 +- .../Model/UrlDuplicatesRegistry.php | 6 +- .../web/css/source/module/pages/_login.less | 2 +- .../web/css/source/components/_messages.less | 4 +- 17 files changed, 152 insertions(+), 62 deletions(-) delete mode 100644 app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml create mode 100644 app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml create mode 100644 app/code/Magento/Cms/etc/adminhtml/events.xml diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php index 704054dc22e5b..b38e51fb9075e 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php @@ -67,6 +67,10 @@ public function execute() throw new \Exception(__('Category is not available for requested store.')); } $category->move($parentNodeId, $prevNodeId); + $this->_eventManager->dispatch( + 'controller_action_catalog_category_move_after', + ['controller' => $this, 'category' => $category] + ); } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { $error = true; $this->messageManager->addError(__('There was a category move error. %1', $e->getMessage())); diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php index a296126f73df7..9bfab59273835 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php @@ -212,6 +212,10 @@ public function execute() $category->save(); $this->messageManager->addSuccess(__('You saved the category.')); + $this->_eventManager->dispatch( + 'controller_action_catalog_category_save_entity_after', + ['controller' => $this, 'category' => $category] + ); } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { var_dump($e->getMessage()); $this->messageManager->addError($e->getMessage()); diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php index 6d06df1c655ad..76c2e1a85a8da 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php @@ -10,10 +10,10 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator; use Magento\CatalogUrlRewrite\Model\UrlRewriteBunchReplacer; use Magento\Framework\App\Config\ScopeConfigInterface; -use Magento\Framework\App\ObjectManager; use Magento\Store\Model\ScopeInterface; use Magento\UrlRewrite\Model\UrlPersistInterface; use Magento\Framework\Event\ObserverInterface; +use Magento\CatalogUrlRewrite\Model\Map\DatabaseMapPool; class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface { @@ -34,37 +34,40 @@ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface */ private $urlRewriteBunchReplacer; + /** @var DatabaseMapPool */ + private $databaseMapPool; + + /** @var string[] */ + private $dataUrlRewriteClassNames; + /** * @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator * @param UrlPersistInterface $urlPersist * @param ScopeConfigInterface $scopeConfig * @param UrlRewriteHandler $urlRewriteHandler + * @param UrlRewriteBunchReplacer $urlRewriteBunchReplacer + * @param DatabaseMapPool $databaseMapPool + * @param string[] $dataUrlRewriteClassNames */ public function __construct( CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator, UrlPersistInterface $urlPersist, ScopeConfigInterface $scopeConfig, - UrlRewriteHandler $urlRewriteHandler + UrlRewriteHandler $urlRewriteHandler, + UrlRewriteBunchReplacer $urlRewriteBunchReplacer, + DatabaseMapPool $databaseMapPool, + $dataUrlRewriteClassNames = [ + DataCategoryUrlRewriteDatabaseMap::class, + DataProductUrlRewriteDatabaseMap::class + ] ) { $this->categoryUrlRewriteGenerator = $categoryUrlRewriteGenerator; $this->urlPersist = $urlPersist; $this->scopeConfig = $scopeConfig; $this->urlRewriteHandler = $urlRewriteHandler; - } - - /** - * Retrieve Url Rewrite Replacer based on bunches - * - * @deprecated - * @return UrlRewriteBunchReplacer - */ - private function getUrlRewriteBunchReplacer() - { - if (!$this->urlRewriteBunchReplacer) { - $this->urlRewriteBunchReplacer = ObjectManager::getInstance()->get(UrlRewriteBunchReplacer::class); - } - - return $this->urlRewriteBunchReplacer; + $this->urlRewriteBunchReplacer = $urlRewriteBunchReplacer; + $this->databaseMapPool = $databaseMapPool; + $this->dataUrlRewriteClassNames = $dataUrlRewriteClassNames; } /** @@ -82,12 +85,29 @@ public function execute(\Magento\Framework\Event\Observer $observer) $category->getStoreId() ); $category->setData('save_rewrites_history', $saveRewritesHistory); - $urlRewrites = array_merge( - $this->categoryUrlRewriteGenerator->generate($category, true), - $this->urlRewriteHandler->generateProductUrlRewrites($category) - ); + $categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category, true); $this->urlRewriteHandler->deleteCategoryRewritesForChildren($category); - $this->getUrlRewriteBunchReplacer()->doBunchReplace($urlRewrites); + $this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult); + + + $productUrlRewriteResult = $this->urlRewriteHandler->generateProductUrlRewrites($category); + $this->urlRewriteBunchReplacer->doBunchReplace($productUrlRewriteResult); + + //frees memory for maps that are self-initialized in multiple classes that were called by the generators + $this->resetUrlRewritesDataMaps($category); + } + } + + /** + * Resets used data maps to free up memory and temporary tables + * + * @param Category $category + * @return void + */ + private function resetUrlRewritesDataMaps($category) + { + foreach ($this->dataUrlRewriteClassNames as $className) { + $this->databaseMapPool->resetMap($className, $category->getEntityId()); } } } diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php index bb90cffa7f9bc..5bbed4470c787 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -58,9 +58,10 @@ public function execute(\Magento\Framework\Event\Observer $observer) $urls .= $url->getRequestPath() . ', '; } $urls = rtrim($urls, ', '); + $this->messageManager->addComplexWarningMessage( - 'addProductUrlDuplicateMessage', - ['urls' => $this->escaper->escapeHtml($urls)] + 'addUrlDuplicateWarningMessage', + ['urls' => $urls, 'entity_type' => $observer->getProduct() ? 'product' : 'category'] ); } } diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php index 364559b9086b2..d23362cd4f1da 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php @@ -67,7 +67,6 @@ public function execute(\Magento\Framework\Event\Observer $observer) ]); if ($product->isVisibleInSiteVisibility()) { - $this->urlDuplicatesRegistry->clearUrlDuplicates(); $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); } } diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index 0b363956ba9d7..8d7d257ee7e82 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -38,10 +38,10 @@ - + \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE - Magento_CatalogUrlRewrite::messages/addProductUrlDuplicateMessage.phtml + Magento_CatalogUrlRewrite::messages/addUrlDuplicateWarningMessage.phtml diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml index 79c4ae1ec1073..b43a9ec4ad3c5 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml @@ -12,4 +12,10 @@ + + + + + + diff --git a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml deleted file mode 100644 index 6e96f9c894aac..0000000000000 --- a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addProductUrlDuplicateMessage.phtml +++ /dev/null @@ -1,24 +0,0 @@ - -

- escapeHtml(__('A conflict has occurred between the product\'s URL and other URL.')); ?> -

-

- escapeHtml( - __('As a result, you cannot access this product through the specified URL:') - ); ?> - - getData('urls');?> - -
- escapeHtml( - __('To fix the conflict, navigate to Search Engine Optimization section, then edit the URL key to make it unique.') - ); - ?> -

\ No newline at end of file diff --git a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml new file mode 100644 index 0000000000000..1ca315275fccb --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml @@ -0,0 +1,51 @@ +getData('entity_type'); +?> +

+ escapeHtml(__('A conflict has occurred between the product\'s URL(s) and other URL(s).')); + } else { + echo $block->escapeHtml(__('A conflict has occurred between the category\'s URL(s) and other URL(s).')); + } + ?> +

+

+ escapeHtml( + __('As a result, you cannot access this product through the specified URL(s): ') + ); + } else { + echo $block->escapeHtml( + __('As a result, you cannot access this category through the specified URL(s): ') + ); + } + $urls = explode(', ', $block->getData('urls')); + if (!empty($urls)) { + if (count($urls) > 1) { + echo "
"; + } + $count = 1; + foreach ($urls as $url) { + echo "" . $block->escapeHtml($url) . ""; + if ($count <= count($urls)) { + echo "
"; + } + $count++; + } + } + echo $block->escapeHtml( + __( + 'To fix the conflict, navigate to Search Engine Optimization section, ' + . 'then edit the URL key to make it unique.' + ) + ); + ?> +

\ No newline at end of file diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php index 46ebd40d59b11..1f4afb89ba663 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php @@ -107,6 +107,12 @@ public function execute() try { $this->pageRepository->save($model); $this->messageManager->addSuccess(__('You saved the page.')); + + $this->_eventManager->dispatch( + 'controller_action_cms_page_save_entity_after', + ['controller' => $this, 'page' => $model] + ); + $this->dataPersistor->clear('cms_page'); if ($this->getRequest()->getParam('back')) { return $resultRedirect->setPath('*/*/edit', ['page_id' => $model->getId(), '_current' => true]); diff --git a/app/code/Magento/Cms/etc/adminhtml/di.xml b/app/code/Magento/Cms/etc/adminhtml/di.xml index 8a1a4b24258d7..c0dcd2024cfbd 100644 --- a/app/code/Magento/Cms/etc/adminhtml/di.xml +++ b/app/code/Magento/Cms/etc/adminhtml/di.xml @@ -12,4 +12,16 @@ Magento\Framework\Url
+ + + + + \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE + + Magento_Cms::messages/addUrlDuplicateWarningMessage.phtml + + + + + diff --git a/app/code/Magento/Cms/etc/adminhtml/events.xml b/app/code/Magento/Cms/etc/adminhtml/events.xml new file mode 100644 index 0000000000000..a4eca5b2f86f0 --- /dev/null +++ b/app/code/Magento/Cms/etc/adminhtml/events.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index 0b6ad0677002e..edaebde861503 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -97,7 +97,7 @@ public function replace(array $urls) $savedUrls ); // Set the duplicates to registry so it can be processed by the presentation layer - $this->urlDuplicatesRegistry->setUrlDuplicates($unsavedUrlsDuplicates); + $this->urlDuplicatesRegistry->addUrlDuplicates($unsavedUrlsDuplicates); return $this->doReplace($urls); } diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index a73671ea322cf..80cc58c6bef65 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -153,11 +153,12 @@ private function insert(array $data) ) { $this->logger->warning( __( - 'Could not insert a duplicate URL when trying to insert %1 for %2 on store %3, entity id %4.', + 'Could not insert a conflicting URL when trying to insert \'%1\' for %2 ' + .'with entity id %3 on store %4', $data['request_path'], $data['entity_type'], - $data['store_id'], - $data['entity_id'] + $data['entity_id'], + $data['store_id'] ) ); } else { diff --git a/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php index 939c57401bafa..b48cfdf66cd40 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php +++ b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php @@ -35,12 +35,10 @@ public function clearUrlDuplicates() * @return void * @throws \Magento\Framework\Exception\RuntimeException */ - public function setUrlDuplicates(array $urlDuplicates) + public function addUrlDuplicates(array $urlDuplicates) { if (empty($this->urlDuplicates)) { - $this->urlDuplicates = $urlDuplicates; - } else { - throw new \Magento\Framework\Exception\RuntimeException(__('Url rewrites duplicates can only be set once')); + $this->urlDuplicates = array_merge($this->urlDuplicates, $urlDuplicates); } } diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_login.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_login.less index da8158e045ab6..97ed1d8cdb1ec 100644 --- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_login.less +++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/pages/_login.less @@ -84,7 +84,7 @@ } .messages { - margin-top: -1rem; + margin-top: 0.5rem; + form .admin__legend { display: none; diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less index 6564b22e4f0ea..de24bf89620d4 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_messages.less @@ -76,7 +76,7 @@ position: absolute; speak: none; text-shadow: none; - top: 1.5rem; + top: 1.3rem; width: auto; } } @@ -110,7 +110,7 @@ content: @alert-icon__error__content; font-size: @alert-icon__error__font-size; left: 2.2rem; - margin-top: -1rem; + margin-top: 0.5rem; } } From d25dfb36bec92a2d0204268ccbfeb60260173bed Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Wed, 10 May 2017 17:48:42 -0500 Subject: [PATCH 022/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - throwing exception for category --- .../Controller/Adminhtml/Category/Move.php | 4 ---- .../Controller/Adminhtml/Category/Save.php | 4 ---- ...CategoryProcessUrlRewriteMovingObserver.php | 18 ++++++++++++++++-- ...CategoryProcessUrlRewriteSavingObserver.php | 18 ++++++++++++++++++ ...DuplicateUrlControllerAfterSaveObserver.php | 1 + .../CatalogUrlRewrite/etc/adminhtml/events.xml | 6 ------ .../UrlRewrite/Model/UrlDuplicatesRegistry.php | 1 - 7 files changed, 35 insertions(+), 17 deletions(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php index b38e51fb9075e..704054dc22e5b 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php @@ -67,10 +67,6 @@ public function execute() throw new \Exception(__('Category is not available for requested store.')); } $category->move($parentNodeId, $prevNodeId); - $this->_eventManager->dispatch( - 'controller_action_catalog_category_move_after', - ['controller' => $this, 'category' => $category] - ); } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { $error = true; $this->messageManager->addError(__('There was a category move error. %1', $e->getMessage())); diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php index 9bfab59273835..a296126f73df7 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php @@ -212,10 +212,6 @@ public function execute() $category->save(); $this->messageManager->addSuccess(__('You saved the category.')); - $this->_eventManager->dispatch( - 'controller_action_catalog_category_save_entity_after', - ['controller' => $this, 'category' => $category] - ); } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { var_dump($e->getMessage()); $this->messageManager->addError($e->getMessage()); diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php index 76c2e1a85a8da..f8f10a54a4f8c 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php @@ -14,6 +14,7 @@ use Magento\UrlRewrite\Model\UrlPersistInterface; use Magento\Framework\Event\ObserverInterface; use Magento\CatalogUrlRewrite\Model\Map\DatabaseMapPool; +use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface { @@ -40,6 +41,9 @@ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface /** @var string[] */ private $dataUrlRewriteClassNames; + /** @var UrlDuplicatesRegistry */ + private $urlDuplicatesRegistry; + /** * @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator * @param UrlPersistInterface $urlPersist @@ -47,6 +51,7 @@ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface * @param UrlRewriteHandler $urlRewriteHandler * @param UrlRewriteBunchReplacer $urlRewriteBunchReplacer * @param DatabaseMapPool $databaseMapPool + * @param UrlDuplicatesRegistry $urlDuplicatesRegistry, * @param string[] $dataUrlRewriteClassNames */ public function __construct( @@ -56,6 +61,7 @@ public function __construct( UrlRewriteHandler $urlRewriteHandler, UrlRewriteBunchReplacer $urlRewriteBunchReplacer, DatabaseMapPool $databaseMapPool, + UrlDuplicatesRegistry $urlDuplicatesRegistry, $dataUrlRewriteClassNames = [ DataCategoryUrlRewriteDatabaseMap::class, DataProductUrlRewriteDatabaseMap::class @@ -85,11 +91,19 @@ public function execute(\Magento\Framework\Event\Observer $observer) $category->getStoreId() ); $category->setData('save_rewrites_history', $saveRewritesHistory); + $this->urlDuplicatesRegistry->clearUrlDuplicates(); $categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category, true); $this->urlRewriteHandler->deleteCategoryRewritesForChildren($category); $this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult); - - + if (!empty($this->urlDuplicatesRegistry->getUrlDuplicates())) { + throw new \Magento\Framework\Exception\AlreadyExistsException( + __( + 'URL key %1 for specified store already exists.', + current($this->urlDuplicatesRegistry->getUrlDuplicates()) + ) + ); + } + $this->urlDuplicatesRegistry->clearUrlDuplicates(); $productUrlRewriteResult = $this->urlRewriteHandler->generateProductUrlRewrites($category); $this->urlRewriteBunchReplacer->doBunchReplace($productUrlRewriteResult); diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php index eff2e529ce557..aed080a23131d 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php @@ -12,6 +12,7 @@ use Magento\CatalogUrlRewrite\Model\Map\DataProductUrlRewriteDatabaseMap; use Magento\CatalogUrlRewrite\Model\UrlRewriteBunchReplacer; use Magento\Framework\Event\ObserverInterface; +use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; class CategoryProcessUrlRewriteSavingObserver implements ObserverInterface { @@ -30,11 +31,15 @@ class CategoryProcessUrlRewriteSavingObserver implements ObserverInterface /** @var string[] */ private $dataUrlRewriteClassNames; + /** @var UrlDuplicatesRegistry */ + private $urlDuplicatesRegistry; + /** * @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator * @param UrlRewriteHandler $urlRewriteHandler * @param UrlRewriteBunchReplacer $urlRewriteBunchReplacer * @param DatabaseMapPool $databaseMapPool + * @param UrlDuplicatesRegistry $urlDuplicatesRegistry * @param string[] $dataUrlRewriteClassNames */ public function __construct( @@ -42,6 +47,7 @@ public function __construct( UrlRewriteHandler $urlRewriteHandler, UrlRewriteBunchReplacer $urlRewriteBunchReplacer, DatabaseMapPool $databaseMapPool, + UrlDuplicatesRegistry $urlDuplicatesRegistry, $dataUrlRewriteClassNames = [ DataCategoryUrlRewriteDatabaseMap::class, DataProductUrlRewriteDatabaseMap::class @@ -52,6 +58,7 @@ public function __construct( $this->urlRewriteBunchReplacer = $urlRewriteBunchReplacer; $this->databaseMapPool = $databaseMapPool; $this->dataUrlRewriteClassNames = $dataUrlRewriteClassNames; + $this->urlDuplicatesRegistry = $urlDuplicatesRegistry; } /** @@ -59,6 +66,7 @@ public function __construct( * * @param \Magento\Framework\Event\Observer $observer * @return void + * @throws \Magento\Framework\Exception\AlreadyExistsException */ public function execute(\Magento\Framework\Event\Observer $observer) { @@ -71,9 +79,19 @@ public function execute(\Magento\Framework\Event\Observer $observer) || $category->dataHasChangedFor('is_anchor') || $category->getIsChangedProductList() ) { + $this->urlDuplicatesRegistry->clearUrlDuplicates(); $categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category); $this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult); + if (!empty($this->urlDuplicatesRegistry->getUrlDuplicates())) { + throw new \Magento\Framework\Exception\AlreadyExistsException( + __( + 'URL key %1 for specified store already exists.', + current($this->urlDuplicatesRegistry->getUrlDuplicates()) + ) + ); + } + $this->urlDuplicatesRegistry->clearUrlDuplicates(); $productUrlRewriteResult = $this->urlRewriteHandler->generateProductUrlRewrites($category); $this->urlRewriteBunchReplacer->doBunchReplace($productUrlRewriteResult); diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php index 5bbed4470c787..68cd881f91f2c 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php @@ -59,6 +59,7 @@ public function execute(\Magento\Framework\Event\Observer $observer) } $urls = rtrim($urls, ', '); + //replace this with admin permament notification $this->messageManager->addComplexWarningMessage( 'addUrlDuplicateWarningMessage', ['urls' => $urls, 'entity_type' => $observer->getProduct() ? 'product' : 'category'] diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml index b43a9ec4ad3c5..79c4ae1ec1073 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml @@ -12,10 +12,4 @@ - - - - - - diff --git a/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php index b48cfdf66cd40..2903076967895 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php +++ b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php @@ -33,7 +33,6 @@ public function clearUrlDuplicates() * * @param array $urlDuplicates * @return void - * @throws \Magento\Framework\Exception\RuntimeException */ public function addUrlDuplicates(array $urlDuplicates) { From 397391d1c84cba2170ae112f123e683636ed1e8f Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 12 May 2017 13:14:17 -0500 Subject: [PATCH 023/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - throwing exception for replace, and have a better exception message --- ...ategoryProcessUrlRewriteMovingObserver.php | 22 ++---- ...ategoryProcessUrlRewriteSavingObserver.php | 24 ++----- ...uplicateUrlControllerAfterSaveObserver.php | 69 ------------------- ...ProductProcessUrlRewriteSavingObserver.php | 11 +-- .../CatalogUrlRewrite/etc/adminhtml/di.xml | 12 ---- .../etc/adminhtml/events.xml | 3 - .../addUrlDuplicateWarningMessage.phtml | 51 -------------- app/code/Magento/Cms/etc/adminhtml/di.xml | 12 ---- app/code/Magento/Cms/etc/adminhtml/events.xml | 12 ---- .../Model/Storage/AbstractStorage.php | 21 +----- .../UrlRewrite/Model/Storage/DbStorage.php | 29 +++++--- .../Model/UrlDuplicatesRegistry.php | 53 -------------- .../UrlRewrite/Model/UrlPersistInterface.php | 1 + 13 files changed, 35 insertions(+), 285 deletions(-) delete mode 100644 app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php delete mode 100644 app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml delete mode 100644 app/code/Magento/Cms/etc/adminhtml/events.xml delete mode 100644 app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php index f8f10a54a4f8c..78a7592450424 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php @@ -14,8 +14,12 @@ use Magento\UrlRewrite\Model\UrlPersistInterface; use Magento\Framework\Event\ObserverInterface; use Magento\CatalogUrlRewrite\Model\Map\DatabaseMapPool; -use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; +/** + * Generates Category Url Rewrites after move/save and Products Url Rewrites assigned to the category that's being saved + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface { /** @var CategoryUrlRewriteGenerator */ @@ -41,9 +45,6 @@ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface /** @var string[] */ private $dataUrlRewriteClassNames; - /** @var UrlDuplicatesRegistry */ - private $urlDuplicatesRegistry; - /** * @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator * @param UrlPersistInterface $urlPersist @@ -51,7 +52,6 @@ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface * @param UrlRewriteHandler $urlRewriteHandler * @param UrlRewriteBunchReplacer $urlRewriteBunchReplacer * @param DatabaseMapPool $databaseMapPool - * @param UrlDuplicatesRegistry $urlDuplicatesRegistry, * @param string[] $dataUrlRewriteClassNames */ public function __construct( @@ -61,7 +61,6 @@ public function __construct( UrlRewriteHandler $urlRewriteHandler, UrlRewriteBunchReplacer $urlRewriteBunchReplacer, DatabaseMapPool $databaseMapPool, - UrlDuplicatesRegistry $urlDuplicatesRegistry, $dataUrlRewriteClassNames = [ DataCategoryUrlRewriteDatabaseMap::class, DataProductUrlRewriteDatabaseMap::class @@ -91,22 +90,11 @@ public function execute(\Magento\Framework\Event\Observer $observer) $category->getStoreId() ); $category->setData('save_rewrites_history', $saveRewritesHistory); - $this->urlDuplicatesRegistry->clearUrlDuplicates(); $categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category, true); $this->urlRewriteHandler->deleteCategoryRewritesForChildren($category); $this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult); - if (!empty($this->urlDuplicatesRegistry->getUrlDuplicates())) { - throw new \Magento\Framework\Exception\AlreadyExistsException( - __( - 'URL key %1 for specified store already exists.', - current($this->urlDuplicatesRegistry->getUrlDuplicates()) - ) - ); - } - $this->urlDuplicatesRegistry->clearUrlDuplicates(); $productUrlRewriteResult = $this->urlRewriteHandler->generateProductUrlRewrites($category); $this->urlRewriteBunchReplacer->doBunchReplace($productUrlRewriteResult); - //frees memory for maps that are self-initialized in multiple classes that were called by the generators $this->resetUrlRewritesDataMaps($category); } diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php index aed080a23131d..98df1fe591b15 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php @@ -12,8 +12,12 @@ use Magento\CatalogUrlRewrite\Model\Map\DataProductUrlRewriteDatabaseMap; use Magento\CatalogUrlRewrite\Model\UrlRewriteBunchReplacer; use Magento\Framework\Event\ObserverInterface; -use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; +/** + * Generates Category Url Rewrites after save and Products Url Rewrites assigned to the category that's being saved + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class CategoryProcessUrlRewriteSavingObserver implements ObserverInterface { /** @var CategoryUrlRewriteGenerator */ @@ -31,15 +35,11 @@ class CategoryProcessUrlRewriteSavingObserver implements ObserverInterface /** @var string[] */ private $dataUrlRewriteClassNames; - /** @var UrlDuplicatesRegistry */ - private $urlDuplicatesRegistry; - /** * @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator * @param UrlRewriteHandler $urlRewriteHandler * @param UrlRewriteBunchReplacer $urlRewriteBunchReplacer * @param DatabaseMapPool $databaseMapPool - * @param UrlDuplicatesRegistry $urlDuplicatesRegistry * @param string[] $dataUrlRewriteClassNames */ public function __construct( @@ -47,7 +47,6 @@ public function __construct( UrlRewriteHandler $urlRewriteHandler, UrlRewriteBunchReplacer $urlRewriteBunchReplacer, DatabaseMapPool $databaseMapPool, - UrlDuplicatesRegistry $urlDuplicatesRegistry, $dataUrlRewriteClassNames = [ DataCategoryUrlRewriteDatabaseMap::class, DataProductUrlRewriteDatabaseMap::class @@ -58,7 +57,6 @@ public function __construct( $this->urlRewriteBunchReplacer = $urlRewriteBunchReplacer; $this->databaseMapPool = $databaseMapPool; $this->dataUrlRewriteClassNames = $dataUrlRewriteClassNames; - $this->urlDuplicatesRegistry = $urlDuplicatesRegistry; } /** @@ -79,22 +77,10 @@ public function execute(\Magento\Framework\Event\Observer $observer) || $category->dataHasChangedFor('is_anchor') || $category->getIsChangedProductList() ) { - $this->urlDuplicatesRegistry->clearUrlDuplicates(); $categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category); $this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult); - if (!empty($this->urlDuplicatesRegistry->getUrlDuplicates())) { - throw new \Magento\Framework\Exception\AlreadyExistsException( - __( - 'URL key %1 for specified store already exists.', - current($this->urlDuplicatesRegistry->getUrlDuplicates()) - ) - ); - } - - $this->urlDuplicatesRegistry->clearUrlDuplicates(); $productUrlRewriteResult = $this->urlRewriteHandler->generateProductUrlRewrites($category); $this->urlRewriteBunchReplacer->doBunchReplace($productUrlRewriteResult); - //frees memory for maps that are self-initialized in multiple classes that were called by the generators $this->resetUrlRewritesDataMaps($category); } diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php deleted file mode 100644 index 68cd881f91f2c..0000000000000 --- a/app/code/Magento/CatalogUrlRewrite/Observer/DuplicateUrlControllerAfterSaveObserver.php +++ /dev/null @@ -1,69 +0,0 @@ -messageManager = $messageManager; - $this->escaper = $escaper; - $this->urlDuplicatesRegistry = $urlDuplicatesRegistry; - } - - /** - * Add url rewrite duplicates warnings - * - * @param \Magento\Framework\Event\Observer $observer - * @return void - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function execute(\Magento\Framework\Event\Observer $observer) - { - if (!empty($this->urlDuplicatesRegistry->getUrlDuplicates())) { - $urls = ''; - foreach ($this->urlDuplicatesRegistry->getUrlDuplicates() as $url) { - /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url */ - $urls .= $url->getRequestPath() . ', '; - } - $urls = rtrim($urls, ', '); - - //replace this with admin permament notification - $this->messageManager->addComplexWarningMessage( - 'addUrlDuplicateWarningMessage', - ['urls' => $urls, 'entity_type' => $observer->getProduct() ? 'product' : 'category'] - ); - } - } -} diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php index d23362cd4f1da..e4ccd0b869db7 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php @@ -10,7 +10,6 @@ use Magento\UrlRewrite\Model\UrlPersistInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use Magento\Framework\Event\ObserverInterface; -use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; class ProductProcessUrlRewriteSavingObserver implements ObserverInterface { @@ -24,24 +23,16 @@ class ProductProcessUrlRewriteSavingObserver implements ObserverInterface */ private $urlPersist; - /** - * @var UrlDuplicatesRegistry - */ - private $urlDuplicatesRegistry; - /** * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator * @param UrlPersistInterface $urlPersist - * @param UrlDuplicatesRegistry $urlDuplicatesRegistry */ public function __construct( ProductUrlRewriteGenerator $productUrlRewriteGenerator, - UrlPersistInterface $urlPersist, - UrlDuplicatesRegistry $urlDuplicatesRegistry + UrlPersistInterface $urlPersist ) { $this->productUrlRewriteGenerator = $productUrlRewriteGenerator; $this->urlPersist = $urlPersist; - $this->urlDuplicatesRegistry = $urlDuplicatesRegistry; } /** diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index 8d7d257ee7e82..32ecc97d0f85f 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -35,16 +35,4 @@ - - - - - \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE - - Magento_CatalogUrlRewrite::messages/addUrlDuplicateWarningMessage.phtml - - - - - diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml index 79c4ae1ec1073..9c4a8aaf41231 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml @@ -9,7 +9,4 @@ - - - diff --git a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml b/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml deleted file mode 100644 index 1ca315275fccb..0000000000000 --- a/app/code/Magento/CatalogUrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml +++ /dev/null @@ -1,51 +0,0 @@ -getData('entity_type'); -?> -

- escapeHtml(__('A conflict has occurred between the product\'s URL(s) and other URL(s).')); - } else { - echo $block->escapeHtml(__('A conflict has occurred between the category\'s URL(s) and other URL(s).')); - } - ?> -

-

- escapeHtml( - __('As a result, you cannot access this product through the specified URL(s): ') - ); - } else { - echo $block->escapeHtml( - __('As a result, you cannot access this category through the specified URL(s): ') - ); - } - $urls = explode(', ', $block->getData('urls')); - if (!empty($urls)) { - if (count($urls) > 1) { - echo "
"; - } - $count = 1; - foreach ($urls as $url) { - echo "" . $block->escapeHtml($url) . ""; - if ($count <= count($urls)) { - echo "
"; - } - $count++; - } - } - echo $block->escapeHtml( - __( - 'To fix the conflict, navigate to Search Engine Optimization section, ' - . 'then edit the URL key to make it unique.' - ) - ); - ?> -

\ No newline at end of file diff --git a/app/code/Magento/Cms/etc/adminhtml/di.xml b/app/code/Magento/Cms/etc/adminhtml/di.xml index c0dcd2024cfbd..8a1a4b24258d7 100644 --- a/app/code/Magento/Cms/etc/adminhtml/di.xml +++ b/app/code/Magento/Cms/etc/adminhtml/di.xml @@ -12,16 +12,4 @@ Magento\Framework\Url
- - - - - \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE - - Magento_Cms::messages/addUrlDuplicateWarningMessage.phtml - - - - - diff --git a/app/code/Magento/Cms/etc/adminhtml/events.xml b/app/code/Magento/Cms/etc/adminhtml/events.xml deleted file mode 100644 index a4eca5b2f86f0..0000000000000 --- a/app/code/Magento/Cms/etc/adminhtml/events.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index edaebde861503..e976172bc9c42 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -8,7 +8,6 @@ use Magento\UrlRewrite\Model\StorageInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory; use Magento\Framework\Api\DataObjectHelper; -use Magento\UrlRewrite\Model\UrlDuplicatesRegistry; /** * Abstract db storage @@ -21,25 +20,16 @@ abstract class AbstractStorage implements StorageInterface /** @var DataObjectHelper */ protected $dataObjectHelper; - /** - * @var UrlDuplicatesRegistry - */ - private $urlDuplicatesRegistry; - /** * @param UrlRewriteFactory $urlRewriteFactory * @param DataObjectHelper $dataObjectHelper - * @param UrlDuplicatesRegistry $urlDuplicatesRegistry */ public function __construct( UrlRewriteFactory $urlRewriteFactory, - DataObjectHelper $dataObjectHelper, - UrlDuplicatesRegistry $urlDuplicatesRegistry = null + DataObjectHelper $dataObjectHelper ) { $this->urlRewriteFactory = $urlRewriteFactory; $this->dataObjectHelper = $dataObjectHelper; - $this->urlDuplicatesRegistry = $urlDuplicatesRegistry ?: \Magento\Framework\App\ObjectManager::getInstance() - ->get(UrlDuplicatesRegistry::class); } /** @@ -90,14 +80,6 @@ public function replace(array $urls) if (!$urls) { return []; } - - $savedUrls = $this->doReplace($urls); - $unsavedUrlsDuplicates = array_diff_key( - $urls, - $savedUrls - ); - // Set the duplicates to registry so it can be processed by the presentation layer - $this->urlDuplicatesRegistry->addUrlDuplicates($unsavedUrlsDuplicates); return $this->doReplace($urls); } @@ -106,6 +88,7 @@ public function replace(array $urls) * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + * @throws \Magento\Framework\Exception\AlreadyExistsException */ abstract protected function doReplace($urls); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 80cc58c6bef65..78871874d7022 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -100,11 +100,21 @@ protected function doReplace($urls) $urlData[UrlRewrite::ENTITY_TYPE] = $type; $this->deleteByData($urlData); } - foreach ($urls as $key => $url) { - if (!$this->insert($url->toArray())) { - unset($urls[$key]); + $urlConflicted = []; + foreach ($urls as $url) { + if (!$this->insertUrl($url->toArray())) { + $urlConflicted[$url->getStoreId()] = $url->getRequestPath(); } } + if (!empty($urlConflicted)) { + throw new \Magento\Framework\Exception\AlreadyExistsException( + __( + 'A conflict has occurred between the entity\'s URL(s) and other URL(s): %1.', + implode(', ', $urlConflicted) + ) + ); + } + return $urls; } @@ -126,7 +136,7 @@ protected function insertMultiple($data) && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) ) { throw new \Magento\Framework\Exception\AlreadyExistsException( - __('URL key for specified store already exists.') + __('A conflict has occurred between the entity\'s URL(s) and other URL(s).') ); } throw $e; @@ -134,12 +144,13 @@ protected function insertMultiple($data) } /** - * Inserts a url as array to database + * Inserts a url as array to database and returns conflict status * * @param array $data * @return bool + * @throws \Magento\Framework\Exception\LocalizedException */ - private function insert(array $data) + private function insertUrl(array $data) { try { return $this->connection->insert($this->resource->getTableName(self::TABLE_NAME), $data) > 0; @@ -161,11 +172,13 @@ private function insert(array $data) $data['store_id'] ) ); + return false; } else { - $this->logger->error($e->getMessage()); + throw new \Magento\Framework\Exception\LocalizedException( + __('Something went wrong while inserting a url key.') + ); } } - return false; } /** diff --git a/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php b/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php deleted file mode 100644 index 2903076967895..0000000000000 --- a/app/code/Magento/UrlRewrite/Model/UrlDuplicatesRegistry.php +++ /dev/null @@ -1,53 +0,0 @@ -urlDuplicates = []; - } - - /** - * Set the url rewrites duplicates that resulted from a saving process - * - * @param array $urlDuplicates - * @return void - */ - public function addUrlDuplicates(array $urlDuplicates) - { - if (empty($this->urlDuplicates)) { - $this->urlDuplicates = array_merge($this->urlDuplicates, $urlDuplicates); - } - } - - /** - * Returns the stored url rewrites duplicates - * - * @return array|\Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - */ - public function getUrlDuplicates() - { - return $this->urlDuplicates; - } -} diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php index 371a683351eea..03f76fbc70268 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php @@ -16,6 +16,7 @@ interface UrlPersistInterface * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + * @throws \Magento\Framework\Exception\AlreadyExistsException|\Magento\Framework\Exception\LocalizedException */ public function replace(array $urls); From 9b3a4a5e01fdcaa1754c2b35cf97b12b02933ae0 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 12 May 2017 15:39:12 -0500 Subject: [PATCH 024/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - throwing detailed exception about each conflicting entity --- .../Model/Storage/AbstractStorage.php | 4 +- .../UrlRewrite/Model/Storage/DbStorage.php | 39 +++++++++++++++++-- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index e976172bc9c42..fe61d3f08a6c1 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -50,7 +50,7 @@ public function findAllByData(array $data) * Find all rows by specific filter. Template method * * @param array $data - * @return array + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] */ abstract protected function doFindAllByData($data); @@ -68,7 +68,7 @@ public function findOneByData(array $data) * Find row by specific filter. Template method * * @param array $data - * @return array + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite */ abstract protected function doFindOneByData($data); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 78871874d7022..76672b202a603 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -10,6 +10,8 @@ use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory; use Magento\Framework\Api\DataObjectHelper; use Psr\Log\LoggerInterface; +use Magento\UrlRewrite\Service\V1\Data\UrlRewrite as UrlRewriteData; +use Magento\Framework\UrlInterface; class DbStorage extends AbstractStorage { @@ -38,22 +40,31 @@ class DbStorage extends AbstractStorage */ private $logger; + /** + * @var \Magento\Framework\UrlInterface + */ + protected $urlBuilder; + /** * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory * @param DataObjectHelper $dataObjectHelper * @param \Magento\Framework\App\ResourceConnection $resource * @param \Psr\Log\LoggerInterface|null $logger + * @param \Magento\Framework\UrlInterface|null $urlBuilder */ public function __construct( UrlRewriteFactory $urlRewriteFactory, DataObjectHelper $dataObjectHelper, ResourceConnection $resource, - LoggerInterface $logger = null + LoggerInterface $logger = null, + UrlInterface $urlBuilder = null ) { $this->connection = $resource->getConnection(); $this->resource = $resource; $this->logger = $logger ?: \Magento\Framework\App\ObjectManager::getInstance() ->get(\Psr\Log\LoggerInterface::class); + $this->urlBuilder = $urlBuilder ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\UrlInterface::class); parent::__construct($urlRewriteFactory, $dataObjectHelper); } @@ -100,17 +111,37 @@ protected function doReplace($urls) $urlData[UrlRewrite::ENTITY_TYPE] = $type; $this->deleteByData($urlData); } + /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urlConflicted */ $urlConflicted = []; foreach ($urls as $url) { if (!$this->insertUrl($url->toArray())) { - $urlConflicted[$url->getStoreId()] = $url->getRequestPath(); + $urlConflicted[] = $url; } } if (!empty($urlConflicted)) { + $urlsWithLinks = ''; + foreach ($urlConflicted as $url) { + $urlFound = $this->doFindOneByData( + [ + UrlRewriteData::REQUEST_PATH => $url->getRequestPath(), + UrlRewriteData::STORE_ID => $url->getStoreId() + ] + ); + $adminEditUrl = $this->urlBuilder->getUrl( + 'adminhtml/url_rewrite/edit', + ['id' => $urlFound[UrlRewriteData::URL_REWRITE_ID]] + ); + $urlsWithLinks .='' + . $url->getRequestPath() . '
'; + } + throw new \Magento\Framework\Exception\AlreadyExistsException( __( - 'A conflict has occurred between the entity\'s URL(s) and other URL(s): %1.', - implode(', ', $urlConflicted) + 'A conflict has occurred between the entity\'s URL(s) and the existing URL(s):
%1' + . 'To fix the conflict, rename the conflicting urls by clicking on the links above, ' + . 'or navigate to Search Engine Optimization section, ' + . 'then edit the URL key to make it unique', + $urlsWithLinks ) ); } From beae4368d4a3bc7e75234eaba3dbf6dd3ff8d4d0 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 12 May 2017 15:47:22 -0500 Subject: [PATCH 025/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - changing signatures --- .../Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php | 2 +- app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php | 4 ++-- app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php | 4 ++-- app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php index 980b79670869b..748589924d916 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php @@ -15,7 +15,7 @@ class DbStorage extends BaseDbStorage * @param array $data * @return \Magento\Framework\DB\Select */ - protected function prepareSelect($data) + protected function prepareSelect(array $data) { $select = $this->connection->select(); $select->from(['url_rewrite' => $this->resource->getTableName('url_rewrite')]) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index fe61d3f08a6c1..9ad2eaf6931d6 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -68,9 +68,9 @@ public function findOneByData(array $data) * Find row by specific filter. Template method * * @param array $data - * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite + * @return array */ - abstract protected function doFindOneByData($data); + abstract protected function doFindOneByData(array $data); /** * {@inheritdoc} diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 76672b202a603..114d12a0cabe9 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -75,7 +75,7 @@ public function __construct( * @param array $data * @return \Magento\Framework\DB\Select */ - protected function prepareSelect($data) + protected function prepareSelect(array $data) { $select = $this->connection->select(); $select->from($this->resource->getTableName(self::TABLE_NAME)); @@ -97,7 +97,7 @@ protected function doFindAllByData($data) /** * {@inheritdoc} */ - protected function doFindOneByData($data) + protected function doFindOneByData(array $data) { return $this->connection->fetchRow($this->prepareSelect($data)); } diff --git a/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php b/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php index 6c084c147e28f..c8cec9c93b184 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php @@ -15,7 +15,7 @@ interface UrlFinderInterface * Find rewrite by specific data * * @param array $data - * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite|null + * @return array|null */ public function findOneByData(array $data); @@ -23,7 +23,7 @@ public function findOneByData(array $data); * Find rewrites by specific data * * @param array $data - * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + * @return array */ public function findAllByData(array $data); } From 2c5fc9f03856a6f0ca17632499ebd17508486aa2 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 12 May 2017 15:53:54 -0500 Subject: [PATCH 026/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - changing signatures --- .../Magento/UrlRewrite/Model/Storage/AbstractStorage.php | 6 +++--- app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php | 4 ++-- app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index 9ad2eaf6931d6..f794c3809af42 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -50,9 +50,9 @@ public function findAllByData(array $data) * Find all rows by specific filter. Template method * * @param array $data - * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + * @return array */ - abstract protected function doFindAllByData($data); + abstract protected function doFindAllByData(array $data); /** * {@inheritdoc} @@ -90,7 +90,7 @@ public function replace(array $urls) * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] * @throws \Magento\Framework\Exception\AlreadyExistsException */ - abstract protected function doReplace($urls); + abstract protected function doReplace(array $urls); /** * Create url rewrite object diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index 114d12a0cabe9..dab330974da5d 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -89,7 +89,7 @@ protected function prepareSelect(array $data) /** * {@inheritdoc} */ - protected function doFindAllByData($data) + protected function doFindAllByData(array $data) { return $this->connection->fetchAll($this->prepareSelect($data)); } @@ -105,7 +105,7 @@ protected function doFindOneByData(array $data) /** * {@inheritdoc} */ - protected function doReplace($urls) + protected function doReplace(array $urls) { foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) { $urlData[UrlRewrite::ENTITY_TYPE] = $type; diff --git a/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php b/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php index c8cec9c93b184..6c084c147e28f 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlFinderInterface.php @@ -15,7 +15,7 @@ interface UrlFinderInterface * Find rewrite by specific data * * @param array $data - * @return array|null + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite|null */ public function findOneByData(array $data); @@ -23,7 +23,7 @@ public function findOneByData(array $data); * Find rewrites by specific data * * @param array $data - * @return array + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] */ public function findAllByData(array $data); } From 916f075fa6a65507ae96501309ac6a42ebee2d6e Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 12 May 2017 16:27:41 -0500 Subject: [PATCH 027/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - modifying text on exception --- .../Magento/UrlRewrite/Model/Storage/DbStorage.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index dab330974da5d..df81562276621 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -119,7 +119,7 @@ protected function doReplace(array $urls) } } if (!empty($urlConflicted)) { - $urlsWithLinks = ''; + $urlsWithLinks = '
'; foreach ($urlConflicted as $url) { $urlFound = $this->doFindOneByData( [ @@ -131,16 +131,16 @@ protected function doReplace(array $urls) 'adminhtml/url_rewrite/edit', ['id' => $urlFound[UrlRewriteData::URL_REWRITE_ID]] ); - $urlsWithLinks .='' - . $url->getRequestPath() . '
'; + $urlsWithLinks .='- ' + . $url->getRequestPath() . '
'; } throw new \Magento\Framework\Exception\AlreadyExistsException( __( - 'A conflict has occurred between the entity\'s URL(s) and the existing URL(s):
%1' - . 'To fix the conflict, rename the conflicting urls by clicking on the links above, ' - . 'or navigate to Search Engine Optimization section, ' - . 'then edit the URL key to make it unique', + '

The value specified in the URL Key field would generate a URL that already exists.

' + .'To resolve this conflict, you can either change the value of the URL Key field ' + .' (located in the Search Engine Optimization section) to a unique value, ' + . 'or change the URL Key fields in all locations listed below:%1', $urlsWithLinks ) ); From 846c1f255c8216a3e5f38da93ca5357b0820e5ef Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Mon, 15 May 2017 15:39:58 -0500 Subject: [PATCH 028/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - separating message, and adding custom error message for html formatting --- .../Controller/Adminhtml/Product/Save.php | 15 +++++++ .../Model/Storage/AbstractStorage.php | 2 +- .../UrlRewrite/Model/Storage/DbStorage.php | 42 ++++--------------- .../Storage/UrlAlreadyExistsException.php | 41 ++++++++++++++++++ .../UrlRewrite/Model/UrlPersistInterface.php | 2 +- .../addUrlDuplicateWarningMessage.phtml | 33 +++++++++++++++ 6 files changed, 100 insertions(+), 35 deletions(-) create mode 100644 app/code/Magento/UrlRewrite/Model/Storage/UrlAlreadyExistsException.php create mode 100644 app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php index d307055f22bbf..ebacc0168cbbc 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php @@ -143,6 +143,21 @@ public function execute() $newProduct = $this->productCopier->copy($product); $this->messageManager->addSuccess(__('You duplicated the product.')); } + } catch (\Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException $e) { + $newUrls = []; + foreach ($e->getUrls() as $id => $url) { + $adminEditUrl = $this->_backendUrl->getUrl( + 'adminhtml/url_rewrite/edit', + ['id' => $id] + ); + $newUrls[$adminEditUrl] = $url->getRequestPath(); + } + $this->messageManager->addComplexErrorMessage( + 'addUrlDuplicateWarningMessage', + ['urls' => $newUrls] + ); + $this->getDataPersistor()->set('catalog_product', $data); + $redirectBack = $productId ? true : 'new'; } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addError($e->getMessage()); $this->getDataPersistor()->set('catalog_product', $data); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index f794c3809af42..0359fbc67018d 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -88,7 +88,7 @@ public function replace(array $urls) * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @throws \Magento\Framework\Exception\AlreadyExistsException + * @throws \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException */ abstract protected function doReplace(array $urls); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index df81562276621..fd6aaca917849 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -40,31 +40,22 @@ class DbStorage extends AbstractStorage */ private $logger; - /** - * @var \Magento\Framework\UrlInterface - */ - protected $urlBuilder; - /** * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory * @param DataObjectHelper $dataObjectHelper * @param \Magento\Framework\App\ResourceConnection $resource * @param \Psr\Log\LoggerInterface|null $logger - * @param \Magento\Framework\UrlInterface|null $urlBuilder */ public function __construct( UrlRewriteFactory $urlRewriteFactory, DataObjectHelper $dataObjectHelper, ResourceConnection $resource, - LoggerInterface $logger = null, - UrlInterface $urlBuilder = null + LoggerInterface $logger = null ) { $this->connection = $resource->getConnection(); $this->resource = $resource; $this->logger = $logger ?: \Magento\Framework\App\ObjectManager::getInstance() ->get(\Psr\Log\LoggerInterface::class); - $this->urlBuilder = $urlBuilder ?: \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Framework\UrlInterface::class); parent::__construct($urlRewriteFactory, $dataObjectHelper); } @@ -115,37 +106,22 @@ protected function doReplace(array $urls) $urlConflicted = []; foreach ($urls as $url) { if (!$this->insertUrl($url->toArray())) { - $urlConflicted[] = $url; - } - } - if (!empty($urlConflicted)) { - $urlsWithLinks = '
'; - foreach ($urlConflicted as $url) { $urlFound = $this->doFindOneByData( [ UrlRewriteData::REQUEST_PATH => $url->getRequestPath(), UrlRewriteData::STORE_ID => $url->getStoreId() ] ); - $adminEditUrl = $this->urlBuilder->getUrl( - 'adminhtml/url_rewrite/edit', - ['id' => $urlFound[UrlRewriteData::URL_REWRITE_ID]] - ); - $urlsWithLinks .='- ' - . $url->getRequestPath() . '
'; + $urlConflicted[$urlFound[UrlRewriteData::URL_REWRITE_ID]] = $url; } - - throw new \Magento\Framework\Exception\AlreadyExistsException( - __( - '

The value specified in the URL Key field would generate a URL that already exists.

' - .'To resolve this conflict, you can either change the value of the URL Key field ' - .' (located in the Search Engine Optimization section) to a unique value, ' - . 'or change the URL Key fields in all locations listed below:%1', - $urlsWithLinks - ) + } + if (!empty($urlConflicted)) { + throw new \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException( + __('URL key for specified store already exists.'), + null, + $urlConflicted ); } - return $urls; } @@ -193,7 +169,7 @@ private function insertUrl(array $data) && $e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) ) { - $this->logger->warning( + $this->logger->critical( __( 'Could not insert a conflicting URL when trying to insert \'%1\' for %2 ' .'with entity id %3 on store %4', diff --git a/app/code/Magento/UrlRewrite/Model/Storage/UrlAlreadyExistsException.php b/app/code/Magento/UrlRewrite/Model/Storage/UrlAlreadyExistsException.php new file mode 100644 index 0000000000000..59fa69a6b5b57 --- /dev/null +++ b/app/code/Magento/UrlRewrite/Model/Storage/UrlAlreadyExistsException.php @@ -0,0 +1,41 @@ +urls = $urls; + if ($phrase === null) { + $phrase = new Phrase('Unique constraint violation found'); + } + parent::__construct($phrase, $cause); + } + + /** + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + */ + public function getUrls() + { + return $this->urls; + } +} diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php index 03f76fbc70268..449bd050e5858 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php @@ -16,7 +16,7 @@ interface UrlPersistInterface * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @throws \Magento\Framework\Exception\AlreadyExistsException|\Magento\Framework\Exception\LocalizedException + * @throws \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException */ public function replace(array $urls); diff --git a/app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml b/app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml new file mode 100644 index 0000000000000..cc304f5ebbc7a --- /dev/null +++ b/app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml @@ -0,0 +1,33 @@ + +getData('urls'); +?> +

+ escapeHtml(__('The value specified in the URL Key field would generate a URL that already exists.')); + ?> +

+

+ escapeHtml( + __( + 'To resolve this conflict, you can either change the value of the URL Key field ' + . '(located in the Search Engine Optimization section) to a unique value, or change the Request Path fields' + .' in all locations listed below:' + ) + ); + + if (!empty($urls)) { + foreach ($urls as $key => $url) { + // key is the url that has been setup by the controller with the information from the exception + echo '

- ' . $block->escapeHtml($url) . "

"; + } + } + ?> +

From 5db0edde2810f41db7005f014f854d172c38ee7e Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Mon, 15 May 2017 15:41:05 -0500 Subject: [PATCH 029/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding di for custom message --- .../Magento/UrlRewrite/etc/adminhtml/di.xml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 app/code/Magento/UrlRewrite/etc/adminhtml/di.xml diff --git a/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml new file mode 100644 index 0000000000000..763ba551e12ab --- /dev/null +++ b/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml @@ -0,0 +1,21 @@ + + + + + + + + \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE + + Magento_UrlRewrite::messages/addUrlDuplicateWarningMessage.phtml + + + + + + From 92b744dd75ea5c16d7c60907a8345d6c8cc982ed Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Mon, 15 May 2017 21:41:37 -0500 Subject: [PATCH 030/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - separating catalog controller from knowledge about url rewrites --- .../Controller/Adminhtml/Product/Save.php | 31 +++++----- .../DuplicateEntityAdminMessageHandler.php | 60 +++++++++++++++++++ .../UrlRewrite/etc/adminhtml/events.xml | 10 ++++ 3 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php create mode 100644 app/code/Magento/UrlRewrite/etc/adminhtml/events.xml diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php index ebacc0168cbbc..7fe8b4876538d 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php @@ -143,28 +143,25 @@ public function execute() $newProduct = $this->productCopier->copy($product); $this->messageManager->addSuccess(__('You duplicated the product.')); } - } catch (\Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException $e) { - $newUrls = []; - foreach ($e->getUrls() as $id => $url) { - $adminEditUrl = $this->_backendUrl->getUrl( - 'adminhtml/url_rewrite/edit', - ['id' => $id] - ); - $newUrls[$adminEditUrl] = $url->getRequestPath(); - } - $this->messageManager->addComplexErrorMessage( - 'addUrlDuplicateWarningMessage', - ['urls' => $newUrls] - ); - $this->getDataPersistor()->set('catalog_product', $data); - $redirectBack = $productId ? true : 'new'; } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->_eventManager->dispatch( + 'controller_action_catalog_entity_exception_save_after', + ['controller' => $this, 'product' => $product, 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError($e->getMessage()); + } $this->getDataPersistor()->set('catalog_product', $data); $redirectBack = $productId ? true : 'new'; } catch (\Exception $e) { + $this->_eventManager->dispatch( + 'controller_action_catalog_entity_exception_save_after', + ['controller' => $this, 'product' => $product, 'exception' => $e] + ); $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); - $this->messageManager->addError($e->getMessage()); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError($e->getMessage()); + } $this->getDataPersistor()->set('catalog_product', $data); $redirectBack = $productId ? true : 'new'; } diff --git a/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php b/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php new file mode 100644 index 0000000000000..466d35daf9ce8 --- /dev/null +++ b/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php @@ -0,0 +1,60 @@ +messageManager = $messageManager; + $this->backendUrl = $backendUrl; + } + + + /** + * Adds custom error message from the custom url rewrites exception + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + /** @var \Magento\Catalog\Controller\Adminhtml\Product\Save $controller */ + $exception = $observer->getException(); + + if ($exception instanceof \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException) { + $newUrls = []; + foreach ($exception->getUrls() as $id => $url) { + $adminEditUrl = $this->backendUrl->getUrl( + 'adminhtml/url_rewrite/edit', + ['id' => $id] + ); + $newUrls[$adminEditUrl] = $url->getRequestPath(); + } + $this->messageManager->addComplexErrorMessage( + 'addUrlDuplicateWarningMessage', + ['urls' => $newUrls] + ); + } + } +} diff --git a/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml new file mode 100644 index 0000000000000..5defbabde9806 --- /dev/null +++ b/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml @@ -0,0 +1,10 @@ + + + + + + + From 16995e45b10f0d54098d15811c517a24a3e14414 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Tue, 16 May 2017 09:54:23 -0500 Subject: [PATCH 031/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - renaming custom message --- .../Observer/CategoryProcessUrlRewriteSavingObserver.php | 2 -- .../Observer/DuplicateEntityAdminMessageHandler.php | 2 +- app/code/Magento/UrlRewrite/etc/adminhtml/di.xml | 4 ++-- ...licateWarningMessage.phtml => url_duplicate_message.phtml} | 0 4 files changed, 3 insertions(+), 5 deletions(-) rename app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/{addUrlDuplicateWarningMessage.phtml => url_duplicate_message.phtml} (100%) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php index 98df1fe591b15..4df0df2fc57d1 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php @@ -15,8 +15,6 @@ /** * Generates Category Url Rewrites after save and Products Url Rewrites assigned to the category that's being saved - * - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CategoryProcessUrlRewriteSavingObserver implements ObserverInterface { diff --git a/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php b/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php index 466d35daf9ce8..d3109cd028652 100644 --- a/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php +++ b/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php @@ -52,7 +52,7 @@ public function execute(\Magento\Framework\Event\Observer $observer) $newUrls[$adminEditUrl] = $url->getRequestPath(); } $this->messageManager->addComplexErrorMessage( - 'addUrlDuplicateWarningMessage', + 'urlDuplicateMessage', ['urls' => $newUrls] ); } diff --git a/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml index 763ba551e12ab..f1d816313bdbc 100644 --- a/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/UrlRewrite/etc/adminhtml/di.xml @@ -9,10 +9,10 @@ - + \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE - Magento_UrlRewrite::messages/addUrlDuplicateWarningMessage.phtml + Magento_UrlRewrite::messages/url_duplicate_message.phtml diff --git a/app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml b/app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/url_duplicate_message.phtml similarity index 100% rename from app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/addUrlDuplicateWarningMessage.phtml rename to app/code/Magento/UrlRewrite/view/adminhtml/templates/messages/url_duplicate_message.phtml From 0ae17c93d852898857c0cbca0de3de982bf71e5e Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Tue, 16 May 2017 11:26:41 -0500 Subject: [PATCH 032/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - renaming custom message, refactoring observer --- .../Controller/Adminhtml/Category/Move.php | 19 ++++++++++++----- .../Controller/Adminhtml/Category/Save.php | 20 ++++++++++++------ .../Controller/Adminhtml/Product/Save.php | 8 +++---- .../Cms/Controller/Adminhtml/Page/Save.php | 21 ++++++++++++++++--- .../DuplicateEntityAdminMessageHandler.php | 7 +++---- .../UrlRewrite/etc/adminhtml/events.xml | 2 +- 6 files changed, 54 insertions(+), 23 deletions(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php index 704054dc22e5b..04723b7d5295c 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php @@ -67,15 +67,24 @@ public function execute() throw new \Exception(__('Category is not available for requested store.')); } $category->move($parentNodeId, $prevNodeId); - } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { - $error = true; - $this->messageManager->addError(__('There was a category move error. %1', $e->getMessage())); } catch (\Magento\Framework\Exception\LocalizedException $e) { $error = true; - $this->messageManager->addError($e->getMessage()); + $this->_eventManager->dispatch( + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'category', 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError($e->getMessage()); + } } catch (\Exception $e) { $error = true; - $this->messageManager->addError(__('There was a category move error.')); + $this->_eventManager->dispatch( + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'category', 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError(__('There was a category move error.')); + } $this->logger->critical($e); } diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php index 5319862e29fcb..6f7726d0e5363 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php @@ -212,16 +212,24 @@ public function execute() $category->save(); $this->messageManager->addSuccess(__('You saved the category.')); - } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { - $this->messageManager->addError($e->getMessage()); - $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); - $this->_getSession()->setCategoryData($categoryPostData); } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->_eventManager->dispatch( + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'category', 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError($e->getMessage()); + } $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); $this->_getSession()->setCategoryData($categoryPostData); } catch (\Exception $e) { - $this->messageManager->addError(__('Something went wrong while saving the category.')); + $this->_eventManager->dispatch( + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'category', 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError(__('Something went wrong while saving the category.')); + } $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); $this->_getSession()->setCategoryData($categoryPostData); } diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php index 7fe8b4876538d..5f3633e1fb4ba 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php @@ -145,8 +145,8 @@ public function execute() } } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->_eventManager->dispatch( - 'controller_action_catalog_entity_exception_save_after', - ['controller' => $this, 'product' => $product, 'exception' => $e] + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'product', 'exception' => $e] ); if (empty($this->messageManager->getMessages()->getErrors())) { $this->messageManager->addError($e->getMessage()); @@ -155,8 +155,8 @@ public function execute() $redirectBack = $productId ? true : 'new'; } catch (\Exception $e) { $this->_eventManager->dispatch( - 'controller_action_catalog_entity_exception_save_after', - ['controller' => $this, 'product' => $product, 'exception' => $e] + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'product', 'exception' => $e] ); $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); if (empty($this->messageManager->getMessages()->getErrors())) { diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php index 1f4afb89ba663..a118cace04aa6 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php @@ -119,13 +119,28 @@ public function execute() } return $resultRedirect->setPath('*/*/'); } catch (LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + $this->_eventManager->dispatch( + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'cms', 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addError($e->getMessage()); + } } catch (\Exception $e) { - $this->messageManager->addException($e, __('Something went wrong while saving the page.')); + $this->_eventManager->dispatch( + 'controller_action_entity_exception_save_after', + ['controller' => $this, 'entity_type' => 'cms', 'exception' => $e] + ); + if (empty($this->messageManager->getMessages()->getErrors())) { + $this->messageManager->addException($e, __('Something went wrong while saving the page.')); + } } $this->dataPersistor->set('cms_page', $data); - return $resultRedirect->setPath('*/*/edit', ['page_id' => $this->getRequest()->getParam('page_id')]); + return $resultRedirect->setPath( + '*/*/edit', + ['page_id' => $this->getRequest()->getParam('page_id')] + ); } return $resultRedirect->setPath('*/*/'); } diff --git a/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php b/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php index d3109cd028652..5616a7be97c22 100644 --- a/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php +++ b/app/code/Magento/UrlRewrite/Observer/DuplicateEntityAdminMessageHandler.php @@ -39,21 +39,20 @@ public function __construct( */ public function execute(\Magento\Framework\Event\Observer $observer) { - /** @var \Magento\Catalog\Controller\Adminhtml\Product\Save $controller */ $exception = $observer->getException(); if ($exception instanceof \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException) { - $newUrls = []; + $generatedUrls = []; foreach ($exception->getUrls() as $id => $url) { $adminEditUrl = $this->backendUrl->getUrl( 'adminhtml/url_rewrite/edit', ['id' => $id] ); - $newUrls[$adminEditUrl] = $url->getRequestPath(); + $generatedUrls[$adminEditUrl] = $url->getRequestPath(); } $this->messageManager->addComplexErrorMessage( 'urlDuplicateMessage', - ['urls' => $newUrls] + ['urls' => $generatedUrls] ); } } diff --git a/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml index 5defbabde9806..310b6c7a139b3 100644 --- a/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/UrlRewrite/etc/adminhtml/events.xml @@ -4,7 +4,7 @@ ~ See COPYING.txt for license details. --> - + From 381d04fbe776480a9c84d14b5edaafd93b7f815b Mon Sep 17 00:00:00 2001 From: Olga Lytvynenko Date: Fri, 19 May 2017 16:50:10 +0300 Subject: [PATCH 033/316] MAGETWO-57995: [GITHUB] Simple product videos display the thumbnail image rather than the embedded video player. #6360 --- .../Catalog/Block/Product/View/Gallery.php | 4 + .../Block/Plugin/Product/Media/Gallery.php | 72 +++++++++++++ .../Block/Product/View/Type/Configurable.php | 2 + .../Plugin/Product/Media/GalleryTest.php | 102 ++++++++++++++++++ .../Magento/ConfigurableProduct/etc/di.xml | 3 + .../view/frontend/web/js/configurable.js | 29 ++++- .../web/js/fotorama-add-video-events.js | 80 ++++++++------ .../view/frontend/web/js/swatch-renderer.js | 69 ++++++++++-- 8 files changed, 320 insertions(+), 41 deletions(-) create mode 100644 app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php create mode 100644 app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php index a3624e9cf3ce5..913b7eb51b3af 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php +++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php @@ -118,6 +118,8 @@ public function getGalleryImagesJson() 'caption' => $image->getLabel(), 'position' => $image->getPosition(), 'isMain' => $this->isMainImage($image), + 'type' => str_replace('external-', '', $image->getMediaType()), + 'videoUrl' => $image->getVideoUrl(), ]; } if (empty($imagesItems)) { @@ -128,6 +130,8 @@ public function getGalleryImagesJson() 'caption' => '', 'position' => '0', 'isMain' => true, + 'type' => str_replace('external-', '', $image->getMediaType()), + 'videoUrl' => $image->getVideoUrl(), ]; } return json_encode($imagesItems); diff --git a/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php new file mode 100644 index 0000000000000..1df68482eb6b8 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Block/Plugin/Product/Media/Gallery.php @@ -0,0 +1,72 @@ +json = $json; + } + + /** + * @param \Magento\Catalog\Block\Product\View\Gallery $subject + * @param string $result + * @return string + */ + public function afterGetOptionsMediaGalleryDataJson( + \Magento\Catalog\Block\Product\View\Gallery $subject, + $result + ) { + $result = $this->json->unserialize($result); + $parentProduct = $subject->getProduct(); + if ($parentProduct->getTypeId() == Configurable::TYPE_CODE) { + /** @var Configurable $productType */ + $productType = $parentProduct->getTypeInstance(); + $products = $productType->getUsedProducts($parentProduct); + /** @var Product $product */ + foreach ($products as $product) { + $key = $product->getId(); + $result[$key] = $this->getProductGallery($product); + } + } + return $this->json->serialize($result); + } + + /** + * @param Product $product + * @return array + */ + private function getProductGallery($product) + { + $result = []; + $images = $product->getMediaGalleryImages(); + foreach ($images as $image) { + $result[] = [ + 'mediaType' => $image->getMediaType(), + 'videoUrl' => $image->getVideoUrl(), + 'isBase' => $product->getImage() == $image->getFile(), + ]; + } + return $result; + } +} diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php index e3377993f953c..0486554c6e9a4 100644 --- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php @@ -256,6 +256,8 @@ protected function getOptionImages() 'caption' => $image->getLabel(), 'position' => $image->getPosition(), 'isMain' => $image->getFile() == $product->getImage(), + 'type' => str_replace('external-', '', $image->getMediaType()), + 'videoUrl' => $image->getVideoUrl(), ]; } } diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php new file mode 100644 index 0000000000000..34e4925c7bc9b --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Block/Plugin/Product/Media/GalleryTest.php @@ -0,0 +1,102 @@ +createJsonMock(); + $productMock = $this->createProductMock(); + $galleryMock = $this->createGalleryMock(); + $variationProductMock = $this->createProductMock(); + $configurableTypeMock = $this->createConfigurableTypeMock(); + + $resultJson = '[]'; + $variationProductId = 1; + $expectedGalleryJson = [ + $variationProductId => [ + [ + 'mediaType' => 'type', + 'videoUrl' => 'url', + 'isBase' => true + ] + ] + ]; + $image = new \Magento\Framework\DataObject( + ['media_type' => 'type', 'video_url' => 'url', 'file' => 'image.jpg'] + ); + + $galleryMock->expects(($this->any()))->method('getProduct')->willReturn($productMock); + $productMock->expects($this->once())->method('getTypeId')->willReturn('configurable'); + $productMock->expects($this->once())->method('getTypeInstance')->willReturn($configurableTypeMock); + $configurableTypeMock->expects($this->once())->method('getUsedProducts')->with($productMock) + ->willReturn([$variationProductMock]); + $variationProductMock->expects($this->once())->method('getId')->willReturn($variationProductId); + $variationProductMock->expects($this->once())->method('getMediaGalleryImages')->willReturn([$image]); + $variationProductMock->expects($this->once())->method('getImage')->willReturn('image.jpg'); + $jsonMock->expects($this->once())->method('serialize')->with($expectedGalleryJson) + ->willReturn(json_encode($expectedGalleryJson)); + + $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $plugin = $helper->getObject( + Gallery::class, + [ + 'json' => $jsonMock + ] + ); + $result = $plugin->afterGetOptionsMediaGalleryDataJson($galleryMock, $resultJson); + $this->assertEquals(json_encode($expectedGalleryJson), $result); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createJsonMock() + { + return $this->getMockBuilder(Json::class) + ->disableOriginalConstructor() + ->getMock(); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createProductMock() + { + return $this->getMockBuilder(Product::class) + ->disableOriginalConstructor() + ->getMock(); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createGalleryMock() + { + return $this->getMockBuilder(\Magento\Catalog\Block\Product\View\Gallery::class) + ->disableOriginalConstructor() + ->getMock(); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createConfigurableTypeMock() + { + return $this->getMockBuilder(\Magento\ConfigurableProduct\Model\Product\Type\Configurable::class) + ->disableOriginalConstructor() + ->getMock(); + } +} diff --git a/app/code/Magento/ConfigurableProduct/etc/di.xml b/app/code/Magento/ConfigurableProduct/etc/di.xml index 496d85310e817..cbfb7e24dfcca 100644 --- a/app/code/Magento/ConfigurableProduct/etc/di.xml +++ b/app/code/Magento/ConfigurableProduct/etc/di.xml @@ -147,6 +147,9 @@ + + + Magento\Framework\App\Cache\Type\Collection diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js index cd4b99ea01a1e..545887d04c965 100644 --- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js +++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js @@ -265,6 +265,7 @@ define([ } else { this._resetChildren(element); } + this._reloadPrice(); this._displayRegularPriceBlock(this.simpleProduct); this._displayTierPriceBlock(this.simpleProduct); @@ -273,6 +274,7 @@ define([ /** * Change displayed product image according to chosen options of configurable product + * * @private */ _changeProductImage: function () { @@ -292,12 +294,14 @@ define([ } images = $.extend(true, [], images); - - images.forEach(function (img) { - img.type = 'image'; - }); + images = this._setImageIndex(images); galleryObject.updateData(images); + + $(this.options.mediaGallerySelector).AddFotoramaVideoEvents({ + selectedOption: this.simpleProduct, + dataMergeStrategy: this.options.gallerySwitchStrategy + }); } else { galleryObject.updateData(initialImages); $(this.options.mediaGallerySelector).AddFotoramaVideoEvents(); @@ -306,6 +310,23 @@ define([ galleryObject.first(); }, + /** + * Set correct indexes for image set. + * + * @param {Array} images + * @private + */ + _setImageIndex: function (images) { + var length = images.length, + i; + + for (i = 0; length > i; i++) { + images[i].i = i + 1; + } + + return images; + }, + /** * For a given option element, reset all of its selectable options. Clear any selected * index, disable the option choice, and reset the option's state if necessary. diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js index 74e34dbb38ecd..276478fc8a965 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js @@ -94,9 +94,10 @@ define([ options: { videoData: '', videoSettings: '', - optionsVideoData: '' + optionsVideoData: '', + dataMergeStrategy: 'replace' }, - + defaultVideoData: [], PV: 'product-video', // [CONST] VU: 'video-unplayed', PVLOADED: 'fotorama__product-video--loaded', // [CONST] @@ -117,7 +118,6 @@ define([ * @private */ _create: function () { - $(this.element).on('gallery:loaded', $.proxy(function () { this.fotoramaItem = $(this.element).find('.fotorama-item'); this._initialize(); @@ -129,7 +129,11 @@ define([ * @private */ _initialize: function () { - this._loadVideoData(); + if (!this.defaultVideoData.length) { + this.defaultVideoData = this.options.videoData; + } + + this.clearEvents(); if (this._checkForVideoExist()) { this._checkFullscreen(); @@ -141,42 +145,52 @@ define([ } }, + /** + * Clear gallery events to prevent duplicated calls. + * + * @private + */ + clearEvents: function () { + this.fotoramaItem.off( + 'fotorama:show ' + + 'fotorama:showend ' + + 'fotorama:fullscreenenter ' + + 'fotorama:fullscreenexit' + ); + }, + /** * * @param {Object} options * @private */ _setOptions: function (options) { - if (options.videoData && options.videoData.length) { this.options.videoData = options.videoData; } + + this._loadVideoData(options); this._initialize(); }, /** + * Set video data for configurable product. * + * @param {Object} options * @private */ - _loadVideoData: function () { - var $widget = this; - - if (!$widget.videoData) { - $widget.videoData = $widget.options.VideoData; - } - - $('#product-options-wrapper').find('[option-selected]').each(function () { - var key = $(this).attr('attribute-code') + '_' + $(this).attr('option-selected'); - - if ($widget.options.optionsVideoData && $widget.options.optionsVideoData[key]) { - $widget.options.VideoData = $widget.options.optionsVideoData[key]; + _loadVideoData: function (options) { + if (options.selectedOption) { + if (options.dataMergeStrategy === 'prepend') { + this.options.videoData = [].concat( + this.options.optionsVideoData[options.selectedOption], + this.options.videoData + ); } else { - $widget.options.VideoData = $widget.videoData; + this.options.videoData = this.options.optionsVideoData[options.selectedOption]; } - }); - - if (!$('#product-options-wrapper').find('[option-selected]').length) { - $widget.options.VideoData = $widget.videoData; + } else { + this.options.videoData = this.defaultVideoData; } }, @@ -195,14 +209,13 @@ define([ * @private */ _listenForFullscreen: function () { - var self = this; - this.fotoramaItem.on('fotorama:fullscreenenter', $.proxy(function () { this.isFullscreen = true; }, this)); + this.fotoramaItem.on('fotorama:fullscreenexit', $.proxy(function () { this.isFullscreen = false; - self._hideVideoArrows(); + this._hideVideoArrows(); }, this)); }, @@ -241,7 +254,7 @@ define([ tmpVideoData.isBase = tmpInputData.isBase; - if (tmpInputData.videoUrl != null) { + if (tmpInputData.videoUrl && tmpInputData.videoUrl !== null) { dataUrl = tmpInputData.videoUrl; dataUrl = parseURL(dataUrl); tmpVideoData.id = dataUrl.id; @@ -326,8 +339,9 @@ define([ if (!this.options.videoSettings) { return false; } - result = this._createVideoData(this.options.videoData, false), - checker = false; + + result = this._createVideoData(this.options.videoData, false); + checker = false; videoSettings = this.options.videoSettings[0]; videoSettings.playIfBase = parseInt(videoSettings.playIfBase, 10); videoSettings.showRelated = parseInt(videoSettings.showRelated, 10); @@ -354,9 +368,15 @@ define([ var allVideoData = this.options.videoData, videoItem; + if (window.Froogaloop) { // prevent duplicated initialization + return; + } + for (videoItem in allVideoData) { if (allVideoData[videoItem].provider === this.VI) { this._loadVimeoJSFramework(); + + return; } } }, @@ -425,8 +445,8 @@ define([ return null; } - fotorama.data.map($.proxy(this._setItemType, this)); + fotorama.data.map($.proxy(this._setItemType, this)); thumbsParent = fotorama.activeFrame.$navThumbFrame.parent(); thumbs = thumbsParent.find('.fotorama__nav__frame:visible'); @@ -480,6 +500,7 @@ define([ this.fotoramaItem.on('fotorama:showend', $.proxy(function (e, fotorama) { this._startPrepareForPlayer(e, fotorama); }, this)); + this.fotoramaItem.on('fotorama:show', $.proxy(function (e, fotorama) { this._unloadVideoPlayer(fotorama.activeFrame.$stageFrame.parent(), fotorama, true); }, this)); @@ -518,7 +539,6 @@ define([ videoEventIsSet = false; if ($image) { - !$image.type && this._setItemType($image, number - 1); if ($image.type === 'image') { 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 245e7fc8a41a4..5c966bc207242 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 @@ -246,6 +246,9 @@ define([ // Cache for BaseProduct images. Needed when option unset mediaGalleryInitial: [{}], + // Use ajax to get image data + useAjax: false, + /** * Defines the mechanism of how images of a gallery should be * updated when user switches between configurations of a product. @@ -284,9 +287,12 @@ define([ * @private */ _init: function () { - // creates debounced variant of _LoadProductMedia() - // to use it in events handlers instead of _LoadProductMedia() - this._debouncedLoadProductMedia = _.debounce(this._LoadProductMedia.bind(this), 500); + if (_.isEmpty(this.options.jsonConfig.images)) { + this.options.useAjax = true; + // creates debounced variant of _LoadProductMedia() + // to use it in events handlers instead of _LoadProductMedia() + this._debouncedLoadProductMedia = _.debounce(this._LoadProductMedia.bind(this), 500); + } if (this.options.jsonConfig !== '' && this.options.jsonSwatchConfig !== '') { // store unsorted attributes @@ -639,6 +645,30 @@ define([ }); }, + /** + * Load media gallery using ajax or json config. + * + * @private + */ + _loadMedia: function () { + var $main = this.inProductList ? + this.element.parents('.product-item-info') : + this.element.parents('.column.main'), + images; + + if (this.options.useAjax) { + this._debouncedLoadProductMedia() + } else { + images = this.options.jsonConfig.images[this.getProduct()]; + + if (!images) { + images = this.options.mediaGalleryInitial; + } + + this.updateBaseImage(images, $main, !this.inProductList); + } + }, + /** * Event for swatch options * @@ -685,7 +715,7 @@ define([ $widget._UpdatePrice(); } - this._debouncedLoadProductMedia(); + $widget._loadMedia(); $input.trigger('change'); }, @@ -743,7 +773,7 @@ define([ $widget._Rebuild(); $widget._UpdatePrice(); - this._debouncedLoadProductMedia(); + $widget._loadMedia(); $input.trigger('change'); }, @@ -774,7 +804,6 @@ define([ * @private */ _Rebuild: function () { - var $widget = this, controls = $widget.element.find('.' + $widget.options.classes.attributeClass + '[attribute-id]'), selected = controls.filter('[option-selected]'); @@ -958,6 +987,7 @@ define([ mediaCallData = { 'product_id': this.getProduct() }; + mediaCacheKey = JSON.stringify(mediaCallData); if (mediaCacheKey in $widget.options.mediaCache) { @@ -1080,7 +1110,9 @@ define([ images = $.extend(true, [], this.options.mediaGalleryInitial); } else { images.map(function (img) { - img.type = 'image'; + if (!img.type) { + img.type = 'image'; + } }); } @@ -1108,10 +1140,16 @@ define([ imagesToUpdate = imagesToUpdate.concat(initialImages); } + imagesToUpdate = this._setImageIndex(imagesToUpdate); gallery.updateData(imagesToUpdate); if (isInitial) { $(this.options.mediaGallerySelector).AddFotoramaVideoEvents(); + } else { + $(this.options.mediaGallerySelector).AddFotoramaVideoEvents({ + selectedOption: this.getProduct(), + dataMergeStrategy: this.options.gallerySwitchStrategy + }); } gallery.first(); @@ -1121,6 +1159,23 @@ define([ } }, + /** + * Set correct indexes for image set. + * + * @param {Array} images + * @private + */ + _setImageIndex: function (images) { + var length = images.length, + i; + + for (i = 0; length > i; i++) { + images[i].i = i + 1; + } + + return images; + }, + /** * Kill doubled AJAX requests * From d8ad9f7ca99a82105b42b271f3e6b302de00308f Mon Sep 17 00:00:00 2001 From: olysenko Date: Tue, 23 May 2017 16:54:36 +0300 Subject: [PATCH 034/316] MAGETWO-57995: [GITHUB] Simple product videos display the thumbnail image rather than the embedded video player. #6360 --- .../Catalog/Test/Block/Product/View.php | 17 +++ .../Product/View/ConfigurableOptions.php | 23 ++++ .../Test/Repository/ConfigurableProduct.xml | 44 ++++++ .../Block/Adminhtml/Product/ProductForm.xml | 58 ++++---- .../AssertVideoConfigurableProductView.php | 69 ++++++++++ .../Test/Fixture/ConfigurableProduct.xml | 12 ++ .../TestCase/ConfigurableProductVideoTest.php | 125 ++++++++++++++++++ .../TestCase/ConfigurableProductVideoTest.xml | 20 +++ .../app/Magento/ProductVideo/Test/etc/di.xml | 14 ++ 9 files changed, 353 insertions(+), 29 deletions(-) create mode 100755 dev/tests/functional/tests/app/Magento/ProductVideo/Test/Constraint/AssertVideoConfigurableProductView.php create mode 100755 dev/tests/functional/tests/app/Magento/ProductVideo/Test/Fixture/ConfigurableProduct.xml create mode 100644 dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.php create mode 100644 dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.xml create mode 100644 dev/tests/functional/tests/app/Magento/ProductVideo/Test/etc/di.xml diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php index 5688a8846968c..c4c368172186d 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php @@ -208,6 +208,11 @@ class View extends AbstractConfigureBlock */ private $videoContainer = 'div.fotorama-video-container'; + /** + * @var string + */ + private $productVideo = '.product-video'; + /** * Threshold message selector. * @@ -647,4 +652,16 @@ public function isVideoVisible() { return $this->_rootElement->find($this->videoContainer)->isVisible(); } + + /** + * Check definite video data is presented on product page + * + * @param string $videoData + * @return bool + */ + public function checkVideoDataPresence($videoData) + { + $dataVideoSelector = $this->productVideo . '[data-code="' . $videoData. '"]'; + return $this->_rootElement->find($dataVideoSelector)->isPresent(); + } } diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php index 982f9a19a6243..0b997c634ce70 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php @@ -223,4 +223,27 @@ public function isVisible() { return $this->_rootElement->find($this->optionsContext, Locator::SELECTOR_XPATH)->isVisible(); } + + /** + * Select configurable product option by it index + * + * @param FixtureInterface $product + * @param string $variation + * @return void + */ + public function selectConfigurableOption(FixtureInterface $product, $variation) + { + /** @var ConfigurableProduct $product */ + $attributesData = []; + $productVariations = []; + if ($product->hasData('configurable_attributes_data')) { + $attributesData = $product->getConfigurableAttributesData()['attributes_data']; + $productVariations = $product->getConfigurableAttributesData()['matrix']; + } + if (array_key_exists($variation, $productVariations)) { + $variationOption = explode(' ', $variation); + //Select option specified in variation + $this->chooseOptions($variationOption, $attributesData); + } + } } diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml index a4fa22e52a003..c8bccbb2678f6 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml @@ -1037,5 +1037,49 @@ default + + Test configurable product %isolation% + sku_test_configurable_product_%isolation% + + 40 + price_40 + + This item has weight + 1 + Yes + Catalog, Search + + taxable_goods + + configurable-product-%isolation% + + default + + + In Stock + + + + default + + + + default + + + configurable_default + + + default_subcategory + + + + + https://youtu.be/bpOSxM0rNPM + Some title + + + + diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml index 980705eea3cd5..a1b946840d69e 100755 --- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml @@ -1,29 +1,29 @@ - - - - - \Magento\ProductVideo\Test\Block\Adminhtml\Product\Edit\Tab\ImagesAndVideos - [data-index="block_gallery"] - css selector - - - - - - - - - + + + + + \Magento\ProductVideo\Test\Block\Adminhtml\Product\Edit\Tab\ImagesAndVideos + [data-index="gallery"] + css selector + + + + + + + + + diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Constraint/AssertVideoConfigurableProductView.php b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Constraint/AssertVideoConfigurableProductView.php new file mode 100755 index 0000000000000..fff7dddca485a --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Constraint/AssertVideoConfigurableProductView.php @@ -0,0 +1,69 @@ +open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html'); + // assert video and video data of configurable product is presented on page + \PHPUnit_Framework_Assert::assertTrue( + $catalogProductView->getViewBlock()->isVideoVisible(), + 'Product video is not displayed on product view when it should.' + ); + \PHPUnit_Framework_Assert::assertTrue( + $catalogProductView->getViewBlock()->checkVideoDataPresence($youtubeDataCode), + 'Configurable product video data is not displayed on product view when it should.' + ); + // select configurable product variation + $catalogProductView->getConfigurableAttributesBlock()->selectConfigurableOption($product, $variation); + // assert video and video data of simple product option is presented on page + \PHPUnit_Framework_Assert::assertTrue( + $catalogProductView->getViewBlock()->isVideoVisible(), + 'Configurable product variation video is not displayed on product view when it should.' + ); + \PHPUnit_Framework_Assert::assertTrue( + $catalogProductView->getViewBlock()->checkVideoDataPresence($vimeoDataCode), + 'Configurable product variation video data is not displayed on product view when it should.' + ); + } + + /** + * Returns a string representation of the object. + * + * @return string + */ + public function toString() + { + return 'Configurable product video and it variation video are displayed on product view.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Fixture/ConfigurableProduct.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Fixture/ConfigurableProduct.xml new file mode 100755 index 0000000000000..16418ce52de5c --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Fixture/ConfigurableProduct.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.php b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.php new file mode 100644 index 0000000000000..0e81b07c4bbf4 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.php @@ -0,0 +1,125 @@ +productIndex = $productIndex; + $this->productNew = $productNew; + $this->productEdit = $productEdit; + $this->testStepFactory = $testStepFactory; + } + + /** + * @param CatalogProductSimple $simpleProductVideo + * @param ConfigurableProduct $product + * @param AssertProductSaveMessage $assertCreateProducts + * @param string $variation + * @param null $configData + */ + public function test( + CatalogProductSimple $simpleProductVideo, + ConfigurableProduct $product, + AssertProductSaveMessage $assertCreateProducts, + $variation, + $configData = null + ) { + //Preconditions + $this->configData = $configData; + $this->testStepFactory->create( + SetupConfigurationStep::class, + ['configData' => $this->configData, 'flushCache' => true] + )->run(); + + // Steps + $this->productIndex->open(); + $this->productIndex->getGridPageActionBlock()->addProduct('configurable'); + $this->productNew->getProductForm()->fill($product); + $this->productNew->getFormPageActions()->save($product); + $assertCreateProducts->processAssert($this->productEdit); + + $sku = $product->getConfigurableAttributesData()['matrix'][$variation]['sku']; + $this->productIndex->open(); + $this->productIndex->getProductGrid()->searchAndOpen(['sku' => $sku]); + $this->productEdit->getProductForm()->fill($simpleProductVideo); + $this->productEdit->getFormPageActions()->save(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.xml new file mode 100644 index 0000000000000..25fe2b75dfe48 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/ConfigurableProductVideoTest.xml @@ -0,0 +1,20 @@ + + + + + + configurable_with_video + https://vimeo.com/16342611 + attribute_key_0:option_key_0 attribute_key_1:option_key_0 + youtube_api_key,play_if_base + 16342611 + bpOSxM0rNPM + + + + diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/etc/di.xml new file mode 100644 index 0000000000000..dc262bb6b5b94 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/etc/di.xml @@ -0,0 +1,14 @@ + + + + + + S1 + + + From ef80d5b223b06a60455b2c68667352ffdcb5cbf2 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Tue, 23 May 2017 15:07:21 -0500 Subject: [PATCH 035/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - reverting to multiple insert but checking all urls that failed --- .../UrlRewrite/Model/Storage/DbStorage.php | 69 +++++-------------- 1 file changed, 18 insertions(+), 51 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index fd6aaca917849..d8a4cf39a983e 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -11,7 +11,6 @@ use Magento\Framework\Api\DataObjectHelper; use Psr\Log\LoggerInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite as UrlRewriteData; -use Magento\Framework\UrlInterface; class DbStorage extends AbstractStorage { @@ -102,10 +101,16 @@ protected function doReplace(array $urls) $urlData[UrlRewrite::ENTITY_TYPE] = $type; $this->deleteByData($urlData); } - /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urlConflicted */ - $urlConflicted = []; + $data = []; foreach ($urls as $url) { - if (!$this->insertUrl($url->toArray())) { + $data[] = $url->toArray(); + } + try { + $this->insertMultiple($data); + } catch (\Exception $e) { + /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urlConflicted */ + $urlConflicted = []; + foreach ($urls as $url) { $urlFound = $this->doFindOneByData( [ UrlRewriteData::REQUEST_PATH => $url->getRequestPath(), @@ -114,14 +119,15 @@ protected function doReplace(array $urls) ); $urlConflicted[$urlFound[UrlRewriteData::URL_REWRITE_ID]] = $url; } + if (!empty($urlConflicted)) { + throw new \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException( + __('URL key for specified store already exists.'), + null, + $urlConflicted + ); + } } - if (!empty($urlConflicted)) { - throw new \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException( - __('URL key for specified store already exists.'), - null, - $urlConflicted - ); - } + return $urls; } @@ -132,7 +138,6 @@ protected function doReplace(array $urls) * @return void * @throws \Magento\Framework\Exception\AlreadyExistsException * @throws \Exception - * @deprecated */ protected function insertMultiple($data) { @@ -143,51 +148,13 @@ protected function insertMultiple($data) && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) ) { throw new \Magento\Framework\Exception\AlreadyExistsException( - __('A conflict has occurred between the entity\'s URL(s) and other URL(s).') + __('URL key for specified store already exists.') ); } throw $e; } } - /** - * Inserts a url as array to database and returns conflict status - * - * @param array $data - * @return bool - * @throws \Magento\Framework\Exception\LocalizedException - */ - private function insertUrl(array $data) - { - try { - return $this->connection->insert($this->resource->getTableName(self::TABLE_NAME), $data) > 0; - } catch (\Exception $e) { - if (isset($data['request_path']) - && isset($data['entity_type']) - && isset($data['store_id']) - && isset($data['entity_id']) - && $e->getCode() === self::ERROR_CODE_DUPLICATE_ENTRY - && preg_match('#SQLSTATE\[23000\]: [^:]+: 1062[^\d]#', $e->getMessage()) - ) { - $this->logger->critical( - __( - 'Could not insert a conflicting URL when trying to insert \'%1\' for %2 ' - .'with entity id %3 on store %4', - $data['request_path'], - $data['entity_type'], - $data['entity_id'], - $data['store_id'] - ) - ); - return false; - } else { - throw new \Magento\Framework\Exception\LocalizedException( - __('Something went wrong while inserting a url key.') - ); - } - } - } - /** * Get filter for url rows deletion due to provided urls * From 5a89de8660121528d9ddffe21e0612688a31b770 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Tue, 23 May 2017 16:36:37 -0500 Subject: [PATCH 036/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - fixing url rewrite --- .../UrlRewrite/Model/Storage/AbstractStorage.php | 2 +- .../UrlRewrite/Model/Storage/DbStorage.php | 16 ++++++++++------ .../UrlRewrite/Model/UrlPersistInterface.php | 2 +- .../Test/Unit/Model/Storage/DbStorageTest.php | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php index 0359fbc67018d..f3a74e8e0b291 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/AbstractStorage.php @@ -88,7 +88,7 @@ public function replace(array $urls) * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @throws \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException + * @throws \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException||\Exception */ abstract protected function doReplace(array $urls); diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php index d8a4cf39a983e..8d320a71843f7 100644 --- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php @@ -120,11 +120,15 @@ protected function doReplace(array $urls) $urlConflicted[$urlFound[UrlRewriteData::URL_REWRITE_ID]] = $url; } if (!empty($urlConflicted)) { - throw new \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException( - __('URL key for specified store already exists.'), - null, - $urlConflicted - ); + if ($e instanceof \Magento\Framework\Exception\AlreadyExistsException) { + throw new \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException( + __('URL key for specified store already exists.'), + null, + $urlConflicted + ); + } else { + throw $e; + } } } @@ -136,7 +140,7 @@ protected function doReplace(array $urls) * * @param array $data * @return void - * @throws \Magento\Framework\Exception\AlreadyExistsException + * @throws \Magento\Framework\Exception\AlreadyExistsException|\Exception * @throws \Exception */ protected function insertMultiple($data) diff --git a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php index 449bd050e5858..98d566e3386a1 100644 --- a/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php +++ b/app/code/Magento/UrlRewrite/Model/UrlPersistInterface.php @@ -16,7 +16,7 @@ interface UrlPersistInterface * * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] $urls * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @throws \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException + * @throws \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException||\Exception */ public function replace(array $urls); diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php index 798471bfa570a..61d7c119f2e09 100644 --- a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php +++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php @@ -244,7 +244,7 @@ public function testReplace() } /** - * @expectedException \Magento\Framework\Exception\AlreadyExistsException + * @expectedException \Magento\UrlRewrite\Model\Storage\UrlAlreadyExistsException */ public function testReplaceIfThrewDuplicateEntryException() { From 8e2f32a709be2532b55ff0dadd570f9df9db835f Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Tue, 23 May 2017 18:11:38 -0500 Subject: [PATCH 037/316] MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671 - adding functional test --- .../AssertUrlDuplicateErrorMessage.php | 70 ++++++++++ .../CreateDuplicateProductEntityTest.php | 122 ++++++++++++++++++ .../CreateDuplicateProductEntityTest.xml | 18 +++ 3 files changed, 210 insertions(+) create mode 100644 dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/Constraint/AssertUrlDuplicateErrorMessage.php create mode 100644 dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.php create mode 100644 dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.xml diff --git a/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/Constraint/AssertUrlDuplicateErrorMessage.php b/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/Constraint/AssertUrlDuplicateErrorMessage.php new file mode 100644 index 0000000000000..8a0552751d243 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/Constraint/AssertUrlDuplicateErrorMessage.php @@ -0,0 +1,70 @@ +getMessagesBlock()->getErrorMessage(); + \PHPUnit_Framework_Assert::assertContains( + self::ERROR_MESSAGE_TITLE, + $actualMessage, + 'Wrong error message is displayed.' + . "\nExpected: " . self::ERROR_MESSAGE_TITLE + . "\nActual:\n" . $actualMessage + ); + + \PHPUnit_Framework_Assert::assertContains( + $product->getUrlKey(), + $actualMessage, + 'Product url is not present on error message.' + . "\nExpected: " . self::ERROR_MESSAGE_TITLE + . "\nActual:\n" . $actualMessage + ); + + \PHPUnit_Framework_Assert::assertContains( + $category->getUrlKey() . '/' . $product->getUrlKey(), + $actualMessage, + 'Category url is not present on error message.' + . "\nExpected: " . self::ERROR_MESSAGE_TITLE + . "\nActual:\n" . $actualMessage + ); + } + + /** + * Returns a string representation of the object + * + * @return string + */ + public function toString() + { + return 'Product url duplication error on save message is present.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.php new file mode 100644 index 0000000000000..e8ed49880849d --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.php @@ -0,0 +1,122 @@ + Catalog. + * 3. Start to create simple product. + * 4. Fill in data according to data set. + * 5. Save Product. + * * Navigate to Products > Catalog. + * 3. Start to create same simple product as step 3. + * 4. Fill in data according to data set. + * 5. Save Product. + * 6. Perform appropriate assertions. + * + * @group Products + * @ZephyrId MAGETWO-69427 + */ +class CreateDuplicateProductEntityTest extends Injectable +{ + /* tags */ + const TEST_TYPE = 'acceptance_test, extended_acceptance_test'; + const MVP = 'yes'; + /* end tags */ + + /** + * Configuration setting. + * + * @var string + */ + protected $configData; + + /** + * Should cache be flushed + * + * @var bool + */ + private $flushCache; + + /** + * Prepare data. + * + * @param Category $category + * @return array + */ + public function __prepare(Category $category) + { + $category->persist(); + + return [ + 'category' => $category + ]; + } + + /** + * Run create product simple entity test. + * + * @param CatalogProductSimple $product + * @param Category $category + * @param CatalogProductIndex $productGrid + * @param CatalogProductNew $newProductPage + * @param string $configData + * @param bool $flushCache + * @return array + */ + public function testCreate( + CatalogProductSimple $product, + Category $category, + CatalogProductIndex $productGrid, + CatalogProductNew $newProductPage, + $flushCache = false, + $configData = null + ) { + $this->configData = $configData; + $this->flushCache = $flushCache; + + // Preconditions + $this->objectManager->create( + \Magento\Config\Test\TestStep\SetupConfigurationStep::class, + ['configData' => $this->configData, 'flushCache' => $this->flushCache] + )->run(); + + // Steps for simple product + $productGrid->open(); + $productGrid->getGridPageActionBlock()->addProduct('simple'); + $newProductPage->getProductForm()->fill($product, null, $category); + $newProductPage->getFormPageActions()->save(); + + // Steps for duplicate url product + $productGrid->open(); + $productGrid->getGridPageActionBlock()->addProduct('simple'); + $newProductPage->getProductForm()->fill($product, null, $category); + $newProductPage->getFormPageActions()->save(); + + return ['product' => $product]; + } + + /** + * Clean data after running test. + * + * @return void + */ + public function tearDown() + { + $this->objectManager->create( + \Magento\Config\Test\TestStep\SetupConfigurationStep::class, + ['configData' => $this->configData, 'rollback' => true, 'flushCache' => $this->flushCache] + )->run(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.xml new file mode 100644 index 0000000000000..b81a809aeecd5 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/CatalogUrlRewrite/Test/TestCase/CreateDuplicateProductEntityTest.xml @@ -0,0 +1,18 @@ + + + + + + simple-product-%isolation% + Simple Product %isolation% + simple_sku_%isolation% + 10000 + 50 + 657 + + + + From 5a3e656ab66e6f467cf8fadfb8e3e7f030b91240 Mon Sep 17 00:00:00 2001 From: Olga Lytvynenko Date: Wed, 24 May 2017 15:49:18 +0300 Subject: [PATCH 038/316] MAGETWO-57995: [GITHUB] Simple product videos display the thumbnail image rather than the embedded video player. #6360 - fix case, when configurable product has no images and gallery strategy is set to 'prepend' --- .../Magento/Catalog/Block/Product/View/Gallery.php | 4 ++-- .../frontend/web/js/fotorama-add-video-events.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php index 913b7eb51b3af..edc5a57acafae 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php +++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php @@ -130,8 +130,8 @@ public function getGalleryImagesJson() 'caption' => '', 'position' => '0', 'isMain' => true, - 'type' => str_replace('external-', '', $image->getMediaType()), - 'videoUrl' => $image->getVideoUrl(), + 'type' => 'image', + 'videoUrl' => null, ]; } return json_encode($imagesItems); diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js index 276478fc8a965..4022150b51f5b 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js @@ -112,6 +112,12 @@ define([ MobileMaxWidth: 767, GP: 'gallery-placeholder', //gallery placeholder class is needed to find and erase getTemplateFile('Magento_Shipping::order/packaging/popup_content.phtml')) ?> diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/view/form.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/view/form.phtml index fb904f1e840ad..55c782eb0fc82 100644 --- a/app/code/Magento/Shipping/view/adminhtml/templates/view/form.phtml +++ b/app/code/Magento/Shipping/view/adminhtml/templates/view/form.phtml @@ -70,25 +70,30 @@ getChildHtml('shipment_tracking') ?> getChildHtml('shipment_packaging') ?> - + if (jQuery(document).data('packagingInited')) { + setCallbacks(); + } else { + jQuery(document).on('packaging:inited', setCallbacks); + } + }); + From 00f46ce2201a4ebe501302cc6c036884418795da Mon Sep 17 00:00:00 2001 From: Michail Slabko Date: Fri, 14 Jul 2017 16:56:35 +0300 Subject: [PATCH 214/316] MAGETWO-67240: Duplicate and broken products appear after import --- .../Test/Unit/Model/Import/ProductTest.php | 140 +----------------- 1 file changed, 1 insertion(+), 139 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php index add910f577c14..3dc1ae63b2bad 100644 --- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php +++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php @@ -967,44 +967,6 @@ public function testValidateRowValidateExistingProductTypeAddErrorRowCall() $importProduct->validateRow($rowData, $rowNum); } - public function testValidateRowValidateExistingProductTypeResetSku() - { - $sku = 'sku'; - $rowNum = 0; - $rowData = [ - \Magento\CatalogImportExport\Model\Import\Product::COL_SKU => $sku, - ]; - $oldSku = [ - $sku => [ - 'type_id' => 'type_id_val', - ], - ]; - $importProduct = $this->createModelMockWithErrorAggregator(['getOptionEntity']); - - $this->setPropertyValue($importProduct, '_oldSku', $oldSku); - - //suppress option validation - $this->_rewriteGetOptionEntityInImportProduct($importProduct); - //suppress validator - $this->_setValidatorMockInImportProduct($importProduct); - - $expectedSku = false; - $newSku = [ - 'attr_set_code' => 'new_attr_set_code', - 'type_id' => 'new_type_id_val', - ]; - $this->skuProcessor->expects($this->once())->method('getNewSku')->with($expectedSku)->willReturn($newSku); - $this->setPropertyValue($importProduct, 'skuProcessor', $this->skuProcessor); - $productType = $this->getMockBuilder(\Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType::class) - ->disableOriginalConstructor() - ->getMock(); - $this->setPropertyValue($importProduct, '_productTypeModels', [ - $newSku['type_id'] => $productType - ]); - - $importProduct->validateRow($rowData, $rowNum); - } - /** * @dataProvider validateRowValidateNewProductTypeAddRowErrorCallDataProvider */ @@ -1094,113 +1056,13 @@ public function testValidateRowValidateNewProductTypeGetNewSkuCall() $importProduct->validateRow($rowData, $rowNum); } - public function testValidateRowValidateNewProductTypeResetSku() - { - $sku = 'sku'; - $rowNum = 0; - $rowData = [ - \Magento\CatalogImportExport\Model\Import\Product::COL_SKU => $sku, - \Magento\CatalogImportExport\Model\Import\Product::COL_TYPE => 'value', - \Magento\CatalogImportExport\Model\Import\Product::COL_ATTR_SET => 'value', - ]; - - $oldSku = [ - $sku => [ - 'type_id' => 'type_id_val', - ], - ]; - $_productTypeModels = [ - $rowData[\Magento\CatalogImportExport\Model\Import\Product::COL_TYPE] => 'value', - ]; - $_attrSetNameToId = [ - $rowData[\Magento\CatalogImportExport\Model\Import\Product::COL_ATTR_SET] => 'attr_set_code_val' - ]; - - $importProduct = $this->createModelMockWithErrorAggregator( - ['addRowError', 'getOptionEntity'], - ['isRowInvalid' => false] - ); - - $this->setPropertyValue($importProduct, '_oldSku', $oldSku); - $this->setPropertyValue($importProduct, '_productTypeModels', $_productTypeModels); - $this->setPropertyValue($importProduct, '_attrSetNameToId', $_attrSetNameToId); - - $this->_rewriteGetOptionEntityInImportProduct($importProduct);//suppress option validation - $this->_setValidatorMockInImportProduct($importProduct);//suppress validator - - $expectedSku = false; - $newSku = [ - 'attr_set_code' => 'new_attr_set_code', - 'type_id' => 'new_type_id_val', - ]; - $this->skuProcessor->expects($this->once())->method('getNewSku')->with($expectedSku)->willReturn($newSku); - $this->setPropertyValue($importProduct, 'skuProcessor', $this->skuProcessor); - $productType = $this->getMockBuilder(\Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType::class) - ->disableOriginalConstructor() - ->getMock(); - $this->setPropertyValue($importProduct, '_productTypeModels', [ - $newSku['type_id'] => $productType - ]); - - $importProduct->validateRow($rowData, $rowNum); - } - public function testValidateDefaultScopeNotValidAttributesResetSku() { - $sku = 'sku'; - $rowNum = 0; - $attrCode = 'code'; - $stringUtilsMock = $this->getMockBuilder(\Magento\Framework\Stdlib\StringUtils::class) - ->setMethods(null) - ->getMock(); - $this->setPropertyValue($this->importProduct, 'string', $stringUtilsMock); - - $scopeMock = $this->getMock( - \Magento\CatalogImportExport\Model\Import\Product::class, - ['getRowScope'], - [], - '', - false - ); - - $colStore = \Magento\CatalogImportExport\Model\Import\Product::COL_STORE; - $scopeRowData = [ - $sku => 'sku', - $colStore => null, - ]; - $scopeResult = \Magento\CatalogImportExport\Model\Import\Product::SCOPE_DEFAULT; - $scopeMock->expects($this->any())->method('getRowScope')->with($scopeRowData)->willReturn($scopeResult); - $oldSku = [ - $sku => [ - 'type_id' => 'type_id_val', - ], - ]; - - $this->setPropertyValue($this->importProduct, '_oldSku', $oldSku); - - $expectedSku = false; - $newSku = [ - 'attr_set_code' => 'new_attr_set_code', - 'type_id' => 'new_type_id_val', - ]; - $this->skuProcessor->expects($this->any())->method('getNewSku')->with($expectedSku)->willReturn($newSku); - $this->setPropertyValue($this->importProduct, 'skuProcessor', $this->skuProcessor); - - $attrParams = [ - 'type' => 'varchar', - ]; - $attrRowData = [ - 'code' => str_repeat( - 'a', - \Magento\CatalogImportExport\Model\Import\Product::DB_MAX_VARCHAR_LENGTH + 1 - ), - ]; - $this->validator->expects($this->once())->method('isAttributeValid')->willReturn(false); $messages = ['validator message']; $this->validator->expects($this->once())->method('getMessages')->willReturn($messages); - $result = $this->importProduct->isAttributeValid($attrCode, $attrParams, $attrRowData, $rowNum); + $result = $this->importProduct->isAttributeValid('code', ['attribute params'], ['row data'], 1); $this->assertFalse($result); } From ab3125dba2370e7ce396a27eb7604b455a86f237 Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Fri, 14 Jul 2017 17:36:27 +0300 Subject: [PATCH 215/316] MAGETWO-67240: Duplicate and broken products appear after import --- .../Model/Import/Product.php | 56 ++++++++++--------- .../Import/Product/Type/Configurable.php | 2 +- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 63d7c05af695e..44292d5d535ad 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -2191,38 +2191,42 @@ protected function _saveStockItem() $row = []; $sku = $rowData[self::COL_SKU]; - $row['product_id'] = $this->skuProcessor->getNewSku($sku)['entity_id']; - $productIdsToReindex[] = $row['product_id']; + if ($this->skuProcessor->getNewSku($sku) !== null) { + $row['product_id'] = $this->skuProcessor->getNewSku($sku)['entity_id']; + $productIdsToReindex[] = $row['product_id']; - $row['website_id'] = $this->stockConfiguration->getDefaultScopeId(); - $row['stock_id'] = $this->stockRegistry->getStock($row['website_id'])->getStockId(); + $row['website_id'] = $this->stockConfiguration->getDefaultScopeId(); + $row['stock_id'] = $this->stockRegistry->getStock($row['website_id'])->getStockId(); - $stockItemDo = $this->stockRegistry->getStockItem($row['product_id'], $row['website_id']); - $existStockData = $stockItemDo->getData(); + $stockItemDo = $this->stockRegistry->getStockItem($row['product_id'], $row['website_id']); + $existStockData = $stockItemDo->getData(); - $row = array_merge( - $this->defaultStockData, - array_intersect_key($existStockData, $this->defaultStockData), - array_intersect_key($rowData, $this->defaultStockData), - $row - ); + $row = array_merge( + $this->defaultStockData, + array_intersect_key($existStockData, $this->defaultStockData), + array_intersect_key($rowData, $this->defaultStockData), + $row + ); - if ($this->stockConfiguration->isQty( - $this->skuProcessor->getNewSku($sku)['type_id'] - )) { - $stockItemDo->setData($row); - $row['is_in_stock'] = $this->stockStateProvider->verifyStock($stockItemDo); - if ($this->stockStateProvider->verifyNotification($stockItemDo)) { - $row['low_stock_date'] = $this->dateTime->gmDate( - 'Y-m-d H:i:s', - (new \DateTime())->getTimestamp() - ); + if ($this->stockConfiguration->isQty( + $this->skuProcessor->getNewSku($sku)['type_id'] + ) + ) { + $stockItemDo->setData($row); + $row['is_in_stock'] = $this->stockStateProvider->verifyStock($stockItemDo); + if ($this->stockStateProvider->verifyNotification($stockItemDo)) { + $row['low_stock_date'] = $this->dateTime->gmDate( + 'Y-m-d H:i:s', + (new \DateTime())->getTimestamp() + ); + } + $row['stock_status_changed_auto'] = + (int)!$this->stockStateProvider->verifyStock($stockItemDo); + } else { + $row['qty'] = 0; } - $row['stock_status_changed_auto'] = - (int) !$this->stockStateProvider->verifyStock($stockItemDo); - } else { - $row['qty'] = 0; } + if (!isset($stockData[$sku])) { $stockData[$sku] = $row; } diff --git a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php index 1d5fbef13985a..5a030581f4301 100644 --- a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php @@ -768,7 +768,7 @@ public function saveData() } // remember SCOPE_DEFAULT row data $scope = $this->_entityModel->getRowScope($rowData); - if ((ImportProduct::SCOPE_DEFAULT == $scope) && + if (ImportProduct::SCOPE_DEFAULT == $scope && !empty($rowData[ImportProduct::COL_SKU])) { $sku = strtolower($rowData[ImportProduct::COL_SKU]); $this->_productData = isset($newSku[$sku]) ? $newSku[$sku] : $oldSku[$sku]; From 2f23925575ff789632ffc4d579647a599ba61d7d Mon Sep 17 00:00:00 2001 From: Olga Kopylova Date: Fri, 14 Jul 2017 10:33:15 -0500 Subject: [PATCH 216/316] MAGETWO-70738: Impossible to implement plugin that uses message for \Magento\Framework\Mail\TransportInterface - added getMessage() to the interface --- .../Email/Stub/TransportInterfaceMock.php | 10 +++++++++ .../Mail/TransportInterfaceMock.php | 10 +++++++++ .../Mail/Test/Unit/TransportTest.php | 21 ++++++++++++------- .../Magento/Framework/Mail/Transport.php | 10 +++++++++ .../Framework/Mail/TransportInterface.php | 7 +++++++ 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Stub/TransportInterfaceMock.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Stub/TransportInterfaceMock.php index 592ed27913603..afccac8d3cd76 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Stub/TransportInterfaceMock.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Stub/TransportInterfaceMock.php @@ -18,4 +18,14 @@ public function sendMessage() { return; } + + /** + * Get message + * + * @return string + */ + public function getMessage() + { + return ''; + } } diff --git a/dev/tests/integration/framework/Magento/TestFramework/Mail/TransportInterfaceMock.php b/dev/tests/integration/framework/Magento/TestFramework/Mail/TransportInterfaceMock.php index 3545e63cccd3b..8f967b501a59f 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Mail/TransportInterfaceMock.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Mail/TransportInterfaceMock.php @@ -17,4 +17,14 @@ public function sendMessage() { return; } + + /** + * Get message + * + * @return string + */ + public function getMessage() + { + return ''; + } } diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php index 21975168fbfcf..80b4378b091c0 100644 --- a/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php +++ b/lib/internal/Magento/Framework/Mail/Test/Unit/TransportTest.php @@ -10,17 +10,17 @@ class TransportTest extends \PHPUnit_Framework_TestCase /** * @var \PHPUnit_Framework_MockObject */ - protected $_messageMock; + protected $messageMock; /** * @var \Magento\Framework\Mail\Transport */ - protected $_transport; + protected $transport; protected function setUp() { - $this->_messageMock = $this->getMock(\Magento\Framework\Mail\Message::class, [], [], '', false); - $this->_transport = new \Magento\Framework\Mail\Transport($this->_messageMock); + $this->messageMock = $this->getMock(\Magento\Framework\Mail\Message::class, [], [], '', false); + $this->transport = new \Magento\Framework\Mail\Transport($this->messageMock); } /** @@ -29,8 +29,8 @@ protected function setUp() */ public function testTransportWithIncorrectMessageObject() { - $this->_messageMock = $this->getMock(\Magento\Framework\Mail\MessageInterface::class); - $this->_transport = new \Magento\Framework\Mail\Transport($this->_messageMock); + $this->messageMock = $this->getMock(\Magento\Framework\Mail\MessageInterface::class); + $this->transport = new \Magento\Framework\Mail\Transport($this->messageMock); } /** @@ -40,10 +40,15 @@ public function testTransportWithIncorrectMessageObject() */ public function testSendMessageBrokenMessage() { - $this->_messageMock->expects($this->any()) + $this->messageMock->expects($this->any()) ->method('getParts') ->will($this->returnValue(['a', 'b'])); - $this->_transport->sendMessage(); + $this->transport->sendMessage(); + } + + public function testGetMessage() + { + $this->assertSame($this->messageMock, $this->transport->getMessage()); } } diff --git a/lib/internal/Magento/Framework/Mail/Transport.php b/lib/internal/Magento/Framework/Mail/Transport.php index 257dc33b11676..090039371762a 100644 --- a/lib/internal/Magento/Framework/Mail/Transport.php +++ b/lib/internal/Magento/Framework/Mail/Transport.php @@ -41,4 +41,14 @@ public function sendMessage() throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e); } } + + /** + * Get message + * + * @return string + */ + public function getMessage() + { + return $this->_message; + } } diff --git a/lib/internal/Magento/Framework/Mail/TransportInterface.php b/lib/internal/Magento/Framework/Mail/TransportInterface.php index edc54ef06da4c..3ecfdf721f8cd 100644 --- a/lib/internal/Magento/Framework/Mail/TransportInterface.php +++ b/lib/internal/Magento/Framework/Mail/TransportInterface.php @@ -19,4 +19,11 @@ interface TransportInterface * @throws \Magento\Framework\Exception\MailException */ public function sendMessage(); + + /** + * Get message + * + * @return string + */ + public function getMessage(); } From a55876f0e59eb93a5cc0458b6cce492f046dd1bb Mon Sep 17 00:00:00 2001 From: Olga Kopylova Date: Fri, 14 Jul 2017 13:46:32 -0500 Subject: [PATCH 217/316] MAGETWO-70738: Impossible to implement plugin that uses message for \Magento\Framework\Mail\TransportInterface - fixed tests --- .../Magento/Customer/Controller/Adminhtml/IndexTest.php | 3 +-- .../testsuite/Magento/User/Controller/Adminhtml/AuthTest.php | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php index 986264006f2c2..9f7c81a4112a4 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php @@ -762,8 +762,7 @@ protected function prepareEmailMock($occurrenceNumber, $templateId, $sender, $cu $storeId = $customer->getStoreId(); $name = $this->customerViewHelper->getCustomerName($customer); $transportMock = $this->getMock( - \Magento\Framework\Mail\TransportInterface::class, - ['sendMessage'] + \Magento\Framework\Mail\TransportInterface::class ); $transportMock->expects($this->exactly($occurrenceNumber)) ->method('sendMessage'); diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php index 4d7ef4d0400dd..8430913591613 100644 --- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php +++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php @@ -268,8 +268,7 @@ public function testResetPasswordPostActionWithInvalidPassword() protected function prepareEmailMock($occurrenceNumber, $templateId, $sender) { $transportMock = $this->getMock( - \Magento\Framework\Mail\TransportInterface::class, - ['sendMessage'] + \Magento\Framework\Mail\TransportInterface::class ); $transportMock->expects($this->exactly($occurrenceNumber)) ->method('sendMessage'); From 7d60ba8802da1c2c88920a841ef51f91e03185bc Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Sat, 15 Jul 2017 23:14:06 +0300 Subject: [PATCH 218/316] MAGETWO-67240: Duplicate and broken products appear after import --- app/code/Magento/CatalogImportExport/Model/Import/Product.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 44292d5d535ad..fd61cf1d2bd52 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -1608,7 +1608,7 @@ protected function _saveProducts() ]; } else { if (!$productLimit || $productsQty < $productLimit) { - $entityRowsIn[$rowSku] = [ + $entityRowsIn[strtolower($rowSku)] = [ 'attribute_set_id' => $this->skuProcessor->getNewSku($rowSku)['attr_set_id'], 'type_id' => $this->skuProcessor->getNewSku($rowSku)['type_id'], 'sku' => $rowSku, From 1df606e6706141335aafcfebd1c0881d51e7a00a Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Mon, 17 Jul 2017 11:13:27 +0300 Subject: [PATCH 219/316] MAGETWO-70628: Missing link to reset password in forgot your password email --- .../Customer/Model/EmailNotification.php | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/app/code/Magento/Customer/Model/EmailNotification.php b/app/code/Magento/Customer/Model/EmailNotification.php index 4714a722d5c31..853d300d70b3a 100644 --- a/app/code/Magento/Customer/Model/EmailNotification.php +++ b/app/code/Magento/Customer/Model/EmailNotification.php @@ -60,13 +60,6 @@ class EmailNotification implements EmailNotificationInterface self::NEW_ACCOUNT_EMAIL_CONFIRMATION => self::XML_PATH_CONFIRM_EMAIL_TEMPLATE, ]; - /** - * Map of templates. Use for backward compatibility - */ - const TEMPLATE_MAP = [ - self::XML_PATH_FORGOT_EMAIL_TEMPLATE => self::XML_PATH_RESET_PASSWORD_TEMPLATE - ]; - /**#@-*/ /** @@ -248,7 +241,7 @@ private function sendEmailTemplate( $storeId = null, $email = null ) { - $templateId = $this->getTemplateId($template, 'store', $storeId); + $templateId = $this->scopeConfig->getValue($template, 'store', $storeId); if ($email === null) { $email = $customer->getEmail(); } @@ -384,23 +377,4 @@ public function newAccount( $storeId ); } - - /** - * Get templateId include considering template map - * - * @param string $template - * @param string $scopeType - * @param string $storeId - * @return string - */ - private function getTemplateId($template, $scopeType, $storeId) - { - if (array_key_exists($template, self::TEMPLATE_MAP)) { - $templateId = $this->scopeConfig->getValue(self::TEMPLATE_MAP[$template], $scopeType, $storeId); - if ($templateId) { - return $templateId; - } - } - return $this->scopeConfig->getValue($template, $scopeType, $storeId); - } } From d4223dc5a4db2ca0fcc9935e2797be448b89ba8f Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Mon, 17 Jul 2017 11:30:39 +0300 Subject: [PATCH 220/316] MAGETWO-70628: Missing link to reset password in forgot your password email --- .../Magento/Customer/Test/Unit/Model/EmailNotificationTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Test/Unit/Model/EmailNotificationTest.php b/app/code/Magento/Customer/Test/Unit/Model/EmailNotificationTest.php index 88bfca40b35e2..ac48e3a2dcf8f 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/EmailNotificationTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/EmailNotificationTest.php @@ -545,7 +545,7 @@ public function testPasswordResetConfirmation() $this->scopeConfigMock->expects($this->at(0)) ->method('getValue') - ->with(EmailNotification::XML_PATH_RESET_PASSWORD_TEMPLATE, ScopeInterface::SCOPE_STORE, $customerStoreId) + ->with(EmailNotification::XML_PATH_FORGOT_EMAIL_TEMPLATE, ScopeInterface::SCOPE_STORE, $customerStoreId) ->willReturn($templateIdentifier); $this->scopeConfigMock->expects($this->at(1)) ->method('getValue') From 8ad62e4a090e8955b101b7d99dfd1fd977544f8a Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Mon, 17 Jul 2017 13:37:40 +0300 Subject: [PATCH 221/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- app/code/Magento/Analytics/i18n/en_US.csv | 19 +++ .../Attribute/Design/Options/Container.php | 2 +- app/code/Magento/Catalog/i18n/en_US.csv | 32 +++++ .../Ui/Component/MassAction/Group/Options.php | 2 +- app/code/Magento/Ui/etc/di.xml | 2 +- app/etc/di.xml | 6 +- .../Argument/Interpreter/StringUtilsTest.php | 37 ++++-- .../TranslatableStringUtilsTest.php | 109 ++++++++++++++++++ .../Framework/App/ObjectManagerFactory.php | 2 +- .../Data/Argument/Interpreter/StringUtils.php | 29 +---- .../Interpreter/TranslatableStringUtils.php | 58 ++++++++++ .../Framework/ObjectManager/etc/config.xsd | 3 +- 12 files changed, 256 insertions(+), 45 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php create mode 100644 lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php diff --git a/app/code/Magento/Analytics/i18n/en_US.csv b/app/code/Magento/Analytics/i18n/en_US.csv index 0055f8c6a5efe..090534923e450 100644 --- a/app/code/Magento/Analytics/i18n/en_US.csv +++ b/app/code/Magento/Analytics/i18n/en_US.csv @@ -16,6 +16,7 @@ "These arguments can't be empty ""%1""","These arguments can't be empty ""%1""" "Cannot find predefined integration user!","Cannot find predefined integration user!" "File is not ready yet.","File is not ready yet." +"Your Base URL has been changed and your reports are being updated. Advanced Reporting will be available once this change has been processed. Please try again later.","Your Base URL has been changed and your reports are being updated. Advanced Reporting will be available once this change has been processed. Please try again later." "Failed to synchronize data to the Magento Business Intelligence service. ","Failed to synchronize data to the Magento Business Intelligence service. " "Retry Synchronization","Retry Synchronization" TestMessage,TestMessage @@ -49,6 +50,24 @@ Industry,Industry href=""https://dashboard.rjmetrics.com/v2/magento/signup/"">BI Essentials tier.","Magento Business Intelligence provides you with a simple and clear path to becoming more data driven.
Learn more about BI Essentials tier." +"Auto Parts","Auto Parts" +"Baby/Children’s Apparel, Gear and Toys","Baby/Children’s Apparel, Gear and Toys" +"Beauty and Cosmetics","Beauty and Cosmetics" +"Books, Music and Magazines","Books, Music and Magazines" +"Crafts and Stationery","Crafts and Stationery" +"Consumer Electronics","Consumer Electronics" +"Deal Site","Deal Site" +"Fashion Apparel and Accessories","Fashion Apparel and Accessories" +"Food, Beverage and Grocery","Food, Beverage and Grocery" +"Home Goods and Furniture","Home Goods and Furniture" +"Home Improvement","Home Improvement" +"Jewelry and Watches","Jewelry and Watches" +"Mass Merchant","Mass Merchant" +"Office Supplies","Office Supplies" +"Outdoor and Camping Gear","Outdoor and Camping Gear" +"Pet Goods","Pet Goods" +"Pharma and Medical Devices","Pharma and Medical Devices" +"Technology B2B","Technology B2B" "Analytics Subscription","Analytics Subscription" "powered by Magento Business Intelligence","powered by Magento Business Intelligence" "

When you turn on Advanced diff --git a/app/code/Magento/Catalog/Model/Entity/Product/Attribute/Design/Options/Container.php b/app/code/Magento/Catalog/Model/Entity/Product/Attribute/Design/Options/Container.php index 011cfdcb6860d..22cb3c3264df5 100644 --- a/app/code/Magento/Catalog/Model/Entity/Product/Attribute/Design/Options/Container.php +++ b/app/code/Magento/Catalog/Model/Entity/Product/Attribute/Design/Options/Container.php @@ -24,7 +24,7 @@ public function getOptionText($value) if (sizeof($options) > 0) { foreach ($options as $option) { if (isset($option['value']) && $option['value'] == $value) { - return $option['label']; + return __($option['label']); } } } diff --git a/app/code/Magento/Catalog/i18n/en_US.csv b/app/code/Magento/Catalog/i18n/en_US.csv index 8f1203f3ea23d..de9f5e1975870 100644 --- a/app/code/Magento/Catalog/i18n/en_US.csv +++ b/app/code/Magento/Catalog/i18n/en_US.csv @@ -210,6 +210,7 @@ Catalog,Catalog "An attribute with this code already exists.","An attribute with this code already exists." "An attribute with the same code (%1) already exists.","An attribute with the same code (%1) already exists." "The value of Admin must be unique.","The value of Admin must be unique." +"The value of Admin scope can't be empty.","The value of Admin scope can't be empty." "You duplicated the product.","You duplicated the product." "This product doesn't exist.","This product doesn't exist." "Invalid product id. Should be numeric value greater than 0","Invalid product id. Should be numeric value greater than 0" @@ -622,9 +623,13 @@ OK,OK "Image Detail","Image Detail" Adding...,Adding... Added,Added +"does not implement Storage Interface","does not implement Storage Interface" "unselect all","unselect all" Inventory,Inventory "Catalog Section","Catalog Section" +Small,Small +Main,Main +"Custom image","Custom image" "Product Fields Auto-Generation","Product Fields Auto-Generation" "Mask for SKU","Mask for SKU" "Use {{name}} as Product Name placeholder","Use {{name}} as Product Name placeholder" @@ -633,6 +638,10 @@ Inventory,Inventory "Use {{name}} as Product Name or {{sku}} as Product SKU placeholders","Use {{name}} as Product Name or {{sku}} as Product SKU placeholders" "Mask for Meta Description","Mask for Meta Description" "Use {{name}} and {{description}} as Product Name and Product Description placeholders","Use {{name}} and {{description}} as Product Name and Product Description placeholders" +"Recently Viewed/Compared Products","Recently Viewed/Compared Products" +"Lifetime of products in Recently Viewed Widget","Lifetime of products in Recently Viewed Widget" +"Lifetime of products in Recently Compared Widget","Lifetime of products in Recently Compared Widget" +"Synchronize widget products with backend storage","Synchronize widget products with backend storage" Storefront,Storefront "List Mode","List Mode" "Products per Page on Grid Allowed Values","Products per Page on Grid Allowed Values" @@ -666,6 +675,8 @@ Comma-separated.,Comma-separated. "Use Static URLs for Media Content in WYSIWYG for Catalog","Use Static URLs for Media Content in WYSIWYG for Catalog" "This applies only to catalog products and categories. Media content will be inserted into the editor as a static URL. Media content is not updated if the system configuration base URL changes.","This applies only to catalog products and categories. Media content will be inserted into the editor as a static URL. Media content is not updated if the system configuration base URL changes." "Top Level Category","Top Level Category" +"Product Info Column","Product Info Column" +"Block after Info Column","Block after Info Column" "Product Flat Data","Product Flat Data" "Reorganize EAV product structure to flat structure","Reorganize EAV product structure to flat structure" "Category Flat Data","Category Flat Data" @@ -709,6 +720,22 @@ Template,Template "If empty, we'll use the category name here.","If empty, we'll use the category name here." "Category Link Block Template","Category Link Block Template" "Category Link Inline Template","Category Link Inline Template" +"Recently Viewed Products","Recently Viewed Products" +"List of Products Recently Viewed by Visitor","List of Products Recently Viewed by Visitor" +"UI Component","UI Component" +"Number of Products to display","Number of Products to display" +"Product attributes to show","Product attributes to show" +Image,Image +"Learn More Link","Learn More Link" +"Buttons to show","Buttons to show" +"Add to Wishlist","Add to Wishlist" +"Viewed Products Grid Template","Viewed Products Grid Template" +"Viewed Products List Template","Viewed Products List Template" +"Viewed Products Sidebar Template","Viewed Products Sidebar Template" +"Recently Compared Products","Recently Compared Products" +"List of Products Recently Compared by Visitor","List of Products Recently Compared by Visitor" +"Compared Products Grid Template","Compared Products Grid Template" +"Compared Products List Template","Compared Products List Template" Set,Set "Category Information","Category Information" "Enable Category","Enable Category" @@ -763,3 +790,8 @@ Overview,Overview "Skip to the end of the images gallery","Skip to the end of the images gallery" "Skip to the beginning of the images gallery","Skip to the beginning of the images gallery" Details,Details +"Recently Compared","Recently Compared" +"Add To Cart","Add To Cart" +"Add To Compare","Add To Compare" +"Learn more","Learn more" +"Recently Viewed","Recently Viewed" diff --git a/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php b/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php index 9a312de3e007e..ad2af528a89c5 100644 --- a/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php +++ b/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php @@ -88,7 +88,7 @@ public function jsonSerialize() foreach ($options as $optionCode) { $this->options[$optionCode['value']] = [ 'type' => 'customer_group_' . $optionCode['value'], - 'label' => $optionCode['label'], + 'label' => __($optionCode['label']), ]; if ($this->urlPath && $this->paramName) { diff --git a/app/code/Magento/Ui/etc/di.xml b/app/code/Magento/Ui/etc/di.xml index b3bc2b0a15260..99e63462cd5d7 100644 --- a/app/code/Magento/Ui/etc/di.xml +++ b/app/code/Magento/Ui/etc/di.xml @@ -256,7 +256,7 @@ arrayArgumentInterpreterProxy Magento\Framework\Data\Argument\Interpreter\Boolean Magento\Framework\Data\Argument\Interpreter\Number - Magento\Framework\Data\Argument\Interpreter\StringUtils + Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils Magento\Framework\Data\Argument\Interpreter\NullType Magento\Ui\Config\Argument\Parser\Url diff --git a/app/etc/di.xml b/app/etc/di.xml index ef7e0f30e45c5..464e492f06369 100755 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -394,7 +394,7 @@ layoutArrayArgumentReaderInterpreterProxy Magento\Framework\Data\Argument\Interpreter\Boolean Magento\Framework\Data\Argument\Interpreter\Number - Magento\Framework\Data\Argument\Interpreter\StringUtils + Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils Magento\Framework\Data\Argument\Interpreter\NullType Magento\Framework\View\Layout\Argument\Interpreter\Passthrough Magento\Framework\View\Layout\Argument\Interpreter\Passthrough @@ -410,7 +410,7 @@ layoutArrayArgumentGeneratorInterpreterProxy Magento\Framework\Data\Argument\Interpreter\Boolean Magento\Framework\Data\Argument\Interpreter\Number - Magento\Framework\Data\Argument\Interpreter\StringUtils + Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils Magento\Framework\Data\Argument\Interpreter\NullType layoutObjectArgumentInterpreter Magento\Framework\View\Layout\Argument\Interpreter\Url @@ -455,7 +455,7 @@ - Magento\Framework\Data\Argument\Interpreter\StringUtils + Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php index 5eb73ea2d054d..9623def03d317 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php @@ -5,6 +5,12 @@ */ namespace Magento\Framework\Data\Argument\Interpreter; +use Magento\Framework\Phrase\RendererInterface; +use Magento\Framework\Stdlib\BooleanUtils; + +/** + * @covers StringUtils. + */ class StringUtilsTest extends \PHPUnit_Framework_TestCase { /** @@ -13,13 +19,13 @@ class StringUtilsTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var BooleanUtils|\PHPUnit_Framework_MockObject_MockObject */ protected $_booleanUtils; protected function setUp() { - $this->_booleanUtils = $this->getMock(\Magento\Framework\Stdlib\BooleanUtils::class); + $this->_booleanUtils = $this->getMock(BooleanUtils::class); $this->_booleanUtils->expects( $this->any() )->method( @@ -28,18 +34,15 @@ protected function setUp() $this->returnValueMap([['true', true], ['false', false]]) ); $this->_model = new StringUtils($this->_booleanUtils); - $translateRenderer = $this->getMockForAbstractClass(\Magento\Framework\Phrase\RendererInterface::class); - $translateRenderer->expects($this->any())->method('render')->will( - $this->returnCallback( - function ($input) { - return end($input) . ' (translated)'; - } - ) - ); + /** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $translateRenderer */ + $translateRenderer = $this->getMockForAbstractClass(RendererInterface::class); + $translateRenderer->expects(self::never())->method('render'); \Magento\Framework\Phrase::setRenderer($translateRenderer); } /** + * Check StringUtils::evaluate() won't translate incoming $input['value']. + * * @param array $input * @param bool $expected * @@ -51,6 +54,11 @@ public function testEvaluate($input, $expected) $this->assertSame($expected, (string)$actual); } + /** + * Provide test data and expected results for testEavaluate(). + * + * @return array + */ public function evaluateDataProvider() { return [ @@ -58,13 +66,15 @@ public function evaluateDataProvider() 'with value' => [['value' => 'some value'], 'some value'], 'translation required' => [ ['value' => 'some value', 'translate' => 'true'], - 'some value (translated)', + 'some value', ], 'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'] ]; } /** + * Check StringUtils::evaluate() trows exception in case $input['value'] not a string. + * * @param array $input * * @dataProvider evaluateExceptionDataProvider @@ -76,6 +86,11 @@ public function testEvaluateException($input) $this->_model->evaluate($input); } + /** + * Provide test data for testEvaluateException. + * + * @return array + */ public function evaluateExceptionDataProvider() { return ['not a string' => [['value' => 123]]]; diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php new file mode 100644 index 0000000000000..32d10becd73a6 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php @@ -0,0 +1,109 @@ +booleanUtils = $this->getMock(BooleanUtils::class); + $this->booleanUtils->expects( + $this->any() + )->method( + 'toBoolean' + )->will( + $this->returnValueMap([['true', true], ['false', false]]) + ); + + $baseStringUtils = new StringUtils($this->booleanUtils); + $this->model = new TranslatableStringUtils($this->booleanUtils, $baseStringUtils); + /** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $translateRenderer */ + $translateRenderer = $this->getMockForAbstractClass(RendererInterface::class); + $translateRenderer->expects($this->any())->method('render')->will( + $this->returnCallback( + function ($input) { + return end($input) . ' (translated)'; + } + ) + ); + \Magento\Framework\Phrase::setRenderer($translateRenderer); + } + + /** + * Check TranslatableStringUtils::evaluate can translate incoming $input['value']. + * + * @param array $input + * @param bool $expected + * + * @dataProvider evaluateDataProvider + */ + public function testEvaluate($input, $expected) + { + $actual = $this->model->evaluate($input); + $this->assertSame($expected, (string)$actual); + } + + /** + * Provide test data and expected results for testEvaluate(). + * + * @return array + */ + public function evaluateDataProvider() + { + return [ + 'no value' => [[], ''], + 'with value' => [['value' => 'some value'], 'some value'], + 'translation required' => [ + ['value' => 'some value', 'translate' => 'true'], + 'some value (translated)', + ], + 'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'] + ]; + } + + /** + * Check TranslatableStringUtils::evaluate() throws exception in case $input['value'] is not a string. + * + * @param array $input + * + * @dataProvider evaluateExceptionDataProvider + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage String value is expected + */ + public function testEvaluateException($input) + { + $this->model->evaluate($input); + } + + /** + * Provide test data for testEvaluateException. + * + * @return array + */ + public function evaluateExceptionDataProvider() + { + return ['not a string' => [['value' => 123]]]; + } +} diff --git a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php index f9092d69ca06e..47cbb1ec0455c 100644 --- a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php +++ b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php @@ -225,7 +225,7 @@ protected function createArgumentInterpreter( $result = new \Magento\Framework\Data\Argument\Interpreter\Composite( [ 'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils), - 'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils, false), + 'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils), 'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(), 'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(), 'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils), diff --git a/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php b/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php index 9b406459ac8a6..1e6bd1e6cec72 100644 --- a/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php +++ b/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php @@ -3,14 +3,13 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ - namespace Magento\Framework\Data\Argument\Interpreter; use Magento\Framework\Data\Argument\InterpreterInterface; use Magento\Framework\Stdlib\BooleanUtils; /** - * Interpreter of string data type that may optionally perform text translation + * Interpreter of string data type. */ class StringUtils implements InterpreterInterface { @@ -20,24 +19,11 @@ class StringUtils implements InterpreterInterface private $booleanUtils; /** - * Should string utils translate incoming string status. - * - * @var bool - */ - private $translatable; - - /** - * StringUtils constructor. - * * @param BooleanUtils $booleanUtils - * @param bool $translatable */ - public function __construct( - BooleanUtils $booleanUtils, - $translatable = true - ) { + public function __construct(BooleanUtils $booleanUtils) + { $this->booleanUtils = $booleanUtils; - $this->translatable = $translatable; } /** @@ -52,18 +38,9 @@ public function evaluate(array $data) if (!is_string($result)) { throw new \InvalidArgumentException('String value is expected.'); } - if ($this->translatable) { - $needTranslation = isset($data['translate']) - ? $this->booleanUtils->toBoolean($data['translate']) - : false; - if ($needTranslation) { - $result = (string)new \Magento\Framework\Phrase($result); - } - } } else { $result = ''; } - return $result; } } diff --git a/lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php b/lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php new file mode 100644 index 0000000000000..e8c408ad6cf91 --- /dev/null +++ b/lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php @@ -0,0 +1,58 @@ +booleanUtils = $booleanUtils; + $this->baseStringUtils = $baseStringUtils; + } + + /** + * {@inheritdoc} + * @return string + * @throws \InvalidArgumentException + */ + public function evaluate(array $data) + { + $result = $this->baseStringUtils->evaluate($data); + $needTranslation = isset($data['translate']) + ? $this->booleanUtils->toBoolean($data['translate']) + : false; + if ($needTranslation) { + $result = (string)new \Magento\Framework\Phrase($result); + } + + return $result; + } +} diff --git a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd index fa2cc38a3c3d0..e32eaf2616c3e 100644 --- a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd +++ b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd @@ -12,8 +12,9 @@ - + + From c2d91861118b65675606732e8cee4eb2afb394df Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Mon, 17 Jul 2017 16:45:07 +0300 Subject: [PATCH 222/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- app/code/Magento/Ui/etc/ui_definition.map.xsd | 8 ++++++++ .../Data/Argument/Interpreter/StringUtilsTest.php | 2 +- .../Argument/Interpreter/TranslatableStringUtilsTest.php | 2 +- .../Magento/Framework/Data/etc/argument/types.xsd | 6 ++++++ .../Magento/Framework/ObjectManager/etc/config.xsd | 3 +-- .../Magento/Framework/View/Layout/etc/elements.xsd | 8 ++++++++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Ui/etc/ui_definition.map.xsd b/app/code/Magento/Ui/etc/ui_definition.map.xsd index 7101d4fb2bcd7..f83a76d2e4ab4 100644 --- a/app/code/Magento/Ui/etc/ui_definition.map.xsd +++ b/app/code/Magento/Ui/etc/ui_definition.map.xsd @@ -7,6 +7,14 @@ --> + + + + + + + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php index 9623def03d317..f7269aa9b6271 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php @@ -9,7 +9,7 @@ use Magento\Framework\Stdlib\BooleanUtils; /** - * @covers StringUtils. + * @covers StringUtils */ class StringUtilsTest extends \PHPUnit_Framework_TestCase { diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php index 32d10becd73a6..a4f3504a1f677 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php @@ -9,7 +9,7 @@ use Magento\Framework\Stdlib\BooleanUtils; /** - * @covers TranslatableStringUtils. + * @covers TranslatableStringUtils */ class TranslatableStringUtilsTest extends \PHPUnit_Framework_TestCase { diff --git a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd index 4344572f00443..165f378f730b8 100644 --- a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd +++ b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd @@ -33,6 +33,12 @@ + + + @deprecated + DI processing MUST not make translation by its own. Should be declared in children. + + diff --git a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd index e32eaf2616c3e..fa2cc38a3c3d0 100644 --- a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd +++ b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd @@ -12,9 +12,8 @@ - + - diff --git a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd index ea80380865e6a..404982ca09453 100755 --- a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd +++ b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd @@ -8,6 +8,14 @@ + + + + + + + + From 42fb9dfad33e626a9279c17e00bdf5511338e50c Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Mon, 17 Jul 2017 18:38:50 +0300 Subject: [PATCH 223/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- app/code/Magento/Ui/etc/ui_definition.map.xsd | 8 -------- .../Data/Argument/Interpreter/StringUtilsTest.php | 2 +- .../Interpreter/TranslatableStringUtilsTest.php | 2 +- .../Magento/Framework/Data/etc/argument/types.xsd | 14 ++++++++------ .../Magento/Framework/ObjectManager/etc/config.xsd | 6 +++--- .../Magento/Framework/View/Layout/etc/elements.xsd | 8 -------- 6 files changed, 13 insertions(+), 27 deletions(-) diff --git a/app/code/Magento/Ui/etc/ui_definition.map.xsd b/app/code/Magento/Ui/etc/ui_definition.map.xsd index f83a76d2e4ab4..7101d4fb2bcd7 100644 --- a/app/code/Magento/Ui/etc/ui_definition.map.xsd +++ b/app/code/Magento/Ui/etc/ui_definition.map.xsd @@ -7,14 +7,6 @@ --> - - - - - - - - diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php index f7269aa9b6271..4017ebbefde5b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php @@ -9,7 +9,7 @@ use Magento\Framework\Stdlib\BooleanUtils; /** - * @covers StringUtils + * @covers \Magento\Framework\Data\Argument\Interpreter\StringUtils */ class StringUtilsTest extends \PHPUnit_Framework_TestCase { diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php index a4f3504a1f677..6c67839f5d4ba 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php @@ -9,7 +9,7 @@ use Magento\Framework\Stdlib\BooleanUtils; /** - * @covers TranslatableStringUtils + * @covers \Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils */ class TranslatableStringUtilsTest extends \PHPUnit_Framework_TestCase { diff --git a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd index 165f378f730b8..8d352907ef1ce 100644 --- a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd +++ b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd @@ -33,12 +33,6 @@ - - - @deprecated - DI processing MUST not make translation by its own. Should be declared in children. - - @@ -46,6 +40,14 @@ + + + + + + + + diff --git a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd index fa2cc38a3c3d0..3270b9aed0af0 100644 --- a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd +++ b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd @@ -12,9 +12,9 @@ - - - + + + diff --git a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd index 404982ca09453..ea80380865e6a 100755 --- a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd +++ b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd @@ -8,14 +8,6 @@ - - - - - - - - From 5969415c690874f44afb6f7b62ec55f3c7b4b62a Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Mon, 17 Jul 2017 20:07:32 +0300 Subject: [PATCH 224/316] MAGETWO-67240: Duplicate and broken products appear after import --- .../CatalogImportExport/Model/Import/Product.php | 12 +++++------- .../products_to_import_with_changed_sku_case.csv | 12 ++++++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index fd61cf1d2bd52..55988dfd82fdb 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -1563,9 +1563,7 @@ protected function _saveProducts() } $rowScope = $this->getRowScope($rowData); - if (empty($rowData[self::URL_KEY])) { - $rowData[self::URL_KEY] = $this->getUrlKey($rowData); - } + $rowData[self::URL_KEY] = $this->getUrlKey($rowData); $rowSku = $rowData[self::COL_SKU]; @@ -2475,7 +2473,7 @@ public function validateRow(array $rowData, $rowNum) $this->getOptionEntity()->validateRow($rowData, $rowNum); if ($this->isNeedToValidateUrlKey($rowData)) { - $urlKey = $this->getUrlKey($rowData); + $urlKey = strtolower($this->getUrlKey($rowData)); $storeCodes = empty($rowData[self::COL_STORE_VIEW_CODE]) ? array_flip($this->storeResolver->getStoreCodeToId()) : explode($this->getMultipleValueSeparator(), $rowData[self::COL_STORE_VIEW_CODE]); @@ -2484,9 +2482,9 @@ public function validateRow(array $rowData, $rowNum) $productUrlSuffix = $this->getProductUrlSuffix($storeId); $urlPath = $urlKey . $productUrlSuffix; if (empty($this->urlKeys[$storeId][$urlPath]) - || ($this->urlKeys[$storeId][$urlPath] == strtolower($sku)) + || ($this->urlKeys[$storeId][$urlPath] == $sku) ) { - $this->urlKeys[$storeId][$urlPath] = strtolower($sku); + $this->urlKeys[$storeId][$urlPath] = $sku; $this->rowNumbers[$storeId][$urlPath] = $rowNum; } else { $message = sprintf( @@ -2812,7 +2810,7 @@ protected function getProductUrlSuffix($storeId = null) protected function getUrlKey($rowData) { if (!empty($rowData[self::URL_KEY])) { - return $rowData[self::URL_KEY]; + return strtolower($rowData[self::URL_KEY]); } if (!empty($rowData[self::COL_NAME])) { diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_changed_sku_case.csv b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_changed_sku_case.csv index ccb78712c7b65..a357ff35f392c 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_changed_sku_case.csv +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_changed_sku_case.csv @@ -1,6 +1,6 @@ -sku,product_type,store_view_code,name,price,attribute_set_code,categories -simPLE1,simple,,"simple 1",111,Default,"Default Category/Category 1" -SIMPLE2,simple,,"simple 2",111,Default,"Default Category/Category 1" -Simple3,simple,,"simple 3",111,Default,"Default Category/Category 1" -SiMPle3,simple,,"simple 3",333,Default,"Default Category/Category 1" -SIMplE2,simple,,"simple 2",222,Default,"Default Category/Category 1" +sku,product_type,store_view_code,name,price,attribute_set_code,categories,url_key +simPLE1,simple,,"simple 1",111,Default,"Default Category/Category 1","simple1" +SIMPLE2,simple,,"simple 2",111,Default,"Default Category/Category 1","simpLE22" +Simple3,simple,,"simple 3",111,Default,"Default Category/Category 1","simpLE33" +SiMPle3,simple,,"simple 3",333,Default,"Default Category/Category 1","siMPle3" +SIMplE2,simple,,"simple 2",222,Default,"Default Category/Category 1","siMPle2" From f2b1e3c093ca038420f1464abbe28a85f203cfc0 Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 18 Jul 2017 12:36:33 +0300 Subject: [PATCH 225/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- lib/internal/Magento/Framework/Data/etc/argument/types.xsd | 7 ------- .../Magento/Framework/ObjectManager/etc/config.xsd | 5 ++--- .../Magento/Framework/View/Layout/etc/elements.xsd | 7 +++++++ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd index 8d352907ef1ce..549a1820f50e1 100644 --- a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd +++ b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd @@ -36,13 +36,6 @@ - - - - - - - diff --git a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd index 3270b9aed0af0..8d984a145c0d2 100644 --- a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd +++ b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd @@ -11,13 +11,12 @@ - - + + - diff --git a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd index ea80380865e6a..0b235e040da52 100755 --- a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd +++ b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd @@ -8,6 +8,13 @@ + + + + + + + From a43f6076bc4bebaa37c9ca78dafad2929efef7bd Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 18 Jul 2017 13:55:14 +0300 Subject: [PATCH 226/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- .../Magento/Framework/Data/etc/argument/types.xsd | 1 - .../Magento/Framework/ObjectManager/etc/config.xsd | 8 ++++---- .../Magento/Framework/View/Layout/etc/elements.xsd | 7 ------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd index 549a1820f50e1..4344572f00443 100644 --- a/lib/internal/Magento/Framework/Data/etc/argument/types.xsd +++ b/lib/internal/Magento/Framework/Data/etc/argument/types.xsd @@ -36,7 +36,6 @@ - diff --git a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd index 8d984a145c0d2..c41e0afbd8054 100644 --- a/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd +++ b/lib/internal/Magento/Framework/ObjectManager/etc/config.xsd @@ -11,10 +11,10 @@ - - - - + + + + diff --git a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd index 0b235e040da52..ea80380865e6a 100755 --- a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd +++ b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd @@ -8,13 +8,6 @@ - - - - - - - From 12006e17b19d22e6af46d05788d7a7c5df02594d Mon Sep 17 00:00:00 2001 From: Valeriy Nayda Date: Tue, 18 Jul 2017 19:22:30 +0300 Subject: [PATCH 227/316] MAGETWO-70716: Provide entity manager description --- .../Magento/Framework/EntityManager/EntityManager.php | 5 ++++- lib/internal/Magento/Framework/EntityManager/README.md | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/EntityManager/EntityManager.php b/lib/internal/Magento/Framework/EntityManager/EntityManager.php index 94db084dc10a9..d97055eefaad7 100644 --- a/lib/internal/Magento/Framework/EntityManager/EntityManager.php +++ b/lib/internal/Magento/Framework/EntityManager/EntityManager.php @@ -17,10 +17,13 @@ * persistence layer along with Query API as performance efficient APIs for Read scenarios. * * Currently, it's recommended to use Resource Model infrastructure and make a successor of - * Magento\Framework\Model\ResourceModel\Db\AbstractDb class. + * Magento\Framework\Model\ResourceModel\Db\AbstractDb class or successor of + * Magento\Eav\Model\Entity\AbstractEntity if EAV attributes support needed. * * For filtering operations, it's recommended to use successor of * Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection class. + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EntityManager { diff --git a/lib/internal/Magento/Framework/EntityManager/README.md b/lib/internal/Magento/Framework/EntityManager/README.md index 151f7688b1178..f1c4692ef04d0 100644 --- a/lib/internal/Magento/Framework/EntityManager/README.md +++ b/lib/internal/Magento/Framework/EntityManager/README.md @@ -9,7 +9,8 @@ In the nearest future new Persistence Entity Manager would be released which wil persistence layer along with Query API as performance efficient APIs for Read scenarios. Currently, it's recommended to use Resource Model infrastructure and make a successor of -Magento\Framework\Model\ResourceModel\Db\AbstractDb class. +Magento\Framework\Model\ResourceModel\Db\AbstractDb class or successor of +Magento\Eav\Model\Entity\AbstractEntity if EAV attributes support needed. For filtering operations, it's recommended to use successor of Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection class. From a999d2c6eeff0937b55384a98c434952a548f37c Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Wed, 19 Jul 2017 12:13:54 +0300 Subject: [PATCH 228/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- app/code/Magento/Ui/etc/di.xml | 2 +- app/etc/di.xml | 6 +- ...gUtilsTest.php => BaseStringUtilsTest.php} | 32 ++++------ .../Argument/Interpreter/StringUtilsTest.php | 40 ++++++++----- .../Framework/App/ObjectManagerFactory.php | 2 +- .../Argument/Interpreter/BaseStringUtils.php | 50 ++++++++++++++++ .../Data/Argument/Interpreter/StringUtils.php | 32 ++++++---- .../Interpreter/TranslatableStringUtils.php | 58 ------------------- 8 files changed, 115 insertions(+), 107 deletions(-) rename dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/{TranslatableStringUtilsTest.php => BaseStringUtilsTest.php} (70%) create mode 100644 lib/internal/Magento/Framework/Data/Argument/Interpreter/BaseStringUtils.php delete mode 100644 lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php diff --git a/app/code/Magento/Ui/etc/di.xml b/app/code/Magento/Ui/etc/di.xml index 99e63462cd5d7..b3bc2b0a15260 100644 --- a/app/code/Magento/Ui/etc/di.xml +++ b/app/code/Magento/Ui/etc/di.xml @@ -256,7 +256,7 @@ arrayArgumentInterpreterProxy Magento\Framework\Data\Argument\Interpreter\Boolean Magento\Framework\Data\Argument\Interpreter\Number - Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils + Magento\Framework\Data\Argument\Interpreter\StringUtils Magento\Framework\Data\Argument\Interpreter\NullType Magento\Ui\Config\Argument\Parser\Url diff --git a/app/etc/di.xml b/app/etc/di.xml index 464e492f06369..ef7e0f30e45c5 100755 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -394,7 +394,7 @@ layoutArrayArgumentReaderInterpreterProxy Magento\Framework\Data\Argument\Interpreter\Boolean Magento\Framework\Data\Argument\Interpreter\Number - Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils + Magento\Framework\Data\Argument\Interpreter\StringUtils Magento\Framework\Data\Argument\Interpreter\NullType Magento\Framework\View\Layout\Argument\Interpreter\Passthrough Magento\Framework\View\Layout\Argument\Interpreter\Passthrough @@ -410,7 +410,7 @@ layoutArrayArgumentGeneratorInterpreterProxy Magento\Framework\Data\Argument\Interpreter\Boolean Magento\Framework\Data\Argument\Interpreter\Number - Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils + Magento\Framework\Data\Argument\Interpreter\StringUtils Magento\Framework\Data\Argument\Interpreter\NullType layoutObjectArgumentInterpreter Magento\Framework\View\Layout\Argument\Interpreter\Url @@ -455,7 +455,7 @@ - Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils + Magento\Framework\Data\Argument\Interpreter\StringUtils diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/BaseStringUtilsTest.php similarity index 70% rename from dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/BaseStringUtilsTest.php index 6c67839f5d4ba..8628aa0fd7ff5 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/BaseStringUtilsTest.php @@ -3,28 +3,29 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\Data\Argument\Interpreter; use Magento\Framework\Phrase\RendererInterface; use Magento\Framework\Stdlib\BooleanUtils; /** - * @covers \Magento\Framework\Data\Argument\Interpreter\TranslatableStringUtils + * @covers \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils */ -class TranslatableStringUtilsTest extends \PHPUnit_Framework_TestCase +class BaseStringUtilsTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Data\Argument\Interpreter\StringUtils + * @var \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils */ private $model; /** * @var BooleanUtils|\PHPUnit_Framework_MockObject_MockObject */ - protected $booleanUtils; + private $booleanUtils; /** - * Prepare subject for test. + * Prepare subject for tests. */ protected function setUp() { @@ -36,23 +37,15 @@ protected function setUp() )->will( $this->returnValueMap([['true', true], ['false', false]]) ); - - $baseStringUtils = new StringUtils($this->booleanUtils); - $this->model = new TranslatableStringUtils($this->booleanUtils, $baseStringUtils); + $this->model = new BaseStringUtils($this->booleanUtils); /** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $translateRenderer */ $translateRenderer = $this->getMockForAbstractClass(RendererInterface::class); - $translateRenderer->expects($this->any())->method('render')->will( - $this->returnCallback( - function ($input) { - return end($input) . ' (translated)'; - } - ) - ); + $translateRenderer->expects(self::never())->method('render'); \Magento\Framework\Phrase::setRenderer($translateRenderer); } /** - * Check TranslatableStringUtils::evaluate can translate incoming $input['value']. + * Check BaseStringUtils::evaluate() will not translate incoming $input['value']. * * @param array $input * @param bool $expected @@ -77,17 +70,16 @@ public function evaluateDataProvider() 'with value' => [['value' => 'some value'], 'some value'], 'translation required' => [ ['value' => 'some value', 'translate' => 'true'], - 'some value (translated)', + 'some value', ], - 'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'] + 'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'], ]; } /** - * Check TranslatableStringUtils::evaluate() throws exception in case $input['value'] is not a string. + * Check BaseStringUtils::evaluate() trows exception in case $input['value'] not a string. * * @param array $input - * * @dataProvider evaluateExceptionDataProvider * @expectedException \InvalidArgumentException * @expectedExceptionMessage String value is expected diff --git a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php index 4017ebbefde5b..89a88d96d8e2d 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Data/Argument/Interpreter/StringUtilsTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\Data\Argument\Interpreter; use Magento\Framework\Phrase\RendererInterface; @@ -16,46 +17,57 @@ class StringUtilsTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Framework\Data\Argument\Interpreter\StringUtils */ - protected $_model; + private $model; /** * @var BooleanUtils|\PHPUnit_Framework_MockObject_MockObject */ - protected $_booleanUtils; + protected $booleanUtils; + /** + * Prepare subject for test. + */ protected function setUp() { - $this->_booleanUtils = $this->getMock(BooleanUtils::class); - $this->_booleanUtils->expects( + $this->booleanUtils = $this->getMock(BooleanUtils::class); + $this->booleanUtils->expects( $this->any() )->method( 'toBoolean' )->will( $this->returnValueMap([['true', true], ['false', false]]) ); - $this->_model = new StringUtils($this->_booleanUtils); + + $baseStringUtils = new BaseStringUtils($this->booleanUtils); + $this->model = new StringUtils($this->booleanUtils, $baseStringUtils); /** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $translateRenderer */ $translateRenderer = $this->getMockForAbstractClass(RendererInterface::class); - $translateRenderer->expects(self::never())->method('render'); + $translateRenderer->expects($this->any())->method('render')->will( + $this->returnCallback( + function ($input) { + return end($input) . ' (translated)'; + } + ) + ); \Magento\Framework\Phrase::setRenderer($translateRenderer); } /** - * Check StringUtils::evaluate() won't translate incoming $input['value']. + * Check StringUtils::evaluate can translate incoming $input['value']. * * @param array $input - * @param bool $expected + * @param string $expected * * @dataProvider evaluateDataProvider */ public function testEvaluate($input, $expected) { - $actual = $this->_model->evaluate($input); + $actual = $this->model->evaluate($input); $this->assertSame($expected, (string)$actual); } /** - * Provide test data and expected results for testEavaluate(). + * Provide test data and expected results for testEvaluate(). * * @return array */ @@ -66,14 +78,14 @@ public function evaluateDataProvider() 'with value' => [['value' => 'some value'], 'some value'], 'translation required' => [ ['value' => 'some value', 'translate' => 'true'], - 'some value', + 'some value (translated)', ], - 'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'] + 'translation not required' => [['value' => 'some value', 'translate' => 'false'], 'some value'], ]; } /** - * Check StringUtils::evaluate() trows exception in case $input['value'] not a string. + * Check StringUtils::evaluate() throws exception in case $input['value'] is not a string. * * @param array $input * @@ -83,7 +95,7 @@ public function evaluateDataProvider() */ public function testEvaluateException($input) { - $this->_model->evaluate($input); + $this->model->evaluate($input); } /** diff --git a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php index 47cbb1ec0455c..dbdb0574b8cf2 100644 --- a/lib/internal/Magento/Framework/App/ObjectManagerFactory.php +++ b/lib/internal/Magento/Framework/App/ObjectManagerFactory.php @@ -225,7 +225,7 @@ protected function createArgumentInterpreter( $result = new \Magento\Framework\Data\Argument\Interpreter\Composite( [ 'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils), - 'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils), + 'string' => new \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils($booleanUtils), 'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(), 'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(), 'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils), diff --git a/lib/internal/Magento/Framework/Data/Argument/Interpreter/BaseStringUtils.php b/lib/internal/Magento/Framework/Data/Argument/Interpreter/BaseStringUtils.php new file mode 100644 index 0000000000000..f249c87825a1b --- /dev/null +++ b/lib/internal/Magento/Framework/Data/Argument/Interpreter/BaseStringUtils.php @@ -0,0 +1,50 @@ +booleanUtils = $booleanUtils; + } + + /** + * {@inheritdoc} + * @return string + * @throws \InvalidArgumentException + */ + public function evaluate(array $data) + { + if (isset($data['value'])) { + $result = $data['value']; + if (!is_string($result)) { + throw new \InvalidArgumentException('String value is expected.'); + } + } else { + $result = ''; + } + + return $result; + } +} diff --git a/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php b/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php index 1e6bd1e6cec72..cabb68868e0d0 100644 --- a/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php +++ b/lib/internal/Magento/Framework/Data/Argument/Interpreter/StringUtils.php @@ -3,27 +3,39 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\Data\Argument\Interpreter; use Magento\Framework\Data\Argument\InterpreterInterface; use Magento\Framework\Stdlib\BooleanUtils; /** - * Interpreter of string data type. + * Interpreter of string data type that may optionally perform text translation. */ class StringUtils implements InterpreterInterface { + /** + * @var BaseStringUtils + */ + private $baseStringUtils; + /** * @var BooleanUtils */ private $booleanUtils; /** + * StringUtils constructor. + * * @param BooleanUtils $booleanUtils + * @param BaseStringUtils $baseStringUtils */ - public function __construct(BooleanUtils $booleanUtils) - { + public function __construct( + BooleanUtils $booleanUtils, + BaseStringUtils $baseStringUtils + ) { $this->booleanUtils = $booleanUtils; + $this->baseStringUtils = $baseStringUtils; } /** @@ -33,14 +45,14 @@ public function __construct(BooleanUtils $booleanUtils) */ public function evaluate(array $data) { - if (isset($data['value'])) { - $result = $data['value']; - if (!is_string($result)) { - throw new \InvalidArgumentException('String value is expected.'); - } - } else { - $result = ''; + $result = $this->baseStringUtils->evaluate($data); + $needTranslation = isset($data['translate']) + ? $this->booleanUtils->toBoolean($data['translate']) + : false; + if ($needTranslation) { + $result = (string)new \Magento\Framework\Phrase($result); } + return $result; } } diff --git a/lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php b/lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php deleted file mode 100644 index e8c408ad6cf91..0000000000000 --- a/lib/internal/Magento/Framework/Data/Argument/Interpreter/TranslatableStringUtils.php +++ /dev/null @@ -1,58 +0,0 @@ -booleanUtils = $booleanUtils; - $this->baseStringUtils = $baseStringUtils; - } - - /** - * {@inheritdoc} - * @return string - * @throws \InvalidArgumentException - */ - public function evaluate(array $data) - { - $result = $this->baseStringUtils->evaluate($data); - $needTranslation = isset($data['translate']) - ? $this->booleanUtils->toBoolean($data['translate']) - : false; - if ($needTranslation) { - $result = (string)new \Magento\Framework\Phrase($result); - } - - return $result; - } -} From 57b20fb9a6a4ef5f30a234e33c9ac52bdb9d01bf Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Wed, 19 Jul 2017 13:06:15 +0300 Subject: [PATCH 229/316] MAGETWO-67048: Cannot add translate attribute into the di.xml --- .../static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php index 7a4444a6b6a80..98a01b990ab16 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php @@ -79,7 +79,7 @@ protected function setUp() $argumentInterpreter = new \Magento\Framework\Data\Argument\Interpreter\Composite( [ 'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils), - 'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils), + 'string' => new \Magento\Framework\Data\Argument\Interpreter\BaseStringUtils($booleanUtils), 'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(), 'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(), 'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils), From 75c41ccb47d156180a075e824858ca08dff22e8b Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Wed, 19 Jul 2017 13:31:15 +0300 Subject: [PATCH 230/316] MAGETWO-70716: Provide entity manager description --- lib/internal/Magento/Framework/EntityManager/EntityManager.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/internal/Magento/Framework/EntityManager/EntityManager.php b/lib/internal/Magento/Framework/EntityManager/EntityManager.php index d97055eefaad7..1adb03cdfb1a4 100644 --- a/lib/internal/Magento/Framework/EntityManager/EntityManager.php +++ b/lib/internal/Magento/Framework/EntityManager/EntityManager.php @@ -22,8 +22,6 @@ * * For filtering operations, it's recommended to use successor of * Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection class. - * - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EntityManager { From 9867aca84303a5706cbf781c0a0b0d4a16b91d32 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Mon, 17 Jul 2017 20:18:08 +0100 Subject: [PATCH 231/316] magento/magento2#10045 Sitemap add item refactoring Add injectable item resolver to load sitemap items --- .../Model/CategorySitemapItemResolver.php | 109 +++++++++++ .../Model/CmsPageSitemapItemResolver.php | 113 ++++++++++++ .../Model/CompositeSitemapItemResolver.php | 44 +++++ .../Model/ProductSitemapItemResolver.php | 108 +++++++++++ app/code/Magento/Sitemap/Model/Sitemap.php | 108 ++++------- .../Magento/Sitemap/Model/SitemapItem.php | 93 ++++++++++ .../Sitemap/Model/SitemapItemInterface.php | 50 +++++ .../Model/SitemapItemResolverInterface.php | 22 +++ .../Model/CategorySitemapItemResolverTest.php | 152 +++++++++++++++ .../Model/CmsPageSitemapItemResolverTest.php | 152 +++++++++++++++ .../CompositeSitemapItemResolverTest.php | 69 +++++++ .../Model/ProductSitemapItemResolverTest.php | 174 ++++++++++++++++++ .../Sitemap/Test/Unit/Model/SitemapTest.php | 15 +- app/code/Magento/Sitemap/etc/di.xml | 11 ++ 14 files changed, 1145 insertions(+), 75 deletions(-) create mode 100644 app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php create mode 100644 app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php create mode 100644 app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php create mode 100644 app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php create mode 100644 app/code/Magento/Sitemap/Model/SitemapItem.php create mode 100644 app/code/Magento/Sitemap/Model/SitemapItemInterface.php create mode 100644 app/code/Magento/Sitemap/Model/SitemapItemResolverInterface.php create mode 100644 app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php create mode 100644 app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php create mode 100644 app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php create mode 100644 app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php diff --git a/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php new file mode 100644 index 0000000000000..77dd3f746eef1 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php @@ -0,0 +1,109 @@ +categoryFactory = $categoryFactory; + $this->itemFactory = $itemFactory; + $this->scopeConfig = $scopeConfig; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $collection = $this->categoryFactory->create()->getCollection($storeId); + $items = array_map(function($item) use ($storeId) { + return $this->itemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $this->getCategoryPriority($storeId), + 'changeFrequency' => $this->getCategoryChangeFrequency($storeId), + ]); + }, $collection); + + return $items; + } + + /** + * Get page priority + * + * @param int $storeId + * @return string + */ + private function getCategoryPriority($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_CATEGORY_PRIORITY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * Get page change frequency + * + * @param int $storeId + * @return string + */ + private function getCategoryChangeFrequency($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_CATEGORY_CHANGEFREQ, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php new file mode 100644 index 0000000000000..196d13a8cf251 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php @@ -0,0 +1,113 @@ +scopeConfig = $scopeConfig; + $this->cmsPageFactory = $cmsPageFactory; + $this->itemFactory = $itemFactory; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $collection = $this->cmsPageFactory->create()->getCollection($storeId); + var_dump($collection); + $items = array_map(function($item) use ($storeId) { + return $this->itemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $this->getPagePriority($storeId), + 'changeFrequency' => $this->getPageChangeFrequency($storeId), + ]); + }, $collection); + + var_dump($items); + + return $items; + } + + /** + * Get page priority + * + * @param int $storeId + * @return string + */ + private function getPagePriority($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PAGE_PRIORITY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * Get page change frequency + * + * @param int $storeId + * @return string + */ + private function getPageChangeFrequency($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PAGE_CHANGEFREQ, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php new file mode 100644 index 0000000000000..f6f00be2c763c --- /dev/null +++ b/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php @@ -0,0 +1,44 @@ +itemResolvers = $itemResolvers; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $items = []; + + foreach ($this->itemResolvers as $resolver) { + foreach ($resolver->getItems($storeId) as $item) { + $items[] = $item; + } + } + + return $items; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php new file mode 100644 index 0000000000000..5e321b8a9557e --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php @@ -0,0 +1,108 @@ +scopeConfig = $scopeConfig; + $this->productFactory = $productFactory; + $this->itemFactory = $itemFactory; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $collection = $this->productFactory->create()->getCollection($storeId); + $items = array_map(function($item) use ($storeId) { + return $this->itemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $this->getProductPriority($storeId), + 'changeFrequency' => $this->getProductChangeFrequency($storeId), + ]); + }, $collection); + + return $items; + } + + /** + * Get page priority + * + * @param int $storeId + * @return string + */ + private function getProductPriority($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PRODUCT_PRIORITY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * Get page change frequency + * + * @param int $storeId + * @return string + */ + private function getProductChangeFrequency($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PRODUCT_CHANGEFREQ, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index ef8363cbcf2ff..cd1c8dc9fbf06 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -11,7 +11,6 @@ use Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot; use Magento\Framework\App\ObjectManager; use Magento\Robots\Model\Config\Value; -use Magento\Framework\DataObject; /** * Sitemap model @@ -157,6 +156,13 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento */ protected $_cacheTag = true; + /** + * Item resolver + * + * @var SitemapItemResolverInterface + */ + private $itemResolver; + /** * Initialize dependencies. * @@ -176,6 +182,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @param DocumentRoot|null $documentRoot + * @param SitemapItemResolverInterface|null $itemResolver * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -194,7 +201,8 @@ public function __construct( \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], - \Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot $documentRoot = null + \Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot $documentRoot = null, + SitemapItemResolverInterface $itemResolver = null ) { $this->_escaper = $escaper; $this->_sitemapData = $sitemapData; @@ -207,6 +215,7 @@ public function __construct( $this->_storeManager = $storeManager; $this->_request = $request; $this->dateTime = $dateTime; + $this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(SitemapItemResolverInterface::class); parent::__construct($context, $registry, $resource, $resourceCollection, $data); } @@ -236,55 +245,6 @@ protected function _getStream() } } - /** - * Add a sitemap item to the array of sitemap items - * - * @param DataObject $sitemapItem - * @return $this - */ - public function addSitemapItem(DataObject $sitemapItem) - { - $this->_sitemapItems[] = $sitemapItem; - - return $this; - } - - /** - * Collect all sitemap items - * - * @return void - */ - public function collectSitemapItems() - { - /** @var $helper \Magento\Sitemap\Helper\Data */ - $helper = $this->_sitemapData; - $storeId = $this->getStoreId(); - - $this->addSitemapItem(new DataObject( - [ - 'changefreq' => $helper->getCategoryChangefreq($storeId), - 'priority' => $helper->getCategoryPriority($storeId), - 'collection' => $this->_categoryFactory->create()->getCollection($storeId), - ] - )); - - $this->addSitemapItem(new DataObject( - [ - 'changefreq' => $helper->getProductChangefreq($storeId), - 'priority' => $helper->getProductPriority($storeId), - 'collection' => $this->_productFactory->create()->getCollection($storeId), - ] - )); - - $this->addSitemapItem(new DataObject( - [ - 'changefreq' => $helper->getPageChangefreq($storeId), - 'priority' => $helper->getPagePriority($storeId), - 'collection' => $this->_cmsFactory->create()->getCollection($storeId), - ] - )); - } - /** * Initialize sitemap * @@ -292,7 +252,7 @@ public function collectSitemapItems() */ protected function _initSitemapItems() { - $this->collectSitemapItems(); + $this->_sitemapItems = $this->itemResolver->getItems($this->getStoreId()); $this->_tags = [ self::TYPE_INDEX => [ @@ -377,30 +337,30 @@ public function generateXml() { $this->_initSitemapItems(); - /** @var $sitemapItem \Magento\Framework\DataObject */ - foreach ($this->_sitemapItems as $sitemapItem) { - $changefreq = $sitemapItem->getChangefreq(); - $priority = $sitemapItem->getPriority(); - foreach ($sitemapItem->getCollection() as $item) { - $xml = $this->_getSitemapRow( - $item->getUrl(), - $item->getUpdatedAt(), - $changefreq, - $priority, - $item->getImages() - ); - if ($this->_isSplitRequired($xml) && $this->_sitemapIncrement > 0) { - $this->_finalizeSitemap(); - } - if (!$this->_fileSize) { - $this->_createSitemap(); - } - $this->_writeSitemapRow($xml); - // Increase counters - $this->_lineCount++; - $this->_fileSize += strlen($xml); + /** @var $item SitemapItemInterface */ + foreach ($this->_sitemapItems as $item) { + $xml = $this->_getSitemapRow( + $item->getUrl(), + $item->getUpdatedAt(), + $item->getChangeFrequency(), + $item->getPriority(), + $item->getImages() + ); + + if ($this->_isSplitRequired($xml) && $this->_sitemapIncrement > 0) { + $this->_finalizeSitemap(); + } + + if (!$this->_fileSize) { + $this->_createSitemap(); } + + $this->_writeSitemapRow($xml); + // Increase counters + $this->_lineCount++; + $this->_fileSize += strlen($xml); } + $this->_finalizeSitemap(); if ($this->_sitemapIncrement == 1) { diff --git a/app/code/Magento/Sitemap/Model/SitemapItem.php b/app/code/Magento/Sitemap/Model/SitemapItem.php new file mode 100644 index 0000000000000..4a6c4d8fd9e16 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/SitemapItem.php @@ -0,0 +1,93 @@ +url = $url; + $this->priority = $priority; + $this->changeFrequency = $changeFrequency; + $this->updatedAt = $updatedAt; + $this->images = $images; + } + + /** + * {@inheritdoc} + */ + public function getUrl() + { + return $this->url; + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return $this->priority; + } + + /** + * {@inheritdoc} + */ + public function getChangeFrequency() + { + return $this->changeFrequency; + } + + /** + * {@inheritdoc} + */ + public function getImages() + { + return $this->images; + } + + /** + * {@inheritdoc} + */ + public function getUpdatedAt() + { + return $this->updatedAt; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Model/SitemapItemInterface.php b/app/code/Magento/Sitemap/Model/SitemapItemInterface.php new file mode 100644 index 0000000000000..5c87f1805afa2 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/SitemapItemInterface.php @@ -0,0 +1,50 @@ +getStoreConfigMock([ + CategorySitemapItemResolver::XML_PATH_CATEGORY_CHANGEFREQ => 'daily', + CategorySitemapItemResolver::XML_PATH_CATEGORY_PRIORITY => '1.0', + ]); + + $categoryMock = $this->getCategoryCollectionMock([]); + $cmsPageFactoryMock = $this->getCategoryFactoryMock($categoryMock); + $itemFactoryMock = $this->getItemFactoryMock(); + + $resolver = new CategorySitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + self::assertSame([], $resolver->getItems(1)); + } + + /** + * @dataProvider categoryProvider + * @param array $categories + */ + public function testGetItems(array $categories) + { + $storeConfigMock = $this->getStoreConfigMock([ + CategorySitemapItemResolver::XML_PATH_CATEGORY_CHANGEFREQ => 'daily', + CategorySitemapItemResolver::XML_PATH_CATEGORY_PRIORITY => '1.0', + ]); + + $categoryMock = $this->getCategoryCollectionMock($categories); + + $cmsPageFactoryMock = $this->getCategoryFactoryMock($categoryMock); + $itemFactoryMock = $this->getItemFactoryMock(); + + $resolver = new CategorySitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $items = $resolver->getItems(1); + self::assertTrue(count($items) == count($categories)); + foreach($categories as $index => $category) { + self::assertSame($category->getUpdatedAt(), $items[$index]->getUpdatedAt()); + self::assertSame('daily', $items[$index]->getChangeFrequency()); + self::assertSame('1.0', $items[$index]->getPriority()); + self::assertSame($category->getImages(), $items[$index]->getImages()); + self::assertSame($category->getUrl(), $items[$index]->getUrl()); + } + } + + /** + * @return array + */ + public function categoryProvider() + { + return [ + [ + [ + new \Magento\Framework\DataObject( + ['url' => 'category.html', 'updated_at' => '2012-12-21 00:00:00'] + ), + new \Magento\Framework\DataObject( + ['url' => '/category/sub-category.html', 'updated_at' => '2012-12-21 00:00:00'] + ), + ] + ] + ]; + } + + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getCategoryFactoryMock($returnValue) + { + $cmsPageFactoryMock = $this->getMockBuilder(CategoryFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $cmsPageFactoryMock->expects(self::any()) + ->method('create') + ->willReturn($returnValue); + + return $cmsPageFactoryMock; + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getItemFactoryMock() + { + $itemFactoryMock = $this->getMockBuilder(SitemapItemInterfaceFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $itemFactoryMock->expects(self::any()) + ->method('create') + ->willReturnCallback(function ($data) { + $helper = new ObjectManager($this); + + return $helper->getObject(SitemapItem::class, $data); + }); + + return $itemFactoryMock; + } + + /** + * @param array $pathMap + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getStoreConfigMock(array $pathMap = []) + { + $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); + $scopeConfigMock->method('getValue') + ->willReturnCallback(function ($path) use ($pathMap) { + return isset($pathMap[$path]) ? $pathMap[$path] : null; + }); + + return $scopeConfigMock; + } + + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getCategoryCollectionMock($returnValue) + { + $sitemapCmsPageMock = $this->getMockBuilder(Category::class) + ->setMethods(['getCollection']) + ->disableOriginalConstructor() + ->getMock(); + + $sitemapCmsPageMock->expects(self::any()) + ->method('getCollection') + ->willReturn($returnValue); + + return $sitemapCmsPageMock; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php new file mode 100644 index 0000000000000..9bc313120fc04 --- /dev/null +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php @@ -0,0 +1,152 @@ +getStoreConfigMock([ + CmsPageSitemapItemResolver::XML_PATH_PAGE_CHANGEFREQ => 'daily', + CmsPageSitemapItemResolver::XML_PATH_PAGE_PRIORITY => '1.0', + ]); + + $cmsPageCollectionMock = $this->getCmsPageCollectionMock([]); + $cmsPageFactoryMock = $this->getCmsPageFactoryMock($cmsPageCollectionMock); + $itemFactoryMock = $this->getItemFactoryMock(); + + $resolver = new CmsPageSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + self::assertSame([], $resolver->getItems(1)); + } + + /** + * @dataProvider pageProvider + * @param array $pages + */ + public function testGetItems(array $pages = []) + { + $storeConfigMock = $this->getStoreConfigMock([ + CmsPageSitemapItemResolver::XML_PATH_PAGE_CHANGEFREQ => 'daily', + CmsPageSitemapItemResolver::XML_PATH_PAGE_PRIORITY => '1.0', + ]); + + $cmsPageMock = $this->getCmsPageCollectionMock($pages); + + $cmsPageFactoryMock = $this->getCmsPageFactoryMock($cmsPageMock); + $itemFactoryMock = $this->getItemFactoryMock(); + + $resolver = new CmsPageSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $items = $resolver->getItems(1); + self::assertTrue(count($items) == count($pages)); + foreach($pages as $index => $page) {; + self::assertSame($page->getUpdatedAt(), $items[$index]->getUpdatedAt()); + self::assertSame('daily', $items[$index]->getChangeFrequency()); + self::assertSame('1.0', $items[$index]->getPriority()); + self::assertSame($page->getImages(), $items[$index]->getImages()); + self::assertSame($page->getUrl(), $items[$index]->getUrl()); + } + } + + /** + * @return array + */ + public function pageProvider() + { + return [ + [ + [ + new DataObject([ + 'url' => 'http://dummy.url', + 'id' => '/url', + 'updated_at' => '2017-01-01 23:59:59' + ]) + ] + ] + ]; + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getItemFactoryMock() + { + $itemFactoryMock = $this->getMockBuilder(SitemapItemInterfaceFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $itemFactoryMock->expects(self::any()) + ->method('create') + ->willReturnCallback(function ($data) { + $helper = new ObjectManager($this); + + return $helper->getObject(SitemapItem::class, $data); + }); + + return $itemFactoryMock; + } + + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getCmsPageFactoryMock($returnValue) + { + $cmsPageFactoryMock = $this->getMockBuilder(PageFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $cmsPageFactoryMock->expects(self::any()) + ->method('create') + ->willReturn($returnValue); + + return $cmsPageFactoryMock; + } + + /** + * @param array $pathMap + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getStoreConfigMock(array $pathMap = []) + { + $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); + $scopeConfigMock->method('getValue') + ->willReturnCallback(function ($path) use ($pathMap) { + return isset($pathMap[$path]) ? $pathMap[$path] : null; + }); + + return $scopeConfigMock; + } + + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getCmsPageCollectionMock($returnValue) + { + $sitemapCmsPageMock = $this->getMockBuilder(Page::class) + ->setMethods(['getCollection']) + ->disableOriginalConstructor() + ->getMock(); + + $sitemapCmsPageMock->expects(self::any()) + ->method('getCollection') + ->willReturn($returnValue); + + return $sitemapCmsPageMock; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php new file mode 100644 index 0000000000000..b1db237475f7e --- /dev/null +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php @@ -0,0 +1,69 @@ +getItems(1)); + } + + /** + * @dataProvider sitemapItemsProvider + * @param array $itemResolverData + * @param array $expectedItems + */ + public function testGetItems($itemResolverData, $expectedItems) + { + $mockResolvers = []; + + foreach($itemResolverData as $data) { + $mockResolver = $this->getMockForAbstractClass(SitemapItemResolverInterface::class); + $mockResolver->expects(self::once()) + ->method('getItems') + ->willReturn($data); + + $mockResolvers[] = $mockResolver; + } + + $resolver = new CompositeSitemapItemResolver($mockResolvers); + $items = $resolver->getItems(1); + + self::assertSame($expectedItems, $items); + } + + /** + * @return array + */ + public function sitemapItemsProvider() + { + $testCases = []; + + for($i = 1; $i < 5; $i++) { + $itemProviders = []; + $expectedItems = []; + for($i = 1; $i < $maxProviders = random_int(1, 5); $i++) { + $items = []; + for($i = 1; $i < $maxItems = random_int(2, 5); $i++) { + $sitemapItem = $this->getMockForAbstractClass(SitemapItemInterface::class); + $items[] = $sitemapItem; + $expectedItems[] = $sitemapItem; + } + $itemProviders[] = $items; + } + + $testCases[] = [$itemProviders, $expectedItems]; + } + + return $testCases; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php new file mode 100644 index 0000000000000..bd7ac0366a95d --- /dev/null +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php @@ -0,0 +1,174 @@ +getStoreConfigMock([ + ProductSitemapItemResolver::XML_PATH_PRODUCT_CHANGEFREQ => 'daily', + ProductSitemapItemResolver::XML_PATH_PRODUCT_PRIORITY => '1.0', + ]); + + $ProductMock = $this->getProductCollectionMock([]); + $cmsPageFactoryMock = $this->getProductFactoryMock($ProductMock); + $itemFactoryMock = $this->getItemFactoryMock(); + + $resolver = new ProductSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + self::assertSame([], $resolver->getItems(1)); + } + + /** + * @dataProvider productProvider + * @param array $categories + */ + public function testGetItems(array $categories) + { + $storeConfigMock = $this->getStoreConfigMock([ + ProductSitemapItemResolver::XML_PATH_PRODUCT_CHANGEFREQ => 'daily', + ProductSitemapItemResolver::XML_PATH_PRODUCT_PRIORITY => '1.0', + ]); + + $ProductMock = $this->getProductCollectionMock($categories); + + $cmsPageFactoryMock = $this->getProductFactoryMock($ProductMock); + $itemFactoryMock = $this->getItemFactoryMock(); + + $resolver = new ProductSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $items = $resolver->getItems(1); + self::assertTrue(count($items) == count($categories)); + foreach($categories as $index => $product) { + self::assertSame($product->getUpdatedAt(), $items[$index]->getUpdatedAt()); + self::assertSame('daily', $items[$index]->getChangeFrequency()); + self::assertSame('1.0', $items[$index]->getPriority()); + self::assertSame($product->getImages(), $items[$index]->getImages()); + self::assertSame($product->getUrl(), $items[$index]->getUrl()); + } + } + + /** + * @return array + */ + public function productProvider() + { + $storeBaseMediaUrl = 'http://store.com/pub/media/catalog/product/cache/c9e0b0ef589f3508e5ba515cde53c5ff/'; + return [ + [ + [ + new DataObject( + ['url' => 'product.html', 'updated_at' => '2012-12-21 00:00:00'] + ), + new DataObject( + [ + 'url' => 'product2.html', + 'updated_at' => '2012-12-21 00:00:00', + 'images' => new DataObject( + [ + 'collection' => [ + new DataObject( + [ + 'url' => $storeBaseMediaUrl.'i/m/image1.png', + 'caption' => 'caption & > title < "' + ] + ), + new DataObject( + ['url' => $storeBaseMediaUrl.'i/m/image_no_caption.png', 'caption' => null] + ), + ], + 'thumbnail' => $storeBaseMediaUrl.'t/h/thumbnail.jpg', + 'title' => 'Product & > title < "', + ] + ), + ] + ), + ] + ] + ]; + } + + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getProductFactoryMock($returnValue) + { + $cmsPageFactoryMock = $this->getMockBuilder(ProductFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $cmsPageFactoryMock->expects(self::any()) + ->method('create') + ->willReturn($returnValue); + + return $cmsPageFactoryMock; + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getItemFactoryMock() + { + $itemFactoryMock = $this->getMockBuilder(SitemapItemInterfaceFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $itemFactoryMock->expects(self::any()) + ->method('create') + ->willReturnCallback(function ($data) { + $helper = new ObjectManager($this); + + return $helper->getObject(SitemapItem::class, $data); + }); + + return $itemFactoryMock; + } + + /** + * @param array $pathMap + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getStoreConfigMock(array $pathMap = []) + { + $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); + $scopeConfigMock->method('getValue') + ->willReturnCallback(function ($path) use ($pathMap) { + return isset($pathMap[$path]) ? $pathMap[$path] : null; + }); + + return $scopeConfigMock; + } + + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getProductCollectionMock($returnValue) + { + $sitemapCmsPageMock = $this->getMockBuilder(Product::class) + ->setMethods(['getCollection']) + ->disableOriginalConstructor() + ->getMock(); + + $sitemapCmsPageMock->expects(self::any()) + ->method('getCollection') + ->willReturn($returnValue); + + return $sitemapCmsPageMock; + } +} \ No newline at end of file diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index fb1379ecfca28..0b69dd349696e 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -5,6 +5,8 @@ */ namespace Magento\Sitemap\Test\Unit\Model; +use Magento\Sitemap\Model\SitemapItemResolverInterface; + /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ @@ -55,6 +57,11 @@ class SitemapTest extends \PHPUnit_Framework_TestCase */ private $storeManagerMock; + /** + * @var \Magento\Sitemap\Model\SitemapItemResolverInterface + */ + private $itemResolverMock; + /** * Set helper mocks, create resource model mock */ @@ -146,6 +153,11 @@ protected function setUp() )->will( $this->returnValue($this->_directoryMock) ); + + $this->itemResolverMock = $this->getMockForAbstractClass(SitemapItemResolverInterface::class); + $this->itemResolverMock->expects(self::any()) + ->method('getItems') + ->willReturn([]); } /** @@ -646,7 +658,8 @@ protected function _getModelConstructorArgs() 'cmsFactory' => $cmsFactory, 'storeManager' => $this->storeManagerMock, 'sitemapData' => $this->_helperMockSitemap, - 'filesystem' => $this->_filesystemMock + 'filesystem' => $this->_filesystemMock, + 'itemResolver' => $this->itemResolverMock, ] ); $constructArguments['resource'] = null; diff --git a/app/code/Magento/Sitemap/etc/di.xml b/app/code/Magento/Sitemap/etc/di.xml index 0b45763c41bae..217c65dc61973 100644 --- a/app/code/Magento/Sitemap/etc/di.xml +++ b/app/code/Magento/Sitemap/etc/di.xml @@ -6,6 +6,8 @@ */ --> + + Magento\Sitemap\Model\ResourceModel\Sitemap @@ -18,4 +20,13 @@ + + + + Magento\Sitemap\Model\CategorySitemapItemResolver + Magento\Sitemap\Model\CmsPageSitemapItemResolver + Magento\Sitemap\Model\ProductSitemapItemResolver + + + From becd97c1e5bb9339bb9399dc8e43efc93ad18da2 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Wed, 19 Jul 2017 21:36:37 +0100 Subject: [PATCH 232/316] magento/magento2#10045 Sitemap add item refactoring - remove var_dump --- app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php index 196d13a8cf251..f1b702f2649dc 100644 --- a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php +++ b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php @@ -65,7 +65,6 @@ public function __construct( public function getItems($storeId) { $collection = $this->cmsPageFactory->create()->getCollection($storeId); - var_dump($collection); $items = array_map(function($item) use ($storeId) { return $this->itemFactory->create([ 'url' => $item->getUrl(), @@ -76,8 +75,6 @@ public function getItems($storeId) ]); }, $collection); - var_dump($items); - return $items; } From d990c95cd007e99e5379797f0b052a25dbfd34b9 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Wed, 19 Jul 2017 21:44:17 +0100 Subject: [PATCH 233/316] magento/magento2#10045 Sitemap add item refactoring - fix coding standards --- .../Sitemap/Model/CategorySitemapItemResolver.php | 4 ++-- .../Sitemap/Model/CmsPageSitemapItemResolver.php | 4 ++-- .../Sitemap/Model/CompositeSitemapItemResolver.php | 2 +- .../Sitemap/Model/ProductSitemapItemResolver.php | 4 ++-- app/code/Magento/Sitemap/Model/SitemapItem.php | 2 +- .../Magento/Sitemap/Model/SitemapItemInterface.php | 5 +++-- .../Sitemap/Model/SitemapItemResolverInterface.php | 2 +- .../Unit/Model/CategorySitemapItemResolverTest.php | 2 +- .../Test/Unit/Model/CmsPageSitemapItemResolverTest.php | 2 +- .../Unit/Model/CompositeSitemapItemResolverTest.php | 10 +++++----- 10 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php index 77dd3f746eef1..f4653c322cef1 100644 --- a/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php +++ b/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php @@ -64,7 +64,7 @@ public function __construct( public function getItems($storeId) { $collection = $this->categoryFactory->create()->getCollection($storeId); - $items = array_map(function($item) use ($storeId) { + $items = array_map(function ($item) use ($storeId) { return $this->itemFactory->create([ 'url' => $item->getUrl(), 'updatedAt' => $item->getUpdatedAt(), @@ -106,4 +106,4 @@ private function getCategoryChangeFrequency($storeId) $storeId ); } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php index f1b702f2649dc..dab431e060ebc 100644 --- a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php +++ b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php @@ -65,7 +65,7 @@ public function __construct( public function getItems($storeId) { $collection = $this->cmsPageFactory->create()->getCollection($storeId); - $items = array_map(function($item) use ($storeId) { + $items = array_map(function ($item) use ($storeId) { return $this->itemFactory->create([ 'url' => $item->getUrl(), 'updatedAt' => $item->getUpdatedAt(), @@ -107,4 +107,4 @@ private function getPageChangeFrequency($storeId) $storeId ); } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php index f6f00be2c763c..d5c5a80624126 100644 --- a/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php +++ b/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php @@ -41,4 +41,4 @@ public function getItems($storeId) return $items; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php index 5e321b8a9557e..b11fd3c6aadd9 100644 --- a/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php +++ b/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php @@ -63,7 +63,7 @@ public function __construct( public function getItems($storeId) { $collection = $this->productFactory->create()->getCollection($storeId); - $items = array_map(function($item) use ($storeId) { + $items = array_map(function ($item) use ($storeId) { return $this->itemFactory->create([ 'url' => $item->getUrl(), 'updatedAt' => $item->getUpdatedAt(), @@ -105,4 +105,4 @@ private function getProductChangeFrequency($storeId) $storeId ); } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Model/SitemapItem.php b/app/code/Magento/Sitemap/Model/SitemapItem.php index 4a6c4d8fd9e16..2436a6f797d98 100644 --- a/app/code/Magento/Sitemap/Model/SitemapItem.php +++ b/app/code/Magento/Sitemap/Model/SitemapItem.php @@ -90,4 +90,4 @@ public function getUpdatedAt() { return $this->updatedAt; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Model/SitemapItemInterface.php b/app/code/Magento/Sitemap/Model/SitemapItemInterface.php index 5c87f1805afa2..afd95768a2c84 100644 --- a/app/code/Magento/Sitemap/Model/SitemapItemInterface.php +++ b/app/code/Magento/Sitemap/Model/SitemapItemInterface.php @@ -11,7 +11,8 @@ * * @api */ -interface SitemapItemInterface { +interface SitemapItemInterface +{ /** * Get url @@ -47,4 +48,4 @@ public function getImages(); * @return string|null */ public function getUpdatedAt(); -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Model/SitemapItemResolverInterface.php b/app/code/Magento/Sitemap/Model/SitemapItemResolverInterface.php index 84c510f9ab4be..eef4290a2a8d5 100644 --- a/app/code/Magento/Sitemap/Model/SitemapItemResolverInterface.php +++ b/app/code/Magento/Sitemap/Model/SitemapItemResolverInterface.php @@ -19,4 +19,4 @@ interface SitemapItemResolverInterface * @return SitemapItemInterface[] */ public function getItems($storeId); -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php index ce7995889aefe..2209192fe1539 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php @@ -149,4 +149,4 @@ private function getCategoryCollectionMock($returnValue) return $sitemapCmsPageMock; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php index 9bc313120fc04..583246562fd1d 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php @@ -51,7 +51,7 @@ public function testGetItems(array $pages = []) $resolver = new CmsPageSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); $items = $resolver->getItems(1); self::assertTrue(count($items) == count($pages)); - foreach($pages as $index => $page) {; + foreach ($pages as $index => $page) { self::assertSame($page->getUpdatedAt(), $items[$index]->getUpdatedAt()); self::assertSame('daily', $items[$index]->getChangeFrequency()); self::assertSame('1.0', $items[$index]->getPriority()); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php index b1db237475f7e..6b53d39061ead 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php @@ -26,7 +26,7 @@ public function testGetItems($itemResolverData, $expectedItems) { $mockResolvers = []; - foreach($itemResolverData as $data) { + foreach ($itemResolverData as $data) { $mockResolver = $this->getMockForAbstractClass(SitemapItemResolverInterface::class); $mockResolver->expects(self::once()) ->method('getItems') @@ -48,12 +48,12 @@ public function sitemapItemsProvider() { $testCases = []; - for($i = 1; $i < 5; $i++) { + for ($i = 1; $i < 5; $i++) { $itemProviders = []; $expectedItems = []; - for($i = 1; $i < $maxProviders = random_int(1, 5); $i++) { + for ($i = 1; $i < $maxProviders = random_int(1, 5); $i++) { $items = []; - for($i = 1; $i < $maxItems = random_int(2, 5); $i++) { + for ($i = 1; $i < $maxItems = random_int(2, 5); $i++) { $sitemapItem = $this->getMockForAbstractClass(SitemapItemInterface::class); $items[] = $sitemapItem; $expectedItems[] = $sitemapItem; @@ -66,4 +66,4 @@ public function sitemapItemsProvider() return $testCases; } -} \ No newline at end of file +} From c742397427964bbb2a382153fa3df627c3240099 Mon Sep 17 00:00:00 2001 From: pdohogne-magento Date: Wed, 19 Jul 2017 15:50:10 -0500 Subject: [PATCH 234/316] MAGETWO-64901: Fixing functional test to look for a different invalid email: --- .../Customer/Test/TestCase/CreateCustomerBackendEntityTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateCustomerBackendEntityTest.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateCustomerBackendEntityTest.xml index 168182fc537d4..a3715daf8ab75 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateCustomerBackendEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateCustomerBackendEntityTest.xml @@ -60,7 +60,7 @@ Retailer John%isolation% Doe%isolation% - JohnDoe%isolation%@example.ccc + JohnDoe%isolation%@-example.com From c947017a1371cb30fbd46cd9e53bd41213850e24 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Thu, 20 Jul 2017 11:35:34 +0300 Subject: [PATCH 235/316] MAGETWO-70651: Saving category create not valid url-rewrites --- .../Model/CategoryBasedProductRewriteGenerator.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php index 6dd159c031df3..8bfa65f2a0b7d 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php @@ -7,7 +7,6 @@ use Magento\Catalog\Model\Category; use Magento\Catalog\Model\Product; -use Magento\Store\Model\Store; use Magento\Catalog\Model\Product\Visibility; /** @@ -47,11 +46,19 @@ public function generate(Product $product, Category $category, $rootCategoryId = $storeId = $product->getStoreId(); + $productCategories = $product->getCategoryCollection() + ->addAttributeToSelect('url_key') + ->addAttributeToSelect('url_path'); + $urls = $this->productScopeRewriteGenerator->isGlobalScope($storeId) - ? $this->productScopeRewriteGenerator->generateForGlobalScope([$category], $product, $rootCategoryId) + ? $this->productScopeRewriteGenerator->generateForGlobalScope( + $productCategories, + $product, + $rootCategoryId + ) : $this->productScopeRewriteGenerator->generateForSpecificStoreView( $storeId, - [$category], + $productCategories, $product, $rootCategoryId ); From f2c494f1349aaea5e74dc8de4eab2cdea6b0533d Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Thu, 20 Jul 2017 13:12:03 +0300 Subject: [PATCH 236/316] MAGETWO-70651: Saving category create not valid url-rewrites --- ...tegoryBasedProductRewriteGeneratorTest.php | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php index 661e6e5b025dc..b19184abdbaa9 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php @@ -9,6 +9,7 @@ use Magento\Catalog\Model\Product; use Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator; use Magento\CatalogUrlRewrite\Model\ProductScopeRewriteGenerator; +use Magento\Catalog\Model\ResourceModel\Category\Collection; /** * Class CategoryBasedProductRewriteGeneratorTest @@ -41,6 +42,9 @@ public function testGenerationWithGlobalScope() $categoryMock = $this->getMockBuilder(Category::class) ->disableOriginalConstructor() ->getMock(); + $categoryCollectionMock = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); $productMock = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); @@ -54,13 +58,20 @@ public function testGenerationWithGlobalScope() $productMock->expects($this->once()) ->method('getStoreId') ->willReturn($storeId); + $productMock->expects($this->once()) + ->method('getCategoryCollection') + ->willReturn($categoryCollectionMock); + $categoryCollectionMock->expects($this->atLeastOnce()) + ->method('addAttributeToSelect') + ->willReturnSelf(); + $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('isGlobalScope') ->with($storeId) ->willReturn(true); $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('generateForGlobalScope') - ->with([$categoryMock], $productMock, $categoryId) + ->with($categoryCollectionMock, $productMock, $categoryId) ->willReturn($urls); $this->assertEquals($urls, $this->generator->generate($productMock, $categoryMock, $categoryId)); @@ -71,6 +82,9 @@ public function testGenerationWithSpecificStore() $categoryMock = $this->getMockBuilder(Category::class) ->disableOriginalConstructor() ->getMock(); + $categoryCollectionMock = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); $productMock = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); @@ -84,13 +98,20 @@ public function testGenerationWithSpecificStore() $productMock->expects($this->once()) ->method('getStoreId') ->willReturn($storeId); + $productMock->expects($this->once()) + ->method('getCategoryCollection') + ->willReturn($categoryCollectionMock); + $categoryCollectionMock->expects($this->atLeastOnce()) + ->method('addAttributeToSelect') + ->willReturnSelf(); + $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('isGlobalScope') ->with($storeId) ->willReturn(false); $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('generateForSpecificStoreView') - ->with($storeId, [$categoryMock], $productMock, $categoryId) + ->with($storeId, $categoryCollectionMock, $productMock, $categoryId) ->willReturn($urls); $this->assertEquals($urls, $this->generator->generate($productMock, $categoryMock, $categoryId)); From 3c8bbc14d7f0fd727018ef519406a59878991008 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Thu, 20 Jul 2017 13:13:37 +0300 Subject: [PATCH 237/316] MAGETWO-70651: Saving category create not valid url-rewrites --- .../Model/CategoryBasedProductRewriteGenerator.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php index 8bfa65f2a0b7d..39947a5aee2d7 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php @@ -37,6 +37,7 @@ public function __construct( * @param \Magento\Catalog\Model\Category $category * @param int|null $rootCategoryId * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function generate(Product $product, Category $category, $rootCategoryId = null) { From 460c84c0c45a454f22c5610520eeadf97ce50e7d Mon Sep 17 00:00:00 2001 From: pdohogne-magento Date: Wed, 12 Jul 2017 15:55:47 -0500 Subject: [PATCH 238/316] MAGETWO-62405: Catalog cart price rule functional test fix --- .../Promo/Quote/Edit/PromoQuoteForm.xml | 2 +- .../Test/TestCase/UpdateSalesRuleEntityTest.php | 16 +++++++++++++++- .../Test/TestCase/UpdateSalesRuleEntityTest.xml | 1 + .../TestFramework/Annotation/AppIsolation.php | 3 +++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Block/Adminhtml/Promo/Quote/Edit/PromoQuoteForm.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Block/Adminhtml/Promo/Quote/Edit/PromoQuoteForm.xml index d9667e52291b7..c01cad829f9d0 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Block/Adminhtml/Promo/Quote/Edit/PromoQuoteForm.xml +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Block/Adminhtml/Promo/Quote/Edit/PromoQuoteForm.xml @@ -70,7 +70,7 @@ select - #rule_actions_fieldset + .fieldset[id^="sales_rule_formrule_actions_fieldset_"] conditions diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php index 3d19bac2dfedb..5f9f3e0756659 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php @@ -54,6 +54,13 @@ class UpdateSalesRuleEntityTest extends Injectable */ protected $salesRuleName; + /** + * Replace array to fill in category id + * + * @var array + */ + protected $replace; + /** * Create simple product with category. * @@ -67,6 +74,13 @@ public function __prepare(FixtureFactory $fixtureFactory) ['dataset' => 'simple_for_salesrule_1'] ); $productForSalesRule1->persist(); + $this->replace = [ + 'actions' => [ + 'actions_serialized' => [ + '%category_id%' => $productForSalesRule1->getDataFieldConfig('category_ids')['source']->getIds()[0] + ] + ], + ]; return [ 'productForSalesRule1' => $productForSalesRule1, ]; @@ -108,7 +122,7 @@ public function testUpdateSalesRule( // Steps $this->promoQuoteIndex->open(); $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter); - $this->promoQuoteEdit->getSalesRuleForm()->fill($salesRule); + $this->promoQuoteEdit->getSalesRuleForm()->fill($salesRule, null, $this->replace); $this->promoQuoteEdit->getFormPageActions()->save(); } diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.xml index ecb3b9109a88b..f0345a6a1d848 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.xml @@ -10,6 +10,7 @@ active_sales_rule_with_complex_conditions [Subtotal|is|400] + [Category|is|%category_id%] Buy X get Y free (discount amount is Y) 1 3 diff --git a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php index 9c397fd1cb251..cd21cc0623b78 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppIsolation.php @@ -40,6 +40,9 @@ protected function _isolateApp() { if ($this->_hasNonIsolatedTests) { $this->_application->reinitialize(); + $_SESSION = []; + $_COOKIE = []; + session_write_close(); $this->_hasNonIsolatedTests = false; } } From 8c465937d22043039c317e03a07a4bf760124724 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko Date: Fri, 21 Jul 2017 14:17:56 +0300 Subject: [PATCH 239/316] MAGETWO-70683: New registered customer not showed in admin customer grid --- app/code/Magento/Customer/Model/Customer.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/code/Magento/Customer/Model/Customer.php b/app/code/Magento/Customer/Model/Customer.php index 98c89fdd69588..956696cadc0d6 100644 --- a/app/code/Magento/Customer/Model/Customer.php +++ b/app/code/Magento/Customer/Model/Customer.php @@ -1077,9 +1077,7 @@ public function reindex() { /** @var \Magento\Framework\Indexer\IndexerInterface $indexer */ $indexer = $this->indexerRegistry->get(self::CUSTOMER_GRID_INDEXER_ID); - if (!$indexer->isScheduled()) { - $indexer->reindexRow($this->getId()); - } + $indexer->reindexRow($this->getId()); } /** From 92e4c620a849ea03aa9397ae9ed9df2c17ed62a0 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Fri, 21 Jul 2017 18:08:12 +0300 Subject: [PATCH 240/316] MAGETWO-70628: Missing link to reset password in forgot your password email - fix travis static build --- dev/travis/before_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/travis/before_script.sh b/dev/travis/before_script.sh index 7f6ef4f91ff48..e72e01dfaccd3 100755 --- a/dev/travis/before_script.sh +++ b/dev/travis/before_script.sh @@ -71,7 +71,7 @@ case $TEST_SUITE in --output-file="$changed_files_ce" \ --base-path="$TRAVIS_BUILD_DIR" \ --repo='https://github.com/magento/magento2.git' \ - --branch='develop' + --branch='$TRAVIS_BRANCH' cat "$changed_files_ce" | sed 's/^/ + including /' cd ../../.. From 10b225d0c28b85c1a538f4f171e25ae4dae0521f Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Fri, 21 Jul 2017 18:00:32 +0300 Subject: [PATCH 241/316] MAGETWO-70041: Job Server Side is randomly failed on PAT build --- setup/performance-toolkit/benchmark.jmx | 1081 +++++++++-------------- 1 file changed, 420 insertions(+), 661 deletions(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index aa7a160ebe72f..26399b71b576e 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -1,4 +1,3 @@ - - - - false - false - - - - - abandonedCartByGuest - ${__P(abandonedCartByGuest,0)} - = - - - abandonedCartByGuestPercent - ${__P(abandonedCartByGuestPercent,100)} - = - - - abandonedCartByCustomer - ${__P(abandonedCartByCustomer,0)} - = - - - abandonedCartByCustomerPercent - ${__P(abandonedCartByCustomerPercent,100)} - = - - - accountManagement - ${__P(accountManagement,0)} - = - - - accountManagementPercent - ${__P(accountManagementPercent,100)} - = - - - admin_password - ${__P(admin_password,123123q)} - = - - - admin_path - ${__P(admin_path,admin)} - = - - - admin_user - ${__P(admin_user,admin)} - = - - - adminBrowseCustomersGridPercent - ${__P(adminBrowseCustomersGridPercent,100)} - = - - - adminBrowseCustomersGridScenario1_ViewOddGridPages - ${__P(adminBrowseCustomersGridScenario1_ViewOddGridPages,0)} - = - - - adminBrowseCustomersGridScenario2_ViewEvenGridPages - ${__P(adminBrowseCustomersGridScenario2_ViewEvenGridPages,0)} - = - - - adminBrowseCustomersGridScenario3_Filtering - ${__P(adminBrowseCustomersGridScenario3_Filtering,0)} - = - - - adminBrowseCustomersGridScenario4_Sorting - ${__P(adminBrowseCustomersGridScenario4_Sorting,0)} - = - - - adminBrowseCustomersGridScenario5_FilteringAndSorting - ${__P(adminBrowseCustomersGridScenario5_FilteringAndSorting,0)} - = - - - adminBrowseOrdersGridPercent - ${__P(adminBrowseOrdersGridPercent,100)} - = - - - adminBrowseOrdersGridScenario1_ViewOddGridPages - ${__P(adminBrowseOrdersGridScenario1_ViewOddGridPages,0)} - = - - - adminBrowseOrdersGridScenario2_ViewEvenGridPages - ${__P(adminBrowseOrdersGridScenario2_ViewEvenGridPages,0)} - = - - - adminBrowseOrdersGridScenario3_Filtering - ${__P(adminBrowseOrdersGridScenario3_Filtering,0)} - = - - - adminBrowseOrdersGridScenario4_Sorting - ${__P(adminBrowseOrdersGridScenario4_Sorting,0)} - = - - - adminBrowseOrdersGridScenario5_FilteringAndSorting - ${__P(adminBrowseOrdersGridScenario5_FilteringAndSorting,0)} - = - - - adminBrowseProductsGridPercent - ${__P(adminBrowseProductsGridPercent,100)} - = - - - adminBrowseProductsGridScenario1_ViewOddGridPages - ${__P(adminBrowseProductsGridScenario1_ViewOddGridPages,0)} - = - - - adminBrowseProductsGridScenario2_ViewEvenGridPages - ${__P(adminBrowseProductsGridScenario2_ViewEvenGridPages,0)} - = - - - adminBrowseProductsGridScenario3_Filtering - ${__P(adminBrowseProductsGridScenario3_Filtering,0)} - = - - - adminBrowseProductsGridScenario4_Sorting - ${__P(adminBrowseProductsGridScenario4_Sorting,0)} - = - - - adminBrowseProductsGridScenario5_FilteringAndSorting - ${__P(adminBrowseProductsGridScenario5_FilteringAndSorting,0)} - = - - - adminCategoryCount - ${__P(adminCategoryCount,0)} - = - - - adminCategoryManagement - ${__P(adminCategoryManagement,0)} - = - - - adminCategoryManagementDelay - ${__P(adminCategoryManagementDelay,0)} - = - - - adminCategoryManagementPercent - ${__P(adminCategoryManagementPercent,100)} - = - - - adminCMSManagement - ${__P(adminCMSManagement,0)} - = - - - adminCMSManagementDelay - ${__P(adminCMSManagementDelay,0)} - = - - - adminCMSManagementPercent - ${__P(adminCMSManagementPercent,100)} - = - - - adminCreateOrder - ${__P(adminCreateOrder,0)} - = - - - adminCreateOrderPercent - ${__P(adminCreateOrderPercent,100)} - = - - - adminCreateProduct - ${__P(adminCreateProduct,0)} - = - - - adminCreateProductPercent - ${__P(adminCreateProductPercent,100)} - = - - - adminCustomerManagement - ${__P(adminCustomerManagement,0)} - = - - - adminCustomerManagementDelay - ${__P(adminCustomerManagementDelay,0)} - = - - - adminCustomerManagementPercent - ${__P(adminCustomerManagementPercent,100)} - = - - - adminEditOrder - ${__P(adminEditOrder,0)} - = - - - adminEditOrderPercent - ${__P(adminEditOrderPercent,100)} - = - - - adminEditProduct - ${__P(adminEditProduct,0)} - = - - - adminEditProductPercent - ${__P(adminEditProductPercent,100)} - = - - - adminExportCustomers - ${__P(adminExportCustomers,0)} - = - - - adminExportProducts - ${__P(adminExportProducts,0)} - = - - - adminImportCustomerBehavior - ${__P(adminImportCustomerBehavior,)} - = - - - adminImportCustomerFilePath - ${__P(adminImportCustomerFilePath,0)} - = - - - adminImportCustomers - ${__P(adminImportCustomers,0)} - = - - - adminImportProductBehavior - ${__P(adminImportProductBehavior,)} - = - - - adminImportProductFilePath - ${__P(adminImportProductFilePath,0)} - = - - - adminImportProductFilePath-2 - ${__P(adminImportProductFilePath-2,0)} - = - - - adminImportProducts - ${__P(adminImportProducts,0)} - = - - - adminPromotionsManagement - ${__P(adminPromotionsManagement,0)} - = - - - adminPromotionsManagementDelay - ${__P(adminPromotionsManagementDelay,0)} - = - - - adminPromotionsManagementPercent - ${__P(adminPromotionsManagementPercent,100)} - = - - - apiBrowseAndBuyFlow - ${__P(apiBrowseAndBuyFlow,0)} - = - - - apiBrowseAndBuyFlowPercent - ${__P(apiBrowseAndBuyFlowPercent,100)} - = - - - apiCustomerSync - ${__P(apiCustomerSync,0)} - = - - - apiCustomerSyncPercent - ${__P(apiCustomerSyncPercent,100)} - = - - - apiOrderInvoiceShipmentSync - ${__P(apiOrderInvoiceShipmentSync,0)} - = - - - apiOrderInvoiceShipmentSyncPercent - ${__P(apiOrderInvoiceShipmentSyncPercent,100)} - = - - - apiProcessOrders - ${__P(apiProcessOrders,0)} - = - - - apiProcessOrdersPercent - ${__P(apiProcessOrdersPercent,100)} - = - - - apiProductSync - ${__P(apiProductSync,0)} - = - - - apiProductSyncPercent - ${__P(apiProductSyncPercent,100)} - = - - - apiSnapshot - ${__P(apiSnapshot,0)} - = - - - bamboo_build_number - ${__P(bamboo_build_number,)} - = - - - base_path - ${__P(base_path,)} - = - - - cache_indicator - ${__P(cache_indicator,0)} - = - - - catalogBrowsingByGuest - ${__P(catalogBrowsingByGuest,0)} - = - - - catalogBrowsingByGuestPercent - ${__P(catalogBrowsingByGuestPercent,100)} - = - - - catalogBrowsingByCustomer - ${__P(catalogBrowsingByCustomer,0)} - = - - - catalogBrowsingByCustomerPercent - ${__P(catalogBrowsingByCustomerPercent,100)} - = - - - checkoutByGuest - ${__P(checkoutByGuest,0)} - = - - - checkoutByGuestPercent - ${__P(checkoutByGuestPercent,100)} - = - - - checkoutByCustomer - ${__P(checkoutByCustomer,0)} - = - - - checkoutByCustomerPercent - ${__P(checkoutByCustomerPercent,100)} - = - - - customer_checkout_percent - ${__P(customer_checkout_percent,4)} - = - - - customer_limit - ${__P(customer_limit,20)} - = - - - customer_password - 123123q - = - - - customers_page_size - ${__P(customers_page_size,20)} - = - - - dashboard_enabled - ${__P(dashboard_enabled,0)} - = - - - files_folder - ${__P(files_folder,/opt/mpaf/tool/fragments/files/)} - = - - - guest_checkout_percent - ${__P(guest_checkout_percent,4)} - = - - - host - ${__P(host,)} - = - - - loops - ${__P(loops,1)} - = - - - lineItemsAmount - ${__P(lineItemsAmount,10)} - = - - - orders - ${__P(orders,0)} - = - - - orders_page_size - ${__P(orders_page_size,20)} - = - - - products_page_size - ${__P(products_page_size,20)} - = - - - productCompareByGuest - ${__P(productCompareByGuest,0)} - = - - - productCompareByGuestPercent - ${__P(productCompareByGuestPercent,100)} - = - - - productCompareDelay - ${__P(productCompareDelay,0)} - = - - - productsGridMassActions - ${__P(productsGridMassActions,0)} - = - - - productsGridMassActionsPercent - ${__P(productsGridMassActionsPercent,100)} - = - - - ramp_period - ${__P(ramp_period,0)} - = - - - redis_host - ${__P(redis_host,)} - = - - - report_save_path - ${__P(report_save_path,./)} - = - - - response_time_file_name - ${__P(response_time_file_name,production.csv)} - = - - - reviewByCustomer - ${__P(reviewByCustomer,0)} - = - - - reviewByCustomerPercent - ${__P(reviewByCustomerPercent,100)} - = - - - reviewDelay - ${__P(reviewDelay,0)} - = - - - scenario - ${__P(scenario,)} - = - - - searchQuick - ${__P(searchQuick,0)} - = - - - searchQuick_percent - ${__P(searchQuick_percent,100)} - = - - - searchQuickFilter - ${__P(searchQuickFilter,0)} - = - - - searchQuickFilter_percent - ${__P(searchQuickFilter_percent,100)} - = - - - searchAdvanced - ${__P(searchAdvanced,0)} - = - - - searchAdvanced_percent - ${__P(searchAdvanced_percent,100)} - = - - - setupAndTearDownThread - ${__P(setupAndTearDownThread,1)} - = - - - sprint_identifier - ${__P(sprint_identifier,)} - = - - - start_time - ${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)} - = - - - starting_index - ${__P(starting_index,0)} - = - - - test_duration - ${__P(test_duration,900)} - = - - - think_time_deviation - ${__P(think_time_deviation,1000)} - = - - - think_time_delay_offset - ${__P(think_time_delay_offset,2000)} - = - - - url_suffix - .html - = - - - users - ${__P(users,100)} - = - - - view_catalog_percent - ${__P(view_catalog_percent,62)} - = - - - view_product_add_to_cart_percent - ${__P(view_product_add_to_cart_percent,30)} - = - - - website_id - 1 - = - - - wishlistByCustomer - ${__P(wishlistByCustomer,0)} - = - - - wishlistByCustomerPercent - ${__P(wishlistByCustomerPercent,100)} - = - - - wishlistDelay - ${__P(wishlistDelay,0)} - = - - - - @@ -2258,13 +1617,101 @@ vars.put("testLabel", "CatProdBrows"); - ^[0-9]+$ + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + ${think_time_delay_offset} + ${think_time_deviation} + + + + + + + + + + + + + + ${base_path}${simple_product_1_url_key}${url_suffix} + GET + true + false + true + false + false + + + + + + <title>${simple_product_1_name} + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 - Assertion.response_data + Assertion.response_code false - 1 - variable - category_id + 2 @@ -2275,7 +1722,7 @@ vars.put("testLabel", "CatProdBrows"); - + @@ -2285,7 +1732,7 @@ vars.put("testLabel", "CatProdBrows"); - ${base_path}${simple_product_1_url_key}${url_suffix} + ${base_path}${simple_product_2_url_key}${url_suffix} GET true false @@ -2297,7 +1744,7 @@ vars.put("testLabel", "CatProdBrows"); - <title>${simple_product_1_name} + <title>${simple_product_2_name} <span>In stock</span> Assertion.response_data @@ -2305,15 +1752,28 @@ vars.put("testLabel", "CatProdBrows"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + - - - ${think_time_delay_offset} - ${think_time_deviation} - - - - + @@ -2323,7 +1783,7 @@ vars.put("testLabel", "CatProdBrows"); - ${base_path}${simple_product_2_url_key}${url_suffix} + ${base_path}review/product/listAjax/id/${product_id}/ GET true false @@ -2335,10 +1795,9 @@ vars.put("testLabel", "CatProdBrows"); - <title>${simple_product_2_name} - <span>In stock</span> + 200 - Assertion.response_data + Assertion.response_code false 2 @@ -2679,6 +2138,56 @@ vars.put("loadType", "Guest"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 2 + + @@ -2865,6 +2374,56 @@ vars.put("loadType", "Guest"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 2 + + @@ -3508,6 +3067,56 @@ vars.put("loadType", "Guest"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 2 + + @@ -3694,6 +3303,56 @@ vars.put("loadType", "Guest"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 2 + + @@ -4879,6 +4538,56 @@ vars.put("loadType", "Customer"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 2 + + @@ -5065,6 +4774,56 @@ vars.put("loadType", "Customer"); 2 + + + product_id + .//input[@type="hidden" and @name="product"]/@value + false + true + false + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + product_id + + + + + + + + + + + + + + ${base_path}review/product/listAjax/id/${product_id}/ + GET + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 2 + + From 79d15add3a0c2f2ad1757f66177237ee0021a293 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Sun, 23 Jul 2017 20:15:35 +0100 Subject: [PATCH 242/316] magento/magento2#10045 Fix coding standards --- .../Unit/Model/CategorySitemapItemResolverTest.php | 2 +- .../Unit/Model/CmsPageSitemapItemResolverTest.php | 2 +- .../Unit/Model/CompositeSitemapItemResolverTest.php | 3 ++- .../Unit/Model/ProductSitemapItemResolverTest.php | 12 ++++++------ 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php index 2209192fe1539..6681c5744f037 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php @@ -50,7 +50,7 @@ public function testGetItems(array $categories) $resolver = new CategorySitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); $items = $resolver->getItems(1); self::assertTrue(count($items) == count($categories)); - foreach($categories as $index => $category) { + foreach ($categories as $index => $category) { self::assertSame($category->getUpdatedAt(), $items[$index]->getUpdatedAt()); self::assertSame('daily', $items[$index]->getChangeFrequency()); self::assertSame('1.0', $items[$index]->getPriority()); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php index 583246562fd1d..ade0ab456caac 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php @@ -149,4 +149,4 @@ private function getCmsPageCollectionMock($returnValue) return $sitemapCmsPageMock; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php index 6b53d39061ead..b71088de811b6 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php @@ -12,7 +12,8 @@ class CompositeSitemapItemResolverTest extends \PHPUnit_Framework_TestCase { - public function testNoResolvers() { + public function testNoResolvers() + { $resolver = new CompositeSitemapItemResolver(); self::assertSame([], $resolver->getItems(1)); } diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php index bd7ac0366a95d..38535bb9c47de 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php @@ -34,24 +34,24 @@ public function testGetItemsEmpty() /** * @dataProvider productProvider - * @param array $categories + * @param array $products */ - public function testGetItems(array $categories) + public function testGetItems(array $products) { $storeConfigMock = $this->getStoreConfigMock([ ProductSitemapItemResolver::XML_PATH_PRODUCT_CHANGEFREQ => 'daily', ProductSitemapItemResolver::XML_PATH_PRODUCT_PRIORITY => '1.0', ]); - $ProductMock = $this->getProductCollectionMock($categories); + $ProductMock = $this->getProductCollectionMock($products); $cmsPageFactoryMock = $this->getProductFactoryMock($ProductMock); $itemFactoryMock = $this->getItemFactoryMock(); $resolver = new ProductSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); $items = $resolver->getItems(1); - self::assertTrue(count($items) == count($categories)); - foreach($categories as $index => $product) { + self::assertTrue(count($items) == count($products)); + foreach ($products as $index => $product) { self::assertSame($product->getUpdatedAt(), $items[$index]->getUpdatedAt()); self::assertSame('daily', $items[$index]->getChangeFrequency()); self::assertSame('1.0', $items[$index]->getPriority()); @@ -171,4 +171,4 @@ private function getProductCollectionMock($returnValue) return $sitemapCmsPageMock; } -} \ No newline at end of file +} From 6c137a8d1b6615345aeaadac35fdf76c08fa7fc4 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Sun, 23 Jul 2017 20:41:26 +0100 Subject: [PATCH 243/316] magento/magento2#10045 Fix unit tests --- .../Model/CmsPageSitemapItemResolverTest.php | 4 +-- .../CompositeSitemapItemResolverTest.php | 6 ++-- .../Sitemap/Test/Unit/Model/SitemapTest.php | 29 +++++++++++++++++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php index ade0ab456caac..5b55e7ba9658e 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php @@ -24,8 +24,8 @@ public function testGetItemsEmpty() CmsPageSitemapItemResolver::XML_PATH_PAGE_PRIORITY => '1.0', ]); - $cmsPageCollectionMock = $this->getCmsPageCollectionMock([]); - $cmsPageFactoryMock = $this->getCmsPageFactoryMock($cmsPageCollectionMock); + $cmsPageMock = $this->getCmsPageCollectionMock([]); + $cmsPageFactoryMock = $this->getCmsPageFactoryMock($cmsPageMock); $itemFactoryMock = $this->getItemFactoryMock(); $resolver = new CmsPageSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php index b71088de811b6..6e93c58083d79 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php @@ -52,9 +52,11 @@ public function sitemapItemsProvider() for ($i = 1; $i < 5; $i++) { $itemProviders = []; $expectedItems = []; - for ($i = 1; $i < $maxProviders = random_int(1, 5); $i++) { + $maxProviders = random_int(1, 5); + for ($i = 1; $i < $maxProviders; $i++) { $items = []; - for ($i = 1; $i < $maxItems = random_int(2, 5); $i++) { + $maxItems = random_int(2, 5); + for ($i = 1; $i < $maxItems; $i++) { $sitemapItem = $this->getMockForAbstractClass(SitemapItemInterface::class); $items[] = $sitemapItem; $expectedItems[] = $sitemapItem; diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index 0b69dd349696e..2c7c7eef21695 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Sitemap\Test\Unit\Model; +use Magento\Sitemap\Model\SitemapItem; use Magento\Sitemap\Model\SitemapItemResolverInterface; /** @@ -155,9 +156,6 @@ protected function setUp() ); $this->itemResolverMock = $this->getMockForAbstractClass(SitemapItemResolverInterface::class); - $this->itemResolverMock->expects(self::any()) - ->method('getItems') - ->willReturn([]); } /** @@ -587,6 +585,31 @@ protected function _getModelMock($mockBeforeSave = false) ); $this->_sitemapCmsPageMock->expects($this->any())->method('getCollection')->will($this->returnValue([])); + $this->itemResolverMock->expects(self::any()) + ->method('getItems') + ->willReturn([ + new SitemapItem('category.html', '1.0', 'daily', '2012-12-21 00:00:00'), + new SitemapItem('/category/sub-category.html', '1.0', 'daily', '2012-12-21 00:00:00'), + new SitemapItem('product.html', '0.5', 'monthly', '2012-12-21 00:00:00'), + new SitemapItem('product2.html', '0.5', 'monthly', '2012-12-21 00:00:00', new \Magento\Framework\DataObject( + [ + 'collection' => [ + new \Magento\Framework\DataObject( + [ + 'url' => $storeBaseMediaUrl.'i/m/image1.png', + 'caption' => 'caption & > title < "' + ] + ), + new \Magento\Framework\DataObject( + ['url' => $storeBaseMediaUrl.'i/m/image_no_caption.png', 'caption' => null] + ), + ], + 'thumbnail' => $storeBaseMediaUrl.'t/h/thumbnail.jpg', + 'title' => 'Product & > title < "', + ] + )) + ]); + /** @var $model \Magento\Sitemap\Model\Sitemap */ $model = $this->getMockBuilder( \Magento\Sitemap\Model\Sitemap::class From 4bc880b5730e209b32ac51dafc7506a54f7f6579 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Sun, 23 Jul 2017 21:19:33 +0100 Subject: [PATCH 244/316] magento/magento2#10045 Clean up sitemapTest --- .../Sitemap/Test/Unit/Model/SitemapTest.php | 81 ++----------------- 1 file changed, 8 insertions(+), 73 deletions(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index 2c7c7eef21695..f5ce4ad870503 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -529,61 +529,7 @@ protected function _getModelMock($mockBeforeSave = false) $methods[] = 'beforeSave'; } - $this->_sitemapCategoryMock->expects( - $this->any() - )->method( - 'getCollection' - )->will( - $this->returnValue( - [ - new \Magento\Framework\DataObject( - ['url' => 'category.html', 'updated_at' => '2012-12-21 00:00:00'] - ), - new \Magento\Framework\DataObject( - ['url' => '/category/sub-category.html', 'updated_at' => '2012-12-21 00:00:00'] - ), - ] - ) - ); - $storeBaseMediaUrl = 'http://store.com/pub/media/catalog/product/cache/c9e0b0ef589f3508e5ba515cde53c5ff/'; - $this->_sitemapProductMock->expects( - $this->any() - )->method( - 'getCollection' - )->will( - $this->returnValue( - [ - new \Magento\Framework\DataObject( - ['url' => 'product.html', 'updated_at' => '2012-12-21 00:00:00'] - ), - new \Magento\Framework\DataObject( - [ - 'url' => 'product2.html', - 'updated_at' => '2012-12-21 00:00:00', - 'images' => new \Magento\Framework\DataObject( - [ - 'collection' => [ - new \Magento\Framework\DataObject( - [ - 'url' => $storeBaseMediaUrl.'i/m/image1.png', - 'caption' => 'caption & > title < "' - ] - ), - new \Magento\Framework\DataObject( - ['url' => $storeBaseMediaUrl.'i/m/image_no_caption.png', 'caption' => null] - ), - ], - 'thumbnail' => $storeBaseMediaUrl.'t/h/thumbnail.jpg', - 'title' => 'Product & > title < "', - ] - ), - ] - ), - ] - ) - ); - $this->_sitemapCmsPageMock->expects($this->any())->method('getCollection')->will($this->returnValue([])); $this->itemResolverMock->expects(self::any()) ->method('getItems') @@ -591,8 +537,12 @@ protected function _getModelMock($mockBeforeSave = false) new SitemapItem('category.html', '1.0', 'daily', '2012-12-21 00:00:00'), new SitemapItem('/category/sub-category.html', '1.0', 'daily', '2012-12-21 00:00:00'), new SitemapItem('product.html', '0.5', 'monthly', '2012-12-21 00:00:00'), - new SitemapItem('product2.html', '0.5', 'monthly', '2012-12-21 00:00:00', new \Magento\Framework\DataObject( - [ + new SitemapItem( + 'product2.html', + '0.5', + 'monthly', + '2012-12-21 00:00:00', + new \Magento\Framework\DataObject([ 'collection' => [ new \Magento\Framework\DataObject( [ @@ -606,8 +556,8 @@ protected function _getModelMock($mockBeforeSave = false) ], 'thumbnail' => $storeBaseMediaUrl.'t/h/thumbnail.jpg', 'title' => 'Product & > title < "', - ] - )) + ]) + ) ]); /** @var $model \Magento\Sitemap\Model\Sitemap */ @@ -643,30 +593,15 @@ protected function _getModelConstructorArgs() { $categoryFactory = $this->getMockBuilder( \Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory::class - )->setMethods( - ['create'] )->disableOriginalConstructor()->getMock(); - $categoryFactory->expects( - $this->any() - )->method( - 'create' - )->will( - $this->returnValue($this->_sitemapCategoryMock) - ); $productFactory = $this->getMockBuilder( \Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory::class - )->setMethods( - ['create'] )->disableOriginalConstructor()->getMock(); - $productFactory->expects($this->any())->method('create')->will($this->returnValue($this->_sitemapProductMock)); $cmsFactory = $this->getMockBuilder( \Magento\Sitemap\Model\ResourceModel\Cms\PageFactory::class - )->setMethods( - ['create'] )->disableOriginalConstructor()->getMock(); - $cmsFactory->expects($this->any())->method('create')->will($this->returnValue($this->_sitemapCmsPageMock)); $this->storeManagerMock = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class) ->setMethods(['getStore']) From f51fd900d02af4400ca4258c00ef343ab2a3d83b Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Mon, 24 Jul 2017 11:40:01 +0300 Subject: [PATCH 245/316] MAGETWO-70041: Job Server Side is randomly failed on PAT build --- setup/performance-toolkit/benchmark.jmx | 1 + 1 file changed, 1 insertion(+) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index 26399b71b576e..74dc15c1119e4 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -1,3 +1,4 @@ + + + + false + false + + + + + abandonedCartByGuest + ${__P(abandonedCartByGuest,0)} + = + + + abandonedCartByGuestPercent + ${__P(abandonedCartByGuestPercent,100)} + = + + + abandonedCartByCustomer + ${__P(abandonedCartByCustomer,0)} + = + + + abandonedCartByCustomerPercent + ${__P(abandonedCartByCustomerPercent,100)} + = + + + accountManagement + ${__P(accountManagement,0)} + = + + + accountManagementPercent + ${__P(accountManagementPercent,100)} + = + + + admin_password + ${__P(admin_password,123123q)} + = + + + admin_path + ${__P(admin_path,admin)} + = + + + admin_user + ${__P(admin_user,admin)} + = + + + adminBrowseCustomersGridPercent + ${__P(adminBrowseCustomersGridPercent,100)} + = + + + adminBrowseCustomersGridScenario1_ViewOddGridPages + ${__P(adminBrowseCustomersGridScenario1_ViewOddGridPages,0)} + = + + + adminBrowseCustomersGridScenario2_ViewEvenGridPages + ${__P(adminBrowseCustomersGridScenario2_ViewEvenGridPages,0)} + = + + + adminBrowseCustomersGridScenario3_Filtering + ${__P(adminBrowseCustomersGridScenario3_Filtering,0)} + = + + + adminBrowseCustomersGridScenario4_Sorting + ${__P(adminBrowseCustomersGridScenario4_Sorting,0)} + = + + + adminBrowseCustomersGridScenario5_FilteringAndSorting + ${__P(adminBrowseCustomersGridScenario5_FilteringAndSorting,0)} + = + + + adminBrowseOrdersGridPercent + ${__P(adminBrowseOrdersGridPercent,100)} + = + + + adminBrowseOrdersGridScenario1_ViewOddGridPages + ${__P(adminBrowseOrdersGridScenario1_ViewOddGridPages,0)} + = + + + adminBrowseOrdersGridScenario2_ViewEvenGridPages + ${__P(adminBrowseOrdersGridScenario2_ViewEvenGridPages,0)} + = + + + adminBrowseOrdersGridScenario3_Filtering + ${__P(adminBrowseOrdersGridScenario3_Filtering,0)} + = + + + adminBrowseOrdersGridScenario4_Sorting + ${__P(adminBrowseOrdersGridScenario4_Sorting,0)} + = + + + adminBrowseOrdersGridScenario5_FilteringAndSorting + ${__P(adminBrowseOrdersGridScenario5_FilteringAndSorting,0)} + = + + + adminBrowseProductsGridPercent + ${__P(adminBrowseProductsGridPercent,100)} + = + + + adminBrowseProductsGridScenario1_ViewOddGridPages + ${__P(adminBrowseProductsGridScenario1_ViewOddGridPages,0)} + = + + + adminBrowseProductsGridScenario2_ViewEvenGridPages + ${__P(adminBrowseProductsGridScenario2_ViewEvenGridPages,0)} + = + + + adminBrowseProductsGridScenario3_Filtering + ${__P(adminBrowseProductsGridScenario3_Filtering,0)} + = + + + adminBrowseProductsGridScenario4_Sorting + ${__P(adminBrowseProductsGridScenario4_Sorting,0)} + = + + + adminBrowseProductsGridScenario5_FilteringAndSorting + ${__P(adminBrowseProductsGridScenario5_FilteringAndSorting,0)} + = + + + adminCategoryCount + ${__P(adminCategoryCount,0)} + = + + + adminCategoryManagement + ${__P(adminCategoryManagement,0)} + = + + + adminCategoryManagementDelay + ${__P(adminCategoryManagementDelay,0)} + = + + + adminCategoryManagementPercent + ${__P(adminCategoryManagementPercent,100)} + = + + + adminCMSManagement + ${__P(adminCMSManagement,0)} + = + + + adminCMSManagementDelay + ${__P(adminCMSManagementDelay,0)} + = + + + adminCMSManagementPercent + ${__P(adminCMSManagementPercent,100)} + = + + + adminCreateOrder + ${__P(adminCreateOrder,0)} + = + + + adminCreateOrderPercent + ${__P(adminCreateOrderPercent,100)} + = + + + adminCreateProduct + ${__P(adminCreateProduct,0)} + = + + + adminCreateProductPercent + ${__P(adminCreateProductPercent,100)} + = + + + adminCustomerManagement + ${__P(adminCustomerManagement,0)} + = + + + adminCustomerManagementDelay + ${__P(adminCustomerManagementDelay,0)} + = + + + adminCustomerManagementPercent + ${__P(adminCustomerManagementPercent,100)} + = + + + adminEditOrder + ${__P(adminEditOrder,0)} + = + + + adminEditOrderPercent + ${__P(adminEditOrderPercent,100)} + = + + + adminEditProduct + ${__P(adminEditProduct,0)} + = + + + adminEditProductPercent + ${__P(adminEditProductPercent,100)} + = + + + adminExportCustomers + ${__P(adminExportCustomers,0)} + = + + + adminExportProducts + ${__P(adminExportProducts,0)} + = + + + adminImportCustomerBehavior + ${__P(adminImportCustomerBehavior,)} + = + + + adminImportCustomerFilePath + ${__P(adminImportCustomerFilePath,0)} + = + + + adminImportCustomers + ${__P(adminImportCustomers,0)} + = + + + adminImportProductBehavior + ${__P(adminImportProductBehavior,)} + = + + + adminImportProductFilePath + ${__P(adminImportProductFilePath,0)} + = + + + adminImportProductFilePath-2 + ${__P(adminImportProductFilePath-2,0)} + = + + + adminImportProducts + ${__P(adminImportProducts,0)} + = + + + adminPromotionsManagement + ${__P(adminPromotionsManagement,0)} + = + + + adminPromotionsManagementDelay + ${__P(adminPromotionsManagementDelay,0)} + = + + + adminPromotionsManagementPercent + ${__P(adminPromotionsManagementPercent,100)} + = + + + apiBrowseAndBuyFlow + ${__P(apiBrowseAndBuyFlow,0)} + = + + + apiBrowseAndBuyFlowPercent + ${__P(apiBrowseAndBuyFlowPercent,100)} + = + + + apiCustomerSync + ${__P(apiCustomerSync,0)} + = + + + apiCustomerSyncPercent + ${__P(apiCustomerSyncPercent,100)} + = + + + apiOrderInvoiceShipmentSync + ${__P(apiOrderInvoiceShipmentSync,0)} + = + + + apiOrderInvoiceShipmentSyncPercent + ${__P(apiOrderInvoiceShipmentSyncPercent,100)} + = + + + apiProcessOrders + ${__P(apiProcessOrders,0)} + = + + + apiProcessOrdersPercent + ${__P(apiProcessOrdersPercent,100)} + = + + + apiProductSync + ${__P(apiProductSync,0)} + = + + + apiProductSyncPercent + ${__P(apiProductSyncPercent,100)} + = + + + apiSnapshot + ${__P(apiSnapshot,0)} + = + + + bamboo_build_number + ${__P(bamboo_build_number,)} + = + + + base_path + ${__P(base_path,)} + = + + + cache_indicator + ${__P(cache_indicator,0)} + = + + + catalogBrowsingByGuest + ${__P(catalogBrowsingByGuest,0)} + = + + + catalogBrowsingByGuestPercent + ${__P(catalogBrowsingByGuestPercent,100)} + = + + + catalogBrowsingByCustomer + ${__P(catalogBrowsingByCustomer,0)} + = + + + catalogBrowsingByCustomerPercent + ${__P(catalogBrowsingByCustomerPercent,100)} + = + + + checkoutByGuest + ${__P(checkoutByGuest,0)} + = + + + checkoutByGuestPercent + ${__P(checkoutByGuestPercent,100)} + = + + + checkoutByCustomer + ${__P(checkoutByCustomer,0)} + = + + + checkoutByCustomerPercent + ${__P(checkoutByCustomerPercent,100)} + = + + + customer_checkout_percent + ${__P(customer_checkout_percent,4)} + = + + + customer_limit + ${__P(customer_limit,20)} + = + + + customer_password + 123123q + = + + + customers_page_size + ${__P(customers_page_size,20)} + = + + + dashboard_enabled + ${__P(dashboard_enabled,0)} + = + + + files_folder + ${__P(files_folder,/opt/mpaf/tool/fragments/files/)} + = + + + guest_checkout_percent + ${__P(guest_checkout_percent,4)} + = + + + host + ${__P(host,)} + = + + + loops + ${__P(loops,1)} + = + + + lineItemsAmount + ${__P(lineItemsAmount,10)} + = + + + orders + ${__P(orders,0)} + = + + + orders_page_size + ${__P(orders_page_size,20)} + = + + + products_page_size + ${__P(products_page_size,20)} + = + + + productCompareByGuest + ${__P(productCompareByGuest,0)} + = + + + productCompareByGuestPercent + ${__P(productCompareByGuestPercent,100)} + = + + + productCompareDelay + ${__P(productCompareDelay,0)} + = + + + productsGridMassActions + ${__P(productsGridMassActions,0)} + = + + + productsGridMassActionsPercent + ${__P(productsGridMassActionsPercent,100)} + = + + + ramp_period + ${__P(ramp_period,0)} + = + + + redis_host + ${__P(redis_host,)} + = + + + report_save_path + ${__P(report_save_path,./)} + = + + + response_time_file_name + ${__P(response_time_file_name,production.csv)} + = + + + reviewByCustomer + ${__P(reviewByCustomer,0)} + = + + + reviewByCustomerPercent + ${__P(reviewByCustomerPercent,100)} + = + + + reviewDelay + ${__P(reviewDelay,0)} + = + + + scenario + ${__P(scenario,)} + = + + + searchQuick + ${__P(searchQuick,0)} + = + + + searchQuick_percent + ${__P(searchQuick_percent,100)} + = + + + searchQuickFilter + ${__P(searchQuickFilter,0)} + = + + + searchQuickFilter_percent + ${__P(searchQuickFilter_percent,100)} + = + + + searchAdvanced + ${__P(searchAdvanced,0)} + = + + + searchAdvanced_percent + ${__P(searchAdvanced_percent,100)} + = + + + setupAndTearDownThread + ${__P(setupAndTearDownThread,1)} + = + + + sprint_identifier + ${__P(sprint_identifier,)} + = + + + start_time + ${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)} + = + + + starting_index + ${__P(starting_index,0)} + = + + + test_duration + ${__P(test_duration,900)} + = + + + think_time_deviation + ${__P(think_time_deviation,1000)} + = + + + think_time_delay_offset + ${__P(think_time_delay_offset,2000)} + = + + + url_suffix + .html + = + + + users + ${__P(users,100)} + = + + + view_catalog_percent + ${__P(view_catalog_percent,62)} + = + + + view_product_add_to_cart_percent + ${__P(view_product_add_to_cart_percent,30)} + = + + + website_id + 1 + = + + + wishlistByCustomer + ${__P(wishlistByCustomer,0)} + = + + + wishlistByCustomerPercent + ${__P(wishlistByCustomerPercent,100)} + = + + + wishlistDelay + ${__P(wishlistDelay,0)} + = + + + + From 3be13d1229dec728fea38ee5255e21c64adc6506 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Mon, 24 Jul 2017 16:53:33 +0300 Subject: [PATCH 248/316] MAGETWO-70651: Saving category create not valid url-rewrites --- .../CategoryBasedProductRewriteGenerator.php | 13 +- .../Model/CategoryProductUrlPathGenerator.php | 66 ++++++++++ .../Observer/UrlRewriteHandler.php | 10 +- ...tegoryBasedProductRewriteGeneratorTest.php | 25 +--- .../CategoryProductUrlPathGeneratorTest.php | 119 ++++++++++++++++++ 5 files changed, 194 insertions(+), 39 deletions(-) create mode 100644 app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php create mode 100644 app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php index 39947a5aee2d7..105ca290a0721 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryBasedProductRewriteGenerator.php @@ -37,7 +37,6 @@ public function __construct( * @param \Magento\Catalog\Model\Category $category * @param int|null $rootCategoryId * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] - * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function generate(Product $product, Category $category, $rootCategoryId = null) { @@ -47,19 +46,11 @@ public function generate(Product $product, Category $category, $rootCategoryId = $storeId = $product->getStoreId(); - $productCategories = $product->getCategoryCollection() - ->addAttributeToSelect('url_key') - ->addAttributeToSelect('url_path'); - $urls = $this->productScopeRewriteGenerator->isGlobalScope($storeId) - ? $this->productScopeRewriteGenerator->generateForGlobalScope( - $productCategories, - $product, - $rootCategoryId - ) + ? $this->productScopeRewriteGenerator->generateForGlobalScope([$category], $product, $rootCategoryId) : $this->productScopeRewriteGenerator->generateForSpecificStoreView( $storeId, - $productCategories, + [$category], $product, $rootCategoryId ); diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php new file mode 100644 index 0000000000000..20594b9a0a80d --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php @@ -0,0 +1,66 @@ +productScopeRewriteGenerator = $productScopeRewriteGenerator; + } + + /** + * Generate product url rewrites based on category + * + * @param \Magento\Catalog\Model\Product $product + * @param int|null $rootCategoryId + * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[] + */ + public function generate(Product $product, $rootCategoryId = null) + { + if ($product->getVisibility() == Visibility::VISIBILITY_NOT_VISIBLE) { + return []; + } + + $storeId = $product->getStoreId(); + + $productCategories = $product->getCategoryCollection() + ->addAttributeToSelect('url_key') + ->addAttributeToSelect('url_path'); + + $urls = $this->productScopeRewriteGenerator->isGlobalScope($storeId) + ? $this->productScopeRewriteGenerator->generateForGlobalScope( + $productCategories, + $product, + $rootCategoryId + ) + : $this->productScopeRewriteGenerator->generateForSpecificStoreView( + $storeId, + $productCategories, + $product, + $rootCategoryId + ); + + return $urls; + } +} diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php index 8e38d64eca166..a7b733d223e2a 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php @@ -130,7 +130,7 @@ public function generateProductUrlRewrites(\Magento\Catalog\Model\Category $cate * @param int|null $rootCategoryId * @return array */ - public function getCategoryProductsUrlRewrites( + private function getCategoryProductsUrlRewrites( \Magento\Catalog\Model\Category $category, $storeId, $saveRewriteHistory, @@ -158,7 +158,7 @@ public function getCategoryProductsUrlRewrites( $product->setStoreId($storeId); $product->setData('save_rewrites_history', $saveRewriteHistory); $mergeDataProvider->merge( - $this->getCategoryBasedProductRewriteGenerator()->generate($product, $category, $rootCategoryId) + $this->getCategoryBasedProductRewriteGenerator()->generate($product, $rootCategoryId) ); } @@ -166,16 +166,16 @@ public function getCategoryProductsUrlRewrites( } /** - * Retrieve generator, which use single category for different products + * Retrieve generator, which use all product categories for different products * * @deprecated - * @return \Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator|mixed + * @return \Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator|mixed */ private function getCategoryBasedProductRewriteGenerator() { if (!$this->categoryBasedProductRewriteGenerator) { $this->categoryBasedProductRewriteGenerator = \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator::class); + ->get(\Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator::class); } return $this->categoryBasedProductRewriteGenerator; diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php index b19184abdbaa9..661e6e5b025dc 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryBasedProductRewriteGeneratorTest.php @@ -9,7 +9,6 @@ use Magento\Catalog\Model\Product; use Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator; use Magento\CatalogUrlRewrite\Model\ProductScopeRewriteGenerator; -use Magento\Catalog\Model\ResourceModel\Category\Collection; /** * Class CategoryBasedProductRewriteGeneratorTest @@ -42,9 +41,6 @@ public function testGenerationWithGlobalScope() $categoryMock = $this->getMockBuilder(Category::class) ->disableOriginalConstructor() ->getMock(); - $categoryCollectionMock = $this->getMockBuilder(Collection::class) - ->disableOriginalConstructor() - ->getMock(); $productMock = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); @@ -58,20 +54,13 @@ public function testGenerationWithGlobalScope() $productMock->expects($this->once()) ->method('getStoreId') ->willReturn($storeId); - $productMock->expects($this->once()) - ->method('getCategoryCollection') - ->willReturn($categoryCollectionMock); - $categoryCollectionMock->expects($this->atLeastOnce()) - ->method('addAttributeToSelect') - ->willReturnSelf(); - $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('isGlobalScope') ->with($storeId) ->willReturn(true); $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('generateForGlobalScope') - ->with($categoryCollectionMock, $productMock, $categoryId) + ->with([$categoryMock], $productMock, $categoryId) ->willReturn($urls); $this->assertEquals($urls, $this->generator->generate($productMock, $categoryMock, $categoryId)); @@ -82,9 +71,6 @@ public function testGenerationWithSpecificStore() $categoryMock = $this->getMockBuilder(Category::class) ->disableOriginalConstructor() ->getMock(); - $categoryCollectionMock = $this->getMockBuilder(Collection::class) - ->disableOriginalConstructor() - ->getMock(); $productMock = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); @@ -98,20 +84,13 @@ public function testGenerationWithSpecificStore() $productMock->expects($this->once()) ->method('getStoreId') ->willReturn($storeId); - $productMock->expects($this->once()) - ->method('getCategoryCollection') - ->willReturn($categoryCollectionMock); - $categoryCollectionMock->expects($this->atLeastOnce()) - ->method('addAttributeToSelect') - ->willReturnSelf(); - $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('isGlobalScope') ->with($storeId) ->willReturn(false); $this->productScopeRewriteGeneratorMock->expects($this->once()) ->method('generateForSpecificStoreView') - ->with($storeId, $categoryCollectionMock, $productMock, $categoryId) + ->with($storeId, [$categoryMock], $productMock, $categoryId) ->willReturn($urls); $this->assertEquals($urls, $this->generator->generate($productMock, $categoryMock, $categoryId)); diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php new file mode 100644 index 0000000000000..557b44a65c8e9 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php @@ -0,0 +1,119 @@ +productScopeRewriteGeneratorMock = $this->getMockBuilder(ProductScopeRewriteGenerator::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->generator = new CategoryProductUrlPathGenerator( + $this->productScopeRewriteGeneratorMock + ); + } + + public function testGenerationWithGlobalScope() + { + $categoryMock = $this->getMockBuilder(Category::class) + ->disableOriginalConstructor() + ->getMock(); + $categoryCollectionMock = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + $productMock = $this->getMockBuilder(Product::class) + ->disableOriginalConstructor() + ->getMock(); + $storeId = 1; + $categoryId = 1; + $urls = ['dummy-url.html']; + + $productMock->expects($this->once()) + ->method('getVisibility') + ->willReturn(2); + $productMock->expects($this->once()) + ->method('getStoreId') + ->willReturn($storeId); + $productMock->expects($this->once()) + ->method('getCategoryCollection') + ->willReturn($categoryCollectionMock); + $categoryCollectionMock->expects($this->atLeastOnce()) + ->method('addAttributeToSelect') + ->willReturnSelf(); + + $this->productScopeRewriteGeneratorMock->expects($this->once()) + ->method('isGlobalScope') + ->with($storeId) + ->willReturn(true); + $this->productScopeRewriteGeneratorMock->expects($this->once()) + ->method('generateForGlobalScope') + ->with($categoryCollectionMock, $productMock, $categoryId) + ->willReturn($urls); + + $this->assertEquals($urls, $this->generator->generate($productMock, $categoryId)); + } + + public function testGenerationWithSpecificStore() + { + $categoryMock = $this->getMockBuilder(Category::class) + ->disableOriginalConstructor() + ->getMock(); + $categoryCollectionMock = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + $productMock = $this->getMockBuilder(Product::class) + ->disableOriginalConstructor() + ->getMock(); + $storeId = 1; + $categoryId = 1; + $urls = ['dummy-url.html']; + + $productMock->expects($this->once()) + ->method('getVisibility') + ->willReturn(2); + $productMock->expects($this->once()) + ->method('getStoreId') + ->willReturn($storeId); + $productMock->expects($this->once()) + ->method('getCategoryCollection') + ->willReturn($categoryCollectionMock); + $categoryCollectionMock->expects($this->atLeastOnce()) + ->method('addAttributeToSelect') + ->willReturnSelf(); + + $this->productScopeRewriteGeneratorMock->expects($this->once()) + ->method('isGlobalScope') + ->with($storeId) + ->willReturn(false); + $this->productScopeRewriteGeneratorMock->expects($this->once()) + ->method('generateForSpecificStoreView') + ->with($storeId, $categoryCollectionMock, $productMock, $categoryId) + ->willReturn($urls); + + $this->assertEquals($urls, $this->generator->generate($productMock, $categoryId)); + } +} From c7d6324fe84766ddd9ab9710f19b5923fcbac09a Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Mon, 24 Jul 2017 17:03:47 +0300 Subject: [PATCH 249/316] MAGETWO-70651: Saving category create not valid url-rewrites --- .../Model/CategoryProductUrlPathGenerator.php | 3 +-- .../Observer/UrlRewriteHandler.php | 23 ++++--------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php index 20594b9a0a80d..fc5d555dd7364 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryProductUrlPathGenerator.php @@ -11,7 +11,6 @@ /** * Class ProductUrlRewriteGenerator * @package Magento\CatalogUrlRewrite\Model - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CategoryProductUrlPathGenerator { @@ -30,7 +29,7 @@ public function __construct( } /** - * Generate product url rewrites based on category + * Generate product url rewrites based on all product categories * * @param \Magento\Catalog\Model\Product $product * @param int|null $rootCategoryId diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php index a7b733d223e2a..df1dcb0f5499e 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php @@ -25,7 +25,7 @@ class UrlRewriteHandler /** @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */ protected $productCollectionFactory; - /** @var \Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator */ + /** @var \Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator */ private $categoryBasedProductRewriteGenerator; /** @var \Magento\UrlRewrite\Model\MergeDataProvider */ @@ -40,6 +40,7 @@ class UrlRewriteHandler * @param \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $productUrlRewriteGenerator * @param \Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory + * @param \Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator $categoryBasedProductRewriteGenerator * @param \Magento\UrlRewrite\Model\MergeDataProviderFactory|null $mergeDataProviderFactory * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer */ @@ -49,6 +50,7 @@ public function __construct( \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $productUrlRewriteGenerator, \Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, + \Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator $categoryBasedProductRewriteGenerator, \Magento\UrlRewrite\Model\MergeDataProviderFactory $mergeDataProviderFactory = null, \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { @@ -57,6 +59,7 @@ public function __construct( $this->productUrlRewriteGenerator = $productUrlRewriteGenerator; $this->urlPersist = $urlPersist; $this->productCollectionFactory = $productCollectionFactory; + $this->categoryBasedProductRewriteGenerator = $categoryBasedProductRewriteGenerator; if (!isset($mergeDataProviderFactory)) { $mergeDataProviderFactory = \Magento\Framework\App\ObjectManager::getInstance()->get( @@ -158,29 +161,13 @@ private function getCategoryProductsUrlRewrites( $product->setStoreId($storeId); $product->setData('save_rewrites_history', $saveRewriteHistory); $mergeDataProvider->merge( - $this->getCategoryBasedProductRewriteGenerator()->generate($product, $rootCategoryId) + $this->categoryBasedProductRewriteGenerator->generate($product, $rootCategoryId) ); } return $mergeDataProvider->getData(); } - /** - * Retrieve generator, which use all product categories for different products - * - * @deprecated - * @return \Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator|mixed - */ - private function getCategoryBasedProductRewriteGenerator() - { - if (!$this->categoryBasedProductRewriteGenerator) { - $this->categoryBasedProductRewriteGenerator = \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator::class); - } - - return $this->categoryBasedProductRewriteGenerator; - } - /** * @param \Magento\Catalog\Model\Category $category * @return void From 9d114df48fee34fb29a25e3c721ca12ffc4d6f99 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Mon, 24 Jul 2017 17:22:37 +0300 Subject: [PATCH 250/316] MAGETWO-70651: Saving category create not valid url-rewrites --- .../Test/Unit/Observer/UrlRewriteHandlerTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php index 9586d284e4b29..3073ed1b28444 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php @@ -14,6 +14,7 @@ use Magento\Framework\Serialize\Serializer\Json; use Magento\UrlRewrite\Model\MergeDataProviderFactory; use Magento\UrlRewrite\Model\MergeDataProvider; +use Magento\CatalogUrlRewrite\Model\CategoryProductUrlPathGenerator; class UrlRewriteHandlerTest extends \PHPUnit_Framework_TestCase { @@ -47,6 +48,11 @@ class UrlRewriteHandlerTest extends \PHPUnit_Framework_TestCase */ protected $collectionFactoryMock; + /** + * @var CategoryProductUrlPathGenerator|\PHPUnit_Framework_MockObject_MockObject + */ + private $categoryBasedProductRewriteGeneratorMock; + /** * @var MergeDataProviderFactory|\PHPUnit_Framework_MockObject_MockObject */ @@ -82,6 +88,9 @@ protected function setUp() $mergeDataProviderMock = $this->getMockBuilder(MergeDataProvider::class) ->disableOriginalConstructor() ->getMock(); + $this->categoryBasedProductRewriteGeneratorMock = $this->getMockBuilder(CategoryProductUrlPathGenerator::class) + ->disableOriginalConstructor() + ->getMock(); $this->mergeDataProviderFactoryMock->expects($this->any()) ->method('create') ->willReturn($mergeDataProviderMock); @@ -96,6 +105,7 @@ protected function setUp() $this->productUrlRewriteGeneratorMock, $this->urlPersistMock, $this->collectionFactoryMock, + $this->categoryBasedProductRewriteGeneratorMock, $this->mergeDataProviderFactoryMock, $this->serializerMock ); From a7b19abc580bdaf8f5aedbda7cd4c9d856a69691 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Mon, 24 Jul 2017 17:54:30 +0300 Subject: [PATCH 251/316] MAGETWO-70651: Saving category create not valid url-rewrites --- .../Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php index 557b44a65c8e9..1ec2c1ba9a768 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryProductUrlPathGeneratorTest.php @@ -39,9 +39,6 @@ public function setUp() public function testGenerationWithGlobalScope() { - $categoryMock = $this->getMockBuilder(Category::class) - ->disableOriginalConstructor() - ->getMock(); $categoryCollectionMock = $this->getMockBuilder(Collection::class) ->disableOriginalConstructor() ->getMock(); @@ -79,9 +76,6 @@ public function testGenerationWithGlobalScope() public function testGenerationWithSpecificStore() { - $categoryMock = $this->getMockBuilder(Category::class) - ->disableOriginalConstructor() - ->getMock(); $categoryCollectionMock = $this->getMockBuilder(Collection::class) ->disableOriginalConstructor() ->getMock(); From b6ddaa73d5b7e4448a199b82283893aa7a79ce34 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Mon, 24 Jul 2017 22:36:32 +0100 Subject: [PATCH 252/316] magento/magento2#10045 add item resolver configs, sitemap config, clean up tests --- app/code/Magento/Sitemap/Helper/Data.php | 29 ++++ .../Model/CategorySitemapItemResolver.php | 109 ------------- .../Model/CmsPageSitemapItemResolver.php | 110 ------------- .../Sitemap/Model/ItemResolver/Category.php | 72 +++++++++ .../ItemResolver/CategoryConfigReader.php | 61 ++++++++ .../Sitemap/Model/ItemResolver/CmsPage.php | 70 +++++++++ .../ItemResolver/CmsPageConfigReader.php | 61 ++++++++ .../Composite.php} | 11 +- .../ItemResolver/ConfigReaderInterface.php | 31 ++++ .../ItemResolverInterface.php} | 6 +- .../Sitemap/Model/ItemResolver/Product.php | 72 +++++++++ .../ItemResolver/ProductConfigReader.php | 61 ++++++++ .../Model/ProductSitemapItemResolver.php | 108 ------------- app/code/Magento/Sitemap/Model/Sitemap.php | 62 ++++---- .../Sitemap/Model/SitemapConfigReader.php | 116 ++++++++++++++ .../Model/SitemapConfigReaderInterface.php | 54 +++++++ .../Sitemap/Test/Unit/Helper/DataTest.php | 44 ------ .../CategoryTest.php} | 67 ++++---- .../CmsPageTest.php} | 50 +++--- .../CompositeTest.php} | 14 +- .../ProductTest.php} | 66 ++++---- .../Unit/Model/SitemapConfigReaderTest.php | 39 +++++ .../Sitemap/Test/Unit/Model/SitemapTest.php | 145 +++++++++--------- app/code/Magento/Sitemap/etc/di.xml | 27 +++- .../Magento/Sitemap/Helper/DataTest.php | 138 ----------------- .../ItemResolver/CategoryConfigReaderTest.php | 41 +++++ .../ItemResolver/CmsPageConfigReaderTest.php | 41 +++++ .../ItemResolver/ProductConfigReaderTest.php | 41 +++++ .../Sitemap/Model/SitemapConfigReaderTest.php | 67 ++++++++ 29 files changed, 1084 insertions(+), 729 deletions(-) delete mode 100644 app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php delete mode 100644 app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/Category.php create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php rename app/code/Magento/Sitemap/Model/{CompositeSitemapItemResolver.php => ItemResolver/Composite.php} (70%) create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php rename app/code/Magento/Sitemap/Model/{SitemapItemResolverInterface.php => ItemResolver/ItemResolverInterface.php} (71%) create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/Product.php create mode 100644 app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php delete mode 100644 app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php create mode 100644 app/code/Magento/Sitemap/Model/SitemapConfigReader.php create mode 100644 app/code/Magento/Sitemap/Model/SitemapConfigReaderInterface.php delete mode 100644 app/code/Magento/Sitemap/Test/Unit/Helper/DataTest.php rename app/code/Magento/Sitemap/Test/Unit/Model/{CategorySitemapItemResolverTest.php => ItemResolver/CategoryTest.php} (64%) rename app/code/Magento/Sitemap/Test/Unit/Model/{CmsPageSitemapItemResolverTest.php => ItemResolver/CmsPageTest.php} (72%) rename app/code/Magento/Sitemap/Test/Unit/Model/{CompositeSitemapItemResolverTest.php => ItemResolver/CompositeTest.php} (78%) rename app/code/Magento/Sitemap/Test/Unit/Model/{ProductSitemapItemResolverTest.php => ItemResolver/ProductTest.php} (72%) create mode 100644 app/code/Magento/Sitemap/Test/Unit/Model/SitemapConfigReaderTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Sitemap/Helper/DataTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php diff --git a/app/code/Magento/Sitemap/Helper/Data.php b/app/code/Magento/Sitemap/Helper/Data.php index cc3e6ec3cb9ab..6dc2346aa0b87 100644 --- a/app/code/Magento/Sitemap/Helper/Data.php +++ b/app/code/Magento/Sitemap/Helper/Data.php @@ -10,8 +10,15 @@ */ namespace Magento\Sitemap\Helper; +use Magento\Sitemap\Model\ItemResolver\CategoryConfigReader; +use Magento\Sitemap\Model\ItemResolver\CmsPageConfigReader; +use Magento\Sitemap\Model\ItemResolver\ProductConfigReader; +use Magento\Sitemap\Model\SitemapConfigReader; use Magento\Store\Model\ScopeInterface; +/** + * @deprecated + */ class Data extends \Magento\Framework\App\Helper\AbstractHelper { /** @@ -68,6 +75,8 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper * * @param int $storeId * @return int + * @deprecated + * @see SitemapConfigReader::getMaximumLinesNumber() */ public function getMaximumLinesNumber($storeId) { @@ -83,6 +92,8 @@ public function getMaximumLinesNumber($storeId) * * @param int $storeId * @return int + * @deprecated + * @see SitemapConfigReader::getMaximumFileSize() */ public function getMaximumFileSize($storeId) { @@ -98,6 +109,8 @@ public function getMaximumFileSize($storeId) * * @param int $storeId * @return string + * @deprecated + * @see CategoryConfigReader::getChangeFrequency() */ public function getCategoryChangefreq($storeId) { @@ -113,6 +126,8 @@ public function getCategoryChangefreq($storeId) * * @param int $storeId * @return string + * @deprecated + * @see ProductConfigReader::getChangeFrequency() */ public function getProductChangefreq($storeId) { @@ -128,6 +143,8 @@ public function getProductChangefreq($storeId) * * @param int $storeId * @return string + * @deprecated + * @see CmsPageConfigReader::getChangeFrequency() */ public function getPageChangefreq($storeId) { @@ -143,6 +160,8 @@ public function getPageChangefreq($storeId) * * @param int $storeId * @return string + * @deprecated + * @see CategoryConfigReader::getPriority() */ public function getCategoryPriority($storeId) { @@ -158,6 +177,8 @@ public function getCategoryPriority($storeId) * * @param int $storeId * @return string + * @deprecated + * @see ProductConfigReader::getPriority() */ public function getProductPriority($storeId) { @@ -173,6 +194,8 @@ public function getProductPriority($storeId) * * @param int $storeId * @return string + * @deprecated + * @see CmsPageConfigReader::getPriority() */ public function getPagePriority($storeId) { @@ -188,6 +211,8 @@ public function getPagePriority($storeId) * * @param int $storeId * @return int + * @deprecated + * @see SitemapConfigReader::getEnableSubmissionRobots() */ public function getEnableSubmissionRobots($storeId) { @@ -203,6 +228,8 @@ public function getEnableSubmissionRobots($storeId) * * @param int $storeId * @return string + * @deprecated + * @see SitemapConfigReader::getProductImageIncludePolicy() */ public function getProductImageIncludePolicy($storeId) { @@ -217,6 +244,8 @@ public function getProductImageIncludePolicy($storeId) * Get list valid paths for generate a sitemap XML file * * @return string[] + * @deprecated + * @see SitemapConfigReader::getValidPaths() */ public function getValidPaths() { diff --git a/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php deleted file mode 100644 index f4653c322cef1..0000000000000 --- a/app/code/Magento/Sitemap/Model/CategorySitemapItemResolver.php +++ /dev/null @@ -1,109 +0,0 @@ -categoryFactory = $categoryFactory; - $this->itemFactory = $itemFactory; - $this->scopeConfig = $scopeConfig; - } - - /** - * {@inheritdoc} - */ - public function getItems($storeId) - { - $collection = $this->categoryFactory->create()->getCollection($storeId); - $items = array_map(function ($item) use ($storeId) { - return $this->itemFactory->create([ - 'url' => $item->getUrl(), - 'updatedAt' => $item->getUpdatedAt(), - 'images' => $item->getImages(), - 'priority' => $this->getCategoryPriority($storeId), - 'changeFrequency' => $this->getCategoryChangeFrequency($storeId), - ]); - }, $collection); - - return $items; - } - - /** - * Get page priority - * - * @param int $storeId - * @return string - */ - private function getCategoryPriority($storeId) - { - return (string)$this->scopeConfig->getValue( - self::XML_PATH_CATEGORY_PRIORITY, - ScopeInterface::SCOPE_STORE, - $storeId - ); - } - - /** - * Get page change frequency - * - * @param int $storeId - * @return string - */ - private function getCategoryChangeFrequency($storeId) - { - return (string)$this->scopeConfig->getValue( - self::XML_PATH_CATEGORY_CHANGEFREQ, - ScopeInterface::SCOPE_STORE, - $storeId - ); - } -} diff --git a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php deleted file mode 100644 index dab431e060ebc..0000000000000 --- a/app/code/Magento/Sitemap/Model/CmsPageSitemapItemResolver.php +++ /dev/null @@ -1,110 +0,0 @@ -scopeConfig = $scopeConfig; - $this->cmsPageFactory = $cmsPageFactory; - $this->itemFactory = $itemFactory; - } - - /** - * {@inheritdoc} - */ - public function getItems($storeId) - { - $collection = $this->cmsPageFactory->create()->getCollection($storeId); - $items = array_map(function ($item) use ($storeId) { - return $this->itemFactory->create([ - 'url' => $item->getUrl(), - 'updatedAt' => $item->getUpdatedAt(), - 'images' => $item->getImages(), - 'priority' => $this->getPagePriority($storeId), - 'changeFrequency' => $this->getPageChangeFrequency($storeId), - ]); - }, $collection); - - return $items; - } - - /** - * Get page priority - * - * @param int $storeId - * @return string - */ - private function getPagePriority($storeId) - { - return (string)$this->scopeConfig->getValue( - self::XML_PATH_PAGE_PRIORITY, - ScopeInterface::SCOPE_STORE, - $storeId - ); - } - - /** - * Get page change frequency - * - * @param int $storeId - * @return string - */ - private function getPageChangeFrequency($storeId) - { - return (string)$this->scopeConfig->getValue( - self::XML_PATH_PAGE_CHANGEFREQ, - ScopeInterface::SCOPE_STORE, - $storeId - ); - } -} diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/Category.php b/app/code/Magento/Sitemap/Model/ItemResolver/Category.php new file mode 100644 index 0000000000000..e95be6519d509 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ItemResolver/Category.php @@ -0,0 +1,72 @@ +categoryFactory = $categoryFactory; + $this->itemFactory = $itemFactory; + $this->configReader = $configReader; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $collection = $this->categoryFactory->create() + ->getCollection($storeId); + + $items = array_map(function ($item) use ($storeId) { + return $this->itemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $this->configReader->getPriority($storeId), + 'changeFrequency' => $this->configReader->getChangeFrequency($storeId), + ]); + }, $collection); + + return $items; + } +} diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php b/app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php new file mode 100644 index 0000000000000..7f6622825dd28 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php @@ -0,0 +1,61 @@ +scopeConfig = $scopeConfig; + } + + /** + * {@inheritdoc} + */ + public function getPriority($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PRIORITY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getChangeFrequency($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_CHANGE_FREQUENCY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } +} diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php b/app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php new file mode 100644 index 0000000000000..f46cf5b310f30 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php @@ -0,0 +1,70 @@ +cmsPageFactory = $cmsPageFactory; + $this->itemFactory = $itemFactory; + $this->configReader = $configReader; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $collection = $this->cmsPageFactory->create()->getCollection($storeId); + $items = array_map(function ($item) use ($storeId) { + return $this->itemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $this->configReader->getPriority($storeId), + 'changeFrequency' => $this->configReader->getChangeFrequency($storeId), + ]); + }, $collection); + + return $items; + } +} diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php b/app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php new file mode 100644 index 0000000000000..6139c9c46b680 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php @@ -0,0 +1,61 @@ +scopeConfig = $scopeConfig; + } + + /** + * {@inheritdoc} + */ + public function getPriority($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PRIORITY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getChangeFrequency($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_CHANGE_FREQUENCY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } +} diff --git a/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/ItemResolver/Composite.php similarity index 70% rename from app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php rename to app/code/Magento/Sitemap/Model/ItemResolver/Composite.php index d5c5a80624126..f60b07e18620a 100644 --- a/app/code/Magento/Sitemap/Model/CompositeSitemapItemResolver.php +++ b/app/code/Magento/Sitemap/Model/ItemResolver/Composite.php @@ -4,22 +4,21 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model; +namespace Magento\Sitemap\Model\ItemResolver; - -class CompositeSitemapItemResolver implements SitemapItemResolverInterface +class Composite implements ItemResolverInterface { /** * Item resolvers * - * @var SitemapItemResolverInterface[] + * @var ItemResolverInterface[] */ private $itemResolvers; /** - * CompositeSitemapItemResolver constructor. + * Composite constructor. * - * @param SitemapItemResolverInterface[] $itemResolvers + * @param ItemResolverInterface[] $itemResolvers */ public function __construct($itemResolvers = []) { diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php b/app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php new file mode 100644 index 0000000000000..49d33bf4f39a7 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php @@ -0,0 +1,31 @@ +productFactory = $productFactory; + $this->itemFactory = $itemFactory; + $this->configReader = $configReader; + } + + /** + * {@inheritdoc} + */ + public function getItems($storeId) + { + $collection = $this->productFactory->create() + ->getCollection($storeId); + + $items = array_map(function ($item) use ($storeId) { + return $this->itemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $this->configReader->getPriority($storeId), + 'changeFrequency' => $this->configReader->getChangeFrequency($storeId), + ]); + }, $collection); + + return $items; + } +} diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php b/app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php new file mode 100644 index 0000000000000..c8a1df24a6f74 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php @@ -0,0 +1,61 @@ +scopeConfig = $scopeConfig; + } + + /** + * {@inheritdoc} + */ + public function getPriority($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PRIORITY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getChangeFrequency($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_CHANGE_FREQUENCY, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } +} diff --git a/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php b/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php deleted file mode 100644 index b11fd3c6aadd9..0000000000000 --- a/app/code/Magento/Sitemap/Model/ProductSitemapItemResolver.php +++ /dev/null @@ -1,108 +0,0 @@ -scopeConfig = $scopeConfig; - $this->productFactory = $productFactory; - $this->itemFactory = $itemFactory; - } - - /** - * {@inheritdoc} - */ - public function getItems($storeId) - { - $collection = $this->productFactory->create()->getCollection($storeId); - $items = array_map(function ($item) use ($storeId) { - return $this->itemFactory->create([ - 'url' => $item->getUrl(), - 'updatedAt' => $item->getUpdatedAt(), - 'images' => $item->getImages(), - 'priority' => $this->getProductPriority($storeId), - 'changeFrequency' => $this->getProductChangeFrequency($storeId), - ]); - }, $collection); - - return $items; - } - - /** - * Get page priority - * - * @param int $storeId - * @return string - */ - private function getProductPriority($storeId) - { - return (string)$this->scopeConfig->getValue( - self::XML_PATH_PRODUCT_PRIORITY, - ScopeInterface::SCOPE_STORE, - $storeId - ); - } - - /** - * Get page change frequency - * - * @param int $storeId - * @return string - */ - private function getProductChangeFrequency($storeId) - { - return (string)$this->scopeConfig->getValue( - self::XML_PATH_PRODUCT_CHANGEFREQ, - ScopeInterface::SCOPE_STORE, - $storeId - ); - } -} diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index cd1c8dc9fbf06..a3f1e85400246 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -10,13 +10,17 @@ use Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot; use Magento\Framework\App\ObjectManager; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\UrlInterface; use Magento\Robots\Model\Config\Value; +use Magento\Sitemap\Model\ItemResolver\ItemResolverInterface; +use Magento\Sitemap\Model\ResourceModel\Sitemap as SitemapResource; /** * Sitemap model * - * @method \Magento\Sitemap\Model\ResourceModel\Sitemap _getResource() - * @method \Magento\Sitemap\Model\ResourceModel\Sitemap getResource() + * @method SitemapResource _getResource() + * @method SitemapResource getResource() * @method string getSitemapType() * @method \Magento\Sitemap\Model\Sitemap setSitemapType(string $value) * @method string getSitemapFilename() @@ -159,10 +163,17 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento /** * Item resolver * - * @var SitemapItemResolverInterface + * @var ItemResolverInterface */ private $itemResolver; + /** + * Sitemap config reader + * + * @var SitemapConfigReaderInterface + */ + private $configReader; + /** * Initialize dependencies. * @@ -182,7 +193,8 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @param DocumentRoot|null $documentRoot - * @param SitemapItemResolverInterface|null $itemResolver + * @param ItemResolverInterface|null $itemResolver + * @param SitemapConfigReaderInterface|null $configReader * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -202,7 +214,8 @@ public function __construct( \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], \Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot $documentRoot = null, - SitemapItemResolverInterface $itemResolver = null + ItemResolverInterface $itemResolver = null, + SitemapConfigReaderInterface $configReader = null ) { $this->_escaper = $escaper; $this->_sitemapData = $sitemapData; @@ -215,7 +228,8 @@ public function __construct( $this->_storeManager = $storeManager; $this->_request = $request; $this->dateTime = $dateTime; - $this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(SitemapItemResolverInterface::class); + $this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(ItemResolverInterface::class); + $this->configReader = $configReader ?: ObjectManager::getInstance()->get(SitemapConfigReaderInterface::class); parent::__construct($context, $registry, $resource, $resourceCollection, $data); } @@ -227,21 +241,21 @@ public function __construct( */ protected function _construct() { - $this->_init(\Magento\Sitemap\Model\ResourceModel\Sitemap::class); + $this->_init(SitemapResource::class); } /** * Get file handler * * @return \Magento\Framework\Filesystem\File\WriteInterface - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _getStream() { if ($this->_stream) { return $this->_stream; } else { - throw new \Magento\Framework\Exception\LocalizedException(__('File handler unreachable')); + throw new LocalizedException(__('File handler unreachable')); } } @@ -278,7 +292,7 @@ protected function _initSitemapItems() * Check sitemap file location and permissions * * @return \Magento\Framework\Model\AbstractModel - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ public function beforeSave() { @@ -288,13 +302,13 @@ public function beforeSave() * Check path is allow */ if ($path && preg_match('#\.\.[\\\/]#', $path)) { - throw new \Magento\Framework\Exception\LocalizedException(__('Please define a correct path.')); + throw new LocalizedException(__('Please define a correct path.')); } /** * Check exists and writable path */ if (!$this->_directory->isExist($path)) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __( 'Please create the specified folder "%1" before saving the sitemap.', $this->_escaper->escapeHtml($this->getSitemapPath()) @@ -303,7 +317,7 @@ public function beforeSave() } if (!$this->_directory->isWritable($path)) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('Please make sure that "%1" is writable by the web-server.', $this->getSitemapPath()) ); } @@ -311,7 +325,7 @@ public function beforeSave() * Check allow filename */ if (!preg_match('#^[a-zA-Z0-9_\.]+$#', $this->getSitemapFilename())) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __( 'Please use only letters (a-z or A-Z), numbers (0-9) or underscores (_) in the filename. No spaces or other characters are allowed.' ) @@ -418,14 +432,12 @@ protected function _getCurrentDateTime() */ protected function _isSplitRequired($row) { - /** @var $helper \Magento\Sitemap\Helper\Data */ - $helper = $this->_sitemapData; $storeId = $this->getStoreId(); - if ($this->_lineCount + 1 > $helper->getMaximumLinesNumber($storeId)) { + if ($this->_lineCount + 1 > $this->configReader->getMaximumLinesNumber($storeId)) { return true; } - if ($this->_fileSize + strlen($row) > $helper->getMaximumFileSize($storeId)) { + if ($this->_fileSize + strlen($row) > $this->configReader->getMaximumFileSize($storeId)) { return true; } @@ -505,7 +517,7 @@ protected function _getSitemapIndexRow($sitemapFilename, $lastmod = null) * @param null|string $fileName * @param string $type * @return void - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _createSitemap($fileName = null, $type = self::TYPE_URL) { @@ -578,7 +590,7 @@ protected function _getBaseDir() * @param string $type * @return string */ - protected function _getStoreBaseUrl($type = \Magento\Framework\UrlInterface::URL_TYPE_LINK) + protected function _getStoreBaseUrl($type = UrlInterface::URL_TYPE_LINK) { /** @var \Magento\Store\Model\Store $store */ $store = $this->_storeManager->getStore($this->getStoreId()); @@ -593,7 +605,7 @@ protected function _getStoreBaseUrl($type = \Magento\Framework\UrlInterface::URL * @param string $type * @return string */ - protected function _getUrl($url, $type = \Magento\Framework\UrlInterface::URL_TYPE_LINK) + protected function _getUrl($url, $type = UrlInterface::URL_TYPE_LINK) { return $this->_getStoreBaseUrl($type) . ltrim($url, '/'); } @@ -608,7 +620,7 @@ protected function _getUrl($url, $type = \Magento\Framework\UrlInterface::URL_TY */ protected function _getMediaUrl($url) { - return $this->_getUrl($url, \Magento\Framework\UrlInterface::URL_TYPE_MEDIA); + return $this->_getUrl($url, UrlInterface::URL_TYPE_MEDIA); } /** @@ -651,7 +663,7 @@ protected function _getStoreBaseDomain() $storeDomain = rtrim($url . '/' . $installationFolder, '/'); } else { //case when documentRoot contains symlink to basedir - $url = $this->_getStoreBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB); + $url = $this->_getStoreBaseUrl(UrlInterface::URL_TYPE_WEB); $storeDomain = rtrim($url, '/'); } @@ -679,10 +691,8 @@ public function getSitemapUrl($sitemapPath, $sitemapFileName) */ protected function _isEnabledSubmissionRobots() { - /** @var $helper \Magento\Sitemap\Helper\Data */ - $helper = $this->_sitemapData; $storeId = $this->getStoreId(); - return (bool)$helper->getEnableSubmissionRobots($storeId); + return (bool)$this->configReader->getEnableSubmissionRobots($storeId); } /** diff --git a/app/code/Magento/Sitemap/Model/SitemapConfigReader.php b/app/code/Magento/Sitemap/Model/SitemapConfigReader.php new file mode 100644 index 0000000000000..201e80d281ca3 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/SitemapConfigReader.php @@ -0,0 +1,116 @@ +scopeConfig = $scopeConfig; + } + + /** + * {@inheritdoc} + */ + public function getEnableSubmissionRobots($storeId) + { + return $this->scopeConfig->getValue( + self::XML_PATH_SUBMISSION_ROBOTS, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getMaximumFileSize($storeId) + { + return $this->scopeConfig->getValue( + self::XML_PATH_MAX_FILE_SIZE, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getMaximumLinesNumber($storeId) + { + return $this->scopeConfig->getValue( + self::XML_PATH_MAX_LINES, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getProductImageIncludePolicy($storeId) + { + return (string)$this->scopeConfig->getValue( + self::XML_PATH_PRODUCT_IMAGES_INCLUDE, + ScopeInterface::SCOPE_STORE, + $storeId + ); + } + + /** + * {@inheritdoc} + */ + public function getValidPaths() + { + return array_merge( + $this->scopeConfig->getValue(self::XML_PATH_SITEMAP_VALID_PATHS, ScopeInterface::SCOPE_STORE), + $this->scopeConfig->getValue(self::XML_PATH_PUBLIC_FILES_VALID_PATHS, ScopeInterface::SCOPE_STORE) + ); + } +} diff --git a/app/code/Magento/Sitemap/Model/SitemapConfigReaderInterface.php b/app/code/Magento/Sitemap/Model/SitemapConfigReaderInterface.php new file mode 100644 index 0000000000000..f094b8856ab14 --- /dev/null +++ b/app/code/Magento/Sitemap/Model/SitemapConfigReaderInterface.php @@ -0,0 +1,54 @@ +getConstructArguments($className); - /** @var \Magento\Framework\App\Helper\Context $context */ - $context = $arguments['context']; - $this->scopeConfig = $context->getScopeConfig(); - $this->data = $objectManagerHelper->getObject($className, $arguments); - } - - public function testGetValidPaths() - { - $this->scopeConfig->expects($this->any())->method('getValue')->will($this->returnValueMap( - [ - [Data::XML_PATH_SITEMAP_VALID_PATHS, ScopeInterface::SCOPE_STORE, null, ['path1']], - [Data::XML_PATH_PUBLIC_FILES_VALID_PATHS, ScopeInterface::SCOPE_STORE, null, ['path2']], - ] - )); - - $this->assertEquals(['path1', 'path2'], $this->data->getValidPaths()); - } -} diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CategoryTest.php similarity index 64% rename from app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CategoryTest.php index 6bcea418acf68..0d46f6b75e6c7 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CategorySitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CategoryTest.php @@ -4,30 +4,28 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model; +namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; -use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\Sitemap\Model\CategorySitemapItemResolver; -use Magento\Sitemap\Model\ResourceModel\Catalog\Category; +use Magento\Sitemap\Model\ItemResolver\Category as CategoryItemResolver; +use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; +use Magento\Sitemap\Model\ResourceModel\Catalog\Category as CategoryResource; +use Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory; use Magento\Sitemap\Model\SitemapItem; use Magento\Sitemap\Model\SitemapItemInterfaceFactory; -use Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory; -class CategorySitemapItemResolverTest extends \PHPUnit_Framework_TestCase +class CategoryTest extends \PHPUnit_Framework_TestCase { public function testGetItemsEmpty() { - $storeConfigMock = $this->getStoreConfigMock([ - CategorySitemapItemResolver::XML_PATH_CATEGORY_CHANGEFREQ => 'daily', - CategorySitemapItemResolver::XML_PATH_CATEGORY_PRIORITY => '1.0', - ]); - + $configReaderMock = $this->getConfigReaderMock(); $categoryMock = $this->getCategoryCollectionMock([]); - $cmsPageFactoryMock = $this->getCategoryFactoryMock($categoryMock); + $categoryFactoryMock = $this->getCategoryFactoryMock($categoryMock); $itemFactoryMock = $this->getItemFactoryMock(); - $resolver = new CategorySitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $resolver = new CategoryItemResolver($configReaderMock, $categoryFactoryMock, $itemFactoryMock); + $this->assertSame([], $resolver->getItems(1)); } @@ -37,18 +35,14 @@ public function testGetItemsEmpty() */ public function testGetItems(array $categories) { - $storeConfigMock = $this->getStoreConfigMock([ - CategorySitemapItemResolver::XML_PATH_CATEGORY_CHANGEFREQ => 'daily', - CategorySitemapItemResolver::XML_PATH_CATEGORY_PRIORITY => '1.0', - ]); - + $configReaderMock = $this->getConfigReaderMock(); $categoryMock = $this->getCategoryCollectionMock($categories); - - $cmsPageFactoryMock = $this->getCategoryFactoryMock($categoryMock); + $categoryFactoryMock = $this->getCategoryFactoryMock($categoryMock); $itemFactoryMock = $this->getItemFactoryMock(); - $resolver = new CategorySitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $resolver = new CategoryItemResolver($configReaderMock, $categoryFactoryMock, $itemFactoryMock); $items = $resolver->getItems(1); + $this->assertTrue(count($items) == count($categories)); foreach ($categories as $index => $category) { $this->assertSame($category->getUpdatedAt(), $items[$index]->getUpdatedAt()); @@ -67,10 +61,10 @@ public function categoryProvider() return [ [ [ - new \Magento\Framework\DataObject( + new DataObject( ['url' => 'category.html', 'updated_at' => '2012-12-21 00:00:00'] ), - new \Magento\Framework\DataObject( + new DataObject( ['url' => '/category/sub-category.html', 'updated_at' => '2012-12-21 00:00:00'] ), ] @@ -89,7 +83,7 @@ private function getCategoryFactoryMock($returnValue) ->disableOriginalConstructor() ->getMock(); - $cmsPageFactoryMock->expects(self::any()) + $cmsPageFactoryMock->expects($this->any()) ->method('create') ->willReturn($returnValue); @@ -106,7 +100,7 @@ private function getItemFactoryMock() ->disableOriginalConstructor() ->getMock(); - $itemFactoryMock->expects(self::any()) + $itemFactoryMock->expects($this->any()) ->method('create') ->willReturnCallback(function ($data) { $helper = new ObjectManager($this); @@ -118,18 +112,19 @@ private function getItemFactoryMock() } /** - * @param array $pathMap * @return \PHPUnit_Framework_MockObject_MockObject */ - private function getStoreConfigMock(array $pathMap = []) + private function getConfigReaderMock() { - $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); - $scopeConfigMock->method('getValue') - ->willReturnCallback(function ($path) use ($pathMap) { - return isset($pathMap[$path]) ? $pathMap[$path] : null; - }); - - return $scopeConfigMock; + $configReaderMock = $this->getMockForAbstractClass(ConfigReaderInterface::class); + $configReaderMock->expects($this->any()) + ->method('getPriority') + ->willReturn('1.0'); + $configReaderMock->expects($this->any()) + ->method('getChangeFrequency') + ->willReturn('daily'); + + return $configReaderMock; } /** @@ -138,12 +133,12 @@ private function getStoreConfigMock(array $pathMap = []) */ private function getCategoryCollectionMock($returnValue) { - $sitemapCmsPageMock = $this->getMockBuilder(Category::class) + $sitemapCmsPageMock = $this->getMockBuilder(CategoryResource::class) ->setMethods(['getCollection']) ->disableOriginalConstructor() ->getMock(); - $sitemapCmsPageMock->expects(self::any()) + $sitemapCmsPageMock->expects($this->any()) ->method('getCollection') ->willReturn($returnValue); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php similarity index 72% rename from app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php index c046a34ea5737..9cefe19280b2c 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CmsPageSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php @@ -6,29 +6,26 @@ namespace Magento\Sitemap\Test\Unit\Model; -use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\DataObject; -use Magento\Sitemap\Model\CmsPageSitemapItemResolver; -use Magento\Sitemap\Model\ResourceModel\Cms\Page; -use Magento\Sitemap\Model\ResourceModel\Cms\PageFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Sitemap\Model\ItemResolver\CmsPage as CmsPageItemResolver; +use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; +use Magento\Sitemap\Model\ResourceModel\Cms\Page as CmsPageResource; +use Magento\Sitemap\Model\ResourceModel\Cms\PageFactory; use Magento\Sitemap\Model\SitemapItem; use Magento\Sitemap\Model\SitemapItemInterfaceFactory; -class CmsPageSitemapItemResolverTest extends \PHPUnit_Framework_TestCase +class CmsPageTest extends \PHPUnit_Framework_TestCase { public function testGetItemsEmpty() { - $storeConfigMock = $this->getStoreConfigMock([ - CmsPageSitemapItemResolver::XML_PATH_PAGE_CHANGEFREQ => 'daily', - CmsPageSitemapItemResolver::XML_PATH_PAGE_PRIORITY => '1.0', - ]); - + $configReaderMock = $this->getConfigReaderMock(); $cmsPageMock = $this->getCmsPageCollectionMock([]); $cmsPageFactoryMock = $this->getCmsPageFactoryMock($cmsPageMock); $itemFactoryMock = $this->getItemFactoryMock(); - $resolver = new CmsPageSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $resolver = new CmsPageItemResolver($configReaderMock, $cmsPageFactoryMock, $itemFactoryMock); + $this->assertSame([], $resolver->getItems(1)); } @@ -38,18 +35,14 @@ public function testGetItemsEmpty() */ public function testGetItems(array $pages = []) { - $storeConfigMock = $this->getStoreConfigMock([ - CmsPageSitemapItemResolver::XML_PATH_PAGE_CHANGEFREQ => 'daily', - CmsPageSitemapItemResolver::XML_PATH_PAGE_PRIORITY => '1.0', - ]); - + $configReaderMock = $this->getConfigReaderMock(); $cmsPageMock = $this->getCmsPageCollectionMock($pages); - $cmsPageFactoryMock = $this->getCmsPageFactoryMock($cmsPageMock); $itemFactoryMock = $this->getItemFactoryMock(); - $resolver = new CmsPageSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $resolver = new CmsPageItemResolver($configReaderMock, $cmsPageFactoryMock, $itemFactoryMock); $items = $resolver->getItems(1); + $this->assertTrue(count($items) == count($pages)); foreach ($pages as $index => $page) { $this->assertSame($page->getUpdatedAt(), $items[$index]->getUpdatedAt()); @@ -118,18 +111,19 @@ private function getCmsPageFactoryMock($returnValue) } /** - * @param array $pathMap * @return \PHPUnit_Framework_MockObject_MockObject */ - private function getStoreConfigMock(array $pathMap = []) + private function getConfigReaderMock() { - $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); - $scopeConfigMock->method('getValue') - ->willReturnCallback(function ($path) use ($pathMap) { - return isset($pathMap[$path]) ? $pathMap[$path] : null; - }); - - return $scopeConfigMock; + $configReaderMock = $this->getMockForAbstractClass(ConfigReaderInterface::class); + $configReaderMock->expects($this->any()) + ->method('getPriority') + ->willReturn('1.0'); + $configReaderMock->expects($this->any()) + ->method('getChangeFrequency') + ->willReturn('daily'); + + return $configReaderMock; } /** @@ -138,7 +132,7 @@ private function getStoreConfigMock(array $pathMap = []) */ private function getCmsPageCollectionMock($returnValue) { - $sitemapCmsPageMock = $this->getMockBuilder(Page::class) + $sitemapCmsPageMock = $this->getMockBuilder(CmsPageResource::class) ->setMethods(['getCollection']) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CompositeTest.php similarity index 78% rename from app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CompositeTest.php index 4072400608611..58438b6606ae0 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/CompositeSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CompositeTest.php @@ -4,17 +4,17 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model; +namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; -use Magento\Sitemap\Model\CompositeSitemapItemResolver; +use Magento\Sitemap\Model\ItemResolver\Composite as CompositeItemResolver; +use Magento\Sitemap\Model\ItemResolver\ItemResolverInterface; use Magento\Sitemap\Model\SitemapItemInterface; -use Magento\Sitemap\Model\SitemapItemResolverInterface; -class CompositeSitemapItemResolverTest extends \PHPUnit_Framework_TestCase +class CompositeTest extends \PHPUnit_Framework_TestCase { public function testNoResolvers() { - $resolver = new CompositeSitemapItemResolver(); + $resolver = new CompositeItemResolver(); $this->assertSame([], $resolver->getItems(1)); } @@ -28,7 +28,7 @@ public function testGetItems($itemResolverData, $expectedItems) $mockResolvers = []; foreach ($itemResolverData as $data) { - $mockResolver = $this->getMockForAbstractClass(SitemapItemResolverInterface::class); + $mockResolver = $this->getMockForAbstractClass(ItemResolverInterface::class); $mockResolver->expects(self::once()) ->method('getItems') ->willReturn($data); @@ -36,7 +36,7 @@ public function testGetItems($itemResolverData, $expectedItems) $mockResolvers[] = $mockResolver; } - $resolver = new CompositeSitemapItemResolver($mockResolvers); + $resolver = new CompositeItemResolver($mockResolvers); $items = $resolver->getItems(1); $this->assertSame($expectedItems, $items); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php similarity index 72% rename from app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php index 190553a51784c..9fd1620230182 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ProductSitemapItemResolverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php @@ -6,29 +6,26 @@ namespace Magento\Sitemap\Test\Unit\Model; -use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\Sitemap\Model\ProductSitemapItemResolver; -use Magento\Sitemap\Model\ResourceModel\Catalog\Product; +use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; +use Magento\Sitemap\Model\ItemResolver\Product as ProductItemResolver; +use Magento\Sitemap\Model\ResourceModel\Catalog\Product as ProductResource; +use Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory; use Magento\Sitemap\Model\SitemapItem; use Magento\Sitemap\Model\SitemapItemInterfaceFactory; -use Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory; -class ProductSitemapItemResolverTest extends \PHPUnit_Framework_TestCase +class ProductTest extends \PHPUnit_Framework_TestCase { public function testGetItemsEmpty() { - $storeConfigMock = $this->getStoreConfigMock([ - ProductSitemapItemResolver::XML_PATH_PRODUCT_CHANGEFREQ => 'daily', - ProductSitemapItemResolver::XML_PATH_PRODUCT_PRIORITY => '1.0', - ]); - + $configReaderMock = $this->getConfigReaderMock(); $productMock = $this->getProductCollectionMock([]); - $cmsPageFactoryMock = $this->getProductFactoryMock($productMock); + $productFactoryMock = $this->getProductFactoryMock($productMock); $itemFactoryMock = $this->getItemFactoryMock(); - $resolver = new ProductSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $resolver = new ProductItemResolver($configReaderMock, $productFactoryMock, $itemFactoryMock); + self::assertSame([], $resolver->getItems(1)); } @@ -38,18 +35,14 @@ public function testGetItemsEmpty() */ public function testGetItems(array $products) { - $storeConfigMock = $this->getStoreConfigMock([ - ProductSitemapItemResolver::XML_PATH_PRODUCT_CHANGEFREQ => 'daily', - ProductSitemapItemResolver::XML_PATH_PRODUCT_PRIORITY => '1.0', - ]); - + $configReaderMock = $this->getConfigReaderMock(); $productMock = $this->getProductCollectionMock($products); - - $cmsPageFactoryMock = $this->getProductFactoryMock($productMock); + $productFactoryMock = $this->getProductFactoryMock($productMock); $itemFactoryMock = $this->getItemFactoryMock(); - $resolver = new ProductSitemapItemResolver($storeConfigMock, $cmsPageFactoryMock, $itemFactoryMock); + $resolver = new ProductItemResolver($configReaderMock, $productFactoryMock, $itemFactoryMock); $items = $resolver->getItems(1); + self::assertTrue(count($items) == count($products)); foreach ($products as $index => $product) { self::assertSame($product->getUpdatedAt(), $items[$index]->getUpdatedAt()); @@ -81,15 +74,15 @@ public function productProvider() 'collection' => [ new DataObject( [ - 'url' => $storeBaseMediaUrl.'i/m/image1.png', + 'url' => $storeBaseMediaUrl . 'i/m/image1.png', 'caption' => 'caption & > title < "' ] ), new DataObject( - ['url' => $storeBaseMediaUrl.'i/m/image_no_caption.png', 'caption' => null] + ['url' => $storeBaseMediaUrl . 'i/m/image_no_caption.png', 'caption' => null] ), ], - 'thumbnail' => $storeBaseMediaUrl.'t/h/thumbnail.jpg', + 'thumbnail' => $storeBaseMediaUrl . 't/h/thumbnail.jpg', 'title' => 'Product & > title < "', ] ), @@ -111,7 +104,7 @@ private function getProductFactoryMock($returnValue) ->disableOriginalConstructor() ->getMock(); - $cmsPageFactoryMock->expects(self::any()) + $cmsPageFactoryMock->expects($this->any()) ->method('create') ->willReturn($returnValue); @@ -128,7 +121,7 @@ private function getItemFactoryMock() ->disableOriginalConstructor() ->getMock(); - $itemFactoryMock->expects(self::any()) + $itemFactoryMock->expects($this->any()) ->method('create') ->willReturnCallback(function ($data) { $helper = new ObjectManager($this); @@ -140,18 +133,19 @@ private function getItemFactoryMock() } /** - * @param array $pathMap * @return \PHPUnit_Framework_MockObject_MockObject */ - private function getStoreConfigMock(array $pathMap = []) + private function getConfigReaderMock() { - $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); - $scopeConfigMock->method('getValue') - ->willReturnCallback(function ($path) use ($pathMap) { - return isset($pathMap[$path]) ? $pathMap[$path] : null; - }); - - return $scopeConfigMock; + $configReaderMock = $this->getMockForAbstractClass(ConfigReaderInterface::class); + $configReaderMock->expects($this->any()) + ->method('getPriority') + ->willReturn('1.0'); + $configReaderMock->expects($this->any()) + ->method('getChangeFrequency') + ->willReturn('daily'); + + return $configReaderMock; } /** @@ -160,12 +154,12 @@ private function getStoreConfigMock(array $pathMap = []) */ private function getProductCollectionMock($returnValue) { - $sitemapCmsPageMock = $this->getMockBuilder(Product::class) + $sitemapCmsPageMock = $this->getMockBuilder(ProductResource::class) ->setMethods(['getCollection']) ->disableOriginalConstructor() ->getMock(); - $sitemapCmsPageMock->expects(self::any()) + $sitemapCmsPageMock->expects($this->any()) ->method('getCollection') ->willReturn($returnValue); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapConfigReaderTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapConfigReaderTest.php new file mode 100644 index 0000000000000..5aac0ef9b6d76 --- /dev/null +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapConfigReaderTest.php @@ -0,0 +1,39 @@ +getScopeConfigMock(); + + $configReader = new SitemapConfigReader($scopeConfigMock); + + $this->assertEquals(['path1', 'path2'], $configReader->getValidPaths()); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getScopeConfigMock(): \PHPUnit_Framework_MockObject_MockObject + { + $scopeConfigMock = $this->getMockForAbstractClass(ScopeConfigInterface::class); + $scopeConfigMock->expects($this->any()) + ->method('getValue') + ->willReturnMap([ + [SitemapConfigReader::XML_PATH_SITEMAP_VALID_PATHS, ScopeInterface::SCOPE_STORE, null, ['path1']], + [SitemapConfigReader::XML_PATH_PUBLIC_FILES_VALID_PATHS, ScopeInterface::SCOPE_STORE, null, ['path2']], + ]); + + return $scopeConfigMock; + } +} diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index 35b3523ce119b..8b137e6fc1546 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -11,6 +11,8 @@ use Magento\Framework\Filesystem\File\Write; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Sitemap\Helper\Data; +use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; +use Magento\Sitemap\Model\ItemResolver\ItemResolverInterface; use Magento\Sitemap\Model\ResourceModel\Catalog\Category; use Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory; use Magento\Sitemap\Model\ResourceModel\Catalog\Product; @@ -19,8 +21,8 @@ use Magento\Sitemap\Model\ResourceModel\Cms\PageFactory; use Magento\Sitemap\Model\ResourceModel\Sitemap as SitemapResource; use Magento\Sitemap\Model\Sitemap; +use Magento\Sitemap\Model\SitemapConfigReaderInterface; use Magento\Sitemap\Model\SitemapItem; -use Magento\Sitemap\Model\SitemapItemResolverInterface; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManagerInterface; @@ -32,42 +34,42 @@ class SitemapTest extends \PHPUnit_Framework_TestCase /** * @var Data */ - protected $_helperMockSitemap; + private $helperMockSitemap; /** * @var SitemapResource */ - protected $_resourceMock; + private $resourceMock; /** * @var Category */ - protected $_sitemapCategoryMock; + private $sitemapCategoryMock; /** * @var Product */ - protected $_sitemapProductMock; + private $sitemapProductMock; /** * @var Page */ - protected $_sitemapCmsPageMock; + private $sitemapCmsPageMock; /** * @var Filesystem */ - protected $_filesystemMock; + private $filesystemMock; /** * @var DirectoryWrite */ - protected $_directoryMock; + private $directoryMock; /** * @var Write */ - protected $_fileMock; + private $fileMock; /** * @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject @@ -75,42 +77,35 @@ class SitemapTest extends \PHPUnit_Framework_TestCase private $storeManagerMock; /** - * @var \Magento\Sitemap\Model\SitemapItemResolverInterface + * @var ItemResolverInterface|\PHPUnit_Framework_MockObject_MockObject */ private $itemResolverMock; + /** + * @var ConfigReaderInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $configReaderMock; + /** * Set helper mocks, create resource model mock */ protected function setUp() { - $this->_sitemapCategoryMock = $this->getMockBuilder(Category::class) + $this->sitemapCategoryMock = $this->getMockBuilder(Category::class) ->disableOriginalConstructor() ->getMock(); - $this->_sitemapProductMock = $this->getMockBuilder(Product::class) + $this->sitemapProductMock = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); - $this->_sitemapCmsPageMock = $this->getMockBuilder(Page::class) + $this->sitemapCmsPageMock = $this->getMockBuilder(Page::class) ->disableOriginalConstructor() ->getMock(); - $this->_helperMockSitemap = $this->getMockBuilder(Data::class) - ->setMethods( - [ - 'getCategoryChangefreq', - 'getProductChangefreq', - 'getPageChangefreq', - 'getCategoryPriority', - 'getProductPriority', - 'getPagePriority', - 'getMaximumLinesNumber', - 'getMaximumFileSize', - 'getEnableSubmissionRobots', - ]) + $this->helperMockSitemap = $this->getMockBuilder(Data::class) ->disableOriginalConstructor() ->getMock(); - $this->_resourceMock = $this->getMockBuilder(SitemapResource::class) + $this->resourceMock = $this->getMockBuilder(SitemapResource::class) ->setMethods( [ '_construct', @@ -124,32 +119,34 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); - $this->_resourceMock->expects($this->any()) + $this->resourceMock->expects($this->any()) ->method('addCommitCallback') ->willReturnSelf(); - $this->_fileMock = $this->getMockBuilder(Write::class) + $this->fileMock = $this->getMockBuilder(Write::class) ->disableOriginalConstructor() ->getMock(); - $this->_directoryMock = $this->getMockBuilder(DirectoryWrite::class) + $this->directoryMock = $this->getMockBuilder(DirectoryWrite::class) ->disableOriginalConstructor() ->getMock(); - $this->_directoryMock->expects($this->any()) + $this->directoryMock->expects($this->any()) ->method('openFile') - ->willReturn($this->_fileMock); + ->willReturn($this->fileMock); - $this->_filesystemMock = $this->getMockBuilder(Filesystem::class) + $this->filesystemMock = $this->getMockBuilder(Filesystem::class) ->setMethods(['getDirectoryWrite']) ->disableOriginalConstructor() ->getMock(); - $this->_filesystemMock->expects($this->any()) + $this->filesystemMock->expects($this->any()) ->method('getDirectoryWrite') - ->willReturn($this->_directoryMock); + ->willReturn($this->directoryMock); - $this->itemResolverMock = $this->getMockForAbstractClass(SitemapItemResolverInterface::class); + $this->configReaderMock = $this->getMockForAbstractClass(SitemapConfigReaderInterface::class); + + $this->itemResolverMock = $this->getMockForAbstractClass(ItemResolverInterface::class); } /** @@ -160,7 +157,7 @@ protected function setUp() */ public function testNotAllowedPath() { - $model = $this->_getModelMock(); + $model = $this->getModelMock(); $model->setSitemapPath('../'); $model->beforeSave(); } @@ -173,11 +170,11 @@ public function testNotAllowedPath() */ public function testPathNotExists() { - $this->_directoryMock->expects($this->once()) + $this->directoryMock->expects($this->once()) ->method('isExist') ->willReturn(false); - $model = $this->_getModelMock(); + $model = $this->getModelMock(); $model->beforeSave(); } @@ -189,15 +186,15 @@ public function testPathNotExists() */ public function testPathNotWritable() { - $this->_directoryMock->expects($this->once()) + $this->directoryMock->expects($this->once()) ->method('isExist') ->willReturn(true); - $this->_directoryMock->expects($this->once()) + $this->directoryMock->expects($this->once()) ->method('isWritable') ->willReturn(false); - $model = $this->_getModelMock(); + $model = $this->getModelMock(); $model->beforeSave(); } @@ -212,15 +209,15 @@ public function testPathNotWritable() //@codingStandardsIgnoreEnd public function testFilenameInvalidChars() { - $this->_directoryMock->expects($this->once()) + $this->directoryMock->expects($this->once()) ->method('isExist') ->willReturn(true); - $this->_directoryMock->expects($this->once()) + $this->directoryMock->expects($this->once()) ->method('isWritable') ->willReturn(true); - $model = $this->_getModelMock(); + $model = $this->getModelMock(); $model->setSitemapFilename('*sitemap?.xml'); $model->beforeSave(); } @@ -266,7 +263,7 @@ public static function sitemapDataProvider() public function testGenerateXml($maxLines, $maxFileSize, $expectedFile, $expectedWrites) { $actualData = []; - $model = $this->_prepareSitemapModelMock( + $model = $this->prepareSitemapModelMock( $actualData, $maxLines, $maxFileSize, @@ -373,7 +370,7 @@ public static function robotsDataProvider() public function testAddSitemapToRobotsTxt($maxLines, $maxFileSize, $expectedFile, $expectedWrites, $robotsInfo) { $actualData = []; - $model = $this->_prepareSitemapModelMock( + $model = $this->prepareSitemapModelMock( $actualData, $maxLines, $maxFileSize, @@ -396,7 +393,7 @@ public function testAddSitemapToRobotsTxt($maxLines, $maxFileSize, $expectedFile * @return Sitemap|PHPUnit_Framework_MockObject_MockObject * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - protected function _prepareSitemapModelMock( + protected function prepareSitemapModelMock( &$actualData, $maxLines, $maxFileSize, @@ -415,30 +412,29 @@ protected function _prepareSitemapModelMock( }; // Check that all expected lines were written - $this->_fileMock->expects($this->exactly($expectedWrites)) + $this->fileMock->expects($this->exactly($expectedWrites)) ->method('write') ->willReturnCallback($streamWriteCallback); // Check that all expected file descriptors were created - $this->_directoryMock->expects($this->exactly(count($expectedFile))) + $this->directoryMock->expects($this->exactly(count($expectedFile))) ->method('openFile') ->willReturnCallback(function ($file) use (&$currentFile) { - $currentFile = $file; - } + $currentFile = $file; + } ); // Check that all file descriptors were closed - $this->_fileMock->expects($this->exactly(count($expectedFile))) + $this->fileMock->expects($this->exactly(count($expectedFile))) ->method('close'); if (count($expectedFile) == 1) { - $this->_directoryMock->expects($this->once()) + $this->directoryMock->expects($this->once()) ->method('renameFile') ->willReturnCallback(function ($from, $to) { - \PHPUnit_Framework_Assert::assertEquals('/sitemap-1-1.xml', $from); - \PHPUnit_Framework_Assert::assertEquals('/sitemap.xml', $to); - } - ); + \PHPUnit_Framework_Assert::assertEquals('/sitemap-1-1.xml', $from); + \PHPUnit_Framework_Assert::assertEquals('/sitemap.xml', $to); + }); } // Check robots txt @@ -450,11 +446,11 @@ protected function _prepareSitemapModelMock( if (isset($robotsInfo['robotsFinish'])) { $robotsFinish = $robotsInfo['robotsFinish']; } - $this->_directoryMock->expects($this->any()) + $this->directoryMock->expects($this->any()) ->method('readFile') ->willReturn($robotsStart); - $this->_directoryMock->expects($this->any()) + $this->directoryMock->expects($this->any()) ->method('write') ->with( $this->equalTo('robots.txt'), @@ -466,19 +462,19 @@ protected function _prepareSitemapModelMock( if (isset($robotsInfo['pushToRobots'])) { $pushToRobots = (int)$robotsInfo['pushToRobots']; } - $this->_helperMockSitemap->expects($this->any()) + $this->configReaderMock->expects($this->any()) ->method('getMaximumLinesNumber') ->willReturn($maxLines); - $this->_helperMockSitemap->expects($this->any()) + $this->configReaderMock->expects($this->any()) ->method('getMaximumFileSize') ->willReturn($maxFileSize); - $this->_helperMockSitemap->expects($this->any()) + $this->configReaderMock->expects($this->any()) ->method('getEnableSubmissionRobots') ->willReturn($pushToRobots); - $model = $this->_getModelMock(true); + $model = $this->getModelMock(true); $storeMock = $this->getMockBuilder(Store::class) ->setMethods(['isFrontUrlSecure', 'getBaseUrl']) @@ -508,7 +504,7 @@ protected function _prepareSitemapModelMock( * @param bool $mockBeforeSave * @return Sitemap|PHPUnit_Framework_MockObject_MockObject */ - protected function _getModelMock($mockBeforeSave = false) + protected function getModelMock($mockBeforeSave = false) { $methods = [ '_construct', @@ -543,15 +539,15 @@ protected function _getModelMock($mockBeforeSave = false) 'collection' => [ new DataObject( [ - 'url' => $storeBaseMediaUrl.'i/m/image1.png', + 'url' => $storeBaseMediaUrl . 'i/m/image1.png', 'caption' => 'caption & > title < "' ] ), new DataObject( - ['url' => $storeBaseMediaUrl.'i/m/image_no_caption.png', 'caption' => null] + ['url' => $storeBaseMediaUrl . 'i/m/image_no_caption.png', 'caption' => null] ), ], - 'thumbnail' => $storeBaseMediaUrl.'t/h/thumbnail.jpg', + 'thumbnail' => $storeBaseMediaUrl . 't/h/thumbnail.jpg', 'title' => 'Product & > title < "', ]) ) @@ -560,12 +556,12 @@ protected function _getModelMock($mockBeforeSave = false) /** @var $model Sitemap */ $model = $this->getMockBuilder(Sitemap::class) ->setMethods($methods) - ->setConstructorArgs($this->_getModelConstructorArgs()) + ->setConstructorArgs($this->getModelConstructorArgs()) ->getMock(); $model->expects($this->any()) ->method('_getResource') - ->willReturn($this->_resourceMock); + ->willReturn($this->resourceMock); $model->expects($this->any()) ->method('_getCurrentDateTime') @@ -585,7 +581,7 @@ protected function _getModelMock($mockBeforeSave = false) /** * @return array */ - protected function _getModelConstructorArgs() + private function getModelConstructorArgs() { $categoryFactory = $this->getMockBuilder(CategoryFactory::class) ->disableOriginalConstructor() @@ -611,9 +607,10 @@ protected function _getModelConstructorArgs() 'productFactory' => $productFactory, 'cmsFactory' => $cmsFactory, 'storeManager' => $this->storeManagerMock, - 'sitemapData' => $this->_helperMockSitemap, - 'filesystem' => $this->_filesystemMock, + 'sitemapData' => $this->helperMockSitemap, + 'filesystem' => $this->filesystemMock, 'itemResolver' => $this->itemResolverMock, + 'configReader' => $this->configReaderMock, ] ); $constructArguments['resource'] = null; @@ -643,7 +640,7 @@ public function testGetSitemapUrl($storeBaseUrl, $documentRoot, $baseDir, $sitem '_construct', ] ) - ->setConstructorArgs($this->_getModelConstructorArgs()) + ->setConstructorArgs($this->getModelConstructorArgs()) ->getMock(); $model->expects($this->any()) diff --git a/app/code/Magento/Sitemap/etc/di.xml b/app/code/Magento/Sitemap/etc/di.xml index 217c65dc61973..e8200bbc9e50c 100644 --- a/app/code/Magento/Sitemap/etc/di.xml +++ b/app/code/Magento/Sitemap/etc/di.xml @@ -7,7 +7,9 @@ --> - + + + Magento\Sitemap\Model\ResourceModel\Sitemap @@ -20,13 +22,28 @@ - + - Magento\Sitemap\Model\CategorySitemapItemResolver - Magento\Sitemap\Model\CmsPageSitemapItemResolver - Magento\Sitemap\Model\ProductSitemapItemResolver + Magento\Sitemap\Model\ItemResolver\Category + Magento\Sitemap\Model\ItemResolver\CmsPage + Magento\Sitemap\Model\ItemResolver\Product + + + Magento\Sitemap\Model\ItemResolver\CategoryConfigReader + + + + + Magento\Sitemap\Model\ItemResolver\ProductConfigReader + + + + + Magento\Sitemap\Model\ItemResolver\CmsPageConfigReader + + diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Helper/DataTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Helper/DataTest.php deleted file mode 100644 index 0acfe0bd1ef82..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Sitemap/Helper/DataTest.php +++ /dev/null @@ -1,138 +0,0 @@ -_helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( - \Magento\Sitemap\Helper\Data::class - ); - } - - /** - * @magentoConfigFixture default_store sitemap/limit/max_lines 10 - */ - public function testGetMaximumLinesNumber() - { - $this->assertEquals( - 50000, - $this->_helper->getMaximumLinesNumber(\Magento\Store\Model\Store::DEFAULT_STORE_ID) - ); - $this->assertEquals(10, $this->_helper->getMaximumLinesNumber(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/limit/max_file_size 1024 - */ - public function testGetMaximumFileSize() - { - $this->assertEquals( - 10485760, - $this->_helper->getMaximumFileSize(\Magento\Store\Model\Store::DEFAULT_STORE_ID) - ); - $this->assertEquals(1024, $this->_helper->getMaximumFileSize(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/category/changefreq montly - */ - public function testGetCategoryChangefreq() - { - $this->assertEquals( - 'daily', - $this->_helper->getCategoryChangefreq(\Magento\Store\Model\Store::DEFAULT_STORE_ID) - ); - $this->assertEquals( - 'montly', - $this->_helper->getCategoryChangefreq(\Magento\Store\Model\Store::DISTRO_STORE_ID) - ); - } - - /** - * @magentoConfigFixture default_store sitemap/product/changefreq montly - */ - public function testGetProductChangefreq() - { - $this->assertEquals( - 'daily', - $this->_helper->getProductChangefreq(\Magento\Store\Model\Store::DEFAULT_STORE_ID) - ); - $this->assertEquals( - 'montly', - $this->_helper->getProductChangefreq(\Magento\Store\Model\Store::DISTRO_STORE_ID) - ); - } - - /** - * @magentoConfigFixture default_store sitemap/page/changefreq montly - */ - public function testGetPageChangefreq() - { - $this->assertEquals('daily', $this->_helper->getPageChangefreq(\Magento\Store\Model\Store::DEFAULT_STORE_ID)); - $this->assertEquals('montly', $this->_helper->getPageChangefreq(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/category/priority 100 - */ - public function testGetCategoryPriority() - { - $this->assertEquals(0.5, $this->_helper->getCategoryPriority(\Magento\Store\Model\Store::DEFAULT_STORE_ID)); - $this->assertEquals(100, $this->_helper->getCategoryPriority(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/product/priority 100 - */ - public function testGetProductPriority() - { - $this->assertEquals(1, $this->_helper->getProductPriority(\Magento\Store\Model\Store::DEFAULT_STORE_ID)); - $this->assertEquals(100, $this->_helper->getProductPriority(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/page/priority 100 - */ - public function testGetPagePriority() - { - $this->assertEquals(0.25, $this->_helper->getPagePriority(\Magento\Store\Model\Store::DEFAULT_STORE_ID)); - $this->assertEquals(100, $this->_helper->getPagePriority(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/search_engines/submission_robots 1 - */ - public function testGetEnableSubmissionRobots() - { - $this->assertEquals( - 0, - $this->_helper->getEnableSubmissionRobots(\Magento\Store\Model\Store::DEFAULT_STORE_ID) - ); - $this->assertEquals(1, $this->_helper->getEnableSubmissionRobots(\Magento\Store\Model\Store::DISTRO_STORE_ID)); - } - - /** - * @magentoConfigFixture default_store sitemap/product/image_include base - */ - public function testGetProductImageIncludePolicy() - { - $this->assertEquals( - 'all', - $this->_helper->getProductImageIncludePolicy(\Magento\Store\Model\Store::DEFAULT_STORE_ID) - ); - $this->assertEquals( - 'base', - $this->_helper->getProductImageIncludePolicy(\Magento\Store\Model\Store::DISTRO_STORE_ID) - ); - } -} diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php new file mode 100644 index 0000000000000..d4d24daf00429 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php @@ -0,0 +1,41 @@ +model = Bootstrap::getObjectManager()->get(CategoryConfigReader::class); + } + + /** + * @magentoConfigFixture default_store sitemap/category/changefreq monthly + */ + public function testGetChangeFrequency() + { + $this->assertEquals('daily', $this->model->getChangeFrequency(Store::DEFAULT_STORE_ID)); + $this->assertEquals('monthly', $this->model->getChangeFrequency(Store::DISTRO_STORE_ID)); + } + + /** + * @magentoConfigFixture default_store sitemap/category/priority 100 + */ + public function testGetCategoryPriority() + { + $this->assertEquals(0.5, $this->model->getPriority(Store::DEFAULT_STORE_ID)); + $this->assertEquals(100, $this->model->getPriority(Store::DISTRO_STORE_ID)); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php new file mode 100644 index 0000000000000..89142d451aada --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php @@ -0,0 +1,41 @@ +model = Bootstrap::getObjectManager()->get(CmsPageConfigReader::class); + } + + /** + * @magentoConfigFixture default_store sitemap/page/changefreq monthly + */ + public function testGetChangeFrequency() + { + $this->assertEquals('daily', $this->model->getChangeFrequency(Store::DEFAULT_STORE_ID)); + $this->assertEquals('monthly', $this->model->getChangeFrequency(Store::DISTRO_STORE_ID)); + } + + /** + * @magentoConfigFixture default_store sitemap/page/priority 100 + */ + public function testGetCategoryPriority() + { + $this->assertEquals(0.25, $this->model->getPriority(Store::DEFAULT_STORE_ID)); + $this->assertEquals(100, $this->model->getPriority(Store::DISTRO_STORE_ID)); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php new file mode 100644 index 0000000000000..f130996e73a0a --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php @@ -0,0 +1,41 @@ +model = Bootstrap::getObjectManager()->get(ProductConfigReader::class); + } + + /** + * @magentoConfigFixture default_store sitemap/product/changefreq monthly + */ + public function testGetChangeFrequency() + { + $this->assertEquals('daily', $this->model->getChangeFrequency(Store::DEFAULT_STORE_ID)); + $this->assertEquals('monthly', $this->model->getChangeFrequency(Store::DISTRO_STORE_ID)); + } + + /** + * @magentoConfigFixture default_store sitemap/product/priority 100 + */ + public function testGetCategoryPriority() + { + $this->assertEquals(1, $this->model->getPriority(Store::DEFAULT_STORE_ID)); + $this->assertEquals(100, $this->model->getPriority(Store::DISTRO_STORE_ID)); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php new file mode 100644 index 0000000000000..09be740d993ac --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php @@ -0,0 +1,67 @@ +model = Bootstrap::getObjectManager()->get(SitemapConfigReader::class); + } + + /** + * @magentoConfigFixture default_store sitemap/search_engines/submission_robots 1 + */ + public function testGetEnableSubmissionRobots() + { + $defaultSubmission = $this->model->getEnableSubmissionRobots(Store::DEFAULT_STORE_ID); + $this->assertEquals(0, $defaultSubmission); + $distroEnableSubmission = $this->model->getEnableSubmissionRobots(Store::DISTRO_STORE_ID); + $this->assertEquals(1, $distroEnableSubmission); + } + + /** + * @magentoConfigFixture default_store sitemap/limit/max_lines 10 + */ + public function testGetMaximumLinesNumber() + { + $defaultLinesNumber = $this->model->getMaximumLinesNumber(Store::DEFAULT_STORE_ID); + $this->assertEquals(50000, $defaultLinesNumber); + $distroLinesNumber = $this->model->getMaximumLinesNumber(Store::DISTRO_STORE_ID); + $this->assertEquals(10, $distroLinesNumber); + } + + /** + * @magentoConfigFixture default_store sitemap/limit/max_file_size 1024 + */ + public function testGetMaximumFileSize() + { + $defaultFileSize = $this->model->getMaximumFileSize(Store::DEFAULT_STORE_ID); + $this->assertEquals(10485760, $defaultFileSize); + $distroFileSize = $this->model->getMaximumFileSize(Store::DISTRO_STORE_ID); + $this->assertEquals(1024, $distroFileSize); + } + + /** + * @magentoConfigFixture default_store sitemap/product/image_include base + */ + public function testGetProductImageIncludePolicy() + { + $defaultPolicy = $this->model->getProductImageIncludePolicy(Store::DEFAULT_STORE_ID); + $this->assertEquals('all', $defaultPolicy); + $distroPolicy = $this->model->getProductImageIncludePolicy(Store::DISTRO_STORE_ID); + $this->assertEquals('base', $distroPolicy); + } +} From 9c65d501ec1a0160c39b85b1ec27db7cc1a7730f Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Mon, 24 Jul 2017 23:18:22 +0100 Subject: [PATCH 253/316] magento/magento2#10045 coding standars again --- .../Unit/Model/ItemResolver/ProductTest.php | 5 ++- .../Sitemap/Test/Unit/Model/SitemapTest.php | 31 ++++++++++--------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php index 9fd1620230182..525742c262a81 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php @@ -79,7 +79,10 @@ public function productProvider() ] ), new DataObject( - ['url' => $storeBaseMediaUrl . 'i/m/image_no_caption.png', 'caption' => null] + [ + 'url' => $storeBaseMediaUrl . 'i/m/image_no_caption.png', + 'caption' => null + ] ), ], 'thumbnail' => $storeBaseMediaUrl . 't/h/thumbnail.jpg', diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index 8b137e6fc1546..3464436a087c8 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -105,17 +105,18 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); + $resourceMethods = [ + '_construct', + 'beginTransaction', + 'rollBack', + 'save', + 'addCommitCallback', + 'commit', + '__wakeup', + ]; + $this->resourceMock = $this->getMockBuilder(SitemapResource::class) - ->setMethods( - [ - '_construct', - 'beginTransaction', - 'rollBack', - 'save', - 'addCommitCallback', - 'commit', - '__wakeup', - ]) + ->setMethods($resourceMethods) ->disableOriginalConstructor() ->getMock(); @@ -145,7 +146,6 @@ protected function setUp() ->willReturn($this->directoryMock); $this->configReaderMock = $this->getMockForAbstractClass(SitemapConfigReaderInterface::class); - $this->itemResolverMock = $this->getMockForAbstractClass(ItemResolverInterface::class); } @@ -416,13 +416,14 @@ protected function prepareSitemapModelMock( ->method('write') ->willReturnCallback($streamWriteCallback); + $checkFileCallback = function ($file) use (&$currentFile) { + $currentFile = $file; + }; + // Check that all expected file descriptors were created $this->directoryMock->expects($this->exactly(count($expectedFile))) ->method('openFile') - ->willReturnCallback(function ($file) use (&$currentFile) { - $currentFile = $file; - } - ); + ->willReturnCallback($checkFileCallback); // Check that all file descriptors were closed $this->fileMock->expects($this->exactly(count($expectedFile))) From 474effb3e84d140aeab11aadd74a0839b2f0f986 Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 25 Jul 2017 07:33:26 +0000 Subject: [PATCH 254/316] Remove the Zend_Json usage in the integration test suite and framework - replace with direct calls to json_decode and json_encode as these are test cases --- .../TestFramework/TestCase/AbstractController.php | 12 ++++-------- .../Magento/Test/TestCase/ControllerAbstractTest.php | 2 +- .../testsuite/Magento/Email/Model/TemplateTest.php | 2 +- .../Block/Adminhtml/Import/Edit/BeforeTest.php | 4 ++-- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php index 194036e723412..0031d4e593d17 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php @@ -268,14 +268,10 @@ protected function getCookieMessages($messageType = null) { /** @var $cookieManager CookieManagerInterface */ $cookieManager = $this->_objectManager->get(CookieManagerInterface::class); - try { - $messages = \Zend_Json::decode( - $cookieManager->getCookie(MessagePlugin::MESSAGES_COOKIES_NAME, \Zend_Json::encode([])) - ); - if (!is_array($messages)) { - $messages = []; - } - } catch (\Zend_Json_Exception $e) { + $messages = json_decode( + $cookieManager->getCookie(MessagePlugin::MESSAGES_COOKIES_NAME, json_encode([])) + ); + if (!is_array($messages)) { $messages = []; } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php index 703f9b0e1a520..1242026fd4a36 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php @@ -244,6 +244,6 @@ private function addSessionMessages() $this->cookieManagerMock->expects($this->any()) ->method('getCookie') - ->willReturn(\Zend_Json::encode($cookieMessages)); + ->willReturn(json_encode($cookieMessages)); } } diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php index f81f3d16243d7..126b452dd93b6 100644 --- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php +++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php @@ -108,7 +108,7 @@ public function testLoadDefault() $this->assertNotEmpty($this->model->getTemplateText()); $this->assertNotEmpty($this->model->getTemplateSubject()); $this->assertNotEmpty($this->model->getOrigTemplateVariables()); - $this->assertInternalType('array', \Zend_Json::decode($this->model->getOrigTemplateVariables())); + $this->assertInternalType('array', json_decode($this->model->getOrigTemplateVariables())); } /** diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/BeforeTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/BeforeTest.php index 223ca9f31919e..3334a211006e8 100644 --- a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/BeforeTest.php +++ b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/BeforeTest.php @@ -93,7 +93,7 @@ protected function setUp() public function testGetEntityBehaviors() { $actualEntities = $this->_model->getEntityBehaviors(); - $expectedEntities = \Zend_Json::encode($this->_expectedEntities); + $expectedEntities = json_encode($this->_expectedEntities); $this->assertEquals($expectedEntities, $actualEntities); } @@ -105,7 +105,7 @@ public function testGetEntityBehaviors() public function testGetUniqueBehaviors() { $actualBehaviors = $this->_model->getUniqueBehaviors(); - $expectedBehaviors = \Zend_Json::encode($this->_expectedBehaviors); + $expectedBehaviors = json_encode($this->_expectedBehaviors); $this->assertEquals($expectedBehaviors, $actualBehaviors); } } From db624ff82c00653223b1f914f346f18a8ff7c11a Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 25 Jul 2017 11:13:07 +0000 Subject: [PATCH 255/316] Update the abstract controller to use the Serializer rather than direct json_ methods --- .../TestCase/AbstractController.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php index 0031d4e593d17..0cb293cde2fa3 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php @@ -268,10 +268,21 @@ protected function getCookieMessages($messageType = null) { /** @var $cookieManager CookieManagerInterface */ $cookieManager = $this->_objectManager->get(CookieManagerInterface::class); - $messages = json_decode( - $cookieManager->getCookie(MessagePlugin::MESSAGES_COOKIES_NAME, json_encode([])) - ); - if (!is_array($messages)) { + + /** @var $jsonSerializer \Magento\Framework\Serialize\Serializer\Json */ + $jsonSerializer = $this->_objectManager->get(\Magento\Framework\Serialize\Serializer\Json::class); + try { + $messages = $jsonSerializer->unserialize( + $cookieManager->getCookie( + MessagePlugin::MESSAGES_COOKIES_NAME, + $jsonSerializer->serialize([]) + ) + ); + + if (!is_array($messages)) { + $messages = []; + } + } catch (\InvalidArgumentException $e) { $messages = []; } From 1ad0251051e6457db22cecfd9daec38102d26bdb Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 25 Jul 2017 12:31:34 +0000 Subject: [PATCH 256/316] Fix-up some probelms with test suite - Mark AbstractController to ignore CouplingBetweenObjects - Set the same json_decode default that Zend_Json uses --- .../Magento/TestFramework/TestCase/AbstractController.php | 1 + .../integration/testsuite/Magento/Email/Model/TemplateTest.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php index 0cb293cde2fa3..6ab8d43af62a9 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php @@ -15,6 +15,7 @@ /** * @SuppressWarnings(PHPMD.NumberOfChildren) + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ abstract class AbstractController extends \PHPUnit_Framework_TestCase { diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php index 126b452dd93b6..fc58b1028c043 100644 --- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php +++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php @@ -108,7 +108,7 @@ public function testLoadDefault() $this->assertNotEmpty($this->model->getTemplateText()); $this->assertNotEmpty($this->model->getTemplateSubject()); $this->assertNotEmpty($this->model->getOrigTemplateVariables()); - $this->assertInternalType('array', json_decode($this->model->getOrigTemplateVariables())); + $this->assertInternalType('array', json_decode($this->model->getOrigTemplateVariables(), true)); } /** From 4b33a2877edc4ca28a58646de6b49dc33dc53e6b Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko Date: Tue, 25 Jul 2017 15:32:14 +0300 Subject: [PATCH 257/316] MAGETWO-70683: New registered customer not showed in admin customer grid - change save behavior for address entity --- app/code/Magento/Customer/Model/Address.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/code/Magento/Customer/Model/Address.php b/app/code/Magento/Customer/Model/Address.php index b4060b7287da5..4d30af95d19cd 100644 --- a/app/code/Magento/Customer/Model/Address.php +++ b/app/code/Magento/Customer/Model/Address.php @@ -351,9 +351,7 @@ public function reindex() { /** @var \Magento\Framework\Indexer\IndexerInterface $indexer */ $indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID); - if (!$indexer->isScheduled()) { - $indexer->reindexRow($this->getCustomerId()); - } + $indexer->reindexRow($this->getCustomerId()); } /** From d2a37e4b6c062c01835ef5fd02c0aeddce4beefe Mon Sep 17 00:00:00 2001 From: alojua Date: Tue, 25 Jul 2017 14:42:39 +0200 Subject: [PATCH 258/316] Adding missing block names in checkout_cart_item_renderers.xml layout to be able to extend them using referenceBlock functionality --- .../view/frontend/layout/checkout_cart_item_renderers.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml index 69fc24be97757..1285da053edb7 100644 --- a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml +++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml @@ -9,13 +9,13 @@ - + - + From 981da285fbff6969823e5b873ba22e8668d3757d Mon Sep 17 00:00:00 2001 From: Sviatoslav Mankivskyi Date: Tue, 25 Jul 2017 15:51:17 +0300 Subject: [PATCH 259/316] MAGETWO-67363: Setup fixture priority can be duplicated --- setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php | 2 +- setup/src/Magento/Setup/Fixtures/FixtureModel.php | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php index c32faf7d77319..d65441f878cc5 100644 --- a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php @@ -14,7 +14,7 @@ class ConfigsApplyFixture extends Fixture /** * @var int */ - protected $priority = 150; + protected $priority = 0; /** * {@inheritdoc} diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index f8475ccc3a71c..58fb82e251dde 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -109,6 +109,11 @@ public function loadFixtures() 'fixtureModel' => $this, ] ); + if (isset($this->fixtures[$fixture->getPriority()])) { + throw new \InvalidArgumentException( + sprintf('Duplicate priority %d in fixture %s', $fixture->getPriority(), $type) + ); + } $this->fixtures[$fixture->getPriority()] = $fixture; } From f95bf7a54ce6220bd7f5af67e3580d4349c9a82f Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Tue, 25 Jul 2017 14:10:57 +0100 Subject: [PATCH 260/316] magento/magento2#10045 make codacy happy --- .../Sitemap/Model/SitemapConfigReaderTest.php | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php index 09be740d993ac..f98c70c5b52cb 100644 --- a/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/SitemapConfigReaderTest.php @@ -26,10 +26,8 @@ protected function setUp() */ public function testGetEnableSubmissionRobots() { - $defaultSubmission = $this->model->getEnableSubmissionRobots(Store::DEFAULT_STORE_ID); - $this->assertEquals(0, $defaultSubmission); - $distroEnableSubmission = $this->model->getEnableSubmissionRobots(Store::DISTRO_STORE_ID); - $this->assertEquals(1, $distroEnableSubmission); + $this->assertEquals(0, $this->model->getEnableSubmissionRobots(Store::DEFAULT_STORE_ID)); + $this->assertEquals(1, $this->model->getEnableSubmissionRobots(Store::DISTRO_STORE_ID)); } /** @@ -37,10 +35,8 @@ public function testGetEnableSubmissionRobots() */ public function testGetMaximumLinesNumber() { - $defaultLinesNumber = $this->model->getMaximumLinesNumber(Store::DEFAULT_STORE_ID); - $this->assertEquals(50000, $defaultLinesNumber); - $distroLinesNumber = $this->model->getMaximumLinesNumber(Store::DISTRO_STORE_ID); - $this->assertEquals(10, $distroLinesNumber); + $this->assertEquals(50000, $this->model->getMaximumLinesNumber(Store::DEFAULT_STORE_ID)); + $this->assertEquals(10, $this->model->getMaximumLinesNumber(Store::DISTRO_STORE_ID)); } /** @@ -48,10 +44,8 @@ public function testGetMaximumLinesNumber() */ public function testGetMaximumFileSize() { - $defaultFileSize = $this->model->getMaximumFileSize(Store::DEFAULT_STORE_ID); - $this->assertEquals(10485760, $defaultFileSize); - $distroFileSize = $this->model->getMaximumFileSize(Store::DISTRO_STORE_ID); - $this->assertEquals(1024, $distroFileSize); + $this->assertEquals(10485760, $this->model->getMaximumFileSize(Store::DEFAULT_STORE_ID)); + $this->assertEquals(1024, $this->model->getMaximumFileSize(Store::DISTRO_STORE_ID)); } /** @@ -59,9 +53,7 @@ public function testGetMaximumFileSize() */ public function testGetProductImageIncludePolicy() { - $defaultPolicy = $this->model->getProductImageIncludePolicy(Store::DEFAULT_STORE_ID); - $this->assertEquals('all', $defaultPolicy); - $distroPolicy = $this->model->getProductImageIncludePolicy(Store::DISTRO_STORE_ID); - $this->assertEquals('base', $distroPolicy); + $this->assertEquals('all', $this->model->getProductImageIncludePolicy(Store::DEFAULT_STORE_ID)); + $this->assertEquals('base', $this->model->getProductImageIncludePolicy(Store::DISTRO_STORE_ID)); } } From 2867a11c6e2290ccf11d5a54e54f088728d9e2a7 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Tue, 25 Jul 2017 17:50:02 +0300 Subject: [PATCH 261/316] magento/magento2#10320: Remove zend json from the test suite - Attempt to reduce coupling between objects --- .../TestFramework/TestCase/AbstractController.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php index 6ab8d43af62a9..c80c05c2521cc 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php @@ -15,7 +15,6 @@ /** * @SuppressWarnings(PHPMD.NumberOfChildren) - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ abstract class AbstractController extends \PHPUnit_Framework_TestCase { @@ -26,12 +25,12 @@ abstract class AbstractController extends \PHPUnit_Framework_TestCase protected $_runOptions = []; /** - * @var \Magento\TestFramework\Request + * @var \Magento\Framework\App\RequestInterface */ protected $_request; /** - * @var \Magento\TestFramework\Response + * @var \Magento\Framework\App\ResponseInterface */ protected $_response; @@ -103,7 +102,7 @@ public function dispatch($uri) /** * Request getter * - * @return \Magento\TestFramework\Request + * @return \Magento\Framework\App\RequestInterface */ public function getRequest() { @@ -116,7 +115,7 @@ public function getRequest() /** * Response getter * - * @return \Magento\TestFramework\Response + * @return \Magento\Framework\App\ResponseInterface */ public function getResponse() { From 8cd3d3a1e2e347f91f5a6f1955c5ab6f7f061511 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Tue, 25 Jul 2017 18:59:33 +0300 Subject: [PATCH 262/316] magento/magento2#10320: Remove zend json from the test suite - Fixed unit test for the integration tests framework --- .../Test/TestCase/ControllerAbstractTest.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php index 1242026fd4a36..d46b820443072 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php @@ -25,12 +25,25 @@ class ControllerAbstractTest extends \Magento\TestFramework\TestCase\AbstractCon /** @var \PHPUnit_Framework_MockObject_MockObject | CookieManagerInterface */ private $cookieManagerMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Serialize\Serializer\Json + */ + private $serializerMock; + protected function setUp() { $testObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->messageManager = $this->getMock(\Magento\Framework\Message\Manager::class, [], [], '', false); $this->cookieManagerMock = $this->getMock(CookieManagerInterface::class, [], [], '', false); + $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class) + ->disableOriginalConstructor() + ->getMock(); + $this->serializerMock->expects($this->any())->method('unserialize')->willReturnCallback( + function ($serializedData) { + return json_decode($serializedData, true); + } + ); $this->interpretationStrategyMock = $this->getMock(InterpretationStrategyInterface::class, [], [], '', false); $this->interpretationStrategyMock->expects($this->any()) ->method('interpret') @@ -58,6 +71,7 @@ function (MessageInterface $message) { [\Magento\Framework\App\ResponseInterface::class, $response], [\Magento\Framework\Message\Manager::class, $this->messageManager], [CookieManagerInterface::class, $this->cookieManagerMock], + [\Magento\Framework\Serialize\Serializer\Json::class, $this->serializerMock], [InterpretationStrategyInterface::class, $this->interpretationStrategyMock], ] ) From cb858f7b235f4e0e36812a33a9811df290579431 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 09:41:11 +0000 Subject: [PATCH 263/316] Replace the usage of Zend_Json::encode in the setup marketplace controller tests --- .../Magento/Setup/Test/Unit/Controller/MarketplaceTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/MarketplaceTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/MarketplaceTest.php index 93fbc103852fc..02583a68b6e0e 100644 --- a/setup/src/Magento/Setup/Test/Unit/Controller/MarketplaceTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Controller/MarketplaceTest.php @@ -39,7 +39,7 @@ public function testSaveAuthJsonAction() $this->packagesAuth ->expects($this->once()) ->method('checkCredentials') - ->will($this->returnValue(\Zend_Json::encode(['success' => true]))); + ->will($this->returnValue(json_encode(['success' => true]))); $this->packagesAuth ->expects($this->once()) ->method('saveAuthJson') @@ -75,7 +75,7 @@ public function testCheckAuthAction() $this->packagesAuth ->expects($this->once()) ->method('checkCredentials') - ->will($this->returnValue(\Zend_Json::encode(['success' => true]))); + ->will($this->returnValue(json_encode(['success' => true]))); $jsonModel = $this->controller->checkAuthAction(); $this->assertInstanceOf(\Zend\View\Model\ViewModel::class, $jsonModel); $variables = $jsonModel->getVariables(); From 1fa737e83c4c55a63aa9f6ce960bd2339cc65587 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 10:05:23 +0000 Subject: [PATCH 264/316] Remove Zend_Json from the Webapi - inject the new \Magento\Framework\Serialize\Serializer\Json - call unserialize, - Update the catch to \InvalidArgumentException --- .../Webapi/Rest/Request/Deserializer/Json.php | 22 ++++++-- .../Rest/Request/Deserializer/JsonTest.php | 54 +++++++++++-------- 2 files changed, 50 insertions(+), 26 deletions(-) diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php index 994a3ec3c9263..1f634597f8c82 100644 --- a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php +++ b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php @@ -20,14 +20,26 @@ class Json implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterfa */ protected $_appState; + /** + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + /** * @param \Magento\Framework\Json\Decoder $decoder - * @param \Magento\Framework\App\State $appState + * @param State $appState + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException */ - public function __construct(\Magento\Framework\Json\Decoder $decoder, State $appState) - { + public function __construct( + \Magento\Framework\Json\Decoder $decoder, + State $appState, + \Magento\Framework\Serialize\Serializer\Json $serializer = null + ) { $this->decoder = $decoder; $this->_appState = $appState; + $this->serializer = $serializer?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** @@ -46,8 +58,8 @@ public function deserialize($encodedBody) ); } try { - $decodedBody = $this->decoder->decode($encodedBody); - } catch (\Zend_Json_Exception $e) { + $decodedBody = $this->serializer->unserialize($encodedBody); + } catch (\InvalidArgumentException $e) { if ($this->_appState->getMode() !== State::MODE_DEVELOPER) { throw new \Magento\Framework\Webapi\Exception(new Phrase('Decoding error.')); } else { diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php index 96eed9781f2ae..9066b2b5f7c00 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php @@ -21,6 +21,9 @@ class JsonTest extends \PHPUnit_Framework_TestCase /** @var \PHPUnit_Framework_MockObject_MockObject */ protected $_appStateMock; + /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ + private $serializerMock; + protected function setUp() { /** Prepare mocks for SUT constructor. */ @@ -28,11 +31,20 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['decode']) ->getMock(); - $this->_appStateMock = $this->getMock(\Magento\Framework\App\State::class, [], [], '', false); + $this->_appStateMock = $this->getMock( + \Magento\Framework\App\State::class, + [], + [], + '', + false + ); + $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class) + ->getMock(); /** Initialize SUT. */ $this->_jsonDeserializer = new \Magento\Framework\Webapi\Rest\Request\Deserializer\Json( $this->decoderMock, - $this->_appStateMock + $this->_appStateMock, + $this->serializerMock ); parent::setUp(); } @@ -60,13 +72,13 @@ public function testDeserialize() 'key2' => 'test2', 'array' => ['test01' => 'some1', 'test02' => 'some2'], ]; - $this->decoderMock->expects( - $this->once() - )->method( - 'decode' - )->will( - $this->returnValue($expectedDecodedJson) - ); + $this->serializerMock->expects($this->any()) + ->method('unserialize') + ->willReturnCallback( + function ($serializedData) { + return json_decode($serializedData, true); + } + ); /** Initialize SUT. */ $this->assertEquals( $expectedDecodedJson, @@ -78,9 +90,10 @@ public function testDeserialize() public function testDeserializeInvalidEncodedBodyExceptionDeveloperModeOff() { /** Prepare mocks for SUT constructor. */ - $this->decoderMock->expects($this->once()) - ->method('decode') - ->will($this->throwException(new \Zend_Json_Exception)); + $this->serializerMock + ->expects($this->once()) + ->method('unserialize') + ->will($this->throwException(new \InvalidArgumentException)); $this->_appStateMock->expects($this->once()) ->method('getMode') ->will($this->returnValue('production')); @@ -103,15 +116,14 @@ public function testDeserializeInvalidEncodedBodyExceptionDeveloperModeOff() public function testDeserializeInvalidEncodedBodyExceptionDeveloperModeOn() { /** Prepare mocks for SUT constructor. */ - $this->decoderMock->expects( - $this->once() - )->method( - 'decode' - )->will( - $this->throwException( - new \Zend_Json_Exception('Decoding error:' . PHP_EOL . 'Decoding failed: Syntax error') - ) - ); + $this->serializerMock + ->expects($this->once()) + ->method('unserialize') + ->will( + $this->throwException( + new \InvalidArgumentException('Unable to unserialize value.') + ) + ); $this->_appStateMock->expects($this->once()) ->method('getMode') ->will($this->returnValue('developer')); From f2a93625996e8e1c2c622d64b783b7caa3066d93 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 11:49:59 +0000 Subject: [PATCH 265/316] Update the $decoder property to be noted as deprecated --- .../Framework/Webapi/Rest/Request/Deserializer/Json.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php index 1f634597f8c82..597089d7bdbf0 100644 --- a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php +++ b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php @@ -12,7 +12,10 @@ class Json implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterface { - /** @var \Magento\Framework\Json\Decoder */ + /** + * @var \Magento\Framework\Json\Decoder + * @deprecated + */ protected $decoder; /** From 66613e05ddcfc578bcf1d7893e390c0f97b64437 Mon Sep 17 00:00:00 2001 From: Dmytro Voskoboinikov Date: Wed, 26 Jul 2017 15:15:45 +0300 Subject: [PATCH 266/316] MAGETWO-57771: Log-in button does not appear after entering email then leaving checkout page --- .../Checkout/view/frontend/web/js/view/form/element/email.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/form/element/email.js b/app/code/Magento/Checkout/view/frontend/web/js/view/form/element/email.js index 545a12017fee6..4a25778e754c7 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/form/element/email.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/form/element/email.js @@ -174,7 +174,7 @@ define([ */ resolveInitialPasswordVisibility: function () { if (checkoutData.getInputFieldEmailValue() !== '') { - return (checkoutData.getInputFieldEmailValue() === checkoutData.getCheckedEmailValue()) + return checkoutData.getInputFieldEmailValue() === checkoutData.getCheckedEmailValue(); } return false; From 4de3aa6c4d05859d3ba59bb922fb50c08988336a Mon Sep 17 00:00:00 2001 From: Mykola Palamar Date: Wed, 26 Jul 2017 17:27:26 +0300 Subject: [PATCH 267/316] MAGETWO-70869: Console errors after turning on CSS merging/minification --- app/code/Magento/Deploy/Model/Mode.php | 15 +++- .../Deploy/Test/Unit/Model/ModeTest.php | 70 +++++++++++++++++++ 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Deploy/Model/Mode.php b/app/code/Magento/Deploy/Model/Mode.php index 1e8b03585d2b8..75de873f71e44 100644 --- a/app/code/Magento/Deploy/Model/Mode.php +++ b/app/code/Magento/Deploy/Model/Mode.php @@ -14,6 +14,7 @@ use Magento\Framework\Config\File\ConfigFilePool; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Magento\Framework\Exception\LocalizedException; /** * A class to manage Magento modes @@ -75,13 +76,23 @@ public function __construct( /** * Enable production mode * + * @throws LocalizedException * @return void */ public function enableProductionMode() { $this->enableMaintenanceMode($this->output); - $this->filesystem->regenerateStatic($this->output); - $this->setStoreMode(State::MODE_PRODUCTION); + $previousMode = $this->getMode(); + try { + // We have to turn on production mode before generation. + // We need this to enable generation of the "min" files. + $this->setStoreMode(State::MODE_PRODUCTION); + $this->filesystem->regenerateStatic($this->output); + } catch (LocalizedException $e) { + // We have to return store mode to previous state in case of error. + $this->setStoreMode($previousMode); + throw $e; + } $this->disableMaintenanceMode($this->output); } diff --git a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php index e77e3c58ffba1..5c7bd2cec4053 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php @@ -14,6 +14,8 @@ use PHPUnit_Framework_MockObject_MockObject as Mock; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Magento\Framework\Config\File\ConfigFilePool; +use Magento\Framework\Exception\LocalizedException; /** * @inheritdoc @@ -96,4 +98,72 @@ public function testGetMode() $this->assertSame(null, $this->model->getMode()); $this->assertSame(State::MODE_DEVELOPER, $this->model->getMode()); } + + /** + * Test that production mode will be enabled before static generation call. + * We need this to be sure that "min" files will be generated. + */ + public function testEnableProductionMode() + { + $mode = State::MODE_DEVELOPER; + $modeModel = $this->model; + $dataStorage = [ + ConfigFilePool::APP_ENV => [ + State::PARAM_MODE => State::MODE_DEVELOPER, + ], + ]; + $this->writerMock->expects($this->once()) + ->method("saveConfig") + ->willReturnCallback(function($data) use (&$dataStorage){ + $dataStorage = $data; + }); + $this->readerMock->expects($this->any()) + ->method('load') + ->willReturnCallback(function() use (&$dataStorage){ + return $dataStorage[ConfigFilePool::APP_ENV]; + }); + $this->filesystemMock->expects($this->once()) + ->method("regenerateStatic") + ->willReturnCallback(function() use (&$modeModel, &$mode){ + $mode = $modeModel->getMode(); + }); + $this->model->enableProductionMode(); + $this->assertEquals(State::MODE_PRODUCTION, $mode); + } + + /** + * Test that previous mode will be enabled after error during static generation call. + * We need this to be sure that mode will be reverted to it previous tate. + * + * @expectedException \Magento\Framework\Exception\LocalizedException + */ + public function testEnableDeveloperModeOnFail() + { + $mode = State::MODE_DEVELOPER; + $modeModel = $this->model; + $dataStorage = [ + ConfigFilePool::APP_ENV => [ + State::PARAM_MODE => State::MODE_DEVELOPER, + ], + ]; + $this->writerMock->expects($this->exactly(2)) + ->method("saveConfig") + ->withConsecutive( + [$this->equalTo([ConfigFilePool::APP_ENV => [State::PARAM_MODE => State::MODE_PRODUCTION]])], + [$this->equalTo([ConfigFilePool::APP_ENV => [State::PARAM_MODE => State::MODE_DEVELOPER]])] + ) + ->willReturnCallback(function($data) use (&$dataStorage){ + $dataStorage = $data; + }); + $this->readerMock->expects($this->any()) + ->method('load') + ->willReturnCallback(function() use (&$dataStorage){ + return $dataStorage[ConfigFilePool::APP_ENV]; + }); + $this->filesystemMock->expects($this->once()) + ->method("regenerateStatic") + ->willThrowException(new LocalizedException(__('Exception'))); + $this->model->enableProductionMode(); + $this->assertEquals(State::MODE_PRODUCTION, $mode); + } } From b251c7e9ef037f3a30d092732b2fd0caa6cd7003 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Wed, 26 Jul 2017 15:43:07 +0100 Subject: [PATCH 268/316] magento/magento2#10045 fix cms page unit test namespace --- .../Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php index 9cefe19280b2c..6a29f4985fa29 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model; +namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; From e778bb38f8332278ca9858027117176ee2cd86ac Mon Sep 17 00:00:00 2001 From: Robert He Date: Thu, 2 Feb 2017 17:30:38 -0600 Subject: [PATCH 269/316] MAGETWO-69675: Failed upgrade from 2.1.7 EE to 2.2.0 --- .../Integration/Model/AdminTokenService.php | 10 +- .../Model/CustomerTokenService.php | 10 +- .../Integration/Plugin/Model/AdminUser.php | 46 ++++++ .../Integration/Plugin/Model/CustomerUser.php | 46 ++++++ .../Magento/Integration/Setup/UpgradeData.php | 96 +++++++++++++ .../Test/Unit/Model/AdminTokenServiceTest.php | 17 +-- .../Unit/Model/CustomerTokenServiceTest.php | 17 +-- app/code/Magento/Integration/etc/di.xml | 6 + app/code/Magento/Integration/etc/module.xml | 2 +- .../Model/AdminTokenServiceTest.php | 134 ++++++++++++++---- .../Adminhtml/User/InvalidateTokenTest.php | 2 +- .../testsuite/Magento/User/Model/UserTest.php | 1 + .../Magento/Webapi/_files/webapi_user.php | 2 +- 13 files changed, 338 insertions(+), 51 deletions(-) create mode 100644 app/code/Magento/Integration/Plugin/Model/AdminUser.php create mode 100644 app/code/Magento/Integration/Plugin/Model/CustomerUser.php create mode 100644 app/code/Magento/Integration/Setup/UpgradeData.php diff --git a/app/code/Magento/Integration/Model/AdminTokenService.php b/app/code/Magento/Integration/Model/AdminTokenService.php index 140c3ddc97791..0627007f329a8 100644 --- a/app/code/Magento/Integration/Model/AdminTokenService.php +++ b/app/code/Magento/Integration/Model/AdminTokenService.php @@ -95,7 +95,13 @@ public function createAdminAccessToken($username, $password) } /** - * {@inheritdoc} + * Revoke token by admin id. + * + * The function will delete the token from the oauth_token table. + * + * @param int $adminId + * @return bool + * @throws \Magento\Framework\Exception\LocalizedException */ public function revokeAdminAccessToken($adminId) { @@ -105,7 +111,7 @@ public function revokeAdminAccessToken($adminId) } try { foreach ($tokenCollection as $token) { - $token->setRevoked(1)->save(); + $token->delete(); } } catch (\Exception $e) { throw new LocalizedException(__('The tokens could not be revoked.')); diff --git a/app/code/Magento/Integration/Model/CustomerTokenService.php b/app/code/Magento/Integration/Model/CustomerTokenService.php index 5278907192983..97fd8c557c30c 100644 --- a/app/code/Magento/Integration/Model/CustomerTokenService.php +++ b/app/code/Magento/Integration/Model/CustomerTokenService.php @@ -88,7 +88,13 @@ public function createCustomerAccessToken($username, $password) } /** - * {@inheritdoc} + * Revoke token by customer id. + * + * The function will delete the token from the oauth_token table. + * + * @param int $customerId + * @return bool + * @throws \Magento\Framework\Exception\LocalizedException */ public function revokeCustomerAccessToken($customerId) { @@ -98,7 +104,7 @@ public function revokeCustomerAccessToken($customerId) } try { foreach ($tokenCollection as $token) { - $token->setRevoked(1)->save(); + $token->delete(); } } catch (\Exception $e) { throw new LocalizedException(__('The tokens could not be revoked.')); diff --git a/app/code/Magento/Integration/Plugin/Model/AdminUser.php b/app/code/Magento/Integration/Plugin/Model/AdminUser.php new file mode 100644 index 0000000000000..df3766250caa7 --- /dev/null +++ b/app/code/Magento/Integration/Plugin/Model/AdminUser.php @@ -0,0 +1,46 @@ +adminTokenService = $adminTokenService; + } + + /** + * Check if admin is inactive - if so, invalidate their tokens + * + * @param \Magento\User\Model\User $subject + * @param \Magento\Framework\DataObject $object + * @return $this + */ + public function afterSave( + \Magento\User\Model\User $subject, + \Magento\Framework\DataObject $object + ) { + $isActive = $object->getIsActive(); + if (isset($isActive) && $isActive == 0) { + $this->adminTokenService->revokeAdminAccessToken($object->getId()); + } + return $subject; + } +} diff --git a/app/code/Magento/Integration/Plugin/Model/CustomerUser.php b/app/code/Magento/Integration/Plugin/Model/CustomerUser.php new file mode 100644 index 0000000000000..537b66402397f --- /dev/null +++ b/app/code/Magento/Integration/Plugin/Model/CustomerUser.php @@ -0,0 +1,46 @@ +customerTokenService = $customerTokenService; + } + + /** + * Check if customer is inactive - if so, invalidate their tokens + * + * @param \Magento\Customer\Model\Customer $subject + * @param \Magento\Framework\DataObject $object + * @return $this + */ + public function afterSave( + \Magento\Customer\Model\Customer $subject, + \Magento\Framework\DataObject $object + ) { + $isActive = $object->getIsActive(); + if (isset($isActive) && $isActive == 0) { + $this->customerTokenService->revokeCustomerAccessToken($object->getId()); + } + return $subject; + } +} diff --git a/app/code/Magento/Integration/Setup/UpgradeData.php b/app/code/Magento/Integration/Setup/UpgradeData.php new file mode 100644 index 0000000000000..b376d6a2b8b1e --- /dev/null +++ b/app/code/Magento/Integration/Setup/UpgradeData.php @@ -0,0 +1,96 @@ +startSetup(); + + if (version_compare($context->getVersion(), '2.2.0', '<')) { + $this->removeRevokedTokens($setup); + $this->removeTokensFromInactiveAdmins($setup); + $this->removeTokensFromInactiveCustomers($setup); + } + + $setup->endSetup(); + } + + /** + * Remove any revoked tokens from oauth_token table + * + * @param ModuleDataSetupInterface $setup + * @return void + */ + private function removeRevokedTokens($setup) + { + $oauthTokenTable = $setup->getTable('oauth_token'); + + $where = ['revoked = ?' => 1]; + $setup->getConnection()->delete($oauthTokenTable, $where); + } + + /** + * Remove any tokens from oauth_token table where admin is inactive + * + * @param ModuleDataSetupInterface $setup + * @return void + */ + private function removeTokensFromInactiveAdmins($setup) + { + $oauthTokenTable = $setup->getTable('oauth_token'); + $adminUserTable = $setup->getTable('admin_user'); + + $select = $setup->getConnection()->select()->from( + $adminUserTable, + ['user_id', 'is_active'] + ); + + $admins = $setup->getConnection()->fetchAll($select); + foreach ($admins as $admin) { + if ($admin['is_active'] == 0) { + $where = ['admin_id = ?' => (int)$admin['user_id']]; + $setup->getConnection()->delete($oauthTokenTable, $where); + } + } + } + + /** + * Remove any tokens from oauth_token table where customer is inactive + * + * @param ModuleDataSetupInterface $setup + * @return void + */ + private function removeTokensFromInactiveCustomers($setup) + { + $oauthTokenTable = $setup->getTable('oauth_token'); + $adminUserTable = $setup->getTable('customer_entity'); + + $select = $setup->getConnection()->select()->from( + $adminUserTable, + ['entity_id', 'is_active'] + ); + + $admins = $setup->getConnection()->fetchAll($select); + foreach ($admins as $admin) { + if ($admin['is_active'] == 0) { + $where = ['customer_id = ?' => (int)$admin['entity_id']]; + $setup->getConnection()->delete($oauthTokenTable, $where); + } + } + } +} diff --git a/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php b/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php index 9a29c647d2295..52bff9ca06864 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php @@ -13,6 +13,9 @@ use Magento\Integration\Model\Integration; use Magento\Integration\Model\Oauth\Token; +/** + * Test for \Magento\Integration\Model\AdminTokenService + */ class AdminTokenServiceTest extends \PHPUnit_Framework_TestCase { /** \Magento\Integration\Model\AdminTokenService */ @@ -50,7 +53,7 @@ protected function setUp() $this->_tokenMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) ->disableOriginalConstructor() - ->setMethods(['getToken', 'loadByAdminId', 'setRevoked', 'save', '__wakeup'])->getMock(); + ->setMethods(['getToken', 'loadByAdminId', 'delete', '__wakeup'])->getMock(); $this->_tokenModelCollectionMock = $this->getMockBuilder( \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection::class @@ -97,10 +100,8 @@ public function testRevokeAdminAccessToken() ->with(null) ->will($this->returnValue(1)); $this->_tokenMock->expects($this->once()) - ->method('setRevoked') + ->method('delete') ->will($this->returnValue($this->_tokenMock)); - $this->_tokenMock->expects($this->once()) - ->method('save'); $this->assertTrue($this->_tokenService->revokeAdminAccessToken($adminId)); } @@ -116,9 +117,7 @@ public function testRevokeAdminAccessTokenWithoutAdminId() ->with(null) ->will($this->returnValue($this->_tokenModelCollectionMock)); $this->_tokenMock->expects($this->never()) - ->method('save'); - $this->_tokenMock->expects($this->never()) - ->method('setRevoked') + ->method('delete') ->will($this->returnValue($this->_tokenMock)); $this->_tokenService->revokeAdminAccessToken(null); } @@ -142,10 +141,8 @@ public function testRevokeAdminAccessTokenCannotRevoked() ->method('getIterator') ->will($this->returnValue(new \ArrayIterator([$this->_tokenMock]))); - $this->_tokenMock->expects($this->never()) - ->method('save'); $this->_tokenMock->expects($this->once()) - ->method('setRevoked') + ->method('delete') ->will($this->throwException($exception)); $this->_tokenService->revokeAdminAccessToken($adminId); } diff --git a/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php b/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php index 26e6c29f3be65..9bfe334cd7a99 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php @@ -11,6 +11,9 @@ use Magento\Integration\Model\Integration; use Magento\Integration\Model\Oauth\Token; +/** + * Test for \Magento\Integration\Model\CustomerTokenService + */ class CustomerTokenServiceTest extends \PHPUnit_Framework_TestCase { /** \Magento\Integration\Model\CustomerTokenService */ @@ -49,7 +52,7 @@ protected function setUp() $this->_tokenMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) ->disableOriginalConstructor() - ->setMethods(['getToken', 'loadByCustomerId', 'setRevoked', 'save', '__wakeup'])->getMock(); + ->setMethods(['getToken', 'loadByCustomerId', 'delete', '__wakeup'])->getMock(); $this->_tokenModelCollectionMock = $this->getMockBuilder( \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection::class @@ -95,10 +98,8 @@ public function testRevokeCustomerAccessToken() ->method('_fetchAll') ->will($this->returnValue(1)); $this->_tokenMock->expects($this->once()) - ->method('setRevoked') + ->method('delete') ->will($this->returnValue($this->_tokenMock)); - $this->_tokenMock->expects($this->once()) - ->method('save'); $this->assertTrue($this->_tokenService->revokeCustomerAccessToken($customerId)); } @@ -114,9 +115,7 @@ public function testRevokeCustomerAccessTokenWithoutCustomerId() ->with(null) ->will($this->returnValue($this->_tokenModelCollectionMock)); $this->_tokenMock->expects($this->never()) - ->method('save'); - $this->_tokenMock->expects($this->never()) - ->method('setRevoked') + ->method('delete') ->will($this->returnValue($this->_tokenMock)); $this->_tokenService->revokeCustomerAccessToken(null); } @@ -140,10 +139,8 @@ public function testRevokeCustomerAccessTokenCannotRevoked() ->method('getIterator') ->will($this->returnValue(new \ArrayIterator([$this->_tokenMock]))); - $this->_tokenMock->expects($this->never()) - ->method('save'); $this->_tokenMock->expects($this->once()) - ->method('setRevoked') + ->method('delete') ->will($this->throwException($exception)); $this->_tokenService->revokeCustomerAccessToken($customerId); } diff --git a/app/code/Magento/Integration/etc/di.xml b/app/code/Magento/Integration/etc/di.xml index f1c1e5b4fb7de..387770909bda6 100644 --- a/app/code/Magento/Integration/etc/di.xml +++ b/app/code/Magento/Integration/etc/di.xml @@ -29,4 +29,10 @@ + + + + + + diff --git a/app/code/Magento/Integration/etc/module.xml b/app/code/Magento/Integration/etc/module.xml index 076aaeb22afb5..c5e2aa75a8d05 100644 --- a/app/code/Magento/Integration/etc/module.xml +++ b/app/code/Magento/Integration/etc/module.xml @@ -6,7 +6,7 @@ */ --> - + diff --git a/dev/tests/api-functional/testsuite/Magento/Integration/Model/AdminTokenServiceTest.php b/dev/tests/api-functional/testsuite/Magento/Integration/Model/AdminTokenServiceTest.php index 4285b76bba772..3fb7b3417b679 100644 --- a/dev/tests/api-functional/testsuite/Magento/Integration/Model/AdminTokenServiceTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Integration/Model/AdminTokenServiceTest.php @@ -79,6 +79,19 @@ public function testCreateAdminAccessToken() $this->assertToken($adminUserNameFromFixture, $accessToken); } + /** + * Provider to test input validation + * + * @return array + */ + public function validationDataProvider() + { + return [ + 'Check for empty credentials' => ['', ''], + 'Check for null credentials' => [null, null] + ]; + } + /** * @dataProvider validationDataProvider */ @@ -95,8 +108,8 @@ public function testCreateAdminAccessTokenEmptyOrNullCredentials() $requestData = ['username' => '', 'password' => '']; $this->_webApiCall($serviceInfo, $requestData); $noExceptionOccurred = true; - } catch (\Exception $e) { - $this->assertInputExceptionMessages($e); + } catch (\Exception $exception) { + $this->assertInputExceptionMessages($exception); } if ($noExceptionOccurred) { $this->fail("Exception was expected to be thrown when provided credentials are invalid."); @@ -118,8 +131,8 @@ public function testCreateAdminAccessTokenInvalidCredentials() $requestData = ['username' => $customerUserName, 'password' => $password]; $this->_webApiCall($serviceInfo, $requestData); $noExceptionOccurred = true; - } catch (\Exception $e) { - $this->assertInvalidCredentialsException($e); + } catch (\Exception $exception) { + $this->assertInvalidCredentialsException($exception); } if ($noExceptionOccurred) { $this->fail("Exception was expected to be thrown when provided credentials are invalid."); @@ -127,16 +140,63 @@ public function testCreateAdminAccessTokenInvalidCredentials() } /** - * Provider to test input validation - * - * @return array + * @magentoApiDataFixture Magento/Webapi/_files/webapi_user.php */ - public function validationDataProvider() + public function testUseAdminAccessTokenInactiveAdmin() { - return [ - 'Check for empty credentials' => ['', ''], - 'Check for null credentials' => [null, null] + $adminUserNameFromFixture = 'webapi_user'; + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH_ADMIN_TOKEN, + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST, + ], + ]; + $requestData = [ + 'username' => $adminUserNameFromFixture, + 'password' => \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD, ]; + $accessToken = $this->_webApiCall($serviceInfo, $requestData); + $this->assertToken($adminUserNameFromFixture, $accessToken); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => '/V1/store/storeConfigs', + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + 'token' => $accessToken + ] + ]; + $requestData = [ + 'storeCodes' => ['default'], + ]; + $storeConfigs = $this->_webApiCall($serviceInfo, $requestData); + $this->assertNotNull($storeConfigs); + + $adminUser = $this->userModel->loadByUsername($adminUserNameFromFixture); + $adminUser->setData("is_active", 0); + $adminUser->save(); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => '/V1/store/storeConfigs', + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + 'token' => $accessToken + ] + ]; + $requestData = [ + 'storeCodes' => ['default'], + ]; + + $noExceptionOccurred = false; + try { + $this->_webApiCall($serviceInfo, $requestData); + $noExceptionOccurred = true; + } catch (\Exception $exception) { + $this->assertUnauthorizedAccessException($exception); + } + if ($noExceptionOccurred) { + $this->fail("Exception was expected to be thrown when provided token is expired."); + } } /** @@ -167,7 +227,7 @@ public function testThrottlingMaxAttempts() try { $this->_webApiCall($serviceInfo, $invalidCredentials); $noExceptionOccurred = true; - } catch (\Exception $e) { + } catch (\Exception $exception) { } } if ($noExceptionOccurred) { @@ -209,8 +269,8 @@ public function testThrottlingAccountLockout() try { $this->_webApiCall($serviceInfo, $invalidCredentials); $noExceptionOccurred = true; - } catch (\Exception $e) { - $this->assertInvalidCredentialsException($e); + } catch (\Exception $exception) { + $this->assertInvalidCredentialsException($exception); } if ($noExceptionOccurred) { $this->fail("Exception was expected to be thrown when provided credentials are invalid."); @@ -221,8 +281,8 @@ public function testThrottlingAccountLockout() try { $this->_webApiCall($serviceInfo, $validCredentials); $noExceptionOccurred = true; - } catch (\Exception $e) { - $this->assertInvalidCredentialsException($e); + } catch (\Exception $exception) { + $this->assertInvalidCredentialsException($exception); } if ($noExceptionOccurred) { $this->fail("Exception was expected to be thrown because account should have been locked at this point."); @@ -232,12 +292,12 @@ public function testThrottlingAccountLockout() /** * Assert for presence of Input exception messages * - * @param \Exception $e + * @param \Exception $exception */ - private function assertInputExceptionMessages($e) + private function assertInputExceptionMessages($exception) { - $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode()); - $exceptionData = $this->processRestExceptionResult($e); + $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $exception->getCode()); + $exceptionData = $this->processRestExceptionResult($exception); $expectedExceptionData = [ 'message' => 'One or more input exceptions have occurred.', 'errors' => [ @@ -261,18 +321,44 @@ private function assertInputExceptionMessages($e) /** * Make sure that status code and message are correct in case of authentication failure. * - * @param \Exception $e + * @param \Exception $exception */ - private function assertInvalidCredentialsException($e) + private function assertInvalidCredentialsException($exception) { - $this->assertEquals(HTTPExceptionCodes::HTTP_UNAUTHORIZED, $e->getCode(), "Response HTTP code is invalid."); - $exceptionData = $this->processRestExceptionResult($e); + $this->assertEquals( + HTTPExceptionCodes::HTTP_UNAUTHORIZED, + $exception->getCode(), + "Response HTTP code is invalid." + ); + $exceptionData = $this->processRestExceptionResult($exception); $expectedExceptionData = [ 'message' => 'You did not sign in correctly or your account is temporarily disabled.' ]; $this->assertEquals($expectedExceptionData, $exceptionData, "Exception message is invalid."); } + /** + * Make sure that status code and message are correct in case of authentication failure. + * + * @param \Exception $exception + */ + private function assertUnauthorizedAccessException($exception) + { + $this->assertEquals( + HTTPExceptionCodes::HTTP_UNAUTHORIZED, + $exception->getCode(), + "Response HTTP code is invalid." + ); + $exceptionData = $this->processRestExceptionResult($exception); + $expectedExceptionData = [ + 'message' => 'Consumer is not authorized to access %resources', + 'parameters' => [ + 'resources' => 'Magento_Backend::store' + ] + ]; + $this->assertEquals($expectedExceptionData, $exceptionData, "Exception message is invalid."); + } + /** * Make sure provided token is valid and belongs to the specified user. * diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php index 56fa848930862..fefb0dad0f319 100644 --- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php +++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php @@ -39,7 +39,7 @@ public function testInvalidateSingleToken() $this->getRequest()->setParam('user_id', $adminUserId); $this->dispatch('backend/admin/user/invalidateToken'); $token = $tokenModel->loadByAdminId($adminUserId); - $this->assertEquals(1, $token->getRevoked()); + $this->assertEquals(null, $token->getId()); } /** diff --git a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php index 32d6f4c352a59..14bbf8af826f4 100644 --- a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php +++ b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php @@ -231,6 +231,7 @@ public function testAuthenticateCaseInsensitive() } /** + * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedException \Magento\Framework\Exception\AuthenticationException * @magentoDbIsolation enabled */ diff --git a/dev/tests/integration/testsuite/Magento/Webapi/_files/webapi_user.php b/dev/tests/integration/testsuite/Magento/Webapi/_files/webapi_user.php index 68962bb2478cb..8aa089f929e65 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/_files/webapi_user.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/_files/webapi_user.php @@ -19,6 +19,6 @@ ->setResourceId('Magento_Backend::all') ->setPrivileges("") ->setAssertId(0) - ->setRoleId(1) + ->setRoleId(2) ->setPermission('allow'); $model->save(); From bc7b241324231c2e01e3cba698e14e653baa0843 Mon Sep 17 00:00:00 2001 From: Mykola Palamar Date: Wed, 26 Jul 2017 19:27:40 +0300 Subject: [PATCH 270/316] MAGETWO-70869: Console errors after turning on CSS merging/minification --- app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php index 5c7bd2cec4053..db35a3ad6b287 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php @@ -114,17 +114,17 @@ public function testEnableProductionMode() ]; $this->writerMock->expects($this->once()) ->method("saveConfig") - ->willReturnCallback(function($data) use (&$dataStorage){ + ->willReturnCallback(function ($data) use (&$dataStorage) { $dataStorage = $data; }); $this->readerMock->expects($this->any()) ->method('load') - ->willReturnCallback(function() use (&$dataStorage){ + ->willReturnCallback(function () use (&$dataStorage) { return $dataStorage[ConfigFilePool::APP_ENV]; }); $this->filesystemMock->expects($this->once()) ->method("regenerateStatic") - ->willReturnCallback(function() use (&$modeModel, &$mode){ + ->willReturnCallback(function () use (&$modeModel, &$mode) { $mode = $modeModel->getMode(); }); $this->model->enableProductionMode(); @@ -140,7 +140,6 @@ public function testEnableProductionMode() public function testEnableDeveloperModeOnFail() { $mode = State::MODE_DEVELOPER; - $modeModel = $this->model; $dataStorage = [ ConfigFilePool::APP_ENV => [ State::PARAM_MODE => State::MODE_DEVELOPER, @@ -152,12 +151,12 @@ public function testEnableDeveloperModeOnFail() [$this->equalTo([ConfigFilePool::APP_ENV => [State::PARAM_MODE => State::MODE_PRODUCTION]])], [$this->equalTo([ConfigFilePool::APP_ENV => [State::PARAM_MODE => State::MODE_DEVELOPER]])] ) - ->willReturnCallback(function($data) use (&$dataStorage){ + ->willReturnCallback(function ($data) use (&$dataStorage) { $dataStorage = $data; }); $this->readerMock->expects($this->any()) ->method('load') - ->willReturnCallback(function() use (&$dataStorage){ + ->willReturnCallback(function () use (&$dataStorage) { return $dataStorage[ConfigFilePool::APP_ENV]; }); $this->filesystemMock->expects($this->once()) From acc5353bd99fdec84a6552c77bbdd04c4536be86 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 13:31:10 +0000 Subject: [PATCH 271/316] Replace Zend_Json in the setup PackagesAuth with the new Serializer\Json --- .../src/Magento/Setup/Model/PackagesAuth.php | 19 +++++++++++++++---- .../Test/Unit/Model/PackagesAuthTest.php | 19 ++++++++++++++++++- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/setup/src/Magento/Setup/Model/PackagesAuth.php b/setup/src/Magento/Setup/Model/PackagesAuth.php index 88a63b5e6f679..bfaf8423a5430 100644 --- a/setup/src/Magento/Setup/Model/PackagesAuth.php +++ b/setup/src/Magento/Setup/Model/PackagesAuth.php @@ -49,19 +49,29 @@ class PackagesAuth */ private $filesystem; + /** + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + /** * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator * @param \Magento\Framework\HTTP\Client\Curl $curl * @param \Magento\Framework\Filesystem $filesystem + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException */ public function __construct( \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator, \Magento\Framework\HTTP\Client\Curl $curl, - \Magento\Framework\Filesystem $filesystem + \Magento\Framework\Filesystem $filesystem, + \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->serviceLocator = $serviceLocator; $this->curlClient = $curl; $this->filesystem = $filesystem; + $this->serializer = $serializer?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** @@ -85,6 +95,7 @@ public function getCredentialBaseUrl() * @param string $token * @param string $secretKey * @return string + * @throws \InvalidArgumentException */ public function checkCredentials($token, $secretKey) { @@ -96,12 +107,12 @@ public function checkCredentials($token, $secretKey) $packagesInfo = $this->curlClient->getBody(); $directory = $this->filesystem->getDirectoryWrite(DirectoryList::COMPOSER_HOME); $directory->writeFile(self::PATH_TO_PACKAGES_FILE, $packagesInfo); - return \Zend_Json::encode(['success' => true]); + return $this->serializer->serialize(['success' => true]); } else { - return \Zend_Json::encode(['success' => false, 'message' => 'Bad credentials']); + return $this->serializer->serialize(['success' => false, 'message' => 'Bad credentials']); } } catch (\Exception $e) { - return \Zend_Json::encode(['success' => false, 'message' => $e->getMessage()]); + return $this->serializer->serialize(['success' => false, 'message' => $e->getMessage()]); } } diff --git a/setup/src/Magento/Setup/Test/Unit/Model/PackagesAuthTest.php b/setup/src/Magento/Setup/Test/Unit/Model/PackagesAuthTest.php index 67307e3adfcef..2c7d6d715d770 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/PackagesAuthTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/PackagesAuthTest.php @@ -28,6 +28,9 @@ class PackagesAuthTest extends \PHPUnit_Framework_TestCase */ private $packagesAuth; + /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ + private $serializerMock; + public function setUp() { $zendServiceLocator = $this->getMock(\Zend\ServiceManager\ServiceLocatorInterface::class, [], [], '', false); @@ -42,7 +45,21 @@ public function setUp() ]); $this->curl = $this->getMock(\Magento\Framework\HTTP\Client\Curl::class, [], [], '', false); $this->filesystem = $this->getMock(\Magento\Framework\Filesystem::class, [], [], '', false); - $this->packagesAuth = new PackagesAuth($zendServiceLocator, $this->curl, $this->filesystem); + $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class) + ->getMock(); + $this->serializerMock->expects($this->any()) + ->method('serialize') + ->willReturnCallback( + function ($serializedData) { + return json_encode($serializedData); + } + ); + $this->packagesAuth = new PackagesAuth( + $zendServiceLocator, + $this->curl, + $this->filesystem, + $this->serializerMock + ); } public function testCheckCredentialsActionBadCredentials() From 097fe0822e811a29f4050cd7c33b5d2ad00b3b59 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 14:23:56 +0000 Subject: [PATCH 272/316] Reformat the method checkCredentials method for a single return --- setup/src/Magento/Setup/Model/PackagesAuth.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/setup/src/Magento/Setup/Model/PackagesAuth.php b/setup/src/Magento/Setup/Model/PackagesAuth.php index bfaf8423a5430..5a29f9953d51b 100644 --- a/setup/src/Magento/Setup/Model/PackagesAuth.php +++ b/setup/src/Magento/Setup/Model/PackagesAuth.php @@ -99,6 +99,7 @@ public function getCredentialBaseUrl() */ public function checkCredentials($token, $secretKey) { + $response = ['success' => true]; $serviceUrl = $this->getPackagesJsonUrl(); $this->curlClient->setCredentials($token, $secretKey); try { @@ -107,13 +108,13 @@ public function checkCredentials($token, $secretKey) $packagesInfo = $this->curlClient->getBody(); $directory = $this->filesystem->getDirectoryWrite(DirectoryList::COMPOSER_HOME); $directory->writeFile(self::PATH_TO_PACKAGES_FILE, $packagesInfo); - return $this->serializer->serialize(['success' => true]); } else { - return $this->serializer->serialize(['success' => false, 'message' => 'Bad credentials']); + $response = ['success' => false, 'message' => 'Bad credentials']; } } catch (\Exception $e) { - return $this->serializer->serialize(['success' => false, 'message' => $e->getMessage()]); + $response = ['success' => false, 'message' => $e->getMessage()]; } + return $this->serializer->serialize($response); } /** From f706fdd738274822302b9916a9b8e1e231f2ab2c Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 15:09:00 +0000 Subject: [PATCH 273/316] Replace Zend_Json usage in Framework/Module/PackageInfo.php - inject the new \Magento\Framework\Serialize\Serializer\Json class, - update the load method to use the Serializer, - update the load method to catch the InvalidArgumentException exception --- .../Magento/Framework/Module/PackageInfo.php | 22 ++++++++++++++----- .../Module/Test/Unit/PackageInfoTest.php | 16 +++++++++++++- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/internal/Magento/Framework/Module/PackageInfo.php b/lib/internal/Magento/Framework/Module/PackageInfo.php index 1fa4c6b824f15..04cb029b02542 100644 --- a/lib/internal/Magento/Framework/Module/PackageInfo.php +++ b/lib/internal/Magento/Framework/Module/PackageInfo.php @@ -58,23 +58,33 @@ class PackageInfo */ protected $nonExistingDependencies = []; + /** + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + /** * Constructor * * @param Dir\Reader $reader * @param ComponentRegistrar $componentRegistrar */ - public function __construct(Dir\Reader $reader, ComponentRegistrar $componentRegistrar) - { + public function __construct( + Dir\Reader $reader, + ComponentRegistrar $componentRegistrar, + \Magento\Framework\Serialize\Serializer\Json $serializer = null + ) { $this->reader = $reader; $this->componentRegistrar = $componentRegistrar; + $this->serializer = $serializer?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** * Load the packages information * * @return void - * @throws \Zend_Json_Exception + * @throws \InvalidArgumentException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function load() @@ -85,9 +95,9 @@ private function load() $key = $moduleDir . '/composer.json'; if (isset($jsonData[$key]) && $jsonData[$key]) { try { - $packageData = \Zend_Json::decode($jsonData[$key]); - } catch (\Zend_Json_Exception $e) { - throw new \Zend_Json_Exception( + $packageData = $this->serializer->unserialize($jsonData[$key]); + } catch (\InvalidArgumentException $e) { + throw new \InvalidArgumentException( sprintf( "%s composer.json error: %s", $moduleName, diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php index e2e95f0d1d149..6c1f172b5c31c 100644 --- a/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php +++ b/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php @@ -54,7 +54,21 @@ protected function setUp() ->method('getComposerJsonFiles') ->will($this->returnValue($fileIteratorMock)); - $this->packageInfo = new PackageInfo($this->reader, $this->componentRegistrar); + $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class) + ->getMock(); + + $this->serializerMock->expects($this->any()) + ->method('unserialize') + ->willReturnCallback( + function ($serializedData) { + return json_decode($serializedData, true); + } + ); + $this->packageInfo = new PackageInfo( + $this->reader, + $this->componentRegistrar, + $this->serializerMock + ); } public function testGetModuleName() From fd155b3019f59cfb236e07797e98e03a7f6106da Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 17:49:56 +0000 Subject: [PATCH 274/316] Update constructor docblock --- lib/internal/Magento/Framework/Module/PackageInfo.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Module/PackageInfo.php b/lib/internal/Magento/Framework/Module/PackageInfo.php index 04cb029b02542..7edb0c04ebf98 100644 --- a/lib/internal/Magento/Framework/Module/PackageInfo.php +++ b/lib/internal/Magento/Framework/Module/PackageInfo.php @@ -64,10 +64,10 @@ class PackageInfo private $serializer; /** - * Constructor - * * @param Dir\Reader $reader * @param ComponentRegistrar $componentRegistrar + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException */ public function __construct( Dir\Reader $reader, From fcd7d5f182a1d410a32ddd75519e67efade9442d Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 15:01:45 +0000 Subject: [PATCH 275/316] Remove the Zend_Json call from the Setup/Migration.php - inject the new \Magento\Framework\Serialize\Serializer\Json class, - update _jsonDecode method parameter default from Zend_Json constant, - update _jsonDecode to call the new Serializer method version --- .../Framework/Module/Setup/Migration.php | 18 ++++++++++--- .../Module/Test/Unit/Setup/MigrationTest.php | 26 +++++++++++++++++-- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/lib/internal/Magento/Framework/Module/Setup/Migration.php b/lib/internal/Magento/Framework/Module/Setup/Migration.php index 13e8d208f70b3..b757c3a3ff36b 100644 --- a/lib/internal/Magento/Framework/Module/Setup/Migration.php +++ b/lib/internal/Magento/Framework/Module/Setup/Migration.php @@ -132,6 +132,11 @@ class Migration */ private $setup; + /** + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + /** * @param ModuleDataSetupInterface $setup * @param Filesystem $filesystem @@ -144,7 +149,8 @@ public function __construct( Filesystem $filesystem, MigrationData $migrationData, $confPathToMapFile, - $compositeModules = [] + $compositeModules = [], + \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->_directory = $filesystem->getDirectoryRead(DirectoryList::ROOT); $this->_pathToMapFile = $confPathToMapFile; @@ -155,6 +161,8 @@ public function __construct( ]; $this->_compositeModules = $compositeModules; $this->setup = $setup; + $this->serializer = $serializer?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** @@ -694,10 +702,12 @@ public function getCompositeModules() * * @param string $encodedValue * @param int $objectDecodeType - * @return mixed + * @return array|bool|float|int|mixed|null|string + * @throws \InvalidArgumentException + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - protected function _jsonDecode($encodedValue, $objectDecodeType = \Zend_Json::TYPE_ARRAY) + protected function _jsonDecode($encodedValue, $objectDecodeType = 1) { - return \Zend_Json::decode($encodedValue, $objectDecodeType); + return $this->serializer->unserialize($encodedValue); } } diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php index a4c23eb5a6220..99b56b0cdcbd0 100644 --- a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php +++ b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/MigrationTest.php @@ -147,7 +147,9 @@ public function testAppendClassAliasReplace() $setupMock, $filesystemMock, $migrationData, - 'app/etc/aliases_to_classes_map.json' + 'app/etc/aliases_to_classes_map.json', + [], + $this->getSerializerMock() ); $setupModel->appendClassAliasReplace( @@ -203,7 +205,8 @@ public function testDoUpdateClassAliases($replaceRules, $tableData, $expected, $ $filesystemMock, $migrationData, 'app/etc/aliases_to_classes_map.json', - $this->_getModelDependencies($tableRowsCount, $tableData, $aliasesMap) + $this->_getModelDependencies($tableRowsCount, $tableData, $aliasesMap), + $this->getSerializerMock() ); foreach ($replaceRules as $replaceRule) { @@ -248,4 +251,23 @@ protected function _getFilesystemMock() $mock = $this->getMockBuilder(\Magento\Framework\Filesystem::class)->disableOriginalConstructor()->getMock(); return $mock; } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Serialize\Serializer\Json + * @throws \PHPUnit_Framework_Exception + */ + private function getSerializerMock() + { + $serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class) + ->getMock(); + + $serializerMock->expects($this->any()) + ->method('unserialize') + ->willReturnCallback( + function ($serializedData) { + return json_decode($serializedData, true); + } + ); + return $serializerMock; + } } From 056f554b4bacebbeadd77142b35bf57e6783405d Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 17:51:26 +0000 Subject: [PATCH 276/316] Update constructor docblock --- lib/internal/Magento/Framework/Module/Setup/Migration.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/internal/Magento/Framework/Module/Setup/Migration.php b/lib/internal/Magento/Framework/Module/Setup/Migration.php index b757c3a3ff36b..683f1260cc12a 100644 --- a/lib/internal/Magento/Framework/Module/Setup/Migration.php +++ b/lib/internal/Magento/Framework/Module/Setup/Migration.php @@ -143,6 +143,8 @@ class Migration * @param MigrationData $migrationData * @param string $confPathToMapFile * @param array $compositeModules + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException */ public function __construct( ModuleDataSetupInterface $setup, From baeb58c483205f1c35071b95acbf544e65dfeace Mon Sep 17 00:00:00 2001 From: dmanners Date: Mon, 17 Jul 2017 11:52:43 +0000 Subject: [PATCH 277/316] Remove the usage of Zend_Json from the controller results json file. - use the \Magento\Framework\Serialize\Serializer\Json instead of Zend_Json --- .../Framework/Controller/Result/Json.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 3349d4507577b..1cbcd17a05f18 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -29,11 +29,22 @@ class Json extends AbstractResult protected $json; /** - * @param \Magento\Framework\Translate\InlineInterface $translateInline + * @var \Magento\Framework\Serialize\Serializer\Json */ - public function __construct(InlineInterface $translateInline) - { + private $serializer; + + /** + * @param InlineInterface $translateInline + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException + */ + public function __construct( + InlineInterface $translateInline, + \Magento\Framework\Serialize\Serializer\Json $serializer = null + ) { $this->translateInline = $translateInline; + $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** @@ -43,10 +54,11 @@ public function __construct(InlineInterface $translateInline) * @param boolean $cycleCheck Optional; whether or not to check for object recursion; off by default * @param array $options Additional options used during encoding * @return $this + * @throws \InvalidArgumentException */ public function setData($data, $cycleCheck = false, $options = []) { - $this->json = \Zend_Json::encode($data, $cycleCheck, $options); + $this->json = $this->serializer->serialize($data); return $this; } From db6f353b2f863a5ee27fc6d14652e083bd64fcce Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 19 Jul 2017 12:08:28 +0000 Subject: [PATCH 278/316] Update the return type for the Adminhtml tax rate controllers --- app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php | 3 ++- app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php index fb6aca4396542..c182fb53b3880 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php @@ -14,7 +14,8 @@ class AjaxLoad extends \Magento\Tax\Controller\Adminhtml\Rate /** * Json needed for the Ajax Edit Form * - * @return void + * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php index 354865e5828ef..f6cd0fff9c9b0 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php @@ -14,6 +14,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Rate * Save Tax Rate via AJAX * * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { From 4f783881d7005012b6c23bf625d542ef88eae3b2 Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 25 Jul 2017 08:10:24 +0000 Subject: [PATCH 279/316] Add ignore for unused parameters on the setData method --- lib/internal/Magento/Framework/Controller/Result/Json.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 1cbcd17a05f18..c84dc3a42c8af 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -55,6 +55,7 @@ public function __construct( * @param array $options Additional options used during encoding * @return $this * @throws \InvalidArgumentException + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function setData($data, $cycleCheck = false, $options = []) { From 7e46cea61dbbcecf04ecd93daf3ee8beb5a24ffd Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 25 Jul 2017 14:20:42 +0000 Subject: [PATCH 280/316] Check to see if we are dealing with an object with a toJson method - if we are dealing with something like new \Magento\Framework\DataObject() being used as a response object --- lib/internal/Magento/Framework/Controller/Result/Json.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index c84dc3a42c8af..61aa937e792d3 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -59,7 +59,11 @@ public function __construct( */ public function setData($data, $cycleCheck = false, $options = []) { - $this->json = $this->serializer->serialize($data); + if (is_object($data) && method_exists($data, 'toJson')) { + $this->json = $data->toJson(); + } else { + $this->json = $this->serializer->serialize($data); + } return $this; } From ff0581b1e9bc4e7b33cb1a3b5294226362642d31 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 09:01:28 +0000 Subject: [PATCH 281/316] Update Controller/Result/Json setData - deprecate this method to encourage usage of other methods in this class, - be stricter on types passed into this method, --- .../Framework/Controller/Result/Json.php | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 61aa937e792d3..820ca4bbb313b 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -50,20 +50,45 @@ public function __construct( /** * Set json data * - * @param mixed $data - * @param boolean $cycleCheck Optional; whether or not to check for object recursion; off by default - * @param array $options Additional options used during encoding - * @return $this + * @param array|string|\Magento\Framework\DataObject $data + * @param bool $cycleCheck + * @param array $options + * @return Json * @throws \InvalidArgumentException + * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @deprecated */ public function setData($data, $cycleCheck = false, $options = []) { - if (is_object($data) && method_exists($data, 'toJson')) { - $this->json = $data->toJson(); - } else { - $this->json = $this->serializer->serialize($data); + if ($data instanceof \Magento\Framework\DataObject) { + return $this->setArrayData($data->toArray()); + } + + if (is_array($data)) { + return $this->setArrayData($data); } + + //Should we validate the json here? + if (is_string($data)) { + return $this->setJsonData($data); + } + + throw new \Magento\Framework\Exception\LocalizedException( + new \Magento\Framework\Phrase('Invalid argument type') + ); + } + + /** + * Should cover this with a test or 2 + * + * @param array $data + * @return $this + * @throws \InvalidArgumentException + */ + public function setArrayData(array $data) + { + $this->setJsonData($this->serializer->serialize($data)); return $this; } From 41e118bb9555235c60a2714afb6188e936aa1927 Mon Sep 17 00:00:00 2001 From: dmanners Date: Wed, 26 Jul 2017 09:46:42 +0000 Subject: [PATCH 282/316] Remove comments in prepration for PR --- lib/internal/Magento/Framework/Controller/Result/Json.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 820ca4bbb313b..2615aa5b94bb2 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -69,7 +69,6 @@ public function setData($data, $cycleCheck = false, $options = []) return $this->setArrayData($data); } - //Should we validate the json here? if (is_string($data)) { return $this->setJsonData($data); } @@ -80,8 +79,6 @@ public function setData($data, $cycleCheck = false, $options = []) } /** - * Should cover this with a test or 2 - * * @param array $data * @return $this * @throws \InvalidArgumentException From cd2c97075a5dd039824237b0f1058d5857aaa0a8 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Wed, 26 Jul 2017 16:54:24 -0500 Subject: [PATCH 283/316] MAGETWO-71061: Remove zend json from migration #10341 --- .../Magento/Framework/Module/Setup/Migration.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/internal/Magento/Framework/Module/Setup/Migration.php b/lib/internal/Magento/Framework/Module/Setup/Migration.php index 683f1260cc12a..d1b47d036a20d 100644 --- a/lib/internal/Magento/Framework/Module/Setup/Migration.php +++ b/lib/internal/Magento/Framework/Module/Setup/Migration.php @@ -707,8 +707,23 @@ public function getCompositeModules() * @return array|bool|float|int|mixed|null|string * @throws \InvalidArgumentException * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @deprecated + * @see \Magento\Framework\Module\Setup\Migration::jsonDecode */ protected function _jsonDecode($encodedValue, $objectDecodeType = 1) + { + return $this->jsonDecode($encodedValue); + } + + /** + * Decodes the given $encodedValue string which is + * encoded in the JSON format + * + * @param string $encodedValue + * @return array|bool|float|int|mixed|null|string + * @throws \InvalidArgumentException + */ + private function jsonDecode($encodedValue) { return $this->serializer->unserialize($encodedValue); } From c4885c9f47c12ff86a672088b1dbb5a56b5f458a Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Wed, 26 Jul 2017 23:05:44 +0100 Subject: [PATCH 284/316] magento/magento2#10045 backwards compatibility --- app/code/Magento/Sitemap/Model/Sitemap.php | 77 ++++++++++++++++++++-- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index a3f1e85400246..470531d974c1b 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -10,6 +10,7 @@ use Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot; use Magento\Framework\App\ObjectManager; +use Magento\Framework\DataObject; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\UrlInterface; use Magento\Robots\Model\Config\Value; @@ -174,6 +175,13 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento */ private $configReader; + /** + * Sitemap Item Factory + * + * @var SitemapItemInterfaceFactory|null + */ + private $sitemapItemFactory; + /** * Initialize dependencies. * @@ -195,6 +203,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento * @param DocumentRoot|null $documentRoot * @param ItemResolverInterface|null $itemResolver * @param SitemapConfigReaderInterface|null $configReader + * @param SitemapItemInterfaceFactory|null $sitemapItemFactory * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -215,11 +224,13 @@ public function __construct( array $data = [], \Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot $documentRoot = null, ItemResolverInterface $itemResolver = null, - SitemapConfigReaderInterface $configReader = null + SitemapConfigReaderInterface $configReader = null, + SitemapItemInterfaceFactory $sitemapItemFactory = null ) { + $objectManager = ObjectManager::getInstance(); $this->_escaper = $escaper; $this->_sitemapData = $sitemapData; - $documentRoot = $documentRoot ?: ObjectManager::getInstance()->get(DocumentRoot::class); + $documentRoot = $documentRoot ?: $objectManager->get(DocumentRoot::class); $this->_directory = $filesystem->getDirectoryWrite($documentRoot->getPath()); $this->_categoryFactory = $categoryFactory; $this->_productFactory = $productFactory; @@ -228,10 +239,11 @@ public function __construct( $this->_storeManager = $storeManager; $this->_request = $request; $this->dateTime = $dateTime; - $this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(ItemResolverInterface::class); - $this->configReader = $configReader ?: ObjectManager::getInstance()->get(SitemapConfigReaderInterface::class); - + $this->itemResolver = $itemResolver ?: $objectManager->get(ItemResolverInterface::class); + $this->configReader = $configReader ?: $objectManager->get(SitemapConfigReaderInterface::class); + $this->sitemapItemFactory = $sitemapItemFactory ?: $objectManager->get(SitemapItemInterfaceFactory::class); parent::__construct($context, $registry, $resource, $resourceCollection, $data); + } /** @@ -259,6 +271,31 @@ protected function _getStream() } } + /** + * Add a sitemap item to the array of sitemap items + * + * @param DataObject $sitemapItem + * @return $this + * @deprecated + */ + public function addSitemapItem(DataObject $sitemapItem) + { + $this->_sitemapItems[] = $sitemapItem; + + return $this; + } + + /** + * Collect all sitemap items + * + * @return void + * @deprecated + */ + public function collectSitemapItems() + { + + } + /** * Initialize sitemap * @@ -266,7 +303,11 @@ protected function _getStream() */ protected function _initSitemapItems() { - $this->_sitemapItems = $this->itemResolver->getItems($this->getStoreId()); + $sitemapItems = $this->itemResolver->getItems($this->getStoreId()); + $this->collectSitemapItems(); + $mappedItems = $this->mapToSitemapItem(); + $this->_sitemapItems = array_merge($sitemapItems, $mappedItems); + $this->_tags = [ self::TYPE_INDEX => [ @@ -740,6 +781,30 @@ private function _findNewLinesDelimiter($text) return PHP_EOL; } + /** + * Sitemap item mapper for backwards compatibility + * + * @return array + */ + private function mapToSitemapItem() + { + $items = []; + + foreach ($this->_sitemapItems as $data) { + foreach($data->getCollection() as $item) { + $items[] = $this->sitemapItemFactory->create([ + 'url' => $item->getUrl(), + 'updatedAt' => $item->getUpdatedAt(), + 'images' => $item->getImages(), + 'priority' => $data->getPriority(), + 'changeFrequency' => $data->getChangeFrequency(), + ]); + } + } + + return $items; + } + /** * Get unique page cache identities * From 458d45bbc05f725fcf1693142cfb907e6dad52c4 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Wed, 26 Jul 2017 23:37:05 +0100 Subject: [PATCH 285/316] magento/magento2#10045 backwards compatibility round 2 --- app/code/Magento/Sitemap/Model/Sitemap.php | 31 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index 470531d974c1b..538b7f571dfea 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -277,6 +277,7 @@ protected function _getStream() * @param DataObject $sitemapItem * @return $this * @deprecated + * @see ItemResolverInterface */ public function addSitemapItem(DataObject $sitemapItem) { @@ -290,10 +291,37 @@ public function addSitemapItem(DataObject $sitemapItem) * * @return void * @deprecated + * @see ItemResolverInterface */ public function collectSitemapItems() { + /** @var $helper \Magento\Sitemap\Helper\Data */ + $helper = $this->_sitemapData; + $storeId = $this->getStoreId(); + $this->addSitemapItem(new DataObject( + [ + 'changefreq' => $helper->getCategoryChangefreq($storeId), + 'priority' => $helper->getCategoryPriority($storeId), + 'collection' => $this->_categoryFactory->create()->getCollection($storeId), + ] + )); + + $this->addSitemapItem(new DataObject( + [ + 'changefreq' => $helper->getProductChangefreq($storeId), + 'priority' => $helper->getProductPriority($storeId), + 'collection' => $this->_productFactory->create()->getCollection($storeId), + ] + )); + + $this->addSitemapItem(new DataObject( + [ + 'changefreq' => $helper->getPageChangefreq($storeId), + 'priority' => $helper->getPagePriority($storeId), + 'collection' => $this->_cmsFactory->create()->getCollection($storeId), + ] + )); } /** @@ -304,7 +332,6 @@ public function collectSitemapItems() protected function _initSitemapItems() { $sitemapItems = $this->itemResolver->getItems($this->getStoreId()); - $this->collectSitemapItems(); $mappedItems = $this->mapToSitemapItem(); $this->_sitemapItems = array_merge($sitemapItems, $mappedItems); @@ -791,7 +818,7 @@ private function mapToSitemapItem() $items = []; foreach ($this->_sitemapItems as $data) { - foreach($data->getCollection() as $item) { + foreach ($data->getCollection() as $item) { $items[] = $this->sitemapItemFactory->create([ 'url' => $item->getUrl(), 'updatedAt' => $item->getUpdatedAt(), From dc80f447a1c7633da63505ff971371b168fb9eab Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Wed, 26 Jul 2017 17:45:00 -0500 Subject: [PATCH 286/316] MAGETWO-71062: Remove zend json from json controller #10342 --- lib/internal/Magento/Framework/Controller/Result/Json.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 2615aa5b94bb2..188dcd6029f56 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -58,6 +58,8 @@ public function __construct( * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @deprecated + * @see Json::setArrayData + * @see Json::setJsonData */ public function setData($data, $cycleCheck = false, $options = []) { From 79490dcbdde1972decc11094170ab7cc17c1110e Mon Sep 17 00:00:00 2001 From: Rustam Honezhukov Date: Tue, 25 Jul 2017 13:00:40 +0300 Subject: [PATCH 287/316] MAGETWO-70790: Cannot remove custom option --- .../Product/Initialization/Helper.php | 76 ++++++++++++------- .../dynamic-rows-import-custom-options.js | 52 +++++-------- 2 files changed, 67 insertions(+), 61 deletions(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php index 9228b9687b82a..1f534ff2833bd 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper.php @@ -8,6 +8,7 @@ use Magento\Catalog\Api\Data\ProductCustomOptionInterfaceFactory as CustomOptionFactory; use Magento\Catalog\Api\Data\ProductLinkInterfaceFactory as ProductLinkFactory; use Magento\Catalog\Api\ProductRepositoryInterface\Proxy as ProductRepository; +use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks; use Magento\Catalog\Model\Product\Link\Resolver as LinkResolver; use Magento\Framework\App\ObjectManager; @@ -203,34 +204,7 @@ public function initializeFromData(\Magento\Catalog\Model\Product $product, arra } $product = $this->setProductLinks($product); - - /** - * Initialize product options - */ - if ($productOptions && !$product->getOptionsReadonly()) { - // mark custom options that should to fall back to default value - $options = $this->mergeProductOptions( - $productOptions, - $this->request->getPost('options_use_default') - ); - $customOptions = []; - foreach ($options as $customOptionData) { - if (empty($customOptionData['is_delete'])) { - if (empty($customOptionData['option_id'])) { - $customOptionData['option_id'] = null; - } - if (isset($customOptionData['values'])) { - $customOptionData['values'] = array_filter($customOptionData['values'], function ($valueData) { - return empty($valueData['is_delete']); - }); - } - $customOption = $this->customOptionFactory->create(['data' => $customOptionData]); - $customOption->setProductSku($product->getSku()); - $customOptions[] = $customOption; - } - } - $product->setOptions($customOptions); - } + $product = $this->fillProductOptions($product, $productOptions); $product->setCanSaveCustomOptions( !empty($productData['affect_product_custom_options']) && !$product->getOptionsReadonly() @@ -427,4 +401,50 @@ private function filterWebsiteIds($websiteIds) return $websiteIds; } + + /** + * Fills $product with options from $productOptions array + * + * @param Product $product + * @param array $productOptions + * @return Product + */ + private function fillProductOptions(Product $product, array $productOptions) + { + if ($product->getOptionsReadonly()) { + return $product; + } + + if (empty($productOptions)) { + return $product->setOptions([]); + } + + // mark custom options that should to fall back to default value + $options = $this->mergeProductOptions( + $productOptions, + $this->request->getPost('options_use_default') + ); + $customOptions = []; + foreach ($options as $customOptionData) { + if (!empty($customOptionData['is_delete'])) { + continue; + } + + if (empty($customOptionData['option_id'])) { + $customOptionData['option_id'] = null; + } + + if (isset($customOptionData['values'])) { + $customOptionData['values'] = array_filter($customOptionData['values'], function ($valueData) { + return empty($valueData['is_delete']); + }); + } + + $customOption = $this->customOptionFactory->create(['data' => $customOptionData]); + $customOption->setProductSku($product->getSku()); + $customOptions[] = $customOption; + } + + return $product->setOptions($customOptions); + } } diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-import-custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-import-custom-options.js index 09fd015d2114d..bcc5ad451a533 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-import-custom-options.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-import-custom-options.js @@ -10,20 +10,6 @@ define([ ], function (DynamicRows, _, utils) { 'use strict'; - var maxId = 0, - - /** - * Stores max option_id value of the options from recordData once on initialization - * @param {Array} data - array with records data - */ - initMaxId = function (data) { - if (data && data.length) { - maxId = ~~_.max(data, function (record) { - return ~~record['option_id']; - })['option_id']; - } - }; - return DynamicRows.extend({ defaults: { mappingSettings: { @@ -38,18 +24,11 @@ define([ identificationDRProperty: 'option_id' }, - /** @inheritdoc */ - initialize: function () { - this._super(); - initMaxId(this.recordData()); - - return this; - }, - /** @inheritdoc */ processingInsertData: function (data) { var options = [], - currentOption; + currentOption, + generalContext = this; if (!data) { return; @@ -70,10 +49,7 @@ define([ } if (currentOption.values.length > 0) { - _.each(currentOption.values, function (optionValue) { - delete optionValue['option_id']; - delete optionValue['option_type_id']; - }); + generalContext.removeOptionsIds(currentOption.values); } options.push(currentOption); }); @@ -91,17 +67,20 @@ define([ }, /** - * Set empty array to dataProvider + * Removes option_id and option_type_id from every option + * + * @param {Array} options */ - clearDataProvider: function () { - this.source.set(this.dataProvider, []); + removeOptionsIds: function (options) { + _.each(options, function (optionValue) { + delete optionValue['option_id']; + delete optionValue['option_type_id']; + }); }, /** @inheritdoc */ processingAddChild: function (ctx, index, prop) { - if (ctx && !_.isNumber(ctx['option_id'])) { - ctx['option_id'] = ++maxId; - } else if (!ctx) { + if (!ctx) { this.showSpinner(true); this.addChild(ctx, index, prop); @@ -111,6 +90,13 @@ define([ this._super(ctx, index, prop); }, + /** + * Set empty array to dataProvider + */ + clearDataProvider: function () { + this.source.set(this.dataProvider, []); + }, + /** * Mutes parent method */ From 50105b415984d471565ddc2f187f891c76ee009e Mon Sep 17 00:00:00 2001 From: alojua Date: Thu, 27 Jul 2017 14:32:32 +0200 Subject: [PATCH 288/316] Add missing block name to allow block customisation --- .../Sales/view/frontend/layout/sales_email_order_renderers.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_renderers.xml index 9eaf7370eaa8b..845d03e119280 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_renderers.xml @@ -8,7 +8,7 @@ - + From 630b2ac8b632860233d63d50fddd62bcd09779bf Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Thu, 27 Jul 2017 09:38:53 -0500 Subject: [PATCH 289/316] MAGETWO-71061: Remove zend json from migration #10341 - fixed docBlock --- lib/internal/Magento/Framework/Module/Setup/Migration.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Module/Setup/Migration.php b/lib/internal/Magento/Framework/Module/Setup/Migration.php index d1b47d036a20d..b417fcb56291a 100644 --- a/lib/internal/Magento/Framework/Module/Setup/Migration.php +++ b/lib/internal/Magento/Framework/Module/Setup/Migration.php @@ -704,7 +704,7 @@ public function getCompositeModules() * * @param string $encodedValue * @param int $objectDecodeType - * @return array|bool|float|int|mixed|null|string + * @return string|int|float|bool|array|null * @throws \InvalidArgumentException * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @deprecated @@ -720,7 +720,7 @@ protected function _jsonDecode($encodedValue, $objectDecodeType = 1) * encoded in the JSON format * * @param string $encodedValue - * @return array|bool|float|int|mixed|null|string + * @return string|int|float|bool|array|null * @throws \InvalidArgumentException */ private function jsonDecode($encodedValue) From 2e70f00a1bf4757f70ea9e07d4a33dcb7a95f8fe Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Thu, 27 Jul 2017 18:07:06 +0300 Subject: [PATCH 290/316] Add missing block name to allow block customisation --- .../frontend/layout/checkout_onepage_review_item_renderers.xml | 2 +- .../frontend/layout/sales_email_order_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_email_order_invoice_renderers.xml | 2 +- .../Bundle/view/frontend/layout/sales_email_order_renderers.xml | 2 +- .../frontend/layout/sales_email_order_shipment_renderers.xml | 2 +- .../view/frontend/layout/sales_order_creditmemo_renderers.xml | 2 +- .../view/frontend/layout/sales_order_invoice_renderers.xml | 2 +- .../Bundle/view/frontend/layout/sales_order_item_renderers.xml | 2 +- .../frontend/layout/sales_order_print_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_order_print_invoice_renderers.xml | 2 +- .../Bundle/view/frontend/layout/sales_order_print_renderers.xml | 2 +- .../frontend/layout/sales_order_print_shipment_renderers.xml | 2 +- .../view/frontend/layout/sales_order_shipment_renderers.xml | 2 +- .../frontend/layout/checkout_onepage_review_item_renderers.xml | 2 +- .../frontend/layout/sales_email_order_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_email_order_invoice_renderers.xml | 2 +- .../view/frontend/layout/sales_email_order_renderers.xml | 2 +- .../view/frontend/layout/sales_order_creditmemo_renderers.xml | 2 +- .../view/frontend/layout/sales_order_invoice_renderers.xml | 2 +- .../view/frontend/layout/sales_order_item_renderers.xml | 2 +- .../frontend/layout/sales_order_print_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_order_print_invoice_renderers.xml | 2 +- .../view/frontend/layout/sales_order_print_renderers.xml | 2 +- .../view/frontend/layout/checkout_cart_item_renderers.xml | 2 +- .../frontend/layout/checkout_onepage_review_item_renderers.xml | 2 +- .../frontend/layout/sales_email_order_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_email_order_invoice_renderers.xml | 2 +- .../view/frontend/layout/sales_email_order_renderers.xml | 2 +- .../view/frontend/layout/sales_order_creditmemo_renderers.xml | 2 +- .../view/frontend/layout/sales_order_invoice_renderers.xml | 2 +- .../view/frontend/layout/sales_order_item_renderers.xml | 2 +- .../frontend/layout/sales_order_print_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_order_print_invoice_renderers.xml | 2 +- .../view/frontend/layout/sales_order_print_renderers.xml | 2 +- .../frontend/layout/sales_email_order_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_email_order_invoice_renderers.xml | 2 +- .../frontend/layout/sales_email_order_shipment_renderers.xml | 2 +- .../view/frontend/layout/sales_order_creditmemo_renderers.xml | 2 +- .../view/frontend/layout/sales_order_invoice_renderers.xml | 2 +- .../Sales/view/frontend/layout/sales_order_item_renderers.xml | 2 +- .../frontend/layout/sales_order_print_creditmemo_renderers.xml | 2 +- .../frontend/layout/sales_order_print_invoice_renderers.xml | 2 +- .../Sales/view/frontend/layout/sales_order_print_renderers.xml | 2 +- .../frontend/layout/sales_order_print_shipment_renderers.xml | 2 +- .../view/frontend/layout/sales_order_shipment_renderers.xml | 2 +- 45 files changed, 45 insertions(+), 45 deletions(-) diff --git a/app/code/Magento/Bundle/view/frontend/layout/checkout_onepage_review_item_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/checkout_onepage_review_item_renderers.xml index dce5945e3221d..686e12da7de21 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/checkout_onepage_review_item_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/checkout_onepage_review_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_creditmemo_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_creditmemo_renderers.xml index 97f07511d2fda..f92a04de2b57c 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_creditmemo_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_invoice_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_invoice_renderers.xml index 1041965f2c77b..051365f99021f 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_invoice_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_renderers.xml index f46300afd518c..b48e196c52866 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_shipment_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_shipment_renderers.xml index d6e8812b02165..c2c80e0ba6763 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_shipment_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_email_order_shipment_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_creditmemo_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_creditmemo_renderers.xml index da9b7fa494ed4..deb7334b726b3 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_creditmemo_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_invoice_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_invoice_renderers.xml index a1c1d23ad4788..c4865e22ad9be 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_invoice_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_item_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_item_renderers.xml index c02075bee5e59..86cfb1c0f7ade 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_item_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_creditmemo_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_creditmemo_renderers.xml index 2f16633a2bcca..bd1310acbcdee 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_creditmemo_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_invoice_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_invoice_renderers.xml index f143da9b57dfe..5bea1dd1c672e 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_invoice_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_renderers.xml index 384a0665a80f7..27c7aabfeb195 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_shipment_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_shipment_renderers.xml index bfa85a0a9c9d8..481d72ae10bdb 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_shipment_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_print_shipment_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Bundle/view/frontend/layout/sales_order_shipment_renderers.xml b/app/code/Magento/Bundle/view/frontend/layout/sales_order_shipment_renderers.xml index e1b6ba0e86130..99124dfeeef93 100644 --- a/app/code/Magento/Bundle/view/frontend/layout/sales_order_shipment_renderers.xml +++ b/app/code/Magento/Bundle/view/frontend/layout/sales_order_shipment_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/checkout_onepage_review_item_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/checkout_onepage_review_item_renderers.xml index a067c9b77d1e8..9929efe85c924 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/checkout_onepage_review_item_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/checkout_onepage_review_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_creditmemo_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_creditmemo_renderers.xml index 5772a322c1c80..34e61b3c59ae4 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_creditmemo_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_invoice_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_invoice_renderers.xml index 8d6e3b364c55a..ab9adf10cc59c 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_invoice_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_renderers.xml index 3aeec25a27a66..8e1866c5028a1 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_email_order_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_creditmemo_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_creditmemo_renderers.xml index e52604bae38bd..fd9acd0268cf6 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_creditmemo_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_invoice_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_invoice_renderers.xml index 6d233cb56be47..75aa46b38c419 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_invoice_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_item_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_item_renderers.xml index 53d2e6c2875bb..89274506eadee 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_item_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_creditmemo_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_creditmemo_renderers.xml index 8720ebe1ce6a4..9bb75ff838549 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_creditmemo_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_invoice_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_invoice_renderers.xml index 2b37982706919..4a3ebd34d5be1 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_invoice_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_renderers.xml b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_renderers.xml index 1077e7db05fb6..1efd0adfc28d6 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_renderers.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/sales_order_print_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_cart_item_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_cart_item_renderers.xml index 958f73c6c1576..03a1d3745220d 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_cart_item_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_cart_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_onepage_review_item_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_onepage_review_item_renderers.xml index dabddb4f4d851..f3bf47e5b17af 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_onepage_review_item_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/checkout_onepage_review_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_creditmemo_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_creditmemo_renderers.xml index 1cd91018be9e7..77875ac70427c 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_creditmemo_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_invoice_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_invoice_renderers.xml index 21cd7dd0173a1..06afa045f574b 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_invoice_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_renderers.xml index e8f56212470a0..afcd902420d15 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_email_order_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_creditmemo_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_creditmemo_renderers.xml index 72da33456f1ec..379f8faafa942 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_creditmemo_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_invoice_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_invoice_renderers.xml index c451fe6baca30..57eeb4c360666 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_invoice_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_item_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_item_renderers.xml index 339ba3629b955..fee947e013c4a 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_item_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_creditmemo_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_creditmemo_renderers.xml index 2d0a482c02d10..5f8ed4a319492 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_creditmemo_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_invoice_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_invoice_renderers.xml index ffa26e8d1ecca..bac5c6a6fef3a 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_invoice_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_renderers.xml b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_renderers.xml index 0d48958e4784c..d20043ee5c9f4 100644 --- a/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_renderers.xml +++ b/app/code/Magento/GroupedProduct/view/frontend/layout/sales_order_print_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_creditmemo_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_creditmemo_renderers.xml index bbbc606a58cd5..e2d859cb66f63 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_creditmemo_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_invoice_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_invoice_renderers.xml index 37d3e468329d7..06520d80e27a3 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_invoice_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_shipment_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_shipment_renderers.xml index 6e1eb26986cc7..48a7c68b538b5 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_email_order_shipment_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_email_order_shipment_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_creditmemo_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_creditmemo_renderers.xml index ff82bcdff2111..1e6b510c8f822 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_creditmemo_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_invoice_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_invoice_renderers.xml index d1c9d765b5101..4cdff0e304f70 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_invoice_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_item_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_item_renderers.xml index c8c94cef5bc4c..d10f957151a12 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_item_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_item_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_creditmemo_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_creditmemo_renderers.xml index a010534052bf5..87a826fbfa448 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_creditmemo_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_creditmemo_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_invoice_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_invoice_renderers.xml index 3ed5b275666d5..34593a20f1188 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_invoice_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_invoice_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_renderers.xml index 1c1d3bf1504ba..095283c89c2ee 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_shipment_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_shipment_renderers.xml index 231b283a12643..57f812e180aa1 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_print_shipment_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_print_shipment_renderers.xml @@ -8,7 +8,7 @@ - + diff --git a/app/code/Magento/Sales/view/frontend/layout/sales_order_shipment_renderers.xml b/app/code/Magento/Sales/view/frontend/layout/sales_order_shipment_renderers.xml index a666ef5d6c5bd..61870813b8659 100644 --- a/app/code/Magento/Sales/view/frontend/layout/sales_order_shipment_renderers.xml +++ b/app/code/Magento/Sales/view/frontend/layout/sales_order_shipment_renderers.xml @@ -8,7 +8,7 @@ - + From fe36cf24a5f1ac8bb584048a59d6ac84a3d86e45 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Thu, 27 Jul 2017 10:19:37 -0500 Subject: [PATCH 291/316] MAGETWO-70872: [WIP]Google Sitemap refactoring - introduce item resolver #10288 - fixed static tests --- app/code/Magento/Sitemap/Model/Sitemap.php | 17 +++++++++-------- .../Unit/Model/ItemResolver/ProductTest.php | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index 538b7f571dfea..6009f43d84545 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -178,7 +178,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento /** * Sitemap Item Factory * - * @var SitemapItemInterfaceFactory|null + * @var \Magento\Sitemap\Model\SitemapItemInterfaceFactory */ private $sitemapItemFactory; @@ -203,7 +203,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento * @param DocumentRoot|null $documentRoot * @param ItemResolverInterface|null $itemResolver * @param SitemapConfigReaderInterface|null $configReader - * @param SitemapItemInterfaceFactory|null $sitemapItemFactory + * @param \Magento\Sitemap\Model\SitemapItemInterfaceFactory|null $sitemapItemFactory * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -225,12 +225,11 @@ public function __construct( \Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot $documentRoot = null, ItemResolverInterface $itemResolver = null, SitemapConfigReaderInterface $configReader = null, - SitemapItemInterfaceFactory $sitemapItemFactory = null + \Magento\Sitemap\Model\SitemapItemInterfaceFactory $sitemapItemFactory = null ) { - $objectManager = ObjectManager::getInstance(); $this->_escaper = $escaper; $this->_sitemapData = $sitemapData; - $documentRoot = $documentRoot ?: $objectManager->get(DocumentRoot::class); + $documentRoot = $documentRoot ?: ObjectManager::getInstance()->get(DocumentRoot::class); $this->_directory = $filesystem->getDirectoryWrite($documentRoot->getPath()); $this->_categoryFactory = $categoryFactory; $this->_productFactory = $productFactory; @@ -239,9 +238,11 @@ public function __construct( $this->_storeManager = $storeManager; $this->_request = $request; $this->dateTime = $dateTime; - $this->itemResolver = $itemResolver ?: $objectManager->get(ItemResolverInterface::class); - $this->configReader = $configReader ?: $objectManager->get(SitemapConfigReaderInterface::class); - $this->sitemapItemFactory = $sitemapItemFactory ?: $objectManager->get(SitemapItemInterfaceFactory::class); + $this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(ItemResolverInterface::class); + $this->configReader = $configReader ?: ObjectManager::getInstance()->get(SitemapConfigReaderInterface::class); + $this->sitemapItemFactory = $sitemapItemFactory ?: ObjectManager::getInstance()->get( + \Magento\Sitemap\Model\SitemapItemInterfaceFactory::class + ); parent::__construct($context, $registry, $resource, $resourceCollection, $data); } diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php index 525742c262a81..0f60849378e4e 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model; +namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; From dcc8684ec7a255ef80496ae33823dce4fdbe3744 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko Date: Fri, 28 Jul 2017 12:25:11 +0300 Subject: [PATCH 292/316] MAGETWO-70683: New registered customer not showed in admin customer grid - add integration test --- .../ResourceModel/Grid/CollectionTest.php | 68 +++++++++++++++++++ ...rid_indexer_enabled_update_on_schedule.php | 11 +++ 2 files changed, 79 insertions(+) create mode 100644 dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php new file mode 100644 index 0000000000000..48dcccd4c9e6a --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php @@ -0,0 +1,68 @@ +objectManager = Bootstrap::getObjectManager(); + $this->indexerRegistry = $this->objectManager->create(IndexerRegistry::class); + $this->targetObject = $this->objectManager + ->create(\Magento\Customer\Model\ResourceModel\Grid\Collection::class); + $this->customerRepository = $this->objectManager->create(CustomerRepositoryInterface::class); + } + + /** + * Customer Grid Indexer can't work in 'Update on Schedule' mode. + * + * @magentoDataFixture Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php + * @magentoDataFixture Magento/Customer/_files/customer_sample.php + */ + public function testGetItemByIdForUpdateOnSchedule() + { + /** Verify after first save */ + /** @var CustomerInterface $newCustomer */ + $newCustomer = $this->customerRepository->get('customer@example.com'); + /** @var CustomerInterface $item */ + $item = $this->targetObject->getItemById($newCustomer->getId()); + $this->assertNotEmpty($item); + $this->assertSame($newCustomer->getEmail(), $item->getEmail()); + $this->assertSame('test street test city Armed Forces Middle East 01001', $item->getBillingFull()); + + /** Verify after update */ + $newCustomer->setEmail('customer_updated@example.com'); + $this->customerRepository->save($newCustomer); + $this->targetObject->clear(); + $item = $this->targetObject->getItemById($newCustomer->getId()); + $this->assertSame($newCustomer->getEmail(), $item->getEmail()); + + /** Rollback indexer to default state */ + $indexer = $this->indexerRegistry->get(\Magento\Customer\Model\Customer::CUSTOMER_GRID_INDEXER_ID); + $indexer->setScheduled(false); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php new file mode 100644 index 0000000000000..72baeceb1cb30 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php @@ -0,0 +1,11 @@ +create(\Magento\Framework\Indexer\IndexerRegistry::class); +$indexer = $indexerRegistry->get(\Magento\Customer\Model\Customer::CUSTOMER_GRID_INDEXER_ID); +$indexer->setScheduled(true); \ No newline at end of file From 8defde0588e4dbeaa01ab9e656b5e2e5443c2974 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko Date: Fri, 28 Jul 2017 13:36:16 +0300 Subject: [PATCH 293/316] MAGETWO-70683: New registered customer not showed in admin customer grid - add comment for test --- .../Customer/Model/ResourceModel/Grid/CollectionTest.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php index 48dcccd4c9e6a..632dc6c0ff034 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php @@ -38,7 +38,11 @@ protected function setUp() } /** - * Customer Grid Indexer can't work in 'Update on Schedule' mode. + * Test updated data for customer grid indexer during save/update customer data(including address data) + * in 'Update on Schedule' mode. + * + * Customer Grid Indexer can't work in 'Update on Schedule' mode. All data for indexer must be updated in realtime + * during save/update customer data(including address data). * * @magentoDataFixture Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php * @magentoDataFixture Magento/Customer/_files/customer_sample.php From a17b4e3b6b814b8a2bea8a1acfea2e40ceabebc7 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko Date: Fri, 28 Jul 2017 14:01:03 +0300 Subject: [PATCH 294/316] MAGETWO-70683: New registered customer not showed in admin customer grid - add rollback for fixture --- .../Model/ResourceModel/Grid/CollectionTest.php | 4 ---- ...id_indexer_enabled_update_on_schedule_rollback.php | 11 +++++++++++ 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php index 632dc6c0ff034..d23113ee3bd06 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php @@ -64,9 +64,5 @@ public function testGetItemByIdForUpdateOnSchedule() $this->targetObject->clear(); $item = $this->targetObject->getItemById($newCustomer->getId()); $this->assertSame($newCustomer->getEmail(), $item->getEmail()); - - /** Rollback indexer to default state */ - $indexer = $this->indexerRegistry->get(\Magento\Customer\Model\Customer::CUSTOMER_GRID_INDEXER_ID); - $indexer->setScheduled(false); } } diff --git a/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php new file mode 100644 index 0000000000000..3ff860cf0b05e --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php @@ -0,0 +1,11 @@ +create(\Magento\Framework\Indexer\IndexerRegistry::class); +$indexer = $indexerRegistry->get(\Magento\Customer\Model\Customer::CUSTOMER_GRID_INDEXER_ID); +$indexer->setScheduled(false); \ No newline at end of file From bd53786fc3488e3768ea1a9e03c1f90d22350e33 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Fri, 28 Jul 2017 15:59:46 +0200 Subject: [PATCH 295/316] Add missing type preference for sample data command --- app/code/Magento/SampleData/etc/di.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/SampleData/etc/di.xml b/app/code/Magento/SampleData/etc/di.xml index 2084664dee641..93cf98a41150c 100644 --- a/app/code/Magento/SampleData/etc/di.xml +++ b/app/code/Magento/SampleData/etc/di.xml @@ -15,5 +15,10 @@ - + + + Magento\Framework\Filesystem\Driver\File + + + From c053bcc8173c7aab0274368b271d98912bc87bfd Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Fri, 28 Jul 2017 17:28:18 +0200 Subject: [PATCH 296/316] Rearrange @codingStandardsIgnoreStart --- app/code/Magento/SampleData/Model/Dependency.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index 380f90d2a9360..1fe48d573a27f 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -43,6 +43,7 @@ class Dependency */ private $directoryReadFactory; + //@codingStandardsIgnoreStart /** * @param ComposerInformation $composerInformation * @param Filesystem $filesystem @@ -51,7 +52,6 @@ class Dependency * @param Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory * @throws \RuntimeException */ - // @codingStandardsIgnoreStart public function __construct( ComposerInformation $composerInformation, // $filesystem kept for BC @@ -61,7 +61,6 @@ public function __construct( // $directoryReadFactory optional for BC Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { - // @codingStandardsIgnoreEnd $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; $this->componentRegistrar = $componentRegistrar; @@ -70,6 +69,7 @@ public function __construct( } $this->directoryReadFactory = $directoryReadFactory; } + //@codingStandardsIgnoreEnd /** * Retrieve list of sample data packages from suggests From 81a184e547d1cd57ff6aa1262b8eb1c7e2e65630 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 28 Jul 2017 14:36:11 -0500 Subject: [PATCH 297/316] MAGETWO-71052: 2.3 version bump --- .../Magento/AdminNotification/composer.json | 12 +- .../AdvancedPricingImportExport/composer.json | 18 +- app/code/Magento/Analytics/composer.json | 12 +- app/code/Magento/Authorization/composer.json | 6 +- app/code/Magento/Authorizenet/composer.json | 20 +- app/code/Magento/Backend/composer.json | 36 +-- app/code/Magento/Backup/composer.json | 10 +- app/code/Magento/Braintree/composer.json | 32 +-- app/code/Magento/Bundle/composer.json | 38 +-- .../Magento/BundleImportExport/composer.json | 14 +- .../Magento/CacheInvalidate/composer.json | 6 +- app/code/Magento/Captcha/composer.json | 12 +- app/code/Magento/Catalog/composer.json | 56 ++-- .../Magento/CatalogAnalytics/composer.json | 6 +- .../Magento/CatalogImportExport/composer.json | 22 +- .../Magento/CatalogInventory/composer.json | 18 +- app/code/Magento/CatalogRule/composer.json | 22 +- .../CatalogRuleConfigurable/composer.json | 12 +- app/code/Magento/CatalogSearch/composer.json | 24 +- .../Magento/CatalogUrlRewrite/composer.json | 20 +- app/code/Magento/CatalogWidget/composer.json | 20 +- app/code/Magento/Checkout/composer.json | 42 +-- .../Magento/CheckoutAgreements/composer.json | 12 +- app/code/Magento/Cms/composer.json | 24 +- app/code/Magento/CmsUrlRewrite/composer.json | 10 +- app/code/Magento/Config/composer.json | 18 +- .../ConfigurableImportExport/composer.json | 14 +- .../Magento/ConfigurableProduct/composer.json | 36 +-- .../ConfigurableProductSales/composer.json | 12 +- app/code/Magento/Contact/composer.json | 12 +- app/code/Magento/Cookie/composer.json | 8 +- app/code/Magento/Cron/composer.json | 8 +- app/code/Magento/CurrencySymbol/composer.json | 14 +- app/code/Magento/Customer/composer.json | 46 ++-- .../Magento/CustomerAnalytics/composer.json | 6 +- .../CustomerImportExport/composer.json | 16 +- app/code/Magento/Deploy/composer.json | 12 +- app/code/Magento/Developer/composer.json | 8 +- app/code/Magento/Dhl/composer.json | 24 +- app/code/Magento/Directory/composer.json | 10 +- app/code/Magento/Downloadable/composer.json | 38 +-- .../DownloadableImportExport/composer.json | 16 +- app/code/Magento/Eav/composer.json | 14 +- app/code/Magento/Email/composer.json | 18 +- app/code/Magento/EncryptionKey/composer.json | 8 +- app/code/Magento/Fedex/composer.json | 20 +- app/code/Magento/GiftMessage/composer.json | 22 +- app/code/Magento/GoogleAdwords/composer.json | 8 +- .../Magento/GoogleAnalytics/composer.json | 12 +- .../Magento/GoogleOptimizer/composer.json | 16 +- .../Magento/GroupedImportExport/composer.json | 14 +- app/code/Magento/GroupedProduct/composer.json | 30 +-- app/code/Magento/ImportExport/composer.json | 14 +- app/code/Magento/Indexer/composer.json | 6 +- app/code/Magento/Integration/composer.json | 16 +- .../Magento/LayeredNavigation/composer.json | 8 +- app/code/Magento/Marketplace/composer.json | 6 +- app/code/Magento/MediaStorage/composer.json | 10 +- app/code/Magento/Msrp/composer.json | 20 +- app/code/Magento/Multishipping/composer.json | 22 +- .../Magento/NewRelicReporting/composer.json | 16 +- app/code/Magento/Newsletter/composer.json | 20 +- .../Magento/OfflinePayments/composer.json | 10 +- .../Magento/OfflineShipping/composer.json | 26 +- app/code/Magento/PageCache/composer.json | 10 +- app/code/Magento/Payment/composer.json | 16 +- app/code/Magento/Paypal/composer.json | 36 +-- app/code/Magento/Persistent/composer.json | 16 +- app/code/Magento/ProductAlert/composer.json | 14 +- app/code/Magento/ProductVideo/composer.json | 18 +- app/code/Magento/Quote/composer.json | 34 +-- app/code/Magento/QuoteAnalytics/composer.json | 6 +- app/code/Magento/Reports/composer.json | 36 +-- app/code/Magento/RequireJs/composer.json | 4 +- app/code/Magento/Review/composer.json | 24 +- .../Magento/ReviewAnalytics/composer.json | 6 +- app/code/Magento/Robots/composer.json | 44 ++-- app/code/Magento/Rss/composer.json | 10 +- app/code/Magento/Rule/composer.json | 12 +- app/code/Magento/Sales/composer.json | 52 ++-- app/code/Magento/SalesAnalytics/composer.json | 6 +- app/code/Magento/SalesInventory/composer.json | 12 +- app/code/Magento/SalesRule/composer.json | 38 +-- app/code/Magento/SalesSequence/composer.json | 4 +- app/code/Magento/SampleData/composer.json | 6 +- app/code/Magento/Search/composer.json | 14 +- app/code/Magento/Security/composer.json | 10 +- app/code/Magento/SendFriend/composer.json | 10 +- app/code/Magento/Shipping/composer.json | 36 +-- app/code/Magento/Sitemap/composer.json | 24 +- app/code/Magento/Store/composer.json | 16 +- app/code/Magento/Swagger/composer.json | 4 +- app/code/Magento/Swatches/composer.json | 26 +- .../SwatchesLayeredNavigation/composer.json | 4 +- app/code/Magento/Tax/composer.json | 32 +-- .../Magento/TaxImportExport/composer.json | 12 +- app/code/Magento/Theme/composer.json | 32 +-- app/code/Magento/Translation/composer.json | 12 +- app/code/Magento/Ui/composer.json | 14 +- app/code/Magento/Ups/composer.json | 20 +- app/code/Magento/UrlRewrite/composer.json | 16 +- app/code/Magento/User/composer.json | 16 +- app/code/Magento/Usps/composer.json | 20 +- app/code/Magento/Variable/composer.json | 10 +- app/code/Magento/Vault/composer.json | 16 +- app/code/Magento/Version/composer.json | 4 +- app/code/Magento/Webapi/composer.json | 14 +- app/code/Magento/WebapiSecurity/composer.json | 6 +- app/code/Magento/Weee/composer.json | 30 +-- app/code/Magento/Widget/composer.json | 20 +- app/code/Magento/Wishlist/composer.json | 34 +-- .../Magento/WishlistAnalytics/composer.json | 6 +- .../adminhtml/Magento/backend/composer.json | 4 +- .../frontend/Magento/blank/composer.json | 4 +- .../frontend/Magento/luma/composer.json | 6 +- app/i18n/Magento/de_DE/composer.json | 4 +- app/i18n/Magento/en_US/composer.json | 4 +- app/i18n/Magento/es_ES/composer.json | 4 +- app/i18n/Magento/fr_FR/composer.json | 4 +- app/i18n/Magento/nl_NL/composer.json | 4 +- app/i18n/Magento/pt_BR/composer.json | 4 +- app/i18n/Magento/zh_Hans_CN/composer.json | 4 +- composer.json | 248 +++++++++--------- lib/internal/Magento/Framework/composer.json | 2 +- 124 files changed, 1146 insertions(+), 1146 deletions(-) diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json index afb820a2e6c93..227837558a8b3 100644 --- a/app/code/Magento/AdminNotification/composer.json +++ b/app/code/Magento/AdminNotification/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*", "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json index 228464ecd6304..acc3e3ead715a 100644 --- a/app/code/Magento/AdvancedPricingImportExport/composer.json +++ b/app/code/Magento/AdvancedPricingImportExport/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-import-export": "100.2.*", - "magento/module-catalog-import-export": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-import-export": "100.3.*", + "magento/module-catalog-import-export": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Analytics/composer.json b/app/code/Magento/Analytics/composer.json index edc3443e487b6..bdea53c445a34 100644 --- a/app/code/Magento/Analytics/composer.json +++ b/app/code/Magento/Analytics/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-integration": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json index a894193888100..5e80365847ce5 100644 --- a/app/code/Magento/Authorization/composer.json +++ b/app/code/Magento/Authorization/composer.json @@ -3,11 +3,11 @@ "description": "Authorization module provides access to Magento ACL functionality.", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Authorizenet/composer.json b/app/code/Magento/Authorizenet/composer.json index 2abfebc3c1cb7..be581500c4020 100644 --- a/app/code/Magento/Authorizenet/composer.json +++ b/app/code/Magento/Authorizenet/composer.json @@ -3,20 +3,20 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-sales": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/framework": "100.2.*" + "magento/module-sales": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json index d3c94c1e286e0..0b141226f7574 100644 --- a/app/code/Magento/Backend/composer.json +++ b/app/code/Magento/Backend/composer.json @@ -3,28 +3,28 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-developer": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-reports": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-user": "100.2.*", - "magento/module-security": "100.2.*", - "magento/module-backup": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-translation": "100.2.*", - "magento/module-require-js": "100.2.*", - "magento/module-config": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-developer": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-reports": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-user": "100.3.*", + "magento/module-security": "100.3.*", + "magento/module-backup": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-translation": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-config": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-theme": "100.2.*" + "magento/module-theme": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json index cc1b13f773480..dc3914a2185a2 100644 --- a/app/code/Magento/Backup/composer.json +++ b/app/code/Magento/Backup/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-cron": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-cron": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Braintree/composer.json b/app/code/Magento/Braintree/composer.json index 67f80ff8dd79a..3e2c9e9c005e6 100644 --- a/app/code/Magento/Braintree/composer.json +++ b/app/code/Magento/Braintree/composer.json @@ -3,28 +3,28 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", + "magento/framework": "100.3.*", "magento/magento-composer-installer": "*", - "magento/module-config": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-vault": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-quote": "100.2.*", - "magento/module-paypal": "100.2.*", - "magento/module-ui": "100.2.*", + "magento/module-config": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-vault": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-quote": "100.3.*", + "magento/module-paypal": "100.3.*", + "magento/module-ui": "100.3.*", "braintree/braintree_php": "3.22.0" }, "suggest": { - "magento/module-checkout-agreements": "100.2.*", - "magento/module-theme": "100.2.*" + "magento/module-checkout-agreements": "100.3.*", + "magento/module-theme": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json index a839c110402d5..2b12028882cfd 100644 --- a/app/code/Magento/Bundle/composer.json +++ b/app/code/Magento/Bundle/composer.json @@ -3,29 +3,29 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-tax": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-catalog-rule": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-gift-message": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-tax": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-catalog-rule": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-gift-message": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-webapi": "100.2.*", - "magento/module-bundle-sample-data": "Sample Data version:100.2.*" + "magento/module-webapi": "100.3.*", + "magento/module-bundle-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/BundleImportExport/composer.json b/app/code/Magento/BundleImportExport/composer.json index 8c45c565785b7..c0193b9eb365f 100644 --- a/app/code/Magento/BundleImportExport/composer.json +++ b/app/code/Magento/BundleImportExport/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-import-export": "100.2.*", - "magento/module-catalog-import-export": "100.2.*", - "magento/module-bundle": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-import-export": "100.3.*", + "magento/module-catalog-import-export": "100.3.*", + "magento/module-bundle": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CacheInvalidate/composer.json b/app/code/Magento/CacheInvalidate/composer.json index feb0466a3744b..c11e55bd448d9 100644 --- a/app/code/Magento/CacheInvalidate/composer.json +++ b/app/code/Magento/CacheInvalidate/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-page-cache": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-page-cache": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json index 08f49a584fbe7..db5ed92fab74b 100644 --- a/app/code/Magento/Captcha/composer.json +++ b/app/code/Magento/Captcha/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*", "zendframework/zend-db": "^2.8.2", "zendframework/zend-captcha": "^2.7.1", "zendframework/zend-session": "^2.7.3" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json index 391d6065fd867..bdf4ac03e2eb6 100644 --- a/app/code/Magento/Catalog/composer.json +++ b/app/code/Magento/Catalog/composer.json @@ -3,38 +3,38 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-indexer": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-wishlist": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-msrp": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-catalog-rule": "100.2.*", - "magento/module-product-alert": "100.2.*", - "magento/module-url-rewrite": "100.2.*", - "magento/module-catalog-url-rewrite": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-indexer": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-wishlist": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-catalog-rule": "100.3.*", + "magento/module-product-alert": "100.3.*", + "magento/module-url-rewrite": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-cookie": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-catalog-sample-data": "Sample Data version:100.2.*" + "magento/module-cookie": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-catalog-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "101.1.0-dev", + "version": "101.2.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogAnalytics/composer.json b/app/code/Magento/CatalogAnalytics/composer.json index 6cda52197f80a..35ebf21515875 100644 --- a/app/code/Magento/CatalogAnalytics/composer.json +++ b/app/code/Magento/CatalogAnalytics/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-catalog": "101.1.*" + "magento/framework": "100.3.*", + "magento/module-catalog": "101.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json index 120c45a70a5bc..ee7c2e8c41870 100644 --- a/app/code/Magento/CatalogImportExport/composer.json +++ b/app/code/Magento/CatalogImportExport/composer.json @@ -3,20 +3,20 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-url-rewrite": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-import-export": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-catalog": "101.2.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/framework": "100.3.*", "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json index 170f28909852c..34df89f295216 100644 --- a/app/code/Magento/CatalogInventory/composer.json +++ b/app/code/Magento/CatalogInventory/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json index ecd464fdc9fc4..96ab069276c6a 100644 --- a/app/code/Magento/CatalogRule/composer.json +++ b/app/code/Magento/CatalogRule/composer.json @@ -3,21 +3,21 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-rule": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-rule": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-import-export": "100.2.*", - "magento/module-catalog-rule-sample-data": "Sample Data version:100.2.*" + "magento/module-import-export": "100.3.*", + "magento/module-catalog-rule-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRuleConfigurable/composer.json b/app/code/Magento/CatalogRuleConfigurable/composer.json index 7817c2712a299..002606b462d30 100644 --- a/app/code/Magento/CatalogRuleConfigurable/composer.json +++ b/app/code/Magento/CatalogRuleConfigurable/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-configurable-product": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-rule": "100.2.*", + "magento/module-configurable-product": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-catalog-rule": "100.3.*", "magento/magento-composer-installer": "*" }, "suggest": { - "magento/module-catalog-rule": "100.2.*" + "magento/module-catalog-rule": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json index 0e328014da0d8..cf93298e1f87f 100644 --- a/app/code/Magento/CatalogSearch/composer.json +++ b/app/code/Magento/CatalogSearch/composer.json @@ -3,20 +3,20 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-search": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-search": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json index 931e1f26f82e8..a806ce1b454c8 100644 --- a/app/code/Magento/CatalogUrlRewrite/composer.json +++ b/app/code/Magento/CatalogUrlRewrite/composer.json @@ -3,18 +3,18 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-import-export": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-import-export": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-url-rewrite": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-catalog-import-export": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-url-rewrite": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogWidget/composer.json b/app/code/Magento/CatalogWidget/composer.json index 6bd93c6eb188b..76d60c275aa78 100644 --- a/app/code/Magento/CatalogWidget/composer.json +++ b/app/code/Magento/CatalogWidget/composer.json @@ -3,18 +3,18 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-widget": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-rule": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-wishlist": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-widget": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-rule": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-wishlist": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json index 7dc6a9ae0ffb4..3b1e2918d477a 100644 --- a/app/code/Magento/Checkout/composer.json +++ b/app/code/Magento/Checkout/composer.json @@ -3,31 +3,31 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-payment": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/module-sales-rule": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-msrp": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-quote": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-payment": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-sales-rule": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-quote": "100.3.*" }, "suggest": { - "magento/module-cookie": "100.2.*" + "magento/module-cookie": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json index 9c8232b8534f3..0fb04e84fcb5d 100644 --- a/app/code/Magento/CheckoutAgreements/composer.json +++ b/app/code/Magento/CheckoutAgreements/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-checkout": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-checkout": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json index 7a8651e7948bb..daa5159643f23 100644 --- a/app/code/Magento/Cms/composer.json +++ b/app/code/Magento/Cms/composer.json @@ -3,22 +3,22 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-email": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-variable": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-email": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-variable": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-cms-sample-data": "Sample Data version:100.2.*" + "magento/module-cms-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "101.1.0-dev", + "version": "101.2.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json index a19d7b262f8c2..a51156b18ab4f 100644 --- a/app/code/Magento/CmsUrlRewrite/composer.json +++ b/app/code/Magento/CmsUrlRewrite/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-url-rewrite": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-url-rewrite": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json index ce4dcc96be187..c3a1d014ac1eb 100644 --- a/app/code/Magento/Config/composer.json +++ b/app/code/Magento/Config/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-cron": "100.2.*", - "magento/module-email": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-deploy": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-cron": "100.3.*", + "magento/module-email": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-deploy": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json index 08c50e53f81a0..3a7beafe5ed2c 100644 --- a/app/code/Magento/ConfigurableImportExport/composer.json +++ b/app/code/Magento/ConfigurableImportExport/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-import-export": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-import-export": "100.2.*", - "magento/module-configurable-product": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-catalog-import-export": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-import-export": "100.3.*", + "magento/module-configurable-product": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json index 970fe638cf89e..fef24da4a3594 100644 --- a/app/code/Magento/ConfigurableProduct/composer.json +++ b/app/code/Magento/ConfigurableProduct/composer.json @@ -3,28 +3,28 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-msrp": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-webapi": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-product-video": "100.2.*", - "magento/module-configurable-sample-data": "Sample Data version:100.2.*", - "magento/module-product-links-sample-data": "Sample Data version:100.2.*" + "magento/module-webapi": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-product-video": "100.3.*", + "magento/module-configurable-sample-data": "Sample Data version:100.3.*", + "magento/module-product-links-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableProductSales/composer.json b/app/code/Magento/ConfigurableProductSales/composer.json index acf7b5c191f8a..555ee9a82a6bb 100644 --- a/app/code/Magento/ConfigurableProductSales/composer.json +++ b/app/code/Magento/ConfigurableProductSales/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-sales": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-sales": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-configurable-product": "100.2.*" + "magento/module-configurable-product": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json index 1872856db8d74..72d6c4bc1b5e3 100644 --- a/app/code/Magento/Contact/composer.json +++ b/app/code/Magento/Contact/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cookie/composer.json b/app/code/Magento/Cookie/composer.json index bb10b2c7af1fb..80d0268715773 100644 --- a/app/code/Magento/Cookie/composer.json +++ b/app/code/Magento/Cookie/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-backend": "100.2.*" + "magento/module-backend": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json index d0a9acbac35b9..8277fa0d1b4fb 100644 --- a/app/code/Magento/Cron/composer.json +++ b/app/code/Magento/Cron/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json index 1efea8538e16e..e53db901eb4b7 100644 --- a/app/code/Magento/CurrencySymbol/composer.json +++ b/app/code/Magento/CurrencySymbol/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json index a8868c2f15ea1..b62b51935d360 100644 --- a/app/code/Magento/Customer/composer.json +++ b/app/code/Magento/Customer/composer.json @@ -3,33 +3,33 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-newsletter": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-wishlist": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-review": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-authorization": "100.2.*", - "magento/module-integration": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-quote": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-newsletter": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-wishlist": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-review": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-integration": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-quote": "100.3.*" }, "suggest": { - "magento/module-cookie": "100.2.*", - "magento/module-customer-sample-data": "Sample Data version:100.2.*" + "magento/module-cookie": "100.3.*", + "magento/module-customer-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CustomerAnalytics/composer.json b/app/code/Magento/CustomerAnalytics/composer.json index 36e7492decc50..199c9b9a1927f 100644 --- a/app/code/Magento/CustomerAnalytics/composer.json +++ b/app/code/Magento/CustomerAnalytics/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-customer": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-customer": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json index e5701887adc71..a874e1c052337 100644 --- a/app/code/Magento/CustomerImportExport/composer.json +++ b/app/code/Magento/CustomerImportExport/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-import-export": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-import-export": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Deploy/composer.json b/app/code/Magento/Deploy/composer.json index 945363bd36401..65d194368d57f 100644 --- a/app/code/Magento/Deploy/composer.json +++ b/app/code/Magento/Deploy/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-require-js": "100.2.*", - "magento/module-user": "100.2.*", - "magento/module-config": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-user": "100.3.*", + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json index 8deb7275c8683..7d54772bb2af2 100644 --- a/app/code/Magento/Developer/composer.json +++ b/app/code/Magento/Developer/composer.json @@ -3,12 +3,12 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-config": "100.2.*" + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json index dcf24bda02e70..49875fa220334 100644 --- a/app/code/Magento/Dhl/composer.json +++ b/app/code/Magento/Dhl/composer.json @@ -3,23 +3,23 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*", "lib-libxml": "*" }, "suggest": { - "magento/module-checkout": "100.2.*" + "magento/module-checkout": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json index f7754c6f0a738..a27720ac86275 100644 --- a/app/code/Magento/Directory/composer.json +++ b/app/code/Magento/Directory/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*", "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json index 7abf19039ad5e..ab27f2ccadc46 100644 --- a/app/code/Magento/Downloadable/composer.json +++ b/app/code/Magento/Downloadable/composer.json @@ -3,29 +3,29 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-gift-message": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-gift-message": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-downloadable-sample-data": "Sample Data version:100.2.*" + "magento/module-downloadable-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/DownloadableImportExport/composer.json b/app/code/Magento/DownloadableImportExport/composer.json index abd094a37db8e..3c647b2270f3c 100644 --- a/app/code/Magento/DownloadableImportExport/composer.json +++ b/app/code/Magento/DownloadableImportExport/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-import-export": "100.2.*", - "magento/module-catalog-import-export": "100.2.*", - "magento/module-downloadable": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-import-export": "100.3.*", + "magento/module-catalog-import-export": "100.3.*", + "magento/module-downloadable": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json index 84029f18878a0..a9605b987b564 100644 --- a/app/code/Magento/Eav/composer.json +++ b/app/code/Magento/Eav/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-config": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-config": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json index 2a30c94c9899f..f01ce69e4c4be 100644 --- a/app/code/Magento/Email/composer.json +++ b/app/code/Magento/Email/composer.json @@ -3,19 +3,19 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-theme": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/module-variable": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-theme": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/module-variable": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-theme": "100.2.*" + "magento/module-theme": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/EncryptionKey/composer.json b/app/code/Magento/EncryptionKey/composer.json index 3b1c700ba9732..644eff1ed579a 100644 --- a/app/code/Magento/EncryptionKey/composer.json +++ b/app/code/Magento/EncryptionKey/composer.json @@ -3,12 +3,12 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json index 2d6b5c24584f9..0b98e3204bcfe 100644 --- a/app/code/Magento/Fedex/composer.json +++ b/app/code/Magento/Fedex/composer.json @@ -3,19 +3,19 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-sales": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-config": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-sales": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-config": "100.3.*", + "magento/framework": "100.3.*", "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json index f164d42881fd5..eeb2e7c1c666b 100644 --- a/app/code/Magento/GiftMessage/composer.json +++ b/app/code/Magento/GiftMessage/composer.json @@ -3,21 +3,21 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-checkout": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-checkout": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-multishipping": "100.2.*" + "magento/module-multishipping": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json index ae4554e3f1f29..4b92e931ac7da 100644 --- a/app/code/Magento/GoogleAdwords/composer.json +++ b/app/code/Magento/GoogleAdwords/composer.json @@ -3,12 +3,12 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json index d163eda692447..73f6a4298f2ec 100644 --- a/app/code/Magento/GoogleAnalytics/composer.json +++ b/app/code/Magento/GoogleAnalytics/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-cookie": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-cookie": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json index 8461e2b5b7d28..b13bcd44f807a 100644 --- a/app/code/Magento/GoogleOptimizer/composer.json +++ b/app/code/Magento/GoogleOptimizer/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-google-analytics": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-cms": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-google-analytics": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-cms": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json index a3fedcae493cf..e1e26262a38ba 100644 --- a/app/code/Magento/GroupedImportExport/composer.json +++ b/app/code/Magento/GroupedImportExport/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-import-export": "100.2.*", - "magento/module-catalog-import-export": "100.2.*", - "magento/module-grouped-product": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-import-export": "100.3.*", + "magento/module-catalog-import-export": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json index 95173e65dc5c8..61e9f6fe20c9f 100644 --- a/app/code/Magento/GroupedProduct/composer.json +++ b/app/code/Magento/GroupedProduct/composer.json @@ -3,25 +3,25 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-msrp": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-grouped-product-sample-data": "Sample Data version:100.2.*" + "magento/module-grouped-product-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json index 8b37cc0360651..10e3c4b9f2c03 100644 --- a/app/code/Magento/ImportExport/composer.json +++ b/app/code/Magento/ImportExport/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-catalog": "101.2.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*", "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json index fbbac51bbb700..9d481c3f97189 100644 --- a/app/code/Magento/Indexer/composer.json +++ b/app/code/Magento/Indexer/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json index 6ded78fbffd80..616c2b0ebb47f 100644 --- a/app/code/Magento/Integration/composer.json +++ b/app/code/Magento/Integration/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-user": "100.2.*", - "magento/module-security": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-authorization": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-user": "100.3.*", + "magento/module-security": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-authorization": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json index d7f900ea1db8f..4d4f791c22b3a 100644 --- a/app/code/Magento/LayeredNavigation/composer.json +++ b/app/code/Magento/LayeredNavigation/composer.json @@ -3,12 +3,12 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Marketplace/composer.json b/app/code/Magento/Marketplace/composer.json index 83ad33e0ff1de..3c9cbc7ca883d 100644 --- a/app/code/Magento/Marketplace/composer.json +++ b/app/code/Magento/Marketplace/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-backend": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-backend": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json index 80e154ebc8ef1..83e95e99b1f59 100644 --- a/app/code/Magento/MediaStorage/composer.json +++ b/app/code/Magento/MediaStorage/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-config": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-config": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json index 587bbe88b4101..3cd5f2be5118a 100644 --- a/app/code/Magento/Msrp/composer.json +++ b/app/code/Magento/Msrp/composer.json @@ -3,20 +3,20 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-downloadable": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-grouped-product": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-bundle": "100.2.*", - "magento/module-msrp-sample-data": "Sample Data version:100.2.*" + "magento/module-bundle": "100.3.*", + "magento/module-msrp-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json index 456248065e949..cd55ca26044c3 100644 --- a/app/code/Magento/Multishipping/composer.json +++ b/app/code/Magento/Multishipping/composer.json @@ -3,21 +3,21 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-directory": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-directory": "100.3.*" }, "suggest": { - "magento/module-theme": "100.2.*" + "magento/module-theme": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/NewRelicReporting/composer.json b/app/code/Magento/NewRelicReporting/composer.json index 63ecfc277e42a..2838837de6074 100644 --- a/app/code/Magento/NewRelicReporting/composer.json +++ b/app/code/Magento/NewRelicReporting/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-configurable-product": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-config": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-config": "100.3.*", + "magento/framework": "100.3.*", "magento/magento-composer-installer": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json index 04d75de1f6f5c..c4338a58def67 100644 --- a/app/code/Magento/Newsletter/composer.json +++ b/app/code/Magento/Newsletter/composer.json @@ -3,18 +3,18 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-email": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-require-js": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-email": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json index 1296d5742199d..a640a5450fac2 100644 --- a/app/code/Magento/OfflinePayments/composer.json +++ b/app/code/Magento/OfflinePayments/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-checkout": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json index a9385effb8986..e5e27779472ca 100644 --- a/app/code/Magento/OfflineShipping/composer.json +++ b/app/code/Magento/OfflineShipping/composer.json @@ -3,23 +3,23 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-sales-rule": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-sales-rule": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-checkout": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-offline-shipping-sample-data": "Sample Data version:100.2.*" + "magento/module-checkout": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-offline-shipping-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json index 8d4b988a77aa7..d60467dd4439f 100644 --- a/app/code/Magento/PageCache/composer.json +++ b/app/code/Magento/PageCache/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json index ef58fc5c09ea7..d93adc44de643 100644 --- a/app/code/Magento/Payment/composer.json +++ b/app/code/Magento/Payment/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Paypal/composer.json b/app/code/Magento/Paypal/composer.json index c525fb9293898..dcfba89a5025d 100644 --- a/app/code/Magento/Paypal/composer.json +++ b/app/code/Magento/Paypal/composer.json @@ -3,29 +3,29 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-eav": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-vault": "100.2.*", + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-eav": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-vault": "100.3.*", "lib-libxml": "*" }, "suggest": { - "magento/module-checkout-agreements": "100.2.*" + "magento/module-checkout-agreements": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json index 516a1c2b4b8ac..9830dafb1fbbc 100644 --- a/app/code/Magento/Persistent/composer.json +++ b/app/code/Magento/Persistent/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-cron": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-cron": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json index 694fb2dda9560..fd798246760f5 100644 --- a/app/code/Magento/ProductAlert/composer.json +++ b/app/code/Magento/ProductAlert/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ProductVideo/composer.json b/app/code/Magento/ProductVideo/composer.json index 9a39534fe3a6c..3a0b607758f1e 100644 --- a/app/code/Magento/ProductVideo/composer.json +++ b/app/code/Magento/ProductVideo/composer.json @@ -3,20 +3,20 @@ "description": "Add Video to Products", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-catalog": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*", "magento/magento-composer-installer": "*" }, "suggest": { - "magento/module-customer": "100.2.*", - "magento/module-config": "100.2.*" + "magento/module-customer": "100.3.*", + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json index f15cb8c72e3bd..9378464b5706f 100644 --- a/app/code/Magento/Quote/composer.json +++ b/app/code/Magento/Quote/composer.json @@ -3,27 +3,27 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-authorization": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-sales-sequence": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-webapi": "100.2.*" + "magento/module-webapi": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/QuoteAnalytics/composer.json b/app/code/Magento/QuoteAnalytics/composer.json index 7f38e489ab0b0..c683a5e25c889 100644 --- a/app/code/Magento/QuoteAnalytics/composer.json +++ b/app/code/Magento/QuoteAnalytics/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-quote": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-quote": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json index 55da507c5e04d..16bae6930436d 100644 --- a/app/code/Magento/Reports/composer.json +++ b/app/code/Magento/Reports/composer.json @@ -3,26 +3,26 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-sales": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-wishlist": "100.2.*", - "magento/module-review": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-downloadable": "100.2.*", - "magento/module-sales-rule": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-sales": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-wishlist": "100.3.*", + "magento/module-review": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-downloadable": "100.3.*", + "magento/module-sales-rule": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json index 093002b35c8a7..21cb7633e4069 100644 --- a/app/code/Magento/RequireJs/composer.json +++ b/app/code/Magento/RequireJs/composer.json @@ -3,10 +3,10 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json index 48fe25430f504..f3506c234a825 100644 --- a/app/code/Magento/Review/composer.json +++ b/app/code/Magento/Review/composer.json @@ -3,22 +3,22 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-newsletter": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-cookie": "100.2.*", - "magento/module-review-sample-data": "Sample Data version:100.2.*" + "magento/module-cookie": "100.3.*", + "magento/module-review-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ReviewAnalytics/composer.json b/app/code/Magento/ReviewAnalytics/composer.json index b31c420e181bf..9f0b58b529a25 100644 --- a/app/code/Magento/ReviewAnalytics/composer.json +++ b/app/code/Magento/ReviewAnalytics/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-review": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-review": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Robots/composer.json b/app/code/Magento/Robots/composer.json index a359918fad7d1..60ea30a751983 100644 --- a/app/code/Magento/Robots/composer.json +++ b/app/code/Magento/Robots/composer.json @@ -1,26 +1,26 @@ { - "name": "magento/module-robots", - "description": "N/A", - "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-store": "100.2.*" - }, - "suggest": { - "magento/module-theme": "100.2.*" - }, - "type": "magento2-module", - "version": "100.2.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], - "autoload": { - "files": [ - "registration.php" + "name": "magento/module-robots", + "description": "N/A", + "require": { + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "magento/framework": "100.3.*", + "magento/module-store": "100.3.*" + }, + "suggest": { + "magento/module-theme": "100.3.*" + }, + "type": "magento2-module", + "version": "100.3.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], - "psr-4": { - "Magento\\Robots\\": "" + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Robots\\": "" + } } - } } diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json index 2c6223f192439..ce474c6405cb0 100644 --- a/app/code/Magento/Rss/composer.json +++ b/app/code/Magento/Rss/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-customer": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-customer": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json index 661e73a86de1e..cec3883a4156c 100644 --- a/app/code/Magento/Rule/composer.json +++ b/app/code/Magento/Rule/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*", "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json index b4bdf144b42bd..aa13be9d0bb05 100644 --- a/app/code/Magento/Sales/composer.json +++ b/app/code/Magento/Sales/composer.json @@ -3,36 +3,36 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-authorization": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/module-sales-rule": "100.2.*", - "magento/module-sales-sequence": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-gift-message": "100.2.*", - "magento/module-reports": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-wishlist": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-quote": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/module-sales-rule": "100.3.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-gift-message": "100.3.*", + "magento/module-reports": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-wishlist": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-quote": "100.3.*" }, "suggest": { - "magento/module-sales-sample-data": "Sample Data version:100.2.*" + "magento/module-sales-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesAnalytics/composer.json b/app/code/Magento/SalesAnalytics/composer.json index 7c9270a503b0d..e9d1eb7084925 100644 --- a/app/code/Magento/SalesAnalytics/composer.json +++ b/app/code/Magento/SalesAnalytics/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-sales": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-sales": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesInventory/composer.json b/app/code/Magento/SalesInventory/composer.json index 133b85be72983..26508eb7c3d45 100644 --- a/app/code/Magento/SalesInventory/composer.json +++ b/app/code/Magento/SalesInventory/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/framework": "100.2.*" + "magento/module-catalog-inventory": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json index 92dd3757e89d1..321dd0569a463 100644 --- a/app/code/Magento/SalesRule/composer.json +++ b/app/code/Magento/SalesRule/composer.json @@ -3,29 +3,29 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-rule": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-sales": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-reports": "100.2.*", - "magento/module-catalog-rule": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-rule": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-sales": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-reports": "100.3.*", + "magento/module-catalog-rule": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-sales-rule-sample-data": "Sample Data version:100.2.*" + "magento/module-sales-rule-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesSequence/composer.json b/app/code/Magento/SalesSequence/composer.json index 7a203bca4e7aa..4d85e90ac9650 100644 --- a/app/code/Magento/SalesSequence/composer.json +++ b/app/code/Magento/SalesSequence/composer.json @@ -3,10 +3,10 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SampleData/composer.json b/app/code/Magento/SampleData/composer.json index 6a43300485240..204d1ae4d0491 100644 --- a/app/code/Magento/SampleData/composer.json +++ b/app/code/Magento/SampleData/composer.json @@ -3,13 +3,13 @@ "description": "Sample Data fixtures", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "suggest": { - "magento/sample-data-media": "Sample Data version:100.2.*" + "magento/sample-data-media": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json index 453e749f183ad..370c82f237c05 100644 --- a/app/code/Magento/Search/composer.json +++ b/app/code/Magento/Search/composer.json @@ -3,15 +3,15 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog-search": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-reports": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog-search": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-reports": "100.3.*", + "magento/module-ui": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Security/composer.json b/app/code/Magento/Security/composer.json index 853bf50dd38d5..2c4ab541d4112 100644 --- a/app/code/Magento/Security/composer.json +++ b/app/code/Magento/Security/composer.json @@ -3,15 +3,15 @@ "description": "Security management module", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-customer": "100.2.*" + "magento/module-customer": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SendFriend/composer.json b/app/code/Magento/SendFriend/composer.json index c4d6860420f99..cc7dc8907449d 100644 --- a/app/code/Magento/SendFriend/composer.json +++ b/app/code/Magento/SendFriend/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json index 8922e286238aa..99c649abbd4fc 100644 --- a/app/code/Magento/Shipping/composer.json +++ b/app/code/Magento/Shipping/composer.json @@ -3,29 +3,29 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-sales": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-contact": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-tax": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-user": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-sales": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-contact": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-tax": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-user": "100.3.*", "ext-gd": "*" }, "suggest": { - "magento/module-fedex": "100.2.*", - "magento/module-ups": "100.2.*", - "magento/module-config": "100.2.*" + "magento/module-fedex": "100.3.*", + "magento/module-ups": "100.3.*", + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json index d5e7b41a72add..ae92c87b2a425 100644 --- a/app/code/Magento/Sitemap/composer.json +++ b/app/code/Magento/Sitemap/composer.json @@ -3,22 +3,22 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-eav": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog-url-rewrite": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-robots": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-eav": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-robots": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index 08166068b743b..f2ebfa675c158 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -3,18 +3,18 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-directory": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-directory": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-deploy": "100.2.*" + "magento/module-deploy": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swagger/composer.json b/app/code/Magento/Swagger/composer.json index c49e3e6bffb6f..fc6325e55de0f 100644 --- a/app/code/Magento/Swagger/composer.json +++ b/app/code/Magento/Swagger/composer.json @@ -3,10 +3,10 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swatches/composer.json b/app/code/Magento/Swatches/composer.json index 1ea213d10804a..02b55515cd357 100644 --- a/app/code/Magento/Swatches/composer.json +++ b/app/code/Magento/Swatches/composer.json @@ -3,23 +3,23 @@ "description": "Add Swatches to Products", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-configurable-product": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-layered-navigation": "100.2.*", - "magento/module-swatches-sample-data": "Sample Data version:100.2.*" + "magento/module-layered-navigation": "100.3.*", + "magento/module-swatches-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/SwatchesLayeredNavigation/composer.json b/app/code/Magento/SwatchesLayeredNavigation/composer.json index 1e763bc552bfd..efcf164cbb351 100644 --- a/app/code/Magento/SwatchesLayeredNavigation/composer.json +++ b/app/code/Magento/SwatchesLayeredNavigation/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", + "magento/framework": "100.3.*", "magento/magento-composer-installer": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json index a2cbab1fffbac..6041b428d9845 100644 --- a/app/code/Magento/Tax/composer.json +++ b/app/code/Magento/Tax/composer.json @@ -3,26 +3,26 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-customer": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-reports": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-config": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-customer": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-reports": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-tax-sample-data": "Sample Data version:100.2.*" + "magento/module-tax-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json index 2f9798999a890..0c8960e2e5943 100644 --- a/app/code/Magento/TaxImportExport/composer.json +++ b/app/code/Magento/TaxImportExport/composer.json @@ -3,14 +3,14 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-tax": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-tax": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json index 21979ba583df1..e711a4cbdc75c 100644 --- a/app/code/Magento/Theme/composer.json +++ b/app/code/Magento/Theme/composer.json @@ -3,26 +3,26 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-eav": "100.2.*", - "magento/module-widget": "100.2.*", - "magento/module-config": "100.2.*", - "magento/module-media-storage": "100.2.*", - "magento/module-ui": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-require-js": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-eav": "100.3.*", + "magento/module-widget": "100.3.*", + "magento/module-config": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-ui": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-require-js": "100.3.*" }, "suggest": { - "magento/module-translation": "100.2.*", - "magento/module-theme-sample-data": "Sample Data version:100.2.*", - "magento/module-deploy": "100.2.*", - "magento/module-directory": "100.2.*" + "magento/module-translation": "100.3.*", + "magento/module-theme-sample-data": "Sample Data version:100.3.*", + "magento/module-deploy": "100.3.*", + "magento/module-directory": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json index 475abede960e0..178fe20c052c9 100644 --- a/app/code/Magento/Translation/composer.json +++ b/app/code/Magento/Translation/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/module-developer": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/module-developer": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-deploy": "100.2.*" + "magento/module-deploy": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index 281a765141cf4..711c1b7e2acea 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-authorization": "100.2.*", - "magento/module-user": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-user": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json index 90ec2a62b89c5..3a6ee38593717 100644 --- a/app/code/Magento/Ups/composer.json +++ b/app/code/Magento/Ups/composer.json @@ -3,20 +3,20 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json index 87e033e994159..b848111d30c0a 100644 --- a/app/code/Magento/UrlRewrite/composer.json +++ b/app/code/Magento/UrlRewrite/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-catalog": "101.1.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog-url-rewrite": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-cms-url-rewrite": "100.2.*" + "magento/module-catalog": "101.2.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-cms-url-rewrite": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json index 38e4061250c9a..d2a5faf4b2955 100644 --- a/app/code/Magento/User/composer.json +++ b/app/code/Magento/User/composer.json @@ -3,16 +3,16 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-authorization": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-security": "100.2.*", - "magento/module-integration": "100.2.*", - "magento/module-email": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-security": "100.3.*", + "magento/module-integration": "100.3.*", + "magento/module-email": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json index 4b598813f0722..40eb87d8caf76 100644 --- a/app/code/Magento/Usps/composer.json +++ b/app/code/Magento/Usps/composer.json @@ -3,19 +3,19 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-shipping": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-sales": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-config": "100.2.*", - "magento/framework": "100.2.*", + "magento/module-store": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-sales": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-config": "100.3.*", + "magento/framework": "100.3.*", "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json index 19529620dc8e5..cd1e1d27ba83d 100644 --- a/app/code/Magento/Variable/composer.json +++ b/app/code/Magento/Variable/composer.json @@ -3,13 +3,13 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-backend": "100.2.*", - "magento/module-email": "100.2.*", - "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-backend": "100.3.*", + "magento/module-email": "100.3.*", + "magento/module-store": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Vault/composer.json b/app/code/Magento/Vault/composer.json index bb398cf63c5d1..68cb94bac7634 100644 --- a/app/code/Magento/Vault/composer.json +++ b/app/code/Magento/Vault/composer.json @@ -3,16 +3,16 @@ "description": "", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-store": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/module-payment": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-quote": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-store": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-quote": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "proprietary" ], diff --git a/app/code/Magento/Version/composer.json b/app/code/Magento/Version/composer.json index f12e3e8cb7167..8a39a9bf2eb8f 100644 --- a/app/code/Magento/Version/composer.json +++ b/app/code/Magento/Version/composer.json @@ -3,10 +3,10 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json index 13f4f45eb878b..47de350d7ef70 100644 --- a/app/code/Magento/Webapi/composer.json +++ b/app/code/Magento/Webapi/composer.json @@ -3,17 +3,17 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-authorization": "100.2.*", - "magento/module-integration": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-integration": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/framework": "100.3.*" }, "suggest": { - "magento/module-user": "100.2.*" + "magento/module-user": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/WebapiSecurity/composer.json b/app/code/Magento/WebapiSecurity/composer.json index 4573837852276..0a4bfaa3756cc 100644 --- a/app/code/Magento/WebapiSecurity/composer.json +++ b/app/code/Magento/WebapiSecurity/composer.json @@ -3,11 +3,11 @@ "description": "WebapiSecurity module provides option to loosen security on some webapi resources.", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-webapi": "100.2.*", - "magento/framework": "100.2.*" + "magento/module-webapi": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json index 29cf6d149b41d..3d96c187ebca9 100644 --- a/app/code/Magento/Weee/composer.json +++ b/app/code/Magento/Weee/composer.json @@ -3,25 +3,25 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-tax": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-directory": "100.2.*", - "magento/module-eav": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-page-cache": "100.2.*", - "magento/module-quote": "100.2.*", - "magento/module-checkout": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-tax": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-bundle": "100.2.*" + "magento/module-bundle": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json index f953076eaec69..f0662f66f8ef7 100644 --- a/app/code/Magento/Widget/composer.json +++ b/app/code/Magento/Widget/composer.json @@ -3,20 +3,20 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-cms": "101.1.*", - "magento/module-backend": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-email": "100.2.*", - "magento/module-theme": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-variable": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-cms": "101.2.*", + "magento/module-backend": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-email": "100.3.*", + "magento/module-theme": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-variable": "100.3.*" }, "suggest": { - "magento/module-widget-sample-data": "Sample Data version:100.2.*" + "magento/module-widget-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json index ac6554d3c5fa8..cb636316ed776 100644 --- a/app/code/Magento/Wishlist/composer.json +++ b/app/code/Magento/Wishlist/composer.json @@ -3,27 +3,27 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-customer": "100.2.*", - "magento/module-catalog": "101.1.*", - "magento/module-checkout": "100.2.*", - "magento/module-catalog-inventory": "100.2.*", - "magento/module-rss": "100.2.*", - "magento/module-backend": "100.2.*", - "magento/module-sales": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-ui": "100.2.*" + "magento/module-store": "100.3.*", + "magento/module-customer": "100.3.*", + "magento/module-catalog": "101.2.*", + "magento/module-checkout": "100.3.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-rss": "100.3.*", + "magento/module-backend": "100.3.*", + "magento/module-sales": "100.3.*", + "magento/framework": "100.3.*", + "magento/module-ui": "100.3.*" }, "suggest": { - "magento/module-configurable-product": "100.2.*", - "magento/module-downloadable": "100.2.*", - "magento/module-bundle": "100.2.*", - "magento/module-cookie": "100.2.*", - "magento/module-grouped-product": "100.2.*", - "magento/module-wishlist-sample-data": "Sample Data version:100.2.*" + "magento/module-configurable-product": "100.3.*", + "magento/module-downloadable": "100.3.*", + "magento/module-bundle": "100.3.*", + "magento/module-cookie": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-wishlist-sample-data": "Sample Data version:100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/WishlistAnalytics/composer.json b/app/code/Magento/WishlistAnalytics/composer.json index 20f414c00c320..8a3fb3a5189d0 100644 --- a/app/code/Magento/WishlistAnalytics/composer.json +++ b/app/code/Magento/WishlistAnalytics/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-wishlist": "100.2.*" + "magento/framework": "100.3.*", + "magento/module-wishlist": "100.3.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "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 79ea84474fe29..9556e4607a8e9 100644 --- a/app/design/adminhtml/Magento/backend/composer.json +++ b/app/design/adminhtml/Magento/backend/composer.json @@ -3,10 +3,10 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-theme", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "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 03d38590071f6..de7e2a89f97bb 100644 --- a/app/design/frontend/Magento/blank/composer.json +++ b/app/design/frontend/Magento/blank/composer.json @@ -3,10 +3,10 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-theme", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "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 400e923d446a1..c23b5dbe6894b 100644 --- a/app/design/frontend/Magento/luma/composer.json +++ b/app/design/frontend/Magento/luma/composer.json @@ -3,11 +3,11 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/theme-frontend-blank": "100.2.*", - "magento/framework": "100.2.*" + "magento/theme-frontend-blank": "100.3.*", + "magento/framework": "100.3.*" }, "type": "magento2-theme", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "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 49029b06c2fec..aa7c32f61a84d 100644 --- a/app/i18n/Magento/de_DE/composer.json +++ b/app/i18n/Magento/de_DE/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-de_de", "description": "German (Germany) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/app/i18n/Magento/en_US/composer.json b/app/i18n/Magento/en_US/composer.json index 73be2ed8ddd7c..ec7b9d4805d07 100644 --- a/app/i18n/Magento/en_US/composer.json +++ b/app/i18n/Magento/en_US/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-en_us", "description": "English (United States) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/app/i18n/Magento/es_ES/composer.json b/app/i18n/Magento/es_ES/composer.json index 1403990ed8f62..f3834bbdf5ad3 100644 --- a/app/i18n/Magento/es_ES/composer.json +++ b/app/i18n/Magento/es_ES/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-es_es", "description": "Spanish (Spain) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/app/i18n/Magento/fr_FR/composer.json b/app/i18n/Magento/fr_FR/composer.json index fbb3608386704..a3703a8c216bc 100644 --- a/app/i18n/Magento/fr_FR/composer.json +++ b/app/i18n/Magento/fr_FR/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-fr_fr", "description": "French (France) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/app/i18n/Magento/nl_NL/composer.json b/app/i18n/Magento/nl_NL/composer.json index 54cff8f4dbd0a..8ea5b3f013428 100644 --- a/app/i18n/Magento/nl_NL/composer.json +++ b/app/i18n/Magento/nl_NL/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-nl_nl", "description": "Dutch (Netherlands) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/app/i18n/Magento/pt_BR/composer.json b/app/i18n/Magento/pt_BR/composer.json index f758005cda9f8..681c4978176fe 100644 --- a/app/i18n/Magento/pt_BR/composer.json +++ b/app/i18n/Magento/pt_BR/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-pt_br", "description": "Portuguese (Brazil) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/app/i18n/Magento/zh_Hans_CN/composer.json b/app/i18n/Magento/zh_Hans_CN/composer.json index f125443ca48cd..91e6f86901984 100644 --- a/app/i18n/Magento/zh_Hans_CN/composer.json +++ b/app/i18n/Magento/zh_Hans_CN/composer.json @@ -1,13 +1,13 @@ { "name": "magento/language-zh_hans_cn", "description": "Chinese (China) language", - "version": "100.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { - "magento/framework": "100.2.*" + "magento/framework": "100.3.*" }, "type": "magento2-language", "autoload": { diff --git a/composer.json b/composer.json index 722a98baa63d2..f2fc0f9744622 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2ce", "description": "Magento 2 (Community Edition)", "type": "project", - "version": "2.2.0-dev", + "version": "2.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" @@ -83,129 +83,129 @@ "sebastian/phpcpd": "2.0.4" }, "replace": { - "magento/module-marketplace": "100.2.0-dev", - "magento/module-admin-notification": "100.2.0-dev", - "magento/module-advanced-pricing-import-export": "100.2.0-dev", - "magento/module-analytics": "100.2.0-dev", - "magento/module-authorization": "100.2.0-dev", - "magento/module-authorizenet": "100.2.0-dev", - "magento/module-backend": "100.2.0-dev", - "magento/module-backup": "100.2.0-dev", - "magento/module-braintree": "100.2.0-dev", - "magento/module-bundle": "100.2.0-dev", - "magento/module-bundle-import-export": "100.2.0-dev", - "magento/module-cache-invalidate": "100.2.0-dev", - "magento/module-captcha": "100.2.0-dev", - "magento/module-catalog": "101.1.0-dev", - "magento/module-catalog-analytics": "100.2.0-dev", - "magento/module-catalog-import-export": "100.2.0-dev", - "magento/module-catalog-inventory": "100.2.0-dev", - "magento/module-catalog-rule": "100.2.0-dev", - "magento/module-catalog-rule-configurable": "100.2.0-dev", - "magento/module-catalog-search": "100.2.0-dev", - "magento/module-catalog-url-rewrite": "100.2.0-dev", - "magento/module-catalog-widget": "100.2.0-dev", - "magento/module-checkout": "100.2.0-dev", - "magento/module-checkout-agreements": "100.2.0-dev", - "magento/module-cms": "101.1.0-dev", - "magento/module-cms-url-rewrite": "100.2.0-dev", - "magento/module-config": "100.2.0-dev", - "magento/module-configurable-import-export": "100.2.0-dev", - "magento/module-configurable-product": "100.2.0-dev", - "magento/module-configurable-product-sales": "100.2.0-dev", - "magento/module-contact": "100.2.0-dev", - "magento/module-cookie": "100.2.0-dev", - "magento/module-cron": "100.2.0-dev", - "magento/module-currency-symbol": "100.2.0-dev", - "magento/module-customer": "100.2.0-dev", - "magento/module-customer-analytics": "100.2.0-dev", - "magento/module-customer-import-export": "100.2.0-dev", - "magento/module-deploy": "100.2.0-dev", - "magento/module-developer": "100.2.0-dev", - "magento/module-dhl": "100.2.0-dev", - "magento/module-directory": "100.2.0-dev", - "magento/module-downloadable": "100.2.0-dev", - "magento/module-downloadable-import-export": "100.2.0-dev", - "magento/module-eav": "100.2.0-dev", - "magento/module-email": "100.2.0-dev", - "magento/module-encryption-key": "100.2.0-dev", - "magento/module-fedex": "100.2.0-dev", - "magento/module-gift-message": "100.2.0-dev", - "magento/module-google-adwords": "100.2.0-dev", - "magento/module-google-analytics": "100.2.0-dev", - "magento/module-google-optimizer": "100.2.0-dev", - "magento/module-grouped-import-export": "100.2.0-dev", - "magento/module-grouped-product": "100.2.0-dev", - "magento/module-import-export": "100.2.0-dev", - "magento/module-indexer": "100.2.0-dev", - "magento/module-integration": "100.2.0-dev", - "magento/module-layered-navigation": "100.2.0-dev", - "magento/module-media-storage": "100.2.0-dev", - "magento/module-msrp": "100.2.0-dev", - "magento/module-multishipping": "100.2.0-dev", - "magento/module-new-relic-reporting": "100.2.0-dev", - "magento/module-newsletter": "100.2.0-dev", - "magento/module-offline-payments": "100.2.0-dev", - "magento/module-offline-shipping": "100.2.0-dev", - "magento/module-page-cache": "100.2.0-dev", - "magento/module-payment": "100.2.0-dev", - "magento/module-paypal": "100.2.0-dev", - "magento/module-persistent": "100.2.0-dev", - "magento/module-product-alert": "100.2.0-dev", - "magento/module-product-video": "100.2.0-dev", - "magento/module-quote": "100.2.0-dev", - "magento/module-quote-analytics": "100.2.0-dev", - "magento/module-reports": "100.2.0-dev", - "magento/module-require-js": "100.2.0-dev", - "magento/module-review": "100.2.0-dev", - "magento/module-review-analytics": "100.2.0-dev", - "magento/module-robots": "100.2.0-dev", - "magento/module-rss": "100.2.0-dev", - "magento/module-rule": "100.2.0-dev", - "magento/module-sales": "100.2.0-dev", - "magento/module-sales-analytics": "100.2.0-dev", - "magento/module-sales-inventory": "100.2.0-dev", - "magento/module-sales-rule": "100.2.0-dev", - "magento/module-sales-sequence": "100.2.0-dev", - "magento/module-sample-data": "100.2.0-dev", - "magento/module-search": "100.2.0-dev", - "magento/module-security": "100.2.0-dev", - "magento/module-send-friend": "100.2.0-dev", - "magento/module-shipping": "100.2.0-dev", - "magento/module-sitemap": "100.2.0-dev", - "magento/module-store": "100.2.0-dev", - "magento/module-swagger": "100.2.0-dev", - "magento/module-swatches": "100.2.0-dev", - "magento/module-swatches-layered-navigation": "100.2.0-dev", - "magento/module-tax": "100.2.0-dev", - "magento/module-tax-import-export": "100.2.0-dev", - "magento/module-theme": "100.2.0-dev", - "magento/module-translation": "100.2.0-dev", - "magento/module-ui": "100.2.0-dev", - "magento/module-ups": "100.2.0-dev", - "magento/module-url-rewrite": "100.2.0-dev", - "magento/module-user": "100.2.0-dev", - "magento/module-usps": "100.2.0-dev", - "magento/module-variable": "100.2.0-dev", - "magento/module-vault": "100.2.0-dev", - "magento/module-version": "100.2.0-dev", - "magento/module-webapi": "100.2.0-dev", - "magento/module-webapi-security": "100.2.0-dev", - "magento/module-weee": "100.2.0-dev", - "magento/module-widget": "100.2.0-dev", - "magento/module-wishlist": "100.2.0-dev", - "magento/module-wishlist-analytics": "100.2.0-dev", - "magento/theme-adminhtml-backend": "100.2.0-dev", - "magento/theme-frontend-blank": "100.2.0-dev", - "magento/theme-frontend-luma": "100.2.0-dev", - "magento/language-de_de": "100.2.0-dev", - "magento/language-en_us": "100.2.0-dev", - "magento/language-es_es": "100.2.0-dev", - "magento/language-fr_fr": "100.2.0-dev", - "magento/language-nl_nl": "100.2.0-dev", - "magento/language-pt_br": "100.2.0-dev", - "magento/language-zh_hans_cn": "100.2.0-dev", - "magento/framework": "100.2.0-dev", + "magento/module-marketplace": "100.3.0-dev", + "magento/module-admin-notification": "100.3.0-dev", + "magento/module-advanced-pricing-import-export": "100.3.0-dev", + "magento/module-analytics": "100.3.0-dev", + "magento/module-authorization": "100.3.0-dev", + "magento/module-authorizenet": "100.3.0-dev", + "magento/module-backend": "100.3.0-dev", + "magento/module-backup": "100.3.0-dev", + "magento/module-braintree": "100.3.0-dev", + "magento/module-bundle": "100.3.0-dev", + "magento/module-bundle-import-export": "100.3.0-dev", + "magento/module-cache-invalidate": "100.3.0-dev", + "magento/module-captcha": "100.3.0-dev", + "magento/module-catalog": "101.2.0-dev", + "magento/module-catalog-analytics": "100.3.0-dev", + "magento/module-catalog-import-export": "100.3.0-dev", + "magento/module-catalog-inventory": "100.3.0-dev", + "magento/module-catalog-rule": "100.3.0-dev", + "magento/module-catalog-rule-configurable": "100.3.0-dev", + "magento/module-catalog-search": "100.3.0-dev", + "magento/module-catalog-url-rewrite": "100.3.0-dev", + "magento/module-catalog-widget": "100.3.0-dev", + "magento/module-checkout": "100.3.0-dev", + "magento/module-checkout-agreements": "100.3.0-dev", + "magento/module-cms": "101.2.0-dev", + "magento/module-cms-url-rewrite": "100.3.0-dev", + "magento/module-config": "100.3.0-dev", + "magento/module-configurable-import-export": "100.3.0-dev", + "magento/module-configurable-product": "100.3.0-dev", + "magento/module-configurable-product-sales": "100.3.0-dev", + "magento/module-contact": "100.3.0-dev", + "magento/module-cookie": "100.3.0-dev", + "magento/module-cron": "100.3.0-dev", + "magento/module-currency-symbol": "100.3.0-dev", + "magento/module-customer": "100.3.0-dev", + "magento/module-customer-analytics": "100.3.0-dev", + "magento/module-customer-import-export": "100.3.0-dev", + "magento/module-deploy": "100.3.0-dev", + "magento/module-developer": "100.3.0-dev", + "magento/module-dhl": "100.3.0-dev", + "magento/module-directory": "100.3.0-dev", + "magento/module-downloadable": "100.3.0-dev", + "magento/module-downloadable-import-export": "100.3.0-dev", + "magento/module-eav": "100.3.0-dev", + "magento/module-email": "100.3.0-dev", + "magento/module-encryption-key": "100.3.0-dev", + "magento/module-fedex": "100.3.0-dev", + "magento/module-gift-message": "100.3.0-dev", + "magento/module-google-adwords": "100.3.0-dev", + "magento/module-google-analytics": "100.3.0-dev", + "magento/module-google-optimizer": "100.3.0-dev", + "magento/module-grouped-import-export": "100.3.0-dev", + "magento/module-grouped-product": "100.3.0-dev", + "magento/module-import-export": "100.3.0-dev", + "magento/module-indexer": "100.3.0-dev", + "magento/module-integration": "100.3.0-dev", + "magento/module-layered-navigation": "100.3.0-dev", + "magento/module-media-storage": "100.3.0-dev", + "magento/module-msrp": "100.3.0-dev", + "magento/module-multishipping": "100.3.0-dev", + "magento/module-new-relic-reporting": "100.3.0-dev", + "magento/module-newsletter": "100.3.0-dev", + "magento/module-offline-payments": "100.3.0-dev", + "magento/module-offline-shipping": "100.3.0-dev", + "magento/module-page-cache": "100.3.0-dev", + "magento/module-payment": "100.3.0-dev", + "magento/module-paypal": "100.3.0-dev", + "magento/module-persistent": "100.3.0-dev", + "magento/module-product-alert": "100.3.0-dev", + "magento/module-product-video": "100.3.0-dev", + "magento/module-quote": "100.3.0-dev", + "magento/module-quote-analytics": "100.3.0-dev", + "magento/module-reports": "100.3.0-dev", + "magento/module-require-js": "100.3.0-dev", + "magento/module-review": "100.3.0-dev", + "magento/module-review-analytics": "100.3.0-dev", + "magento/module-robots": "100.3.0-dev", + "magento/module-rss": "100.3.0-dev", + "magento/module-rule": "100.3.0-dev", + "magento/module-sales": "100.3.0-dev", + "magento/module-sales-analytics": "100.3.0-dev", + "magento/module-sales-inventory": "100.3.0-dev", + "magento/module-sales-rule": "100.3.0-dev", + "magento/module-sales-sequence": "100.3.0-dev", + "magento/module-sample-data": "100.3.0-dev", + "magento/module-search": "100.3.0-dev", + "magento/module-security": "100.3.0-dev", + "magento/module-send-friend": "100.3.0-dev", + "magento/module-shipping": "100.3.0-dev", + "magento/module-sitemap": "100.3.0-dev", + "magento/module-store": "100.3.0-dev", + "magento/module-swagger": "100.3.0-dev", + "magento/module-swatches": "100.3.0-dev", + "magento/module-swatches-layered-navigation": "100.3.0-dev", + "magento/module-tax": "100.3.0-dev", + "magento/module-tax-import-export": "100.3.0-dev", + "magento/module-theme": "100.3.0-dev", + "magento/module-translation": "100.3.0-dev", + "magento/module-ui": "100.3.0-dev", + "magento/module-ups": "100.3.0-dev", + "magento/module-url-rewrite": "100.3.0-dev", + "magento/module-user": "100.3.0-dev", + "magento/module-usps": "100.3.0-dev", + "magento/module-variable": "100.3.0-dev", + "magento/module-vault": "100.3.0-dev", + "magento/module-version": "100.3.0-dev", + "magento/module-webapi": "100.3.0-dev", + "magento/module-webapi-security": "100.3.0-dev", + "magento/module-weee": "100.3.0-dev", + "magento/module-widget": "100.3.0-dev", + "magento/module-wishlist": "100.3.0-dev", + "magento/module-wishlist-analytics": "100.3.0-dev", + "magento/theme-adminhtml-backend": "100.3.0-dev", + "magento/theme-frontend-blank": "100.3.0-dev", + "magento/theme-frontend-luma": "100.3.0-dev", + "magento/language-de_de": "100.3.0-dev", + "magento/language-en_us": "100.3.0-dev", + "magento/language-es_es": "100.3.0-dev", + "magento/language-fr_fr": "100.3.0-dev", + "magento/language-nl_nl": "100.3.0-dev", + "magento/language-pt_br": "100.3.0-dev", + "magento/language-zh_hans_cn": "100.3.0-dev", + "magento/framework": "100.3.0-dev", "trentrichardson/jquery-timepicker-addon": "1.4.3", "components/jquery": "1.11.0", "blueimp/jquery-file-upload": "5.6.14", diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index f9300ecfef6c9..edc36de95ddd4 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.2.0-dev", + "version": "100.3.0-dev", "license": [ "OSL-3.0", "AFL-3.0" From 29508d602db7020efbb290b05abb81b87e78c49c Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Fri, 28 Jul 2017 15:31:34 -0500 Subject: [PATCH 298/316] MAGETWO-71052: 2.3 version bump - generating composer.lock --- composer.lock | 235 +++++++++++++++++++++++++------------------------- 1 file changed, 117 insertions(+), 118 deletions(-) diff --git a/composer.lock b/composer.lock index 051d5e718cb84..9d6216c8481a8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +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" ], - "hash": "41d9b342039acfeb677394858981ab6d", - "content-hash": "a3fcf274ad343f711f29f0c313994e1a", + "content-hash": "3375a604cb23088317e3daa54900aee2", "packages": [ { "name": "braintree/braintree_php", @@ -52,7 +51,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2017-02-16 19:59:04" + "time": "2017-02-16T19:59:04+00:00" }, { "name": "colinmollenhour/cache-backend-file", @@ -88,7 +87,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", @@ -124,7 +123,7 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-03-25 04:54:24" + "time": "2017-03-25T04:54:24+00:00" }, { "name": "colinmollenhour/credis", @@ -163,7 +162,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": "2015-11-28 01:20:04" + "time": "2015-11-28T01:20:04+00:00" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -200,7 +199,7 @@ ], "description": "A Redis-based session handler with optimistic locking", "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", - "time": "2017-04-19 14:21:43" + "time": "2017-04-19T14:21:43+00:00" }, { "name": "composer/ca-bundle", @@ -259,7 +258,7 @@ "ssl", "tls" ], - "time": "2017-03-06 11:59:08" + "time": "2017-03-06T11:59:08+00:00" }, { "name": "composer/composer", @@ -336,7 +335,7 @@ "dependency", "package" ], - "time": "2017-03-10 08:29:45" + "time": "2017-03-10T08:29:45+00:00" }, { "name": "composer/semver", @@ -398,7 +397,7 @@ "validation", "versioning" ], - "time": "2016-08-30 16:08:34" + "time": "2016-08-30T16:08:34+00:00" }, { "name": "composer/spdx-licenses", @@ -459,7 +458,7 @@ "spdx", "validator" ], - "time": "2017-04-03 19:08:52" + "time": "2017-04-03T19:08:52+00:00" }, { "name": "container-interop/container-interop", @@ -490,7 +489,7 @@ ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14 19:40:03" + "time": "2017-02-14T19:40:03+00:00" }, { "name": "justinrainbow/json-schema", @@ -557,7 +556,7 @@ "json", "schema" ], - "time": "2017-05-16 21:06:09" + "time": "2017-05-16T21:06:09+00:00" }, { "name": "league/climate", @@ -606,7 +605,7 @@ "php", "terminal" ], - "time": "2015-01-18 14:31:58" + "time": "2015-01-18T14:31:58+00:00" }, { "name": "magento/composer", @@ -642,7 +641,7 @@ "AFL-3.0" ], "description": "Magento composer library helps to instantiate Composer application and run composer commands.", - "time": "2017-04-24 09:57:02" + "time": "2017-04-24T09:57:02+00:00" }, { "name": "magento/magento-composer-installer", @@ -721,7 +720,7 @@ "composer-installer", "magento" ], - "time": "2016-10-06 16:05:07" + "time": "2016-10-06T16:05:07+00:00" }, { "name": "magento/zendframework1", @@ -768,7 +767,7 @@ "ZF1", "framework" ], - "time": "2017-06-21 14:56:23" + "time": "2017-06-21T14:56:23+00:00" }, { "name": "monolog/monolog", @@ -846,7 +845,7 @@ "logging", "psr-3" ], - "time": "2017-06-19 01:22:40" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "oyejorge/less.php", @@ -908,7 +907,7 @@ "php", "stylesheet" ], - "time": "2017-03-28 22:19:25" + "time": "2017-03-28T22:19:25+00:00" }, { "name": "paragonie/random_compat", @@ -956,7 +955,7 @@ "pseudorandom", "random" ], - "time": "2017-03-13 16:27:32" + "time": "2017-03-13T16:27:32+00:00" }, { "name": "pelago/emogrifier", @@ -1012,7 +1011,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", @@ -1104,7 +1103,7 @@ "x.509", "x509" ], - "time": "2017-06-05 06:31:10" + "time": "2017-06-05T06:31:10+00:00" }, { "name": "psr/container", @@ -1153,7 +1152,7 @@ "container-interop", "psr" ], - "time": "2017-02-14 16:28:37" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/log", @@ -1200,7 +1199,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "ramsey/uuid", @@ -1282,7 +1281,7 @@ "identifier", "uuid" ], - "time": "2017-03-26 20:37:53" + "time": "2017-03-26T20:37:53+00:00" }, { "name": "seld/cli-prompt", @@ -1330,7 +1329,7 @@ "input", "prompt" ], - "time": "2017-03-18 11:32:45" + "time": "2017-03-18T11:32:45+00:00" }, { "name": "seld/jsonlint", @@ -1379,7 +1378,7 @@ "parser", "validator" ], - "time": "2017-06-18 15:11:04" + "time": "2017-06-18T15:11:04+00:00" }, { "name": "seld/phar-utils", @@ -1423,7 +1422,7 @@ "keywords": [ "phra" ], - "time": "2015-10-13 18:44:15" + "time": "2015-10-13T18:44:15+00:00" }, { "name": "sjparkinson/static-review", @@ -1476,11 +1475,11 @@ } ], "description": "An extendable framework for version control hooks.", - "time": "2014-09-22 08:40:36" + "time": "2014-09-22T08:40:36+00:00" }, { "name": "symfony/console", - "version": "v2.8.24", + "version": "v2.8.25", "source": { "type": "git", "url": "https://github.com/symfony/console.git", @@ -1537,7 +1536,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-07-03 08:04:30" + "time": "2017-07-03T08:04:30+00:00" }, { "name": "symfony/debug", @@ -1594,11 +1593,11 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30 07:22:48" + "time": "2016-07-30T07:22:48+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.24", + "version": "v2.8.25", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1654,20 +1653,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-06-02 07:47:27" + "time": "2017-06-02T07:47:27+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.4", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "311fa718389efbd8b627c272b9324a62437018cc" + "reference": "427987eb4eed764c3b6e38d52a0f87989e010676" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/311fa718389efbd8b627c272b9324a62437018cc", - "reference": "311fa718389efbd8b627c272b9324a62437018cc", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/427987eb4eed764c3b6e38d52a0f87989e010676", + "reference": "427987eb4eed764c3b6e38d52a0f87989e010676", "shasum": "" }, "require": { @@ -1703,11 +1702,11 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-06-24 09:29:48" + "time": "2017-07-11T07:17:58+00:00" }, { "name": "symfony/finder", - "version": "v3.3.4", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -1752,7 +1751,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-06-01 21:01:25" + "time": "2017-06-01T21:01:25+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1811,11 +1810,11 @@ "portable", "shim" ], - "time": "2017-06-09 14:24:12" + "time": "2017-06-09T14:24:12+00:00" }, { "name": "symfony/process", - "version": "v2.8.24", + "version": "v2.8.25", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -1860,7 +1859,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-07-03 08:04:30" + "time": "2017-07-03T08:04:30+00:00" }, { "name": "tedivm/jshrink", @@ -1906,7 +1905,7 @@ "javascript", "minifier" ], - "time": "2015-07-04 07:35:09" + "time": "2015-07-04T07:35:09+00:00" }, { "name": "tubalmartin/cssmin", @@ -1959,7 +1958,7 @@ "minify", "yui" ], - "time": "2017-05-16 13:45:26" + "time": "2017-05-16T13:45:26+00:00" }, { "name": "zendframework/zend-captcha", @@ -2016,7 +2015,7 @@ "captcha", "zf2" ], - "time": "2017-02-23 08:09:44" + "time": "2017-02-23T08:09:44+00:00" }, { "name": "zendframework/zend-code", @@ -2069,7 +2068,7 @@ "code", "zf2" ], - "time": "2016-10-24 13:23:32" + "time": "2016-10-24T13:23:32+00:00" }, { "name": "zendframework/zend-config", @@ -2125,7 +2124,7 @@ "config", "zf2" ], - "time": "2016-02-04 23:01:10" + "time": "2016-02-04T23:01:10+00:00" }, { "name": "zendframework/zend-console", @@ -2177,7 +2176,7 @@ "console", "zf2" ], - "time": "2016-02-09 17:15:12" + "time": "2016-02-09T17:15:12+00:00" }, { "name": "zendframework/zend-crypt", @@ -2227,7 +2226,7 @@ "crypt", "zf2" ], - "time": "2016-02-03 23:46:30" + "time": "2016-02-03T23:46:30+00:00" }, { "name": "zendframework/zend-db", @@ -2284,7 +2283,7 @@ "db", "zf2" ], - "time": "2016-08-09 19:28:55" + "time": "2016-08-09T19:28:55+00:00" }, { "name": "zendframework/zend-di", @@ -2331,7 +2330,7 @@ "di", "zf2" ], - "time": "2016-04-25 20:58:11" + "time": "2016-04-25T20:58:11+00:00" }, { "name": "zendframework/zend-escaper", @@ -2375,7 +2374,7 @@ "escaper", "zf2" ], - "time": "2016-06-30 19:48:38" + "time": "2016-06-30T19:48:38+00:00" }, { "name": "zendframework/zend-eventmanager", @@ -2422,7 +2421,7 @@ "eventmanager", "zf2" ], - "time": "2016-02-18 20:49:05" + "time": "2016-02-18T20:49:05+00:00" }, { "name": "zendframework/zend-filter", @@ -2482,7 +2481,7 @@ "filter", "zf2" ], - "time": "2017-05-17 20:56:17" + "time": "2017-05-17T20:56:17+00:00" }, { "name": "zendframework/zend-form", @@ -2559,7 +2558,7 @@ "form", "zf2" ], - "time": "2017-05-18 14:59:53" + "time": "2017-05-18T14:59:53+00:00" }, { "name": "zendframework/zend-http", @@ -2609,7 +2608,7 @@ "http", "zf2" ], - "time": "2017-01-31 14:41:02" + "time": "2017-01-31T14:41:02+00:00" }, { "name": "zendframework/zend-hydrator", @@ -2667,7 +2666,7 @@ "hydrator", "zf2" ], - "time": "2016-02-18 22:38:26" + "time": "2016-02-18T22:38:26+00:00" }, { "name": "zendframework/zend-i18n", @@ -2734,7 +2733,7 @@ "i18n", "zf2" ], - "time": "2017-05-17 17:00:12" + "time": "2017-05-17T17:00:12+00:00" }, { "name": "zendframework/zend-inputfilter", @@ -2789,7 +2788,7 @@ "inputfilter", "zf2" ], - "time": "2017-05-18 14:20:56" + "time": "2017-05-18T14:20:56+00:00" }, { "name": "zendframework/zend-json", @@ -2844,7 +2843,7 @@ "json", "zf2" ], - "time": "2016-02-04 21:20:26" + "time": "2016-02-04T21:20:26+00:00" }, { "name": "zendframework/zend-loader", @@ -2888,7 +2887,7 @@ "loader", "zf2" ], - "time": "2015-06-03 14:05:47" + "time": "2015-06-03T14:05:47+00:00" }, { "name": "zendframework/zend-log", @@ -2959,7 +2958,7 @@ "logging", "zf2" ], - "time": "2017-05-17 16:03:26" + "time": "2017-05-17T16:03:26+00:00" }, { "name": "zendframework/zend-mail", @@ -3021,7 +3020,7 @@ "mail", "zf2" ], - "time": "2017-06-08 20:03:58" + "time": "2017-06-08T20:03:58+00:00" }, { "name": "zendframework/zend-math", @@ -3071,7 +3070,7 @@ "math", "zf2" ], - "time": "2016-04-07 16:29:53" + "time": "2016-04-07T16:29:53+00:00" }, { "name": "zendframework/zend-mime", @@ -3120,7 +3119,7 @@ "mime", "zf2" ], - "time": "2017-01-16 16:43:38" + "time": "2017-01-16T16:43:38+00:00" }, { "name": "zendframework/zend-modulemanager", @@ -3178,7 +3177,7 @@ "modulemanager", "zf2" ], - "time": "2017-07-11 19:39:57" + "time": "2017-07-11T19:39:57+00:00" }, { "name": "zendframework/zend-mvc", @@ -3265,7 +3264,7 @@ "mvc", "zf2" ], - "time": "2016-02-23 15:24:59" + "time": "2016-02-23T15:24:59+00:00" }, { "name": "zendframework/zend-serializer", @@ -3322,7 +3321,7 @@ "serializer", "zf2" ], - "time": "2016-06-21 17:01:55" + "time": "2016-06-21T17:01:55+00:00" }, { "name": "zendframework/zend-server", @@ -3368,7 +3367,7 @@ "server", "zf2" ], - "time": "2016-06-20 22:27:55" + "time": "2016-06-20T22:27:55+00:00" }, { "name": "zendframework/zend-servicemanager", @@ -3420,7 +3419,7 @@ "servicemanager", "zf2" ], - "time": "2016-12-19 19:14:29" + "time": "2016-12-19T19:14:29+00:00" }, { "name": "zendframework/zend-session", @@ -3486,7 +3485,7 @@ "session", "zf2" ], - "time": "2017-06-19 21:31:39" + "time": "2017-06-19T21:31:39+00:00" }, { "name": "zendframework/zend-soap", @@ -3538,7 +3537,7 @@ "soap", "zf2" ], - "time": "2016-04-21 16:06:27" + "time": "2016-04-21T16:06:27+00:00" }, { "name": "zendframework/zend-stdlib", @@ -3597,7 +3596,7 @@ "stdlib", "zf2" ], - "time": "2016-04-12 21:17:31" + "time": "2016-04-12T21:17:31+00:00" }, { "name": "zendframework/zend-text", @@ -3644,7 +3643,7 @@ "text", "zf2" ], - "time": "2016-02-08 19:03:52" + "time": "2016-02-08T19:03:52+00:00" }, { "name": "zendframework/zend-uri", @@ -3691,20 +3690,20 @@ "uri", "zf2" ], - "time": "2016-02-17 22:38:51" + "time": "2016-02-17T22:38:51+00:00" }, { "name": "zendframework/zend-validator", - "version": "2.9.1", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-validator.git", - "reference": "c9a8160a0191e34bb98ac1ecd4e453391c424bb3" + "reference": "a58dbe8463b93de0d650e296d56cb7da4a129ff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/c9a8160a0191e34bb98ac1ecd4e453391c424bb3", - "reference": "c9a8160a0191e34bb98ac1ecd4e453391c424bb3", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/a58dbe8463b93de0d650e296d56cb7da4a129ff3", + "reference": "a58dbe8463b93de0d650e296d56cb7da4a129ff3", "shasum": "" }, "require": { @@ -3762,7 +3761,7 @@ "validator", "zf2" ], - "time": "2017-05-17 22:06:13" + "time": "2017-07-20T16:44:59+00:00" }, { "name": "zendframework/zend-view", @@ -3849,7 +3848,7 @@ "view", "zf2" ], - "time": "2017-03-21 15:05:56" + "time": "2017-03-21T15:05:56+00:00" } ], "packages-dev": [ @@ -3905,7 +3904,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -3975,7 +3974,7 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2017-03-31 12:59:38" + "time": "2017-03-31T12:59:38+00:00" }, { "name": "ircmaxell/password-compat", @@ -4017,7 +4016,7 @@ "hashing", "password" ], - "time": "2014-11-20 16:49:30" + "time": "2014-11-20T16:49:30+00:00" }, { "name": "lusitanian/oauth", @@ -4084,7 +4083,7 @@ "oauth", "security" ], - "time": "2016-07-12 22:15:40" + "time": "2016-07-12T22:15:40+00:00" }, { "name": "pdepend/pdepend", @@ -4124,7 +4123,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2017-01-19 14:23:36" + "time": "2017-01-19T14:23:36+00:00" }, { "name": "phpmd/phpmd", @@ -4190,7 +4189,7 @@ "phpmd", "pmd" ], - "time": "2017-01-20 14:41:10" + "time": "2017-01-20T14:41:10+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4252,7 +4251,7 @@ "testing", "xunit" ], - "time": "2015-10-06 15:47:00" + "time": "2015-10-06T15:47:00+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4297,7 +4296,7 @@ "filesystem", "iterator" ], - "time": "2013-10-10 15:34:57" + "time": "2013-10-10T15:34:57+00:00" }, { "name": "phpunit/php-text-template", @@ -4338,7 +4337,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -4387,7 +4386,7 @@ "keywords": [ "timer" ], - "time": "2017-02-26 11:10:40" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", @@ -4436,7 +4435,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-02-27 10:12:30" + "time": "2017-02-27T10:12:30+00:00" }, { "name": "phpunit/phpunit", @@ -4510,7 +4509,7 @@ "testing", "xunit" ], - "time": "2014-05-02 07:13:40" + "time": "2014-05-02T07:13:40+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -4566,7 +4565,7 @@ "mock", "xunit" ], - "time": "2015-10-02 06:51:40" + "time": "2015-10-02T06:51:40+00:00" }, { "name": "sebastian/comparator", @@ -4630,7 +4629,7 @@ "compare", "equality" ], - "time": "2017-01-29 09:50:25" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", @@ -4682,7 +4681,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22 07:24:03" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -4732,7 +4731,7 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-08-18T05:49:44+00:00" }, { "name": "sebastian/exporter", @@ -4799,7 +4798,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/finder-facade", @@ -4838,7 +4837,7 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2016-02-17 07:02:23" + "time": "2016-02-17T07:02:23+00:00" }, { "name": "sebastian/phpcpd", @@ -4889,7 +4888,7 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2016-04-17 19:32:49" + "time": "2016-04-17T19:32:49+00:00" }, { "name": "sebastian/recursion-context", @@ -4942,7 +4941,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", @@ -4977,7 +4976,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", @@ -5052,11 +5051,11 @@ "phpcs", "standards" ], - "time": "2014-05-01 03:07:07" + "time": "2014-05-01T03:07:07+00:00" }, { "name": "symfony/config", - "version": "v3.2.11", + "version": "v3.2.12", "source": { "type": "git", "url": "https://github.com/symfony/config.git", @@ -5108,7 +5107,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", @@ -5168,7 +5167,7 @@ ], "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/polyfill-php54", @@ -5226,7 +5225,7 @@ "portable", "shim" ], - "time": "2017-06-09 08:25:21" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/polyfill-php55", @@ -5282,7 +5281,7 @@ "portable", "shim" ], - "time": "2017-06-09 08:25:21" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/polyfill-php70", @@ -5341,7 +5340,7 @@ "portable", "shim" ], - "time": "2017-06-09 14:24:12" + "time": "2017-06-09T14:24:12+00:00" }, { "name": "symfony/polyfill-php72", @@ -5396,7 +5395,7 @@ "portable", "shim" ], - "time": "2017-06-09 08:25:21" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/polyfill-xml", @@ -5444,11 +5443,11 @@ "portable", "shim" ], - "time": "2017-06-09 08:25:21" + "time": "2017-06-09T08:25:21+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.3.4", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -5493,11 +5492,11 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-04-12 14:14:56" + "time": "2017-04-12T14:14:56+00:00" }, { "name": "symfony/yaml", - "version": "v2.8.24", + "version": "v2.8.25", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", @@ -5542,7 +5541,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-06-01 20:52:29" + "time": "2017-06-01T20:52:29+00:00" }, { "name": "theseer/fdomdocument", @@ -5582,7 +5581,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": [], From a247a3d2e53af69982547856afa3caa2aa9ecfbc Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 31 Jul 2017 10:03:01 +0300 Subject: [PATCH 299/316] Optimize validation Optimize validation when ShouldIgnoreValidation set `true` --- app/code/Magento/Customer/Model/Address/AbstractAddress.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/Address/AbstractAddress.php b/app/code/Magento/Customer/Model/Address/AbstractAddress.php index 536ceb28b3975..fec6f0be3d188 100644 --- a/app/code/Magento/Customer/Model/Address/AbstractAddress.php +++ b/app/code/Magento/Customer/Model/Address/AbstractAddress.php @@ -566,6 +566,10 @@ public function getDataModel($defaultBillingAddressId = null, $defaultShippingAd */ public function validate() { + if ($this->getShouldIgnoreValidation()) { + return true; + } + $errors = []; if (!\Zend_Validate::is($this->getFirstname(), 'NotEmpty')) { $errors[] = __('%fieldName is a required field.', ['fieldName' => 'firstname']); @@ -627,7 +631,7 @@ public function validate() $errors[] = __('%fieldName is a required field.', ['fieldName' => 'regionId']); } - if (empty($errors) || $this->getShouldIgnoreValidation()) { + if (empty($errors)) { return true; } return $errors; From 6e8319504fd931efe3846d889f3893afb1d56e1b Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko Date: Mon, 31 Jul 2017 15:27:00 +0300 Subject: [PATCH 300/316] MAGETWO-70683: New registered customer not showed in admin customer grid - fixed static fails --- .../_files/customer_grid_indexer_enabled_update_on_schedule.php | 2 +- ...ustomer_grid_indexer_enabled_update_on_schedule_rollback.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php index 72baeceb1cb30..a7d7caec1fb83 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php +++ b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule.php @@ -8,4 +8,4 @@ /** @var Magento\Framework\Indexer\IndexerRegistry $indexerRegistry */ $indexerRegistry = $objectManager->create(\Magento\Framework\Indexer\IndexerRegistry::class); $indexer = $indexerRegistry->get(\Magento\Customer\Model\Customer::CUSTOMER_GRID_INDEXER_ID); -$indexer->setScheduled(true); \ No newline at end of file +$indexer->setScheduled(true); diff --git a/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php index 3ff860cf0b05e..9d7dc7bdc7d03 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Customer/_files/customer_grid_indexer_enabled_update_on_schedule_rollback.php @@ -8,4 +8,4 @@ /** @var Magento\Framework\Indexer\IndexerRegistry $indexerRegistry */ $indexerRegistry = $objectManager->create(\Magento\Framework\Indexer\IndexerRegistry::class); $indexer = $indexerRegistry->get(\Magento\Customer\Model\Customer::CUSTOMER_GRID_INDEXER_ID); -$indexer->setScheduled(false); \ No newline at end of file +$indexer->setScheduled(false); From 67fbe615eeaae3e0742ff63a130c5c68dd87c176 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Mon, 31 Jul 2017 16:30:24 -0500 Subject: [PATCH 301/316] MAGETWO-71062: Remove zend json from json controller #10342 - Reverted Pull Request magento/magento2#10342 from dmanners/magento2:remove-zend-json-from-json-controller - Merged commits: 1. baeb58c 2. db6f353 3. 4f78388 4. 7e46cea 5. ff0581b 6. 41e118b --- .../Controller/Adminhtml/Rate/AjaxLoad.php | 3 +- .../Controller/Adminhtml/Rate/AjaxSave.php | 1 - .../Framework/Controller/Result/Json.php | 57 +++---------------- 3 files changed, 9 insertions(+), 52 deletions(-) diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php index c182fb53b3880..fb6aca4396542 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php @@ -14,8 +14,7 @@ class AjaxLoad extends \Magento\Tax\Controller\Adminhtml\Rate /** * Json needed for the Ajax Edit Form * - * @return \Magento\Framework\Controller\Result\Json - * @throws \InvalidArgumentException + * @return void */ public function execute() { diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php index f6cd0fff9c9b0..354865e5828ef 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php @@ -14,7 +14,6 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Rate * Save Tax Rate via AJAX * * @return \Magento\Framework\Controller\Result\Json - * @throws \InvalidArgumentException */ public function execute() { diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 188dcd6029f56..3349d4507577b 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -29,65 +29,24 @@ class Json extends AbstractResult protected $json; /** - * @var \Magento\Framework\Serialize\Serializer\Json + * @param \Magento\Framework\Translate\InlineInterface $translateInline */ - private $serializer; - - /** - * @param InlineInterface $translateInline - * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer - * @throws \RuntimeException - */ - public function __construct( - InlineInterface $translateInline, - \Magento\Framework\Serialize\Serializer\Json $serializer = null - ) { + public function __construct(InlineInterface $translateInline) + { $this->translateInline = $translateInline; - $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** * Set json data * - * @param array|string|\Magento\Framework\DataObject $data - * @param bool $cycleCheck - * @param array $options - * @return Json - * @throws \InvalidArgumentException - * @throws \Magento\Framework\Exception\LocalizedException - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * @deprecated - * @see Json::setArrayData - * @see Json::setJsonData - */ - public function setData($data, $cycleCheck = false, $options = []) - { - if ($data instanceof \Magento\Framework\DataObject) { - return $this->setArrayData($data->toArray()); - } - - if (is_array($data)) { - return $this->setArrayData($data); - } - - if (is_string($data)) { - return $this->setJsonData($data); - } - - throw new \Magento\Framework\Exception\LocalizedException( - new \Magento\Framework\Phrase('Invalid argument type') - ); - } - - /** - * @param array $data + * @param mixed $data + * @param boolean $cycleCheck Optional; whether or not to check for object recursion; off by default + * @param array $options Additional options used during encoding * @return $this - * @throws \InvalidArgumentException */ - public function setArrayData(array $data) + public function setData($data, $cycleCheck = false, $options = []) { - $this->setJsonData($this->serializer->serialize($data)); + $this->json = \Zend_Json::encode($data, $cycleCheck, $options); return $this; } From 0a1d85c24f20efee205cd6fc33e2bf3b0784b8ac Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Tue, 1 Aug 2017 16:35:22 -0500 Subject: [PATCH 302/316] MAGETWO-71255: Merge 2.2 into develop mainline (2.3) - stabilize builds --- .../Controller/Adminhtml/Product/Attribute/ValidateTest.php | 2 +- app/code/Magento/Newsletter/Model/Template.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php index 6373712066695..803ce855672bb 100644 --- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php @@ -233,7 +233,7 @@ public function provideUniqueData() "option_1" => "", "option_2" => "", ] - ], true + ], false ], 'duplicate and deleted' => [ [ diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php index 5e4cf1e06f3be..4d4396e31717e 100644 --- a/app/code/Magento/Newsletter/Model/Template.php +++ b/app/code/Magento/Newsletter/Model/Template.php @@ -40,7 +40,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate { /** * Mail object - * + * * @deprecated Unused property * */ From 2e463631bf66748b8076065c640996c80fcb532a Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Tue, 1 Aug 2017 17:50:28 -0500 Subject: [PATCH 303/316] MAGETWO-70798: Fall back to parent directory if composer.json not found in module directory #8990 - fixed code style --- app/code/Magento/SampleData/Model/Dependency.php | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index 1fe48d573a27f..c4c7c2860d2b4 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -43,33 +43,29 @@ class Dependency */ private $directoryReadFactory; - //@codingStandardsIgnoreStart /** * @param ComposerInformation $composerInformation - * @param Filesystem $filesystem + * @param Filesystem $filesystem @deprecated 2.3.0 $directoryReadFactory is used instead * @param PackageFactory $packageFactory * @param ComponentRegistrarInterface $componentRegistrar * @param Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory * @throws \RuntimeException + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ComposerInformation $composerInformation, - // $filesystem kept for BC - Filesystem $filesystem, + Filesystem $filesystem, // $filesystem kept for BC PackageFactory $packageFactory, ComponentRegistrarInterface $componentRegistrar, - // $directoryReadFactory optional for BC Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; $this->componentRegistrar = $componentRegistrar; - if ($directoryReadFactory === null) { - $directoryReadFactory = ObjectManager::getInstance()->get(Filesystem\Directory\ReadInterfaceFactory::class); - } - $this->directoryReadFactory = $directoryReadFactory; + $this->directoryReadFactory = $directoryReadFactory ?: ObjectManager::getInstance()->get( + Filesystem\Directory\ReadInterfaceFactory::class + ); } - //@codingStandardsIgnoreEnd /** * Retrieve list of sample data packages from suggests From b11309cfd8cac2dc6c3b6d95e9697d010536f53d Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Tue, 1 Aug 2017 18:06:06 -0500 Subject: [PATCH 304/316] MAGETWO-70798: Fall back to parent directory if composer.json not found in module directory #8990 - fixed code style --- .../Magento/SampleData/Model/Dependency.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php index c4c7c2860d2b4..e3949a6bd502e 100644 --- a/app/code/Magento/SampleData/Model/Dependency.php +++ b/app/code/Magento/SampleData/Model/Dependency.php @@ -12,6 +12,7 @@ use Magento\Framework\Config\Composer\Package; use Magento\Framework\Config\Composer\PackageFactory; use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\ReadInterfaceFactory; /** * Sample Data dependency @@ -39,32 +40,32 @@ class Dependency private $componentRegistrar; /** - * @var Filesystem\Directory\ReadInterfaceFactory + * @var ReadInterfaceFactory */ private $directoryReadFactory; /** + * Initialize dependencies. + * * @param ComposerInformation $composerInformation * @param Filesystem $filesystem @deprecated 2.3.0 $directoryReadFactory is used instead * @param PackageFactory $packageFactory * @param ComponentRegistrarInterface $componentRegistrar - * @param Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory - * @throws \RuntimeException + * @param Filesystem\Directory\ReadInterfaceFactory|null $directoryReadFactory * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ComposerInformation $composerInformation, - Filesystem $filesystem, // $filesystem kept for BC + Filesystem $filesystem, PackageFactory $packageFactory, ComponentRegistrarInterface $componentRegistrar, - Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null + \Magento\Framework\Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory = null ) { $this->composerInformation = $composerInformation; $this->packageFactory = $packageFactory; $this->componentRegistrar = $componentRegistrar; - $this->directoryReadFactory = $directoryReadFactory ?: ObjectManager::getInstance()->get( - Filesystem\Directory\ReadInterfaceFactory::class - ); + $this->directoryReadFactory = $directoryReadFactory ?: + ObjectManager::getInstance()->get(ReadInterfaceFactory::class); } /** From ec00c1e082b68236ebc45a0f7f9accc9e6004e7e Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Tue, 1 Aug 2017 18:24:34 -0500 Subject: [PATCH 305/316] MAGETWO-70798: Fall back to parent directory if composer.json not found in module directory #8990 - fixed code style --- app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php index 3be13af6ae91b..b0ae7f36439e9 100644 --- a/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php +++ b/app/code/Magento/SampleData/Test/Unit/Model/DependencyTest.php @@ -1,6 +1,6 @@ Date: Wed, 2 Aug 2017 10:48:29 +0100 Subject: [PATCH 306/316] Update _buttons.less Fix a minor spelling mistake. --- lib/web/css/source/lib/_buttons.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/css/source/lib/_buttons.less b/lib/web/css/source/lib/_buttons.less index b2e5a0d35c1db..804302fcb69ac 100644 --- a/lib/web/css/source/lib/_buttons.less +++ b/lib/web/css/source/lib/_buttons.less @@ -8,7 +8,7 @@ // _____________________________________________ // -// Button with solid or pictire background +// Button with solid or picture background // --------------------------------------------- .lib-button( From e750fa2e2d4ca39d67c242596df928e7921f37de Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Wed, 2 Aug 2017 12:07:20 -0500 Subject: [PATCH 307/316] MAGETWO-71255: Merge 2.2 into develop mainline (2.3) - stabilize builds --- .../Controller/Adminhtml/Product/Attribute/Validate.php | 8 ++++---- .../Adminhtml/Product/Attribute/ValidateTest.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php index d99d947e184bb..7638f71ebb6ea 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php @@ -160,17 +160,17 @@ private function checkUniqueOption(DataObject $response, array $options = null) if (is_array($options) && isset($options['value']) && isset($options['delete']) - && !$this->isUniqueAdminValues($options['value'], $options['delete']) + && !empty($options['value']) + && !empty($options['delete']) ) { $duplicates = $this->isUniqueAdminValues($options['value'], $options['delete']); - if ($duplicates) { + if (!empty($duplicates)) { $this->setMessageToResponse( $response, [__('The value of Admin must be unique. (%1)', implode(', ', $duplicates))] ); - - $response->setError(true); } + $response->setError(true); } return $this; } diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php index 803ce855672bb..6373712066695 100644 --- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/ValidateTest.php @@ -233,7 +233,7 @@ public function provideUniqueData() "option_1" => "", "option_2" => "", ] - ], false + ], true ], 'duplicate and deleted' => [ [ From 66f1460af0723d4581bd9f81c37aa7918be1b4a9 Mon Sep 17 00:00:00 2001 From: dmanners Date: Thu, 3 Aug 2017 12:10:11 +0000 Subject: [PATCH 308/316] Update the return type in the tax rate ajax controllers to be correct --- .../Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php | 10 ++++++---- .../Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php index fb6aca4396542..ff610a8f0da2e 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php @@ -4,6 +4,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Tax\Controller\Adminhtml\Rate; use Magento\Framework\Exception\NoSuchEntityException; @@ -14,7 +15,8 @@ class AjaxLoad extends \Magento\Tax\Controller\Adminhtml\Rate /** * Json needed for the Ajax Edit Form * - * @return void + * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { @@ -23,13 +25,13 @@ public function execute() /* @var \Magento\Tax\Api\Data\TaxRateInterface */ $taxRateDataObject = $this->_taxRateRepository->get($rateId); /* @var array */ - $resultArray= $this->_taxRateConverter->createArrayFromServiceObject($taxRateDataObject, true); + $resultArray = $this->_taxRateConverter->createArrayFromServiceObject($taxRateDataObject, true); $responseContent = [ 'success' => true, 'error_message' => '', - 'result'=>$resultArray, - ]; + 'result' => $resultArray, + ]; } catch (NoSuchEntityException $e) { $responseContent = [ 'success' => false, diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php index 354865e5828ef..f6cd0fff9c9b0 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php @@ -14,6 +14,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Rate * Save Tax Rate via AJAX * * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { From d27cf63f8f7d20dd6428913cba50fdeb59dc3cc8 Mon Sep 17 00:00:00 2001 From: dmanners Date: Thu, 3 Aug 2017 12:16:40 +0000 Subject: [PATCH 309/316] Add the thrown notice to all Ajax controlers in the tax module --- .../Magento/Tax/Controller/Adminhtml/Rule/AjaxLoadRates.php | 1 + app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php | 2 ++ app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php | 2 ++ 3 files changed, 5 insertions(+) diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/AjaxLoadRates.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/AjaxLoadRates.php index 4d40e20ce7b8e..060a4350bb624 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/AjaxLoadRates.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/AjaxLoadRates.php @@ -48,6 +48,7 @@ public function __construct( * Get rates page via AJAX * * @return Json + * @throws \InvalidArgumentException */ public function execute() { diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php index fb842d1e08acd..2f32e76cd3c75 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php @@ -14,6 +14,7 @@ class AjaxDelete extends \Magento\Tax\Controller\Adminhtml\Tax * Delete Tax Class via AJAX * * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { @@ -29,6 +30,7 @@ public function execute() 'error_message' => __('We can\'t delete this tax class right now.') ]; } + /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON); $resultJson->setData($responseContent); diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php index 1e3b644c901b6..1206d68e614d1 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php @@ -14,6 +14,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Tax * Save Tax Class via AJAX * * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { @@ -47,6 +48,7 @@ public function execute() 'class_name' => '', ]; } + /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON); $resultJson->setData($responseContent); From 8d49269bfe670cb5db3597d03dd092761b906432 Mon Sep 17 00:00:00 2001 From: dmanners Date: Thu, 3 Aug 2017 14:37:36 +0000 Subject: [PATCH 310/316] Update the AdminNotification AjaxMarkAsRead controller - stop the direct usage of object manager in the execute method, - modify the execute method to use the resultFactory for building the response --- .../Adminhtml/Notification/AjaxMarkAsRead.php | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php index 31a129d57ab90..da797fe12e75a 100644 --- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php +++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php @@ -6,12 +6,35 @@ */ namespace Magento\AdminNotification\Controller\Adminhtml\Notification; +use Magento\Backend\App\Action; +use Magento\Framework\Controller\ResultFactory; + class AjaxMarkAsRead extends \Magento\AdminNotification\Controller\Adminhtml\Notification { + /** + * @var \Magento\AdminNotification\Model\NotificationService + */ + private $notificationService; + + /** + * @param Action\Context $context + * @param \Magento\AdminNotification\Model\NotificationService|null $notificationService + * @throws \RuntimeException + */ + public function __construct( + Action\Context $context, + \Magento\AdminNotification\Model\NotificationService $notificationService = null + ) { + parent::__construct($context); + $this->notificationService = $notificationService?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\AdminNotification\Model\NotificationService::class); + } + /** * Mark notification as read (AJAX action) * - * @return void + * @return \Magento\Framework\Controller\Result\Json|void + * @throws \InvalidArgumentException */ public function execute() { @@ -21,17 +44,15 @@ public function execute() $notificationId = (int)$this->getRequest()->getPost('id'); $responseData = []; try { - $this->_objectManager->create( - \Magento\AdminNotification\Model\NotificationService::class - )->markAsRead( - $notificationId - ); + $this->notificationService->markAsRead($notificationId); $responseData['success'] = true; } catch (\Exception $e) { $responseData['success'] = false; } - $this->getResponse()->representJson( - $this->_objectManager->create(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($responseData) - ); + + /** @var \Magento\Framework\Controller\Result\Json $resultJson */ + $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON); + $resultJson->setData($responseData); + return $resultJson; } } From 5688d6adc753744dc7f42da2af6b6b4ec62b0932 Mon Sep 17 00:00:00 2001 From: Cristian Partica Date: Thu, 3 Aug 2017 14:03:00 -0500 Subject: [PATCH 311/316] MAGETWO-71255: Merge 2.2 into develop mainline (2.3) - stabilize builds --- .../Catalog/Controller/Adminhtml/Product/Attribute/Validate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php index 7638f71ebb6ea..4dd406a5d14db 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php @@ -169,8 +169,8 @@ private function checkUniqueOption(DataObject $response, array $options = null) $response, [__('The value of Admin must be unique. (%1)', implode(', ', $duplicates))] ); + $response->setError(true); } - $response->setError(true); } return $this; } From 45686878a919064ed2abc1321bc3eff3f41b807b Mon Sep 17 00:00:00 2001 From: Jeroen Alewijns Date: Fri, 4 Aug 2017 09:23:18 +0200 Subject: [PATCH 312/316] Update menu.js Prevent remove click listener when switch from mobile to desktop mode. --- lib/web/mage/menu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/web/mage/menu.js b/lib/web/mage/menu.js index fdb796addbcf0..6b022dec0fa00 100644 --- a/lib/web/mage/menu.js +++ b/lib/web/mage/menu.js @@ -371,7 +371,8 @@ define([ */ _toggleDesktopMode: function () { var categoryParent, html; - + + $(this.element).off('click mouseenter mouseleave'); this._on({ /** * Prevent focus from sticking to links inside menu after clicking From a3599fe8757b0511de184d78792bc0e3e40761e4 Mon Sep 17 00:00:00 2001 From: Anton Evers Date: Fri, 4 Aug 2017 15:55:04 +0600 Subject: [PATCH 313/316] Fixes #10255: base_shipping_discount_tax_compensation_amnt was empty from order onwards --- app/code/Magento/Sales/etc/fieldset.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/etc/fieldset.xml b/app/code/Magento/Sales/etc/fieldset.xml index 3d29575063fef..7ddec847b06fb 100644 --- a/app/code/Magento/Sales/etc/fieldset.xml +++ b/app/code/Magento/Sales/etc/fieldset.xml @@ -279,7 +279,7 @@ - + From 4540f30545c339ccc778ad18f5c0c43b83d75e18 Mon Sep 17 00:00:00 2001 From: Jeroen Alewijns Date: Fri, 4 Aug 2017 13:14:03 +0200 Subject: [PATCH 314/316] Update menu.js --- lib/web/mage/menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/mage/menu.js b/lib/web/mage/menu.js index 6b022dec0fa00..c9850a47f19a1 100644 --- a/lib/web/mage/menu.js +++ b/lib/web/mage/menu.js @@ -372,7 +372,7 @@ define([ _toggleDesktopMode: function () { var categoryParent, html; - $(this.element).off('click mouseenter mouseleave'); + $(this.element).off('click mousedown mouseenter mouseleave'); this._on({ /** * Prevent focus from sticking to links inside menu after clicking From 274703ec5ce53e292273dcfd6f9675d1067dbf1f Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Fri, 4 Aug 2017 15:30:10 +0300 Subject: [PATCH 315/316] magento/magento2#10430: Prevent remove click listener when switch from mobile to desktop mode. - Fixed test failures regarding coding style --- lib/web/mage/menu.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/web/mage/menu.js b/lib/web/mage/menu.js index c9850a47f19a1..b345813b2779c 100644 --- a/lib/web/mage/menu.js +++ b/lib/web/mage/menu.js @@ -323,6 +323,7 @@ define([ $(this.element).off('mouseenter mouseleave'); this._on({ + /** * @param {jQuery.Event} event */ @@ -371,9 +372,10 @@ define([ */ _toggleDesktopMode: function () { var categoryParent, html; - + $(this.element).off('click mousedown mouseenter mouseleave'); this._on({ + /** * Prevent focus from sticking to links inside menu after clicking * them (focus should always stay on UL during navigation). From 16b77ca932fcd500274ef5ac9c9f88a74d1f1187 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski Date: Fri, 4 Aug 2017 22:18:48 +0100 Subject: [PATCH 316/316] magento/magento2#10045 Rename item resolver to item provider --- app/code/Magento/Sitemap/Helper/Data.php | 6 ++--- .../Category.php | 4 ++-- .../CategoryConfigReader.php | 2 +- .../CmsPage.php | 4 ++-- .../CmsPageConfigReader.php | 2 +- .../Composite.php | 16 ++++++------- .../ConfigReaderInterface.php | 2 +- .../ItemProviderInterface.php} | 6 ++--- .../Product.php | 4 ++-- .../ProductConfigReader.php | 2 +- app/code/Magento/Sitemap/Model/Sitemap.php | 18 +++++++------- .../CategoryTest.php | 6 ++--- .../CmsPageTest.php | 6 ++--- .../CompositeTest.php | 8 +++---- .../ProductTest.php | 6 ++--- .../Sitemap/Test/Unit/Model/SitemapTest.php | 14 +++++------ app/code/Magento/Sitemap/etc/di.xml | 24 +++++++++---------- .../CategoryConfigReaderTest.php | 2 +- .../CmsPageConfigReaderTest.php | 2 +- .../ProductConfigReaderTest.php | 2 +- 20 files changed, 68 insertions(+), 68 deletions(-) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/Category.php (94%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/CategoryConfigReader.php (96%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/CmsPage.php (94%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/CmsPageConfigReader.php (96%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/Composite.php (56%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/ConfigReaderInterface.php (91%) rename app/code/Magento/Sitemap/Model/{ItemResolver/ItemResolverInterface.php => ItemProvider/ItemProviderInterface.php} (74%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/Product.php (94%) rename app/code/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/ProductConfigReader.php (96%) rename app/code/Magento/Sitemap/Test/Unit/Model/{ItemResolver => ItemProvider}/CategoryTest.php (96%) rename app/code/Magento/Sitemap/Test/Unit/Model/{ItemResolver => ItemProvider}/CmsPageTest.php (96%) rename app/code/Magento/Sitemap/Test/Unit/Model/{ItemResolver => ItemProvider}/CompositeTest.php (87%) rename app/code/Magento/Sitemap/Test/Unit/Model/{ItemResolver => ItemProvider}/ProductTest.php (97%) rename dev/tests/integration/testsuite/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/CategoryConfigReaderTest.php (96%) rename dev/tests/integration/testsuite/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/CmsPageConfigReaderTest.php (96%) rename dev/tests/integration/testsuite/Magento/Sitemap/Model/{ItemResolver => ItemProvider}/ProductConfigReaderTest.php (96%) diff --git a/app/code/Magento/Sitemap/Helper/Data.php b/app/code/Magento/Sitemap/Helper/Data.php index 6dc2346aa0b87..04734a2e9e17c 100644 --- a/app/code/Magento/Sitemap/Helper/Data.php +++ b/app/code/Magento/Sitemap/Helper/Data.php @@ -10,9 +10,9 @@ */ namespace Magento\Sitemap\Helper; -use Magento\Sitemap\Model\ItemResolver\CategoryConfigReader; -use Magento\Sitemap\Model\ItemResolver\CmsPageConfigReader; -use Magento\Sitemap\Model\ItemResolver\ProductConfigReader; +use Magento\Sitemap\Model\ItemProvider\CategoryConfigReader; +use Magento\Sitemap\Model\ItemProvider\CmsPageConfigReader; +use Magento\Sitemap\Model\ItemProvider\ProductConfigReader; use Magento\Sitemap\Model\SitemapConfigReader; use Magento\Store\Model\ScopeInterface; diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/Category.php b/app/code/Magento/Sitemap/Model/ItemProvider/Category.php similarity index 94% rename from app/code/Magento/Sitemap/Model/ItemResolver/Category.php rename to app/code/Magento/Sitemap/Model/ItemProvider/Category.php index e95be6519d509..2c41915c72e98 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/Category.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/Category.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory; use Magento\Sitemap\Model\SitemapItemInterfaceFactory; -class Category implements ItemResolverInterface +class Category implements ItemProviderInterface { /** * Category factory diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php b/app/code/Magento/Sitemap/Model/ItemProvider/CategoryConfigReader.php similarity index 96% rename from app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php rename to app/code/Magento/Sitemap/Model/ItemProvider/CategoryConfigReader.php index 7f6622825dd28..2dee63eff2600 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/CategoryConfigReader.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/CategoryConfigReader.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Store\Model\ScopeInterface; diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php b/app/code/Magento/Sitemap/Model/ItemProvider/CmsPage.php similarity index 94% rename from app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php rename to app/code/Magento/Sitemap/Model/ItemProvider/CmsPage.php index f46cf5b310f30..bc9e6eef7aa36 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/CmsPage.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/CmsPage.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Sitemap\Model\ResourceModel\Cms\PageFactory; use Magento\Sitemap\Model\SitemapItemInterfaceFactory; -class CmsPage implements ItemResolverInterface +class CmsPage implements ItemProviderInterface { /** * Cms page factory diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php b/app/code/Magento/Sitemap/Model/ItemProvider/CmsPageConfigReader.php similarity index 96% rename from app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php rename to app/code/Magento/Sitemap/Model/ItemProvider/CmsPageConfigReader.php index 6139c9c46b680..e173dc79e343d 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReader.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/CmsPageConfigReader.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Store\Model\ScopeInterface; diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/Composite.php b/app/code/Magento/Sitemap/Model/ItemProvider/Composite.php similarity index 56% rename from app/code/Magento/Sitemap/Model/ItemResolver/Composite.php rename to app/code/Magento/Sitemap/Model/ItemProvider/Composite.php index f60b07e18620a..60137fac6e013 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/Composite.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/Composite.php @@ -4,25 +4,25 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; -class Composite implements ItemResolverInterface +class Composite implements ItemProviderInterface { /** * Item resolvers * - * @var ItemResolverInterface[] + * @var ItemProviderInterface[] */ - private $itemResolvers; + private $itemProviders; /** * Composite constructor. * - * @param ItemResolverInterface[] $itemResolvers + * @param ItemProviderInterface[] $itemProviders */ - public function __construct($itemResolvers = []) + public function __construct($itemProviders = []) { - $this->itemResolvers = $itemResolvers; + $this->itemProviders = $itemProviders; } /** @@ -32,7 +32,7 @@ public function getItems($storeId) { $items = []; - foreach ($this->itemResolvers as $resolver) { + foreach ($this->itemProviders as $resolver) { foreach ($resolver->getItems($storeId) as $item) { $items[] = $item; } diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php b/app/code/Magento/Sitemap/Model/ItemProvider/ConfigReaderInterface.php similarity index 91% rename from app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php rename to app/code/Magento/Sitemap/Model/ItemProvider/ConfigReaderInterface.php index 49d33bf4f39a7..1e8b545728a04 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/ConfigReaderInterface.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/ConfigReaderInterface.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; /** * Item resolver config reader interface diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/ItemResolverInterface.php b/app/code/Magento/Sitemap/Model/ItemProvider/ItemProviderInterface.php similarity index 74% rename from app/code/Magento/Sitemap/Model/ItemResolver/ItemResolverInterface.php rename to app/code/Magento/Sitemap/Model/ItemProvider/ItemProviderInterface.php index dad71096e1f68..89ad2afdd01a2 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/ItemResolverInterface.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/ItemProviderInterface.php @@ -3,16 +3,16 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Sitemap\Model\SitemapItemInterface; /** - * Sitemap item resolver interface + * Sitemap item provider interface * * @api */ -interface ItemResolverInterface +interface ItemProviderInterface { /** * Get sitemap items diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/Product.php b/app/code/Magento/Sitemap/Model/ItemProvider/Product.php similarity index 94% rename from app/code/Magento/Sitemap/Model/ItemResolver/Product.php rename to app/code/Magento/Sitemap/Model/ItemProvider/Product.php index 792eb10615469..aecba66580794 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/Product.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/Product.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory; use Magento\Sitemap\Model\SitemapItemInterfaceFactory; -class Product implements ItemResolverInterface +class Product implements ItemProviderInterface { /** * Product factory diff --git a/app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php b/app/code/Magento/Sitemap/Model/ItemProvider/ProductConfigReader.php similarity index 96% rename from app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php rename to app/code/Magento/Sitemap/Model/ItemProvider/ProductConfigReader.php index c8a1df24a6f74..c1a01d2ed60c4 100644 --- a/app/code/Magento/Sitemap/Model/ItemResolver/ProductConfigReader.php +++ b/app/code/Magento/Sitemap/Model/ItemProvider/ProductConfigReader.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Store\Model\ScopeInterface; diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index 6009f43d84545..767d189a3310b 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -14,7 +14,7 @@ use Magento\Framework\Exception\LocalizedException; use Magento\Framework\UrlInterface; use Magento\Robots\Model\Config\Value; -use Magento\Sitemap\Model\ItemResolver\ItemResolverInterface; +use Magento\Sitemap\Model\ItemProvider\ItemProviderInterface; use Magento\Sitemap\Model\ResourceModel\Sitemap as SitemapResource; /** @@ -164,9 +164,9 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento /** * Item resolver * - * @var ItemResolverInterface + * @var ItemProviderInterface */ - private $itemResolver; + private $itemProvider; /** * Sitemap config reader @@ -201,7 +201,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel implements \Magento * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @param DocumentRoot|null $documentRoot - * @param ItemResolverInterface|null $itemResolver + * @param ItemProviderInterface|null $itemProvider * @param SitemapConfigReaderInterface|null $configReader * @param \Magento\Sitemap\Model\SitemapItemInterfaceFactory|null $sitemapItemFactory * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -223,7 +223,7 @@ public function __construct( \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], \Magento\Config\Model\Config\Reader\Source\Deployed\DocumentRoot $documentRoot = null, - ItemResolverInterface $itemResolver = null, + ItemProviderInterface $itemProvider = null, SitemapConfigReaderInterface $configReader = null, \Magento\Sitemap\Model\SitemapItemInterfaceFactory $sitemapItemFactory = null ) { @@ -238,7 +238,7 @@ public function __construct( $this->_storeManager = $storeManager; $this->_request = $request; $this->dateTime = $dateTime; - $this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(ItemResolverInterface::class); + $this->itemProvider = $itemProvider ?: ObjectManager::getInstance()->get(ItemProviderInterface::class); $this->configReader = $configReader ?: ObjectManager::getInstance()->get(SitemapConfigReaderInterface::class); $this->sitemapItemFactory = $sitemapItemFactory ?: ObjectManager::getInstance()->get( \Magento\Sitemap\Model\SitemapItemInterfaceFactory::class @@ -278,7 +278,7 @@ protected function _getStream() * @param DataObject $sitemapItem * @return $this * @deprecated - * @see ItemResolverInterface + * @see ItemProviderInterface */ public function addSitemapItem(DataObject $sitemapItem) { @@ -292,7 +292,7 @@ public function addSitemapItem(DataObject $sitemapItem) * * @return void * @deprecated - * @see ItemResolverInterface + * @see ItemProviderInterface */ public function collectSitemapItems() { @@ -332,7 +332,7 @@ public function collectSitemapItems() */ protected function _initSitemapItems() { - $sitemapItems = $this->itemResolver->getItems($this->getStoreId()); + $sitemapItems = $this->itemProvider->getItems($this->getStoreId()); $mappedItems = $this->mapToSitemapItem(); $this->_sitemapItems = array_merge($sitemapItems, $mappedItems); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CategoryTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CategoryTest.php similarity index 96% rename from app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CategoryTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CategoryTest.php index 0d46f6b75e6c7..0986418fa1aca 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CategoryTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CategoryTest.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; +namespace Magento\Sitemap\Test\Unit\Model\ItemProvider; use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\Sitemap\Model\ItemResolver\Category as CategoryItemResolver; -use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; +use Magento\Sitemap\Model\ItemProvider\Category as CategoryItemResolver; +use Magento\Sitemap\Model\ItemProvider\ConfigReaderInterface; use Magento\Sitemap\Model\ResourceModel\Catalog\Category as CategoryResource; use Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory; use Magento\Sitemap\Model\SitemapItem; diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CmsPageTest.php similarity index 96% rename from app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CmsPageTest.php index 6a29f4985fa29..718b6947a6961 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CmsPageTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CmsPageTest.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; +namespace Magento\Sitemap\Test\Unit\Model\ItemProvider; use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\Sitemap\Model\ItemResolver\CmsPage as CmsPageItemResolver; -use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; +use Magento\Sitemap\Model\ItemProvider\CmsPage as CmsPageItemResolver; +use Magento\Sitemap\Model\ItemProvider\ConfigReaderInterface; use Magento\Sitemap\Model\ResourceModel\Cms\Page as CmsPageResource; use Magento\Sitemap\Model\ResourceModel\Cms\PageFactory; use Magento\Sitemap\Model\SitemapItem; diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CompositeTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CompositeTest.php similarity index 87% rename from app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CompositeTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CompositeTest.php index 58438b6606ae0..8347ef0339478 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/CompositeTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/CompositeTest.php @@ -4,10 +4,10 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; +namespace Magento\Sitemap\Test\Unit\Model\ItemProvider; -use Magento\Sitemap\Model\ItemResolver\Composite as CompositeItemResolver; -use Magento\Sitemap\Model\ItemResolver\ItemResolverInterface; +use Magento\Sitemap\Model\ItemProvider\Composite as CompositeItemResolver; +use Magento\Sitemap\Model\ItemProvider\ItemProviderInterface; use Magento\Sitemap\Model\SitemapItemInterface; class CompositeTest extends \PHPUnit_Framework_TestCase @@ -28,7 +28,7 @@ public function testGetItems($itemResolverData, $expectedItems) $mockResolvers = []; foreach ($itemResolverData as $data) { - $mockResolver = $this->getMockForAbstractClass(ItemResolverInterface::class); + $mockResolver = $this->getMockForAbstractClass(ItemProviderInterface::class); $mockResolver->expects(self::once()) ->method('getItems') ->willReturn($data); diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/ProductTest.php similarity index 97% rename from app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php rename to app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/ProductTest.php index 0f60849378e4e..adb3c00189200 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ItemResolver/ProductTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ItemProvider/ProductTest.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Test\Unit\Model\ItemResolver; +namespace Magento\Sitemap\Test\Unit\Model\ItemProvider; use Magento\Framework\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; -use Magento\Sitemap\Model\ItemResolver\Product as ProductItemResolver; +use Magento\Sitemap\Model\ItemProvider\ConfigReaderInterface; +use Magento\Sitemap\Model\ItemProvider\Product as ProductItemResolver; use Magento\Sitemap\Model\ResourceModel\Catalog\Product as ProductResource; use Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory; use Magento\Sitemap\Model\SitemapItem; diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index 3464436a087c8..51ce898d68f9f 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -11,8 +11,8 @@ use Magento\Framework\Filesystem\File\Write; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Sitemap\Helper\Data; -use Magento\Sitemap\Model\ItemResolver\ConfigReaderInterface; -use Magento\Sitemap\Model\ItemResolver\ItemResolverInterface; +use Magento\Sitemap\Model\ItemProvider\ConfigReaderInterface; +use Magento\Sitemap\Model\ItemProvider\ItemProviderInterface; use Magento\Sitemap\Model\ResourceModel\Catalog\Category; use Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory; use Magento\Sitemap\Model\ResourceModel\Catalog\Product; @@ -77,9 +77,9 @@ class SitemapTest extends \PHPUnit_Framework_TestCase private $storeManagerMock; /** - * @var ItemResolverInterface|\PHPUnit_Framework_MockObject_MockObject + * @var ItemProviderInterface|\PHPUnit_Framework_MockObject_MockObject */ - private $itemResolverMock; + private $itemProviderMock; /** * @var ConfigReaderInterface|\PHPUnit_Framework_MockObject_MockObject @@ -146,7 +146,7 @@ protected function setUp() ->willReturn($this->directoryMock); $this->configReaderMock = $this->getMockForAbstractClass(SitemapConfigReaderInterface::class); - $this->itemResolverMock = $this->getMockForAbstractClass(ItemResolverInterface::class); + $this->itemProviderMock = $this->getMockForAbstractClass(ItemProviderInterface::class); } /** @@ -525,7 +525,7 @@ protected function getModelMock($mockBeforeSave = false) $storeBaseMediaUrl = 'http://store.com/pub/media/catalog/product/cache/c9e0b0ef589f3508e5ba515cde53c5ff/'; - $this->itemResolverMock->expects($this->any()) + $this->itemProviderMock->expects($this->any()) ->method('getItems') ->willReturn([ new SitemapItem('category.html', '1.0', 'daily', '2012-12-21 00:00:00'), @@ -610,7 +610,7 @@ private function getModelConstructorArgs() 'storeManager' => $this->storeManagerMock, 'sitemapData' => $this->helperMockSitemap, 'filesystem' => $this->filesystemMock, - 'itemResolver' => $this->itemResolverMock, + 'itemProvider' => $this->itemProviderMock, 'configReader' => $this->configReaderMock, ] ); diff --git a/app/code/Magento/Sitemap/etc/di.xml b/app/code/Magento/Sitemap/etc/di.xml index e8200bbc9e50c..e627b3b50fff9 100644 --- a/app/code/Magento/Sitemap/etc/di.xml +++ b/app/code/Magento/Sitemap/etc/di.xml @@ -7,7 +7,7 @@ --> - + @@ -22,28 +22,28 @@ - + - - Magento\Sitemap\Model\ItemResolver\Category - Magento\Sitemap\Model\ItemResolver\CmsPage - Magento\Sitemap\Model\ItemResolver\Product + + Magento\Sitemap\Model\ItemProvider\Category + Magento\Sitemap\Model\ItemProvider\CmsPage + Magento\Sitemap\Model\ItemProvider\Product - + - Magento\Sitemap\Model\ItemResolver\CategoryConfigReader + Magento\Sitemap\Model\ItemProvider\CategoryConfigReader - + - Magento\Sitemap\Model\ItemResolver\ProductConfigReader + Magento\Sitemap\Model\ItemProvider\ProductConfigReader - + - Magento\Sitemap\Model\ItemResolver\CmsPageConfigReader + Magento\Sitemap\Model\ItemProvider\CmsPageConfigReader diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/CategoryConfigReaderTest.php similarity index 96% rename from dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php rename to dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/CategoryConfigReaderTest.php index d4d24daf00429..fbaf57e069a6e 100644 --- a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CategoryConfigReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/CategoryConfigReaderTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Store\Model\Store; use Magento\TestFramework\Helper\Bootstrap; diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/CmsPageConfigReaderTest.php similarity index 96% rename from dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php rename to dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/CmsPageConfigReaderTest.php index 89142d451aada..24cc56778efdb 100644 --- a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/CmsPageConfigReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/CmsPageConfigReaderTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Store\Model\Store; use Magento\TestFramework\Helper\Bootstrap; diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/ProductConfigReaderTest.php similarity index 96% rename from dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php rename to dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/ProductConfigReaderTest.php index f130996e73a0a..81b79e6270cd3 100644 --- a/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemResolver/ProductConfigReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ItemProvider/ProductConfigReaderTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Sitemap\Model\ItemResolver; +namespace Magento\Sitemap\Model\ItemProvider; use Magento\Store\Model\Store; use Magento\TestFramework\Helper\Bootstrap;