From cc08f74995dd54cc3f2c20474211448feb550e04 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina Date: Mon, 4 Mar 2019 13:20:08 +0300 Subject: [PATCH 001/209] MAGETWO-71835: [Product grid] SC's values aren't sorted alphabetically in the tooltip - Sort values case insensitive --- .../Magento/Ui/view/base/web/js/grid/columns/expandable.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js index 8bbe5971490a..9d7477eb8ae2 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js @@ -67,7 +67,11 @@ define([ } }); - return labels.sort(); + return labels.sort( + function(a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + } + ); }, /** From d452a36e32955fbb76ae14d8b57298a6816e5199 Mon Sep 17 00:00:00 2001 From: Ievgenii Gryshkun Date: Fri, 15 Mar 2019 13:04:30 +0200 Subject: [PATCH 002/209] Query category for disabled catalog with products returns the products count --- .../Model/Resolver/CategoryTree.php | 8 +++++++- .../Magento/GraphQl/Catalog/CategoryTest.php | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php index 1783a5cd9a7e..866e002f1b43 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php @@ -79,6 +79,12 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value } $result = $this->extractDataFromCategoryTree->execute($categoriesTree); - return current($result); + + $category = current($result); + if ($category['is_active'] == false) { + throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); + } + + return $category; } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/CategoryTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/CategoryTest.php index cbce53325e9e..5fe46cdb1961 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/CategoryTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/CategoryTest.php @@ -122,6 +122,25 @@ public function testGetCategoryById() self::assertEquals(13, $response['category']['id']); } + /** + * @magentoApiDataFixture Magento/Catalog/_files/categories.php + * @expectedException \Exception + * @expectedExceptionMessage Category doesn't exist + */ + public function testGetDisabledCategory() + { + $categoryId = 8; + $query = <<graphQlQuery($query); + } + public function testNonExistentCategoryWithProductCount() { $query = << Date: Mon, 25 Mar 2019 17:31:19 +0530 Subject: [PATCH 003/209] added filter nfinset --- app/code/Magento/GraphQl/etc/schema.graphqls | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/GraphQl/etc/schema.graphqls b/app/code/Magento/GraphQl/etc/schema.graphqls index 7ea715097cdf..0f99cf8c7a68 100644 --- a/app/code/Magento/GraphQl/etc/schema.graphqls +++ b/app/code/Magento/GraphQl/etc/schema.graphqls @@ -10,6 +10,7 @@ type Mutation { input FilterTypeInput @doc(description: "FilterTypeInput specifies which action will be performed in a query ") { eq: String @doc(description: "Equals") finset: [String] @doc(description: "Find in set. The value can contain a set of comma-separated values") + nfinset: [String] @doc(description: "Not find in set. The value can contain a set of comma-separated values") from: String @doc(description: "From. Must be used with 'to'") gt: String @doc(description: "Greater than") gteq: String @doc(description: "Greater than or equal to") From 376fd49aec2271202ada58eb9dafc3dbe0798521 Mon Sep 17 00:00:00 2001 From: Ronak Patel Date: Tue, 26 Mar 2019 18:13:52 +0530 Subject: [PATCH 004/209] Added API-functional tests --- .../Framework/GraphQl/_files/schemaA.graphqls | 1 + .../Framework/GraphQl/_files/schemaC.graphqls | 1 + .../_files/schema_response_sdl_description.php | 14 ++++++++++++++ .../GraphQl/_files/schema_with_description_sdl.php | 14 ++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls index 6c832e5f122a..ba0d1469879c 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls @@ -9,6 +9,7 @@ type Mutation { input FilterTypeInput @doc(description:"Comment for FilterTypeInput") { eq: String @doc(description:"Equal") finset: [String] + nfinset: [String] from: String gt: String gteq: String diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls index 84609293f31a..9eb52f11e8ac 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls @@ -20,6 +20,7 @@ type Attribute @doc(description: "Attribute contains the attribute_type of the s input FilterTypeInput @doc(description:"Comment for FilterTypeInput") { eq: String @doc(description:"Equal") finset: [String] + nfinset: [String] from: String gt: String gteq: String diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php index 0a73b8ed445d..d889267973b5 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php @@ -519,6 +519,20 @@ ], 'defaultValue' => null ], + [ + 'name' => 'nfinset', + 'description' => '', + 'type' => [ + 'kind' => 'LIST', + 'name' => null, + 'ofType' => [ + 'kind' => 'SCALAR', + 'name' => 'String', + 'ofType' => null + ] + ], + 'defaultValue' => null + ], [ 'name' => 'from', 'description' => '', diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php index 2aeb8f3d1443..c724eafa26ef 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php @@ -519,6 +519,20 @@ ], 'defaultValue' => null ], + [ + 'name' => 'nfinset', + 'description' => '', + 'type' => [ + 'kind' => 'LIST', + 'name' => null, + 'ofType' => [ + 'kind' => 'SCALAR', + 'name' => 'String', + 'ofType' => null + ] + ], + 'defaultValue' => null + ], [ 'name' => 'from', 'description' => '', From aab89bb38eb1f24444630bb720a757b0d55473c7 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan Date: Fri, 29 Mar 2019 12:41:52 +0400 Subject: [PATCH 005/209] MAGETWO-98635: Multiple wishlists not supporting with Recently view widget or etc - Added automated test script. --- .../ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml index 2fa1b86a6157..608613492012 100644 --- a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml @@ -21,4 +21,12 @@ + + + + + + + + From 84a75095542b085fd880b55bc2cb13addbfb9b5d Mon Sep 17 00:00:00 2001 From: Yurii Borysov Date: Fri, 29 Mar 2019 09:30:26 +0200 Subject: [PATCH 006/209] MAGETWO-98748: Incorrect behavior in the category menu on the Storefront - Update top menu caching policy --- app/code/Magento/Catalog/Plugin/Block/Topmenu.php | 9 +++++++++ app/code/Magento/Theme/Block/Html/Topmenu.php | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/app/code/Magento/Catalog/Plugin/Block/Topmenu.php b/app/code/Magento/Catalog/Plugin/Block/Topmenu.php index 44f9193ab401..e0870aad9e72 100644 --- a/app/code/Magento/Catalog/Plugin/Block/Topmenu.php +++ b/app/code/Magento/Catalog/Plugin/Block/Topmenu.php @@ -14,6 +14,11 @@ */ class Topmenu { + /** + * Cache tag for menu block + */ + const CACHE_TAG = "top_menu"; + /** * Catalog category * @@ -119,6 +124,7 @@ public function beforeGetIdentities(\Magento\Theme\Block\Html\Topmenu $subject) $subject->addIdentity(Category::CACHE_TAG); $rootId = $this->storeManager->getStore()->getRootCategoryId(); $storeId = $this->storeManager->getStore()->getId(); + $currentCategory = $this->getCurrentCategory(); /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $collection */ $collection = $this->getCategoryTree($storeId, $rootId); $mapping = [$rootId => $subject->getMenu()]; // use nodes stack to avoid recursion @@ -128,6 +134,9 @@ public function beforeGetIdentities(\Magento\Theme\Block\Html\Topmenu $subject) } $subject->addIdentity(Category::CACHE_TAG . '_' . $category->getId()); } + if ($currentCategory) { + $subject->addIdentity(self::CACHE_TAG . '_' . Category::CACHE_TAG . '_' . $currentCategory->getId()); + } } /** diff --git a/app/code/Magento/Theme/Block/Html/Topmenu.php b/app/code/Magento/Theme/Block/Html/Topmenu.php index 242947d19b32..c60dd417b885 100644 --- a/app/code/Magento/Theme/Block/Html/Topmenu.php +++ b/app/code/Magento/Theme/Block/Html/Topmenu.php @@ -71,6 +71,16 @@ protected function getCacheLifetime() return parent::getCacheLifetime() ?: 3600; } + /** + * Get cache key informative items + * + * @return array + */ + public function getCacheKeyInfo() + { + return array_merge(parent::getCacheKeyInfo(), $this->getIdentities()); + } + /** * Get top menu html * From 043f16154a27798c7f74e8429c7121ae04797417 Mon Sep 17 00:00:00 2001 From: vprohorov Date: Fri, 29 Mar 2019 19:17:12 +0300 Subject: [PATCH 007/209] MAGETWO-91589: Slow query delete on sub SELECT query - Query rewrite --- .../Model/ResourceModel/Category/Product.php | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php index 311cc6de7611..983fa30c98c7 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php @@ -86,7 +86,27 @@ public function removeMultiple(array $removeData) */ public function removeMultipleByProductCategory(array $filter) { - return $this->getConnection()->deleteFromSelect($this->prepareSelect($filter), self::TABLE_NAME); + return $this->getConnection()->deleteFromSelect($this->prepareJoin($filter), self::TABLE_NAME); + } + + /** + * Prepare select statement for specific filter + * + * @param array $data + * @return \Magento\Framework\DB\Select + */ + private function prepareJoin($data) + { + $select = $this->getConnection()->select(); + $select->from(DbStorage::TABLE_NAME); + $select->join( + self::TABLE_NAME, + DbStorage::TABLE_NAME . '.url_rewrite_id = ' . self::TABLE_NAME . '.url_rewrite_id' + ); + foreach ($data as $column => $value) { + $select->where(DbStorage::TABLE_NAME . '.' . $column . ' IN (?)', $value); + } + return $select; } /** From 72b03df3d05e47ebdea737106093fb0733682767 Mon Sep 17 00:00:00 2001 From: vprohorov Date: Mon, 1 Apr 2019 16:41:01 +0300 Subject: [PATCH 008/209] MAGETWO-91589: Slow query delete on sub SELECT query - Fix static tests --- .../Model/ResourceModel/Category/Product.php | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php index 983fa30c98c7..a475e3d5f4b8 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php @@ -3,6 +3,9 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; @@ -49,7 +52,7 @@ protected function _construct() public function saveMultiple(array $insertData) { $connection = $this->getConnection(); - if (sizeof($insertData) <= self::CHUNK_SIZE) { + if (count($insertData) <= self::CHUNK_SIZE) { return $connection->insertMultiple($this->getTable(self::TABLE_NAME), $insertData); } $data = array_chunk($insertData, self::CHUNK_SIZE); @@ -86,7 +89,7 @@ public function removeMultiple(array $removeData) */ public function removeMultipleByProductCategory(array $filter) { - return $this->getConnection()->deleteFromSelect($this->prepareJoin($filter), self::TABLE_NAME); + return $this->getConnection()->deleteFromSelect($this->prepareSelect($filter), self::TABLE_NAME); } /** @@ -95,7 +98,7 @@ public function removeMultipleByProductCategory(array $filter) * @param array $data * @return \Magento\Framework\DB\Select */ - private function prepareJoin($data) + private function prepareSelect($data) { $select = $this->getConnection()->select(); $select->from(DbStorage::TABLE_NAME); @@ -108,21 +111,4 @@ private function prepareJoin($data) } return $select; } - - /** - * Prepare select statement for specific filter - * - * @param array $data - * @return \Magento\Framework\DB\Select - */ - private function prepareSelect($data) - { - $select = $this->getConnection()->select(); - $select->from($this->getTable(DbStorage::TABLE_NAME), 'url_rewrite_id'); - - foreach ($data as $column => $value) { - $select->where($this->getConnection()->quoteIdentifier($column) . ' IN (?)', $value); - } - return $select; - } } From bf8af1e7d3781db0921ed530e4f51e6d54ae56e1 Mon Sep 17 00:00:00 2001 From: Yurii Borysov Date: Tue, 2 Apr 2019 12:49:45 +0300 Subject: [PATCH 009/209] MAGETWO-98748: Incorrect behavior in the category menu on the Storefront - Removed constant, added private class property for cache tag --- app/code/Magento/Catalog/Plugin/Block/Topmenu.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Plugin/Block/Topmenu.php b/app/code/Magento/Catalog/Plugin/Block/Topmenu.php index e0870aad9e72..35ce327c74ea 100644 --- a/app/code/Magento/Catalog/Plugin/Block/Topmenu.php +++ b/app/code/Magento/Catalog/Plugin/Block/Topmenu.php @@ -17,7 +17,7 @@ class Topmenu /** * Cache tag for menu block */ - const CACHE_TAG = "top_menu"; + private $cacheTag = "top_menu"; /** * Catalog category @@ -135,7 +135,7 @@ public function beforeGetIdentities(\Magento\Theme\Block\Html\Topmenu $subject) $subject->addIdentity(Category::CACHE_TAG . '_' . $category->getId()); } if ($currentCategory) { - $subject->addIdentity(self::CACHE_TAG . '_' . Category::CACHE_TAG . '_' . $currentCategory->getId()); + $subject->addIdentity($this->cacheTag . '_' . Category::CACHE_TAG . '_' . $currentCategory->getId()); } } From 431ff80c2eb7136172accdc5368e0382d0425bce Mon Sep 17 00:00:00 2001 From: Aliaksei Yakimovich2 Date: Wed, 3 Apr 2019 17:23:06 +0300 Subject: [PATCH 010/209] MAGETWO-88965: Magento\Test\Legacy\LayoutTest is failing for B2B - Fixed issues related to static test failures; --- .../Backend/Block/Widget/Grid/Column/Multistore.php | 9 +++++++-- .../static/testsuite/Magento/Test/Legacy/LayoutTest.php | 8 +++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php index c45a222d1eb9..474fc0e4714a 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php @@ -17,10 +17,15 @@ class Multistore extends \Magento\Backend\Block\Widget\Grid\Column /** * @param \Magento\Backend\Block\Template\Context $context * @param array $data + * @param array $additionalRendererTypes */ - public function __construct(\Magento\Backend\Block\Template\Context $context, array $data = []) - { + public function __construct( + \Magento\Backend\Block\Template\Context $context, + array $data = [], + array $additionalRendererTypes = [] + ) { parent::__construct($context, $data); + $this->_rendererTypes = array_merge($this->_rendererTypes, $additionalRendererTypes); } /** diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php index 1ee599a04463..3e2b808923a4 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php @@ -4,13 +4,13 @@ * See COPYING.txt for license details. */ -/** - * Coverage of obsolete nodes in layout - */ namespace Magento\Test\Legacy; use Magento\Framework\Component\ComponentRegistrar; +/** + * Coverage of obsolete nodes in layout + */ class LayoutTest extends \PHPUnit\Framework\TestCase { /** @@ -356,8 +356,6 @@ public function getAllowedActionNodeMethods() 'unsetChildren', 'updateButton', 'setIsProductListingContext', - 'checkCompanyStatus', // MAGETWO-88965 - 'setRendererType', // MAGETWO-88965 ]; } } From e66b7ed0452b3fbeee31ce3269d1f0ce33620a12 Mon Sep 17 00:00:00 2001 From: vprohorov Date: Wed, 3 Apr 2019 19:12:36 +0300 Subject: [PATCH 011/209] MAGETWO-63599: [GitHub] catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes #8204 - Added checks for zero byte files --- .../Image/Adapter/AbstractAdapter.php | 21 ++++++++-- .../Magento/Framework/Image/Adapter/Gd2.php | 39 +++++++++++-------- .../Image/Test/Unit/Adapter/Gd2Test.php | 10 +++++ .../Unit/Adapter/_files/global_php_mock.php | 13 +++++++ 4 files changed, 64 insertions(+), 19 deletions(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php index 6042e4eee491..00f2c39aea8a 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php +++ b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php @@ -3,11 +3,16 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Framework\Image\Adapter; use Magento\Framework\App\Filesystem\DirectoryList; /** + * Image abstract adapter + * * @file Abstract.php * @author Magento Core Team * @SuppressWarnings(PHPMD.TooManyFields) @@ -169,6 +174,7 @@ abstract public function open($fileName); /** * Save image to specific path. + * * If some folders of path does not exist they will be created * * @param null|string $destination @@ -301,7 +307,7 @@ public function getImageType() if ($this->_fileType) { return $this->_fileType; } else { - if ($this->_canProcess()) { + if ($this->_canProcess() && filesize($this->_fileName) > 0) { list($this->_imageSrcWidth, $this->_imageSrcHeight, $this->_fileType) = getimagesize($this->_fileName); return $this->_fileType; } @@ -620,7 +626,7 @@ protected function _checkDimensions($frameWidth, $frameHeight) $frameHeight !== null && $frameHeight <= 0 || empty($frameWidth) && empty($frameHeight) ) { - throw new \Exception('Invalid image dimensions.'); + throw new \InvalidArgumentException('Invalid image dimensions.'); } } @@ -687,7 +693,9 @@ protected function _prepareDestination($destination = null, $newName = null) $this->directoryWrite->create($this->directoryWrite->getRelativePath($destination)); } catch (\Magento\Framework\Exception\FileSystemException $e) { $this->logger->critical($e); - throw new \Exception('Unable to write file into directory ' . $destination . '. Access forbidden.'); + throw new \DomainException( + 'Unable to write file into directory ' . $destination . '. Access forbidden.' + ); } } @@ -710,12 +718,19 @@ protected function _canProcess() * @param string $filePath * @return bool * @throws \InvalidArgumentException + * @throws \DomainException + * @throws \BadFunctionCallException + * @throws \RuntimeException + * @throws \OverflowException */ public function validateUploadFile($filePath) { if (!file_exists($filePath)) { throw new \InvalidArgumentException("File '{$filePath}' does not exists."); } + if (filesize($filePath) === 0) { + throw new \InvalidArgumentException('Wrong file size.'); + } if (!getimagesize($filePath)) { throw new \InvalidArgumentException('Disallowed file type.'); } diff --git a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php index cfba1820bec0..73bbbc117691 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php +++ b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php @@ -3,6 +3,9 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Framework\Image\Adapter; /** @@ -59,6 +62,9 @@ protected function _reset() */ public function open($filename) { + if (filesize($filename) === 0) { + throw new \InvalidArgumentException("Wrong file size: '{$filename}'."); + } $this->_fileName = $filename; $this->_reset(); $this->getMimeType(); @@ -225,7 +231,8 @@ public function getImage() * @param null|int $fileType * @param string $unsupportedText * @return string - * @throws \Exception + * @throws \InvalidArgumentException + * @throws \BadFunctionCallException */ private function _getCallback($callbackType, $fileType = null, $unsupportedText = 'Unsupported image format.') { @@ -233,10 +240,10 @@ private function _getCallback($callbackType, $fileType = null, $unsupportedText $fileType = $this->_fileType; } if (empty(self::$_callbacks[$fileType])) { - throw new \Exception($unsupportedText); + throw new \InvalidArgumentException($unsupportedText); } if (empty(self::$_callbacks[$fileType][$callbackType])) { - throw new \Exception('Callback not found.'); + throw new \BadFunctionCallException('Callback not found.'); } return self::$_callbacks[$fileType][$callbackType]; } @@ -248,7 +255,7 @@ private function _getCallback($callbackType, $fileType = null, $unsupportedText * * @param resource &$imageResourceTo * @return int - * @throws \Exception + * @throws \InvalidArgumentException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function _fillBackgroundColor(&$imageResourceTo) @@ -261,17 +268,17 @@ private function _fillBackgroundColor(&$imageResourceTo) // fill truecolor png with alpha transparency if ($isAlpha) { if (!imagealphablending($imageResourceTo, false)) { - throw new \Exception('Failed to set alpha blending for PNG image.'); + throw new \InvalidArgumentException('Failed to set alpha blending for PNG image.'); } $transparentAlphaColor = imagecolorallocatealpha($imageResourceTo, 0, 0, 0, 127); if (false === $transparentAlphaColor) { - throw new \Exception('Failed to allocate alpha transparency for PNG image.'); + throw new \InvalidArgumentException('Failed to allocate alpha transparency for PNG image.'); } if (!imagefill($imageResourceTo, 0, 0, $transparentAlphaColor)) { - throw new \Exception('Failed to fill PNG image with alpha transparency.'); + throw new \InvalidArgumentException('Failed to fill PNG image with alpha transparency.'); } if (!imagesavealpha($imageResourceTo, true)) { - throw new \Exception('Failed to save alpha transparency into PNG image.'); + throw new \InvalidArgumentException('Failed to save alpha transparency into PNG image.'); } return $transparentAlphaColor; @@ -283,22 +290,22 @@ private function _fillBackgroundColor(&$imageResourceTo) $transparentColor = imagecolorallocate($imageResourceTo, $r, $g, $b); } if (false === $transparentColor) { - throw new \Exception('Failed to allocate transparent color for image.'); + throw new \InvalidArgumentException('Failed to allocate transparent color for image.'); } if (!imagefill($imageResourceTo, 0, 0, $transparentColor)) { - throw new \Exception('Failed to fill image with transparency.'); + throw new \InvalidArgumentException('Failed to fill image with transparency.'); } imagecolortransparent($imageResourceTo, $transparentColor); return $transparentColor; } } catch (\Exception $e) { - // fallback to default background color + throw new \DomainException('Failed to fill image.'); } } list($r, $g, $b) = $this->_backgroundColor; $color = imagecolorallocate($imageResourceTo, $r, $g, $b); if (!imagefill($imageResourceTo, 0, 0, $color)) { - throw new \Exception("Failed to fill image background with color {$r} {$g} {$b}."); + throw new \InvalidArgumentException("Failed to fill image background with color {$r} {$g} {$b}."); } return $color; @@ -637,13 +644,13 @@ public function crop($top = 0, $left = 0, $right = 0, $bottom = 0) * Checks required dependencies * * @return void - * @throws \Exception If some of dependencies are missing + * @throws \RuntimeException If some of dependencies are missing */ public function checkDependencies() { foreach ($this->_requiredExtensions as $value) { if (!extension_loaded($value)) { - throw new \Exception("Required PHP extension '{$value}' was not loaded."); + throw new \RuntimeException("Required PHP extension '{$value}' was not loaded."); } } } @@ -755,7 +762,7 @@ protected function _createImageFromText($text) * @param string $text * @param string $font * @return void - * @throws \Exception + * @throws \InvalidArgumentException */ protected function _createImageFromTtfText($text, $font) { @@ -777,7 +784,7 @@ protected function _createImageFromTtfText($text, $font) $text ); if ($result === false) { - throw new \Exception('Unable to create TTF text'); + throw new \InvalidArgumentException('Unable to create TTF text'); } } diff --git a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/Gd2Test.php b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/Gd2Test.php index 41281c96e1bb..ccf52c7c59ce 100644 --- a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/Gd2Test.php +++ b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/Gd2Test.php @@ -3,6 +3,9 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Framework\Image\Test\Unit\Adapter; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; @@ -24,6 +27,13 @@ class Gd2Test extends \PHPUnit\Framework\TestCase */ public static $imageData = []; + /** + * Simulation of filesize() function + * + * @var int + */ + public static $imageSize = 1; + /** * Adapter for testing * @var \Magento\Framework\Image\Adapter\Gd2 diff --git a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/_files/global_php_mock.php b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/_files/global_php_mock.php index 3e90359b97b4..a62909b495ab 100644 --- a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/_files/global_php_mock.php +++ b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/_files/global_php_mock.php @@ -3,6 +3,9 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\Framework\Image\Adapter; use Magento\Framework\Image\Test\Unit\Adapter\Gd2Test; @@ -35,6 +38,16 @@ function getimagesize($file) return Gd2Test::$imageData; } +/** + * @param $file + * @return mixed + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ +function filesize($file) +{ + return Gd2Test::$imageSize; +} + /** * @param $real * @return int From b9a96e14338a28aa43909ddb1371718670f7d50d Mon Sep 17 00:00:00 2001 From: vprohorov Date: Thu, 4 Apr 2019 15:35:45 +0300 Subject: [PATCH 012/209] MAGETWO-63599: [GitHub] catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes #8204 - Added checks for zero byte files --- lib/internal/Magento/Framework/Image/Adapter/Gd2.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php index 73bbbc117691..300f7a75ab50 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php +++ b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php @@ -4,8 +4,6 @@ * See COPYING.txt for license details. */ -declare(strict_types=1); - namespace Magento\Framework\Image\Adapter; /** From 9950da00dcaf4c6a26b240d3500486a5a22624f6 Mon Sep 17 00:00:00 2001 From: Mikalai Shostka Date: Thu, 4 Apr 2019 17:39:05 +0300 Subject: [PATCH 013/209] MAGETWO-93061: CMS page of second website with same URLkey as first website, show content of First website instead of second website content. - Add switch store to url --- .../Page/Grid/Renderer/Action/UrlBuilder.php | 65 +++++++++++++++++-- .../Store/Controller/Store/SwitchAction.php | 11 +++- .../Model/StoreSwitcher/RewriteUrl.php | 27 ++++++-- 3 files changed, 92 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php index 08ba2c3fff33..8bff494ef79f 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php @@ -3,8 +3,15 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Cms\Block\Adminhtml\Page\Grid\Renderer\Action; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\Url\EncoderInterface; +use Magento\Framework\App\ActionInterface; +use Magento\Store\Model\StoreManagerInterface; + /** * Url builder class used to compose dynamic urls. */ @@ -15,12 +22,31 @@ class UrlBuilder */ protected $frontendUrlBuilder; + /** + * @var EncoderInterface + */ + private $urlEncoder; + + /** + * @var StoreManagerInterface + */ + private $storeManager; + /** * @param \Magento\Framework\UrlInterface $frontendUrlBuilder + * @param EncoderInterface|null $urlEncoder + * @param StoreManagerInterface|null $storeManager */ - public function __construct(\Magento\Framework\UrlInterface $frontendUrlBuilder) - { + public function __construct( + \Magento\Framework\UrlInterface $frontendUrlBuilder, + EncoderInterface $urlEncoder = null, + StoreManagerInterface $storeManager = null + ) { $this->frontendUrlBuilder = $frontendUrlBuilder; + $this->urlEncoder = $urlEncoder ?: ObjectManager::getInstance() + ->get(EncoderInterface::class); + $this->storeManager = $storeManager?: ObjectManager::getInstance() + ->get(StoreManagerInterface::class); } /** @@ -35,12 +61,22 @@ public function getUrl($routePath, $scope, $store) { if ($scope) { $this->frontendUrlBuilder->setScope($scope); - $href = $this->frontendUrlBuilder->getUrl( + $targetUrl = $this->frontendUrlBuilder->getUrl( $routePath, [ '_current' => false, '_nosid' => true, - '_query' => [\Magento\Store\Model\StoreManagerInterface::PARAM_NAME => $store] + '_query' => [ + StoreManagerInterface::PARAM_NAME => $store + ] + ] + ); + $href = $this->frontendUrlBuilder->getUrl( + 'stores/store/switch', + [ + '_current' => false, + '_nosid' => true, + '_query' => $this->prepareRequestQuery($store, $targetUrl) ] ); } else { @@ -55,4 +91,25 @@ public function getUrl($routePath, $scope, $store) return $href; } + + /** + * Prepare request query + * + * @param string $store + * @param string $href + * @return array + */ + private function prepareRequestQuery(string $store, string $href) : array + { + $storeView = $this->storeManager->getDefaultStoreView(); + $query = [ + StoreManagerInterface::PARAM_NAME => $store, + ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlEncoder->encode($href) + ]; + if ($storeView->getCode() !== $store) { + $query['___from_store'] = $storeView->getCode(); + } + + return $query; + } } diff --git a/app/code/Magento/Store/Controller/Store/SwitchAction.php b/app/code/Magento/Store/Controller/Store/SwitchAction.php index de721869c5ab..d8ac1b308d7e 100644 --- a/app/code/Magento/Store/Controller/Store/SwitchAction.php +++ b/app/code/Magento/Store/Controller/Store/SwitchAction.php @@ -4,6 +4,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Store\Controller\Store; @@ -18,13 +19,15 @@ use Magento\Store\Model\StoreManagerInterface; use Magento\Store\Model\StoreSwitcher; use Magento\Store\Model\StoreSwitcherInterface; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\Action\HttpGetActionInterface; /** * Handles store switching url and makes redirect. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class SwitchAction extends Action +class SwitchAction extends Action implements HttpGetActionInterface, HttpPostActionInterface { /** * @var StoreCookieManagerInterface @@ -89,10 +92,12 @@ public function __construct( public function execute() { $targetStoreCode = $this->_request->getParam( - \Magento\Store\Model\StoreManagerInterface::PARAM_NAME, + \Magento\Store\Model\StoreManagerInterface::PARAM_NAME + ); + $fromStoreCode = $this->_request->getParam( + '___from_store', $this->storeCookieManager->getStoreCodeFromCookie() ); - $fromStoreCode = $this->_request->getParam('___from_store'); $requestedUrlToRedirect = $this->_redirect->getRedirectUrl(); $redirectUrl = $requestedUrlToRedirect; diff --git a/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php b/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php index e1bb094e7fc3..a4bca19cfc04 100644 --- a/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php +++ b/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php @@ -70,10 +70,7 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s if ($oldRewrite) { $targetUrl = $targetStore->getBaseUrl(); // look for url rewrite match on the target store - $currentRewrite = $this->urlFinder->findOneByData([ - UrlRewrite::TARGET_PATH => $oldRewrite->getTargetPath(), - UrlRewrite::STORE_ID => $targetStore->getId(), - ]); + $currentRewrite = $this->findCurrentRewrite($oldRewrite, $targetStore); if ($currentRewrite) { $targetUrl .= $currentRewrite->getRequestPath(); } @@ -93,4 +90,26 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s } return $targetUrl; } + + /** + * Look for url rewrite match on the target store + * + * @param UrlRewrite $oldRewrite + * @param StoreInterface $targetStore + * @return UrlRewrite|null + */ + private function findCurrentRewrite(UrlRewrite $oldRewrite, StoreInterface $targetStore) + { + $currentRewrite = $this->urlFinder->findOneByData([ + UrlRewrite::TARGET_PATH => $oldRewrite->getTargetPath(), + UrlRewrite::STORE_ID => $targetStore->getId(), + ]); + if (!$currentRewrite) { + $currentRewrite = $this->urlFinder->findOneByData([ + UrlRewrite::REQUEST_PATH => $oldRewrite->getTargetPath(), + UrlRewrite::STORE_ID => $targetStore->getId(), + ]); + } + return $currentRewrite; + } } From 4926fd55992f45621a2860c9dacd368f8954c1bd Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina Date: Fri, 5 Apr 2019 13:04:59 +0300 Subject: [PATCH 014/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Add check current user permission on category resource --- .../Product/Form/Modifier/CategoriesTest.php | 21 +++++++++++++-- .../Product/Form/Modifier/Categories.php | 26 ++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php index cd6565f32ed1..f9fd16e4e0bf 100644 --- a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Catalog\Test\Unit\Ui\DataProvider\Product\Form\Modifier; use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Categories; @@ -12,6 +14,7 @@ use Magento\Framework\DB\Helper as DbHelper; use Magento\Framework\UrlInterface; use Magento\Store\Model\Store; +use Magento\Framework\AuthorizationInterface; /** * Class CategoriesTest @@ -45,6 +48,11 @@ class CategoriesTest extends AbstractModifierTest */ protected $categoryCollectionMock; + /** + * @var AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $authorizationMock; + protected function setUp() { parent::setUp(); @@ -63,6 +71,9 @@ protected function setUp() $this->categoryCollectionMock = $this->getMockBuilder(CategoryCollection::class) ->disableOriginalConstructor() ->getMock(); + $this->authorizationMock = $this->getMockBuilder(AuthorizationInterface::class) + ->disableOriginalConstructor() + ->getMock(); $this->categoryCollectionFactoryMock->expects($this->any()) ->method('create') @@ -90,6 +101,7 @@ protected function createModel() 'locator' => $this->locatorMock, 'categoryCollectionFactory' => $this->categoryCollectionFactoryMock, 'arrayManager' => $this->arrayManagerMock, + 'authorization' => $this->authorizationMock ]); } @@ -130,7 +142,9 @@ public function testModifyMetaLocked($locked) ], ], ]; - + $this->authorizationMock->expects($this->once()) + ->method('isAllowed') + ->willReturn(true); $this->arrayManagerMock->expects($this->any()) ->method('findPath') ->willReturn('path'); @@ -167,7 +181,10 @@ public function testModifyMetaWithCaching() ->with(Categories::CATEGORY_TREE_ID . '_'); $cacheManager->expects($this->once()) ->method('save'); - + $this->authorizationMock->expects($this->once()) + ->method('isAllowed') + ->willReturn(true); + $modifier = $this->createModel(); $cacheContextProperty = new \ReflectionProperty( Categories::class, diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php index 681435851fbd..6af7ba39b9d2 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Catalog\Ui\DataProvider\Product\Form\Modifier; use Magento\Catalog\Model\Locator\LocatorInterface; @@ -14,6 +16,7 @@ use Magento\Framework\Serialize\SerializerInterface; use Magento\Framework\UrlInterface; use Magento\Framework\Stdlib\ArrayManager; +use Magento\Framework\AuthorizationInterface; /** * Data provider for categories field of product page @@ -78,6 +81,11 @@ class Categories extends AbstractModifier */ private $serializer; + /** + * @var AuthorizationInterface + */ + private $authorization; + /** * @param LocatorInterface $locator * @param CategoryCollectionFactory $categoryCollectionFactory @@ -85,6 +93,7 @@ class Categories extends AbstractModifier * @param UrlInterface $urlBuilder * @param ArrayManager $arrayManager * @param SerializerInterface $serializer + * @param AuthorizationInterface $authorization */ public function __construct( LocatorInterface $locator, @@ -92,7 +101,8 @@ public function __construct( DbHelper $dbHelper, UrlInterface $urlBuilder, ArrayManager $arrayManager, - SerializerInterface $serializer = null + SerializerInterface $serializer = null, + AuthorizationInterface $authorization = null ) { $this->locator = $locator; $this->categoryCollectionFactory = $categoryCollectionFactory; @@ -100,6 +110,7 @@ public function __construct( $this->urlBuilder = $urlBuilder; $this->arrayManager = $arrayManager; $this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class); + $this->authorization = $authorization ?: ObjectManager::getInstance()->get(AuthorizationInterface::class); } /** @@ -123,12 +134,25 @@ private function getCacheManager() */ public function modifyMeta(array $meta) { + if (!$this->isAllowed()) { + return $meta; + } $meta = $this->createNewCategoryModal($meta); $meta = $this->customizeCategoriesField($meta); return $meta; } + /** + * Check current user permission on category resource + * + * @return bool + */ + private function isAllowed() + { + return $this->authorization->isAllowed('Magento_Catalog::categories'); + } + /** * @inheritdoc * @since 101.0.0 From 418ab8df8d0fa21d8e014018f15e3cef1efd03b9 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan Date: Fri, 5 Apr 2019 18:49:57 +0400 Subject: [PATCH 015/209] MAGETWO-98748: Incorrect behavior in the category menu on the Storefront - Added automated test script. --- .../AdminCategorySidebarTreeSection.xml | 1 + .../Test/CheckCategoriesFunctionality.xml | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml index 14e714cb2b6b..4b9c57cfd195 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml @@ -13,6 +13,7 @@ + diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml new file mode 100644 index 000000000000..9cfb2c9798ad --- /dev/null +++ b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml @@ -0,0 +1,68 @@ + + + + + + + + + <description value="Check that categories functionality work correct"/> + <severity value="MAJOR"/> + <testCaseId value="MAGETWO-98028"/> + <useCaseId value="MAGETWO-98748"/> + <group value="Catalog"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="SimpleSubCategory" stepKey="category1"/> + <createData entity="SimpleSubCategory" stepKey="category2"/> + <createData entity="SimpleSubCategory" stepKey="category3"/> + <createData entity="SimpleSubCategory" stepKey="category4"/> + <createData entity="SimpleProduct" stepKey="product1"> + <requiredEntity createDataKey="category1"/> + </createData> + <createData entity="SimpleProduct" stepKey="product2"> + <requiredEntity createDataKey="category1"/> + </createData> + </before> + <after> + <deleteData createDataKey="product1" stepKey="deleteProduct1"/> + <deleteData createDataKey="product2" stepKey="deleteProduct2"/> + <deleteData createDataKey="category1" stepKey="deleteCategory1"/> + <deleteData createDataKey="category2" stepKey="deleteCategory2"/> + <deleteData createDataKey="category3" stepKey="deleteCategory3"/> + <deleteData createDataKey="category4" stepKey="deleteCategory4"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!--Open Storefront home page--> + <comment userInput="Open Storefront home page" stepKey="openStorefrontHomePage"/> + <amOnPage url="{{StorefrontHomePage.url}}" stepKey="goToStorefrontHomePage"/> + <waitForPageLoad stepKey="waitForSimpleProductPage"/> + <!--Click on first category--> + <comment userInput="Click on first category" stepKey="openFirstCategoryPage"/> + <click selector="{{AdminCategorySidebarTreeSection.categoryInTree($$category1.name$$)}}" stepKey="clickCategory1Name"/> + <waitForPageLoad stepKey="waitForCategory1Page"/> + <!--Check if current category is highlighted--> + <comment userInput="Check if current category is highlighted" stepKey="checkCateg1NameIsHighlighted"/> + <grabAttributeFrom selector="{{AdminCategorySidebarTreeSection.categoryHighlighted($$category1.name$$)}}" userInput="class" stepKey="grabCategory1Class"/> + <assertContains expectedType="string" expected="active" actual="$grabCategory1Class" stepKey="assertCategory1IsHighlighted"/> + <!--See products in the category page--> + <comment userInput="See products in the category page" stepKey="seeProductsInCategoryPage"/> + <seeElement selector="{{StorefrontCategoryMainSection.specifiedProductItemInfo($product1.name$)}}" stepKey="seeProduct1InCategoryPage"/> + <seeElement selector="{{StorefrontCategoryMainSection.specifiedProductItemInfo($product2.name$)}}" stepKey="seeProduct2InCategoryPage"/> + <!--Click on second category--> + <comment userInput="Click on second category" stepKey="openSecondCategoryPage"/> + <click selector="{{AdminCategorySidebarTreeSection.categoryInTree($$category2.name$$)}}" stepKey="clickCategory2Name"/> + <waitForPageLoad stepKey="waitForCategory2Page"/> + <!--Check if current category is highlighted--> + <comment userInput="Check if current category is highlighted" stepKey="checkCateg2NameIsHighlighted"/> + <grabAttributeFrom selector="{{AdminCategorySidebarTreeSection.categoryHighlighted($$category2.name$$)}}" userInput="class" stepKey="grabCategory2Class"/> + <assertContains expectedType="string" expected="active" actual="$grabCategory2Class" stepKey="assertCategory2IsHighlighted"/> + </test> +</tests> From d9aa6f3d041074826d5fb719855f0a0eb53a6836 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Tue, 2 Apr 2019 12:13:33 +0300 Subject: [PATCH 016/209] MAGETWO-71835: [Product grid] SC's values aren't sorted alphabetically in the tooltip - Fix static --- app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js index 9d7477eb8ae2..0733efa58899 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js @@ -68,7 +68,7 @@ define([ }); return labels.sort( - function(a, b) { + function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); } ); From 5d04e3c95ce9ade268a1fb0c608f8ea1fe3266ea Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Mon, 8 Apr 2019 15:35:20 +0300 Subject: [PATCH 017/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Add check current user permission on category resource --- .../Product/Form/Modifier/CategoriesTest.php | 4 +- .../Product/Form/Modifier/Categories.php | 152 +++++++++--------- 2 files changed, 79 insertions(+), 77 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php index f9fd16e4e0bf..7507a748f90a 100644 --- a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php @@ -142,7 +142,7 @@ public function testModifyMetaLocked($locked) ], ], ]; - $this->authorizationMock->expects($this->once()) + $this->authorizationMock->expects($this->exactly(2)) ->method('isAllowed') ->willReturn(true); $this->arrayManagerMock->expects($this->any()) @@ -181,7 +181,7 @@ public function testModifyMetaWithCaching() ->with(Categories::CATEGORY_TREE_ID . '_'); $cacheManager->expects($this->once()) ->method('save'); - $this->authorizationMock->expects($this->once()) + $this->authorizationMock->expects($this->exactly(2)) ->method('isAllowed') ->willReturn(true); diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php index 6af7ba39b9d2..ddfb9d0b8d44 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Categories.php @@ -134,10 +134,9 @@ private function getCacheManager() */ public function modifyMeta(array $meta) { - if (!$this->isAllowed()) { - return $meta; + if ($this->isAllowed()) { + $meta = $this->createNewCategoryModal($meta); } - $meta = $this->createNewCategoryModal($meta); $meta = $this->customizeCategoriesField($meta); return $meta; @@ -238,88 +237,91 @@ protected function customizeCategoriesField(array $meta) return $meta; } - $meta = $this->arrayManager->merge( - $containerPath, - $meta, - [ - 'arguments' => [ - 'data' => [ - 'config' => [ - 'label' => __('Categories'), - 'dataScope' => '', - 'breakLine' => false, - 'formElement' => 'container', - 'componentType' => 'container', - 'component' => 'Magento_Ui/js/form/components/group', - 'scopeLabel' => __('[GLOBAL]'), - 'disabled' => $this->locator->getProduct()->isLockedAttribute($fieldCode), - ], + $value = [ + 'arguments' => [ + 'data' => [ + 'config' => [ + 'label' => __('Categories'), + 'dataScope' => '', + 'breakLine' => false, + 'formElement' => 'container', + 'componentType' => 'container', + 'component' => 'Magento_Ui/js/form/components/group', + 'scopeLabel' => __('[GLOBAL]'), + 'disabled' => $this->locator->getProduct()->isLockedAttribute($fieldCode), ], ], - 'children' => [ - $fieldCode => [ - 'arguments' => [ - 'data' => [ + ], + 'children' => [ + $fieldCode => [ + 'arguments' => [ + 'data' => [ + 'config' => [ + 'formElement' => 'select', + 'componentType' => 'field', + 'component' => 'Magento_Catalog/js/components/new-category', + 'filterOptions' => true, + 'chipsEnabled' => true, + 'disableLabel' => true, + 'levelsVisibility' => '1', + 'elementTmpl' => 'ui/grid/filters/elements/ui-select', + 'options' => $this->getCategoriesTree(), + 'listens' => [ + 'index=create_category:responseData' => 'setParsed', + 'newOption' => 'toggleOptionSelected' + ], 'config' => [ - 'formElement' => 'select', - 'componentType' => 'field', - 'component' => 'Magento_Catalog/js/components/new-category', - 'filterOptions' => true, - 'chipsEnabled' => true, - 'disableLabel' => true, - 'levelsVisibility' => '1', - 'elementTmpl' => 'ui/grid/filters/elements/ui-select', - 'options' => $this->getCategoriesTree(), - 'listens' => [ - 'index=create_category:responseData' => 'setParsed', - 'newOption' => 'toggleOptionSelected' - ], - 'config' => [ - 'dataScope' => $fieldCode, - 'sortOrder' => 10, - ], + 'dataScope' => $fieldCode, + 'sortOrder' => 10, ], ], ], ], - 'create_category_button' => [ - 'arguments' => [ - 'data' => [ - 'config' => [ - 'title' => __('New Category'), - 'formElement' => 'container', - 'additionalClasses' => 'admin__field-small', - 'componentType' => 'container', - 'component' => 'Magento_Ui/js/form/components/button', - 'template' => 'ui/form/components/button/container', - 'actions' => [ - [ - 'targetName' => 'product_form.product_form.create_category_modal', - 'actionName' => 'toggleModal', - ], - [ - 'targetName' => - 'product_form.product_form.create_category_modal.create_category', - 'actionName' => 'render' - ], - [ - 'targetName' => - 'product_form.product_form.create_category_modal.create_category', - 'actionName' => 'resetForm' - ] - ], - 'additionalForGroup' => true, - 'provider' => false, - 'source' => 'product_details', - 'displayArea' => 'insideGroup', - 'sortOrder' => 20, - 'dataScope' => $fieldCode, + ], + ] + ]; + if ($this->isAllowed()) { + $value['children']['create_category_button'] = [ + 'arguments' => [ + 'data' => [ + 'config' => [ + 'title' => __('New Category'), + 'formElement' => 'container', + 'additionalClasses' => 'admin__field-small', + 'componentType' => 'container', + 'component' => 'Magento_Ui/js/form/components/button', + 'template' => 'ui/form/components/button/container', + 'actions' => [ + [ + 'targetName' => 'product_form.product_form.create_category_modal', + 'actionName' => 'toggleModal', ], + [ + 'targetName' => + 'product_form.product_form.create_category_modal.create_category', + 'actionName' => 'render' + ], + [ + 'targetName' => + 'product_form.product_form.create_category_modal.create_category', + 'actionName' => 'resetForm' + ] ], - ] - ] + 'additionalForGroup' => true, + 'provider' => false, + 'source' => 'product_details', + 'displayArea' => 'insideGroup', + 'sortOrder' => 20, + 'dataScope' => $fieldCode, + ], + ], ] - ] + ]; + } + $meta = $this->arrayManager->merge( + $containerPath, + $meta, + $value ); return $meta; From adfd7f08d69abcdf495ff4fa3bba1f594d6c87ca Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Mon, 8 Apr 2019 20:49:46 +0400 Subject: [PATCH 018/209] MAGETWO-98748: Incorrect behavior in the category menu on the Storefront - Updated automated test script. --- .../Mftf/Section/AdminCategorySidebarTreeSection.xml | 1 + .../Test/Mftf/Test/CheckCategoriesFunctionality.xml | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml index 4b9c57cfd195..67d6028ca517 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminCategorySidebarTreeSection.xml @@ -14,6 +14,7 @@ <element name="categoryTreeRoot" type="text" selector="div.x-tree-root-node>li.x-tree-node:first-of-type>div.x-tree-node-el:first-of-type" timeout="30"/> <element name="categoryInTree" type="text" selector="//a/span[contains(text(), '{{name}}')]" parameterized="true" timeout="30"/> <element name="categoryHighlighted" type="text" selector="//ul[@id='ui-id-2']//li//a/span[contains(text(),'{{name}}')]/../.." parameterized="true" timeout="30"/> + <element name="categoryNotHighlighted" type="text" selector="ul[id=\'ui-id-2\'] li[class~=\'active\']" timeout="30"/> <element name="categoryInTreeUnderRoot" type="text" selector="//li/ul/li[@class='x-tree-node']/div/a/span[contains(text(), '{{name}}')]" parameterized="true"/> <element name="lastCreatedCategory" type="block" selector=".x-tree-root-ct li li:last-child" /> <element name="treeContainer" type="block" selector=".tree-holder" /> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml index 9cfb2c9798ad..35807ebecd91 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml @@ -48,10 +48,12 @@ <comment userInput="Click on first category" stepKey="openFirstCategoryPage"/> <click selector="{{AdminCategorySidebarTreeSection.categoryInTree($$category1.name$$)}}" stepKey="clickCategory1Name"/> <waitForPageLoad stepKey="waitForCategory1Page"/> - <!--Check if current category is highlighted--> - <comment userInput="Check if current category is highlighted" stepKey="checkCateg1NameIsHighlighted"/> + <!--Check if current category is highlighted and the others are not--> + <comment userInput="Check if current category is highlighted and the others are not" stepKey="checkCateg1NameIsHighlighted"/> <grabAttributeFrom selector="{{AdminCategorySidebarTreeSection.categoryHighlighted($$category1.name$$)}}" userInput="class" stepKey="grabCategory1Class"/> <assertContains expectedType="string" expected="active" actual="$grabCategory1Class" stepKey="assertCategory1IsHighlighted"/> + <executeJS function="return document.querySelectorAll('{{AdminCategorySidebarTreeSection.categoryNotHighlighted}}').length" stepKey="highlightedAmount"/> + <assertEquals expectedType="int" expected="1" actual="$highlightedAmount" stepKey="assertRestCategories1IsNotHighlighted"/> <!--See products in the category page--> <comment userInput="See products in the category page" stepKey="seeProductsInCategoryPage"/> <seeElement selector="{{StorefrontCategoryMainSection.specifiedProductItemInfo($product1.name$)}}" stepKey="seeProduct1InCategoryPage"/> @@ -60,9 +62,11 @@ <comment userInput="Click on second category" stepKey="openSecondCategoryPage"/> <click selector="{{AdminCategorySidebarTreeSection.categoryInTree($$category2.name$$)}}" stepKey="clickCategory2Name"/> <waitForPageLoad stepKey="waitForCategory2Page"/> - <!--Check if current category is highlighted--> - <comment userInput="Check if current category is highlighted" stepKey="checkCateg2NameIsHighlighted"/> + <!--Check if current category is highlighted and the others are not--> + <comment userInput="Check if current category is highlighted and the others are not" stepKey="checkCateg2NameIsHighlighted"/> <grabAttributeFrom selector="{{AdminCategorySidebarTreeSection.categoryHighlighted($$category2.name$$)}}" userInput="class" stepKey="grabCategory2Class"/> <assertContains expectedType="string" expected="active" actual="$grabCategory2Class" stepKey="assertCategory2IsHighlighted"/> + <executeJS function="return document.querySelectorAll('{{AdminCategorySidebarTreeSection.categoryNotHighlighted}}').length" stepKey="highlightedAmount2"/> + <assertEquals expectedType="int" expected="1" actual="$highlightedAmount2" stepKey="assertRestCategories1IsNotHighlighted2"/> </test> </tests> From fad6db4b218c62852e1e96f44db59e34f5e02e91 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Wed, 10 Apr 2019 16:57:24 +0300 Subject: [PATCH 019/209] MAGETWO-71835: [Product grid] SC's values aren't sorted alphabetically in the tooltip - Add js unit test --- .../Ui/base/js/grid/columns/expandable.test.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js index 1c3b51919f5f..ffc46af01f9e 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js @@ -69,5 +69,22 @@ define([ expect(expandable.getLabel).toHaveBeenCalled(); }); }); + + describe('getLabelsArray method', function () { + it('check if label array sort alphabetically case insensitive', function () { + record['shared_catalog'].push(1, 2 , 3); + expandable.options.push({ + label: 'Default', + value: '1' + }, { + label: 'Label', + value: '2' + }, { + label: 'default', + value: '3' + }); + expect(expandable.getLabelsArray(record)).toEqual(['Default', 'default', 'Label']); + }); + }); }); }); From e5a2cdb5ee2d09785b0418d3e7acd019e085ff62 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Wed, 10 Apr 2019 17:14:58 +0300 Subject: [PATCH 020/209] MAGETWO-71835: [Product grid] SC's values aren't sorted alphabetically in the tooltip - Sort values case insensitive --- .../Magento/Ui/view/base/web/js/grid/columns/expandable.js | 4 ++-- .../code/Magento/Ui/base/js/grid/columns/expandable.test.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js index 0733efa58899..b694f2403127 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/expandable.js @@ -68,8 +68,8 @@ define([ }); return labels.sort( - function (a, b) { - return a.toLowerCase().localeCompare(b.toLowerCase()); + function (labelFirst, labelSecond) { + return labelFirst.toLowerCase().localeCompare(labelSecond.toLowerCase()); } ); }, diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js index ffc46af01f9e..b8b6dce52c05 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/expandable.test.js @@ -72,7 +72,7 @@ define([ describe('getLabelsArray method', function () { it('check if label array sort alphabetically case insensitive', function () { - record['shared_catalog'].push(1, 2 , 3); + record['shared_catalog'].push(1, 2, 3); expandable.options.push({ label: 'Default', value: '1' From 575d7d97b13b44a90e129e29f7234190efbef988 Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Thu, 11 Apr 2019 13:29:26 +0300 Subject: [PATCH 021/209] MAGETWO-63599: [GitHub] catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes #8204 - Fix for integration tests --- lib/internal/Magento/Framework/Image/Adapter/Gd2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php index 300f7a75ab50..d423fcfc6773 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php +++ b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php @@ -60,8 +60,8 @@ protected function _reset() */ public function open($filename) { - if (filesize($filename) === 0) { - throw new \InvalidArgumentException("Wrong file size: '{$filename}'."); + if (!$filename || filesize($filename) === 0) { + throw new \InvalidArgumentException('Wrong file'); } $this->_fileName = $filename; $this->_reset(); From a5f475bd3cb76e5e7eca9b25b42db1fa1ae12b54 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Thu, 11 Apr 2019 15:42:22 +0400 Subject: [PATCH 022/209] MAGETWO-98748: Incorrect behavior in the category menu on the Storefront - Updated automated test script. --- ...eckCurrentCategoryIsHighlightedAndProductsDisplayed.xml} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename app/code/Magento/Catalog/Test/Mftf/Test/{CheckCategoriesFunctionality.xml => CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml} (94%) diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml similarity index 94% rename from app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml rename to app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml index 35807ebecd91..b3b238a3ba3f 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCategoriesFunctionality.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml @@ -8,11 +8,11 @@ <tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> - <test name="CheckCategoriesFunctionality"> + <test name="CheckCurrentCategoryIsHighlightedAndProductsDisplayed"> <annotations> <features value="Catalog"/> - <title value="Check that categories functionality work correct"/> - <description value="Check that categories functionality work correct"/> + <title value="Сheck that current category is highlighted and all products displayed for it"/> + <description value="Сheck that current category is highlighted and all products displayed for it"/> <severity value="MAJOR"/> <testCaseId value="MAGETWO-98028"/> <useCaseId value="MAGETWO-98748"/> From 272d82955f13fe9bdf99e2331423955340cdabef Mon Sep 17 00:00:00 2001 From: Aliaksei Yakimovich2 <aliaksei_yakimovich2@epam.com> Date: Thu, 11 Apr 2019 15:49:09 +0300 Subject: [PATCH 023/209] MAGETWO-88965: Magento\Test\Legacy\LayoutTest is failing for B2B - Implemetation moved from constructor; --- .../Backend/Block/Widget/Grid/Column/Multistore.php | 11 ++++------- .../testsuite/Magento/Test/Legacy/LayoutTest.php | 1 + 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php index 474fc0e4714a..55c779e4b423 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Backend\Block\Widget\Grid\Column; /** @@ -17,15 +19,10 @@ class Multistore extends \Magento\Backend\Block\Widget\Grid\Column /** * @param \Magento\Backend\Block\Template\Context $context * @param array $data - * @param array $additionalRendererTypes */ - public function __construct( - \Magento\Backend\Block\Template\Context $context, - array $data = [], - array $additionalRendererTypes = [] - ) { + public function __construct(\Magento\Backend\Block\Template\Context $context, array $data = []) + { parent::__construct($context, $data); - $this->_rendererTypes = array_merge($this->_rendererTypes, $additionalRendererTypes); } /** diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php index 3e2b808923a4..1d055c42255d 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Test\Legacy; From b7a4e55aceedd4471e9f26c0bb49b17065d150e8 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Fri, 12 Apr 2019 12:24:36 +0400 Subject: [PATCH 024/209] MAGETWO-98635: Multiple wishlists not supporting with Recently view widget or etc - Updated automated test script. --- .../ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml index 608613492012..f62c070217ce 100644 --- a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml @@ -21,11 +21,11 @@ <waitForPageLoad stepKey="waitSaveToBeApplied"/> <see selector="{{AdminProductMessagesSection.successMessage}}" userInput="You saved the page." stepKey="seeSaveSuccess"/> </actionGroup> - <actionGroup name="ClearWidgetsFromCMSContentWYSIWYGDisabled"> + <actionGroup name="ClearWidgetsForCMSHomePageContentWYSIWYGDisabled"> <amOnPage url="{{CmsPageEditPage.url('2')}}" stepKey="navigateToEditHomePagePage"/> <waitForPageLoad stepKey="waitForCmsPageEditPage"/> <conditionalClick selector="{{CmsNewPagePageActionsSection.contentSectionName}}" dependentSelector="{{CatalogWidgetSection.insertWidgetButton}}" visible="false" stepKey="clickShowHideEditorIfVisible"/> - <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="CMS homepage content goes here." stepKey="fillWidgetsField"/> + <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="CMS homepage content goes here." stepKey="fillContentForCMSPage"/> <click selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="clickSave"/> <waitForPageLoad stepKey="waitForSettingsApply"/> </actionGroup> From 18d53e02c39ce31cc7ec3697ad4a573aef61fea3 Mon Sep 17 00:00:00 2001 From: Ronak Patel <ronak2ram@gmail.com> Date: Sun, 14 Apr 2019 01:48:57 +0530 Subject: [PATCH 025/209] Update test --- .../GraphQl/Catalog/ProductViewTest.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php index e517b22ad09d..6c1461e3dd10 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php @@ -670,6 +670,35 @@ public function testProductPrices() $this->assertBaseFields($secondProduct, $response['products']['items'][1]); } + /** + * @magentoApiDataFixture Magento/Catalog/_files/products_for_search.php + */ + public function testProductFilterNfinset() + { + $productSku = 'search_product_1'; + + $query = <<<QUERY + { + products(filter: {sku: {nfinset: ["$productSku"]}}) + { + items { + id + name + sku + } + } + } +QUERY; + + $response = $this->graphQlQuery($query); + + /** + * @var ProductRepositoryInterface $productRepository + */ + $productRepository = ObjectManager::getInstance()->get(ProductRepositoryInterface::class); + $this->assertNotEquals($response['products']['items'][0]['sku'], $productSku); + } + /** * @param ProductInterface $product * @param array $actualResponse From e868e607d1667a238020adb2885ea67c05b199cf Mon Sep 17 00:00:00 2001 From: Ronak Patel <ronak2ram@gmail.com> Date: Sun, 14 Apr 2019 22:30:17 +0530 Subject: [PATCH 026/209] Remove unused line --- .../testsuite/Magento/GraphQl/Catalog/ProductViewTest.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php index 6c1461e3dd10..06bcd2c491a1 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php @@ -691,11 +691,6 @@ public function testProductFilterNfinset() QUERY; $response = $this->graphQlQuery($query); - - /** - * @var ProductRepositoryInterface $productRepository - */ - $productRepository = ObjectManager::getInstance()->get(ProductRepositoryInterface::class); $this->assertNotEquals($response['products']['items'][0]['sku'], $productSku); } From 4b8dcbc0131ce983d28c08d364346781b7b0d532 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Mon, 15 Apr 2019 11:34:51 +0400 Subject: [PATCH 027/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Added automated test script --- .../Mftf/Section/AdminProductFormSection.xml | 1 + ...ctedUserAddCategoryFromProductPageTest.xml | 89 +++++++++++++++++++ .../AdminCreateRoleActionGroup.xml | 19 ++++ 3 files changed, 109 insertions(+) create mode 100644 app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml index da282d06145a..ec90b4eda8d0 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml @@ -70,6 +70,7 @@ <element name="selectMultipleCategories" type="input" selector="//*[@data-index='container_category_ids']//*[contains(@class, '_selected')]"/> <element name="countryOfManufacture" type="select" selector="select[name='product[country_of_manufacture]']"/> <element name="newAddedAttribute" type="text" selector="//fieldset[@class='admin__fieldset']//div[contains(@data-index,'{{attributeCode}}')]" parameterized="true"/> + <element name="newCategoryButton" type="button" selector="button[data-index='create_category_button']" timeout="30"/> </section> <section name="ProductInWebsitesSection"> <element name="sectionHeader" type="button" selector="div[data-index='websites']" timeout="30"/> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml new file mode 100644 index 000000000000..be18a9980bf7 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminRestrictedUserAddCategoryFromProductPageTest"> + <annotations> + <features value="Catalog"/> + <title value="Adding new category from product page by restricted user"/> + <description value="Adding new category from product page by restricted user"/> + <severity value="MAJOR"/> + <testCaseId value="MAGETWO-99063"/> + <useCaseId value="MAGETWO-69893"/> + <group value="catalog"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <!--Create category--> + <comment userInput="Create category" stepKey="commentCreateCategory"/> + <createData entity="SimpleSubCategory" stepKey="createCategory"/> + </before> + <after> + <!--Delete created product--> + <comment userInput="Delete created product" stepKey="commentDeleteProduct"/> + <actionGroup ref="deleteProductBySku" stepKey="deleteProduct"> + <argument name="sku" value="{{_defaultProduct.sku}}"/> + </actionGroup> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetFiltersIfExist"/> + <actionGroup ref="SignOut" stepKey="signOut"/> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <!--Delete created data--> + <comment userInput="Delete created data" stepKey="commentDeleteCreatedData"/> + <actionGroup ref="AdminDeleteCreatedRoleActionGroup" stepKey="deleteUserRole"> + <argument name="role" value="adminRole"/> + </actionGroup> + <actionGroup ref="AdminDeleteCreatedUserActionGroup" stepKey="deleteUser"> + <argument name="user" value="newAdmin"/> + </actionGroup> + <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> + <actionGroup ref="logout" stepKey="logoutOfAdmin"/> + </after> + <!--Create user role--> + <comment userInput="Create user role" stepKey="commentCreateUserRole"/> + <actionGroup ref="AdminFillUserRoleRequiredData" stepKey="fillUserRoleRequiredData"> + <argument name="User" value="adminRole"/> + <argument name="restrictedRole" value="Stores"/> + </actionGroup> + <click selector="{{AdminEditRoleInfoSection.roleResourcesTab}}" stepKey="clickRoleResourcesTab" /> + <actionGroup ref="AdminAddRestrictedRole" stepKey="addRestrictedRoleStores"> + <argument name="User" value="adminRole"/> + <argument name="restrictedRole" value="Stores"/> + </actionGroup> + <actionGroup ref="AdminAddRestrictedRole" stepKey="addRestrictedRoleProducts"> + <argument name="User" value="adminRole"/> + <argument name="restrictedRole" value="Products"/> + </actionGroup> + <click selector="{{AdminEditRoleInfoSection.saveButton}}" stepKey="clickSaveRoleButton" /> + <see userInput="You saved the role." stepKey="seeUserRoleSavedMessage"/> + <!--Create user and assign role to it--> + <comment userInput="Create user and assign role to it" stepKey="commentCreateUser"/> + <actionGroup ref="AdminCreateUserActionGroup" stepKey="createAdminUser"> + <argument name="role" value="adminRole"/> + <argument name="User" value="newAdmin"/> + </actionGroup> + <!--Log out of admin and login with newly created user--> + <comment userInput="Log out of admin and login with newly created user" stepKey="commentLoginWithNewUser"/> + <actionGroup ref="SignOut" stepKey="signOut"/> + <actionGroup ref="LoginAsAnyUser" stepKey="loginActionGroup"> + <argument name="uname" value="{{newAdmin.username}}"/> + <argument name="passwd" value="{{newAdmin.password}}"/> + </actionGroup> + <!--Go to create product page--> + <comment userInput="Go to create product page" stepKey="commentGoCreateProductPage"/> + <actionGroup ref="goToCreateProductPage" stepKey="goToCreateProductPage"/> + <dontSeeElement selector="{{AdminProductFormSection.newCategoryButton}}" stepKey="dontSeeNewCategoryButton"/> + <!--Fill product data and assign to category--> + <comment userInput="Fill product data and assign to category" stepKey="commentFillProductData"/> + <actionGroup ref="fillMainProductForm" stepKey="fillMainProductForm"/> + <actionGroup ref="SetCategoryByName" stepKey="addCategoryToProduct"> + <argument name="categoryName" value="$$createCategory.name$$"/> + </actionGroup> + <actionGroup ref="saveProductForm" stepKey="saveProduct"/> + </test> +</tests> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml index da08ac469b7c..ed45085cd9cc 100644 --- a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml +++ b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml @@ -24,6 +24,25 @@ <click selector="{{AdminEditRoleInfoSection.saveButton}}" stepKey="clickSaveRoleButton" /> <waitForPageLoad stepKey="waitForPageLoad2" /> </actionGroup> + <actionGroup name="AdminFillUserRoleRequiredData" extends="AdminCreateRoleActionGroup"> + <remove keyForRemoval="clickRoleResourcesTab"/> + <remove keyForRemoval="waitForScopeSelection"/> + <remove keyForRemoval="selectResourceAccessCustom"/> + <remove keyForRemoval="waitForElementVisible"/> + <remove keyForRemoval="clickContentBlockCheckbox"/> + <remove keyForRemoval="clickSaveRoleButton"/> + <remove keyForRemoval="waitForPageLoad2"/> + </actionGroup> + <actionGroup name="AdminAddRestrictedRole" extends="AdminCreateRoleActionGroup"> + <remove keyForRemoval="navigateToNewRole"/> + <remove keyForRemoval="waitForPageLoad1"/> + <remove keyForRemoval="fillRoleName"/> + <remove keyForRemoval="enterPassword"/> + <remove keyForRemoval="clickRoleResourcesTab"/> + <remove keyForRemoval="clickSaveRoleButton"/> + <remove keyForRemoval="waitForPageLoad2"/> + <scrollTo selector="{{AdminEditRoleInfoSection.blockName('restrictedRole')}}" x="0" y="-100" stepKey="scrollToResourceElement" after="selectResourceAccessCustom"/> + </actionGroup> <!--Create new role--> <actionGroup name="AdminCreateRole"> <arguments> From 6c6047d5987d1819065d19f75149e8887c85d416 Mon Sep 17 00:00:00 2001 From: Ievgenii Gryshkun <i.gryshkun@gmail.com> Date: Tue, 16 Apr 2019 12:31:04 +0300 Subject: [PATCH 028/209] Query category for disabled catalog with products returns the products count --- .../CatalogGraphQl/Model/Resolver/CategoryTree.php | 8 +------- .../Products/DataProvider/ExtractDataFromCategoryTree.php | 5 +++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php index 866e002f1b43..1783a5cd9a7e 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php @@ -79,12 +79,6 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value } $result = $this->extractDataFromCategoryTree->execute($categoriesTree); - - $category = current($result); - if ($category['is_active'] == false) { - throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); - } - - return $category; + return current($result); } } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php index 3525ccbb6a2d..cb0317e8dc97 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php @@ -9,6 +9,8 @@ use Magento\CatalogGraphQl\Model\Category\Hydrator; use Magento\Catalog\Api\Data\CategoryInterface; +use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; +use Magento\Catalog\Model\Category; /** * Extract data from category tree @@ -51,6 +53,9 @@ public function execute(\Iterator $iterator): array while ($iterator->valid()) { /** @var CategoryInterface $category */ $category = $iterator->current(); + if ($category->getIsActive() == false && $category->getId() != Category::TREE_ROOT_ID) { + throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); + } $iterator->next(); $pathElements = explode("/", $category->getPath()); if (empty($tree)) { From 2f6dca52fdd44d8c272bb9f261e7c53bcb408c26 Mon Sep 17 00:00:00 2001 From: Davit_Zakharyan <davit_zakharyan@epam.com> Date: Tue, 16 Apr 2019 14:21:59 +0400 Subject: [PATCH 029/209] MAGETWO-93061: CMS page of second website with same URLkey as first website, show content of First website instead of second website content. - Added automated test script. --- .../CreateNewPageWithAllValuesActionGroup.xml | 6 ++++++ app/code/Magento/Cms/Test/Mftf/Data/CmsPageData.xml | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithAllValuesActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithAllValuesActionGroup.xml index c51e673139af..a459c41ccb41 100644 --- a/app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithAllValuesActionGroup.xml +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithAllValuesActionGroup.xml @@ -28,4 +28,10 @@ <click selector="{{CmsNewPageHierarchySection.header}}" stepKey="clickHierarchy"/> <click selector="{{CmsNewPageHierarchySection.selectHierarchy(selectHierarchyOpt)}}" stepKey="clickPageCheckBoxes"/> </actionGroup> + <actionGroup name="CreateNewPageWithAllValuesAndContent" extends="CreateNewPageWithAllValues"> + <arguments> + <argument name="pageContent" type="string"/> + </arguments> + <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{pageContent}}" stepKey="fillContentField" after="fillFieldContentHeading"/> + </actionGroup> </actionGroups> \ No newline at end of file diff --git a/app/code/Magento/Cms/Test/Mftf/Data/CmsPageData.xml b/app/code/Magento/Cms/Test/Mftf/Data/CmsPageData.xml index 2ec2eccba234..ef13d7634a87 100644 --- a/app/code/Magento/Cms/Test/Mftf/Data/CmsPageData.xml +++ b/app/code/Magento/Cms/Test/Mftf/Data/CmsPageData.xml @@ -20,6 +20,15 @@ <data key="content">Sample page content. Yada yada yada.</data> <data key="identifier" unique="suffix">test-page-</data> </entity> + <entity name="customCmsPage" extends="_defaultCmsPage" type="cms_page"> + <data key="content">Test content data1</data> + <data key="identifier">url_key</data> + </entity> + <entity name="customCmsPage2" extends="_defaultCmsPage" type="cms_page"> + <data key="title">Test Second CMS Page</data> + <data key="content">Test content data2</data> + <data key="identifier">url_key</data> + </entity> <entity name="_duplicatedCMSPage" type="cms_page"> <data key="title">testpage</data> <data key="content_heading">Test Content Heading</data> From 3a9d783341929861946feb84c3b03fc3496389dc Mon Sep 17 00:00:00 2001 From: Aliaksei Yakimovich2 <aliaksei_yakimovich2@epam.com> Date: Tue, 16 Apr 2019 14:41:29 +0300 Subject: [PATCH 030/209] MAGETWO-88965: Magento\Test\Legacy\LayoutTest is failing for B2B - Fixed static test; --- .../Backend/Block/Widget/Grid/Column/Multistore.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php index 55c779e4b423..424fee98d620 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Multistore.php @@ -16,15 +16,6 @@ */ class Multistore extends \Magento\Backend\Block\Widget\Grid\Column { - /** - * @param \Magento\Backend\Block\Template\Context $context - * @param array $data - */ - public function __construct(\Magento\Backend\Block\Template\Context $context, array $data = []) - { - parent::__construct($context, $data); - } - /** * Get header css class name * From 22897f537d764d371eb501f7be377ec8a772cf07 Mon Sep 17 00:00:00 2001 From: Ronak Patel <ronak2ram@gmail.com> Date: Tue, 16 Apr 2019 19:32:35 +0530 Subject: [PATCH 031/209] improve test --- .../testsuite/Magento/GraphQl/Catalog/ProductViewTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php index 06bcd2c491a1..1c050672d4d8 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php @@ -691,7 +691,7 @@ public function testProductFilterNfinset() QUERY; $response = $this->graphQlQuery($query); - $this->assertNotEquals($response['products']['items'][0]['sku'], $productSku); + $this->assertNotContains($productSku, array_column($response['products']['items'], 'sku')); } /** From 8e16a67b54095dec2426243340c87bcb055c9cca Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Wed, 17 Apr 2019 10:14:39 +0400 Subject: [PATCH 032/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Updated automated test script --- .../Mftf/ActionGroup/AdminUserActionGroup.xml | 10 ++++----- ...ctedUserAddCategoryFromProductPageTest.xml | 21 +++++++++++-------- .../ActionGroup/SwitchAccountActionGroup.xml | 7 +++++-- .../AdminCreateRoleActionGroup.xml | 1 + .../AdminCreateUserActionGroup.xml | 12 +++++------ .../Section/AdminEditRoleResourcesSection.xml | 17 +++++++++++++++ .../Mftf/Section/AdminUserGridSection.xml | 2 +- 7 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml diff --git a/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml b/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml index 3f8bdaa4cd6b..841dfb5607cd 100644 --- a/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml +++ b/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml @@ -38,12 +38,13 @@ <waitForPageLoad stepKey="waitForSaveUser" time="10"/> <see userInput="You saved the user." stepKey="seeSuccessMessage" /> </actionGroup> - <!--Delete User--> <actionGroup name="AdminDeleteNewUserActionGroup"> - - <click stepKey="clickOnUser" selector="{{AdminDeleteUserSection.theUser}}"/> - <fillField stepKey="TypeCurrentPassword" selector="{{AdminDeleteUserSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> + <arguments> + <argument name="userName" type="string" defaultValue="John"/> + </arguments> + <click stepKey="clickOnUser" selector="{{AdminDeleteUserSection.theUser(userName)}}"/> + <fillField stepKey="typeCurrentPassword" selector="{{AdminDeleteUserSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> <scrollToTopOfPage stepKey="scrollToTop"/> <click stepKey="clickToDeleteUser" selector="{{AdminDeleteUserSection.delete}}"/> <waitForPageLoad stepKey="waitForDeletePopupOpen" time="5"/> @@ -51,5 +52,4 @@ <waitForPageLoad stepKey="waitForPageLoad" time="10"/> <see userInput="You deleted the user." stepKey="seeSuccessMessage" /> </actionGroup> - </actionGroups> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml index be18a9980bf7..55a7a7632dea 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml @@ -31,15 +31,19 @@ <argument name="sku" value="{{_defaultProduct.sku}}"/> </actionGroup> <actionGroup ref="resetProductGridToDefaultView" stepKey="resetFiltersIfExist"/> - <actionGroup ref="SignOut" stepKey="signOut"/> + <actionGroup ref="logout" stepKey="logoutOfUser"/> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> <!--Delete created data--> <comment userInput="Delete created data" stepKey="commentDeleteCreatedData"/> - <actionGroup ref="AdminDeleteCreatedRoleActionGroup" stepKey="deleteUserRole"> + <amOnPage url="{{AdminRolesPage.url}}" stepKey="navigateToUserRoleGrid" /> + <waitForPageLoad stepKey="waitForRolesGridLoad" /> + <actionGroup ref="AdminDeleteRoleActionGroup" stepKey="deleteUserRole"> <argument name="role" value="adminRole"/> </actionGroup> - <actionGroup ref="AdminDeleteCreatedUserActionGroup" stepKey="deleteUser"> - <argument name="user" value="newAdmin"/> + <amOnPage url="{{AdminUsersPage.url}}" stepKey="goToAllUsersPage"/> + <waitForPageLoad stepKey="waitForUsersGridLoad" /> + <actionGroup ref="AdminDeleteNewUserActionGroup" stepKey="deleteUser"> + <argument name="userName" value="{{admin2.username}}"/> </actionGroup> <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> <actionGroup ref="logout" stepKey="logoutOfAdmin"/> @@ -65,14 +69,13 @@ <comment userInput="Create user and assign role to it" stepKey="commentCreateUser"/> <actionGroup ref="AdminCreateUserActionGroup" stepKey="createAdminUser"> <argument name="role" value="adminRole"/> - <argument name="User" value="newAdmin"/> + <argument name="User" value="admin2"/> </actionGroup> <!--Log out of admin and login with newly created user--> <comment userInput="Log out of admin and login with newly created user" stepKey="commentLoginWithNewUser"/> - <actionGroup ref="SignOut" stepKey="signOut"/> - <actionGroup ref="LoginAsAnyUser" stepKey="loginActionGroup"> - <argument name="uname" value="{{newAdmin.username}}"/> - <argument name="passwd" value="{{newAdmin.password}}"/> + <actionGroup ref="logout" stepKey="logoutOfAdmin"/> + <actionGroup ref="LoginNewUser" stepKey="loginActionGroup"> + <argument name="user" value="admin2"/> </actionGroup> <!--Go to create product page--> <comment userInput="Go to create product page" stepKey="commentGoCreateProductPage"/> diff --git a/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml b/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml index 4c59edbcb805..40bf68db6ea6 100644 --- a/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml +++ b/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml @@ -19,9 +19,12 @@ <!--Login New User--> <actionGroup name="LoginNewUser"> + <arguments> + <argument name="user" defaultValue="NewAdmin"/> + </arguments> <amOnPage url="{{_ENV.MAGENTO_BACKEND_NAME}}" stepKey="navigateToAdmin"/> - <fillField userInput="{{NewAdmin.username}}" selector="{{LoginFormSection.username}}" stepKey="fillUsername"/> - <fillField userInput="{{NewAdmin.password}}" selector="{{LoginFormSection.password}}" stepKey="fillPassword"/> + <fillField userInput="{{user.username}}" selector="{{LoginFormSection.username}}" stepKey="fillUsername"/> + <fillField userInput="{{user.password}}" selector="{{LoginFormSection.password}}" stepKey="fillPassword"/> <click selector="{{LoginFormSection.signIn}}" stepKey="clickLogin"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml index ed45085cd9cc..22ce7a54a635 100644 --- a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml +++ b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateRoleActionGroup.xml @@ -39,6 +39,7 @@ <remove keyForRemoval="fillRoleName"/> <remove keyForRemoval="enterPassword"/> <remove keyForRemoval="clickRoleResourcesTab"/> + <remove keyForRemoval="waitForScopeSelection"/> <remove keyForRemoval="clickSaveRoleButton"/> <remove keyForRemoval="waitForPageLoad2"/> <scrollTo selector="{{AdminEditRoleInfoSection.blockName('restrictedRole')}}" x="0" y="-100" stepKey="scrollToResourceElement" after="selectResourceAccessCustom"/> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateUserActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateUserActionGroup.xml index 303713132d2b..3f1aa73361b3 100644 --- a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateUserActionGroup.xml +++ b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminCreateUserActionGroup.xml @@ -15,12 +15,12 @@ <amOnPage url="{{AdminUsersPage.url}}" stepKey="amOnAdminUsersPage"/> <waitForPageLoad stepKey="waitForAdminUserPageLoad"/> <click selector="{{AdminCreateUserSection.create}}" stepKey="clickToCreateNewUser"/> - <fillField selector="{{AdminEditUserSection.usernameTextField}}" userInput="{{newAdmin.username}}" stepKey="enterUserName" /> - <fillField selector="{{AdminEditUserSection.firstNameTextField}}" userInput="{{newAdmin.firstName}}" stepKey="enterFirstName" /> - <fillField selector="{{AdminEditUserSection.lastNameTextField}}" userInput="{{newAdmin.lastName}}" stepKey="enterLastName" /> - <fillField selector="{{AdminEditUserSection.emailTextField}}" userInput="{{newAdmin.username}}@magento.com" stepKey="enterEmail" /> - <fillField selector="{{AdminEditUserSection.passwordTextField}}" userInput="{{newAdmin.password}}" stepKey="enterPassword" /> - <fillField selector="{{AdminEditUserSection.pwConfirmationTextField}}" userInput="{{newAdmin.password}}" stepKey="confirmPassword" /> + <fillField selector="{{AdminEditUserSection.usernameTextField}}" userInput="{{User.username}}" stepKey="enterUserName" /> + <fillField selector="{{AdminEditUserSection.firstNameTextField}}" userInput="{{User.firstName}}" stepKey="enterFirstName" /> + <fillField selector="{{AdminEditUserSection.lastNameTextField}}" userInput="{{User.lastName}}" stepKey="enterLastName" /> + <fillField selector="{{AdminEditUserSection.emailTextField}}" userInput="{{User.username}}@magento.com" stepKey="enterEmail" /> + <fillField selector="{{AdminEditUserSection.passwordTextField}}" userInput="{{User.password}}" stepKey="enterPassword" /> + <fillField selector="{{AdminEditUserSection.pwConfirmationTextField}}" userInput="{{User.password}}" stepKey="confirmPassword" /> <fillField selector="{{AdminEditUserSection.currentPasswordField}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="enterCurrentPassword" /> <scrollToTopOfPage stepKey="scrollToTopOfPage" /> <click selector="{{AdminEditUserSection.userRoleTab}}" stepKey="clickUserRole" /> diff --git a/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml b/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml new file mode 100644 index 000000000000..6bcfe48addb4 --- /dev/null +++ b/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> + <section name="AdminEditRoleResourcesSection"> + <element name="roleScopes" type="select" selector="#gws_is_all"/> + <element name="resourceAccess" type="select" selector="#all"/> + <element name="resources" type="checkbox" selector="#role_info_tabs_account"/> + <element name="storeName" type="checkbox" selector="//label[contains(text(),'{{var1}}')]" parameterized="true"/> + <element name="reportsCheckbox" type="text" selector="//li[@data-id='Magento_Reports::report']//a[text()='Reports']"/> + <element name="userRoles" type="text" selector="//span[contains(text(), 'User Roles')]"/> + </section> +</sections> diff --git a/app/code/Magento/User/Test/Mftf/Section/AdminUserGridSection.xml b/app/code/Magento/User/Test/Mftf/Section/AdminUserGridSection.xml index c21a8b875e95..32e834615a27 100644 --- a/app/code/Magento/User/Test/Mftf/Section/AdminUserGridSection.xml +++ b/app/code/Magento/User/Test/Mftf/Section/AdminUserGridSection.xml @@ -16,7 +16,7 @@ </section> <section name="AdminDeleteUserSection"> - <element name="theUser" selector="//td[contains(text(), 'John')]" type="button"/> + <element name="theUser" selector="//td[contains(text(), '{{userName}}')]" type="button" parameterized="true"/> <element name="password" selector="#user_current_password" type="input"/> <element name="delete" selector="//button/span[contains(text(), 'Delete User')]" type="button"/> <element name="confirm" selector="//*[@class='action-primary action-accept']" type="button"/> From 8b077f6ef0dadc228d8ca9334b9c0de4523e3147 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Wed, 17 Apr 2019 13:36:53 +0400 Subject: [PATCH 033/209] MAGETWO-98635: Multiple wishlists not supporting with Recently view widget or etc - Updated automated test script. --- .../Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml index f62c070217ce..416da97ff5bd 100644 --- a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml @@ -25,7 +25,7 @@ <amOnPage url="{{CmsPageEditPage.url('2')}}" stepKey="navigateToEditHomePagePage"/> <waitForPageLoad stepKey="waitForCmsPageEditPage"/> <conditionalClick selector="{{CmsNewPagePageActionsSection.contentSectionName}}" dependentSelector="{{CatalogWidgetSection.insertWidgetButton}}" visible="false" stepKey="clickShowHideEditorIfVisible"/> - <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="CMS homepage content goes here." stepKey="fillContentForCMSPage"/> + <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="CMS homepage content goes here." stepKey="resetCMSPageToDefaultContent"/> <click selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="clickSave"/> <waitForPageLoad stepKey="waitForSettingsApply"/> </actionGroup> From 4e1139285d15a1bc63c48325bb3becaa555014e3 Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Thu, 18 Apr 2019 17:13:32 +0300 Subject: [PATCH 034/209] MAGETWO-88905: Import Customer ("gender" field) issue - Fixed customer import gender field issue --- .../Magento/CustomerImportExport/Model/Import/Customer.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php index ab940c9e8453..83c68062bcbc 100644 --- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php +++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php @@ -423,6 +423,9 @@ protected function _prepareDataForUpdate(array $rowData) $attributeParameters = $this->_attributes[$attributeCode]; if (in_array($attributeParameters['type'], ['select', 'boolean'])) { $value = $this->getSelectAttrIdByValue($attributeParameters, $value); + if ($attributeCode === CustomerInterface::GENDER && $value === 0) { + $value = null; + } } elseif ('multiselect' == $attributeParameters['type']) { $ids = []; foreach (explode($multiSeparator, mb_strtolower($value)) as $subValue) { From f9f22e4cb3b19d1a4676e7bc028a2d6a276a6e55 Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Thu, 18 Apr 2019 18:01:11 +0300 Subject: [PATCH 035/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Disabled skipping if product is saleable check --- .../Magento/Sales/Controller/Adminhtml/Order/Create.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php index dcf5e617d055..51e2a4d56835 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php @@ -3,11 +3,15 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Sales\Controller\Adminhtml\Order; use Magento\Backend\App\Action; use Magento\Framework\View\Result\PageFactory; use Magento\Backend\Model\View\Result\ForwardFactory; +use Magento\Framework\App\Action\HttpGetActionInterface; +use Magento\Framework\App\Action\HttpPostActionInterface; /** * Adminhtml sales orders creation process controller @@ -15,7 +19,7 @@ * @author Magento Core Team <core@magentocommerce.com> * @SuppressWarnings(PHPMD.NumberOfChildren) */ -abstract class Create extends \Magento\Backend\App\Action +abstract class Create extends \Magento\Backend\App\Action implements HttpGetActionInterface, HttpPostActionInterface { /** * @var \Magento\Framework\Escaper @@ -47,7 +51,6 @@ public function __construct( ForwardFactory $resultForwardFactory ) { parent::__construct($context); - $productHelper->setSkipSaleableCheck(true); $this->escaper = $escaper; $this->resultPageFactory = $resultPageFactory; $this->resultForwardFactory = $resultForwardFactory; @@ -362,6 +365,8 @@ protected function _processFiles($items) } /** + * Reload quote + * * @return $this */ protected function _reloadQuote() From ca0801369d2656feb8389950d4e4a20238ca70cf Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Thu, 18 Apr 2019 18:15:56 +0300 Subject: [PATCH 036/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Fixed static test --- app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php index 51e2a4d56835..22d9ab0a0d5f 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php @@ -42,6 +42,7 @@ abstract class Create extends \Magento\Backend\App\Action implements HttpGetActi * @param \Magento\Framework\Escaper $escaper * @param PageFactory $resultPageFactory * @param ForwardFactory $resultForwardFactory + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( Action\Context $context, From e1aa92989eca4cb53206aa77c6442007a9e4b222 Mon Sep 17 00:00:00 2001 From: Ievgenii Gryshkun <i.gryshkun@gmail.com> Date: Fri, 19 Apr 2019 09:45:21 +0300 Subject: [PATCH 037/209] Query category for disabled catalog with products returns the products count --- .../Products/DataProvider/CategoryTree.php | 28 +++++++++++++++++++ .../ExtractDataFromCategoryTree.php | 5 ---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php index fc5a563c82b4..03fcc7fb3522 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php @@ -85,6 +85,9 @@ public function getTree(ResolveInfo $resolveInfo, int $rootCategoryId): \Iterato { $categoryQuery = $resolveInfo->fieldNodes[0]; $collection = $this->collectionFactory->create(); + if ($this->isRootCategoryActive($collection, $rootCategoryId) == false) { + throw new \Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException(__('Category doesn\'t exist')); + } $this->joinAttributesRecursively($collection, $categoryQuery); $depth = $this->depthCalculator->calculate($categoryQuery); $level = $this->levelCalculator->calculate($rootCategoryId); @@ -144,4 +147,29 @@ private function joinAttributesRecursively(Collection $collection, FieldNode $fi $this->joinAttributesRecursively($collection, $node); } } + + /** + * @param Collection $collection + * @param int $rootCategoryId + * + * @return bool + * @throws \Exception + */ + private function isRootCategoryActive(Collection $collection, int $rootCategoryId) : bool + { + if ($rootCategoryId == Category::TREE_ROOT_ID) { + return true; + } + $collection->addAttributeToFilter(Category::KEY_IS_ACTIVE, ['eq' => 1]) + ->getSelect() + ->where( + $collection->getSelect() + ->getConnection() + ->quoteIdentifier( + 'e.' . $this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField() + ) . ' = ?', + $rootCategoryId + ); + return (bool) $collection->count(); + } } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php index cb0317e8dc97..3525ccbb6a2d 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ExtractDataFromCategoryTree.php @@ -9,8 +9,6 @@ use Magento\CatalogGraphQl\Model\Category\Hydrator; use Magento\Catalog\Api\Data\CategoryInterface; -use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; -use Magento\Catalog\Model\Category; /** * Extract data from category tree @@ -53,9 +51,6 @@ public function execute(\Iterator $iterator): array while ($iterator->valid()) { /** @var CategoryInterface $category */ $category = $iterator->current(); - if ($category->getIsActive() == false && $category->getId() != Category::TREE_ROOT_ID) { - throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); - } $iterator->next(); $pathElements = explode("/", $category->getPath()); if (empty($tree)) { From 0e8cf9246461f6cfdbec4d064fe557ad29fcd536 Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Wed, 24 Apr 2019 15:50:27 +0300 Subject: [PATCH 038/209] Update cart items with customizable options --- .../Model/Cart/UpdateCartItem.php | 98 +++++++++++++++++++ .../Model/Resolver/UpdateCartItems.php | 61 +++++++++--- .../Magento/QuoteGraphQl/etc/schema.graphqls | 3 +- 3 files changed, 150 insertions(+), 12 deletions(-) create mode 100644 app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php new file mode 100644 index 000000000000..bc98eb93b55c --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -0,0 +1,98 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\QuoteGraphQl\Model\Cart; + +use Magento\Framework\DataObject; +use Magento\Framework\DataObjectFactory; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\GraphQl\Exception\GraphQlInputException; +use Magento\Quote\Model\Quote; + +/** + * Update cart item + * + */ +class UpdateCartItem +{ + /** + * @var DataObjectFactory + */ + private $dataObjectFactory; + + /** + * @param DataObjectFactory $dataObjectFactory + */ + public function __construct( + DataObjectFactory $dataObjectFactory + ) { + $this->dataObjectFactory = $dataObjectFactory; + } + + /** + * Update cart item + * + * @param Quote $cart + * @param int $cartItemId + * @param float $qty + * @param null $customizableOptionsData + * @return void + * @throws GraphQlInputException + */ + public function execute(Quote $cart, int $cartItemId, float $qty, array $customizableOptionsData): void + { + $customizableOptions = []; + foreach ($customizableOptionsData as $customizableOption) { + $customizableOptions[$customizableOption['id']] = $customizableOption['value']; + } + + try { + $result = $cart->updateItem( + $cartItemId, + $this->createBuyRequest($qty, $customizableOptions) + ); + } catch (LocalizedException $e) { + throw new GraphQlInputException( + __( + 'Could not update cart item: %message', + ['message' => $e->getMessage()] + ) + ); + } + + if (is_string($result)) { + throw new GraphQlInputException(__( + 'Could not update cart item: %message', + ['message' => $result] + )); + } + + if ($result->getHasError()) { + throw new GraphQlInputException(__( + 'Could not update cart item: %message', + ['message' => $result->getMessage()] + )); + } + } + + /** + * Format GraphQl input data to a shape that buy request has + * + * @param float $qty + * @param array $customOptions + * @return DataObject + */ + private function createBuyRequest(float $qty, array $customOptions): DataObject + { + return $this->dataObjectFactory->create([ + 'data' => [ + 'qty' => $qty, + 'options' => $customOptions, + ], + ]); + } +} diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php index 78a07506556c..ed1cb7a9dab5 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php +++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php @@ -15,14 +15,26 @@ use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\Quote\Api\CartItemRepositoryInterface; +use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Model\Quote; use Magento\QuoteGraphQl\Model\Cart\GetCartForUser; +use Magento\QuoteGraphQl\Model\Cart\UpdateCartItem; /** * @inheritdoc */ class UpdateCartItems implements ResolverInterface { + /** + * @var CartRepositoryInterface + */ + private $quoteRepository; + + /** + * @var UpdateCartItem + */ + private $updateCartItem; + /** * @var GetCartForUser */ @@ -36,13 +48,19 @@ class UpdateCartItems implements ResolverInterface /** * @param GetCartForUser $getCartForUser * @param CartItemRepositoryInterface $cartItemRepository + * @param UpdateCartItem $updateCartItem + * @param CartRepositoryInterface $quoteRepository */ public function __construct( GetCartForUser $getCartForUser, - CartItemRepositoryInterface $cartItemRepository + CartItemRepositoryInterface $cartItemRepository, + UpdateCartItem $updateCartItem, + CartRepositoryInterface $quoteRepository ) { $this->getCartForUser = $getCartForUser; $this->cartItemRepository = $cartItemRepository; + $this->updateCartItem = $updateCartItem; + $this->quoteRepository = $quoteRepository; } /** @@ -93,26 +111,47 @@ private function processCartItems(Quote $cart, array $items): void if (!isset($item['cart_item_id']) || empty($item['cart_item_id'])) { throw new GraphQlInputException(__('Required parameter "cart_item_id" for "cart_items" is missing.')); } - $itemId = $item['cart_item_id']; + $itemId = (int)$item['cart_item_id']; if (!isset($item['quantity'])) { throw new GraphQlInputException(__('Required parameter "quantity" for "cart_items" is missing.')); } $qty = (float)$item['quantity']; - $cartItem = $cart->getItemById($itemId); - if ($cartItem === false) { - throw new GraphQlNoSuchEntityException( - __('Could not find cart item with id: %1.', $item['cart_item_id']) - ); - } - if ($qty <= 0.0) { $this->cartItemRepository->deleteById((int)$cart->getId(), $itemId); } else { - $cartItem->setQty($qty); - $this->cartItemRepository->save($cartItem); + $customizableOptions = $item['customizable_options'] ?? null; + + if ($customizableOptions === null) { // Update only item's qty + $this->updateItemQty($itemId, $cart, $qty); + } else { // Update customizable options (and QTY if changed) + $this->updateCartItem->execute($cart, $itemId, $qty, $customizableOptions); + $this->quoteRepository->save($cart); + } } } } + + /** + * Updates item qty for the specified cart + * + * @param int $itemId + * @param Quote $cart + * @param float $qty + * @throws GraphQlNoSuchEntityException + * @throws NoSuchEntityException + * @throws GraphQlNoSuchEntityException + */ + private function updateItemQty(int $itemId, Quote $cart, float $qty) + { + $cartItem = $cart->getItemById($itemId); + if ($cartItem === false) { + throw new GraphQlNoSuchEntityException( + __('Could not find cart item with id: %1.', $itemId) + ); + } + $cartItem->setQty($qty); + $this->cartItemRepository->save($cartItem); + } } diff --git a/app/code/Magento/QuoteGraphQl/etc/schema.graphqls b/app/code/Magento/QuoteGraphQl/etc/schema.graphqls index a9784e97c895..afbb8ceb03b3 100644 --- a/app/code/Magento/QuoteGraphQl/etc/schema.graphqls +++ b/app/code/Magento/QuoteGraphQl/etc/schema.graphqls @@ -67,7 +67,8 @@ input UpdateCartItemsInput { input CartItemQuantityInput { cart_item_id: Int! - quantity: Float! + quantity: Float + customizable_options: [CustomizableOptionInput!] } input RemoveItemFromCartInput { From 5f6aa1277f9af72c3739324f4c01497e2ff14da8 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Wed, 24 Apr 2019 15:56:40 +0300 Subject: [PATCH 039/209] MAGETWO-64923: Duplicate products not showing on the frontend --- .../Model/Product/VariationHandler.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php b/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php index 1bd8ef59f0d6..921731e9a2f9 100644 --- a/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php +++ b/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php @@ -201,12 +201,11 @@ protected function fillSimpleProductData( $keysFilter = ['item_id', 'product_id', 'stock_id', 'type_id', 'website_id']; $postData['stock_data'] = array_diff_key((array)$parentProduct->getStockData(), array_flip($keysFilter)); - if (!isset($postData['stock_data']['is_in_stock'])) { - $stockStatus = $parentProduct->getQuantityAndStockStatus(); - if (isset($stockStatus['is_in_stock'])) { - $postData['stock_data']['is_in_stock'] = $stockStatus['is_in_stock']; - } + $stockStatus = $parentProduct->getQuantityAndStockStatus(); + if (isset($stockStatus['is_in_stock'])) { + $postData['stock_data']['is_in_stock'] = $stockStatus['is_in_stock']; } + $postData = $this->processMediaGallery($product, $postData); $postData['status'] = isset($postData['status']) ? $postData['status'] From b93edb549d3d891a9b055b37114a854c5468e0c0 Mon Sep 17 00:00:00 2001 From: Yurii Borysov <yurii_borysov@epam.com> Date: Wed, 24 Apr 2019 16:57:35 +0300 Subject: [PATCH 040/209] MAGETWO-98748: Incorrect behavior in the category menu on the Storefront - Update test case id --- .../CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml index b3b238a3ba3f..d2fe983cb82e 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/CheckCurrentCategoryIsHighlightedAndProductsDisplayed.xml @@ -14,7 +14,7 @@ <title value="Сheck that current category is highlighted and all products displayed for it"/> <description value="Сheck that current category is highlighted and all products displayed for it"/> <severity value="MAJOR"/> - <testCaseId value="MAGETWO-98028"/> + <testCaseId value="MAGETWO-99028"/> <useCaseId value="MAGETWO-98748"/> <group value="Catalog"/> </annotations> From 8ca4590a01173908c1c5ff265954a13756d1c39d Mon Sep 17 00:00:00 2001 From: Valerii Naida <vnayda@adobe.com> Date: Wed, 24 Apr 2019 12:01:17 -0500 Subject: [PATCH 041/209] GraphQL-463: Query category for disabled catalog with products returns the products count --- .../Products/DataProvider/CategoryTree.php | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php index 03fcc7fb3522..0f305efa5f07 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php @@ -11,6 +11,7 @@ use Magento\CatalogGraphQl\Model\Category\DepthCalculator; use Magento\CatalogGraphQl\Model\Category\LevelCalculator; use Magento\Framework\EntityManager\MetadataPool; +use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\Catalog\Api\Data\CategoryInterface; use Magento\Catalog\Model\ResourceModel\Category\Collection; @@ -84,10 +85,11 @@ public function __construct( public function getTree(ResolveInfo $resolveInfo, int $rootCategoryId): \Iterator { $categoryQuery = $resolveInfo->fieldNodes[0]; - $collection = $this->collectionFactory->create(); - if ($this->isRootCategoryActive($collection, $rootCategoryId) == false) { - throw new \Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException(__('Category doesn\'t exist')); + if ($this->isCategoryActive($rootCategoryId) == false) { + throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); } + + $collection = $this->collectionFactory->create(); $this->joinAttributesRecursively($collection, $categoryQuery); $depth = $this->depthCalculator->calculate($categoryQuery); $level = $this->levelCalculator->calculate($rootCategoryId); @@ -149,27 +151,26 @@ private function joinAttributesRecursively(Collection $collection, FieldNode $fi } /** - * @param Collection $collection * @param int $rootCategoryId - * * @return bool * @throws \Exception */ - private function isRootCategoryActive(Collection $collection, int $rootCategoryId) : bool + private function isCategoryActive(int $rootCategoryId) : bool { if ($rootCategoryId == Category::TREE_ROOT_ID) { return true; } + $collection = $this->collectionFactory->create(); $collection->addAttributeToFilter(Category::KEY_IS_ACTIVE, ['eq' => 1]) ->getSelect() ->where( $collection->getSelect() - ->getConnection() - ->quoteIdentifier( - 'e.' . $this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField() - ) . ' = ?', - $rootCategoryId + ->getConnection() + ->quoteIdentifier( + 'e.' . $this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField() + ) . ' = ?', + $rootCategoryId ); - return (bool) $collection->count(); + return (bool)$collection->count(); } } From 201cdf2aa003e51f347d6c29043b37c0e18e8b1e Mon Sep 17 00:00:00 2001 From: Ievgenii Gryshkun <i.gryshkun@gmail.com> Date: Sat, 27 Apr 2019 12:41:50 +0300 Subject: [PATCH 042/209] Query category for disabled catalog with products returns the product count #476 --- .../Model/Resolver/Products/DataProvider/CategoryTree.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php index 03fcc7fb3522..80653bfdeca8 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php @@ -149,6 +149,8 @@ private function joinAttributesRecursively(Collection $collection, FieldNode $fi } /** + * Check if provided category active + * * @param Collection $collection * @param int $rootCategoryId * From cf3474228baf916604f763d98b839b93256c8647 Mon Sep 17 00:00:00 2001 From: Anahit Martirosyan <anahit_martirosyan@epam.com> Date: Mon, 29 Apr 2019 17:27:08 +0400 Subject: [PATCH 043/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Add automated test script --- .../AdminOrderFormConfigureProductSection.xml | 1 + ...ntAddConfigurableProductToShoppingCart.xml | 127 ++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml diff --git a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml index 83d417f6f855..af763c45c6ab 100644 --- a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml +++ b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml @@ -9,6 +9,7 @@ <sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminOrderFormConfigureProductSection"> + <element name="configure" type="button" selector="//a[@product_id='{{productId}}']" parameterized="true"/> <element name="optionSelect" type="select" selector="//div[@class='product-options']/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> <element name="quantity" type="input" selector="#product_composite_configure_input_qty"/> <element name="ok" type="button" selector=".modal-header .page-actions button[data-role='action']" timeout="30"/> diff --git a/app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml b/app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml new file mode 100644 index 000000000000..302168a96886 --- /dev/null +++ b/app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminCantAddConfigurableProductToShoppingCart"> + <annotations> + <title value="Configurable product can't be added to shopping cart via admin"/> + <description value="Configurable product can't be added to shopping cart via admin"/> + <severity value="AVERAGE"/> + <testCaseId value="MAGETWO-99240"/> + <useCaseId value="MAGETWO-72172"/> + <group value="sales"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="login"/> + <!--Create category--> + <comment userInput="Create category" stepKey="commentCreateCategory"/> + <createData entity="SimpleSubCategory" stepKey="createCategory"/> + <!-- Create the configurable product based on the data in the /data folder --> + <comment userInput="Create the configurable product based on the data in the /data folder" stepKey="createConfigurableProduct"/> + <createData entity="ApiConfigurableProduct" stepKey="createConfigProduct"> + <requiredEntity createDataKey="createCategory"/> + </createData> + <!-- Make the configurable product have two options, that are children of the default attribute set --> + <comment userInput="Make the configurable product have two options, that are children of the default attribute set" stepKey="configurableProductHaveTwoOptions"/> + <createData entity="productAttributeWithTwoOptions" stepKey="createConfigProductAttribute"/> + <createData entity="productAttributeOption1" stepKey="createConfigProductAttributeOption1"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <createData entity="productAttributeOption2" stepKey="createConfigProductAttributeOption2"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <createData entity="productAttributeOption3" stepKey="createConfigProductAttributeOption3"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <createData entity="AddToDefaultSet" stepKey="createConfigAddToAttributeSet"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <getData entity="ProductAttributeOptionGetter" index="1" stepKey="getConfigAttributeOption1"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </getData> + <getData entity="ProductAttributeOptionGetter" index="2" stepKey="getConfigAttributeOption2"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </getData> + <getData entity="ProductAttributeOptionGetter" index="3" stepKey="getConfigAttributeOption3"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </getData> + <!-- Create the 2 children that will be a part of the configurable product --> + <comment userInput="Create the 2 children that will be a part of the configurable product" stepKey="createTwoChildrenProducts"/> + <createData entity="ApiSimpleProductWithPrice50" stepKey="createConfigChildProduct1"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption1"/> + </createData> + <createData entity="ApiSimpleProductWithPrice60" stepKey="createConfigChildProduct2"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption2"/> + </createData> + <createData entity="ApiSimpleProductWithPrice70" stepKey="createConfigChildProduct3"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption3"/> + </createData> + <!-- Assign two products to the configurable product --> + <comment userInput="Assign two products to the configurable product" stepKey="assignToConfigurableProduct"/> + <createData entity="ConfigurableProductTwoOptions" stepKey="createConfigProductOption"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption1"/> + <requiredEntity createDataKey="getConfigAttributeOption2"/> + <requiredEntity createDataKey="getConfigAttributeOption3"/> + </createData> + <createData entity="ConfigurableProductAddChild" stepKey="createConfigProductAddChild1"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigChildProduct1"/> + </createData> + <createData entity="ConfigurableProductAddChild" stepKey="createConfigProductAddChild2"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigChildProduct2"/> + </createData> + <createData entity="ConfigurableProductAddChild" stepKey="createConfigProductAddChild3"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigChildProduct3"/> + </createData> + <!--Create Customer--> + <comment userInput="Create customer" stepKey="commentCreateCustomer"/> + <createData entity="Simple_US_Customer_CA" stepKey="createCustomer"/> + </before> + <after> + <!--Delete created data--> + <comment userInput="Delete created data" stepKey="deleteData"/> + <deleteData createDataKey="createCategory" stepKey="deleteCategory2"/> + <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/> + <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/> + <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/> + <deleteData createDataKey="createConfigChildProduct3" stepKey="deleteConfigChildProduct3"/> + <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/> + <deleteData createDataKey="createCustomer" stepKey="deleteCreatedCustomer"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!--Disable child product --> + <comment userInput="Disable child product" stepKey="disableChildProduct"/> + <amOnPage url="{{AdminProductEditPage.url($$createConfigChildProduct1.id$$)}}" stepKey="goToEditPage"/> + <waitForPageLoad stepKey="waitForChildProductPageLoad"/> + <click selector="{{AdminProductFormSection.enableProductLabel}}" stepKey="disableProduct"/> + <actionGroup ref="saveProductForm" stepKey="saveProductForm"/> + <!--Go to created customer page--> + <comment userInput="Go to created customer page" stepKey="goToCreatedCustomerPage"/> + <actionGroup ref="navigateToNewOrderPageExistingCustomer" stepKey="createNewOrder"> + <argument name="customer" value="$$createCustomer$$"/> + </actionGroup> + <click selector="{{AdminOrderFormItemsSection.addProducts}}" stepKey="clickToAddProduct"/> + <waitForPageLoad stepKey="waitForProductsOpened"/> + <!--Find created configurable product and click on "Configure" link--> + <comment userInput="Find created configurable product and click on Configure link" stepKey="goToConfigurableLink"/> + <click selector="{{AdminOrderFormConfigureProductSection.configure($$createConfigProduct.id$$)}}" stepKey="clickOnConfigure"/> + <!--Click on attribute drop-down and check no option 1 is available--> + <comment userInput="Click on attribute drop-down and check no option 1 is available" stepKey="commentNoOptionIsAvailable"/> + <waitForElement selector="{{AdminOrderFormConfigureProductSection.attributeSelect}}" stepKey="waitForShippingSectionLoaded"/> + <click selector="{{AdminOrderFormConfigureProductSection.attributeSelect}}" stepKey="clickToSelectOption"/> + <dontSee userInput="$$createConfigProductAttributeOption1.option[store_labels][1][label]$$" stepKey="dontSeeOption1"/> + </test> +</tests> From d739a3fd0c6ac30f5923cd13de60410b06059333 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Fri, 3 May 2019 16:19:07 +0300 Subject: [PATCH 044/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../Product/Attribute/CreateOptions.php | 142 ++++++++++++++---- .../js/variations/steps/attributes_values.js | 40 ++++- 2 files changed, 148 insertions(+), 34 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php index cfa2562d974f..841216a06780 100644 --- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php +++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php @@ -4,12 +4,20 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\ConfigurableProduct\Controller\Adminhtml\Product\Attribute; -use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface; use Magento\Backend\App\Action; +use Magento\Catalog\Api\Data\ProductAttributeInterface; use Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory; +use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Json\Helper\Data; +/** + * Creates options for product attributes + */ class CreateOptions extends Action implements HttpPostActionInterface { /** @@ -20,28 +28,33 @@ class CreateOptions extends Action implements HttpPostActionInterface const ADMIN_RESOURCE = 'Magento_Catalog::products'; /** - * @var \Magento\Framework\Json\Helper\Data + * @var Data */ protected $jsonHelper; /** - * @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory + * @var AttributeFactory */ protected $attributeFactory; + /** + * @var ProductAttributeInterface[] + */ + private $attributes; + /** * @param Action\Context $context - * @param \Magento\Framework\Json\Helper\Data $jsonHelper + * @param Data $jsonHelper * @param AttributeFactory $attributeFactory */ public function __construct( Action\Context $context, - \Magento\Framework\Json\Helper\Data $jsonHelper, + Data $jsonHelper, AttributeFactory $attributeFactory ) { + parent::__construct($context); $this->jsonHelper = $jsonHelper; $this->attributeFactory = $attributeFactory; - parent::__construct($context); } /** @@ -51,7 +64,15 @@ public function __construct( */ public function execute() { - $this->getResponse()->representJson($this->jsonHelper->jsonEncode($this->saveAttributeOptions())); + try { + $output = $this->saveAttributeOptions(); + } catch (LocalizedException $e) { + $output = [ + 'error' => true, + 'message' => $e->getMessage(), + ]; + } + $this->getResponse()->representJson($this->jsonHelper->jsonEncode($output)); } /** @@ -61,31 +82,100 @@ public function execute() * @TODO Move this logic to configurable product type model * when full set of operations for attribute options during * product creation will be implemented: edit labels, remove, reorder. - * Currently only addition of options to end and removal of just added option is supported. + * Currently only addition of options is supported. + * @throws LocalizedException */ protected function saveAttributeOptions() { - $options = (array)$this->getRequest()->getParam('options'); + $attributeIds = $this->getUpdatedAttributeIds(); $savedOptions = []; - foreach ($options as $option) { - if (isset($option['label']) && isset($option['is_new'])) { - $attribute = $this->attributeFactory->create(); - $attribute->load($option['attribute_id']); - $optionsBefore = $attribute->getSource()->getAllOptions(false); - $attribute->setOption( - [ - 'value' => ['option_0' => [$option['label']]], - 'order' => ['option_0' => count($optionsBefore) + 1], - ] - ); - $attribute->save(); - $attribute = $this->attributeFactory->create(); - $attribute->load($option['attribute_id']); - $optionsAfter = $attribute->getSource()->getAllOptions(false); - $newOption = array_pop($optionsAfter); - $savedOptions[$option['id']] = $newOption['value']; + foreach ($attributeIds as $attributeId => $newOptions) { + $attribute = $this->getAttribute($attributeId); + $this->checkUnique($attribute, $newOptions); + foreach ($newOptions as $newOption) { + $lastAddedOption = $this->saveOption($attribute, $newOption); + $savedOptions[$newOption['id']] = $lastAddedOption['value']; } } + return $savedOptions; } + + /** + * Checks unique values + * + * @param ProductAttributeInterface $attribute + * @param array $newOptions + * @return void + * @throws LocalizedException + */ + private function checkUnique(ProductAttributeInterface $attribute, array $newOptions) + { + $originalOptions = $attribute->getSource()->getAllOptions(false); + $allOptions = array_merge($originalOptions, $newOptions); + $optionValues = array_map(function ($option) { + return $option['label']; + }, $allOptions); + + $uniqueValues = array_unique($optionValues); + $duplicates = array_diff_assoc($optionValues, $uniqueValues); + if ($duplicates) { + throw new LocalizedException(__('Attributes must have unique option values')); + } + } + + /** + * Loads the product attribute by the id + * + * @param int $attributeId + * @return ProductAttributeInterface + */ + private function getAttribute(int $attributeId) + { + if (!isset($this->attributes[$attributeId])) { + $attribute = $this->attributeFactory->create(); + $this->attributes[$attributeId] = $attribute->load($attributeId); + } + + return $this->attributes[$attributeId]; + } + + /** + * Retrieve updated attribute ids with new options + * + * @return array + */ + private function getUpdatedAttributeIds() + { + $options = (array)$this->getRequest()->getParam('options'); + $updatedAttributeIds = []; + foreach ($options as $option) { + if (isset($option['label'], $option['is_new'], $option['attribute_id'])) { + $updatedAttributeIds[$option['attribute_id']][] = $option; + } + } + + return $updatedAttributeIds; + } + + /** + * Saves the option + * + * @param ProductAttributeInterface $attribute + * @param array $newOption + * @return array + */ + private function saveOption(ProductAttributeInterface $attribute, array $newOption) + { + $optionsBefore = $attribute->getSource()->getAllOptions(false); + $attribute->setOption( + [ + 'value' => ['option_0' => [$newOption['label']]], + 'order' => ['option_0' => count($optionsBefore) + 1], + ] + ); + $attribute->save(); + $optionsAfter = $attribute->getSource()->getAllOptions(false); + return array_pop($optionsAfter); + } } diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index 1fa65e03f54e..7331601c538f 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -184,32 +184,56 @@ define([ * @return {Boolean} */ saveOptions: function () { - var options = []; + var newOptions = [], + errorsInAttributes = [], + allOptions = []; this.attributes.each(function (attribute) { - attribute.chosenOptions.each(function (id) { + + attribute.options.each(function (element) { var option = attribute.options.findWhere({ - id: id, - 'is_new': true + id: element.id }); - if (option) { - options.push(option); + if (option.is_new === true) { + newOptions.push(option); + } + + if (typeof allOptions[option.attribute_id] === 'undefined') { + allOptions[option.attribute_id] = []; } + + if (typeof allOptions[option.attribute_id][option.label] !== 'undefined') { + errorsInAttributes.push(attribute); + } + + allOptions[option.attribute_id][option.label] = option.label; }); }); - if (!options.length) { + if (errorsInAttributes.length) { + var errorMessage = $.mage.__('Attributes must have unique option values'); + throw new Error(errorMessage); + } + + if (!newOptions.length) { return false; } + $.ajax({ type: 'POST', url: this.createOptionsUrl, data: { - options: options + options: newOptions }, showLoader: true }).done(function (savedOptions) { + if (savedOptions.error) { + this.notificationMessage.error = savedOptions.error; + this.notificationMessage.text = savedOptions.message; + return; + } + this.attributes.each(function (attribute) { _.each(savedOptions, function (newOptionId, oldOptionId) { var option = attribute.options.findWhere({ From e0e05a95d58f1a7d9fb531bc6384a8f966fb1e86 Mon Sep 17 00:00:00 2001 From: Ajeet Singh <36220521+ajeetsinghcedcoss@users.noreply.github.com> Date: Sat, 4 May 2019 13:23:45 +0530 Subject: [PATCH 045/209] Change exportButton option cvs Change exportButton option cvs <option name="csv" xsi:type="array"> --- app/code/Magento/Ui/view/base/ui_component/etc/definition.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml index 75374a82f1da..f0a5f357f8a9 100755 --- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml +++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml @@ -258,7 +258,7 @@ <exportButton class="Magento\Ui\Component\ExportButton" component="Magento_Ui/js/grid/export" displayArea="dataGridActions"> <settings> <options> - <option name="cvs" xsi:type="array"> + <option name="csv" xsi:type="array"> <item name="value" xsi:type="string">csv</item> <item name="label" xsi:type="string" translate="true">CSV</item> <item name="url" xsi:type="string">mui/export/gridToCsv</item> From 1a62a1094829fc4d00b68466d365aaf1d32deadf Mon Sep 17 00:00:00 2001 From: Kunal Soni <kunal@ranosys.com> Date: Sat, 4 May 2019 14:10:08 +0530 Subject: [PATCH 046/209] Resolve issue 20038 --- app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js b/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js index ab01565d7f1e..8d22199aa85c 100644 --- a/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js +++ b/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js @@ -300,10 +300,10 @@ define([ submitOrder: function () { this.$selector.validate().form(); this.$selector.trigger('afterValidate.beforeSubmit'); - $('body').trigger('processStop'); - + // validate parent form if (this.$selector.validate().errorList.length) { + $('body').trigger('processStop'); return false; } From e116dd00352ddc4b452a2161ba97ec4847d65996 Mon Sep 17 00:00:00 2001 From: Ronak Patel <ronak2ram@gmail.com> Date: Sun, 5 May 2019 23:08:16 +0530 Subject: [PATCH 047/209] Resolve issue of finset and nfinset search by array value --- lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php index edec7e135ae9..9af4306ba459 100644 --- a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php +++ b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php @@ -2976,6 +2976,9 @@ public function prepareSqlCondition($fieldName, $condition) if (($key == 'in' || $key == 'nin') && is_string($value)) { $value = explode(',', $value); } + if (($key == 'finset' || $key == 'nfinset') && is_array($value)) { + $value = implode(',', $value); + } $query = $this->_prepareQuotedSqlCondition($conditionKeyMap[$key], $value, $fieldName); } else { $queries = []; From bf7636ea2bec4febd808da47e852b55916987cca Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Wed, 8 May 2019 11:56:15 +0400 Subject: [PATCH 048/209] MAGETWO-64923: Duplicate products not showing on the frontend - Added automated test script --- .../AdminConfigurableProductActionGroup.xml | 49 +++++ .../Data/ProductConfigurableAttributeData.xml | 5 + ...reateProductConfigurationsPanelSection.xml | 3 + .../AdminProductFormConfigurationsSection.xml | 1 + ...efrontVisibilityOfDuplicateProductTest.xml | 200 ++++++++++++++++++ 5 files changed, 258 insertions(+) create mode 100644 app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml index 5a172ca5eabd..284fb454cfd8 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml @@ -122,6 +122,37 @@ <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton3"/> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton4"/> </actionGroup> + <actionGroup name="AdminCreateAttributeForConfigurableProduct"> + <arguments> + <argument name="attributeName" type="string"/> + </arguments> + <click selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" stepKey="clickOnNewAttribute"/> + <waitForPageLoad stepKey="waitForIFrame"/> + <switchToIFrame selector="{{AdminNewAttributePanel.newAttributeIFrame}}" stepKey="switchToNewAttributeIFrame"/> + <fillField selector="{{AdminNewAttributePanel.defaultLabel}}" userInput="{{attributeName}}" stepKey="fillDefaultLabel"/> + <click selector="{{AdminNewAttributePanel.saveAttribute}}" stepKey="clickOnNewAttributePanel"/> + <waitForPageLoad stepKey="waitForSaveAttribute"/> + <switchToIFrame stepKey="switchOutOfIFrame"/> + </actionGroup> + <actionGroup name="createOptionsForAttribute"> + <arguments> + <argument name="attributeName" type="string"/> + <argument name="firstOptionName" type="string"/> + <argument name="secondOptionName" type="string"/> + </arguments> + <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" stepKey="clickOnFilters"/> + <fillField userInput="{{attributeName}}" selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" stepKey="fillFilterAttributeCodeField"/> + <click selector="{{AdminCreateProductConfigurationsPanel.applyFilters}}" stepKey="clickApplyFiltersButton"/> + <click selector="{{AdminCreateProductConfigurationsPanel.firstCheckbox}}" stepKey="clickOnFirstCheckbox"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton"/> + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateFirstNewValue"/> + <fillField userInput="{{firstOptionName}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewFirstOption"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveNewAttribute"/> + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateSecondNewValue"/> + <fillField userInput="{{secondOptionName}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewSecondOption"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveAttribute"/> + <click selector="{{AdminCreateProductConfigurationsPanel.selectAll}}" stepKey="clickOnSelectAll"/> + </actionGroup> <actionGroup name="createConfigurationsForAttribute" extends="generateConfigurationsByAttributeCode"> <arguments> @@ -266,6 +297,16 @@ <selectOption userInput="{{frontend_label}}" selector="{{AdminCreateProductConfigurationsPanel.selectPriceButton}}" stepKey="selectOption"/> <fillField selector="{{AdminCreateProductConfigurationsPanel.price(label)}}" userInput="{{price}}" stepKey="enterAttributeQuantity"/> </actionGroup> + <actionGroup name="addUniqueQuantityToConfigurableProductOption"> + <arguments> + <argument name="frontend_label" type="string"/> + <argument name="label" type="string"/> + <argument name="quantity" type="string"/> + </arguments> + <click selector="{{AdminCreateProductConfigurationsPanel.applyUniqueQuantityToEachSkus}}" dependentSelector="{{AdminCreateProductConfigurationsPanel.selectQuantity}}" visible="false" stepKey="clickOnApplyUniqueQuantitiesToEachSku"/> + <selectOption selector="{{AdminCreateProductConfigurationsPanel.selectQuantity}}" userInput="{{frontend_label}}" stepKey="selectOption"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.applyUniqueQuantity(label)}}" userInput="{{quantity}}" stepKey="enterAttributeQuantity"/> + </actionGroup> <actionGroup name="saveConfigurableProductWithNewAttributeSet"> <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveConfigurableProduct"/> @@ -302,4 +343,12 @@ <waitForPageLoad stepKey="waitForNextStepLoaded"/> <see userInput="{{title}}" selector="{{AdminProductFormConfigurationsSection.stepsWizardTitle}}" stepKey="seeStepTitle"/> </actionGroup> + <actionGroup name="AdminConfigurableProductDisableConfigurationsActionGroup"> + <arguments> + <argument name="productName" type="string"/> + </arguments> + <click selector="{{AdminProductFormConfigurationsSection.actionsBtnByProductName(productName)}}" stepKey="clickToExpandActionsSelect"/> + <click selector="{{AdminProductFormConfigurationsSection.disableProductBtn}}" stepKey="clickDisableChildProduct"/> + <see selector="{{AdminProductFormConfigurationsSection.confProductOptionStatusCell(productName)}}" userInput="Disabled" stepKey="seeConfigDisabled"/> + </actionGroup> </actionGroups> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Data/ProductConfigurableAttributeData.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Data/ProductConfigurableAttributeData.xml index 4c5f83ecebec..13760f74297e 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Data/ProductConfigurableAttributeData.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Data/ProductConfigurableAttributeData.xml @@ -29,6 +29,11 @@ <data key="name" unique="suffix">Orange</data> <data key="price">99.99</data> </entity> + <entity name="productAttributeColor" type="product_attribute"> + <data key="default_label" unique="suffix">color</data> + <data key="input_type">Dropdown</data> + <data key="attribute_quantity">1</data> + </entity> <entity name="colorDefaultProductAttribute" type="product_attribute"> <data key="default_label">Color</data> <data key="input_type">Dropdown</data> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml index a5e74145c9fe..306e8cbecf02 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml @@ -39,6 +39,9 @@ <element name="attribute3" type="input" selector="#apply-single-price-input-2"/> <element name="applySingleQuantityToEachSkus" type="radio" selector=".admin__field-label[for='apply-single-inventory-radio']" timeout="30"/> + <element name="applyUniqueQuantityToEachSkus" type="radio" selector=".admin__field-label[for='apply-unique-inventory-radio']" timeout="30"/> + <element name="selectQuantity" type="select" selector="#apply-single-price-input-qty" timeout="30"/> + <element name="applyUniqueQuantity" type="input" selector="//*[text()='{{option}}']/../..//input[contains(@id, 'apply-qty-input')]" parameterized="true"/> <element name="applyUniqueImagesToEachSkus" type="radio" selector=".admin__field-label[for='apply-unique-images-radio']" timeout="30"/> <element name="applyUniquePricesToEachSkus" type="radio" selector=".admin__field-label[for='apply-unique-prices-radio']" timeout="30"/> <element name="selectImagesButton" type="select" selector="#apply-images-attributes" timeout="30"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml index f6828a3b8631..338261753d2b 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml @@ -32,6 +32,7 @@ <element name="confProductPriceCell" type="input" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='price_container']//input" parameterized="true"/> <element name="confProductQuantityCell" type="input" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='quantity_container']//input" parameterized="true"/> <element name="confProductWeightCell" type="input" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='price_weight']//input" parameterized="true"/> + <element name="confProductOptionStatusCell" type="text" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='status']" parameterized="true"/> <element name="confProductSkuMessage" type="text" selector="//*[@name='configurable-matrix[{{arg}}][sku]']/following-sibling::label" parameterized="true"/> <element name="variationsSkuInputByRow" selector="[data-index='configurable-matrix'] table > tbody > tr:nth-of-type({{row}}) input[name*='sku']" type="input" parameterized="true"/> <element name="variationsSkuInputErrorByRow" selector="[data-index='configurable-matrix'] table > tbody > tr:nth-of-type({{row}}) .admin__field-error" type="text" parameterized="true"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml new file mode 100644 index 000000000000..8db63671cfe7 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml @@ -0,0 +1,200 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="StorefrontVisibilityOfDuplicateProductTest"> + <annotations> + <features value="ConfigurableProduct"/> + <title value="Visibility of duplicate product on the Storefront"/> + <description value="Check visibility of duplicate product on the Storefront"/> + <severity value="AVERAGE"/> + <testCaseId value="MAGETWO-99396"/> + <useCaseId value="MAGETWO-64923"/> + <group value="ConfigurableProduct"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <!--Create configurable product--> + <comment userInput="Create configurable product" stepKey="commentCreateConfigProduct"/> + <createData entity="SimpleSubCategory" stepKey="createCategory"/> + <createData entity="SimpleProduct" stepKey="createConfigProduct"> + <requiredEntity createDataKey="createCategory"/> + </createData> + </before> + <after> + <!--Delete created data--> + <comment userInput="Delete created data" stepKey="commentDeleteCreatedData"/> + <actionGroup ref="deleteAllDuplicateProductUsingProductGrid" stepKey="deleteDuplicatedProduct"> + <argument name="product" value="$$createConfigProduct$$"/> + </actionGroup> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetGridToDefaultKeywordSearch"/> + <!--Delete product attributes--> + <comment userInput="Delete product attributes" stepKey="deleteCommentAttributes"/> + <actionGroup ref="deleteProductAttributeByLabel" stepKey="deleteProductAttribute"> + <argument name="ProductAttribute" value="colorProductAttribute"/> + </actionGroup> + <click selector="{{AdminProductAttributeGridSection.ResetFilter}}" stepKey="resetFiltersOnGridFirst"/> + <actionGroup ref="deleteProductAttributeByLabel" stepKey="deleteProductSecondAttribute"> + <argument name="ProductAttribute" value="productAttributeColor"/> + </actionGroup> + <click selector="{{AdminProductAttributeGridSection.ResetFilter}}" stepKey="resetFiltersOnGridSecond"/> + <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!--Create attribute and options for product--> + <comment userInput="Create attribute and options for product" stepKey="commentCreateAttributesAndOptions"/> + <amOnPage url="{{AdminProductEditPage.url($$createConfigProduct.id$$)}}" stepKey="navigateToConfigProductPage"/> + <waitForPageLoad stepKey="waitForProductPageLoad"/> + <actionGroup ref="addProductImage" stepKey="addImageForProduct1"> + <argument name="image" value="MagentoLogo"/> + </actionGroup> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations"/> + <actionGroup ref="AdminCreateAttributeForConfigurableProduct" stepKey="createFirstProductAttribute"> + <argument name="attributeName" value="{{colorProductAttribute.default_label}}"/> + <argument name="attributeType" value="{{colorProductAttribute.input_type}}"/> + </actionGroup> + <waitForPageLoad stepKey="waitForFilters"/> + <actionGroup ref="createOptionsForAttribute" stepKey="createOptions"> + <argument name="attributeName" value="{{colorProductAttribute.default_label}}"/> + <argument name="firstOptionName" value="{{colorConfigurableProductAttribute1.name}}"/> + <argument name="secondOptionName" value="{{colorConfigurableProductAttribute2.name}}"/> + </actionGroup> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnFirstNextButton"/> + <waitForPageLoad stepKey="waitForBulkImagesPriceQuantityPageLoad"/> + <!--Add images to configurable product attribute options--> + <comment userInput="Add images to configurable product attribute options" stepKey="commentAddImages"/> + <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImageToConfigurableProductOptionOne"> + <argument name="image" value="ImageUpload"/> + <argument name="frontend_label" value="{{colorProductAttribute.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> + </actionGroup> + <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImageToConfigurableProductOptionTwo"> + <argument name="image" value="ImageUpload_1"/> + <argument name="frontend_label" value="{{colorProductAttribute.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> + </actionGroup> + <!--Add price to product attribute options--> + <comment userInput="Add price to product attribute options" stepKey="commentAddPrice"/> + <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceToConfigurableProductOptionFirst"> + <argument name="frontend_label" value="{{colorProductAttribute.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> + <argument name="price" value="{{virtualProductWithRequiredFields.price}}"/> + </actionGroup> + <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceToConfigurableProductOptionSecond"> + <argument name="frontend_label" value="{{colorProductAttribute.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> + <argument name="price" value="{{virtualProductWithRequiredFields.price}}"/> + </actionGroup> + <!--Add quantity to product attribute options--> + <comment userInput="Add quantity to product attribute options" stepKey="commentAddQuantity"/> + <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyForFirstOption"> + <argument name="frontend_label" value="{{colorProductAttribute.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> + <argument name="quantity" value="{{virtualProductBigQty.quantity}}"/> + </actionGroup> + <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyForSecondOption"> + <argument name="frontend_label" value="{{colorProductAttribute.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> + <argument name="quantity" value="{{virtualProductBigQty.quantity}}"/> + </actionGroup> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnSecondNextButton"/> + <waitForPageLoad stepKey="waitForSummaryPageLoad"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButtonToGenerateConfigs"/> + <waitForPageLoad stepKey="waitForConfigurableProductPageLoad"/> + <actionGroup ref="saveConfiguredProduct" stepKey="saveProductForm"/> + <!--Duplicate the product--> + <comment userInput="Duplicate the product" stepKey="commentDuplicateProduct"/> + <actionGroup ref="AdminFormSaveAndDuplicate" stepKey="saveAndDuplicateProductForm"/> + <click selector="{{AdminProductFormSection.enableProductLabel}}" stepKey="clickEnableProduct"/> + <fillField selector="{{AdminProductFormSection.productName}}" userInput="$$createConfigProduct.name$$-Updated" stepKey="fillProductName"/> + <selectOption selector="{{AdminProductFormSection.productStockStatus}}" userInput="1" stepKey="selectInStock"/> + <!--Change product image--> + <comment userInput="Change product image" stepKey="commentChangeImage"/> + <comment userInput="Change product image" stepKey="commentChangeProductImage"/> + <actionGroup ref="removeProductImage" stepKey="removeProductImage"/> + <actionGroup ref="addProductImage" stepKey="addImageForProduct"> + <argument name="image" value="TestImageAdobe"/> + </actionGroup> + <!--Disable configurations--> + <comment userInput="Disable configurations" stepKey="commentDisableConfigurations"/> + <actionGroup ref="AdminConfigurableProductDisableConfigurationsActionGroup" stepKey="disableFirstConfig"> + <argument name="productName" value="{{colorConfigurableProductAttribute1.name}}"/> + </actionGroup> + <actionGroup ref="AdminConfigurableProductDisableConfigurationsActionGroup" stepKey="disableSecondConfig"> + <argument name="productName" value="{{colorConfigurableProductAttribute2.name}}"/> + </actionGroup> + <!--Create new configurations with another attribute--> + <comment userInput="Create new configurations with another attribute" stepKey="commentCreateNewConfigurations"/> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurationsForDuplicatedProduct"/> + <actionGroup ref="AdminCreateAttributeForConfigurableProduct" stepKey="createFirstProductAttributeForDuplicatedProduct"> + <argument name="attributeName" value="{{productAttributeColor.default_label}}"/> + </actionGroup> + <waitForPageLoad stepKey="waitForFiltersForDuplicatedProduct"/> + <actionGroup ref="createOptionsForAttribute" stepKey="createOptionsForDuplicatedProduct"> + <argument name="attributeName" value="{{productAttributeColor.default_label}}"/> + <argument name="firstOptionName" value="{{colorConfigurableProductAttribute1.name}}"/> + <argument name="secondOptionName" value="{{colorConfigurableProductAttribute2.name}}"/> + </actionGroup> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnFirstNextButtonForDuplicatedProduct"/> + <waitForPageLoad stepKey="waitForBulkImagesPriceQuantityPageLoadForDuplicatedProduct"/> + <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImageToConfigurableProductOptionOneForDuplicatedProduct"> + <argument name="image" value="MagentoLogo"/> + <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> + </actionGroup> + <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImageToConfigurableProductOptionTwoForDuplicatedProduct"> + <argument name="image" value="MagentoLogo"/> + <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> + </actionGroup> + <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceToConfigurableProductOptionFirstForDuplicatedProduct"> + <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> + <argument name="price" value="{{virtualProductWithRequiredFields.price}}"/> + </actionGroup> + <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceToConfigurableProductOptionSecondForDuplicatedProduct"> + <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> + <argument name="price" value="{{virtualProductWithRequiredFields.price}}"/> + </actionGroup> + <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyForFirstOptionForDuplicatedProduct"> + <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> + <argument name="quantity" value="{{virtualProductBigQty.quantity}}"/> + </actionGroup> + <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyForSecondOptionForDuplicatedProduct"> + <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> + <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> + <argument name="quantity" value="{{virtualProductBigQty.quantity}}"/> + </actionGroup> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnSecondNextButtonForDuplicatedProduct"/> + <waitForPageLoad stepKey="waitForSummaryPageLoadForDuplicatedProduct"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButtonToGenerateConfigsForDuplicatedProduct"/> + <waitForPageLoad stepKey="waitForDuplicatedProductPageLoad"/> + <actionGroup ref="saveConfiguredProduct" stepKey="saveDuplicatedProductForm"/> + <magentoCLI command="indexer:reindex" stepKey="reindex"/> + <magentoCLI command="cache:flush" stepKey="flushCache"/> + <!--Assert configurable product in category--> + <comment userInput="Assert configurable product in category" stepKey="commentAssertProductInCategoryPage"/> + <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" stepKey="onStorefrontCategoryPage"/> + <waitForPageLoad stepKey="waitForCategoryPageLoad"/> + <seeElement selector="{{StorefrontCategoryProductSection.ProductTitleByName($$createConfigProduct.name$$-Updated)}}" stepKey="assertProductNameInCategoryPage"/> + <!--Assert product options in Storefront product page--> + <comment userInput="Assert product options in Storefront product page" stepKey="commentAssertProductOptions"/> + <amOnPage url="{{StorefrontProductPage.url($$createConfigProduct.sku$$-1)}}" stepKey="amOnSimpleProductPage"/> + <waitForPageLoad stepKey="waitForProductPageLoadOnStorefront"/> + <see selector="{{StorefrontProductInfoMainSection.productName}}" userInput="$$createConfigProduct.name$$-Updated" stepKey="seeConfigurableProductName"/> + <see userInput="{{productAttributeColor.default_label}}" selector="{{StorefrontProductInfoMainSection.productAttributeTitle1}}" stepKey="seeColorAttributeName"/> + <selectOption selector="{{StorefrontProductInfoMainSection.productAttributeOptionsSelectButton}}" userInput="{{colorConfigurableProductAttribute1.name}}" stepKey="selectFirstOption"/> + <see userInput="{{virtualProductWithRequiredFields.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" stepKey="assertFirstOptionProductPrice"/> + <seeElement selector="{{StorefrontProductMediaSection.imageFile(MagentoLogo.filename)}}" stepKey="seeFirstImage"/> + <selectOption selector="{{StorefrontProductInfoMainSection.productAttributeOptionsSelectButton}}" userInput="{{colorConfigurableProductAttribute1.name}}" stepKey="selectSecondOption"/> + <see userInput="{{virtualProductWithRequiredFields.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" stepKey="seeSecondOptionProductPrice"/> + <seeElement selector="{{StorefrontProductMediaSection.imageFile(MagentoLogo.filename)}}" stepKey="seeSecondImage"/> + </test> +</tests> From 62e053068a824ef81fa0c7c268c0b2b140976514 Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Wed, 8 May 2019 11:44:50 +0200 Subject: [PATCH 049/209] Added API-functional tests --- .../Model/Resolver/UpdateCartItems.php | 8 +- .../Quote/EditQuoteItemCustomOptionsTest.php | 275 ++++++++++++++++++ .../set_custom_options_simple_product.php | 54 ++++ .../add_simple_product_with_options.php | 51 ++++ 4 files changed, 384 insertions(+), 4 deletions(-) create mode 100644 dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php create mode 100644 dev/tests/integration/testsuite/Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php create mode 100644 dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php index ed1cb7a9dab5..ddd713f8008f 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php +++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php @@ -116,17 +116,17 @@ private function processCartItems(Quote $cart, array $items): void if (!isset($item['quantity'])) { throw new GraphQlInputException(__('Required parameter "quantity" for "cart_items" is missing.')); } - $qty = (float)$item['quantity']; + $quantity = (float)$item['quantity']; - if ($qty <= 0.0) { + if ($quantity <= 0.0) { $this->cartItemRepository->deleteById((int)$cart->getId(), $itemId); } else { $customizableOptions = $item['customizable_options'] ?? null; if ($customizableOptions === null) { // Update only item's qty - $this->updateItemQty($itemId, $cart, $qty); + $this->updateItemQty($itemId, $cart, $quantity); } else { // Update customizable options (and QTY if changed) - $this->updateCartItem->execute($cart, $itemId, $qty, $customizableOptions); + $this->updateCartItem->execute($cart, $itemId, $quantity, $customizableOptions); $this->quoteRepository->save($cart); } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php new file mode 100644 index 000000000000..09495f92648b --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php @@ -0,0 +1,275 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\GraphQl\Quote; + +use Magento\Catalog\Api\ProductCustomOptionRepositoryInterface; +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Framework\Exception\NoSuchEntityException as NoSuchEntityException; +use Magento\Quote\Model\Quote\Item; +use Magento\Quote\Model\QuoteFactory; +use Magento\Quote\Model\ResourceModel\Quote as QuoteResource; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\TestCase\GraphQlAbstract; + +/** + * Edit cart customizable options test + */ +class EditQuoteItemCustomOptionsTest extends GraphQlAbstract +{ + /** + * @var ProductRepositoryInterface + */ + private $productRepository; + + /** + * @var GetMaskedQuoteIdByReservedOrderId + */ + private $getMaskedQuoteIdByReservedOrderId; + + /** + * @var ProductCustomOptionRepositoryInterface + */ + private $productCustomOptionsRepository; + + /** + * @var QuoteFactory + */ + private $quoteFactory; + + /** + * @var QuoteResource + */ + private $quoteResource; + + /** + * @inheritdoc + */ + protected function setUp() + { + $objectManager = Bootstrap::getObjectManager(); + $this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class); + $this->productCustomOptionsRepository = $objectManager->get(ProductCustomOptionRepositoryInterface::class); + $this->quoteFactory = $objectManager->get(QuoteFactory::class); + $this->quoteResource = $objectManager->get(QuoteResource::class); + $this->productRepository = $objectManager->get(ProductRepositoryInterface::class); + } + + /** + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product_with_options.php + */ + public function testChangeQuoteItemCustomOptions() + { + $sku = 'simple_product'; + $quoteItemId = $this->getQuoteItemIdBySku($sku); + $customOptionsValues = $this->getCustomOptionsValuesForQuery($sku); + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + $customizableOptionsQuery = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', json_encode($customOptionsValues)); + + $query = $this->getQuery($maskedQuoteId, $quoteItemId, $customizableOptionsQuery); + $response = $this->graphQlMutation($query); + $itemOptionsResponse = $response['updateCartItems']['cart']['items'][0]['customizable_options']; + self::assertCount(2, $itemOptionsResponse); + self::assertEquals('test', $itemOptionsResponse[0]['values'][0]['value']); + self::assertEquals('test', $itemOptionsResponse[1]['values'][0]['value']); + } + + /** + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product_with_options.php + */ + public function testOptionsSetPersistsOnQtyChange() + { + $sku = 'simple_product'; + $newQuantity = 2; + $quoteItemId = $this->getQuoteItemIdBySku($sku); + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + + $query = <<<QUERY +mutation { + updateCartItems(input: { + cart_id:"$maskedQuoteId" + cart_items: [ + { + cart_item_id: $quoteItemId + quantity: $newQuantity + } + ] + }) { + cart { + items { + quantity + ... on SimpleCartItem { + customizable_options { + label + values { + value + } + } + } + } + } + } +} +QUERY; + $response = $this->graphQlMutation($query); + $cartItemResponse = $response['updateCartItems']['cart']['items'][0]; + + self::assertEquals($newQuantity, $cartItemResponse['quantity']); + self::assertCount(2, $cartItemResponse['customizable_options']); + self::assertEquals('initial value', $cartItemResponse['customizable_options'][0]['values'][0]['value']); + self::assertEquals('initial value', $cartItemResponse['customizable_options'][1]['values'][0]['value']); + } + + /** + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product_with_options.php + */ + public function testOptionsSetChangedOnChangeOneOption() + { + $sku = 'simple_product'; + $quoteItemId = $this->getQuoteItemIdBySku($sku); + + /* Get only the first option */ + $customOptionsValues = array_slice($this->getCustomOptionsValuesForQuery($sku), 0, 1); + + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + $customizableOptionsQuery = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', json_encode($customOptionsValues)); + $query = $this->getQuery($maskedQuoteId, $quoteItemId, $customizableOptionsQuery); + + $response = $this->graphQlMutation($query); + $itemOptionsResponse = $response['updateCartItems']['cart']['items'][0]['customizable_options']; + self::assertCount(1, $itemOptionsResponse); + self::assertEquals('test', $itemOptionsResponse[0]['values'][0]['value']); + } + + /** + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php + * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product_with_options.php + * @group recent + */ + public function testOptionSetPersistsOnExtraOptionWithIncorrectId() + { + $sku = 'simple_product'; + $quoteItemId = $this->getQuoteItemIdBySku($sku); + $customOptionsValues = $this->getCustomOptionsValuesForQuery($sku); + + /* Add nonexistent option to the query */ + $customOptionsValues[] = ['id' => -10, 'value' => 'value']; + + $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); + $customizableOptionsQuery = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', json_encode($customOptionsValues)); + $query = $this->getQuery($maskedQuoteId, $quoteItemId, $customizableOptionsQuery); + + $response = $this->graphQlMutation($query); + $itemOptionsResponse = $response['updateCartItems']['cart']['items'][0]['customizable_options']; + self::assertCount(2, $itemOptionsResponse); + } + + /** + * Returns GraphQl query for updating items in shopping cart + * + * @param string $maskedQuoteId + * @param int $quoteItemId + * @param $customizableOptionsQuery + * @return string + */ + private function getQuery(string $maskedQuoteId, int $quoteItemId, $customizableOptionsQuery): string + { + return <<<QUERY +mutation { + updateCartItems(input: { + cart_id:"$maskedQuoteId" + cart_items: [ + { + cart_item_id: $quoteItemId + quantity: 1 + customizable_options: $customizableOptionsQuery + } + ] + }) { + cart { + items { + quantity + product { + name + } + ... on SimpleCartItem { + customizable_options { + label + values { + label + value + } + } + } + } + } + } +} +QUERY; + } + + /** + * Returns quote item id by product's SKU + * + * @param string $sku + * @return int + * @throws NoSuchEntityException + */ + private function getQuoteItemIdBySku(string $sku): int + { + $quote = $this->quoteFactory->create(); + $product = $this->productRepository->get($sku); + $this->quoteResource->load($quote, 'test_quote', 'reserved_order_id'); + /** @var Item $quoteItem */ + $quoteItem = $quote->getItemByProduct($product); + + return (int)$quoteItem->getId(); + } + + + /** + * Generate an array with test values for customizable options + * based on the option type + * + * @param string $sku + * @return array + */ + private function getCustomOptionsValuesForQuery(string $sku): array + { + $customOptions = $this->productCustomOptionsRepository->getList($sku); + $customOptionsValues = []; + + foreach ($customOptions as $customOption) { + $optionType = $customOption->getType(); + if ($optionType == 'field' || $optionType == 'area') { + $customOptionsValues[] = [ + 'id' => (int) $customOption->getOptionId(), + 'value' => 'test' + ]; + } elseif ($optionType == 'drop_down') { + $optionSelectValues = $customOption->getValues(); + $customOptionsValues[] = [ + 'id' => (int) $customOption->getOptionId(), + 'value' => reset($optionSelectValues)->getOptionTypeId() + ]; + } + } + + return $customOptionsValues; + } +} diff --git a/dev/tests/integration/testsuite/Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php b/dev/tests/integration/testsuite/Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php new file mode 100644 index 000000000000..618ed0e25602 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php @@ -0,0 +1,54 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +use Magento\Catalog\Api\Data\ProductCustomOptionInterface; +use Magento\Catalog\Api\Data\ProductCustomOptionInterfaceFactory; +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\TestFramework\Helper\Bootstrap; + +$objectManager = Bootstrap::getObjectManager(); + +$productCustomOptions = []; +$optionsSet = [ + [ + 'title' => 'test_option_code_1', + 'type' => 'field', + 'is_require' => false, + 'sort_order' => 1, + 'price' => -10.0, + 'price_type' => 'fixed', + 'sku' => 'sku1', + 'max_characters' => 100, + ], + [ + 'title' => 'area option', + 'type' => 'area', + 'is_require' => false, + 'sort_order' => 2, + 'price' => 20.0, + 'price_type' => 'percent', + 'sku' => 'sku2', + 'max_characters' => 100 + ] +]; + +/** @var ProductRepositoryInterface $productRepository */ +$productRepository = $objectManager->get(ProductRepositoryInterface::class); +$product = $productRepository->get('simple_product'); +/** @var ProductCustomOptionInterfaceFactory $customOptionFactory */ +$customOptionFactory = $objectManager->get(ProductCustomOptionInterfaceFactory::class); + +foreach ($optionsSet as $option) { + /** @var ProductCustomOptionInterface $customOption */ + $customOption = $customOptionFactory->create(['data' => $option]); + $customOption->setProductSku($product->getSku()); + + $productCustomOptions[] = $customOption; +} + +$product->setOptions($productCustomOptions); +$productRepository->save($product); diff --git a/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php b/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php new file mode 100644 index 000000000000..68e2261ab02b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php @@ -0,0 +1,51 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\Product\Option as ProductOption; +use Magento\Catalog\Model\Product\OptionFactory; +use Magento\Framework\DataObjectFactory; +use Magento\Quote\Api\CartRepositoryInterface; +use Magento\Quote\Model\QuoteFactory; +use Magento\Quote\Model\ResourceModel\Quote as QuoteResource; +use Magento\TestFramework\Helper\Bootstrap; + +/** @var ProductRepositoryInterface $productRepository */ +$productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); +/** @var QuoteFactory $quoteFactory */ +$quoteFactory = Bootstrap::getObjectManager()->get(QuoteFactory::class); +/** @var QuoteResource $quoteResource */ +$quoteResource = Bootstrap::getObjectManager()->get(QuoteResource::class); +/** @var CartRepositoryInterface $cartRepository */ +$cartRepository = Bootstrap::getObjectManager()->get(CartRepositoryInterface::class); +/** @var OptionFactory $productOptionFactory */ +$productOptionFactory = Bootstrap::getObjectManager()->get(OptionFactory::class); +/** @var DataObjectFactory $dataObjectFactory */ +$dataObjectFactory = Bootstrap::getObjectManager()->get(DataObjectFactory::class); + +/** @var ProductOption $productOption */ +$productOption = $productOptionFactory->create(); +$product = $productRepository->get('simple_product'); +$productOptions = $productOption->getProductOptionCollection($product); +$cartItemCustomOptions = []; + +/** @var ProductOption $productOption */ +foreach ($productOptions as $productOption) { + $cartItemCustomOptions[$productOption->getId()] = 'initial value'; +} + +$request = $dataObjectFactory->create([ + 'data' => [ + 'qty' => 1.0, + 'options' => $cartItemCustomOptions, + ], +]); + +$quote = $quoteFactory->create(); +$quoteResource->load($quote, 'test_quote', 'reserved_order_id'); +$quote->addProduct($product, $request); +$cartRepository->save($quote); From 7d9a1330a5bd3e351efc5ff33107f7e0466c580a Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Wed, 8 May 2019 12:23:22 +0200 Subject: [PATCH 050/209] Adjusted option values according to the latest changes --- app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php | 2 +- .../GraphQl/Quote/EditQuoteItemCustomOptionsTest.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php index bc98eb93b55c..ac9b464eb01b 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -47,7 +47,7 @@ public function execute(Quote $cart, int $cartItemId, float $qty, array $customi { $customizableOptions = []; foreach ($customizableOptionsData as $customizableOption) { - $customizableOptions[$customizableOption['id']] = $customizableOption['value']; + $customizableOptions[$customizableOption['id']] = $customizableOption['value_string']; } try { diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php index 09495f92648b..d3bd10d8ae00 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php @@ -168,7 +168,7 @@ public function testOptionSetPersistsOnExtraOptionWithIncorrectId() $customOptionsValues = $this->getCustomOptionsValuesForQuery($sku); /* Add nonexistent option to the query */ - $customOptionsValues[] = ['id' => -10, 'value' => 'value']; + $customOptionsValues[] = ['id' => -10, 'value_string' => 'value']; $maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote'); $customizableOptionsQuery = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', json_encode($customOptionsValues)); @@ -259,13 +259,13 @@ private function getCustomOptionsValuesForQuery(string $sku): array if ($optionType == 'field' || $optionType == 'area') { $customOptionsValues[] = [ 'id' => (int) $customOption->getOptionId(), - 'value' => 'test' + 'value_string' => 'test' ]; } elseif ($optionType == 'drop_down') { $optionSelectValues = $customOption->getValues(); $customOptionsValues[] = [ 'id' => (int) $customOption->getOptionId(), - 'value' => reset($optionSelectValues)->getOptionTypeId() + 'value_string' => reset($optionSelectValues)->getOptionTypeId() ]; } } From c0c04ffa3e34973df811bfbc2c9c7e480d666cd6 Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Wed, 8 May 2019 12:28:44 +0200 Subject: [PATCH 051/209] Return cart item error message as a string --- app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php index ac9b464eb01b..81ed4f23c441 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -74,7 +74,7 @@ public function execute(Quote $cart, int $cartItemId, float $qty, array $customi if ($result->getHasError()) { throw new GraphQlInputException(__( 'Could not update cart item: %message', - ['message' => $result->getMessage()] + ['message' => $result->getMessage(true)] )); } } From 4eab52881a5fd646a4283dbe5e0df2c147b25564 Mon Sep 17 00:00:00 2001 From: sanjay <sanjay.chouhan180@webkul.com> Date: Thu, 9 May 2019 09:59:19 +0530 Subject: [PATCH 052/209] fixed issue #22638 - Asterisk(*) sign position does not consistent in admin --- .../backend/web/css/source/forms/_extends.less | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_extends.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_extends.less index 63f78940d404..9ba5458fd368 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_extends.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_extends.less @@ -49,20 +49,6 @@ display: none; } } - - &.required, - &._required { - > .admin__field-label { - span { - padding-left: 1.5rem; - - &:after { - left: 0; - margin-left: @temp_gutter; // @todo ui: update after finalizing Form Grid mixing css/source/forms/_temp.less:10 - } - } - } - } } } From b676132f2a1c230fcb80ae7af5f52ef842b0959c Mon Sep 17 00:00:00 2001 From: Ievgenii Gryshkun <i.gryshkun@gmail.com> Date: Fri, 10 May 2019 09:00:17 +0300 Subject: [PATCH 053/209] GraphQl-463: Query category for disabled catalog with products returns the product count --- .../Model/Resolver/Products/DataProvider/CategoryTree.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php index c930f5a0b3b1..2fd48938af3c 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php @@ -85,7 +85,7 @@ public function __construct( public function getTree(ResolveInfo $resolveInfo, int $rootCategoryId): \Iterator { $categoryQuery = $resolveInfo->fieldNodes[0]; - if ($this->isCategoryActive($rootCategoryId) == false) { + if ($this->isCategoryActive($rootCategoryId) === false) { throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); } @@ -155,7 +155,7 @@ private function joinAttributesRecursively(Collection $collection, FieldNode $fi * * @param int $rootCategoryId * @return bool - * @throws \Exception + * @throws \Magento\Framework\Exception\LocalizedException */ private function isCategoryActive(int $rootCategoryId) : bool { From f3faa897440f5693d0cd28b9cd844ca004218de5 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Sat, 11 May 2019 17:11:29 +0300 Subject: [PATCH 054/209] MAGETWO-64923: Duplicate products not showing on the frontend --- .../Test/Mftf/Section/AdminProductFormConfigurationsSection.xml | 2 +- .../Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml index 338261753d2b..c1707f6f1f0a 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminProductFormConfigurationsSection.xml @@ -32,7 +32,7 @@ <element name="confProductPriceCell" type="input" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='price_container']//input" parameterized="true"/> <element name="confProductQuantityCell" type="input" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='quantity_container']//input" parameterized="true"/> <element name="confProductWeightCell" type="input" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='price_weight']//input" parameterized="true"/> - <element name="confProductOptionStatusCell" type="text" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{var}}')]/ancestor::tr/td[@data-index='status']" parameterized="true"/> + <element name="confProductOptionStatusCell" type="text" selector="//*[.='Attributes']/ancestor::tr//span[contains(text(), '{{productName}}')]/ancestor::tr/td[@data-index='status']" parameterized="true"/> <element name="confProductSkuMessage" type="text" selector="//*[@name='configurable-matrix[{{arg}}][sku]']/following-sibling::label" parameterized="true"/> <element name="variationsSkuInputByRow" selector="[data-index='configurable-matrix'] table > tbody > tr:nth-of-type({{row}}) input[name*='sku']" type="input" parameterized="true"/> <element name="variationsSkuInputErrorByRow" selector="[data-index='configurable-matrix'] table > tbody > tr:nth-of-type({{row}}) .admin__field-error" type="text" parameterized="true"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml index 8db63671cfe7..f06f8d140bec 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml @@ -114,7 +114,6 @@ <fillField selector="{{AdminProductFormSection.productName}}" userInput="$$createConfigProduct.name$$-Updated" stepKey="fillProductName"/> <selectOption selector="{{AdminProductFormSection.productStockStatus}}" userInput="1" stepKey="selectInStock"/> <!--Change product image--> - <comment userInput="Change product image" stepKey="commentChangeImage"/> <comment userInput="Change product image" stepKey="commentChangeProductImage"/> <actionGroup ref="removeProductImage" stepKey="removeProductImage"/> <actionGroup ref="addProductImage" stepKey="addImageForProduct"> From 91251eacad024163a73632c5ffeb55a9c850aba4 Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Sat, 11 May 2019 12:45:27 -0700 Subject: [PATCH 055/209] Fixed tests, decoupled logic for updating items --- .../Model/Cart/UpdateCartItem.php | 83 ++++++++++++++++++- .../Model/Resolver/UpdateCartItems.php | 45 +--------- .../Quote/Customer/UpdateCartItemsTest.php | 2 +- .../Quote/EditQuoteItemCustomOptionsTest.php | 1 - .../Quote/Guest/UpdateCartItemsTest.php | 2 +- 5 files changed, 87 insertions(+), 46 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php index 81ed4f23c441..5178f26e1dc9 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -10,8 +10,13 @@ use Magento\Framework\DataObject; use Magento\Framework\DataObjectFactory; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Exception\GraphQlInputException; +use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; +use Magento\Quote\Api\CartItemRepositoryInterface; +use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Model\Quote; +use Magento\Quote\Model\Quote\Item; /** * Update cart item @@ -19,6 +24,16 @@ */ class UpdateCartItem { + /** + * @var CartRepositoryInterface + */ + private $quoteRepository; + + /** + * @var CartItemRepositoryInterface + */ + private $cartItemRepository; + /** * @var DataObjectFactory */ @@ -26,11 +41,17 @@ class UpdateCartItem /** * @param DataObjectFactory $dataObjectFactory + * @param CartItemRepositoryInterface $cartItemRepository + * @param CartRepositoryInterface $quoteRepository */ public function __construct( - DataObjectFactory $dataObjectFactory + DataObjectFactory $dataObjectFactory, + CartItemRepositoryInterface $cartItemRepository, + CartRepositoryInterface $quoteRepository ) { $this->dataObjectFactory = $dataObjectFactory; + $this->cartItemRepository = $cartItemRepository; + $this->quoteRepository = $quoteRepository; } /** @@ -39,12 +60,20 @@ public function __construct( * @param Quote $cart * @param int $cartItemId * @param float $qty - * @param null $customizableOptionsData + * @param array $customizableOptionsData * @return void * @throws GraphQlInputException + * @throws GraphQlNoSuchEntityException + * @throws NoSuchEntityException */ public function execute(Quote $cart, int $cartItemId, float $qty, array $customizableOptionsData): void { + if (count($customizableOptionsData) === 0) { // Update only item's qty + $this->updateItemQty($cartItemId, $cart, $qty); + + return; + } + $customizableOptions = []; foreach ($customizableOptionsData as $customizableOption) { $customizableOptions[$customizableOption['id']] = $customizableOption['value_string']; @@ -77,6 +106,56 @@ public function execute(Quote $cart, int $cartItemId, float $qty, array $customi ['message' => $result->getMessage(true)] )); } + + $this->quoteRepository->save($cart); + } + + /** + * Updates item qty for the specified cart + * + * @param int $itemId + * @param Quote $cart + * @param float $qty + * @throws GraphQlNoSuchEntityException + * @throws NoSuchEntityException + * @throws GraphQlNoSuchEntityException + */ + private function updateItemQty(int $itemId, Quote $cart, float $qty) + { + $cartItem = $cart->getItemById($itemId); + if ($cartItem === false) { + throw new GraphQlNoSuchEntityException( + __('Could not find cart item with id: %1.', $itemId) + ); + } + $cartItem->setQty($qty); + $this->validateCartItem($cartItem); + $this->cartItemRepository->save($cartItem); + } + + /** + * Validate cart item + * + * @param Item $cartItem + * @return void + * @throws GraphQlInputException + */ + private function validateCartItem(Item $cartItem): void + { + if ($cartItem->getHasError()) { + $errors = []; + foreach ($cartItem->getMessage(false) as $message) { + $errors[] = $message; + } + if (!empty($errors)) { + throw new GraphQlInputException( + __( + 'Could not update the product with SKU %sku: %message', + ['sku' => $cartItem->getSku(), 'message' => __(implode("\n", $errors))] + ) + ); + } + } } /** diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php index ddd713f8008f..79738a40a7fb 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php +++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php @@ -15,7 +15,6 @@ use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\Quote\Api\CartItemRepositoryInterface; -use Magento\Quote\Api\CartRepositoryInterface; use Magento\Quote\Model\Quote; use Magento\QuoteGraphQl\Model\Cart\GetCartForUser; use Magento\QuoteGraphQl\Model\Cart\UpdateCartItem; @@ -25,11 +24,6 @@ */ class UpdateCartItems implements ResolverInterface { - /** - * @var CartRepositoryInterface - */ - private $quoteRepository; - /** * @var UpdateCartItem */ @@ -49,18 +43,15 @@ class UpdateCartItems implements ResolverInterface * @param GetCartForUser $getCartForUser * @param CartItemRepositoryInterface $cartItemRepository * @param UpdateCartItem $updateCartItem - * @param CartRepositoryInterface $quoteRepository */ public function __construct( GetCartForUser $getCartForUser, CartItemRepositoryInterface $cartItemRepository, - UpdateCartItem $updateCartItem, - CartRepositoryInterface $quoteRepository + UpdateCartItem $updateCartItem ) { $this->getCartForUser = $getCartForUser; $this->cartItemRepository = $cartItemRepository; $this->updateCartItem = $updateCartItem; - $this->quoteRepository = $quoteRepository; } /** @@ -112,8 +103,9 @@ private function processCartItems(Quote $cart, array $items): void throw new GraphQlInputException(__('Required parameter "cart_item_id" for "cart_items" is missing.')); } $itemId = (int)$item['cart_item_id']; + $customizableOptions = $item['customizable_options'] ?? []; - if (!isset($item['quantity'])) { + if (count($customizableOptions) === 0 && !isset($item['quantity'])) { throw new GraphQlInputException(__('Required parameter "quantity" for "cart_items" is missing.')); } $quantity = (float)$item['quantity']; @@ -121,37 +113,8 @@ private function processCartItems(Quote $cart, array $items): void if ($quantity <= 0.0) { $this->cartItemRepository->deleteById((int)$cart->getId(), $itemId); } else { - $customizableOptions = $item['customizable_options'] ?? null; - - if ($customizableOptions === null) { // Update only item's qty - $this->updateItemQty($itemId, $cart, $quantity); - } else { // Update customizable options (and QTY if changed) - $this->updateCartItem->execute($cart, $itemId, $quantity, $customizableOptions); - $this->quoteRepository->save($cart); - } + $this->updateCartItem->execute($cart, $itemId, $quantity, $customizableOptions); } } } - - /** - * Updates item qty for the specified cart - * - * @param int $itemId - * @param Quote $cart - * @param float $qty - * @throws GraphQlNoSuchEntityException - * @throws NoSuchEntityException - * @throws GraphQlNoSuchEntityException - */ - private function updateItemQty(int $itemId, Quote $cart, float $qty) - { - $cartItem = $cart->getItemById($itemId); - if ($cartItem === false) { - throw new GraphQlNoSuchEntityException( - __('Could not find cart item with id: %1.', $itemId) - ); - } - $cartItem->setQty($qty); - $this->cartItemRepository->save($cartItem); - } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php index bc88bd1ddb43..48ea4ab7a15e 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php @@ -285,7 +285,7 @@ public function dataProviderUpdateWithMissedRequiredParameters(): array ], 'missed_cart_item_qty' => [ 'cart_items: [{ cart_item_id: 1 }]', - 'Field CartItemUpdateInput.quantity of required type Float! was not provided.' + 'Required parameter "quantity" for "cart_items" is missing.' ], ]; } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php index d3bd10d8ae00..1aaa23860f5f 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php @@ -159,7 +159,6 @@ public function testOptionsSetChangedOnChangeOneOption() * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/set_custom_options_simple_product.php * @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php * @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product_with_options.php - * @group recent */ public function testOptionSetPersistsOnExtraOptionWithIncorrectId() { diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php index 1e1fb0a17699..988ead7d86df 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php @@ -236,7 +236,7 @@ public function dataProviderUpdateWithMissedRequiredParameters(): array ], 'missed_cart_item_qty' => [ 'cart_items: [{ cart_item_id: 1 }]', - 'Field CartItemUpdateInput.quantity of required type Float! was not provided.' + 'Required parameter "quantity" for "cart_items" is missing.' ], ]; } From 0e70751841cc4cdb1141f548053654405e3f3fcf Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Tue, 14 May 2019 11:54:35 +0300 Subject: [PATCH 056/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../js/variations/steps/attributes_values.js | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index 7331601c538f..0287d10b247e 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -185,35 +185,31 @@ define([ */ saveOptions: function () { var newOptions = [], - errorsInAttributes = [], - allOptions = []; + allOptions = [], + attributesWithDuplicateOptions = []; this.attributes.each(function (attribute) { + allOptions[attribute.id] = []; attribute.options.each(function (element) { var option = attribute.options.findWhere({ id: element.id }); - if (option.is_new === true) { + if (option['is_new'] === true) { newOptions.push(option); } - if (typeof allOptions[option.attribute_id] === 'undefined') { - allOptions[option.attribute_id] = []; + if (typeof allOptions[attribute.id][option.label] !== 'undefined') { + attributesWithDuplicateOptions.push(attribute); } - if (typeof allOptions[option.attribute_id][option.label] !== 'undefined') { - errorsInAttributes.push(attribute); - } - - allOptions[option.attribute_id][option.label] = option.label; + allOptions[attribute.id][option.label] = option.label; }); }); - if (errorsInAttributes.length) { - var errorMessage = $.mage.__('Attributes must have unique option values'); - throw new Error(errorMessage); + if (attributesWithDuplicateOptions.length) { + throw new Error($.mage.__('Attributes must have unique option values')); } if (!newOptions.length) { @@ -231,6 +227,7 @@ define([ if (savedOptions.error) { this.notificationMessage.error = savedOptions.error; this.notificationMessage.text = savedOptions.message; + return; } From 48e16778fe34aabdd282e7042f89ccaaf323e775 Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Wed, 15 May 2019 13:32:03 +0300 Subject: [PATCH 057/209] MAGETWO-88905: Import Customer ("gender" field) issue - Fixed static test --- .../Model/Import/Customer.php | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php index 83c68062bcbc..01b790191610 100644 --- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php +++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php @@ -288,9 +288,12 @@ private function getCustomerEntityFieldsToUpdate(array $entitiesToUpdate): array { $firstCustomer = reset($entitiesToUpdate); $columnsToUpdate = array_keys($firstCustomer); - $customerFieldsToUpdate = array_filter($this->customerFields, function ($field) use ($columnsToUpdate) { - return in_array($field, $columnsToUpdate); - }); + $customerFieldsToUpdate = array_filter( + $this->customerFields, + function ($field) use ($columnsToUpdate) { + return in_array($field, $columnsToUpdate); + } + ); return $customerFieldsToUpdate; } @@ -523,9 +526,9 @@ protected function _importData() $attributesToSave[$tableName] = []; } $attributesToSave[$tableName] = array_diff_key( - $attributesToSave[$tableName], - $customerAttributes - ) + $customerAttributes; + $attributesToSave[$tableName], + $customerAttributes + ) + $customerAttributes; } } } @@ -582,12 +585,12 @@ protected function _validateRowForUpdate(array $rowData, $rowNumber) } // check password if (isset( - $rowData['password'] - ) && strlen( - $rowData['password'] - ) && $this->string->strlen( - $rowData['password'] - ) < self::MIN_PASSWORD_LENGTH + $rowData['password'] + ) && strlen( + $rowData['password'] + ) && $this->string->strlen( + $rowData['password'] + ) < self::MIN_PASSWORD_LENGTH ) { $this->addRowError(self::ERROR_PASSWORD_LENGTH, $rowNumber); } From 94103b345d0787add6510e16f1beecdebbe3cda2 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Thu, 16 May 2019 16:28:02 +0400 Subject: [PATCH 058/209] MAGETWO-64923: Duplicate products not showing on the frontend - Update automated test script --- .../AdminProductAttributeActionGroup.xml | 7 ++++++ .../AdminProductFormAttributeSection.xml | 1 + .../AdminConfigurableProductActionGroup.xml | 14 +++++------ ...efrontVisibilityOfDuplicateProductTest.xml | 23 ++++++++++++------- 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml index 86158aba68f8..096f830301aa 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml @@ -43,6 +43,13 @@ <selectOption selector="{{AdminProductFormNewAttributeSection.attributeType}}" userInput="{{attributeType}}" stepKey="selectAttributeType"/> <click selector="{{AdminProductFormNewAttributeSection.saveAttribute}}" stepKey="saveAttribute"/> </actionGroup> + <actionGroup name="AdminCreateAttributeFromProductPageWithSpecifiedVisibilityScope" extends="AdminCreateAttributeFromProductPage" insertAfter="selectAttributeType"> + <arguments> + <argument name="scope" type="string" defaultValue="Store View"/> + </arguments> + <conditionalClick selector="{{AdminProductFormNewAttributeAdvancedSection.sectionHeader}}" dependentSelector="{{AdminProductFormNewAttributeAdvancedSection.scope}}" visible="false" stepKey="openAttributeAdvancedSection"/> + <selectOption selector="{{AdminProductFormNewAttributeAdvancedSection.scope}}" userInput="{{scope}}" stepKey="selectScope"/> + </actionGroup> <actionGroup name="AdminCreateAttributeWithValueWithTwoStoreViesFromProductPage" extends="AdminCreateAttributeFromProductPage"> <remove keyForRemoval="saveAttribute"/> diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormAttributeSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormAttributeSection.xml index a2a349ed6761..b0aee1795dc3 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormAttributeSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormAttributeSection.xml @@ -25,6 +25,7 @@ <section name="AdminProductFormNewAttributeAdvancedSection"> <element name="sectionHeader" type="button" selector="div[data-index='advanced_fieldset']"/> <element name="defaultValue" type="textarea" selector="input[name='default_value_text']"/> + <element name="scope" type="select" selector="//div[@data-index='advanced_fieldset']//select[@name='is_global']"/> </section> <section name="AdminProductFormNewAttributeStorefrontSection"> <element name="sectionHeader" type="button" selector="div[data-index='front_fieldset']"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml index 284fb454cfd8..33095ff21677 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml @@ -136,9 +136,9 @@ </actionGroup> <actionGroup name="createOptionsForAttribute"> <arguments> - <argument name="attributeName" type="string"/> - <argument name="firstOptionName" type="string"/> - <argument name="secondOptionName" type="string"/> + <argument name="attributeName" type="string" defaultValue="{{productAttributeColor.default_label}}"/> + <argument name="firstOptionName" type="string" defaultValue="option1"/> + <argument name="secondOptionName" type="string" defaultValue="option2"/> </arguments> <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" stepKey="clickOnFilters"/> <fillField userInput="{{attributeName}}" selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" stepKey="fillFilterAttributeCodeField"/> @@ -299,9 +299,9 @@ </actionGroup> <actionGroup name="addUniqueQuantityToConfigurableProductOption"> <arguments> - <argument name="frontend_label" type="string"/> - <argument name="label" type="string"/> - <argument name="quantity" type="string"/> + <argument name="frontend_label" type="string" defaultValue="{{productAttributeColor.default_label}}"/> + <argument name="label" type="string" defaultValue="option1"/> + <argument name="quantity" type="string" defaultValue="10"/> </arguments> <click selector="{{AdminCreateProductConfigurationsPanel.applyUniqueQuantityToEachSkus}}" dependentSelector="{{AdminCreateProductConfigurationsPanel.selectQuantity}}" visible="false" stepKey="clickOnApplyUniqueQuantitiesToEachSku"/> <selectOption selector="{{AdminCreateProductConfigurationsPanel.selectQuantity}}" userInput="{{frontend_label}}" stepKey="selectOption"/> @@ -345,7 +345,7 @@ </actionGroup> <actionGroup name="AdminConfigurableProductDisableConfigurationsActionGroup"> <arguments> - <argument name="productName" type="string"/> + <argument name="productName" type="string" defaultValue="{{SimpleProduct.name}}"/> </arguments> <click selector="{{AdminProductFormConfigurationsSection.actionsBtnByProductName(productName)}}" stepKey="clickToExpandActionsSelect"/> <click selector="{{AdminProductFormConfigurationsSection.disableProductBtn}}" stepKey="clickDisableChildProduct"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml index 8db63671cfe7..2dec47673d87 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml @@ -53,11 +53,15 @@ <actionGroup ref="addProductImage" stepKey="addImageForProduct1"> <argument name="image" value="MagentoLogo"/> </actionGroup> - <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations"/> - <actionGroup ref="AdminCreateAttributeForConfigurableProduct" stepKey="createFirstProductAttribute"> + <actionGroup ref="saveProductForm" stepKey="saveProductForm"/> + <actionGroup ref="AdminCreateAttributeFromProductPageWithSpecifiedVisibilityScope" stepKey="createAttributeForProduct"> <argument name="attributeName" value="{{colorProductAttribute.default_label}}"/> <argument name="attributeType" value="{{colorProductAttribute.input_type}}"/> + <argument name="scope" value="Global"/> </actionGroup> + <reloadPage stepKey="reloadPage"/> + <waitForPageLoad stepKey="waitForProductPageReload"/> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations"/> <waitForPageLoad stepKey="waitForFilters"/> <actionGroup ref="createOptionsForAttribute" stepKey="createOptions"> <argument name="attributeName" value="{{colorProductAttribute.default_label}}"/> @@ -106,7 +110,7 @@ <waitForPageLoad stepKey="waitForSummaryPageLoad"/> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButtonToGenerateConfigs"/> <waitForPageLoad stepKey="waitForConfigurableProductPageLoad"/> - <actionGroup ref="saveConfiguredProduct" stepKey="saveProductForm"/> + <actionGroup ref="saveProductForm" stepKey="saveProduct"/> <!--Duplicate the product--> <comment userInput="Duplicate the product" stepKey="commentDuplicateProduct"/> <actionGroup ref="AdminFormSaveAndDuplicate" stepKey="saveAndDuplicateProductForm"/> @@ -114,7 +118,6 @@ <fillField selector="{{AdminProductFormSection.productName}}" userInput="$$createConfigProduct.name$$-Updated" stepKey="fillProductName"/> <selectOption selector="{{AdminProductFormSection.productStockStatus}}" userInput="1" stepKey="selectInStock"/> <!--Change product image--> - <comment userInput="Change product image" stepKey="commentChangeImage"/> <comment userInput="Change product image" stepKey="commentChangeProductImage"/> <actionGroup ref="removeProductImage" stepKey="removeProductImage"/> <actionGroup ref="addProductImage" stepKey="addImageForProduct"> @@ -128,13 +131,17 @@ <actionGroup ref="AdminConfigurableProductDisableConfigurationsActionGroup" stepKey="disableSecondConfig"> <argument name="productName" value="{{colorConfigurableProductAttribute2.name}}"/> </actionGroup> + <actionGroup ref="saveProductForm" stepKey="saveDuplicatedProductForm"/> <!--Create new configurations with another attribute--> <comment userInput="Create new configurations with another attribute" stepKey="commentCreateNewConfigurations"/> - <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurationsForDuplicatedProduct"/> - <actionGroup ref="AdminCreateAttributeForConfigurableProduct" stepKey="createFirstProductAttributeForDuplicatedProduct"> + <actionGroup ref="AdminCreateAttributeFromProductPageWithSpecifiedVisibilityScope" stepKey="createAttributeForDuplicatedProduct"> <argument name="attributeName" value="{{productAttributeColor.default_label}}"/> + <argument name="attributeType" value="{{productAttributeColor.input_type}}"/> + <argument name="scope" value="Global"/> </actionGroup> - <waitForPageLoad stepKey="waitForFiltersForDuplicatedProduct"/> + <reloadPage stepKey="reloadDuplicatedProductPage"/> + <waitForPageLoad stepKey="waitForDuplicatedProductReload"/> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurationsForDuplicatedProduct"/> <actionGroup ref="createOptionsForAttribute" stepKey="createOptionsForDuplicatedProduct"> <argument name="attributeName" value="{{productAttributeColor.default_label}}"/> <argument name="firstOptionName" value="{{colorConfigurableProductAttribute1.name}}"/> @@ -176,7 +183,7 @@ <waitForPageLoad stepKey="waitForSummaryPageLoadForDuplicatedProduct"/> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButtonToGenerateConfigsForDuplicatedProduct"/> <waitForPageLoad stepKey="waitForDuplicatedProductPageLoad"/> - <actionGroup ref="saveConfiguredProduct" stepKey="saveDuplicatedProductForm"/> + <actionGroup ref="saveProductForm" stepKey="saveDuplicatedProduct"/> <magentoCLI command="indexer:reindex" stepKey="reindex"/> <magentoCLI command="cache:flush" stepKey="flushCache"/> <!--Assert configurable product in category--> From acf4b72b85c4b0bad63127d9d078dc1bbd2412f3 Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Sat, 4 May 2019 16:10:51 +0300 Subject: [PATCH 059/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping card via admin - Functional test fix --- app/code/Magento/Catalog/Helper/Product.php | 9 +++++++-- .../Section/AdminOrderFormConfigureProductSection.xml | 1 + .../Mftf/Test/AdminCreateOrderWithBundleProductTest.xml | 6 ++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Helper/Product.php b/app/code/Magento/Catalog/Helper/Product.php index c0d5d1d9e450..73b5e4af78d4 100644 --- a/app/code/Magento/Catalog/Helper/Product.php +++ b/app/code/Magento/Catalog/Helper/Product.php @@ -14,6 +14,7 @@ /** * Catalog category helper * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.CookieAndSessionMisuse) */ class Product extends \Magento\Framework\Url\Helper\Data { @@ -268,6 +269,8 @@ public function getThumbnailUrl($product) } /** + * Retrieve email to friend url + * * @param ModelProduct $product * @return string */ @@ -282,6 +285,8 @@ public function getEmailToFriendUrl($product) } /** + * Get statuses + * * @return array */ public function getStatuses() @@ -476,6 +481,7 @@ public function initProduct($productId, $controller, $params = null) /** * Prepares product options by buyRequest: retrieves values and assigns them as default. + * * Also parses and adds product management related values - e.g. qty * * @param ModelProduct $product @@ -493,6 +499,7 @@ public function prepareProductOptions($product, $buyRequest) /** * Process $buyRequest and sets its options before saving configuration to some product item. + * * This method is used to attach additional parameters to processed buyRequest. * * $params holds parameters of what operation must be performed: @@ -541,8 +548,6 @@ public function addParamsToBuyRequest($buyRequest, $params) /** * Set flag that shows if Magento has to check product to be saleable (enabled and/or inStock) * - * For instance, during order creation in the backend admin has ability to add any products to order - * * @param bool $skipSaleableCheck * @return Product */ diff --git a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml index 83d417f6f855..ec3209d93585 100644 --- a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml +++ b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml @@ -12,5 +12,6 @@ <element name="optionSelect" type="select" selector="//div[@class='product-options']/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> <element name="quantity" type="input" selector="#product_composite_configure_input_qty"/> <element name="ok" type="button" selector=".modal-header .page-actions button[data-role='action']" timeout="30"/> + <element name="attributeSelect" type="select" selector="//div[contains(@class, 'product-options')]//select" timeout="30"/> </section> </sections> \ No newline at end of file diff --git a/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateOrderWithBundleProductTest.xml b/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateOrderWithBundleProductTest.xml index d087b291de87..5613334c464b 100644 --- a/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateOrderWithBundleProductTest.xml +++ b/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateOrderWithBundleProductTest.xml @@ -77,6 +77,12 @@ <field key="qty">2</field> </createData> <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + + <!--Go to bundle product page and save it to force "in stock" status--> + <actionGroup ref="goToProductPageViaID" stepKey="goToBundleProductPage"> + <argument name="productId" value="$product.id$"/> + </actionGroup> + <actionGroup ref="saveProductForm" stepKey="saveBundleProduct"/> </before> <!--Create new customer order--> From cf45765ffbf26dcca213261470b4d7caa33fc38b Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Fri, 17 May 2019 02:27:55 +0300 Subject: [PATCH 060/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Add automated test script --- .../AdminOrderFormConfigureProductSection.xml | 2 +- ...ntAddConfigurableProductToShoppingCart.xml | 127 ++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml diff --git a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml index ec3209d93585..af763c45c6ab 100644 --- a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml +++ b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml @@ -9,9 +9,9 @@ <sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminOrderFormConfigureProductSection"> + <element name="configure" type="button" selector="//a[@product_id='{{productId}}']" parameterized="true"/> <element name="optionSelect" type="select" selector="//div[@class='product-options']/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> <element name="quantity" type="input" selector="#product_composite_configure_input_qty"/> <element name="ok" type="button" selector=".modal-header .page-actions button[data-role='action']" timeout="30"/> - <element name="attributeSelect" type="select" selector="//div[contains(@class, 'product-options')]//select" timeout="30"/> </section> </sections> \ No newline at end of file diff --git a/app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml b/app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml new file mode 100644 index 000000000000..302168a96886 --- /dev/null +++ b/app/code/Magento/Sales/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminCantAddConfigurableProductToShoppingCart"> + <annotations> + <title value="Configurable product can't be added to shopping cart via admin"/> + <description value="Configurable product can't be added to shopping cart via admin"/> + <severity value="AVERAGE"/> + <testCaseId value="MAGETWO-99240"/> + <useCaseId value="MAGETWO-72172"/> + <group value="sales"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="login"/> + <!--Create category--> + <comment userInput="Create category" stepKey="commentCreateCategory"/> + <createData entity="SimpleSubCategory" stepKey="createCategory"/> + <!-- Create the configurable product based on the data in the /data folder --> + <comment userInput="Create the configurable product based on the data in the /data folder" stepKey="createConfigurableProduct"/> + <createData entity="ApiConfigurableProduct" stepKey="createConfigProduct"> + <requiredEntity createDataKey="createCategory"/> + </createData> + <!-- Make the configurable product have two options, that are children of the default attribute set --> + <comment userInput="Make the configurable product have two options, that are children of the default attribute set" stepKey="configurableProductHaveTwoOptions"/> + <createData entity="productAttributeWithTwoOptions" stepKey="createConfigProductAttribute"/> + <createData entity="productAttributeOption1" stepKey="createConfigProductAttributeOption1"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <createData entity="productAttributeOption2" stepKey="createConfigProductAttributeOption2"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <createData entity="productAttributeOption3" stepKey="createConfigProductAttributeOption3"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <createData entity="AddToDefaultSet" stepKey="createConfigAddToAttributeSet"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </createData> + <getData entity="ProductAttributeOptionGetter" index="1" stepKey="getConfigAttributeOption1"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </getData> + <getData entity="ProductAttributeOptionGetter" index="2" stepKey="getConfigAttributeOption2"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </getData> + <getData entity="ProductAttributeOptionGetter" index="3" stepKey="getConfigAttributeOption3"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + </getData> + <!-- Create the 2 children that will be a part of the configurable product --> + <comment userInput="Create the 2 children that will be a part of the configurable product" stepKey="createTwoChildrenProducts"/> + <createData entity="ApiSimpleProductWithPrice50" stepKey="createConfigChildProduct1"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption1"/> + </createData> + <createData entity="ApiSimpleProductWithPrice60" stepKey="createConfigChildProduct2"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption2"/> + </createData> + <createData entity="ApiSimpleProductWithPrice70" stepKey="createConfigChildProduct3"> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption3"/> + </createData> + <!-- Assign two products to the configurable product --> + <comment userInput="Assign two products to the configurable product" stepKey="assignToConfigurableProduct"/> + <createData entity="ConfigurableProductTwoOptions" stepKey="createConfigProductOption"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigProductAttribute"/> + <requiredEntity createDataKey="getConfigAttributeOption1"/> + <requiredEntity createDataKey="getConfigAttributeOption2"/> + <requiredEntity createDataKey="getConfigAttributeOption3"/> + </createData> + <createData entity="ConfigurableProductAddChild" stepKey="createConfigProductAddChild1"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigChildProduct1"/> + </createData> + <createData entity="ConfigurableProductAddChild" stepKey="createConfigProductAddChild2"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigChildProduct2"/> + </createData> + <createData entity="ConfigurableProductAddChild" stepKey="createConfigProductAddChild3"> + <requiredEntity createDataKey="createConfigProduct"/> + <requiredEntity createDataKey="createConfigChildProduct3"/> + </createData> + <!--Create Customer--> + <comment userInput="Create customer" stepKey="commentCreateCustomer"/> + <createData entity="Simple_US_Customer_CA" stepKey="createCustomer"/> + </before> + <after> + <!--Delete created data--> + <comment userInput="Delete created data" stepKey="deleteData"/> + <deleteData createDataKey="createCategory" stepKey="deleteCategory2"/> + <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/> + <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/> + <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/> + <deleteData createDataKey="createConfigChildProduct3" stepKey="deleteConfigChildProduct3"/> + <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/> + <deleteData createDataKey="createCustomer" stepKey="deleteCreatedCustomer"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!--Disable child product --> + <comment userInput="Disable child product" stepKey="disableChildProduct"/> + <amOnPage url="{{AdminProductEditPage.url($$createConfigChildProduct1.id$$)}}" stepKey="goToEditPage"/> + <waitForPageLoad stepKey="waitForChildProductPageLoad"/> + <click selector="{{AdminProductFormSection.enableProductLabel}}" stepKey="disableProduct"/> + <actionGroup ref="saveProductForm" stepKey="saveProductForm"/> + <!--Go to created customer page--> + <comment userInput="Go to created customer page" stepKey="goToCreatedCustomerPage"/> + <actionGroup ref="navigateToNewOrderPageExistingCustomer" stepKey="createNewOrder"> + <argument name="customer" value="$$createCustomer$$"/> + </actionGroup> + <click selector="{{AdminOrderFormItemsSection.addProducts}}" stepKey="clickToAddProduct"/> + <waitForPageLoad stepKey="waitForProductsOpened"/> + <!--Find created configurable product and click on "Configure" link--> + <comment userInput="Find created configurable product and click on Configure link" stepKey="goToConfigurableLink"/> + <click selector="{{AdminOrderFormConfigureProductSection.configure($$createConfigProduct.id$$)}}" stepKey="clickOnConfigure"/> + <!--Click on attribute drop-down and check no option 1 is available--> + <comment userInput="Click on attribute drop-down and check no option 1 is available" stepKey="commentNoOptionIsAvailable"/> + <waitForElement selector="{{AdminOrderFormConfigureProductSection.attributeSelect}}" stepKey="waitForShippingSectionLoaded"/> + <click selector="{{AdminOrderFormConfigureProductSection.attributeSelect}}" stepKey="clickToSelectOption"/> + <dontSee userInput="$$createConfigProductAttributeOption1.option[store_labels][1][label]$$" stepKey="dontSeeOption1"/> + </test> +</tests> From ba64fbf818bc74fddda792d5357e0dc848ced54a Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Thu, 16 May 2019 19:53:58 -0700 Subject: [PATCH 061/209] Added support for multiselect and checkbox values --- .../Model/Cart/UpdateCartItem.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php index 5178f26e1dc9..5d166ec88287 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -76,7 +76,9 @@ public function execute(Quote $cart, int $cartItemId, float $qty, array $customi $customizableOptions = []; foreach ($customizableOptionsData as $customizableOption) { - $customizableOptions[$customizableOption['id']] = $customizableOption['value_string']; + $customizableOptions[$customizableOption['id']] = $this->convertCustomOptionValue( + $customizableOption['value_string'] + ); } try { @@ -174,4 +176,23 @@ private function createBuyRequest(float $qty, array $customOptions): DataObject ], ]); } + + // TODO: Refactor the code duplication with addCartItem + // TODO: Make a reusable logic that is shared between add to cart / change cart approaches + + /** + * Convert custom options vakue + * + * @param string $value + * @return string|array + */ + private function convertCustomOptionValue(string $value) + { + $value = trim($value); + if (substr($value, 0, 1) === "[" && + substr($value, strlen($value) - 1, 1) === "]") { + return explode(',', substr($value, 1, -1)); + } + return $value; + } } From 4338fa06a5745b35601d38eb4bb770f0b770d2ba Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Fri, 17 May 2019 09:40:17 +0300 Subject: [PATCH 062/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Fix functional test --- .../Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml index 266799038e8a..56f6a11bdaa5 100644 --- a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml +++ b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml @@ -13,5 +13,6 @@ <element name="optionSelect" type="select" selector="//div[@class='product-options']/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> <element name="quantity" type="input" selector="#product_composite_configure_input_qty"/> <element name="ok" type="button" selector=".modal-header .page-actions button[data-role='action']" timeout="30"/> + <element name="attributeSelect" type="select" selector="//div[contains(@class, 'product-options')]//select" timeout="30"/> </section> </sections> From 3fef3c21c374fa55eae03aaca614611ce200c945 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Fri, 17 May 2019 13:48:40 +0300 Subject: [PATCH 063/209] MAGETWO-64923: Duplicate products not showing on the frontend --- .../ConfigurableProduct/Model/Product/VariationHandler.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php b/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php index 921731e9a2f9..09d251519269 100644 --- a/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php +++ b/app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\ConfigurableProduct\Model\Product; From 599c75b55bb1582c1b3605bc412409faac8f0081 Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Fri, 17 May 2019 15:29:45 +0300 Subject: [PATCH 064/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Functional test fix --- .../Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml index 56f6a11bdaa5..987744d2f2b1 100644 --- a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml +++ b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml @@ -10,7 +10,7 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminOrderFormConfigureProductSection"> <element name="configure" type="button" selector="//a[@product_id='{{productId}}']" parameterized="true"/> - <element name="optionSelect" type="select" selector="//div[@class='product-options']/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> + <element name="optionSelect" type="select" selector="//div[contains(@class,'product-options')]/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> <element name="quantity" type="input" selector="#product_composite_configure_input_qty"/> <element name="ok" type="button" selector=".modal-header .page-actions button[data-role='action']" timeout="30"/> <element name="attributeSelect" type="select" selector="//div[contains(@class, 'product-options')]//select" timeout="30"/> From 1cec8759784b6c87bfd59833ff304addfa0fbbf1 Mon Sep 17 00:00:00 2001 From: Yaroslav Rogoza <enarc@atwix.com> Date: Sun, 19 May 2019 16:08:59 +0200 Subject: [PATCH 065/209] Refactoring --- .../Model/Cart/AddSimpleProductToCart.php | 51 ++---------- .../Model/Cart/CreateBuyRequest.php | 73 ++++++++++++++++++ .../Model/Cart/UpdateCartItem.php | 77 ++++--------------- ...=> EditQuoteItemWithCustomOptionsTest.php} | 2 +- 4 files changed, 98 insertions(+), 105 deletions(-) create mode 100644 app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php rename dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/{EditQuoteItemCustomOptionsTest.php => EditQuoteItemWithCustomOptionsTest.php} (99%) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php b/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php index b491b10730c1..0bf7968a50fa 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php @@ -8,8 +8,6 @@ namespace Magento\QuoteGraphQl\Model\Cart; use Magento\Catalog\Api\ProductRepositoryInterface; -use Magento\Framework\DataObject; -use Magento\Framework\DataObjectFactory; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Exception\GraphQlInputException; use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; @@ -21,9 +19,9 @@ class AddSimpleProductToCart { /** - * @var DataObjectFactory + * @var CreateBuyRequest */ - private $dataObjectFactory; + private $createBuyRequest; /** * @var ProductRepositoryInterface @@ -31,15 +29,15 @@ class AddSimpleProductToCart private $productRepository; /** - * @param DataObjectFactory $dataObjectFactory * @param ProductRepositoryInterface $productRepository + * @param CreateBuyRequest $createBuyRequest */ public function __construct( - DataObjectFactory $dataObjectFactory, - ProductRepositoryInterface $productRepository + ProductRepositoryInterface $productRepository, + CreateBuyRequest $createBuyRequest ) { - $this->dataObjectFactory = $dataObjectFactory; $this->productRepository = $productRepository; + $this->createBuyRequest = $createBuyRequest; } /** @@ -56,7 +54,7 @@ public function execute(Quote $cart, array $cartItemData): void { $sku = $this->extractSku($cartItemData); $quantity = $this->extractQuantity($cartItemData); - $customizableOptions = $this->extractCustomizableOptions($cartItemData); + $customizableOptions = $cartItemData['customizable_options'] ?? []; try { $product = $this->productRepository->get($sku); @@ -65,7 +63,7 @@ public function execute(Quote $cart, array $cartItemData): void } try { - $result = $cart->addProduct($product, $this->createBuyRequest($quantity, $customizableOptions)); + $result = $cart->addProduct($product, $this->createBuyRequest->execute($quantity, $customizableOptions)); } catch (\Exception $e) { throw new GraphQlInputException( __( @@ -139,37 +137,4 @@ private function extractCustomizableOptions(array $cartItemData): array } return $customizableOptionsData; } - - /** - * Format GraphQl input data to a shape that buy request has - * - * @param float $quantity - * @param array $customOptions - * @return DataObject - */ - private function createBuyRequest(float $quantity, array $customOptions): DataObject - { - return $this->dataObjectFactory->create([ - 'data' => [ - 'qty' => $quantity, - 'options' => $customOptions, - ], - ]); - } - - /** - * Convert custom options vakue - * - * @param string $value - * @return string|array - */ - private function convertCustomOptionValue(string $value) - { - $value = trim($value); - if (substr($value, 0, 1) === "[" && - substr($value, strlen($value) - 1, 1) === "]") { - return explode(',', substr($value, 1, -1)); - } - return $value; - } } diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php b/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php new file mode 100644 index 000000000000..bcbfc43d567a --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php @@ -0,0 +1,73 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\QuoteGraphQl\Model\Cart; + +use Magento\Framework\DataObject; +use Magento\Framework\DataObjectFactory; + +/** + * Creates buy request that can be used for working with cart items + */ +class CreateBuyRequest +{ + /** + * @var DataObjectFactory + */ + private $dataObjectFactory; + + /** + * @param DataObjectFactory $dataObjectFactory + */ + public function __construct( + DataObjectFactory $dataObjectFactory + ) { + $this->dataObjectFactory = $dataObjectFactory; + } + + /** + * Returns buy request for working with cart items + * + * @param float $qty + * @param array $customizableOptionsData + * @return DataObject + */ + public function execute(float $qty, array $customizableOptionsData): DataObject + { + $customizableOptions = []; + foreach ($customizableOptionsData as $customizableOption) { + if (isset($customizableOption['value_string'])) { + $customizableOptions[$customizableOption['id']] = $this->convertCustomOptionValue( + $customizableOption['value_string'] + ); + } + } + + return $this->dataObjectFactory->create([ + 'data' => [ + 'qty' => $qty, + 'options' => $customizableOptions, + ], + ]); + } + + /** + * Convert custom options value + * + * @param string $value + * @return string|array + */ + private function convertCustomOptionValue(string $value) + { + $value = trim($value); + if (substr($value, 0, 1) === "[" && + substr($value, strlen($value) - 1, 1) === "]") { + return explode(',', substr($value, 1, -1)); + } + return $value; + } +} diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php index 5d166ec88287..7d653788ab0a 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -7,8 +7,6 @@ namespace Magento\QuoteGraphQl\Model\Cart; -use Magento\Framework\DataObject; -use Magento\Framework\DataObjectFactory; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Exception\GraphQlInputException; @@ -24,6 +22,11 @@ */ class UpdateCartItem { + /** + * @var CreateBuyRequest + */ + private $createBuyRequest; + /** * @var CartRepositoryInterface */ @@ -35,23 +38,18 @@ class UpdateCartItem private $cartItemRepository; /** - * @var DataObjectFactory - */ - private $dataObjectFactory; - - /** - * @param DataObjectFactory $dataObjectFactory * @param CartItemRepositoryInterface $cartItemRepository * @param CartRepositoryInterface $quoteRepository + * @param CreateBuyRequest $createBuyRequest */ public function __construct( - DataObjectFactory $dataObjectFactory, CartItemRepositoryInterface $cartItemRepository, - CartRepositoryInterface $quoteRepository + CartRepositoryInterface $quoteRepository, + CreateBuyRequest $createBuyRequest ) { - $this->dataObjectFactory = $dataObjectFactory; $this->cartItemRepository = $cartItemRepository; $this->quoteRepository = $quoteRepository; + $this->createBuyRequest = $createBuyRequest; } /** @@ -59,32 +57,25 @@ public function __construct( * * @param Quote $cart * @param int $cartItemId - * @param float $qty + * @param float $quantity * @param array $customizableOptionsData * @return void * @throws GraphQlInputException * @throws GraphQlNoSuchEntityException * @throws NoSuchEntityException */ - public function execute(Quote $cart, int $cartItemId, float $qty, array $customizableOptionsData): void + public function execute(Quote $cart, int $cartItemId, float $quantity, array $customizableOptionsData): void { if (count($customizableOptionsData) === 0) { // Update only item's qty - $this->updateItemQty($cartItemId, $cart, $qty); + $this->updateItemQuantity($cartItemId, $cart, $quantity); return; } - $customizableOptions = []; - foreach ($customizableOptionsData as $customizableOption) { - $customizableOptions[$customizableOption['id']] = $this->convertCustomOptionValue( - $customizableOption['value_string'] - ); - } - try { $result = $cart->updateItem( $cartItemId, - $this->createBuyRequest($qty, $customizableOptions) + $this->createBuyRequest->execute($quantity, $customizableOptionsData) ); } catch (LocalizedException $e) { throw new GraphQlInputException( @@ -117,12 +108,12 @@ public function execute(Quote $cart, int $cartItemId, float $qty, array $customi * * @param int $itemId * @param Quote $cart - * @param float $qty + * @param float $quantity * @throws GraphQlNoSuchEntityException * @throws NoSuchEntityException * @throws GraphQlNoSuchEntityException */ - private function updateItemQty(int $itemId, Quote $cart, float $qty) + private function updateItemQuantity(int $itemId, Quote $cart, float $quantity) { $cartItem = $cart->getItemById($itemId); if ($cartItem === false) { @@ -130,7 +121,7 @@ private function updateItemQty(int $itemId, Quote $cart, float $qty) __('Could not find cart item with id: %1.', $itemId) ); } - $cartItem->setQty($qty); + $cartItem->setQty($quantity); $this->validateCartItem($cartItem); $this->cartItemRepository->save($cartItem); } @@ -159,40 +150,4 @@ private function validateCartItem(Item $cartItem): void } } } - - /** - * Format GraphQl input data to a shape that buy request has - * - * @param float $qty - * @param array $customOptions - * @return DataObject - */ - private function createBuyRequest(float $qty, array $customOptions): DataObject - { - return $this->dataObjectFactory->create([ - 'data' => [ - 'qty' => $qty, - 'options' => $customOptions, - ], - ]); - } - - // TODO: Refactor the code duplication with addCartItem - // TODO: Make a reusable logic that is shared between add to cart / change cart approaches - - /** - * Convert custom options vakue - * - * @param string $value - * @return string|array - */ - private function convertCustomOptionValue(string $value) - { - $value = trim($value); - if (substr($value, 0, 1) === "[" && - substr($value, strlen($value) - 1, 1) === "]") { - return explode(',', substr($value, 1, -1)); - } - return $value; - } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php similarity index 99% rename from dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php rename to dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php index 1aaa23860f5f..8c46f66e70cf 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemCustomOptionsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php @@ -19,7 +19,7 @@ /** * Edit cart customizable options test */ -class EditQuoteItemCustomOptionsTest extends GraphQlAbstract +class EditQuoteItemWithCustomOptionsTest extends GraphQlAbstract { /** * @var ProductRepositoryInterface From 7bb2d93cc95de510e2066827be32a065307e9cb9 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Mon, 20 May 2019 17:11:38 +0400 Subject: [PATCH 066/209] MAGETWO-64923: Duplicate products not showing on the frontend - Update automated test script --- .../AdminProductAttributeActionGroup.xml | 2 +- ...efrontVisibilityOfDuplicateProductTest.xml | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml index 096f830301aa..ed0c4387cded 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductAttributeActionGroup.xml @@ -43,7 +43,7 @@ <selectOption selector="{{AdminProductFormNewAttributeSection.attributeType}}" userInput="{{attributeType}}" stepKey="selectAttributeType"/> <click selector="{{AdminProductFormNewAttributeSection.saveAttribute}}" stepKey="saveAttribute"/> </actionGroup> - <actionGroup name="AdminCreateAttributeFromProductPageWithSpecifiedVisibilityScope" extends="AdminCreateAttributeFromProductPage" insertAfter="selectAttributeType"> + <actionGroup name="AdminCreateAttributeFromProductPageWithScope" extends="AdminCreateAttributeFromProductPage" insertAfter="selectAttributeType"> <arguments> <argument name="scope" type="string" defaultValue="Store View"/> </arguments> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml index 2dec47673d87..fd8a1c0ad7b8 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml @@ -54,7 +54,7 @@ <argument name="image" value="MagentoLogo"/> </actionGroup> <actionGroup ref="saveProductForm" stepKey="saveProductForm"/> - <actionGroup ref="AdminCreateAttributeFromProductPageWithSpecifiedVisibilityScope" stepKey="createAttributeForProduct"> + <actionGroup ref="AdminCreateAttributeFromProductPageWithScope" stepKey="createAttributeForProduct"> <argument name="attributeName" value="{{colorProductAttribute.default_label}}"/> <argument name="attributeType" value="{{colorProductAttribute.input_type}}"/> <argument name="scope" value="Global"/> @@ -134,14 +134,14 @@ <actionGroup ref="saveProductForm" stepKey="saveDuplicatedProductForm"/> <!--Create new configurations with another attribute--> <comment userInput="Create new configurations with another attribute" stepKey="commentCreateNewConfigurations"/> - <actionGroup ref="AdminCreateAttributeFromProductPageWithSpecifiedVisibilityScope" stepKey="createAttributeForDuplicatedProduct"> + <actionGroup ref="AdminCreateAttributeFromProductPageWithScope" stepKey="createAttributeForDuplicatedProduct"> <argument name="attributeName" value="{{productAttributeColor.default_label}}"/> <argument name="attributeType" value="{{productAttributeColor.input_type}}"/> <argument name="scope" value="Global"/> </actionGroup> <reloadPage stepKey="reloadDuplicatedProductPage"/> <waitForPageLoad stepKey="waitForDuplicatedProductReload"/> - <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurationsForDuplicatedProduct"/> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="createConfigurationsDuplicatedProduct"/> <actionGroup ref="createOptionsForAttribute" stepKey="createOptionsForDuplicatedProduct"> <argument name="attributeName" value="{{productAttributeColor.default_label}}"/> <argument name="firstOptionName" value="{{colorConfigurableProductAttribute1.name}}"/> @@ -149,39 +149,39 @@ </actionGroup> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnFirstNextButtonForDuplicatedProduct"/> <waitForPageLoad stepKey="waitForBulkImagesPriceQuantityPageLoadForDuplicatedProduct"/> - <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImageToConfigurableProductOptionOneForDuplicatedProduct"> + <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImgConfigProductOption1DuplicatedProduct"> <argument name="image" value="MagentoLogo"/> <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> </actionGroup> - <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImageToConfigurableProductOptionTwoForDuplicatedProduct"> + <actionGroup ref="addUniqueImageToConfigurableProductOption" stepKey="addImgConfigProductOption2DuplicatedProduct"> <argument name="image" value="MagentoLogo"/> <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> </actionGroup> - <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceToConfigurableProductOptionFirstForDuplicatedProduct"> + <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceConfigProductOption1DuplicatedProduct"> <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> <argument name="price" value="{{virtualProductWithRequiredFields.price}}"/> </actionGroup> - <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceToConfigurableProductOptionSecondForDuplicatedProduct"> + <actionGroup ref="addUniquePriceToConfigurableProductOption" stepKey="addPriceConfigProductOption2DuplicatedProduct"> <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> <argument name="price" value="{{virtualProductWithRequiredFields.price}}"/> </actionGroup> - <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyForFirstOptionForDuplicatedProduct"> + <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyOption1DuplicatedProduct"> <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> <argument name="label" value="{{colorConfigurableProductAttribute1.name}}"/> <argument name="quantity" value="{{virtualProductBigQty.quantity}}"/> </actionGroup> - <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyForSecondOptionForDuplicatedProduct"> + <actionGroup ref="addUniqueQuantityToConfigurableProductOption" stepKey="addUniqueQtyOption2DuplicatedProduct"> <argument name="frontend_label" value="{{productAttributeColor.default_label}}"/> <argument name="label" value="{{colorConfigurableProductAttribute2.name}}"/> <argument name="quantity" value="{{virtualProductBigQty.quantity}}"/> </actionGroup> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnSecondNextButtonForDuplicatedProduct"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOn2NextButtonForDuplicatedProduct"/> <waitForPageLoad stepKey="waitForSummaryPageLoadForDuplicatedProduct"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButtonToGenerateConfigsForDuplicatedProduct"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="generateConfigsForDuplicatedProduct"/> <waitForPageLoad stepKey="waitForDuplicatedProductPageLoad"/> <actionGroup ref="saveProductForm" stepKey="saveDuplicatedProduct"/> <magentoCLI command="indexer:reindex" stepKey="reindex"/> From 97d15a47932f506e379b9af763649f970fcf713e Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Mon, 20 May 2019 16:20:26 +0400 Subject: [PATCH 067/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values - Added automated test script. --- .../AdminConfigurableProductActionGroup.xml | 21 +++- ...bleProductAttributeValueUniquenessTest.xml | 97 +++++++++++++++++++ 2 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml index 5a172ca5eabd..8b409935eb5c 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml @@ -205,7 +205,26 @@ <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnThirdNextButton"/> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnFourthNextButton"/> </actionGroup> - + <actionGroup name="adminSelectAttributeForConfigurableProductFromPage"> + <arguments> + <argument name="productAttributeCode" type="string" defaultValue="{{dropdownProductAttribute.attribute_code}}"/> + </arguments> + <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" stepKey="clickToFilterAttributeNames"/> + <waitForElementVisible selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" stepKey="waitForAttributeCodeInputBeVisible"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" userInput="{{productAttributeCode}}" stepKey="fillAttributeName"/> + <click selector="{{AdminCreateProductConfigurationsPanel.applyFilters}}" stepKey="applyFilter"/> + <click selector="{{AdminCreateProductConfigurationsPanel.firstCheckbox}}" stepKey="selectFilteredAttribute"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton"/> + </actionGroup> + <actionGroup name="createAnOptionForAttribute"> + <arguments> + <argument name="optionName" type="string" defaultValue="opt1"/> + </arguments> + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateFirstNewValue"/> + <fillField userInput="{{optionName}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewOption"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveNewAttribute"/> + <click selector="{{AdminCreateProductConfigurationsPanel.selectAll}}" stepKey="clickOnSelectAll"/> + </actionGroup> <actionGroup name="changeProductConfigurationsInGrid"> <arguments> <argument name="firstOption" type="entity"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml new file mode 100644 index 000000000000..3c61ff74c563 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminCheckConfigurableProductAttributeValueUniquenessTest"> + <annotations> + <features value="ConfigurableProduct"/> + <stories value="Edit a configurable product in admin"/> + <title value="Check attribute value uniqueness in configurable products"/> + <description value="Check attribute value uniqueness in configurable products"/> + <severity value="MAJOR"/> + <testCaseId value="MAGETWO-99519"/> + <useCaseId value="MAGETWO-99443"/> + <group value="ConfigurableProduct"/> + </annotations> + <before> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <createData entity="dropdownProductAttribute" stepKey="createProductAttribute"/> + </before> + <after> + <!--Delete created data--> + <comment userInput="Delete created data" stepKey="deleteCreatedData"/> + <actionGroup ref="deleteProductUsingProductGrid" stepKey="deleteConfigurableProductAndOptions"> + <argument name="product" value="$$createConfigProduct$$"/> + </actionGroup> + <waitForPageLoad stepKey="waitForProductIndexPage"/> + <actionGroup ref="resetProductGridToDefaultView" stepKey="resetProductGridColumnsInitial"/> + <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> + <deleteData createDataKey="createProductAttribute" stepKey="deleteAttribute"/> + <actionGroup ref="logout" stepKey="logOut"/> + </after> + <!--Create configurable product--> + <comment userInput="Create configurable product" stepKey="createConfProd"/> + <createData entity="ApiCategory" stepKey="createCategory"/> + <createData entity="ApiConfigurableProduct" stepKey="createConfigProduct"> + <requiredEntity createDataKey="createCategory"/> + </createData> + <!--Go to created product page--> + <comment userInput="Go to created product page" stepKey="goToProdPage"/> + <amOnPage url="{{ProductCatalogPage.url}}" stepKey="goToProductGrid"/> + <waitForPageLoad stepKey="waitForProductPage1"/> + <actionGroup ref="filterProductGridByName2" stepKey="filterByName"> + <argument name="name" value="$$createConfigProduct.name$$"/> + </actionGroup> + <click selector="{{AdminProductGridSection.firstRow}}" stepKey="clickOnProductName"/> + <waitForPageLoad stepKey="waitForProductEditPageToLoad"/> + <!--Create configurations for the product--> + <comment userInput="Create configurations for the product" stepKey="createConfigurations"/> + <conditionalClick selector="{{AdminProductFormConfigurationsSection.sectionHeader}}" dependentSelector="{{AdminProductFormConfigurationsSection.createConfigurations}}" visible="false" stepKey="expandConfigurationsTab1"/> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations1"/> + <waitForPageLoad stepKey="waitForSelectAttributesPage1"/> + <actionGroup ref="AdminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute1"> + <argument name="attributeName" value="$$createProductAttribute.attribute_code$$"/> + </actionGroup> + <actionGroup ref="createAnOptionForAttribute" stepKey="createOption1ForSelectedAttribute"> + <argument name="optionName" value="opt1"/> + </actionGroup> + <actionGroup ref="createAnOptionForAttribute" stepKey="createOption2ForSelectedAttribute"> + <argument name="optionName" value="opt2"/> + </actionGroup> + <!--Proceed generation--> + <comment userInput="Proceed generation" stepKey="proceedGeneration"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNext1"/> + <waitForPageLoad stepKey="waitForStep3Page"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNext2"/> + <waitForPageLoad stepKey="waitForStep4Page"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickGenerateProducts"/> + <waitForPageLoad stepKey="waitProductGeneration"/> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> + <waitForPageLoad stepKey="waitForProductSave"/> + <click selector="{{AdminChooseAffectedAttributeSetPopup.confirm}}" stepKey="clickOnConfirmInPopup"/> + <waitForPageLoad stepKey="waitForProductPage2"/> + <seeInCurrentUrl url="{{ProductCatalogPage.url}}" stepKey="seeInProductUrl"/> + <!--Add an option with existing name--> + <comment userInput="Add an option with existing name" stepKey="addAnOptionWithExistingName"/> + <conditionalClick selector="{{AdminProductFormConfigurationsSection.sectionHeader}}" dependentSelector="{{AdminProductFormConfigurationsSection.createConfigurations}}" visible="false" stepKey="expandConfigurationsTab2"/> + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations2"/> + <waitForPageLoad stepKey="waitForSelectAttributesPage2"/> + <actionGroup ref="AdminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute2"> + <argument name="attributeName" value="$$createProductAttribute.attribute_code$$"/> + </actionGroup> + <actionGroup ref="createAnOptionForAttribute" stepKey="createAnOptionWithExistingName"> + <argument name="optionName" value="opt1"/> + </actionGroup> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNextToSubmitOption"/> + <waitForPageLoad stepKey="waitForPageLoad"/> + <!--Assert Error message--> + <comment userInput="Assert Error message" stepKey="assertErrorMsg"/> + <see userInput="Attributes must have unique option values" stepKey="verifyErrorMessage"/> + </test> +</tests> From c55a86d951968d6e8d591e9b2b34c9764f4a2dfc Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Wed, 22 May 2019 12:57:34 +0400 Subject: [PATCH 068/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values - Updated automated test script. --- ...inCheckConfigurableProductAttributeValueUniquenessTest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml index 3c61ff74c563..61cce181efe6 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml @@ -55,7 +55,7 @@ <conditionalClick selector="{{AdminProductFormConfigurationsSection.sectionHeader}}" dependentSelector="{{AdminProductFormConfigurationsSection.createConfigurations}}" visible="false" stepKey="expandConfigurationsTab1"/> <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations1"/> <waitForPageLoad stepKey="waitForSelectAttributesPage1"/> - <actionGroup ref="AdminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute1"> + <actionGroup ref="adminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute1"> <argument name="attributeName" value="$$createProductAttribute.attribute_code$$"/> </actionGroup> <actionGroup ref="createAnOptionForAttribute" stepKey="createOption1ForSelectedAttribute"> @@ -82,7 +82,7 @@ <conditionalClick selector="{{AdminProductFormConfigurationsSection.sectionHeader}}" dependentSelector="{{AdminProductFormConfigurationsSection.createConfigurations}}" visible="false" stepKey="expandConfigurationsTab2"/> <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations2"/> <waitForPageLoad stepKey="waitForSelectAttributesPage2"/> - <actionGroup ref="AdminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute2"> + <actionGroup ref="adminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute2"> <argument name="attributeName" value="$$createProductAttribute.attribute_code$$"/> </actionGroup> <actionGroup ref="createAnOptionForAttribute" stepKey="createAnOptionWithExistingName"> From ecc1febbc97e60cb8499d215ac5de6eb4141ae88 Mon Sep 17 00:00:00 2001 From: Anahit Martirosyan <anahit_martirosyan@epam.com> Date: Thu, 23 May 2019 14:34:55 +0400 Subject: [PATCH 069/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can't be added to shopping cart via admin - Updated automated test script --- .../Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml index ccfd8982f7e6..66043d310ad6 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml @@ -22,7 +22,7 @@ <!--Create category--> <comment userInput="Create category" stepKey="commentCreateCategory"/> <createData entity="SimpleSubCategory" stepKey="createCategory"/> - <!-- Create the configurable product based on the data in the /data folder --> + <!-- Create the configurable product based on the data in the data folder --> <comment userInput="Create the configurable product based on the data in the data folder" stepKey="createConfigurableProduct"/> <createData entity="ApiConfigurableProduct" stepKey="createConfigProduct"> <requiredEntity createDataKey="createCategory"/> From f201c3207d1bca9c1552ef2be837f48249a4f8b4 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Thu, 23 May 2019 17:06:26 +0300 Subject: [PATCH 070/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../Adminhtml/Product/Attribute/CreateOptions.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php index 841216a06780..2788a4947aa4 100644 --- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php +++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php @@ -113,9 +113,12 @@ private function checkUnique(ProductAttributeInterface $attribute, array $newOpt { $originalOptions = $attribute->getSource()->getAllOptions(false); $allOptions = array_merge($originalOptions, $newOptions); - $optionValues = array_map(function ($option) { - return $option['label']; - }, $allOptions); + $optionValues = array_map( + function ($option) { + return $option['label']; + }, + $allOptions + ); $uniqueValues = array_unique($optionValues); $duplicates = array_diff_assoc($optionValues, $uniqueValues); From 42cd746899b7522504d31b11761e1750b340a704 Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Fri, 24 May 2019 18:39:11 +0300 Subject: [PATCH 071/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can't be added to shopping cart via admin - Functional test fix --- app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php | 5 ++--- .../Mftf/Section/AdminOrderFormConfigureProductSection.xml | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php index 22d9ab0a0d5f..b8567cee866f 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php @@ -10,16 +10,15 @@ use Magento\Backend\App\Action; use Magento\Framework\View\Result\PageFactory; use Magento\Backend\Model\View\Result\ForwardFactory; -use Magento\Framework\App\Action\HttpGetActionInterface; -use Magento\Framework\App\Action\HttpPostActionInterface; /** * Adminhtml sales orders creation process controller * * @author Magento Core Team <core@magentocommerce.com> * @SuppressWarnings(PHPMD.NumberOfChildren) + * @SuppressWarnings(PHPMD.AllPurposeAction) */ -abstract class Create extends \Magento\Backend\App\Action implements HttpGetActionInterface, HttpPostActionInterface +abstract class Create extends \Magento\Backend\App\Action { /** * @var \Magento\Framework\Escaper diff --git a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml index 987744d2f2b1..241b0b6e4445 100644 --- a/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml +++ b/app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormConfigureProductSection.xml @@ -10,9 +10,9 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminOrderFormConfigureProductSection"> <element name="configure" type="button" selector="//a[@product_id='{{productId}}']" parameterized="true"/> - <element name="optionSelect" type="select" selector="//div[contains(@class,'product-options')]/div/div/select[../../label[text() = '{{option}}']]" parameterized="true"/> + <element name="optionSelect" type="select" selector="//div[contains(@class,'product-options')]//select[//label[text() = '{{option}}']]" parameterized="true"/> <element name="quantity" type="input" selector="#product_composite_configure_input_qty"/> <element name="ok" type="button" selector=".modal-header .page-actions button[data-role='action']" timeout="30"/> - <element name="attributeSelect" type="select" selector="//div[contains(@class, 'product-options')]//select" timeout="30"/> + <element name="attributeSelect" type="select" selector="//div[contains(@class, 'product-options')]//select" timeout="30"/> </section> </sections> From fe8f197cc080a6cc1ba57893a24e238e443fd7fa Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Fri, 24 May 2019 17:50:21 -0500 Subject: [PATCH 072/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test --- .../Magento/AdminNotification/composer.json | 3 +- .../Catalog/Block/Adminhtml/Category/Tree.php | 2 +- .../Customer/Block/Account/Dashboard.php | 7 +- app/code/Magento/Directory/Block/Data.php | 2 +- .../Payflow/Service/Request/SecureToken.php | 2 +- .../Magento/Review/Block/Adminhtml/Rss.php | 3 +- .../Magento/Sales/Block/Order/History.php | 5 +- app/code/Magento/Sales/Block/Order/Recent.php | 5 +- app/code/Magento/Store/composer.json | 3 +- app/code/Magento/Tinymce3/composer.json | 3 +- app/code/Magento/Ui/composer.json | 3 +- app/code/Magento/Variable/composer.json | 3 +- .../TestFramework/Dependency/PhpRule.php | 50 ++- .../Dependency/Route/RouteMapper.php | 332 ++++++++++++++++++ .../Magento/Test/Integrity/DependencyTest.php | 125 ++----- .../undetected_dependencies_ce.php | 10 - 16 files changed, 416 insertions(+), 142 deletions(-) create mode 100644 dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php delete mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/undetected_dependencies_ce.php diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json index e5cf487908cd..fe0727474fa2 100644 --- a/app/code/Magento/AdminNotification/composer.json +++ b/app/code/Magento/AdminNotification/composer.json @@ -11,7 +11,8 @@ "magento/module-backend": "*", "magento/module-media-storage": "*", "magento/module-store": "*", - "magento/module-ui": "*" + "magento/module-ui": "*", + "magento/module-config": "*" }, "type": "magento2-module", "license": [ diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php index 83ec50159248..9a4a9fa76800 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php @@ -253,7 +253,7 @@ public function getLoadTreeUrl($expanded = null) */ public function getNodesUrl() { - return $this->getUrl('catalog/category/jsonTree'); + return $this->getUrl('catalog/category/tree'); } /** diff --git a/app/code/Magento/Customer/Block/Account/Dashboard.php b/app/code/Magento/Customer/Block/Account/Dashboard.php index fa9c8f98a8c2..8e0f79d45770 100644 --- a/app/code/Magento/Customer/Block/Account/Dashboard.php +++ b/app/code/Magento/Customer/Block/Account/Dashboard.php @@ -114,10 +114,13 @@ public function getAddressEditUrl($address) * Retrieve the Url for customer orders. * * @return string + * @deprecated Action does not exist */ public function getOrdersUrl() { - return $this->_urlBuilder->getUrl('customer/order/index', ['_secure' => true]); + //phpcs:ignore Magento2.Functions.DiscouragedFunction + trigger_error('Method is deprecated', E_USER_DEPRECATED); + return ''; } /** @@ -137,7 +140,7 @@ public function getReviewsUrl() */ public function getWishlistUrl() { - return $this->_urlBuilder->getUrl('customer/wishlist/index', ['_secure' => true]); + return $this->_urlBuilder->getUrl('wishlist/index', ['_secure' => true]); } /** diff --git a/app/code/Magento/Directory/Block/Data.php b/app/code/Magento/Directory/Block/Data.php index 333e9e03706b..5ee5ef080bac 100644 --- a/app/code/Magento/Directory/Block/Data.php +++ b/app/code/Magento/Directory/Block/Data.php @@ -75,7 +75,7 @@ public function __construct( */ public function getLoadrRegionUrl() { - return $this->getUrl('directory/json/childRegion'); + return $this->getUrl('directory/json/countryRegion'); } /** diff --git a/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php b/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php index 8a2825a16d33..587372189f7f 100644 --- a/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php +++ b/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php @@ -69,7 +69,7 @@ public function requestToken(Quote $quote) $request->setSecuretokenid($this->mathRandom->getUniqueHash()); $request->setReturnurl($this->url->getUrl('paypal/transparent/response')); $request->setErrorurl($this->url->getUrl('paypal/transparent/response')); - $request->setCancelurl($this->url->getUrl('paypal/transparent/cancel')); + $request->setCancelurl(''); $request->setDisablereceipt('TRUE'); $request->setSilenttran('TRUE'); diff --git a/app/code/Magento/Review/Block/Adminhtml/Rss.php b/app/code/Magento/Review/Block/Adminhtml/Rss.php index 7a935b656cda..5d370115ea25 100644 --- a/app/code/Magento/Review/Block/Adminhtml/Rss.php +++ b/app/code/Magento/Review/Block/Adminhtml/Rss.php @@ -45,10 +45,9 @@ public function __construct( */ public function getRssData() { - $newUrl = $this->getUrl('rss/catalog/review', ['_secure' => true, '_nosecret' => true]); $title = __('Pending product review(s)'); - $data = ['title' => $title, 'description' => $title, 'link' => $newUrl, 'charset' => 'UTF-8']; + $data = ['title' => $title, 'description' => $title, 'link' => '', 'charset' => 'UTF-8']; foreach ($this->rssModel->getProductCollection() as $item) { if ($item->getStoreId()) { diff --git a/app/code/Magento/Sales/Block/Order/History.php b/app/code/Magento/Sales/Block/Order/History.php index 80925f66fc83..b7cc74382ded 100644 --- a/app/code/Magento/Sales/Block/Order/History.php +++ b/app/code/Magento/Sales/Block/Order/History.php @@ -149,10 +149,13 @@ public function getViewUrl($order) /** * @param object $order * @return string + * @deprecated Action does not exist */ public function getTrackUrl($order) { - return $this->getUrl('sales/order/track', ['order_id' => $order->getId()]); + //phpcs:ignore Magento2.Functions.DiscouragedFunction + trigger_error('Method is deprecated', E_USER_DEPRECATED); + return ''; } /** diff --git a/app/code/Magento/Sales/Block/Order/Recent.php b/app/code/Magento/Sales/Block/Order/Recent.php index 7e5be0ebfbba..c91e75c6a218 100644 --- a/app/code/Magento/Sales/Block/Order/Recent.php +++ b/app/code/Magento/Sales/Block/Order/Recent.php @@ -116,10 +116,13 @@ public function getViewUrl($order) /** * @param object $order * @return string + * @deprecated Action does not exist */ public function getTrackUrl($order) { - return $this->getUrl('sales/order/track', ['order_id' => $order->getId()]); + //phpcs:ignore Magento2.Functions.DiscouragedFunction + trigger_error('Method is deprecated', E_USER_DEPRECATED); + return ''; } /** diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index ebaa32b95f48..6f05d65e732f 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -11,7 +11,8 @@ "magento/module-config": "*", "magento/module-directory": "*", "magento/module-media-storage": "*", - "magento/module-ui": "*" + "magento/module-ui": "*", + "magento/module-backend": "*" }, "suggest": { "magento/module-deploy": "*" diff --git a/app/code/Magento/Tinymce3/composer.json b/app/code/Magento/Tinymce3/composer.json index 52e980052a87..9ea4c7b2f18a 100644 --- a/app/code/Magento/Tinymce3/composer.json +++ b/app/code/Magento/Tinymce3/composer.json @@ -7,7 +7,8 @@ "magento/module-backend": "*", "magento/module-ui": "*", "magento/module-variable": "*", - "magento/module-widget": "*" + "magento/module-widget": "*", + "magento/module-cms": "*" }, "suggest": { diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index 296332e38350..d0d93abc6b1e 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -11,7 +11,8 @@ "magento/module-backend": "*", "magento/module-eav": "*", "magento/module-store": "*", - "magento/module-user": "*" + "magento/module-user": "*", + "magento/module-cms": "*" }, "suggest": { "magento/module-config": "*" diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json index 017fd312bbdf..bacbf15729d2 100644 --- a/app/code/Magento/Variable/composer.json +++ b/app/code/Magento/Variable/composer.json @@ -9,7 +9,8 @@ "magento/framework": "*", "magento/module-backend": "*", "magento/module-store": "*", - "magento/module-config": "*" + "magento/module-config": "*", + "magento/module-ui": "*" }, "type": "magento2-module", "license": [ diff --git a/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php b/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php index 800bba2a880b..8fe6172a8983 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php +++ b/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php @@ -8,7 +8,12 @@ namespace Magento\TestFramework\Dependency; use Magento\Framework\App\Utility\Files; +use Magento\Framework\UrlInterface; +use Magento\TestFramework\Dependency\Route\RouteMapper; +/** + * Rule to check the dependencies between modules based on references, getUrl and layout blocks + */ class PhpRule implements RuleInterface { /** @@ -34,7 +39,7 @@ class PhpRule implements RuleInterface * * @var array */ - protected $_mapRouters = []; + private $_mapRouters = []; /** * List of layout blocks @@ -59,11 +64,15 @@ class PhpRule implements RuleInterface ]; /** - * Constructor - * + * @var RouteMapper + */ + private $routeMapper; + + /** * @param array $mapRouters * @param array $mapLayoutBlocks * @param array $pluginMap + * @throws \Exception */ public function __construct(array $mapRouters, array $mapLayoutBlocks, array $pluginMap = []) { @@ -71,6 +80,7 @@ public function __construct(array $mapRouters, array $mapLayoutBlocks, array $pl $this->_mapLayoutBlocks = $mapLayoutBlocks; $this->_namespaces = implode('|', \Magento\Framework\App\Utility\Files::init()->getNamespaces()); $this->pluginMap = $pluginMap ?: null; + $this->routeMapper = new RouteMapper(); } /** @@ -81,6 +91,7 @@ public function __construct(array $mapRouters, array $mapLayoutBlocks, array $pl * @param string $file * @param string $contents * @return array + * @throws \Exception */ public function getDependencyInfo($currentModule, $fileType, $file, &$contents) { @@ -95,7 +106,7 @@ public function getDependencyInfo($currentModule, $fileType, $file, &$contents) ); $dependenciesInfo = $this->considerCaseDependencies( $dependenciesInfo, - $this->_caseGetUrl($currentModule, $contents) + $this->_caseGetUrl($currentModule, $contents, $file) ); $dependenciesInfo = $this->considerCaseDependencies( $dependenciesInfo, @@ -111,6 +122,7 @@ public function getDependencyInfo($currentModule, $fileType, $file, &$contents) * @param string $file * @param string $contents * @return array + * @throws \Exception */ private function caseClassesAndIdentifiers($currentModule, $file, &$contents) { @@ -184,12 +196,14 @@ private function loadDiFiles() * Generate an array of plugin info * * @return array + * @throws \Exception */ private function loadPluginMap() { if (!$this->pluginMap) { foreach ($this->loadDiFiles() as $filepath) { $dom = new \DOMDocument(); + // phpcs:ignore Magento2.Functions.DiscouragedFunction $dom->loadXML(file_get_contents($filepath)); $typeNodes = $dom->getElementsByTagName('type'); /** @var \DOMElement $type */ @@ -214,6 +228,7 @@ private function loadPluginMap() * @param string $dependent * @param string $dependency * @return bool + * @throws \Exception */ private function isPluginDependency($dependent, $dependency) { @@ -239,10 +254,12 @@ private function isPluginDependency($dependent, $dependency) * @param $currentModule * @param $contents * @return array + * @throws \Exception */ protected function _caseGetUrl($currentModule, &$contents) { - $pattern = '/[\->:]+(?<source>getUrl\([\'"](?<router>[\w\/*]+)[\'"])/'; + $pattern = '#(\->|:)(?<source>getUrl\(([\'"])(?<route_id>[a-z0-9\-_]{3,})/' + .'(?<controller_name>[a-z0-9\-_]+)(/(?<action_name>[a-z0-9\-_]+))?\3)#i'; $dependencies = []; if (!preg_match_all($pattern, $contents, $matches, PREG_SET_ORDER)) { @@ -250,18 +267,17 @@ protected function _caseGetUrl($currentModule, &$contents) } foreach ($matches as $item) { - $router = str_replace('/', '\\', $item['router']); - if (isset($this->_mapRouters[$router])) { - $modules = $this->_mapRouters[$router]; - if (!in_array($currentModule, $modules)) { - foreach ($modules as $module) { - $dependencies[] = [ - 'module' => $module, - 'type' => RuleInterface::TYPE_HARD, - 'source' => $item['source'], - ]; - } - } + $modules = $this->routeMapper->getDependencyByRoutePath( + $item['route_id'], + $item['controller_name'], + $item['action_name'] ?? UrlInterface::DEFAULT_ACTION_NAME + ); + if (!in_array($currentModule, $modules)) { + $dependencies[] = [ + 'module' => implode(" || ", $modules), + 'type' => RuleInterface::TYPE_HARD, + 'source' => $item['source'], + ]; } } return $dependencies; diff --git a/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php b/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php new file mode 100644 index 000000000000..79f2c1336f23 --- /dev/null +++ b/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php @@ -0,0 +1,332 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\TestFramework\Dependency\Route; + +use Magento\Framework\App\Area; +use Magento\Framework\App\Utility\Files; +use Magento\Framework\Exception\NotFoundException; +use Magento\Framework\UrlInterface; + +/** + * Route mapper based on routes.xml declarations + */ +class RouteMapper +{ + /** + * List of routers + * + * Format: array( + * '{Router_Id}' => '{Route_Id}' => ['{Module_Name}'] + * ) + * + * @var array + */ + private $routers = []; + + /** + * List of routes.xml files by modules + * + * Format: array( + * '{Module_Name}' => ['{Filename}'] + * ) + * + * @var array + */ + private $routeConfigFiles = []; + + /** + * List of controllers actions + * + * Format: array( + * '{Router_Id}' => '{Route_Id}' => '{Controller_Name}' => '{Action_Name}' => [{'Module_Name'}] + * ) + * + * @var array + */ + private $actions = []; + + /** + * List of reserved words + * + * @see \Magento\Framework\App\Router\ActionList + * @var array + */ + private $reservedWords = [ + 'abstract' => 1, + 'and' => 1, + 'array' => 1, + 'as' => 1, + 'break' => 1, + 'callable' => 1, + 'case' => 1, + 'catch' => 1, + 'class' => 1, + 'clone' => 1, + 'const' => 1, + 'continue' => 1, + 'declare' => 1, + 'default' => 1, + 'die' => 1, + 'do' => 1, + 'echo' => 1, + 'else' => 1, + 'elseif' => 1, + 'empty' => 1, + 'enddeclare' => 1, + 'endfor' => 1, + 'endforeach' => 1, + 'endif' => 1, + 'endswitch' => 1, + 'endwhile' => 1, + 'eval' => 1, + 'exit' => 1, + 'extends' => 1, + 'final' => 1, + 'for' => 1, + 'foreach' => 1, + 'function' => 1, + 'global' => 1, + 'goto' => 1, + 'if' => 1, + 'implements' => 1, + 'include' => 1, + 'instanceof' => 1, + 'insteadof' => 1, + 'interface' => 1, + 'isset' => 1, + 'list' => 1, + 'namespace' => 1, + 'new' => 1, + 'or' => 1, + 'print' => 1, + 'private' => 1, + 'protected' => 1, + 'public' => 1, + 'require' => 1, + 'return' => 1, + 'static' => 1, + 'switch' => 1, + 'throw' => 1, + 'trait' => 1, + 'try' => 1, + 'unset' => 1, + 'use' => 1, + 'var' => 1, + 'while' => 1, + 'xor' => 1, + 'void' => 1, + ]; + + /** + * Provide routing declaration by router_id + * + * @param string $routerId + * @return array + * @throws \Exception + */ + public function getRoutes(string $routerId = ''): array + { + $routes = []; + if (!$routerId) { + foreach ($this->getRoutersMap() as $routesByRouterType) { + $routes = array_merge_recursive($routes, $routesByRouterType); + } + array_walk( + $routes, + function (&$modules) { + $modules = array_unique($modules); + } + ); + } else { + $routes = $this->getRoutersMap()[$routerId] ?? []; + } + return $routes; + } + + /** + * Provide dependencies for a specific URL path + * + * @param string $routeId + * @param string $controllerName + * @param string $actionName + * @return array + * @throws \Exception + */ + public function getDependencyByRoutePath( + string $routeId, + string $controllerName, + string $actionName = UrlInterface::DEFAULT_ACTION_NAME + ): array { + $routeId = strtolower($routeId); + $controllerName = strtolower($controllerName); + $actionName = strtolower($actionName); + + if (isset($this->reservedWords[$actionName])) { + $actionName .= 'action'; + } + + $dependencies = []; + foreach ($this->getRouterTypes() as $routerId) { + if (isset($this->getActionsMap()[$routerId][$routeId][$controllerName][$actionName])) { + $dependencies = array_merge( + $dependencies, + $this->getActionsMap()[$routerId][$routeId][$controllerName][$actionName] + ); + } + } + + if (empty($dependencies)) { + throw new NotFoundException(__('Invalid URL path: %1', implode('/', [$routeId, $controllerName, $actionName]))); + } + return $dependencies; + } + + /** + * Provide a list of router type + * + * @return array + * @throws \Exception + */ + private function getRouterTypes() + { + return array_keys($this->getActionsMap()); + } + + /** + * Provide routing declaration + * + * @return array + * @throws \Exception + */ + private function getRoutersMap() + { + if (empty($this->routers)) { + foreach ($this->getListRoutesXml() as $module => $configFiles) { + foreach ($configFiles as $configFile) { + $this->processConfigFile($module, $configFile); + } + } + } + + return $this->routers; + } + + /** + * Update routers map for the module basing on the routing config file + * + * @param string $module + * @param string $configFile + * + * @return void + */ + private function processConfigFile($module, $configFile) + { + // Read module's routes.xml file + $config = simplexml_load_file($configFile); + + $routers = $config->xpath("/config/router"); + foreach ($routers as $router) { + $routerId = (string)$router['id']; + foreach ($router->xpath('route') as $route) { + $routeId = (string)$route['id']; + if (!isset($this->routers[$routerId][$routeId])) { + $this->routers[$routerId][$routeId] = []; + } + if (!in_array($module, $this->routers[$routerId][$routeId])) { + $this->routers[$routerId][$routeId][] = $module; + } + } + } + } + + /** + * Prepare the list of routes.xml files (by modules) + * + * @throws \Exception + */ + private function getListRoutesXml() + { + if (empty($this->routeConfigFiles)) { + $files = Files::init()->getConfigFiles('*/routes.xml', [], false); + $pattern = '/(?<namespace>[A-Z][a-z]+)[_\/\\\\](?<module>[A-Z][a-zA-Z]+)/'; + foreach ($files as $file) { + if (preg_match($pattern, $file, $matches)) { + $module = $matches['namespace'] . '\\' . $matches['module']; + $this->routeConfigFiles[$module][] = $file; + } + } + } + return $this->routeConfigFiles; + } + + /** + * Provide a list of available actions + * + * @return array + * @throws \Exception + */ + private function getActionsMap(): array + { + if (empty($this->actions)) { + $files = Files::init()->getPhpFiles(Files::INCLUDE_APP_CODE); + $actionsMap = []; + foreach ($this->getRoutersMap() as $routerId => $routes) { + foreach ($routes as $routeId => $dependencies) { + $actionsMapPerArea[$routeId] = []; + foreach ($dependencies as $module) { + $moduleActions = $this->getModuleActionsMapping($module, $routerId, $files); + $actionsMapPerArea[$routeId] = + array_merge_recursive($actionsMapPerArea[$routeId], $moduleActions); + } + } + $actionsMap[$routerId] = $actionsMapPerArea; + } + $this->actions = $actionsMap; + } + + return $this->actions; + } + + /** + * Provide a list of available module actions by router_id + * + * @param $module + * @param $routerId + * @param array $files + * @return array + */ + private function getModuleActionsMapping($module, $routerId, array $files): array + { + $subdirectoryPattern = str_replace('\\', DIRECTORY_SEPARATOR, $module); + $subdirectoryPattern .= DIRECTORY_SEPARATOR . 'Controller/'; + if (array_search($routerId, [Area::AREA_ADMINHTML, Area::AREA_ADMIN], true) !== false) { + $subdirectoryPattern .= ucfirst(Area::AREA_ADMINHTML) . DIRECTORY_SEPARATOR; + } else { + $subdirectoryPattern .= '(?!' . ucfirst(Area::AREA_ADMINHTML) . ')'; + } + + $actions = preg_grep('~' . $subdirectoryPattern . '~', $files); + + $actionsPattern = '#' . $subdirectoryPattern . '(?<controller>\S+)/' + . '(?<action_name>\w+)\.php$#'; + + $moduleActionsMapping = []; + foreach ($actions as $action) { + if (preg_match($actionsPattern, $action, $matches)) { + $controllerName = strtolower(str_replace('/', '_', $matches['controller'])); + $actionName = strtolower($matches['action_name']); + if (!isset($moduleActionsMapping[$controllerName][$actionName])) { + $moduleActionsMapping[$controllerName][$actionName] = []; + } + $moduleActionsMapping[$controllerName][$actionName][] = $module; + } + } + + return $moduleActionsMapping; + } +} diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php index 9c0380260293..d77ff4ea5a4e 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php @@ -17,6 +17,7 @@ use Magento\TestFramework\Dependency\PhpRule; use Magento\TestFramework\Dependency\ReportsConfigRule; use Magento\TestFramework\Dependency\AnalyticsConfigRule; +use Magento\TestFramework\Dependency\Route\RouteMapper; use Magento\TestFramework\Dependency\VirtualType\VirtualTypeMapper; /** @@ -66,17 +67,6 @@ class DependencyTest extends \PHPUnit\Framework\TestCase */ protected static $_listConfigXml = []; - /** - * List of routes.xml files by modules - * - * Format: array( - * '{Module_Name}' => '{Filename}' - * ) - * - * @var array - */ - protected static $_listRoutesXml = []; - /** * List of analytics.xml * @@ -88,17 +78,6 @@ class DependencyTest extends \PHPUnit\Framework\TestCase */ protected static $_listAnalyticsXml = []; - /** - * List of routers - * - * Format: array( - * '{Router}' => '{Module_Name}' - * ) - * - * @var array - */ - protected static $_mapRouters = []; - /** * List of layout blocks * @@ -167,8 +146,15 @@ class DependencyTest extends \PHPUnit\Framework\TestCase */ private static $whiteList = []; + /** + * @var RouteMapper + */ + private static $routeMapper = null; + /** * Sets up data + * + * @throws \Exception */ public static function setUpBeforeClass() { @@ -181,13 +167,12 @@ public static function setUpBeforeClass() ); } + self::$routeMapper = new RouteMapper(); self::$_namespaces = implode('|', Files::init()->getNamespaces()); self::_prepareListConfigXml(); - self::_prepareListRoutesXml(); self::_prepareListAnalyticsXml(); - self::_prepareMapRouters(); self::_prepareMapLayoutBlocks(); self::_prepareMapLayoutHandles(); @@ -232,20 +217,23 @@ protected static function _initThemes() /** * Create rules objects + * + * @throws \Exception */ protected static function _initRules() { - $replaceFilePattern = str_replace('\\', '/', realpath(__DIR__)) . '/_files/dependency_test/tables_*.php'; + $replaceFilePattern = str_replace('\\', '/', realpath(__DIR__)) + . '/_files/dependency_test/tables_*.php'; $dbRuleTables = []; foreach (glob($replaceFilePattern) as $fileName) { //phpcs:ignore Generic.PHP.NoSilencedErrors $dbRuleTables = array_merge($dbRuleTables, @include $fileName); } self::$_rulesInstances = [ - new PhpRule(self::$_mapRouters, self::$_mapLayoutBlocks), + new PhpRule(self::$routeMapper->getRoutes(), self::$_mapLayoutBlocks), new DbRule($dbRuleTables), new LayoutRule( - self::$_mapRouters, + self::$routeMapper->getRoutes(), self::$_mapLayoutBlocks, self::$_mapLayoutHandles ), @@ -298,6 +286,7 @@ function ($matches) use ($contents, &$contentsWithoutHtml) { /** * @inheritdoc + * @throws \Exception */ public function testUndeclared() { @@ -440,13 +429,6 @@ public function collectRedundant() { $schemaDependencyProvider = new DeclarativeSchemaDependencyProvider(); - /** TODO: Remove this temporary solution after MC-5806 is closed */ - $filePattern = __DIR__ . '/_files/dependency_test/undetected_dependencies_*.php'; - $undetectedDependencies = []; - foreach (glob($filePattern) as $fileName) { - $undetectedDependencies = array_merge($undetectedDependencies, require $fileName); - } - foreach (array_keys(self::$mapDependencies) as $module) { $declared = $this->_getDependencies($module, self::TYPE_HARD, self::MAP_TYPE_DECLARED); $found = array_merge( @@ -454,10 +436,6 @@ public function collectRedundant() $this->_getDependencies($module, self::TYPE_SOFT, self::MAP_TYPE_FOUND), $schemaDependencyProvider->getDeclaredExistingModuleDependencies($module) ); - /** TODO: Remove this temporary solution after MC-5806 is closed */ - if (!empty($undetectedDependencies[$module])) { - $found = array_merge($found, $undetectedDependencies[$module]); - } $found['Magento\Framework'] = 'Magento\Framework'; $this->_setDependencies($module, self::TYPE_HARD, self::MAP_TYPE_REDUNDANT, array_diff($declared, $found)); @@ -557,6 +535,8 @@ public function getAllFiles() /** * Prepare list of config.xml files (by modules). + * + * @throws \Exception */ protected static function _prepareListConfigXml() { @@ -569,22 +549,10 @@ protected static function _prepareListConfigXml() } } - /** - * Prepare list of routes.xml files (by modules) - */ - protected static function _prepareListRoutesXml() - { - $files = Files::init()->getConfigFiles('*/routes.xml', [], false); - foreach ($files as $file) { - if (preg_match('/(?<namespace>[A-Z][a-z]+)[_\/\\\\](?<module>[A-Z][a-zA-Z]+)/', $file, $matches)) { - $module = $matches['namespace'] . '\\' . $matches['module']; - self::$_listRoutesXml[$module][] = $file; - } - } - } - /** * Prepare list of analytics.xml files + * + * @throws \Exception */ protected static function _prepareListAnalyticsXml() { @@ -597,57 +565,10 @@ protected static function _prepareListAnalyticsXml() } } - /** - * Prepare map of routers - */ - protected static function _prepareMapRouters() - { - $pattern = '/(?<namespace>[A-Z][a-z]+)[_\/\\\\](?<module>[A-Z][a-zA-Z]+)\/Controller\/' . - '(?<path>[\/\w]*).php/'; - - $files = Files::init()->getPhpFiles(Files::INCLUDE_APP_CODE | Files::INCLUDE_NON_CLASSES); - foreach ($files as $file) { - if (preg_match($pattern, $file, $matches)) { - $module = $matches['namespace'] . '\\' . $matches['module']; - if (!empty(self::$_listRoutesXml[$module])) { - foreach (self::$_listRoutesXml[$module] as $configFile) { - self::updateRoutersMap($module, $configFile); - } - } - } - } - } - - /** - * Update routers map for the module basing on the routing config file - * - * @param string $module - * @param string $configFile - * - * @return void - */ - private static function updateRoutersMap($module, $configFile) - { - // Read module's routes.xml file - $config = simplexml_load_file($configFile); - $nodes = $config->xpath("/config/router/*"); - foreach ($nodes as $node) { - $id = (string)$node['id']; - if ($id != 'adminhtml' && '' == (string)$node['frontName']) { - // Exclude overridden routers - continue; - } - if (!isset(self::$_mapRouters[$id])) { - self::$_mapRouters[$id] = []; - } - if (!in_array($module, self::$_mapRouters[$id])) { - self::$_mapRouters[$id][] = $module; - } - } - } - /** * Prepare map of layout blocks + * + * @throws \Exception */ protected static function _prepareMapLayoutBlocks() { @@ -676,6 +597,8 @@ protected static function _prepareMapLayoutBlocks() /** * Prepare map of layout handles + * + * @throws \Exception */ protected static function _prepareMapLayoutHandles() { diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/undetected_dependencies_ce.php b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/undetected_dependencies_ce.php deleted file mode 100644 index 407f57ee5125..000000000000 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/undetected_dependencies_ce.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -declare(strict_types=1); -return [ - "Magento\Search" => ["Magento\CatalogSearch"] -]; From ac9df79e145c9a3d86b1c177fbeea8437aa17660 Mon Sep 17 00:00:00 2001 From: Yurii Borysov <yurii_borysov@epam.com> Date: Wed, 10 Apr 2019 12:08:27 +0300 Subject: [PATCH 073/209] MAGETWO-99509: Download Option not working in Exports - Fix delete and download file failure, when appending secret key to url is enabled --- .../ImportExport/Controller/Adminhtml/Export/File/Delete.php | 2 +- .../ImportExport/Controller/Adminhtml/Export/File/Download.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Delete.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Delete.php index 6996ba90c3e1..aade1abc3f5d 100644 --- a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Delete.php +++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Delete.php @@ -25,7 +25,7 @@ class Delete extends ExportController implements HttpGetActionInterface /** * url to this controller */ - const URL = 'admin/export_file/delete'; + const URL = 'adminhtml/export_file/delete'; /** * @var Filesystem diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php index 32385e62a5dc..f6cb368ea2b2 100644 --- a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php +++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php @@ -23,7 +23,7 @@ class Download extends ExportController implements HttpGetActionInterface /** * url to this controller */ - const URL = 'admin/export_file/download/'; + const URL = 'adminhtml/export_file/download/'; /** * @var FileFactory From f1e99e2ab6a3f1dc205acd0c22905935e4250e8d Mon Sep 17 00:00:00 2001 From: Davit_Zakharyan <davit_zakharyan@epam.com> Date: Wed, 8 May 2019 14:46:47 +0400 Subject: [PATCH 074/209] MAGETWO-99509: Download Option not working in Exports - Added automated test script. --- .../Mftf/Section/AdminExportMainSection.xml | 1 + .../AdminCheckThatCSVCanBeExportedTest.xml | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml diff --git a/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml b/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml index da1d928607e7..76a11d00139d 100644 --- a/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml +++ b/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml @@ -9,6 +9,7 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminExportMainSection"> <element name="entityType" type="select" selector="#entity"/> + <element name="exportFileFormat" type="select" selector="#file_format"/> <element name="entityAttributes" type="select" selector="#export_filter_form"/> </section> </sections> diff --git a/app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml b/app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml new file mode 100644 index 000000000000..e5a34c4302ae --- /dev/null +++ b/app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminCheckThatCSVCanBeExportedTest"> + <annotations> + <title value="Check that CSV can be exported"/> + <description value="Check that CSV can be exported"/> + <features value="ImportExport"/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-99457"/> + <useCaseId value="MAGETWO-98703"/> + <group value="importexport"/> + </annotations> + <before> + <!-- Create category and simple product, then log in --> + <comment userInput="Create category and simple product, then log in" stepKey="createDataAndLogIn"/> + <createData entity="ApiCategory" stepKey="createCategory"/> + <createData entity="ApiSimpleProduct" stepKey="createProduct"> + <requiredEntity createDataKey="createCategory"/> + </createData> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + </before> + <after> + <!-- Delete exported file, created data and log out --> + <comment userInput="Delete exported file, created data and log out" stepKey="deleteCreatedData"/> + <actionGroup ref="deleteExportedFile" stepKey="deleteExportedFile"> + <argument name="rowIndex" value="0"/> + </actionGroup> + <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> + <deleteData createDataKey="createProduct" stepKey="deleteProduct"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <!-- Go to System -> Data Transfer -> Export page --> + <comment userInput="Go to System -> Data Transfer -> Export page" stepKey="goToAdminExportIndexPage"/> + <amOnPage url="{{AdminExportIndexPage.url}}" stepKey="navigateToAdminExportIndexPage"/> + <waitForPageLoad stepKey="waitPageToLoad"/> + <!-- Export all products --> + <comment userInput="Export all products" stepKey="exportAllProds"/> + <actionGroup ref="exportAllProducts" stepKey="exportAllProducts"/> + <!-- Run cron --> + <comment userInput="Run cron" stepKey="cronRun"/> + <magentoCLI command="cron:run" stepKey="runCron"/> + <!-- Download CSV file --> + <comment userInput="Download CSV file" stepKey="downloadCSVFile"/> + <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts"> + <argument name="rowIndex" value="0"/> + </actionGroup> + </test> +</tests> From 450a1763226b07a995cb030b0db2b704e08662ae Mon Sep 17 00:00:00 2001 From: Stsiapan Korf <Stsiapan_Korf@epam.com> Date: Tue, 21 May 2019 13:08:56 +0000 Subject: [PATCH 075/209] MAGETWO-99509: Download Option not working in Exports - Fix static tests --- .../ImportExport/Controller/Adminhtml/Export/File/Download.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php index f6cb368ea2b2..aca7efef72b2 100644 --- a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php +++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/File/Download.php @@ -72,6 +72,7 @@ public function execute() DirectoryList::VAR_DIR ); } + // phpcs:ignore Magento2.Exceptions.ThrowCatch } catch (LocalizedException | \Exception $exception) { throw new LocalizedException(__('There are no export file with such name %1', $fileName)); } From c2297c78627d728ae96188380c5b7bfd19dfd1b3 Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Tue, 28 May 2019 02:51:00 +0300 Subject: [PATCH 076/209] MAGETWO-88905: Import Customer ("gender" field) issue - Static tests fixes --- .../Model/Import/Customer.php | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php index 01b790191610..14759bd130f2 100644 --- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php +++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php @@ -525,10 +525,8 @@ protected function _importData() if (!isset($attributesToSave[$tableName])) { $attributesToSave[$tableName] = []; } - $attributesToSave[$tableName] = array_diff_key( - $attributesToSave[$tableName], - $customerAttributes - ) + $customerAttributes; + $attributes = array_diff_key($attributesToSave[$tableName], $customerAttributes); + $attributesToSave[$tableName] = $attributes + $customerAttributes; } } } @@ -584,13 +582,9 @@ protected function _validateRowForUpdate(array $rowData, $rowNumber) $this->addRowError(self::ERROR_INVALID_STORE, $rowNumber); } // check password - if (isset( - $rowData['password'] - ) && strlen( - $rowData['password'] - ) && $this->string->strlen( - $rowData['password'] - ) < self::MIN_PASSWORD_LENGTH + if (isset($rowData['password']) + && strlen($rowData['password']) + && $this->string->strlen($rowData['password']) < self::MIN_PASSWORD_LENGTH ) { $this->addRowError(self::ERROR_PASSWORD_LENGTH, $rowNumber); } From 7b990ecd515ef9c033ed30e142324e5817dd2635 Mon Sep 17 00:00:00 2001 From: Aliaksei_Manenak <Aliaksei_Manenak@epam.com> Date: Tue, 28 May 2019 15:25:00 +0300 Subject: [PATCH 077/209] MAGETWO-59400: Invalid join condition in Product Flat Indexer - Fix sql queries. --- .../Indexer/Product/Flat/AbstractAction.php | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php index 3b63a90d4c3a..ebad10e19762 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php @@ -169,8 +169,7 @@ protected function _reindex($storeId, array $changedIds = []) } /** - * Retrieve Product Type Instances - * as key - type code, value - instance model + * Retrieve Product Type Instances as key - type code, value - instance model * * @return array */ @@ -213,17 +212,19 @@ protected function _updateRelationProducts($storeId, $productIds = null) ) { $columns = $this->_productIndexerHelper->getFlatColumns(); $fieldList = array_keys($columns); - unset($columns['entity_id']); - unset($columns['child_id']); - unset($columns['is_child']); + unset( + $columns['entity_id'], + $columns['child_id'], + $columns['is_child'] + ); /** @var $select \Magento\Framework\DB\Select */ $select = $this->_connection->select()->from( ['t' => $this->_productIndexerHelper->getTable($relation->getTable())], - [$relation->getChildFieldName(), new \Zend_Db_Expr('1')] + ['entity_table.entity_id', $relation->getChildFieldName(), new \Zend_Db_Expr('1')] )->join( ['entity_table' => $this->_connection->getTableName('catalog_product_entity')], - 'entity_table.' . $metadata->getLinkField() . 't.' . $relation->getParentFieldName(), - [$relation->getParentFieldName() => 'entity_table.entity_id'] + "entity_table.{$metadata->getLinkField()} = t.{$relation->getParentFieldName()}", + [] )->join( ['e' => $this->_productIndexerHelper->getFlatTableName($storeId)], "e.entity_id = t.{$relation->getChildFieldName()}", @@ -232,10 +233,10 @@ protected function _updateRelationProducts($storeId, $productIds = null) if ($relation->getWhere() !== null) { $select->where($relation->getWhere()); } - if ($productIds !== null) { + if (!empty($productIds)) { $cond = [ $this->_connection->quoteInto("{$relation->getChildFieldName()} IN(?)", $productIds), - $this->_connection->quoteInto("entity_table.entity_id IN(?)", $productIds), + $this->_connection->quoteInto('entity_table.entity_id IN(?)', $productIds), ]; $select->where(implode(' OR ', $cond)); @@ -273,15 +274,11 @@ protected function _cleanRelationProducts($storeId) $select = $this->_connection->select()->distinct( true )->from( - ['t' => $this->_productIndexerHelper->getTable($relation->getTable())], - [] - )->join( - ['entity_table' => $this->_connection->getTableName('catalog_product_entity')], - 'entity_table.' . $metadata->getLinkField() . 't.' . $relation->getParentFieldName(), - [$relation->getParentFieldName() => 'entity_table.entity_id'] + $this->_productIndexerHelper->getTable($relation->getTable()), + $relation->getParentFieldName() ); $joinLeftCond = [ - "e.entity_id = entity_table.entity_id", + "e.{$metadata->getLinkField()} = t.{$relation->getParentFieldName()}", "e.child_id = t.{$relation->getChildFieldName()}", ]; if ($relation->getWhere() !== null) { @@ -302,7 +299,7 @@ protected function _cleanRelationProducts($storeId) 'e.is_child = ?', 1 )->where( - 'e.entity_id IN(?)', + "e.{$metadata->getLinkField()} IN(?)", $entitySelect )->where( "t.{$relation->getChildFieldName()} IS NULL" @@ -335,6 +332,8 @@ protected function _isFlatTableExists($storeId) } /** + * Get Metadata Pool + * * @return \Magento\Framework\EntityManager\MetadataPool */ private function getMetadataPool() From f4098e2618d6a02d3fcc79564b94464d96da0fed Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Tue, 28 May 2019 17:12:16 +0300 Subject: [PATCH 078/209] MAGETWO-91589: Slow query delete on sub SELECT query - Added integration test --- .../Model/CategoryUrlRewriteGeneratorTest.php | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGeneratorTest.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGeneratorTest.php index cfa82b90e2f6..1c2ee602c3bd 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGeneratorTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGeneratorTest.php @@ -8,7 +8,9 @@ use Magento\Catalog\Api\CategoryRepositoryInterface; use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\CategoryRepository; use Magento\Catalog\Model\ProductRepository; +use Magento\CatalogUrlRewrite\Model\ResourceModel\Category\Product; use Magento\Framework\Exception\CouldNotSaveException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\NoSuchEntityException; @@ -318,6 +320,53 @@ public function testGenerateUrlRewritesWithoutGenerateProductRewrites() $this->assertResults($productExpectedResult, $actualResults); } + /** + * Check number of records after removing product + * + * @magentoDataFixture Magento/CatalogUrlRewrite/_files/categories_with_products.php + * @magentoConfigFixture default/catalog/seo/generate_category_product_rewrites 1 + * @magentoDbIsolation enabled + * @magentoAppIsolation enabled + * + * @return void + */ + public function testRemoveCatalogUrlRewrites() + { + /** @var CategoryRepository $categoryRepository */ + $categoryRepository = $this->objectManager->create(CategoryRepository::class); + $category = $categoryRepository->get(5); + $categoryId = $category->getId(); + + /** @var ProductRepository $productRepository */ + $productRepository = $this->objectManager->create(ProductRepository::class); + $product = $productRepository->get('12345'); + $productId = $product->getId(); + + $countBeforeRemoving = $this->getCountOfRewrites($productId, $categoryId); + $productRepository->delete($product); + $countAfterRemoving = $this->getCountOfRewrites($productId, $categoryId); + $this->assertEquals($countBeforeRemoving - 1, $countAfterRemoving); + } + + /** + * Get count of records in table + * + * @param $productId + * @param $categoryId + * @return string + */ + private function getCountOfRewrites($productId, $categoryId): string + { + /** @var Product $model */ + $model = $this->objectManager->get(Product::class); + $connection = $model->getConnection(); + $select = $connection->select(); + $select->from(Product::TABLE_NAME, 'COUNT(*)'); + $select->where('category_id = ?', $categoryId); + $select->where('product_id = ?', $productId); + return $connection->fetchOne($select); + } + /** * @param array $expected * @param array $actual From 17a806242d0e1730e7e15cb0f124410cb84be7cd Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Tue, 28 May 2019 17:20:46 +0300 Subject: [PATCH 079/209] MAGETWO-63599: [GitHub] catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes #8204 - Added integration test --- .../Command/ImageResizeCommandTest.php | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 dev/tests/integration/testsuite/Magento/MediaStorage/Console/Command/ImageResizeCommandTest.php diff --git a/dev/tests/integration/testsuite/Magento/MediaStorage/Console/Command/ImageResizeCommandTest.php b/dev/tests/integration/testsuite/Magento/MediaStorage/Console/Command/ImageResizeCommandTest.php new file mode 100644 index 000000000000..2cdfb5e7e4e6 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/MediaStorage/Console/Command/ImageResizeCommandTest.php @@ -0,0 +1,107 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\MediaStorage\Console\Command; + +use Magento\Catalog\Model\Product\Gallery\Processor; +use Magento\Catalog\Model\ProductRepository; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\ObjectManagerInterface; +use Magento\TestFramework\Helper\Bootstrap; +use Symfony\Component\Console\Tester\CommandTester; + +/** + * Test for \Magento\MediaStorage\Console\Command\ImagesResizeCommand. + * + */ +class ImageResizeCommandTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var CommandTester + */ + private $tester; + + /** + * @var ImagesResizeCommand + */ + private $command; + + /** + * @var ObjectManagerInterface + */ + private $objectManager; + + /** + * @var WriteInterface + */ + private $mediaDirectory; + + /** + * @var Filesystem + */ + private $filesystem; + + /** + * @var string + */ + private $fileName; + + /** + * @inheritdoc + */ + public function setUp() + { + $this->fileName = 'image.jpg'; + $this->objectManager = Bootstrap::getObjectManager(); + $this->command = $this->objectManager->get(ImagesResizeCommand::class); + $this->tester = new CommandTester($this->command); + $this->filesystem = $this->objectManager->get(Filesystem::class); + $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); + } + + /** + * Test command with zero byte file + * + * @magentoDataFixture Magento/Catalog/_files/product_simple.php + * @magentoDataFixture Magento/Catalog/_files/product_image.php + * + * @return void + */ + public function testExecuteWithZeroByteImage() + { + $this->mediaDirectory->writeFile($this->fileName, ''); + + /** @var ProductRepository $productRepository */ + $productRepository = $this->objectManager->create(ProductRepository::class); + $product = $productRepository->getById(1); + + /** @var Processor $mediaGalleryProcessor */ + $mediaGalleryProcessor = $this->objectManager->get(Processor::class); + $mediaGalleryProcessor->addImage( + $product, + $this->mediaDirectory->getAbsolutePath($this->fileName), + ['image','thumbnail','small_image'], + false, + false + ); + + $product->save(); + + $this->tester->execute([]); + $this->assertContains('Wrong file', $this->tester->getDisplay()); + } + + /** + * @inheritDoc + */ + public function tearDown() + { + $this->mediaDirectory->getDriver()->deleteFile($this->mediaDirectory->getAbsolutePath($this->fileName)); + } +} From df836321b12fa27baec764ab8091a9b5debb723e Mon Sep 17 00:00:00 2001 From: Mikalai Shostka <Mikalai_Shostka@epam.com> Date: Wed, 29 May 2019 17:00:29 +0300 Subject: [PATCH 080/209] MAGETWO-93061: CMS page of second website with same URLkey as first website, show content of First website instead of second website content. - Fix static test --- .../Model/StoreSwitcher/RewriteUrl.php | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php b/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php index a4bca19cfc04..16e9c37ee4e5 100644 --- a/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php +++ b/app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php @@ -63,10 +63,12 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s } $oldStoreId = $fromStore->getId(); - $oldRewrite = $this->urlFinder->findOneByData([ - UrlRewrite::REQUEST_PATH => $urlPath, - UrlRewrite::STORE_ID => $oldStoreId, - ]); + $oldRewrite = $this->urlFinder->findOneByData( + [ + UrlRewrite::REQUEST_PATH => $urlPath, + UrlRewrite::STORE_ID => $oldStoreId, + ] + ); if ($oldRewrite) { $targetUrl = $targetStore->getBaseUrl(); // look for url rewrite match on the target store @@ -75,13 +77,13 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s $targetUrl .= $currentRewrite->getRequestPath(); } } else { - $existingRewrite = $this->urlFinder->findOneByData([ - UrlRewrite::REQUEST_PATH => $urlPath - ]); - $currentRewrite = $this->urlFinder->findOneByData([ - UrlRewrite::REQUEST_PATH => $urlPath, - UrlRewrite::STORE_ID => $targetStore->getId(), - ]); + $existingRewrite = $this->urlFinder->findOneByData([UrlRewrite::REQUEST_PATH => $urlPath]); + $currentRewrite = $this->urlFinder->findOneByData( + [ + UrlRewrite::REQUEST_PATH => $urlPath, + UrlRewrite::STORE_ID => $targetStore->getId(), + ] + ); if ($existingRewrite && !$currentRewrite) { /** @var \Magento\Framework\App\Response\Http $response */ @@ -100,15 +102,19 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s */ private function findCurrentRewrite(UrlRewrite $oldRewrite, StoreInterface $targetStore) { - $currentRewrite = $this->urlFinder->findOneByData([ - UrlRewrite::TARGET_PATH => $oldRewrite->getTargetPath(), - UrlRewrite::STORE_ID => $targetStore->getId(), - ]); - if (!$currentRewrite) { - $currentRewrite = $this->urlFinder->findOneByData([ - UrlRewrite::REQUEST_PATH => $oldRewrite->getTargetPath(), + $currentRewrite = $this->urlFinder->findOneByData( + [ + UrlRewrite::TARGET_PATH => $oldRewrite->getTargetPath(), UrlRewrite::STORE_ID => $targetStore->getId(), - ]); + ] + ); + if (!$currentRewrite) { + $currentRewrite = $this->urlFinder->findOneByData( + [ + UrlRewrite::REQUEST_PATH => $oldRewrite->getTargetPath(), + UrlRewrite::STORE_ID => $targetStore->getId(), + ] + ); } return $currentRewrite; } From 47f615952a20493cc2c0995d69d9eb8b91eae29f Mon Sep 17 00:00:00 2001 From: vprohorov <prohorov.vital@gmail.com> Date: Thu, 30 May 2019 17:59:58 +0300 Subject: [PATCH 081/209] MAGETWO-63599: [GitHub] catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes #8204 - Static test fixes --- lib/internal/Magento/Framework/Image/Adapter/Gd2.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php index d423fcfc6773..df6c7652758c 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php +++ b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php @@ -324,10 +324,12 @@ public function checkAlpha($fileName) * Checks if image has alpha transparency * * @param resource $imageResource - * @param int $fileType one of the constants IMAGETYPE_* + * @param int $fileType * @param bool &$isAlpha * @param bool &$isTrueColor + * * @return boolean + * * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ private function _getTransparency($imageResource, $fileType, &$isAlpha = false, &$isTrueColor = false) From ec5a46f112a0a42cb498412eaf73b40a37b8ef82 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Thu, 30 May 2019 21:18:58 +0400 Subject: [PATCH 082/209] MAGETWO-64923: Duplicate products not showing on the frontend - Update automated test script --- .../Section/AdminCreateProductConfigurationsPanelSection.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml index 306e8cbecf02..5846d1f474ea 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml @@ -41,7 +41,7 @@ <element name="applySingleQuantityToEachSkus" type="radio" selector=".admin__field-label[for='apply-single-inventory-radio']" timeout="30"/> <element name="applyUniqueQuantityToEachSkus" type="radio" selector=".admin__field-label[for='apply-unique-inventory-radio']" timeout="30"/> <element name="selectQuantity" type="select" selector="#apply-single-price-input-qty" timeout="30"/> - <element name="applyUniqueQuantity" type="input" selector="//*[text()='{{option}}']/../..//input[contains(@id, 'apply-qty-input')]" parameterized="true"/> + <element name="applyUniqueQuantity" type="input" selector="//*[text()='{{option}}']/ancestor::div[contains(@class, 'admin__field _required')]//input[contains(@id, 'apply-qty-input')]" parameterized="true"/> <element name="applyUniqueImagesToEachSkus" type="radio" selector=".admin__field-label[for='apply-unique-images-radio']" timeout="30"/> <element name="applyUniquePricesToEachSkus" type="radio" selector=".admin__field-label[for='apply-unique-prices-radio']" timeout="30"/> <element name="selectImagesButton" type="select" selector="#apply-images-attributes" timeout="30"/> From 3602575d7d79ae757f6e71591e7e2a9636750767 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Fri, 31 May 2019 11:58:13 +0400 Subject: [PATCH 083/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values - Updated automated test script. --- ...nCheckConfigurableProductAttributeValueUniquenessTest.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml index 61cce181efe6..28d594dd072c 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml @@ -11,9 +11,8 @@ <test name="AdminCheckConfigurableProductAttributeValueUniquenessTest"> <annotations> <features value="ConfigurableProduct"/> - <stories value="Edit a configurable product in admin"/> - <title value="Check attribute value uniqueness in configurable products"/> - <description value="Check attribute value uniqueness in configurable products"/> + <title value="Attribute value validation (check for uniqueness) in configurable products"/> + <description value="Attribute value validation (check for uniqueness) in configurable products"/> <severity value="MAJOR"/> <testCaseId value="MAGETWO-99519"/> <useCaseId value="MAGETWO-99443"/> From b65c12e450fd82f4869833c2aff13bfd70e66ae7 Mon Sep 17 00:00:00 2001 From: Arnoud Beekman <arnoud.beekman@mediact.nl> Date: Thu, 16 May 2019 09:08:00 +0200 Subject: [PATCH 084/209] Do an empty check instead of isset check on image removed In some cases the 'removed' tag on the image is already set to an empty string in the data which will be loaded. Therefore the isset check fails which clears the image roles. On all other cases where this 'removed' tag is being validated with an empty or !empty. Therefor it seems safe to apply this here also. --- .../Catalog/Model/ProductRepository/MediaGalleryProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository/MediaGalleryProcessor.php b/app/code/Magento/Catalog/Model/ProductRepository/MediaGalleryProcessor.php index 70311954f63e..fdcf2956dbde 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository/MediaGalleryProcessor.php +++ b/app/code/Magento/Catalog/Model/ProductRepository/MediaGalleryProcessor.php @@ -231,7 +231,7 @@ private function processEntries(ProductInterface $product, array $newEntries, ar private function processMediaAttributes(ProductInterface $product, array $images): void { foreach ($images as $image) { - if (!isset($image['removed']) && !empty($image['types'])) { + if (empty($image['removed']) && !empty($image['types'])) { $this->processor->setMediaAttribute($product, $image['types'], $image['file']); } } From a592d46fb6b101ef65bf0f2a9b2b99e97d52430f Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Mon, 3 Jun 2019 15:09:54 +0300 Subject: [PATCH 085/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../Product/Attribute/CreateOptions.php | 6 ++-- .../js/variations/steps/attributes_values.js | 34 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php index 2788a4947aa4..8b4c8d29cd98 100644 --- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php +++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php @@ -115,15 +115,15 @@ private function checkUnique(ProductAttributeInterface $attribute, array $newOpt $allOptions = array_merge($originalOptions, $newOptions); $optionValues = array_map( function ($option) { - return $option['label']; + return $option['label'] ?? null; }, $allOptions ); - $uniqueValues = array_unique($optionValues); + $uniqueValues = array_unique(array_filter($optionValues)); $duplicates = array_diff_assoc($optionValues, $uniqueValues); if ($duplicates) { - throw new LocalizedException(__('Attributes must have unique option values')); + throw new LocalizedException(__('The value of attribute ""%1"" must be unique', $attribute->getName())); } } diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index 0287d10b247e..b470592529e8 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -148,22 +148,22 @@ define([ saveAttribute: function () { var errorMessage = $.mage.__('Select options for all attributes or remove unused attributes.'); - this.attributes.each(function (attribute) { + if (!this.attributes().length) { + throw new Error(errorMessage); + } + + _.each(this.attributes(), function (attribute) { attribute.chosen = []; if (!attribute.chosenOptions.getLength()) { throw new Error(errorMessage); } - attribute.chosenOptions.each(function (id) { + _.each(attribute.chosenOptions(), function (id) { attribute.chosen.push(attribute.options.findWhere({ id: id })); }); }); - - if (!this.attributes().length) { - throw new Error(errorMessage); - } }, /** @@ -188,10 +188,10 @@ define([ allOptions = [], attributesWithDuplicateOptions = []; - this.attributes.each(function (attribute) { + _.each(this.attributes(), function (attribute) { allOptions[attribute.id] = []; - attribute.options.each(function (element) { + _.each(attribute.options(), function (element) { var option = attribute.options.findWhere({ id: element.id }); @@ -200,16 +200,22 @@ define([ newOptions.push(option); } - if (typeof allOptions[attribute.id][option.label] !== 'undefined') { - attributesWithDuplicateOptions.push(attribute); - } + if (!_.isUndefined(option.label)) { + if (!_.isUndefined(allOptions[attribute.id][option.label])) { + attributesWithDuplicateOptions.push(attribute); + } - allOptions[attribute.id][option.label] = option.label; + allOptions[attribute.id][option.label] = option.label; + } }); }); if (attributesWithDuplicateOptions.length) { - throw new Error($.mage.__('Attributes must have unique option values')); + _.each(attributesWithDuplicateOptions, function (attribute) { + throw new Error($.mage.__( + 'The value of attribute ""%1"" must be unique').replace("\"%1\"", attribute.label) + ); + }); } if (!newOptions.length) { @@ -231,7 +237,7 @@ define([ return; } - this.attributes.each(function (attribute) { + _.each(this.attributes(), function (attribute) { _.each(savedOptions, function (newOptionId, oldOptionId) { var option = attribute.options.findWhere({ id: oldOptionId From d18aefbb766a42512a9dc249204e932a638a8cf6 Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Mon, 3 Jun 2019 16:27:06 -0500 Subject: [PATCH 086/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test --- .../Catalog/Block/Adminhtml/Product/Grid.php | 26 ++--- .../adminhtml/layout/catalog_product_grid.xml | 4 +- .../Checkout/Controller/Onepage/SaveOrder.php | 2 +- .../Magento/Review/Block/Adminhtml/Rss.php | 24 ++-- .../Magento/Sales/Block/Order/History.php | 20 +++- app/code/Magento/Sales/Block/Order/Recent.php | 11 +- .../TestFramework/Dependency/PhpRule.php | 103 +++++++++++------ .../Dependency/Route/RouteMapper.php | 18 +-- .../Exception/NoSuchActionException.php | 16 +++ .../Magento/Test/Integrity/DependencyTest.php | 108 +++++++++++++++--- .../dependency_test/whitelist/routes_ce.php | 10 ++ 11 files changed, 257 insertions(+), 85 deletions(-) create mode 100644 dev/tests/static/framework/Magento/TestFramework/Exception/NoSuchActionException.php create mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/whitelist/routes_ce.php diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php index 8f3a0793cc49..6774d5df3cd9 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php @@ -85,7 +85,7 @@ public function __construct( } /** - * @return void + * @inheritDoc */ protected function _construct() { @@ -99,7 +99,10 @@ protected function _construct() } /** + * Get store + * * @return Store + * @throws \Magento\Framework\Exception\NoSuchEntityException */ protected function _getStore() { @@ -108,7 +111,7 @@ protected function _getStore() } /** - * @return $this + * @inheritDoc */ protected function _prepareCollection() { @@ -136,7 +139,6 @@ protected function _prepareCollection() ); } if ($store->getId()) { - //$collection->setStoreId($store->getId()); $collection->addStoreFilter($store); $collection->joinAttribute( 'name', @@ -187,8 +189,7 @@ protected function _prepareCollection() } /** - * @param \Magento\Backend\Block\Widget\Grid\Column $column - * @return $this + * @inheritDoc */ protected function _addColumnFilterToCollection($column) { @@ -208,8 +209,9 @@ protected function _addColumnFilterToCollection($column) } /** - * @return $this + * @inheritDoc * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @throws \Exception */ protected function _prepareColumns() { @@ -364,16 +366,11 @@ protected function _prepareColumns() ] ); - $block = $this->getLayout()->getBlock('grid.bottom.links'); - if ($block) { - $this->setChild('grid.bottom.links', $block); - } - return parent::_prepareColumns(); } /** - * @return $this + * @inheritDoc */ protected function _prepareMassaction() { @@ -425,7 +422,7 @@ protected function _prepareMassaction() } /** - * @return string + * @inheritDoc */ public function getGridUrl() { @@ -433,8 +430,7 @@ public function getGridUrl() } /** - * @param \Magento\Catalog\Model\Product|\Magento\Framework\DataObject $row - * @return string + * @inheritDoc */ public function getRowUrl($row) { diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_grid.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_grid.xml index b42a78dfbe30..5d57c2d8f861 100644 --- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_grid.xml +++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_grid.xml @@ -8,6 +8,8 @@ <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd"> <update handle="formkey"/> <container name="root" label="Root"> - <block class="Magento\Catalog\Block\Adminhtml\Product\Grid" name="admin.product.grid"/> + <block class="Magento\Catalog\Block\Adminhtml\Product\Grid" name="admin.product.grid"> + <block class="Magento\Framework\View\Element\Text\ListText" name="grid.bottom.links"/> + </block> </container> </layout> diff --git a/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php b/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php index 12b725a8f6df..27d272330a8d 100644 --- a/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php +++ b/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php @@ -31,7 +31,7 @@ public function execute() $result = new DataObject(); try { $agreementsValidator = $this->_objectManager->get( - \Magento\CheckoutAgreements\Model\AgreementsValidator::class + \Magento\Checkout\Api\AgreementsValidatorInterface::class ); if (!$agreementsValidator->isValid(array_keys($this->getRequest()->getPost('agreement', [])))) { $result->setData('success', false); diff --git a/app/code/Magento/Review/Block/Adminhtml/Rss.php b/app/code/Magento/Review/Block/Adminhtml/Rss.php index 5d370115ea25..fd5737d21842 100644 --- a/app/code/Magento/Review/Block/Adminhtml/Rss.php +++ b/app/code/Magento/Review/Block/Adminhtml/Rss.php @@ -9,6 +9,7 @@ /** * Class Rss + * * @package Magento\Catalog\Block\Adminhtml\Rss */ class Rss extends \Magento\Backend\Block\AbstractBlock implements DataProviderInterface @@ -41,7 +42,7 @@ public function __construct( } /** - * {@inheritdoc} + * @inheritDoc */ public function getRssData() { @@ -55,11 +56,14 @@ public function getRssData() } $url = $this->getUrl('catalog/product/view', ['id' => $item->getId()]); - $reviewUrl = $this->getUrl('review/product/edit/', [ - 'id' => $item->getReviewId(), - '_secure' => true, - '_nosecret' => true - ]); + $reviewUrl = $this->getUrl( + 'review/product/edit/', + [ + 'id' => $item->getReviewId(), + '_secure' => true, + '_nosecret' => true + ] + ); $storeName = $this->storeManager->getStore($item->getStoreId())->getName(); $description = '<p>' . __('Product: <a href="%1" target="_blank">%2</a> <br/>', $url, $item->getName()) @@ -79,7 +83,7 @@ public function getRssData() } /** - * {@inheritdoc} + * @inheritDoc */ public function getCacheLifetime() { @@ -87,7 +91,7 @@ public function getCacheLifetime() } /** - * {@inheritdoc} + * @inheritDoc */ public function isAllowed() { @@ -95,7 +99,7 @@ public function isAllowed() } /** - * {@inheritdoc} + * @inheritDoc */ public function getFeeds() { @@ -103,7 +107,7 @@ public function getFeeds() } /** - * {@inheritdoc} + * @inheritDoc */ public function isAuthRequired() { diff --git a/app/code/Magento/Sales/Block/Order/History.php b/app/code/Magento/Sales/Block/Order/History.php index b7cc74382ded..c06a5d8b24c1 100644 --- a/app/code/Magento/Sales/Block/Order/History.php +++ b/app/code/Magento/Sales/Block/Order/History.php @@ -67,7 +67,7 @@ public function __construct( } /** - * @return void + * @inheritDoc */ protected function _construct() { @@ -76,8 +76,9 @@ protected function _construct() } /** - * @return CollectionFactoryInterface + * Provide order collection factory * + * @return CollectionFactoryInterface * @deprecated 100.1.1 */ private function getOrderCollectionFactory() @@ -89,6 +90,8 @@ private function getOrderCollectionFactory() } /** + * Get customer orders + * * @return bool|\Magento\Sales\Model\ResourceModel\Order\Collection */ public function getOrders() @@ -111,7 +114,7 @@ public function getOrders() } /** - * @return $this + * @inheritDoc */ protected function _prepareLayout() { @@ -130,6 +133,8 @@ protected function _prepareLayout() } /** + * Get Pager child block output + * * @return string */ public function getPagerHtml() @@ -138,6 +143,8 @@ public function getPagerHtml() } /** + * Get order view URL + * * @param object $order * @return string */ @@ -147,9 +154,12 @@ public function getViewUrl($order) } /** + * Get order track URL + * * @param object $order * @return string * @deprecated Action does not exist + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function getTrackUrl($order) { @@ -159,6 +169,8 @@ public function getTrackUrl($order) } /** + * Get reorder URL + * * @param object $order * @return string */ @@ -168,6 +180,8 @@ public function getReorderUrl($order) } /** + * Get customer account URL + * * @return string */ public function getBackUrl() diff --git a/app/code/Magento/Sales/Block/Order/Recent.php b/app/code/Magento/Sales/Block/Order/Recent.php index c91e75c6a218..79119c185134 100644 --- a/app/code/Magento/Sales/Block/Order/Recent.php +++ b/app/code/Magento/Sales/Block/Order/Recent.php @@ -71,7 +71,7 @@ public function __construct( } /** - * @return void + * @inheritDoc */ protected function _construct() { @@ -105,6 +105,8 @@ private function getRecentOrders() } /** + * Get order view URL + * * @param object $order * @return string */ @@ -114,9 +116,12 @@ public function getViewUrl($order) } /** + * Get order track URL + * * @param object $order * @return string * @deprecated Action does not exist + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function getTrackUrl($order) { @@ -126,7 +131,7 @@ public function getTrackUrl($order) } /** - * @return string + * @inheritDoc */ protected function _toHtml() { @@ -137,6 +142,8 @@ protected function _toHtml() } /** + * Get reorder URL + * * @param object $order * @return string */ diff --git a/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php b/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php index 8fe6172a8983..f4131c4c7d83 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php +++ b/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php @@ -5,11 +5,15 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\TestFramework\Dependency; use Magento\Framework\App\Utility\Files; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\UrlInterface; use Magento\TestFramework\Dependency\Route\RouteMapper; +use Magento\TestFramework\Exception\NoSuchActionException; /** * Rule to check the dependencies between modules based on references, getUrl and layout blocks @@ -68,19 +72,32 @@ class PhpRule implements RuleInterface */ private $routeMapper; + /** + * Whitelists for dependency check + * + * @var array + */ + private $whitelists; + /** * @param array $mapRouters * @param array $mapLayoutBlocks * @param array $pluginMap + * @param array $whitelists * @throws \Exception */ - public function __construct(array $mapRouters, array $mapLayoutBlocks, array $pluginMap = []) - { + public function __construct( + array $mapRouters, + array $mapLayoutBlocks, + array $pluginMap = [], + array $whitelists = [] + ) { $this->_mapRouters = $mapRouters; $this->_mapLayoutBlocks = $mapLayoutBlocks; $this->_namespaces = implode('|', \Magento\Framework\App\Utility\Files::init()->getNamespaces()); $this->pluginMap = $pluginMap ?: null; $this->routeMapper = new RouteMapper(); + $this->whitelists = $whitelists; } /** @@ -106,7 +123,7 @@ public function getDependencyInfo($currentModule, $fileType, $file, &$contents) ); $dependenciesInfo = $this->considerCaseDependencies( $dependenciesInfo, - $this->_caseGetUrl($currentModule, $contents, $file) + $this->_caseGetUrl($currentModule, $contents) ); $dependenciesInfo = $this->considerCaseDependencies( $dependenciesInfo, @@ -115,6 +132,16 @@ public function getDependencyInfo($currentModule, $fileType, $file, &$contents) return $dependenciesInfo; } + /** + * Get routes whitelist + * + * @return array + */ + private function getRoutesWhitelist(): array + { + return $this->whitelists['routes'] ?? []; + } + /** * Check references to classes and identifiers defined in other modules * @@ -181,6 +208,8 @@ private function getClassFromFilepath($filepath, $module) } /** + * Load DI configuration files + * * @return array * @throws \Exception */ @@ -251,48 +280,56 @@ private function isPluginDependency($dependent, $dependency) * * Ex.: getUrl('{path}') * - * @param $currentModule - * @param $contents + * @param string $currentModule + * @param string $contents * @return array + * @throws LocalizedException * @throws \Exception */ - protected function _caseGetUrl($currentModule, &$contents) + protected function _caseGetUrl(string $currentModule, string &$contents): array { - $pattern = '#(\->|:)(?<source>getUrl\(([\'"])(?<route_id>[a-z0-9\-_]{3,})/' - .'(?<controller_name>[a-z0-9\-_]+)(/(?<action_name>[a-z0-9\-_]+))?\3)#i'; + $pattern = '#(\->|:)(?<source>getUrl\(([\'"])(?<route_id>[a-z0-9\-_]{3,})' + .'(/(?<controller_name>[a-z0-9\-_]+))?(/(?<action_name>[a-z0-9\-_]+))?\3)#i'; $dependencies = []; if (!preg_match_all($pattern, $contents, $matches, PREG_SET_ORDER)) { return $dependencies; } - foreach ($matches as $item) { - $modules = $this->routeMapper->getDependencyByRoutePath( - $item['route_id'], - $item['controller_name'], - $item['action_name'] ?? UrlInterface::DEFAULT_ACTION_NAME - ); - if (!in_array($currentModule, $modules)) { - $dependencies[] = [ - 'module' => implode(" || ", $modules), - 'type' => RuleInterface::TYPE_HARD, - 'source' => $item['source'], - ]; + try { + foreach ($matches as $item) { + $modules = $this->routeMapper->getDependencyByRoutePath( + $item['route_id'], + $item['controller_name'] ?? UrlInterface::DEFAULT_CONTROLLER_NAME, + $item['action_name'] ?? UrlInterface::DEFAULT_ACTION_NAME + ); + if (!in_array($currentModule, $modules)) { + $dependencies[] = [ + 'module' => $modules, + 'type' => RuleInterface::TYPE_HARD, + 'source' => $item['source'], + ]; + } + } + } catch (NoSuchActionException $e) { + if (array_search($e->getMessage(), $this->getRoutesWhitelist()) === false) { + throw new LocalizedException(__('Invalid URL path: %1', $e->getMessage()), $e); } } + return $dependencies; } /** * Check layout blocks * - * @param $currentModule - * @param $fileType - * @param $file - * @param $contents + * @param string $currentModule + * @param string $fileType + * @param string $file + * @param string $contents * @return array */ - protected function _caseLayoutBlock($currentModule, $fileType, $file, &$contents) + protected function _caseLayoutBlock(string $currentModule, string $fileType, string $file, string &$contents): array { $pattern = '/[\->:]+(?<source>(?:getBlock|getBlockHtml)\([\'"](?<block>[\w\.\-]+)[\'"]\))/'; @@ -322,11 +359,11 @@ protected function _caseLayoutBlock($currentModule, $fileType, $file, &$contents /** * Get area from file path * - * @param $file - * @param $fileType + * @param string $file + * @param string $fileType * @return string|null */ - protected function _getAreaByFile($file, $fileType) + protected function _getAreaByFile(string $file, string $fileType): ?string { if ($fileType == 'php') { return null; @@ -346,12 +383,12 @@ protected function _getAreaByFile($file, $fileType) * 'source' // source text * ) * - * @param $currentModule - * @param $area - * @param $block + * @param string $currentModule + * @param string|null $area + * @param string $block * @return array */ - protected function _checkDependencyLayoutBlock($currentModule, $area, $block) + protected function _checkDependencyLayoutBlock(string $currentModule, ?string $area, string $block): array { if (isset($this->_mapLayoutBlocks[$area][$block]) || $area === null) { // CASE 1: No dependencies @@ -412,6 +449,8 @@ protected function _getUniqueDependencies($dependencies = []) } /** + * Merge dependencies + * * @param array $known * @param array $new * @return array diff --git a/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php b/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php index 79f2c1336f23..a3e5b6927e72 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php +++ b/dev/tests/static/framework/Magento/TestFramework/Dependency/Route/RouteMapper.php @@ -9,8 +9,7 @@ use Magento\Framework\App\Area; use Magento\Framework\App\Utility\Files; -use Magento\Framework\Exception\NotFoundException; -use Magento\Framework\UrlInterface; +use Magento\TestFramework\Exception\NoSuchActionException; /** * Route mapper based on routes.xml declarations @@ -155,12 +154,13 @@ function (&$modules) { * @param string $controllerName * @param string $actionName * @return array + * @throws NoSuchActionException * @throws \Exception */ public function getDependencyByRoutePath( string $routeId, string $controllerName, - string $actionName = UrlInterface::DEFAULT_ACTION_NAME + string $actionName ): array { $routeId = strtolower($routeId); $controllerName = strtolower($controllerName); @@ -181,7 +181,9 @@ public function getDependencyByRoutePath( } if (empty($dependencies)) { - throw new NotFoundException(__('Invalid URL path: %1', implode('/', [$routeId, $controllerName, $actionName]))); + throw new NoSuchActionException(implode('/', [$routeId, $controllerName, $actionName])); + } else { + $dependencies = array_unique($dependencies); } return $dependencies; } @@ -224,7 +226,7 @@ private function getRoutersMap() * * @return void */ - private function processConfigFile($module, $configFile) + private function processConfigFile(string $module, string $configFile) { // Read module's routes.xml file $config = simplexml_load_file($configFile); @@ -295,12 +297,12 @@ private function getActionsMap(): array /** * Provide a list of available module actions by router_id * - * @param $module - * @param $routerId + * @param string $module + * @param string $routerId * @param array $files * @return array */ - private function getModuleActionsMapping($module, $routerId, array $files): array + private function getModuleActionsMapping(string $module, string $routerId, array $files): array { $subdirectoryPattern = str_replace('\\', DIRECTORY_SEPARATOR, $module); $subdirectoryPattern .= DIRECTORY_SEPARATOR . 'Controller/'; diff --git a/dev/tests/static/framework/Magento/TestFramework/Exception/NoSuchActionException.php b/dev/tests/static/framework/Magento/TestFramework/Exception/NoSuchActionException.php new file mode 100644 index 000000000000..5ce432f8a183 --- /dev/null +++ b/dev/tests/static/framework/Magento/TestFramework/Exception/NoSuchActionException.php @@ -0,0 +1,16 @@ +<?php + +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\TestFramework\Exception; + +/** + * An exception is thrown if such a controller action does not exist + */ +class NoSuchActionException extends \Exception +{ +} diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php index d77ff4ea5a4e..1c50a3c43bf2 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php @@ -10,6 +10,7 @@ use Magento\Framework\App\Utility\Files; use Magento\Framework\Component\ComponentRegistrar; +use Magento\Framework\Exception\LocalizedException; use Magento\Test\Integrity\Dependency\DeclarativeSchemaDependencyProvider; use Magento\TestFramework\Dependency\DbRule; use Magento\TestFramework\Dependency\DiRule; @@ -146,6 +147,13 @@ class DependencyTest extends \PHPUnit\Framework\TestCase */ private static $whiteList = []; + /** + * Routes whitelist + * + * @var array|null + */ + private static $routesWhitelist = null; + /** * @var RouteMapper */ @@ -230,7 +238,12 @@ protected static function _initRules() $dbRuleTables = array_merge($dbRuleTables, @include $fileName); } self::$_rulesInstances = [ - new PhpRule(self::$routeMapper->getRoutes(), self::$_mapLayoutBlocks), + new PhpRule( + self::$routeMapper->getRoutes(), + self::$_mapLayoutBlocks, + [], + ['routes' => self::getRoutesWhitelist()] + ), new DbRule($dbRuleTables), new LayoutRule( self::$routeMapper->getRoutes(), @@ -243,6 +256,25 @@ protected static function _initRules() ]; } + /** + * Initialize routes whitelist + * + * @return array + */ + private static function getRoutesWhitelist(): array + { + if (is_null(self::$routesWhitelist)) { + $routesWhitelistFilePattern = realpath(__DIR__) . '/_files/dependency_test/whitelist/routes_*.php'; + $routesWhitelist = []; + foreach (glob($routesWhitelistFilePattern) as $fileName) { + $routesWhitelist = array_merge($routesWhitelist, include $fileName); + } + self::$routesWhitelist = $routesWhitelist; + } + + return self::$routesWhitelist; + } + /** * Return cleaned file contents * @@ -256,7 +288,8 @@ protected function _getCleanedFileContents($fileType, $file) switch ($fileType) { case 'php': //Removing php comments - $contents = preg_replace('~/\*.*?\*/~s', '', $contents); + $contents = preg_replace('~/\*.*?\*/~m', '', $contents); + $contents = preg_replace('~^\s*/\*.*?\*/~sm', '', $contents); $contents = preg_replace('~^\s*//.*$~m', '', $contents); break; case 'layout': @@ -351,6 +384,7 @@ function ($fileType, $file) { * @param string $file * @param string $contents * @return string[] + * @throws LocalizedException */ protected function getDependenciesFromFiles($module, $fileType, $file, $contents) { @@ -361,6 +395,7 @@ protected function getDependenciesFromFiles($module, $fileType, $file, $contents $newDependencies = $rule->getDependencyInfo($module, $fileType, $file, $contents); $dependencies = array_merge($dependencies, $newDependencies); } + foreach ($dependencies as $key => $dependency) { foreach (self::$whiteList as $namespace) { if (strpos($dependency['source'], $namespace) !== false) { @@ -400,21 +435,64 @@ protected function _collectDependencies($currentModuleName, $dependencies = []) */ private function collectDependency($dependency, $currentModule, &$undeclared) { - $module = $dependency['module']; - $nsModule = str_replace('_', '\\', $module); $type = isset($dependency['type']) ? $dependency['type'] : self::TYPE_HARD; $soft = $this->_getDependencies($currentModule, self::TYPE_SOFT, self::MAP_TYPE_DECLARED); $hard = $this->_getDependencies($currentModule, self::TYPE_HARD, self::MAP_TYPE_DECLARED); $declared = $type == self::TYPE_SOFT ? array_merge($soft, $hard) : $hard; - if (!in_array($module, $declared) && !in_array($nsModule, $declared) && !$this->_isFake($nsModule)) { - $undeclared[$type][] = $module; - } elseif ((in_array($module, $declared) || in_array($nsModule, $declared)) && $this->_isFake($nsModule)) { - $this->_setDependencies($currentModule, $type, self::MAP_TYPE_REDUNDANT, $module); + + $module = $dependency['module']; + if (is_array($module)) { + $this->collectConditionalDependencies($module, $type, $currentModule, $declared, $undeclared); + } else { + $nsModule = str_replace('_', '\\', $module); + + if (!in_array($nsModule, $declared) && !$this->_isFake($nsModule)) { + $undeclared[$type][] = $module; + } elseif (in_array($nsModule, $declared) && $this->_isFake($nsModule)) { + $this->_setDependencies($currentModule, $type, self::MAP_TYPE_REDUNDANT, $module); + } + + $this->addDependency($currentModule, $type, self::MAP_TYPE_FOUND, $nsModule); } + } - $this->addDependency($currentModule, $type, self::MAP_TYPE_FOUND, $nsModule); + /** + * Collect non-strict dependencies when the module depends on one of modules + * + * @param array $conditionalDependencies + * @param string $type + * @param string $currentModule + * @param array $declared + * @param array $undeclared + */ + private function collectConditionalDependencies( + array $conditionalDependencies, + string $type, + string $currentModule, + array $declared, + array &$undeclared + ) { + array_walk( + $conditionalDependencies, + function (&$moduleName) { + $moduleName = str_replace('_', '\\', $moduleName); + } + ); + $declaredDependencies = array_intersect($conditionalDependencies, $declared); + + foreach ($declaredDependencies as $moduleName) { + if ($this->_isFake($moduleName)) { + $this->_setDependencies($currentModule, $type, self::MAP_TYPE_REDUNDANT, $moduleName); + } + + $this->addDependency($currentModule, $type, self::MAP_TYPE_FOUND, $moduleName); + } + + if (empty($declaredDependencies)) { + $undeclared[$type][] = implode(" || ", $conditionalDependencies); + } } /** @@ -718,10 +796,14 @@ private static function addDependencies( string $type, array $packageModuleMap ): void { - $packageNames = array_filter($packageNames, function ($packageName) use ($packageModuleMap) { - return isset($packageModuleMap[$packageName]) || - 0 === strpos($packageName, 'magento/') && 'magento/magento-composer-installer' != $packageName; - }); + $packageNames = array_filter( + $packageNames, + function ($packageName) use ($packageModuleMap) { + return isset($packageModuleMap[$packageName]) || + 0 === strpos($packageName, 'magento/') + && 'magento/magento-composer-installer' != $packageName; + } + ); foreach ($packageNames as $packageName) { self::addDependency( diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/whitelist/routes_ce.php b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/whitelist/routes_ce.php new file mode 100644 index 000000000000..9ebc951a3a3a --- /dev/null +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/dependency_test/whitelist/routes_ce.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +return [ + 'privacy-policy-cookie-restriction-mode/index/index', +]; From b3ac6f59b4e33cc01f25b747b186e334ae7573f4 Mon Sep 17 00:00:00 2001 From: Serhiy Yelahin <serhiy.yelahin@transoftgroup.com> Date: Tue, 4 Jun 2019 10:58:43 +0300 Subject: [PATCH 087/209] MAGETWO-98937: Visual Merchandiser grid doesn't render properly when product names are longer than 50 characters --- .../Magento_VisualMerchandiser/web/css/source/_module.less | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/_module.less index 554b6394a109..152dd4050ad4 100644 --- a/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/_module.less +++ b/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/_module.less @@ -82,6 +82,13 @@ .info-block { height: 100px; + > span { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + } } .controlbar-bottom { From 72841f206f627e1369069e097103d172f33a732f Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Fri, 24 May 2019 10:12:40 +0400 Subject: [PATCH 088/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Updated automated test script --- .../ActionGroup/AdminProductActionGroup.xml | 9 ++++++++ ...ctedUserAddCategoryFromProductPageTest.xml | 22 +++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml index da570f9ed99b..adae8cb41690 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml @@ -428,6 +428,15 @@ </arguments> <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{categoryName}}]" stepKey="searchAndSelectCategory"/> </actionGroup> + <!--Remove category from product in ProductFrom Page--> + <actionGroup name="removeCategoryFromProduct"> + <arguments> + <argument name="categoryName" type="string" defaultValue="{{_defaultCategory.name}}"/> + </arguments> + <click selector="{{AdminProductFormSection.categoriesDropdown}}" stepKey="clickCategoriesDropDown"/> + <click selector="{{AdminProductFormSection.unselectCategories(categoryName)}}" stepKey="unselectCategories"/> + <click selector="{{AdminProductFormSection.done}}" stepKey="clickOnDoneAdvancedCategory"/> + </actionGroup> <actionGroup name="expandAdminProductSection"> <arguments> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml index 55a7a7632dea..ab74d131cbb5 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml @@ -74,8 +74,8 @@ <!--Log out of admin and login with newly created user--> <comment userInput="Log out of admin and login with newly created user" stepKey="commentLoginWithNewUser"/> <actionGroup ref="logout" stepKey="logoutOfAdmin"/> - <actionGroup ref="LoginNewUser" stepKey="loginActionGroup"> - <argument name="user" value="admin2"/> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsNewUser"> + <argument name="adminUser" value="admin2"/> </actionGroup> <!--Go to create product page--> <comment userInput="Go to create product page" stepKey="commentGoCreateProductPage"/> @@ -88,5 +88,23 @@ <argument name="categoryName" value="$$createCategory.name$$"/> </actionGroup> <actionGroup ref="saveProductForm" stepKey="saveProduct"/> + <!--Assert that category exist in field--> + <comment userInput="Assert that category exist in field" stepKey="commentAssertion"/> + <grabTextFrom selector="{{AdminProductFormSection.categoriesDropdown}}" stepKey="grabCategoryName"/> + <assertContains stepKey="assertThatCategory"> + <expectedResult type="variable">$$createCategory.name$$</expectedResult> + <actualResult type="variable">$grabCategoryName</actualResult> + </assertContains> + <!--Remove the category from the product and assert that it removed--> + <comment userInput="Remove the category from the product and assert that it removed" stepKey="AssertCategoryRemoved"/> + <actionGroup ref="removeCategoryFromProduct" stepKey="removeCategoryFromProduct"> + <argument name="categoryName" value="$$createCategory.name$$"/> + </actionGroup> + <actionGroup ref="saveProductForm" stepKey="saveProductAfterRemovingCategory"/> + <grabTextFrom selector="{{AdminProductFormSection.categoriesDropdown}}" stepKey="grabCategoryFieldContent"/> + <assertNotContains stepKey="assertThatCategoryRemoved"> + <expectedResult type="variable">$$createCategory.name$$</expectedResult> + <actualResult type="variable">$grabCategoryFieldContent</actualResult> + </assertNotContains> </test> </tests> From 181e34b53435691954e639079477429ab56ee270 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Tue, 4 Jun 2019 14:29:46 +0300 Subject: [PATCH 089/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Fix static --- .../Product/Form/Modifier/CategoriesTest.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php index d35aaa72a2e9..932b09f7df9c 100644 --- a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CategoriesTest.php @@ -97,12 +97,15 @@ protected function setUp() */ protected function createModel() { - return $this->objectManager->getObject(Categories::class, [ - 'locator' => $this->locatorMock, - 'categoryCollectionFactory' => $this->categoryCollectionFactoryMock, - 'arrayManager' => $this->arrayManagerMock, - 'authorization' => $this->authorizationMock - ]); + return $this->objectManager->getObject( + Categories::class, + [ + 'locator' => $this->locatorMock, + 'categoryCollectionFactory' => $this->categoryCollectionFactoryMock, + 'arrayManager' => $this->arrayManagerMock, + 'authorization' => $this->authorizationMock + ] + ); } public function testModifyData() From 94e1cbd4951af891dd971b65851580f53f593cbc Mon Sep 17 00:00:00 2001 From: Stsiapan Korf <Stsiapan_Korf@epam.com> Date: Wed, 5 Jun 2019 07:16:56 +0000 Subject: [PATCH 090/209] MAGETWO-99509: Download Option not working in Exports - Remove test --- .../Mftf/Section/AdminExportMainSection.xml | 1 - .../AdminCheckThatCSVCanBeExportedTest.xml | 56 ------------------- 2 files changed, 57 deletions(-) delete mode 100644 app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml diff --git a/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml b/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml index 76a11d00139d..da1d928607e7 100644 --- a/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml +++ b/app/code/Magento/ImportExport/Test/Mftf/Section/AdminExportMainSection.xml @@ -9,7 +9,6 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminExportMainSection"> <element name="entityType" type="select" selector="#entity"/> - <element name="exportFileFormat" type="select" selector="#file_format"/> <element name="entityAttributes" type="select" selector="#export_filter_form"/> </section> </sections> diff --git a/app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml b/app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml deleted file mode 100644 index e5a34c4302ae..000000000000 --- a/app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatCSVCanBeExportedTest.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> - <test name="AdminCheckThatCSVCanBeExportedTest"> - <annotations> - <title value="Check that CSV can be exported"/> - <description value="Check that CSV can be exported"/> - <features value="ImportExport"/> - <severity value="CRITICAL"/> - <testCaseId value="MAGETWO-99457"/> - <useCaseId value="MAGETWO-98703"/> - <group value="importexport"/> - </annotations> - <before> - <!-- Create category and simple product, then log in --> - <comment userInput="Create category and simple product, then log in" stepKey="createDataAndLogIn"/> - <createData entity="ApiCategory" stepKey="createCategory"/> - <createData entity="ApiSimpleProduct" stepKey="createProduct"> - <requiredEntity createDataKey="createCategory"/> - </createData> - <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> - </before> - <after> - <!-- Delete exported file, created data and log out --> - <comment userInput="Delete exported file, created data and log out" stepKey="deleteCreatedData"/> - <actionGroup ref="deleteExportedFile" stepKey="deleteExportedFile"> - <argument name="rowIndex" value="0"/> - </actionGroup> - <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> - <deleteData createDataKey="createProduct" stepKey="deleteProduct"/> - <actionGroup ref="logout" stepKey="logout"/> - </after> - <!-- Go to System -> Data Transfer -> Export page --> - <comment userInput="Go to System -> Data Transfer -> Export page" stepKey="goToAdminExportIndexPage"/> - <amOnPage url="{{AdminExportIndexPage.url}}" stepKey="navigateToAdminExportIndexPage"/> - <waitForPageLoad stepKey="waitPageToLoad"/> - <!-- Export all products --> - <comment userInput="Export all products" stepKey="exportAllProds"/> - <actionGroup ref="exportAllProducts" stepKey="exportAllProducts"/> - <!-- Run cron --> - <comment userInput="Run cron" stepKey="cronRun"/> - <magentoCLI command="cron:run" stepKey="runCron"/> - <!-- Download CSV file --> - <comment userInput="Download CSV file" stepKey="downloadCSVFile"/> - <actionGroup ref="downloadFileByRowIndex" stepKey="downloadCreatedProducts"> - <argument name="rowIndex" value="0"/> - </actionGroup> - </test> -</tests> From 0ac431201ba7131b3a241f2699630ebcc863edb2 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Wed, 5 Jun 2019 11:59:58 +0400 Subject: [PATCH 091/209] MAGETWO-64923: Duplicate products not showing on the frontend - Updated automated test script --- .../AdminConfigurableProductActionGroup.xml | 12 ------------ .../StorefrontVisibilityOfDuplicateProductTest.xml | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml index 33095ff21677..8b1f1256d211 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml @@ -122,18 +122,6 @@ <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton3"/> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton4"/> </actionGroup> - <actionGroup name="AdminCreateAttributeForConfigurableProduct"> - <arguments> - <argument name="attributeName" type="string"/> - </arguments> - <click selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" stepKey="clickOnNewAttribute"/> - <waitForPageLoad stepKey="waitForIFrame"/> - <switchToIFrame selector="{{AdminNewAttributePanel.newAttributeIFrame}}" stepKey="switchToNewAttributeIFrame"/> - <fillField selector="{{AdminNewAttributePanel.defaultLabel}}" userInput="{{attributeName}}" stepKey="fillDefaultLabel"/> - <click selector="{{AdminNewAttributePanel.saveAttribute}}" stepKey="clickOnNewAttributePanel"/> - <waitForPageLoad stepKey="waitForSaveAttribute"/> - <switchToIFrame stepKey="switchOutOfIFrame"/> - </actionGroup> <actionGroup name="createOptionsForAttribute"> <arguments> <argument name="attributeName" type="string" defaultValue="{{productAttributeColor.default_label}}"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml index fd8a1c0ad7b8..36c8301b23d4 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVisibilityOfDuplicateProductTest.xml @@ -13,7 +13,7 @@ <title value="Visibility of duplicate product on the Storefront"/> <description value="Check visibility of duplicate product on the Storefront"/> <severity value="AVERAGE"/> - <testCaseId value="MAGETWO-99396"/> + <testCaseId value="MC-17226"/> <useCaseId value="MAGETWO-64923"/> <group value="ConfigurableProduct"/> </annotations> From 6779af6c78888590f962bd8be75ec313ae0038b0 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Wed, 5 Jun 2019 13:29:06 +0300 Subject: [PATCH 092/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../attribute/steps/attributes_values.phtml | 2 +- .../js/variations/steps/attributes_values.js | 54 +++++++++++-------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/attributes_values.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/attributes_values.phtml index cc2547404919..1bf5a7ff7ee0 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/attributes_values.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/attributes_values.phtml @@ -74,7 +74,7 @@ <label data-bind="text: label, visible: label, attr:{for:id}" class="admin__field-label"></label> </div> - <div class="admin__field admin__field-create-new" data-bind="visible: !label"> + <div class="admin__field admin__field-create-new" data-bind="attr:{'data-role':id}, visible: !label"> <div class="admin__field-control"> <input class="admin__control-text" name="label" diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index b470592529e8..c0eb67cf0cce 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -90,13 +90,42 @@ define([ * @param {Object} option */ saveOption: function (option) { - if (!_.isEmpty(option.label)) { + if (this.isValidOption(option)) { this.options.remove(option); this.options.push(option); this.chosenOptions.push(option.id); } }, + /** + * @param {Object} option + * @return boolean + */ + isValidOption: function (option) { + var duplicatedOptions = [], + errorOption, + allOptions = []; + + if (_.isEmpty(option.label)) { + return false; + } + + _.each(this.options(), function (option) { + if (!_.isUndefined(allOptions[option.label])) { + duplicatedOptions.push(option); + } + + allOptions[option.label] = option.label; + }); + + if (duplicatedOptions.length) { + errorOption = $("[data-role=\"" + option.id + "\""); + errorOption.addClass("_error"); + return false; + } + return true; + }, + /** * @param {Object} option */ @@ -128,6 +157,7 @@ define([ })); attribute.opened = ko.observable(this.initialOpened(index)); attribute.collapsible = ko.observable(true); + attribute.isValidOption = this.isValidOption; return attribute; }, @@ -184,13 +214,9 @@ define([ * @return {Boolean} */ saveOptions: function () { - var newOptions = [], - allOptions = [], - attributesWithDuplicateOptions = []; + var newOptions = []; _.each(this.attributes(), function (attribute) { - allOptions[attribute.id] = []; - _.each(attribute.options(), function (element) { var option = attribute.options.findWhere({ id: element.id @@ -199,25 +225,9 @@ define([ if (option['is_new'] === true) { newOptions.push(option); } - - if (!_.isUndefined(option.label)) { - if (!_.isUndefined(allOptions[attribute.id][option.label])) { - attributesWithDuplicateOptions.push(attribute); - } - - allOptions[attribute.id][option.label] = option.label; - } }); }); - if (attributesWithDuplicateOptions.length) { - _.each(attributesWithDuplicateOptions, function (attribute) { - throw new Error($.mage.__( - 'The value of attribute ""%1"" must be unique').replace("\"%1\"", attribute.label) - ); - }); - } - if (!newOptions.length) { return false; } From da5ddf57b71ea06137ddc3ee5b49e2b909f74934 Mon Sep 17 00:00:00 2001 From: Aliaksei_Manenak <Aliaksei_Manenak@epam.com> Date: Fri, 7 Jun 2019 10:41:46 +0300 Subject: [PATCH 093/209] MAGETWO-59400: Invalid join condition in Product Flat Indexer - Add integration test. --- .../Indexer/Product/Flat/Action/Full.php | 22 +++ .../Product/Flat/Action/RelationTest.php | 134 ++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 dev/tests/integration/framework/Magento/TestFramework/Catalog/Model/Indexer/Product/Flat/Action/Full.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RelationTest.php diff --git a/dev/tests/integration/framework/Magento/TestFramework/Catalog/Model/Indexer/Product/Flat/Action/Full.php b/dev/tests/integration/framework/Magento/TestFramework/Catalog/Model/Indexer/Product/Flat/Action/Full.php new file mode 100644 index 000000000000..17ffb5cf2748 --- /dev/null +++ b/dev/tests/integration/framework/Magento/TestFramework/Catalog/Model/Indexer/Product/Flat/Action/Full.php @@ -0,0 +1,22 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\TestFramework\Catalog\Model\Indexer\Product\Flat\Action; + +/** + * Class Full reindex action + */ +class Full extends \Magento\Catalog\Model\Indexer\Product\Flat\Action\Full +{ + /** + * List of product types available in installation + * + * @var array + */ + protected $_productTypes; +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RelationTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RelationTest.php new file mode 100644 index 000000000000..85bcd54767e3 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RelationTest.php @@ -0,0 +1,134 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\Catalog\Model\Indexer\Product\Flat\Action; + +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Store\Model\StoreManagerInterface; +use Magento\TestFramework\Catalog\Model\Indexer\Product\Flat\Action\Full as FlatIndexerFull; + +/** + * Test relation customization + */ +class RelationTest extends \Magento\TestFramework\Indexer\TestCase +{ + /** + * @var FlatIndexerFull + */ + private $indexer; + + /** + * @var StoreManagerInterface + */ + private $storeManager; + + /** + * @var AdapterInterface + */ + private $connection; + + /** + * Updated flat tables + * + * @var array + */ + private $flatUpdated = []; + + /** + * @inheritdoc + */ + protected function setUp() + { + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + + $tableBuilderMock = $this->createMock(\Magento\Catalog\Model\Indexer\Product\Flat\TableBuilder::class); + $flatTableBuilderMock = $this->createMock(\Magento\Catalog\Model\Indexer\Product\Flat\FlatTableBuilder::class); + + $productIndexerHelper = $objectManager->create( + \Magento\Catalog\Helper\Product\Flat\Indexer::class, + ['addChildData' => 1] + ); + $this->indexer = $objectManager->create( + FlatIndexerFull::class, + [ + 'productHelper' => $productIndexerHelper, + 'tableBuilder' => $tableBuilderMock, + 'flatTableBuilder' => $flatTableBuilderMock + ] + ); + $this->storeManager = $objectManager->create(StoreManagerInterface::class); + $this->connection = $objectManager->get(ResourceConnection::class)->getConnection(); + + foreach ($this->storeManager->getStores() as $store) { + $flatTable = $productIndexerHelper->getFlatTableName($store->getId()); + if ($this->connection->isTableExists($flatTable) && + !$this->connection->tableColumnExists($flatTable, 'child_id') && + !$this->connection->tableColumnExists($flatTable, 'is_child') + ) { + $this->connection->addColumn( + $flatTable, + 'child_id', + [ + 'type' => 'integer', + 'length' => null, + 'unsigned' => true, + 'nullable' => true, + 'default' => null, + 'unique' => true, + 'comment' => 'Child Id', + ] + ); + $this->connection->addColumn( + $flatTable, + 'is_child', + [ + 'type' => 'smallint', + 'length' => 1, + 'unsigned' => true, + 'nullable' => false, + 'default' => '0', + 'comment' => 'Checks If Entity Is Child', + ] + ); + + $this->flatUpdated[] = $flatTable; + } + } + } + + /** + * @inheritdoc + */ + protected function tearDown() + { + foreach ($this->flatUpdated as $flatTable) { + $this->connection->dropColumn($flatTable, 'child_id'); + $this->connection->dropColumn($flatTable, 'is_child'); + } + } + + /** + * Test that SQL generated for relation customization is valid + * + * @return void + * @throws \Magento\Framework\Exception\LocalizedException + * @throws \Exception + */ + public function testExecute() : void + { + try { + $this->indexer->execute(); + } catch (\Magento\Framework\Exception\LocalizedException $e) { + if ($e->getPrevious() instanceof \Zend_Db_Statement_Exception) { + $this->fail($e->getMessage()); + } + throw $e; + } + } +} From 9a988b585aaf674cacc2038e24a1e40013d08843 Mon Sep 17 00:00:00 2001 From: Mikalai Shostka <mikalai_shostka@epam.com> Date: Fri, 7 Jun 2019 17:22:46 +0300 Subject: [PATCH 094/209] MAGETWO-93061: CMS page of second website with same URLkey as first website, show content of First website instead of second website content. - Fix CR comments --- .../Page/Grid/Renderer/Action/UrlBuilder.php | 65 +--------- .../Component/Listing/Column/PageActions.php | 13 +- .../Cms/ViewModel/Page/Grid/UrlBuilder.php | 112 ++++++++++++++++++ app/code/Magento/Cms/etc/adminhtml/di.xml | 5 + 4 files changed, 132 insertions(+), 63 deletions(-) create mode 100644 app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php index 8bff494ef79f..08ba2c3fff33 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid/Renderer/Action/UrlBuilder.php @@ -3,15 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -declare(strict_types=1); - namespace Magento\Cms\Block\Adminhtml\Page\Grid\Renderer\Action; -use Magento\Framework\App\ObjectManager; -use Magento\Framework\Url\EncoderInterface; -use Magento\Framework\App\ActionInterface; -use Magento\Store\Model\StoreManagerInterface; - /** * Url builder class used to compose dynamic urls. */ @@ -22,31 +15,12 @@ class UrlBuilder */ protected $frontendUrlBuilder; - /** - * @var EncoderInterface - */ - private $urlEncoder; - - /** - * @var StoreManagerInterface - */ - private $storeManager; - /** * @param \Magento\Framework\UrlInterface $frontendUrlBuilder - * @param EncoderInterface|null $urlEncoder - * @param StoreManagerInterface|null $storeManager */ - public function __construct( - \Magento\Framework\UrlInterface $frontendUrlBuilder, - EncoderInterface $urlEncoder = null, - StoreManagerInterface $storeManager = null - ) { + public function __construct(\Magento\Framework\UrlInterface $frontendUrlBuilder) + { $this->frontendUrlBuilder = $frontendUrlBuilder; - $this->urlEncoder = $urlEncoder ?: ObjectManager::getInstance() - ->get(EncoderInterface::class); - $this->storeManager = $storeManager?: ObjectManager::getInstance() - ->get(StoreManagerInterface::class); } /** @@ -61,22 +35,12 @@ public function getUrl($routePath, $scope, $store) { if ($scope) { $this->frontendUrlBuilder->setScope($scope); - $targetUrl = $this->frontendUrlBuilder->getUrl( - $routePath, - [ - '_current' => false, - '_nosid' => true, - '_query' => [ - StoreManagerInterface::PARAM_NAME => $store - ] - ] - ); $href = $this->frontendUrlBuilder->getUrl( - 'stores/store/switch', + $routePath, [ '_current' => false, '_nosid' => true, - '_query' => $this->prepareRequestQuery($store, $targetUrl) + '_query' => [\Magento\Store\Model\StoreManagerInterface::PARAM_NAME => $store] ] ); } else { @@ -91,25 +55,4 @@ public function getUrl($routePath, $scope, $store) return $href; } - - /** - * Prepare request query - * - * @param string $store - * @param string $href - * @return array - */ - private function prepareRequestQuery(string $store, string $href) : array - { - $storeView = $this->storeManager->getDefaultStoreView(); - $query = [ - StoreManagerInterface::PARAM_NAME => $store, - ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlEncoder->encode($href) - ]; - if ($storeView->getCode() !== $store) { - $query['___from_store'] = $storeView->getCode(); - } - - return $query; - } } diff --git a/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php b/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php index 26d31456bf61..9c57aa050b01 100644 --- a/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php +++ b/app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php @@ -27,6 +27,11 @@ class PageActions extends Column */ protected $actionUrlBuilder; + /** + * @var \Magento\Cms\ViewModel\Page\Grid\UrlBuilder + */ + private $scopeUrlBuilder; + /** * @var \Magento\Framework\UrlInterface */ @@ -50,6 +55,7 @@ class PageActions extends Column * @param array $components * @param array $data * @param string $editUrl + * @param \Magento\Cms\ViewModel\Page\Grid\UrlBuilder|null $scopeUrlBuilder */ public function __construct( ContextInterface $context, @@ -58,12 +64,15 @@ public function __construct( UrlInterface $urlBuilder, array $components = [], array $data = [], - $editUrl = self::CMS_URL_PATH_EDIT + $editUrl = self::CMS_URL_PATH_EDIT, + \Magento\Cms\ViewModel\Page\Grid\UrlBuilder $scopeUrlBuilder = null ) { $this->urlBuilder = $urlBuilder; $this->actionUrlBuilder = $actionUrlBuilder; $this->editUrl = $editUrl; parent::__construct($context, $uiComponentFactory, $components, $data); + $this->scopeUrlBuilder = $scopeUrlBuilder ?: ObjectManager::getInstance() + ->get(\Magento\Cms\ViewModel\Page\Grid\UrlBuilder::class); } /** @@ -92,7 +101,7 @@ public function prepareDataSource(array $dataSource) } if (isset($item['identifier'])) { $item[$name]['preview'] = [ - 'href' => $this->actionUrlBuilder->getUrl( + 'href' => $this->scopeUrlBuilder->getUrl( $item['identifier'], isset($item['_first_store_id']) ? $item['_first_store_id'] : null, isset($item['store_code']) ? $item['store_code'] : null diff --git a/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php b/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php new file mode 100644 index 000000000000..b39a770a446e --- /dev/null +++ b/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php @@ -0,0 +1,112 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\Cms\ViewModel\Page\Grid; + +use Magento\Framework\Url\EncoderInterface; +use Magento\Framework\App\ActionInterface; +use Magento\Store\Model\StoreManagerInterface; + +/** + * Url builder class used to compose dynamic urls. + */ +class UrlBuilder +{ + /** + * @var \Magento\Framework\UrlInterface + */ + protected $frontendUrlBuilder; + + /** + * @var EncoderInterface + */ + private $urlEncoder; + + /** + * @var StoreManagerInterface + */ + private $storeManager; + + /** + * @param \Magento\Framework\UrlInterface $frontendUrlBuilder + * @param EncoderInterface $urlEncoder + * @param StoreManagerInterface $storeManager + */ + public function __construct( + \Magento\Framework\UrlInterface $frontendUrlBuilder, + EncoderInterface $urlEncoder, + StoreManagerInterface $storeManager + ) { + $this->frontendUrlBuilder = $frontendUrlBuilder; + $this->urlEncoder = $urlEncoder; + $this->storeManager = $storeManager; + } + + /** + * Get action url + * + * @param string $routePath + * @param string $scope + * @param string $store + * @return string + */ + public function getUrl($routePath, $scope, $store) + { + if ($scope) { + $this->frontendUrlBuilder->setScope($scope); + $targetUrl = $this->frontendUrlBuilder->getUrl( + $routePath, + [ + '_current' => false, + '_nosid' => true, + '_query' => [ + StoreManagerInterface::PARAM_NAME => $store + ] + ] + ); + $href = $this->frontendUrlBuilder->getUrl( + 'stores/store/switch', + [ + '_current' => false, + '_nosid' => true, + '_query' => $this->prepareRequestQuery($store, $targetUrl) + ] + ); + } else { + $href = $this->frontendUrlBuilder->getUrl( + $routePath, + [ + '_current' => false, + '_nosid' => true + ] + ); + } + + return $href; + } + + /** + * Prepare request query + * + * @param string $store + * @param string $href + * @return array + */ + private function prepareRequestQuery(string $store, string $href) : array + { + $storeView = $this->storeManager->getDefaultStoreView(); + $query = [ + StoreManagerInterface::PARAM_NAME => $store, + ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlEncoder->encode($href) + ]; + if ($storeView->getCode() !== $store) { + $query['___from_store'] = $storeView->getCode(); + } + + return $query; + } +} diff --git a/app/code/Magento/Cms/etc/adminhtml/di.xml b/app/code/Magento/Cms/etc/adminhtml/di.xml index 98a8ff6e9ec9..363217af4cd0 100644 --- a/app/code/Magento/Cms/etc/adminhtml/di.xml +++ b/app/code/Magento/Cms/etc/adminhtml/di.xml @@ -12,6 +12,11 @@ <argument name="frontendUrlBuilder" xsi:type="object">Magento\Framework\Url</argument> </arguments> </type> + <type name="Magento\Cms\ViewModel\Page\Grid\UrlBuilder"> + <arguments> + <argument name="frontendUrlBuilder" xsi:type="object">Magento\Framework\Url</argument> + </arguments> + </type> <type name="Magento\Cms\Model\Wysiwyg\CompositeConfigProvider"> <arguments> <argument name="variablePluginConfigProvider" xsi:type="array"> From 63762d61f5ec8be8f64d4f594a35c4aa2f82a0f0 Mon Sep 17 00:00:00 2001 From: Patrick McLain <pat@pmclain.com> Date: Fri, 7 Jun 2019 22:22:54 -0400 Subject: [PATCH 095/209] Respect allow send as guest configuration in resolver Resolver throws `GraphQlAuthorizationException` when sending as guest if allow send as guest is disabled. Fixes #732 --- .../Model/Resolver/SendEmailToFriend.php | 33 ++++- .../GraphQl/SendFriend/SendFriendTest.php | 124 +++++++++++++++--- .../_files/disable_send_friend_guest.php | 21 +++ .../_files/enable_send_friend_guest.php | 21 +++ 4 files changed, 177 insertions(+), 22 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/disable_send_friend_guest.php create mode 100644 dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/enable_send_friend_guest.php diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index c0c01c71df76..1ee4844e5a01 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -7,18 +7,22 @@ namespace Magento\SendFriendGraphQl\Model\Resolver; +use Magento\Authorization\Model\UserContextInterface; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Framework\App\ObjectManager; use Magento\Framework\DataObjectFactory; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Config\Element\Field; +use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException; use Magento\Framework\GraphQl\Exception\GraphQlInputException; use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; +use Magento\SendFriend\Helper\Data as SendFriendHelper; /** * @inheritdoc @@ -45,22 +49,30 @@ class SendEmailToFriend implements ResolverInterface */ private $eventManager; + /** + * @var SendFriendHelper + */ + private $sendFriendHelper; + /** * @param SendFriendFactory $sendFriendFactory * @param ProductRepositoryInterface $productRepository * @param DataObjectFactory $dataObjectFactory * @param ManagerInterface $eventManager + * @param SendFriendHelper|null $sendFriendHelper */ public function __construct( SendFriendFactory $sendFriendFactory, ProductRepositoryInterface $productRepository, DataObjectFactory $dataObjectFactory, - ManagerInterface $eventManager + ManagerInterface $eventManager, + SendFriendHelper $sendFriendHelper = null ) { $this->sendFriendFactory = $sendFriendFactory; $this->productRepository = $productRepository; $this->dataObjectFactory = $dataObjectFactory; $this->eventManager = $eventManager; + $this->sendFriendHelper = $sendFriendHelper ?? ObjectManager::getInstance()->get(SendFriendHelper::class); } /** @@ -68,6 +80,10 @@ public function __construct( */ public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) { + if (!$this->sendFriendHelper->isAllowForGuest() && $this->isUserGuest($context->getUserId(), $context->getUserType())) { + throw new GraphQlAuthorizationException(__('The current customer isn\'t authorized.')); + } + /** @var SendFriend $sendFriend */ $sendFriend = $this->sendFriendFactory->create(); @@ -195,4 +211,19 @@ private function extractSenderData(array $args): array ], ]; } + + /** + * Checking if current customer is guest + * + * @param int|null $customerId + * @param int|null $customerType + * @return bool + */ + private function isUserGuest(?int $customerId, ?int $customerType): bool + { + if (null === $customerId || null === $customerType) { + return true; + } + return 0 === (int)$customerId || (int)$customerType === UserContextInterface::USER_TYPE_GUEST; + } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php index e7401100b786..e885c2b8fb56 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php @@ -8,6 +8,8 @@ namespace Magento\GraphQl\SendFriend; use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Framework\Exception\AuthenticationException; +use Magento\Integration\Api\CustomerTokenServiceInterface; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; use Magento\TestFramework\Helper\Bootstrap; @@ -23,21 +25,29 @@ class SendFriendTest extends GraphQlAbstract * @var SendFriendFactory */ private $sendFriendFactory; + /** * @var ProductRepositoryInterface */ private $productRepository; + /** + * @var CustomerTokenServiceInterface + */ + private $customerTokenService; + protected function setUp() { $this->sendFriendFactory = Bootstrap::getObjectManager()->get(SendFriendFactory::class); $this->productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); + $this->customerTokenService = Bootstrap::getObjectManager()->get(CustomerTokenServiceInterface::class); } /** * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/SendFriend/_files/enable_send_friend_guest.php */ - public function testSendFriend() + public function testSendFriendGuestEnable() { $productId = (int)$this->productRepository->get('simple_product')->getId(); $recipients = '{ @@ -51,15 +61,57 @@ public function testSendFriend() $query = $this->getQuery($productId, $recipients); $response = $this->graphQlMutation($query); - self::assertEquals('Name', $response['sendEmailToFriend']['sender']['name']); - self::assertEquals('e@mail.com', $response['sendEmailToFriend']['sender']['email']); - self::assertEquals('Lorem Ipsum', $response['sendEmailToFriend']['sender']['message']); - self::assertEquals('Recipient Name 1', $response['sendEmailToFriend']['recipients'][0]['name']); - self::assertEquals('recipient1@mail.com', $response['sendEmailToFriend']['recipients'][0]['email']); - self::assertEquals('Recipient Name 2', $response['sendEmailToFriend']['recipients'][1]['name']); - self::assertEquals('recipient2@mail.com', $response['sendEmailToFriend']['recipients'][1]['email']); + $this->assertResponse($response); + } + + /** + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/SendFriend/_files/disable_send_friend_guest.php + * @expectedException \Exception + * @expectedExceptionMessage The current customer isn't authorized. + */ + public function testSendFriendGuestDisableAsGuest() + { + $productId = (int)$this->productRepository->get('simple_product')->getId(); + $recipients = '{ + name: "Recipient Name 1" + email:"recipient1@mail.com" + }, + { + name: "Recipient Name 2" + email:"recipient2@mail.com" + }'; + $query = $this->getQuery($productId, $recipients); + + $response = $this->graphQlMutation($query); + $this->assertResponse($response); + } + + /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php + * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php + * @magentoApiDataFixture Magento/GraphQl/SendFriend/_files/disable_send_friend_guest.php + */ + public function testSendFriendGuestDisableAsCustomer() + { + $productId = (int)$this->productRepository->get('simple_product')->getId(); + $recipients = '{ + name: "Recipient Name 1" + email:"recipient1@mail.com" + }, + { + name: "Recipient Name 2" + email:"recipient2@mail.com" + }'; + $query = $this->getQuery($productId, $recipients); + + $response = $this->graphQlMutation($query, [], '', $this->getHeaderMap()); + $this->assertResponse($response); } + /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php + */ public function testSendWithoutExistProduct() { $productId = 2018; @@ -77,10 +129,11 @@ public function testSendWithoutExistProduct() $this->expectExceptionMessage( 'The product that was requested doesn\'t exist. Verify the product and try again.' ); - $this->graphQlMutation($query); + $this->graphQlMutation($query, [], '', $this->getHeaderMap()); } /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php */ public function testMaxSendEmailToFriend() @@ -118,10 +171,11 @@ public function testMaxSendEmailToFriend() $this->expectException(\Exception::class); $this->expectExceptionMessage("No more than {$sendFriend->getMaxRecipients()} emails can be sent at a time."); - $this->graphQlMutation($query); + $this->graphQlMutation($query, [], '', $this->getHeaderMap()); } /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php * @magentoApiDataFixture Magento/Catalog/_files/product_simple.php * @dataProvider sendFriendsErrorsDataProvider * @param string $input @@ -151,10 +205,11 @@ public function testErrors(string $input, string $errorMessage) QUERY; $this->expectException(\Exception::class); $this->expectExceptionMessage($errorMessage); - $this->graphQlMutation($query); + $this->graphQlMutation($query, [], '', $this->getHeaderMap()); } /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php * TODO: use magentoApiConfigFixture (to be merged https://github.com/magento/graphql-ce/pull/351) * @magentoApiDataFixture Magento/SendFriend/Fixtures/sendfriend_configuration.php @@ -183,11 +238,12 @@ public function testLimitMessagesPerHour() $maxSendToFriends = $sendFriend->getMaxSendsToFriend(); for ($i = 0; $i <= $maxSendToFriends + 1; $i++) { - $this->graphQlMutation($query); + $this->graphQlMutation($query, [], '', $this->getHeaderMap()); } } /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php */ public function testSendProductWithoutSenderEmail() @@ -201,10 +257,11 @@ public function testSendProductWithoutSenderEmail() $this->expectException(\Exception::class); $this->expectExceptionMessage('GraphQL response contains errors: Please provide Email for all of recipients.'); - $this->graphQlMutation($query); + $this->graphQlMutation($query, [], '', $this->getHeaderMap()); } /** + * @magentoApiDataFixture Magento/Customer/_files/customer.php * @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product_without_visibility.php */ public function testSendProductWithoutVisibility() @@ -220,14 +277,8 @@ public function testSendProductWithoutVisibility() }'; $query = $this->getQuery($productId, $recipients); - $response = $this->graphQlMutation($query); - self::assertEquals('Name', $response['sendEmailToFriend']['sender']['name']); - self::assertEquals('e@mail.com', $response['sendEmailToFriend']['sender']['email']); - self::assertEquals('Lorem Ipsum', $response['sendEmailToFriend']['sender']['message']); - self::assertEquals('Recipient Name 1', $response['sendEmailToFriend']['recipients'][0]['name']); - self::assertEquals('recipient1@mail.com', $response['sendEmailToFriend']['recipients'][0]['email']); - self::assertEquals('Recipient Name 2', $response['sendEmailToFriend']['recipients'][1]['name']); - self::assertEquals('recipient2@mail.com', $response['sendEmailToFriend']['recipients'][1]['email']); + $response = $this->graphQlMutation($query, [], '', $this->getHeaderMap()); + $this->assertResponse($response); } /** @@ -311,6 +362,37 @@ public function sendFriendsErrorsDataProvider() ]; } + /** + * Generic assertions for send a friend response + * + * @param array $response + */ + private function assertResponse(array $response): void + { + self::assertEquals('Name', $response['sendEmailToFriend']['sender']['name']); + self::assertEquals('e@mail.com', $response['sendEmailToFriend']['sender']['email']); + self::assertEquals('Lorem Ipsum', $response['sendEmailToFriend']['sender']['message']); + self::assertEquals('Recipient Name 1', $response['sendEmailToFriend']['recipients'][0]['name']); + self::assertEquals('recipient1@mail.com', $response['sendEmailToFriend']['recipients'][0]['email']); + self::assertEquals('Recipient Name 2', $response['sendEmailToFriend']['recipients'][1]['name']); + self::assertEquals('recipient2@mail.com', $response['sendEmailToFriend']['recipients'][1]['email']); + } + + /** + * Retrieve customer authorization headers + * + * @param string $username + * @param string $password + * @return array + * @throws AuthenticationException + */ + private function getHeaderMap(string $username = 'customer@example.com', string $password = 'password'): array + { + $customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password); + $headerMap = ['Authorization' => 'Bearer ' . $customerToken]; + return $headerMap; + } + /** * @param int $productId * @param string $recipients diff --git a/dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/disable_send_friend_guest.php b/dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/disable_send_friend_guest.php new file mode 100644 index 000000000000..80fcc2079a01 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/disable_send_friend_guest.php @@ -0,0 +1,21 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +// TODO: Should be removed in scope of https://github.com/magento/graphql-ce/issues/167 +declare(strict_types=1); + +use Magento\Framework\App\Config\Storage\Writer; +use Magento\Framework\App\Config\Storage\WriterInterface; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Framework\App\Config\ScopeConfigInterface; + +$objectManager = Bootstrap::getObjectManager(); +/** @var Writer $configWriter */ +$configWriter = $objectManager->get(WriterInterface::class); + +$configWriter->save('sendfriend/email/allow_guest', '0'); + +$scopeConfig = $objectManager->get(ScopeConfigInterface::class); +$scopeConfig->clean(); diff --git a/dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/enable_send_friend_guest.php b/dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/enable_send_friend_guest.php new file mode 100644 index 000000000000..aaf9a447aeaa --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/GraphQl/SendFriend/_files/enable_send_friend_guest.php @@ -0,0 +1,21 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +// TODO: Should be removed in scope of https://github.com/magento/graphql-ce/issues/167 +declare(strict_types=1); + +use Magento\Framework\App\Config\Storage\Writer; +use Magento\Framework\App\Config\Storage\WriterInterface; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Framework\App\Config\ScopeConfigInterface; + +$objectManager = Bootstrap::getObjectManager(); +/** @var Writer $configWriter */ +$configWriter = $objectManager->get(WriterInterface::class); + +$configWriter->save('sendfriend/email/allow_guest', '1'); + +$scopeConfig = $objectManager->get(ScopeConfigInterface::class); +$scopeConfig->clean(); From bbe60ddb259c8b62ffbef72b1399eb2b5df735e9 Mon Sep 17 00:00:00 2001 From: Patrick McLain <pat@pmclain.com> Date: Sat, 8 Jun 2019 08:37:20 -0400 Subject: [PATCH 096/209] Fix static test issues * Missing dep on magento/module-authorization * Separate email send logic from resolver --- .../Model/Resolver/SendEmailToFriend.php | 128 +++------------- .../Model/SendFriend/SendEmail.php | 142 ++++++++++++++++++ .../Magento/SendFriendGraphQl/composer.json | 3 +- 3 files changed, 164 insertions(+), 109 deletions(-) create mode 100644 app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index 1ee4844e5a01..5d8df4283184 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -8,21 +8,13 @@ namespace Magento\SendFriendGraphQl\Model\Resolver; use Magento\Authorization\Model\UserContextInterface; -use Magento\Catalog\Api\Data\ProductInterface; -use Magento\Catalog\Api\ProductRepositoryInterface; -use Magento\Framework\App\ObjectManager; -use Magento\Framework\DataObjectFactory; -use Magento\Framework\Event\ManagerInterface; -use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Config\Element\Field; use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException; use Magento\Framework\GraphQl\Exception\GraphQlInputException; -use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; -use Magento\SendFriend\Model\SendFriend; -use Magento\SendFriend\Model\SendFriendFactory; use Magento\SendFriend\Helper\Data as SendFriendHelper; +use Magento\SendFriendGraphQl\Model\SendFriend\SendEmail; /** * @inheritdoc @@ -30,49 +22,25 @@ class SendEmailToFriend implements ResolverInterface { /** - * @var SendFriendFactory - */ - private $sendFriendFactory; - - /** - * @var ProductRepositoryInterface - */ - private $productRepository; - - /** - * @var DataObjectFactory - */ - private $dataObjectFactory; - - /** - * @var ManagerInterface + * @var SendFriendHelper */ - private $eventManager; + private $sendFriendHelper; /** - * @var SendFriendHelper + * @var SendEmail */ - private $sendFriendHelper; + private $sendEmail; /** - * @param SendFriendFactory $sendFriendFactory - * @param ProductRepositoryInterface $productRepository - * @param DataObjectFactory $dataObjectFactory - * @param ManagerInterface $eventManager - * @param SendFriendHelper|null $sendFriendHelper + * @param SendEmail $sendEmail + * @param SendFriendHelper $sendFriendHelper */ public function __construct( - SendFriendFactory $sendFriendFactory, - ProductRepositoryInterface $productRepository, - DataObjectFactory $dataObjectFactory, - ManagerInterface $eventManager, - SendFriendHelper $sendFriendHelper = null + SendEmail $sendEmail, + SendFriendHelper $sendFriendHelper ) { - $this->sendFriendFactory = $sendFriendFactory; - $this->productRepository = $productRepository; - $this->dataObjectFactory = $dataObjectFactory; - $this->eventManager = $eventManager; - $this->sendFriendHelper = $sendFriendHelper ?? ObjectManager::getInstance()->get(SendFriendHelper::class); + $this->sendEmail = $sendEmail; + $this->sendFriendHelper = $sendFriendHelper; } /** @@ -80,81 +48,25 @@ public function __construct( */ public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) { - if (!$this->sendFriendHelper->isAllowForGuest() && $this->isUserGuest($context->getUserId(), $context->getUserType())) { - throw new GraphQlAuthorizationException(__('The current customer isn\'t authorized.')); - } + $userId = $context->getUserId(); + $userType = $context->getUserType(); - /** @var SendFriend $sendFriend */ - $sendFriend = $this->sendFriendFactory->create(); - - if ($sendFriend->getMaxSendsToFriend() && $sendFriend->isExceedLimit()) { - throw new GraphQlInputException( - __('You can\'t send messages more than %1 times an hour.', $sendFriend->getMaxSendsToFriend()) - ); + if (!$this->sendFriendHelper->isAllowForGuest() && $this->isUserGuest($userId, $userType)) { + throw new GraphQlAuthorizationException(__('The current customer isn\'t authorized.')); } - $product = $this->getProduct($args['input']['product_id']); - $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); - $sendFriend->setProduct($product); - $senderData = $this->extractSenderData($args); - $sendFriend->setSender($senderData); - $recipientsData = $this->extractRecipientsData($args); - $sendFriend->setRecipients($recipientsData); - $this->validateSendFriendModel($sendFriend, $senderData, $recipientsData); - $sendFriend->send(); + $this->sendEmail->execute( + $args['input']['product_id'], + $senderData, + $recipientsData + ); return array_merge($senderData, $recipientsData); } - /** - * Validate send friend model - * - * @param SendFriend $sendFriend - * @param array $senderData - * @param array $recipientsData - * @return void - * @throws GraphQlInputException - */ - private function validateSendFriendModel(SendFriend $sendFriend, array $senderData, array $recipientsData): void - { - $sender = $this->dataObjectFactory->create()->setData($senderData['sender']); - $sendFriend->setData('_sender', $sender); - - $emails = array_column($recipientsData['recipients'], 'email'); - $recipients = $this->dataObjectFactory->create()->setData('emails', $emails); - $sendFriend->setData('_recipients', $recipients); - - $validationResult = $sendFriend->validate(); - if ($validationResult !== true) { - throw new GraphQlInputException(__(implode($validationResult))); - } - } - - /** - * Get product - * - * @param int $productId - * @return ProductInterface - * @throws GraphQlNoSuchEntityException - */ - private function getProduct(int $productId): ProductInterface - { - try { - $product = $this->productRepository->getById($productId); - if (!$product->isVisibleInCatalog()) { - throw new GraphQlNoSuchEntityException( - __("The product that was requested doesn't exist. Verify the product and try again.") - ); - } - } catch (NoSuchEntityException $e) { - throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); - } - return $product; - } - /** * Extract recipients data * diff --git a/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php b/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php new file mode 100644 index 000000000000..196086c7546c --- /dev/null +++ b/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php @@ -0,0 +1,142 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\SendFriendGraphQl\Model\SendFriend; + +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Framework\DataObjectFactory; +use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\GraphQl\Exception\GraphQlInputException; +use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; +use Magento\SendFriend\Model\SendFriend; +use Magento\SendFriend\Model\SendFriendFactory; + +/** + * Send Product Email to Friend(s) + */ +class SendEmail +{ + /** + * @var DataObjectFactory + */ + private $dataObjectFactory; + + /** + * @var ProductRepositoryInterface + */ + private $productRepository; + + /** + * @var SendFriendFactory + */ + private $sendFriendFactory; + + /** + * @var ManagerInterface + */ + private $eventManager; + + /** + * @param DataObjectFactory $dataObjectFactory + * @param ProductRepositoryInterface $productRepository + * @param SendFriendFactory $sendFriendFactory + * @param ManagerInterface $eventManager + */ + public function __construct( + DataObjectFactory $dataObjectFactory, + ProductRepositoryInterface $productRepository, + SendFriendFactory $sendFriendFactory, + ManagerInterface $eventManager + ) { + $this->dataObjectFactory = $dataObjectFactory; + $this->productRepository = $productRepository; + $this->sendFriendFactory = $sendFriendFactory; + $this->eventManager = $eventManager; + } + + /** + * Send product email to friend(s) + * + * @param int $productId + * @param array $senderData + * @param array $recipientsData + * @throws GraphQlInputException + * @throws GraphQlNoSuchEntityException + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function execute(int $productId, array $senderData, array $recipientsData): void + { + /** @var SendFriend $sendFriend */ + $sendFriend = $this->sendFriendFactory->create(); + + if ($sendFriend->getMaxSendsToFriend() && $sendFriend->isExceedLimit()) { + throw new GraphQlInputException( + __('You can\'t send messages more than %1 times an hour.', $sendFriend->getMaxSendsToFriend()) + ); + } + + $product = $this->getProduct($productId); + + $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); + + $sendFriend->setProduct($product); + $sendFriend->setSender($senderData); + $sendFriend->setRecipients($recipientsData); + + $this->validateSendFriendModel($sendFriend, $senderData, $recipientsData); + + $sendFriend->send(); + } + + /** + * Validate send friend model + * + * @param SendFriend $sendFriend + * @param array $senderData + * @param array $recipientsData + * @return void + * @throws GraphQlInputException + */ + private function validateSendFriendModel(SendFriend $sendFriend, array $senderData, array $recipientsData): void + { + $sender = $this->dataObjectFactory->create()->setData($senderData['sender']); + $sendFriend->setData('_sender', $sender); + + $emails = array_column($recipientsData['recipients'], 'email'); + $recipients = $this->dataObjectFactory->create()->setData('emails', $emails); + $sendFriend->setData('_recipients', $recipients); + + $validationResult = $sendFriend->validate(); + if ($validationResult !== true) { + throw new GraphQlInputException(__(implode($validationResult))); + } + } + + /** + * Get product + * + * @param int $productId + * @return ProductInterface + * @throws GraphQlNoSuchEntityException + */ + private function getProduct(int $productId): ProductInterface + { + try { + $product = $this->productRepository->getById($productId); + if (!$product->isVisibleInCatalog()) { + throw new GraphQlNoSuchEntityException( + __("The product that was requested doesn't exist. Verify the product and try again.") + ); + } + } catch (NoSuchEntityException $e) { + throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); + } + return $product; + } +} diff --git a/app/code/Magento/SendFriendGraphQl/composer.json b/app/code/Magento/SendFriendGraphQl/composer.json index d401f57b2257..2da404359783 100644 --- a/app/code/Magento/SendFriendGraphQl/composer.json +++ b/app/code/Magento/SendFriendGraphQl/composer.json @@ -6,7 +6,8 @@ "php": "~7.1.3||~7.2.0", "magento/framework": "*", "magento/module-catalog": "*", - "magento/module-send-friend": "*" + "magento/module-send-friend": "*", + "magento/module-authorization": "*" }, "suggest": { "magento/module-graph-ql": "*" From ea66bb32cf0d58f6104e9e35f60cdd5d091b51ba Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Tue, 30 Apr 2019 12:08:39 +0400 Subject: [PATCH 097/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Updated automated test script --- .../Mftf/ActionGroup/AdminUserActionGroup.xml | 14 ------------- .../ActionGroup/SwitchAccountActionGroup.xml | 11 ---------- .../AdminDeleteCreatedUserActionGroup.xml | 14 +++++++++++++ .../Mftf/ActionGroup/AdminUserActionGroup.xml | 20 +++++++++++++++++++ .../Section/AdminEditRoleResourcesSection.xml | 1 - 5 files changed, 34 insertions(+), 26 deletions(-) create mode 100644 app/code/Magento/User/Test/Mftf/ActionGroup/AdminUserActionGroup.xml diff --git a/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml b/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml index 841dfb5607cd..d530f8e9f68b 100644 --- a/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml +++ b/app/code/Magento/Braintree/Test/Mftf/ActionGroup/AdminUserActionGroup.xml @@ -38,18 +38,4 @@ <waitForPageLoad stepKey="waitForSaveUser" time="10"/> <see userInput="You saved the user." stepKey="seeSuccessMessage" /> </actionGroup> - <!--Delete User--> - <actionGroup name="AdminDeleteNewUserActionGroup"> - <arguments> - <argument name="userName" type="string" defaultValue="John"/> - </arguments> - <click stepKey="clickOnUser" selector="{{AdminDeleteUserSection.theUser(userName)}}"/> - <fillField stepKey="typeCurrentPassword" selector="{{AdminDeleteUserSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> - <scrollToTopOfPage stepKey="scrollToTop"/> - <click stepKey="clickToDeleteUser" selector="{{AdminDeleteUserSection.delete}}"/> - <waitForPageLoad stepKey="waitForDeletePopupOpen" time="5"/> - <click stepKey="clickToConfirm" selector="{{AdminDeleteUserSection.confirm}}"/> - <waitForPageLoad stepKey="waitForPageLoad" time="10"/> - <see userInput="You deleted the user." stepKey="seeSuccessMessage" /> - </actionGroup> </actionGroups> diff --git a/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml b/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml index 40bf68db6ea6..85e23940e140 100644 --- a/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml +++ b/app/code/Magento/Customer/Test/Mftf/ActionGroup/SwitchAccountActionGroup.xml @@ -16,15 +16,4 @@ <see userInput="You have logged out." stepKey="seeSuccessMessage" /> <waitForElementVisible selector="//*[@data-ui-id='messages-message-success']" stepKey="waitForSuccessMessageLoggedOut" time="5"/> </actionGroup> - - <!--Login New User--> - <actionGroup name="LoginNewUser"> - <arguments> - <argument name="user" defaultValue="NewAdmin"/> - </arguments> - <amOnPage url="{{_ENV.MAGENTO_BACKEND_NAME}}" stepKey="navigateToAdmin"/> - <fillField userInput="{{user.username}}" selector="{{LoginFormSection.username}}" stepKey="fillUsername"/> - <fillField userInput="{{user.password}}" selector="{{LoginFormSection.password}}" stepKey="fillPassword"/> - <click selector="{{LoginFormSection.signIn}}" stepKey="clickLogin"/> - </actionGroup> </actionGroups> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedUserActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedUserActionGroup.xml index 74124f366a54..8a1abc1ca162 100644 --- a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedUserActionGroup.xml +++ b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedUserActionGroup.xml @@ -21,4 +21,18 @@ <click stepKey="clickToConfirm" selector="{{AdminDeleteUserSection.confirm}}"/> <see stepKey="seeDeleteMessageForUser" userInput="You deleted the user."/> </actionGroup> + <!--Delete User--> + <actionGroup name="AdminDeleteNewUserActionGroup"> + <arguments> + <argument name="userName" type="string" defaultValue="John"/> + </arguments> + <click stepKey="clickOnUser" selector="{{AdminDeleteUserSection.theUser(userName)}}"/> + <fillField stepKey="typeCurrentPassword" selector="{{AdminDeleteUserSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> + <scrollToTopOfPage stepKey="scrollToTop"/> + <click stepKey="clickToDeleteUser" selector="{{AdminDeleteUserSection.delete}}"/> + <waitForPageLoad stepKey="waitForDeletePopupOpen" time="5"/> + <click stepKey="clickToConfirm" selector="{{AdminDeleteUserSection.confirm}}"/> + <waitForPageLoad stepKey="waitForPageLoad" time="10"/> + <see userInput="You deleted the user." stepKey="seeSuccessMessage" /> + </actionGroup> </actionGroups> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminUserActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminUserActionGroup.xml new file mode 100644 index 000000000000..79c3b0469432 --- /dev/null +++ b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminUserActionGroup.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <!--Login New User--> + <actionGroup name="LoginNewUser"> + <arguments> + <argument name="user" defaultValue="NewAdmin"/> + </arguments> + <amOnPage url="{{_ENV.MAGENTO_BACKEND_NAME}}" stepKey="navigateToAdmin"/> + <fillField userInput="{{user.username}}" selector="{{LoginFormSection.username}}" stepKey="fillUsername"/> + <fillField userInput="{{user.password}}" selector="{{LoginFormSection.password}}" stepKey="fillPassword"/> + <click selector="{{LoginFormSection.signIn}}" stepKey="clickLogin"/> + </actionGroup> +</actionGroups> diff --git a/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml b/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml index 6bcfe48addb4..48873bd9d152 100644 --- a/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml +++ b/app/code/Magento/User/Test/Mftf/Section/AdminEditRoleResourcesSection.xml @@ -7,7 +7,6 @@ --> <sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminEditRoleResourcesSection"> - <element name="roleScopes" type="select" selector="#gws_is_all"/> <element name="resourceAccess" type="select" selector="#all"/> <element name="resources" type="checkbox" selector="#role_info_tabs_account"/> <element name="storeName" type="checkbox" selector="//label[contains(text(),'{{var1}}')]" parameterized="true"/> From 911fe321ef0361089208779ea3ed77ac14b4adb8 Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Sun, 9 Jun 2019 21:26:30 -0500 Subject: [PATCH 098/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test --- .../Catalog/Block/Adminhtml/Product/Grid.php | 2 + .../Checkout/Controller/Onepage/SaveOrder.php | 6 +- .../Payflow/Service/Request/SecureToken.php | 2 +- .../Test/Unit/Block/Adminhtml/RssTest.php | 24 +++- .../TestFramework/Dependency/PhpRule.php | 3 + .../TestFramework/Dependency/PhpRuleTest.php | 129 +++++++++++++++--- 6 files changed, 144 insertions(+), 22 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php index 6774d5df3cd9..4b537a78adc6 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php @@ -8,6 +8,8 @@ use Magento\Store\Model\Store; /** + * Catalog product grid + * * @api * @since 100.0.2 */ diff --git a/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php b/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php index 27d272330a8d..66b054136203 100644 --- a/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php +++ b/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php @@ -6,10 +6,14 @@ namespace Magento\Checkout\Controller\Onepage; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\DataObject; use Magento\Framework\Exception\PaymentException; -class SaveOrder extends \Magento\Checkout\Controller\Onepage +/** + * One Page Checkout saveOrder action + */ +class SaveOrder extends \Magento\Checkout\Controller\Onepage implements HttpPostActionInterface { /** * Create order action diff --git a/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php b/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php index 587372189f7f..4eaf705abd2b 100644 --- a/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php +++ b/app/code/Magento/Paypal/Model/Payflow/Service/Request/SecureToken.php @@ -69,7 +69,7 @@ public function requestToken(Quote $quote) $request->setSecuretokenid($this->mathRandom->getUniqueHash()); $request->setReturnurl($this->url->getUrl('paypal/transparent/response')); $request->setErrorurl($this->url->getUrl('paypal/transparent/response')); - $request->setCancelurl(''); + $request->setCancelurl($this->url->getUrl('paypal/transparent/response')); $request->setDisablereceipt('TRUE'); $request->setSilenttran('TRUE'); diff --git a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php index 8455f1f7c68f..dbd2bff41473 100644 --- a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php +++ b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php @@ -8,6 +8,9 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; +/** + * Test RSS adminhtml block + */ class RssTest extends \PHPUnit\Framework\TestCase { /** @@ -35,6 +38,9 @@ class RssTest extends \PHPUnit\Framework\TestCase */ protected $urlBuilder; + /** + * @inheritDoc + */ protected function setUp() { $this->storeManagerInterface = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class); @@ -51,18 +57,22 @@ protected function setUp() ); } + /** + * @return void + */ public function testGetRssData() { + $rssUrl = ''; $rssData = [ 'title' => 'Pending product review(s)', 'description' => 'Pending product review(s)', - 'link' => 'http://rss.magento.com', + 'link' => $rssUrl, 'charset' => 'UTF-8', 'entries' => [ 'title' => 'Product: "Product Name" reviewed by: Product Nick', 'link' => 'http://product.magento.com', 'description' => [ - 'rss_url' => 'http://rss.magento.com', + 'rss_url' => $rssUrl, 'name' => 'Product Name', 'summary' => 'Product Title', 'review' => 'Product Detail', @@ -71,7 +81,6 @@ public function testGetRssData() ], ], ]; - $rssUrl = 'http://rss.magento.com'; $productModel = $this->createPartialMock(\Magento\Catalog\Model\ResourceModel\Product::class, [ 'getStoreId', 'getId', @@ -118,16 +127,25 @@ public function testGetRssData() $this->assertContains($rssData['entries']['description']['store'], $data['entries'][0]['description']); } + /** + * @return void + */ public function testGetCacheLifetime() { $this->assertEquals(0, $this->block->getCacheLifetime()); } + /** + * @return void + */ public function testIsAllowed() { $this->assertEquals(true, $this->block->isAllowed()); } + /** + * @return void + */ public function testGetFeeds() { $this->assertEquals([], $this->block->getFeeds()); diff --git a/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php b/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php index f4131c4c7d83..495879541268 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php +++ b/dev/tests/static/framework/Magento/TestFramework/Dependency/PhpRule.php @@ -304,6 +304,9 @@ protected function _caseGetUrl(string $currentModule, string &$contents): array $item['action_name'] ?? UrlInterface::DEFAULT_ACTION_NAME ); if (!in_array($currentModule, $modules)) { + if (count($modules) === 1) { + $modules = reset($modules); + } $dependencies[] = [ 'module' => $modules, 'type' => RuleInterface::TYPE_HARD, diff --git a/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Dependency/PhpRuleTest.php b/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Dependency/PhpRuleTest.php index 8fb883f79bfa..a636aa81800d 100644 --- a/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Dependency/PhpRuleTest.php +++ b/dev/tests/static/framework/tests/unit/testsuite/Magento/TestFramework/Dependency/PhpRuleTest.php @@ -5,6 +5,13 @@ */ namespace Magento\TestFramework\Dependency; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; +use Magento\TestFramework\Exception\NoSuchActionException; + +/** + * Test for PhpRule dependency check + */ class PhpRuleTest extends \PHPUnit\Framework\TestCase { /** @@ -12,6 +19,15 @@ class PhpRuleTest extends \PHPUnit\Framework\TestCase */ protected $model; + /** + * @var ObjectManagerHelper + */ + private $objectManagerHelper; + + /** + * @inheritDoc + * @throws \Exception + */ protected function setUp() { $mapRoutes = ['someModule' => ['Magento\SomeModule'], 'anotherModule' => ['Magento\OneModule']]; @@ -20,9 +36,23 @@ protected function setUp() 'Magento\Module1\Plugin1' => 'Magento\Module1\Subject', 'Magento\Module1\Plugin2' => 'Magento\Module2\Subject', ]; - $this->model = new PhpRule($mapRoutes, $mapLayoutBlocks, $pluginMap); + $whitelist = []; + + $this->objectManagerHelper = new ObjectManagerHelper($this); + $this->model = $this->objectManagerHelper->getObject( + PhpRule::class, + [ + 'mapRouters' => $mapRoutes, + 'mapLayoutBlocks' => $mapLayoutBlocks, + 'pluginMap' => $pluginMap, + 'whitelists' => $whitelist, + ] + ); } + /** + * @throws \Exception + */ public function testNonPhpGetDependencyInfo() { $content = 'any content'; @@ -34,6 +64,7 @@ public function testNonPhpGetDependencyInfo() * @param string $content * @param array $expected * @dataProvider getDependencyInfoDataProvider + * @throws \Exception */ public function testGetDependencyInfo($class, $content, array $expected) { @@ -96,22 +127,6 @@ public function getDependencyInfoDataProvider() ] ] ], - 'getUrl from same module' => [ - 'Magento\SomeModule\SomeClass', - '$this->getUrl("someModule")', - [] - ], - 'getUrl from another module' => [ - 'Magento\SomeModule\SomeClass', - '$this->getUrl("anotherModule")', - [ - [ - 'module' => 'Magento\OneModule', - 'type' => \Magento\TestFramework\Dependency\RuleInterface::TYPE_HARD, - 'source' => 'getUrl("anotherModule"', - ] - ] - ], 'getBlock from same module' => [ 'Magento\SomeModule\SomeClass', '$this->getLayout()->getBlock(\'block.name\');', [] @@ -173,11 +188,88 @@ public function getDependencyInfoDataProvider() ]; } + /** + * @param string $class + * @param string $content + * @param array $expected + * @throws \Exception + * @dataProvider getDependencyInfoDataCaseGetUrlDataProvider + */ + public function testGetDependencyInfoCaseGetUrl( + string $class, + string $content, + array $expected + ) { + $file = $this->makeMockFilepath($class); + $module = $this->getModuleFromClass($class); + + $this->assertEquals($expected, $this->model->getDependencyInfo($module, 'php', $file, $content)); + } + + /** + * @return array + */ + public function getDependencyInfoDataCaseGetUrlDataProvider() + { + return [ + 'getUrl from same module' => [ + 'Magento\Cms\SomeClass', + '$this->getUrl("cms/index/index")', + [] + ], + 'getUrl from another module' => [ + 'Magento\SomeModule\SomeClass', + '$this->getUrl("cms/index/index")', + [ + [ + 'module' => 'Magento\Cms', + 'type' => \Magento\TestFramework\Dependency\RuleInterface::TYPE_HARD, + 'source' => 'getUrl("cms/index/index"', + ] + ] + ], + ]; + } + + /** + * @param string $class + * @param string $content + * @param \Exception $expected + * @throws \Exception + * @dataProvider getDependencyInfoDataCaseGetUrlExceptionDataProvider + */ + public function testGetDependencyInfoCaseGetUrlException( + string $class, + string $content, + \Exception $expected + ) { + $file = $this->makeMockFilepath($class); + $module = $this->getModuleFromClass($class); + $this->expectExceptionObject($expected); + + $this->model->getDependencyInfo($module, 'php', $file, $content); + } + + /** + * @return array + */ + public function getDependencyInfoDataCaseGetUrlExceptionDataProvider() + { + return [ + 'getUrl from same module' => [ + 'Magento\SomeModule\SomeClass', + '$this->getUrl("someModule")', + new LocalizedException(__('Invalid URL path: %1', 'somemodule/index/index')), + ], + ]; + } + /** * @param string $module * @param string $content * @param array $expected * @dataProvider getDefaultModelDependencyDataProvider + * @throws \Exception */ public function testGetDefaultModelDependency($module, $content, array $expected) { @@ -192,6 +284,9 @@ public function testGetDefaultModelDependency($module, $content, array $expected $this->assertEquals($expected, $this->model->getDependencyInfo($module, 'template', 'any', $content)); } + /** + * @return array + */ public function getDefaultModelDependencyDataProvider() { return [ From 896db5f2555a674709fa8b7fe7b79f6d7b436b86 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Mon, 10 Jun 2019 09:40:42 +0300 Subject: [PATCH 099/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../adminhtml/web/js/variations/steps/attributes_values.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index c0eb67cf0cce..9a2ef138919b 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -223,6 +223,12 @@ define([ }); if (option['is_new'] === true) { + if (!attribute.isValidOption(option)) { + throw new Error($.mage.__( + 'The value of attribute ""%1"" must be unique').replace("\"%1\"", attribute.label) + ); + } + newOptions.push(option); } }); From 07c03a6be9f42ba1905ed0021e4bf768d98b0ce9 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Mon, 10 Jun 2019 15:11:36 +0300 Subject: [PATCH 100/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Updated automated test script --- .../Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml index ab74d131cbb5..c084dd78b71b 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml @@ -96,7 +96,7 @@ <actualResult type="variable">$grabCategoryName</actualResult> </assertContains> <!--Remove the category from the product and assert that it removed--> - <comment userInput="Remove the category from the product and assert that it removed" stepKey="AssertCategoryRemoved"/> + <comment userInput="Remove the category from the product and assert that it removed" stepKey="assertCategoryRemoved"/> <actionGroup ref="removeCategoryFromProduct" stepKey="removeCategoryFromProduct"> <argument name="categoryName" value="$$createCategory.name$$"/> </actionGroup> From 346edaccad06670af34b7302459c806b4e39fe39 Mon Sep 17 00:00:00 2001 From: natalia <natalia_marozava@epam.com> Date: Mon, 10 Jun 2019 14:47:57 +0300 Subject: [PATCH 101/209] MAGETWO-63599: Check of image size is moved to _canProcess() method --- .../Magento/Framework/Image/Adapter/AbstractAdapter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php index 00f2c39aea8a..42f7e42960ef 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php +++ b/lib/internal/Magento/Framework/Image/Adapter/AbstractAdapter.php @@ -307,7 +307,7 @@ public function getImageType() if ($this->_fileType) { return $this->_fileType; } else { - if ($this->_canProcess() && filesize($this->_fileName) > 0) { + if ($this->_canProcess()) { list($this->_imageSrcWidth, $this->_imageSrcHeight, $this->_fileType) = getimagesize($this->_fileName); return $this->_fileType; } @@ -709,7 +709,7 @@ protected function _prepareDestination($destination = null, $newName = null) */ protected function _canProcess() { - return !empty($this->_fileName); + return !empty($this->_fileName) && filesize($this->_fileName) > 0; } /** From 53b641b40fbc748b9489cb5d48240e2b14d8f280 Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Tue, 11 Jun 2019 00:32:17 +0300 Subject: [PATCH 102/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can be added to shopping cart via admin - Functional test fix --- .../Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml index 66043d310ad6..3e2d5fa34dfe 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml @@ -13,7 +13,7 @@ <title value="Disabled variation of configurable product can't be added to shopping cart via admin"/> <description value="Disabled variation of configurable product can't be added to shopping cart via admin"/> <severity value="AVERAGE"/> - <testCaseId value="MAGETWO-99240"/> + <testCaseId value="MC-17373"/> <useCaseId value="MAGETWO-72172"/> <group value="ConfigurableProduct"/> </annotations> From 15d6d741a88becd9cda725b7fd58edc900f0af3b Mon Sep 17 00:00:00 2001 From: Aliaksei Yakimovich2 <aliaksei_yakimovich2@epam.com> Date: Tue, 11 Jun 2019 17:10:16 +0300 Subject: [PATCH 103/209] MAGETWO-60918: Fatal error on Import/Export page if deleted category ids exists in category path - Fixed an import/exposrt issue; --- .../CatalogImportExport/Model/Export/Product.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Export/Product.php b/app/code/Magento/CatalogImportExport/Model/Export/Product.php index 75249e490786..428c61c7fec0 100644 --- a/app/code/Magento/CatalogImportExport/Model/Export/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Export/Product.php @@ -444,8 +444,11 @@ protected function initCategories() if ($pathSize > 1) { $path = []; for ($i = 1; $i < $pathSize; $i++) { - $name = $collection->getItemById($structure[$i])->getName(); - $path[] = $this->quoteCategoryDelimiter($name); + $childCategory = $collection->getItemById($structure[$i]); + if ($childCategory) { + $name = $childCategory->getName(); + $path[] = $this->quoteCategoryDelimiter($name); + } } $this->_rootCategories[$category->getId()] = array_shift($path); if ($pathSize > 2) { @@ -673,8 +676,8 @@ protected function prepareLinks(array $productIds) /** * Update data row with information about categories. Return true, if data row was updated * - * @param array &$dataRow - * @param array &$rowCategories + * @param array $dataRow + * @param array $rowCategories * @param int $productId * @return bool */ @@ -840,6 +843,7 @@ protected function paginateCollection($page, $pageSize) public function export() { //Execution time may be very long + // phpcs:ignore Magento2.Functions.DiscouragedFunction set_time_limit(0); $writer = $this->getWriter(); @@ -963,6 +967,7 @@ protected function loadCollection(): array * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) + * phpcs:disable Generic.Metrics.NestingLevel */ protected function collectRawData() { @@ -1057,6 +1062,7 @@ protected function collectRawData() return $data; } + //phpcs:enable Generic.Metrics.NestingLevel /** * Wrap values with double quotes if "Fields Enclosure" option is enabled From d122eec4a9c404f729257ca8675bf5142bc503ab Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Tue, 11 Jun 2019 13:12:54 -0500 Subject: [PATCH 104/209] MAGETWO-99736: Authorize.net - 3D Secure 2.0 Support for 2.3 --- .../Gateway/Request/StubDataBuilder.php | 28 +++ .../Unit/Observer/DataAssignObserverTest.php | 7 +- .../AuthorizenetAcceptjs/etc/adminhtml/di.xml | 20 ++ .../Magento/AuthorizenetAcceptjs/etc/di.xml | 1 + .../Request/Authorize3DSecureBuilder.php | 82 +++++++ .../Magento/AuthorizenetCardinal/LICENSE.txt | 48 +++++ .../AuthorizenetCardinal/LICENSE_AFL.txt | 48 +++++ .../Model/Checkout/ConfigProvider.php | 45 ++++ .../AuthorizenetCardinal/Model/Config.php | 47 ++++ .../Observer/DataAssignObserver.php | 63 ++++++ .../Magento/AuthorizenetCardinal/README.md | 1 + .../Unit/Observer/DataAssignObserverTest.php | 100 +++++++++ .../AuthorizenetCardinal/composer.json | 30 +++ .../etc/adminhtml/system.xml | 22 ++ .../AuthorizenetCardinal/etc/config.xml | 16 ++ .../Magento/AuthorizenetCardinal/etc/di.xml | 16 ++ .../AuthorizenetCardinal/etc/events.xml | 13 ++ .../AuthorizenetCardinal/etc/frontend/di.xml | 18 ++ .../AuthorizenetCardinal/etc/module.xml | 15 ++ .../AuthorizenetCardinal/registration.php | 9 + .../view/frontend/requirejs-config.js | 15 ++ .../web/js/authorizenet-accept-mixin.js | 70 ++++++ app/code/Magento/CardinalCommerce/LICENSE.txt | 48 +++++ .../Magento/CardinalCommerce/LICENSE_AFL.txt | 48 +++++ .../Model/Adminhtml/Source/Environment.php | 36 ++++ .../Model/Checkout/ConfigProvider.php | 53 +++++ .../Magento/CardinalCommerce/Model/Config.php | 118 ++++++++++ .../CardinalCommerce/Model/JwtManagement.php | 141 ++++++++++++ .../Model/Request/TokenBuilder.php | 99 +++++++++ .../Model/Response/JwtParser.php | 120 +++++++++++ .../Model/Response/JwtPayloadValidator.php | 132 ++++++++++++ .../Response/JwtPayloadValidatorInterface.php | 21 ++ app/code/Magento/CardinalCommerce/README.md | 1 + .../Test/Unit/JwtManagementTest.php | 173 +++++++++++++++ .../Response/JwtPayloadValidatorTest.php | 202 ++++++++++++++++++ .../Magento/CardinalCommerce/composer.json | 27 +++ .../CardinalCommerce/etc/adminhtml/system.xml | 48 +++++ .../Magento/CardinalCommerce/etc/config.xml | 20 ++ app/code/Magento/CardinalCommerce/etc/di.xml | 10 + .../CardinalCommerce/etc/frontend/di.xml | 18 ++ .../Magento/CardinalCommerce/etc/module.xml | 15 ++ .../Magento/CardinalCommerce/registration.php | 9 + .../view/frontend/requirejs-config.js | 20 ++ .../view/frontend/web/js/cardinal-client.js | 131 ++++++++++++ .../view/frontend/web/js/cardinal-factory.js | 29 +++ composer.json | 2 + composer.lock | 4 +- .../Fixture/expected_request/authorize.php | 70 ++++++ .../Fixture/expected_request/sale.php | 70 ++++++ .../Fixture/full_order_with_3dsecure.php | 21 ++ .../Fixture/response/authorize.php | 47 ++++ .../Fixture/response/cardinal_jwt.php | 48 +++++ .../Gateway/Command/AuthorizeCommandTest.php | 186 ++++++++++++++++ .../Gateway/Command/SaleCommandTest.php | 85 ++++++++ ...ndleWithCatalogPriceRuleCalculatorTest.php | 1 + 55 files changed, 2762 insertions(+), 5 deletions(-) create mode 100644 app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/StubDataBuilder.php create mode 100644 app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php create mode 100644 app/code/Magento/AuthorizenetCardinal/LICENSE.txt create mode 100644 app/code/Magento/AuthorizenetCardinal/LICENSE_AFL.txt create mode 100644 app/code/Magento/AuthorizenetCardinal/Model/Checkout/ConfigProvider.php create mode 100644 app/code/Magento/AuthorizenetCardinal/Model/Config.php create mode 100644 app/code/Magento/AuthorizenetCardinal/Observer/DataAssignObserver.php create mode 100644 app/code/Magento/AuthorizenetCardinal/README.md create mode 100644 app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php create mode 100644 app/code/Magento/AuthorizenetCardinal/composer.json create mode 100644 app/code/Magento/AuthorizenetCardinal/etc/adminhtml/system.xml create mode 100644 app/code/Magento/AuthorizenetCardinal/etc/config.xml create mode 100644 app/code/Magento/AuthorizenetCardinal/etc/di.xml create mode 100644 app/code/Magento/AuthorizenetCardinal/etc/events.xml create mode 100644 app/code/Magento/AuthorizenetCardinal/etc/frontend/di.xml create mode 100644 app/code/Magento/AuthorizenetCardinal/etc/module.xml create mode 100644 app/code/Magento/AuthorizenetCardinal/registration.php create mode 100644 app/code/Magento/AuthorizenetCardinal/view/frontend/requirejs-config.js create mode 100644 app/code/Magento/AuthorizenetCardinal/view/frontend/web/js/authorizenet-accept-mixin.js create mode 100644 app/code/Magento/CardinalCommerce/LICENSE.txt create mode 100644 app/code/Magento/CardinalCommerce/LICENSE_AFL.txt create mode 100644 app/code/Magento/CardinalCommerce/Model/Adminhtml/Source/Environment.php create mode 100644 app/code/Magento/CardinalCommerce/Model/Checkout/ConfigProvider.php create mode 100644 app/code/Magento/CardinalCommerce/Model/Config.php create mode 100644 app/code/Magento/CardinalCommerce/Model/JwtManagement.php create mode 100644 app/code/Magento/CardinalCommerce/Model/Request/TokenBuilder.php create mode 100644 app/code/Magento/CardinalCommerce/Model/Response/JwtParser.php create mode 100644 app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidator.php create mode 100644 app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidatorInterface.php create mode 100644 app/code/Magento/CardinalCommerce/README.md create mode 100644 app/code/Magento/CardinalCommerce/Test/Unit/JwtManagementTest.php create mode 100644 app/code/Magento/CardinalCommerce/Test/Unit/Model/Response/JwtPayloadValidatorTest.php create mode 100644 app/code/Magento/CardinalCommerce/composer.json create mode 100644 app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml create mode 100644 app/code/Magento/CardinalCommerce/etc/config.xml create mode 100644 app/code/Magento/CardinalCommerce/etc/di.xml create mode 100644 app/code/Magento/CardinalCommerce/etc/frontend/di.xml create mode 100644 app/code/Magento/CardinalCommerce/etc/module.xml create mode 100644 app/code/Magento/CardinalCommerce/registration.php create mode 100644 app/code/Magento/CardinalCommerce/view/frontend/requirejs-config.js create mode 100644 app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-client.js create mode 100644 app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-factory.js create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/authorize.php create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/sale.php create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/full_order_with_3dsecure.php create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/authorize.php create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/cardinal_jwt.php create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/AuthorizeCommandTest.php create mode 100644 dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/SaleCommandTest.php diff --git a/app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/StubDataBuilder.php b/app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/StubDataBuilder.php new file mode 100644 index 000000000000..794c120f9445 --- /dev/null +++ b/app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/StubDataBuilder.php @@ -0,0 +1,28 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\AuthorizenetAcceptjs\Gateway\Request; + +use Magento\Payment\Gateway\Request\BuilderInterface; + +/** + * Stub data builder. + * + * Since the order of params is matters for Authorize.net request, + * this builder is used to reserve a place in builders sequence. + */ +class StubDataBuilder implements BuilderInterface +{ + /** + * @inheritdoc + */ + public function build(array $buildSubject): array + { + return []; + } +} diff --git a/app/code/Magento/AuthorizenetAcceptjs/Test/Unit/Observer/DataAssignObserverTest.php b/app/code/Magento/AuthorizenetAcceptjs/Test/Unit/Observer/DataAssignObserverTest.php index ebb95263f54d..bd439a336786 100644 --- a/app/code/Magento/AuthorizenetAcceptjs/Test/Unit/Observer/DataAssignObserverTest.php +++ b/app/code/Magento/AuthorizenetAcceptjs/Test/Unit/Observer/DataAssignObserverTest.php @@ -17,6 +17,9 @@ use Magento\Quote\Api\Data\PaymentInterface; use PHPUnit\Framework\TestCase; +/** + * Tests DataAssignObserver + */ class DataAssignObserverTest extends TestCase { public function testExecuteSetsProperData() @@ -30,9 +33,7 @@ public function testExecuteSetsProperData() $observerContainer = $this->createMock(Observer::class); $event = $this->createMock(Event::class); $paymentInfoModel = $this->createMock(InfoInterface::class); - $dataObject = new DataObject([ - PaymentInterface::KEY_ADDITIONAL_DATA => $additionalInfo - ]); + $dataObject = new DataObject([PaymentInterface::KEY_ADDITIONAL_DATA => $additionalInfo]); $observerContainer->method('getEvent') ->willReturn($event); $event->method('getDataByKey') diff --git a/app/code/Magento/AuthorizenetAcceptjs/etc/adminhtml/di.xml b/app/code/Magento/AuthorizenetAcceptjs/etc/adminhtml/di.xml index 320f8f79ee28..730094b8d552 100644 --- a/app/code/Magento/AuthorizenetAcceptjs/etc/adminhtml/di.xml +++ b/app/code/Magento/AuthorizenetAcceptjs/etc/adminhtml/di.xml @@ -11,4 +11,24 @@ <argument name="config" xsi:type="object">Magento\AuthorizenetAcceptjs\Model\Ui\ConfigProvider</argument> </arguments> </type> + <virtualType name="AuthorizenetAcceptjsAuthorizeRequest" type="Magento\Payment\Gateway\Request\BuilderComposite"> + <arguments> + <argument name="builders" xsi:type="array"> + <item name="request_type" xsi:type="string">AuthorizenetAcceptjsTransactionRequestTypeBuilder</item> + <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item> + <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item> + <item name="transaction_type" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthorizeDataBuilder</item> + <item name="amount" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AmountDataBuilder</item> + <item name="payment" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PaymentDataBuilder</item> + <item name="shipping" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\ShippingDataBuilder</item> + <item name="solution" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\SolutionDataBuilder</item> + <item name="order" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\OrderDataBuilder</item> + <item name="po" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PoDataBuilder</item> + <item name="customer" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomerDataBuilder</item> + <item name="address" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AddressDataBuilder</item> + <item name="custom_settings" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomSettingsBuilder</item> + <item name="passthrough_data" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PassthroughDataBuilder</item> + </argument> + </arguments> + </virtualType> </config> diff --git a/app/code/Magento/AuthorizenetAcceptjs/etc/di.xml b/app/code/Magento/AuthorizenetAcceptjs/etc/di.xml index cf10557d3869..02dffe215fcc 100644 --- a/app/code/Magento/AuthorizenetAcceptjs/etc/di.xml +++ b/app/code/Magento/AuthorizenetAcceptjs/etc/di.xml @@ -258,6 +258,7 @@ <item name="po" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PoDataBuilder</item> <item name="customer" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomerDataBuilder</item> <item name="address" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AddressDataBuilder</item> + <item name="3d_secure" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StubDataBuilder</item> <item name="custom_settings" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomSettingsBuilder</item> <item name="passthrough_data" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PassthroughDataBuilder</item> </argument> diff --git a/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php b/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php new file mode 100644 index 000000000000..3ff4f7dcea06 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php @@ -0,0 +1,82 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\AuthorizenetCardinal\Gateway\Request; + +use Magento\AuthorizenetAcceptjs\Gateway\SubjectReader; +use Magento\AuthorizenetCardinal\Model\Config; +use Magento\CardinalCommerce\Model\Response\JwtParser; +use Magento\Payment\Gateway\Request\BuilderInterface; +use Magento\Sales\Model\Order\Payment; + +/** + * Adds the cardholder authentication information to the request + */ +class Authorize3DSecureBuilder implements BuilderInterface +{ + /** + * @var SubjectReader + */ + private $subjectReader; + + /** + * @var Config + */ + private $config; + + /** + * @var JwtParser + */ + private $jwtParser; + + /** + * @param SubjectReader $subjectReader + * @param Config $config + * @param JwtParser $jwtParser + */ + public function __construct( + SubjectReader $subjectReader, + Config $config, + JwtParser $jwtParser + ) { + $this->subjectReader = $subjectReader; + $this->config = $config; + $this->jwtParser = $jwtParser; + } + + /** + * @inheritdoc + */ + public function build(array $buildSubject): array + { + if ($this->config->isActive() === false) { + return []; + } + + $paymentDO = $this->subjectReader->readPayment($buildSubject); + $payment = $paymentDO->getPayment(); + $data = []; + + if ($payment instanceof Payment) { + $cardinalJwt = (string)$payment->getAdditionalInformation('cardinalJWT'); + $jwtPayload = $this->jwtParser->execute($cardinalJwt); + $eciFlag = $jwtPayload['Payload']['Payment']['ExtendedData']['ECIFlag']; + $cavv = $jwtPayload['Payload']['Payment']['ExtendedData']['CAVV']; + $data = [ + 'transactionRequest' => [ + 'cardholderAuthentication' => [ + 'authenticationIndicator' => $eciFlag, + 'cardholderAuthenticationValue' => $cavv + ], + ] + ]; + } + + return $data; + } +} diff --git a/app/code/Magento/AuthorizenetCardinal/LICENSE.txt b/app/code/Magento/AuthorizenetCardinal/LICENSE.txt new file mode 100644 index 000000000000..49525fd99da9 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/AuthorizenetCardinal/LICENSE_AFL.txt b/app/code/Magento/AuthorizenetCardinal/LICENSE_AFL.txt new file mode 100644 index 000000000000..f39d641b18a1 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/AuthorizenetCardinal/Model/Checkout/ConfigProvider.php b/app/code/Magento/AuthorizenetCardinal/Model/Checkout/ConfigProvider.php new file mode 100644 index 000000000000..d0cde9c643eb --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/Model/Checkout/ConfigProvider.php @@ -0,0 +1,45 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\AuthorizenetCardinal\Model\Checkout; + +use Magento\AuthorizenetCardinal\Model\Config; +use Magento\Checkout\Model\ConfigProviderInterface; + +/** + * Configuration provider. + */ +class ConfigProvider implements ConfigProviderInterface +{ + /** + * @var Config + */ + private $config; + + /** + * @param Config $config + */ + public function __construct( + Config $config + ) { + $this->config = $config; + } + + /** + * @inheritdoc + */ + public function getConfig(): array + { + $config['cardinal'] = [ + 'isActiveFor' => [ + 'authorizenet' => $this->config->isActive() + ] + ]; + + return $config; + } +} diff --git a/app/code/Magento/AuthorizenetCardinal/Model/Config.php b/app/code/Magento/AuthorizenetCardinal/Model/Config.php new file mode 100644 index 000000000000..a4390bb10369 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/Model/Config.php @@ -0,0 +1,47 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\AuthorizenetCardinal\Model; + +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Store\Model\ScopeInterface; + +/** + * AuthorizenetCardinal integration configuration. + * + * Class is a proxy service for retrieving configuration settings. + */ +class Config +{ + /** + * @var ScopeConfigInterface + */ + private $scopeConfig; + + /** + * @param ScopeConfigInterface $scopeConfig + */ + public function __construct(ScopeConfigInterface $scopeConfig) + { + $this->scopeConfig = $scopeConfig; + } + + /** + * If this config option set to false no AuthorizenetCardinal integration should be available + * + * @param int|null $storeId + * @return bool + */ + public function isActive(?int $storeId = null): bool + { + $enabled = $this->scopeConfig->isSetFlag( + 'three_d_secure/cardinal/enabled_authorizenet', + ScopeInterface::SCOPE_STORE, + $storeId + ); + + return $enabled; + } +} diff --git a/app/code/Magento/AuthorizenetCardinal/Observer/DataAssignObserver.php b/app/code/Magento/AuthorizenetCardinal/Observer/DataAssignObserver.php new file mode 100644 index 000000000000..cb2cdf64ae38 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/Observer/DataAssignObserver.php @@ -0,0 +1,63 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\AuthorizenetCardinal\Observer; + +use Magento\Framework\Event\Observer; +use Magento\Payment\Observer\AbstractDataAssignObserver; +use Magento\Quote\Api\Data\PaymentInterface; +use Magento\AuthorizenetCardinal\Model\Config; + +/** + * Adds the payment info to the payment object + */ +class DataAssignObserver extends AbstractDataAssignObserver +{ + /** + * JWT key + */ + private const JWT_KEY = 'cardinalJWT'; + + /** + * @var Config + */ + private $config; + + /** + * @param Config $config + */ + public function __construct( + Config $config + ) { + $this->config = $config; + } + + /** + * @inheritdoc + */ + public function execute(Observer $observer) + { + if ($this->config->isActive() === false) { + return; + } + + $data = $this->readDataArgument($observer); + $additionalData = $data->getData(PaymentInterface::KEY_ADDITIONAL_DATA); + if (!is_array($additionalData)) { + return; + } + + $paymentInfo = $this->readPaymentModelArgument($observer); + if (isset($additionalData[self::JWT_KEY])) { + $paymentInfo->setAdditionalInformation( + self::JWT_KEY, + $additionalData[self::JWT_KEY] + ); + } + } +} diff --git a/app/code/Magento/AuthorizenetCardinal/README.md b/app/code/Magento/AuthorizenetCardinal/README.md new file mode 100644 index 000000000000..2324f680bafc --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/README.md @@ -0,0 +1 @@ +The AuthorizenetCardinal module provides a possibility to enable 3-D Secure 2.0 support for AuthorizenetAcceptjs payment integration. \ No newline at end of file diff --git a/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php b/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php new file mode 100644 index 000000000000..a45ddc6cfbb3 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php @@ -0,0 +1,100 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\AuthorizenetCardinal\Test\Unit\Observer; + +use Magento\AuthorizenetCardinal\Model\Config; +use Magento\Framework\DataObject; +use Magento\Framework\Event; +use Magento\Framework\Event\Observer; +use Magento\Payment\Model\InfoInterface; +use Magento\Payment\Observer\AbstractDataAssignObserver; +use Magento\AuthorizenetCardinal\Observer\DataAssignObserver; +use Magento\Quote\Api\Data\PaymentInterface; +use PHPUnit\Framework\TestCase; + +/** + * Class DataAssignObserverTest + */ +class DataAssignObserverTest extends TestCase +{ + /** + * Tests setting JWT in payment additional information. + */ + public function testExecuteSetsProperData() + { + $additionalInfo = [ + 'cardinalJWT' => 'foo' + ]; + + $config = $this->createMock(Config::class); + $config->method('isActive') + ->willReturn(true); + $observerContainer = $this->createMock(Observer::class); + $event = $this->createMock(Event::class); + $paymentInfoModel = $this->createMock(InfoInterface::class); + $dataObject = new DataObject([PaymentInterface::KEY_ADDITIONAL_DATA => $additionalInfo]); + $observerContainer->method('getEvent') + ->willReturn($event); + $event->method('getDataByKey') + ->willReturnMap( + [ + [AbstractDataAssignObserver::MODEL_CODE, $paymentInfoModel], + [AbstractDataAssignObserver::DATA_CODE, $dataObject] + ] + ); + $paymentInfoModel->expects($this->once()) + ->method('setAdditionalInformation') + ->with('cardinalJWT', 'foo'); + + $observer = new DataAssignObserver($config); + $observer->execute($observerContainer); + } + + /** + * Tests case when Cardinal JWT is absent. + */ + public function testDoesntSetDataWhenEmpty() + { + $config = $this->createMock(Config::class); + $config->method('isActive') + ->willReturn(true); + $observerContainer = $this->createMock(Observer::class); + $event = $this->createMock(Event::class); + $paymentInfoModel = $this->createMock(InfoInterface::class); + $observerContainer->method('getEvent') + ->willReturn($event); + $event->method('getDataByKey') + ->willReturnMap( + [ + [AbstractDataAssignObserver::MODEL_CODE, $paymentInfoModel], + [AbstractDataAssignObserver::DATA_CODE, new DataObject()] + ] + ); + $paymentInfoModel->expects($this->never()) + ->method('setAdditionalInformation'); + + $observer = new DataAssignObserver($config); + $observer->execute($observerContainer); + } + + /** + * Tests case when CardinalCommerce is disabled. + */ + public function testDoesnttDataWhenEmpty() + { + $config = $this->createMock(Config::class); + $config->method('isActive') + ->willReturn(false); + $observerContainer = $this->createMock(Observer::class); + $observerContainer->expects($this->never()) + ->method('getEvent'); + $observer = new DataAssignObserver($config); + $observer->execute($observerContainer); + } +} diff --git a/app/code/Magento/AuthorizenetCardinal/composer.json b/app/code/Magento/AuthorizenetCardinal/composer.json new file mode 100644 index 000000000000..e98e41551bcd --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/composer.json @@ -0,0 +1,30 @@ +{ + "name": "magento/module-authorizenet-cardinal", + "description": "Provides a possibility to enable 3-D Secure 2.0 support for Authorize.Net Acceptjs.", + "config": { + "sort-packages": true + }, + "require": { + "php": "~7.1.3||~7.2.0", + "magento/module-authorizenet-acceptjs": "*", + "magento/module-cardinal-commerce": "*", + "magento/module-payment": "*", + "magento/module-sales": "*", + "magento/module-quote": "*", + "magento/module-checkout": "*", + "magento/module-store": "*" + }, + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AuthorizenetCardinal\\": "" + } + } +} diff --git a/app/code/Magento/AuthorizenetCardinal/etc/adminhtml/system.xml b/app/code/Magento/AuthorizenetCardinal/etc/adminhtml/system.xml new file mode 100644 index 000000000000..2be287a5e874 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/etc/adminhtml/system.xml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> + <system> + <section id="three_d_secure"> + <group id="cardinal"> + <group id="config"> + <field id="enabled_authorize" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>Enable for Authorize.Net</label> + <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> + <config_path>three_d_secure/cardinal/enabled_authorizenet</config_path> + </field> + </group> + </group> + </section> + </system> +</config> diff --git a/app/code/Magento/AuthorizenetCardinal/etc/config.xml b/app/code/Magento/AuthorizenetCardinal/etc/config.xml new file mode 100644 index 000000000000..d94bcdc47900 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/etc/config.xml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"> + <default> + <three_d_secure> + <cardinal> + <enabled_authorizenet>0</enabled_authorizenet> + </cardinal> + </three_d_secure> + </default> +</config> diff --git a/app/code/Magento/AuthorizenetCardinal/etc/di.xml b/app/code/Magento/AuthorizenetCardinal/etc/di.xml new file mode 100644 index 000000000000..45541a3cf499 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/etc/di.xml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> + <virtualType name="AuthorizenetAcceptjsAuthorizeRequest"> + <arguments> + <argument name="builders" xsi:type="array"> + <item name="3d_secure" xsi:type="string">Magento\AuthorizenetCardinal\Gateway\Request\Authorize3DSecureBuilder</item> + </argument> + </arguments> + </virtualType> +</config> diff --git a/app/code/Magento/AuthorizenetCardinal/etc/events.xml b/app/code/Magento/AuthorizenetCardinal/etc/events.xml new file mode 100644 index 000000000000..5b0afbe68469 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/etc/events.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> + <event name="payment_method_assign_data_authorizenet_acceptjs"> + <observer name="authorizenet_cardinal_data_assign" instance="Magento\AuthorizenetCardinal\Observer\DataAssignObserver" /> + </event> +</config> diff --git a/app/code/Magento/AuthorizenetCardinal/etc/frontend/di.xml b/app/code/Magento/AuthorizenetCardinal/etc/frontend/di.xml new file mode 100644 index 000000000000..13c7a223e82d --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/etc/frontend/di.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> + <type name="Magento\Checkout\Model\CompositeConfigProvider"> + <arguments> + <argument name="configProviders" xsi:type="array"> + <item name="authorizenet_cardinal_config_provider" xsi:type="object"> + Magento\AuthorizenetCardinal\Model\Checkout\ConfigProvider + </item> + </argument> + </arguments> + </type> +</config> diff --git a/app/code/Magento/AuthorizenetCardinal/etc/module.xml b/app/code/Magento/AuthorizenetCardinal/etc/module.xml new file mode 100644 index 000000000000..fdf8151311f4 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/etc/module.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> + <module name="Magento_AuthorizenetCardinal" > + <sequence> + <module name="Magento_AuthorizenetAcceptjs"/> + <module name="Magento_CardinalCommerce"/> + </sequence> + </module> +</config> diff --git a/app/code/Magento/AuthorizenetCardinal/registration.php b/app/code/Magento/AuthorizenetCardinal/registration.php new file mode 100644 index 000000000000..0153e9eaa4d2 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/registration.php @@ -0,0 +1,9 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use \Magento\Framework\Component\ComponentRegistrar; + +ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_AuthorizenetCardinal', __DIR__); diff --git a/app/code/Magento/AuthorizenetCardinal/view/frontend/requirejs-config.js b/app/code/Magento/AuthorizenetCardinal/view/frontend/requirejs-config.js new file mode 100644 index 000000000000..81823cb2afc5 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/view/frontend/requirejs-config.js @@ -0,0 +1,15 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +var config = { + config: { + mixins: { + 'Magento_AuthorizenetAcceptjs/js/view/payment/method-renderer/authorizenet-accept': { + 'Magento_AuthorizenetCardinal/js/authorizenet-accept-mixin': true + } + } + } +}; + diff --git a/app/code/Magento/AuthorizenetCardinal/view/frontend/web/js/authorizenet-accept-mixin.js b/app/code/Magento/AuthorizenetCardinal/view/frontend/web/js/authorizenet-accept-mixin.js new file mode 100644 index 000000000000..336ceaab3ec6 --- /dev/null +++ b/app/code/Magento/AuthorizenetCardinal/view/frontend/web/js/authorizenet-accept-mixin.js @@ -0,0 +1,70 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'Magento_CardinalCommerce/js/cardinal-client', + 'Magento_Checkout/js/model/full-screen-loader', + 'Magento_Ui/js/model/messageList' +], function ($, cardinalClient, fullScreenLoader, globalMessageList) { + 'use strict'; + + return function (originalComponent) { + return originalComponent.extend({ + defaults: { + cardinalJWT: null + }, + + /** + * Performs 3d-secure authentication + */ + beforePlaceOrder: function () { + var original = this._super.bind(this), + client = cardinalClient, + isActive = window.checkoutConfig.cardinal.isActiveFor.authorizenet, + cardData; + + if (!isActive || !$(this.formElement).valid()) { + return original(); + } + + cardData = { + accountNumber: this.creditCardNumber(), + expMonth: this.creditCardExpMonth(), + expYear: this.creditCardExpYear() + }; + + if (this.hasVerification()) { + cardData.cardCode = this.creditCardVerificationNumber(); + } + + fullScreenLoader.startLoader(); + client.startAuthentication(cardData) + .always(function () { + fullScreenLoader.stopLoader(); + }) + .done(function (jwt) { + this.cardinalJWT = jwt; + original(); + }.bind(this)) + .fail(function (errorMessage) { + globalMessageList.addErrorMessage({ + message: errorMessage + }); + }); + }, + + /** + * @returns {Object} + */ + getData: function () { + var originalData = this._super(); + + originalData['additional_data'].cardinalJWT = this.cardinalJWT; + + return originalData; + } + }); + }; +}); diff --git a/app/code/Magento/CardinalCommerce/LICENSE.txt b/app/code/Magento/CardinalCommerce/LICENSE.txt new file mode 100644 index 000000000000..49525fd99da9 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/app/code/Magento/CardinalCommerce/LICENSE_AFL.txt b/app/code/Magento/CardinalCommerce/LICENSE_AFL.txt new file mode 100644 index 000000000000..f39d641b18a1 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/app/code/Magento/CardinalCommerce/Model/Adminhtml/Source/Environment.php b/app/code/Magento/CardinalCommerce/Model/Adminhtml/Source/Environment.php new file mode 100644 index 000000000000..29e2939a0ae5 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Adminhtml/Source/Environment.php @@ -0,0 +1,36 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Model\Adminhtml\Source; + +/** + * CardinalCommerce Environment Dropdown source + */ +class Environment implements \Magento\Framework\Data\OptionSourceInterface +{ + private const ENVIRONMENT_PRODUCTION = 'production'; + private const ENVIRONMENT_SANDBOX = 'sandbox'; + + /** + * Possible environment types + * + * @return array + */ + public function toOptionArray(): array + { + return [ + [ + 'value' => self::ENVIRONMENT_SANDBOX, + 'label' => 'Sandbox', + ], + [ + 'value' => self::ENVIRONMENT_PRODUCTION, + 'label' => 'Production' + ] + ]; + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/Checkout/ConfigProvider.php b/app/code/Magento/CardinalCommerce/Model/Checkout/ConfigProvider.php new file mode 100644 index 000000000000..a6794eae9008 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Checkout/ConfigProvider.php @@ -0,0 +1,53 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Model\Checkout; + +use Magento\CardinalCommerce\Model\Config; +use Magento\CardinalCommerce\Model\Request\TokenBuilder; +use Magento\Checkout\Model\ConfigProviderInterface; + +/** + * Configuration provider. + */ +class ConfigProvider implements ConfigProviderInterface +{ + /** + * @var TokenBuilder + */ + private $requestJwtBuilder; + + /** + * @var Config + */ + private $config; + + /** + * @param TokenBuilder $requestJwtBuilder + * @param Config $config + */ + public function __construct( + TokenBuilder $requestJwtBuilder, + Config $config + ) { + $this->requestJwtBuilder = $requestJwtBuilder; + $this->config = $config; + } + + /** + * @inheritdoc + */ + public function getConfig(): array + { + $config['cardinal'] = [ + 'environment' => $this->config->getEnvironment(), + 'requestJWT' => $this->requestJwtBuilder->build() + ]; + + return $config; + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/Config.php b/app/code/Magento/CardinalCommerce/Model/Config.php new file mode 100644 index 000000000000..0975ed77c970 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Config.php @@ -0,0 +1,118 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\CardinalCommerce\Model; + +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Store\Model\ScopeInterface; + +/** + * CardinalCommerce integration configuration. + * + * Class is a proxy service for retrieving configuration settings. + */ +class Config +{ + /** + * @var ScopeConfigInterface + */ + private $scopeConfig; + + /** + * @param ScopeConfigInterface $scopeConfig + */ + public function __construct(ScopeConfigInterface $scopeConfig) + { + $this->scopeConfig = $scopeConfig; + } + + /** + * Returns CardinalCommerce API Key used for authentication. + * + * A shared secret value between the merchant and Cardinal. This value should never be exposed to the public. + * + * @param int|null $storeId + * @return string + */ + public function getApiKey(?int $storeId = null): string + { + $apiKey = $this->scopeConfig->getValue( + 'three_d_secure/cardinal/api_key', + ScopeInterface::SCOPE_STORE, + $storeId + ); + return $apiKey; + } + + /** + * Returns CardinalCommerce API Identifier. + * + * GUID used to identify the specific API Key. + * + * @param int|null $storeId + * @return string + */ + public function getApiIdentifier(?int $storeId = null): string + { + $apiIdentifier = $this->scopeConfig->getValue( + 'three_d_secure/cardinal/api_identifier', + ScopeInterface::SCOPE_STORE, + $storeId + ); + return $apiIdentifier; + } + + /** + * Returns CardinalCommerce Org Unit Id. + * + * GUID to identify the merchant organization within Cardinal systems. + * + * @param int|null $storeId + * @return string + */ + public function getOrgUnitId(?int $storeId = null): string + { + $orgUnitId = $this->scopeConfig->getValue( + 'three_d_secure/cardinal/org_unit_id', + ScopeInterface::SCOPE_STORE, + $storeId + ); + return $orgUnitId; + } + + /** + * Returns CardinalCommerce environment. + * + * Sandbox or production. + * + * @param int|null $storeId + * @return string + */ + public function getEnvironment(?int $storeId = null): string + { + $orgUnitId = $this->scopeConfig->getValue( + 'three_d_secure/cardinal/environment', + ScopeInterface::SCOPE_STORE, + $storeId + ); + return $orgUnitId; + } + + /** + * If is "true" extra information about interaction with CardinalCommerce API are written to payment.log file + * + * @param int|null $storeId + * @return bool + */ + public function isDebugModeEnabled(?int $storeId = null): bool + { + $debugModeEnabled = $this->scopeConfig->isSetFlag( + 'three_d_secure/cardinal/debug', + ScopeInterface::SCOPE_STORE, + $storeId + ); + return $debugModeEnabled; + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/JwtManagement.php b/app/code/Magento/CardinalCommerce/Model/JwtManagement.php new file mode 100644 index 000000000000..cfbdb2d8a1f1 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/JwtManagement.php @@ -0,0 +1,141 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Model; + +use Magento\Framework\Serialize\Serializer\Json; + +/** + * JSON Web Token management. + */ +class JwtManagement +{ + /** + * The signing algorithm. Cardinal supported algorithm is 'HS256' + */ + private const SIGN_ALGORITHM = 'HS256'; + + /** + * @var Json + */ + private $json; + + /** + * @param Json $json + */ + public function __construct( + Json $json + ) { + $this->json = $json; + } + + /** + * Converts JWT string into array. + * + * @param string $jwt The JWT + * @param string $key The secret key + * + * @return array + * @throws \InvalidArgumentException + */ + public function decode(string $jwt, string $key): array + { + if (empty($jwt)) { + throw new \InvalidArgumentException('JWT is empty'); + } + + $parts = explode('.', $jwt); + if (count($parts) != 3) { + throw new \InvalidArgumentException('Wrong number of segments in JWT'); + } + + list($headB64, $payloadB64, $signatureB64) = $parts; + + $headerJson = $this->urlSafeB64Decode($headB64); + $header = $this->json->unserialize($headerJson); + + $payloadJson = $this->urlSafeB64Decode($payloadB64); + $payload = $this->json->unserialize($payloadJson); + + $signature = $this->urlSafeB64Decode($signatureB64); + if ($signature !== $this->sign($headB64 . '.' . $payloadB64, $key, $header['alg'])) { + throw new \InvalidArgumentException('JWT signature verification failed'); + } + + return $payload; + } + + /** + * Converts and signs array into a JWT string. + * + * @param array $payload + * @param string $key + * + * @return string + * @throws \InvalidArgumentException + */ + public function encode(array $payload, string $key): string + { + $header = ['typ' => 'JWT', 'alg' => self::SIGN_ALGORITHM]; + + $headerJson = $this->json->serialize($header); + $segments[] = $this->urlSafeB64Encode($headerJson); + + $payloadJson = $this->json->serialize($payload); + $segments[] = $this->urlSafeB64Encode($payloadJson); + + $signature = $this->sign(implode('.', $segments), $key, $header['alg']); + $segments[] = $this->urlSafeB64Encode($signature); + + return implode('.', $segments); + } + /** + * Sign a string with a given key and algorithm. + * + * @param string $msg The message to sign. + * @param string $key The secret key. + * @param string $algorithm The signing algorithm. + * + * @return string + * @throws \InvalidArgumentException + */ + private function sign(string $msg, string $key, string $algorithm): string + { + if ($algorithm !== self::SIGN_ALGORITHM) { + throw new \InvalidArgumentException('Algorithm ' . $algorithm . ' is not supported'); + } + + return hash_hmac('sha256', $msg, $key, true); + } + + /** + * Decode a string with URL-safe Base64. + * + * @param string $input A Base64 encoded string + * + * @return string + */ + private function urlSafeB64Decode(string $input): string + { + // phpcs:ignore Magento2.Functions.DiscouragedFunction + return base64_decode( + str_pad(strtr($input, '-_', '+/'), strlen($input) % 4, '=', STR_PAD_RIGHT) + ); + } + + /** + * Encode a string with URL-safe Base64. + * + * @param string $input The string you want encoded + * + * @return string + */ + private function urlSafeB64Encode(string $input): string + { + return str_replace('=', '', strtr(base64_encode($input), '+/', '-_')); + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/Request/TokenBuilder.php b/app/code/Magento/CardinalCommerce/Model/Request/TokenBuilder.php new file mode 100644 index 000000000000..e045d00dc55f --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Request/TokenBuilder.php @@ -0,0 +1,99 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Model\Request; + +use Magento\CardinalCommerce\Model\JwtManagement; +use Magento\CardinalCommerce\Model\Config; +use Magento\Checkout\Model\Session; +use Magento\Framework\DataObject\IdentityGeneratorInterface; +use Magento\Framework\Intl\DateTimeFactory; + +/** + * Cardinal request token builder. + * + * @SuppressWarnings(PHPMD.CookieAndSessionMisuse) + */ +class TokenBuilder +{ + /** + * @var JwtManagement + */ + private $jwtManagement; + + /** + * @var Session + */ + private $checkoutSession; + + /** + * @var Config + */ + private $config; + + /** + * @var IdentityGeneratorInterface + */ + private $identityGenerator; + + /** + * @var DateTimeFactory + */ + private $dateTimeFactory; + + /** + * @param JwtManagement $jwtManagement + * @param Session $checkoutSession + * @param Config $config + * @param IdentityGeneratorInterface $identityGenerator + * @param DateTimeFactory $dateTimeFactory + */ + public function __construct( + JwtManagement $jwtManagement, + Session $checkoutSession, + Config $config, + IdentityGeneratorInterface $identityGenerator, + DateTimeFactory $dateTimeFactory + ) { + $this->jwtManagement = $jwtManagement; + $this->checkoutSession = $checkoutSession; + $this->config = $config; + $this->identityGenerator = $identityGenerator; + $this->dateTimeFactory = $dateTimeFactory; + } + + /** + * Builds request JWT. + * + * @return string + */ + public function build() + { + $quote = $this->checkoutSession->getQuote(); + $currentDate = $this->dateTimeFactory->create('now', new \DateTimeZone('UTC')); + $orderDetails = [ + 'OrderDetails' => [ + 'OrderNumber' => $quote->getId(), + 'Amount' => $quote->getBaseGrandTotal() * 100, + 'CurrencyCode' => $quote->getBaseCurrencyCode() + ] + ]; + + $token = [ + 'jti' => $this->identityGenerator->generateId(), + 'iss' => $this->config->getApiIdentifier(), + 'iat' => $currentDate->getTimestamp(), + 'OrgUnitId' => $this->config->getOrgUnitId(), + 'Payload' => $orderDetails, + 'ObjectifyPayload' => true + ]; + + $jwt = $this->jwtManagement->encode($token, $this->config->getApiKey()); + + return $jwt; + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/Response/JwtParser.php b/app/code/Magento/CardinalCommerce/Model/Response/JwtParser.php new file mode 100644 index 000000000000..1865605d50ac --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Response/JwtParser.php @@ -0,0 +1,120 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Model\Response; + +use Magento\CardinalCommerce\Model\JwtManagement; +use Magento\CardinalCommerce\Model\Config; +use Magento\Framework\Exception\LocalizedException; +use Psr\Log\LoggerInterface; +use Magento\Payment\Model\Method\Logger as PaymentLogger; + +/** + * Parse content of CardinalCommerce response JWT. + */ +class JwtParser +{ + /** + * @var JwtManagement + */ + private $jwtManagement; + + /** + * @var Config + */ + private $config; + + /** + * @var JwtPayloadValidatorInterface + */ + private $tokenValidator; + + /** + * @var LoggerInterface + */ + private $logger; + + /** + * @var PaymentLogger + */ + private $paymentLogger; + + /** + * @param JwtManagement $jwtManagement + * @param Config $config + * @param JwtPayloadValidatorInterface $tokenValidator + * @param PaymentLogger $paymentLogger + * @param LoggerInterface $logger + */ + public function __construct( + JwtManagement $jwtManagement, + Config $config, + JwtPayloadValidatorInterface $tokenValidator, + PaymentLogger $paymentLogger, + LoggerInterface $logger + ) { + $this->jwtManagement = $jwtManagement; + $this->config = $config; + $this->tokenValidator = $tokenValidator; + $this->paymentLogger = $paymentLogger; + $this->logger = $logger; + } + + /** + * Returns response JWT payload. + * + * @param string $jwt + * @return array + * @throws LocalizedException + */ + public function execute(string $jwt): array + { + $jwtPayload = ''; + try { + $this->debug(['Cardinal Response JWT:' => $jwt]); + $jwtPayload = $this->jwtManagement->decode($jwt, $this->config->getApiKey()); + $this->debug(['Cardinal Response JWT payload:' => $jwtPayload]); + if (!$this->tokenValidator->validate($jwtPayload)) { + $this->throwException(); + } + } catch (\InvalidArgumentException $e) { + $this->logger->critical($e, ['CardinalCommerce3DSecure']); + $this->throwException(); + } + + return $jwtPayload; + } + + /** + * Log JWT data. + * + * @param array $data + * @return void + */ + private function debug(array $data) + { + if ($this->config->isDebugModeEnabled()) { + $this->paymentLogger->debug($data, ['iss'], true); + } + } + + /** + * Throw general localized exception. + * + * @return void + * @throws LocalizedException + */ + private function throwException() + { + throw new LocalizedException( + __( + 'Authentication Failed. Your card issuer cannot authenticate this card. ' . + 'Please select another card or form of payment to complete your purchase.' + ) + ); + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidator.php b/app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidator.php new file mode 100644 index 000000000000..9720b90cad91 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidator.php @@ -0,0 +1,132 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Model\Response; + +use Magento\Framework\Intl\DateTimeFactory; + +/** + * Validates payload of CardinalCommerce response JWT. + */ +class JwtPayloadValidator implements JwtPayloadValidatorInterface +{ + /** + * Resulting state of the transaction. + * + * SUCCESS - The transaction resulted in success for the payment type used. For example, + * with a CCA transaction this would indicate the user has successfully completed authentication. + * + * NOACTION - The transaction was successful but requires in no additional action. For example, + * with a CCA transaction this would indicate that the user is not currently enrolled in 3D Secure, + * but the API calls were successful. + * + * FAILURE - The transaction resulted in an error. For example, with a CCA transaction this would indicate + * that the user failed authentication or an error was encountered while processing the transaction. + * + * ERROR - A service level error was encountered. These are generally reserved for connectivity + * or API authentication issues. For example if your JWT was incorrectly signed, or Cardinal + * services are currently unreachable. + * + * @var array + */ + private $allowedActionCode = ['SUCCESS', 'NOACTION']; + + /** + * 3DS status of transaction from ECI Flag value. Liability shift applies. + * + * 05 - Successful 3D Authentication (Visa, AMEX, JCB) + * 02 - Successful 3D Authentication (MasterCard) + * 06 - Attempted Processing or User Not Enrolled (Visa, AMEX, JCB) + * 01 - Attempted Processing or User Not Enrolled (MasterCard) + * 07 - 3DS authentication is either failed or could not be attempted; + * possible reasons being both card and Issuing Bank are not secured by 3DS, + * technical errors, or improper configuration. (Visa, AMEX, JCB) + * 00 - 3DS authentication is either failed or could not be attempted; + * possible reasons being both card and Issuing Bank are not secured by 3DS, + * technical errors, or improper configuration. (MasterCard) + * + * @var array + */ + private $allowedECIFlag = ['05', '02', '06', '01']; + + /** + * @var DateTimeFactory + */ + private $dateTimeFactory; + + /** + * @param DateTimeFactory $dateTimeFactory + */ + public function __construct( + DateTimeFactory $dateTimeFactory + ) { + $this->dateTimeFactory = $dateTimeFactory; + } + /** + * @inheritdoc + */ + public function validate(array $jwtPayload): bool + { + $transactionState = $jwtPayload['Payload']['ActionCode'] ?? ''; + $errorNumber = $jwtPayload['Payload']['ErrorNumber'] ?? -1; + $eciFlag = $jwtPayload['Payload']['Payment']['ExtendedData']['ECIFlag'] ?? ''; + $expTimestamp = $jwtPayload['exp'] ?? 0; + + return $this->isValidErrorNumber((int)$errorNumber) + && $this->isValidTransactionState($transactionState) + && $this->isValidEciFlag($eciFlag) + && $this->isNotExpired((int)$expTimestamp); + } + + /** + * Checks application error number. + * + * A non-zero value represents the error encountered while attempting the process the message request. + * + * @param int $errorNumber + * @return bool + */ + private function isValidErrorNumber(int $errorNumber) + { + return $errorNumber === 0; + } + + /** + * Checks if value of transaction state identifier is in allowed list. + * + * @param string $transactionState + * @return bool + */ + private function isValidTransactionState(string $transactionState) + { + return in_array($transactionState, $this->allowedActionCode); + } + + /** + * Checks if value of ECI Flag identifier is in allowed list. + * + * @param string $eciFlag + * @return bool + */ + private function isValidEciFlag(string $eciFlag) + { + return in_array($eciFlag, $this->allowedECIFlag); + } + + /** + * Checks if token is not expired. + * + * @param int $expTimestamp + * @return bool + */ + private function isNotExpired(int $expTimestamp) + { + $currentDate = $this->dateTimeFactory->create('now', new \DateTimeZone('UTC')); + + return $currentDate->getTimestamp() < $expTimestamp; + } +} diff --git a/app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidatorInterface.php b/app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidatorInterface.php new file mode 100644 index 000000000000..774c0daee6ca --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Model/Response/JwtPayloadValidatorInterface.php @@ -0,0 +1,21 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CardinalCommerce\Model\Response; + +/** + * Validates payload of CardinalCommerce response JWT. + */ +interface JwtPayloadValidatorInterface +{ + /** + * Validates token payload. + * + * @param array $jwtPayload + * @return bool + */ + public function validate(array $jwtPayload); +} diff --git a/app/code/Magento/CardinalCommerce/README.md b/app/code/Magento/CardinalCommerce/README.md new file mode 100644 index 000000000000..54db9114a2a0 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/README.md @@ -0,0 +1 @@ +The CardinalCommerce module provides a possibility to enable 3-D Secure 2.0 support for payment methods. \ No newline at end of file diff --git a/app/code/Magento/CardinalCommerce/Test/Unit/JwtManagementTest.php b/app/code/Magento/CardinalCommerce/Test/Unit/JwtManagementTest.php new file mode 100644 index 000000000000..70eae201c157 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Test/Unit/JwtManagementTest.php @@ -0,0 +1,173 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Test\Unit\Model; + +use Magento\CardinalCommerce\Model\JwtManagement; +use Magento\Framework\Serialize\Serializer\Json; + +/** + * Tests JWT encode and decode. + */ +class JwtManagementTest extends \PHPUnit\Framework\TestCase +{ + /** + * API key + */ + private const API_KEY = 'API key'; + + /** + * @var JwtManagement + */ + private $model; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->model = new JwtManagement(new Json()); + } + + /** + * Tests JWT encode. + */ + public function testEncode() + { + $jwt = $this->model->encode($this->getTokenPayload(), self::API_KEY); + + $this->assertEquals( + $this->getValidHS256Jwt(), + $jwt, + 'Generated JWT isn\'t equal to expected' + ); + } + + /** + * Tests JWT decode. + */ + public function testDecode() + { + $tokenPayload = $this->model->decode($this->getValidHS256Jwt(), self::API_KEY); + + $this->assertEquals( + $this->getTokenPayload(), + $tokenPayload, + 'JWT payload isn\'t equal to expected' + ); + } + + /** + * Tests JWT decode. + * + * @param string $jwt + * @param string $errorMessage + * @dataProvider decodeWithExceptionDataProvider + */ + public function testDecodeWithException(string $jwt, string $errorMessage) + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage($errorMessage); + + $this->model->decode($jwt, self::API_KEY); + } + + /** + * @return array + */ + public function decodeWithExceptionDataProvider(): array + { + return [ + [ + 'jwt' => '', + 'errorMessage' => 'JWT is empty', + ], + [ + 'jwt' => 'dddd.dddd', + 'errorMessage' => 'Wrong number of segments in JWT', + ], + [ + 'jwt' => 'dddd.dddd.dddd', + 'errorMessage' => 'Unable to unserialize value. Error: Syntax error', + ], + [ + 'jwt' => $this->getHS512Jwt(), + 'errorMessage' => 'Algorithm HS512 is not supported', + ], + [ + 'jwt' => $this->getJwtWithInvalidSignature(), + 'errorMessage' => 'JWT signature verification failed', + ], + ]; + } + + /** + * Returns valid JWT, signed using HS256. + * + * @return string + */ + private function getValidHS256Jwt(): string + { + return 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhNWE1OWJmYi1hYzA2LTRjNWYtYmU1Yy0zNTFiNjR' . + 'hZTYwOGUiLCJpc3MiOiI1NjU2MGEzNThiOTQ2ZTBjODQ1MjM2NWRzIiwiaWF0IjoiMTQ0ODk5Nzg2NSIsIk9yZ1Vua' . + 'XRJZCI6IjU2NTYwN2MxOGI5NDZlMDU4NDYzZHM4ciIsIlBheWxvYWQiOnsiT3JkZXJEZXRhaWxzIjp7Ik9yZGVyTnV' . + 'tYmVyIjoiMTI1IiwiQW1vdW50IjoiMTUwMCIsIkN1cnJlbmN5Q29kZSI6IlVTRCJ9fSwiT2JqZWN0aWZ5UGF5bG9hZ' . + 'CI6dHJ1ZX0.emv9N75JIvyk_gQHMNJYQ2UzmbM5ISBQs1Y222zO1jk'; + } + + /** + * Returns JWT, signed using not supported HS512. + * + * @return string + */ + private function getHS512Jwt(): string + { + return 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJhNWE1OWJmYi1hYzA2LTRjNWYtYmU1Yy0zNTFiNjR' . + 'hZTYwOGUiLCJpc3MiOiI1NjU2MGEzNThiOTQ2ZTBjODQ1MjM2NWRzIiwiaWF0IjoiMTQ0ODk5Nzg2NSIsIk9yZ1V' . + 'uaXRJZCI6IjU2NTYwN2MxOGI5NDZlMDU4NDYzZHM4ciIsIlBheWxvYWQiOnsiT3JkZXJEZXRhaWxzIjp7Ik9yZGV' . + 'yTnVtYmVyIjoiMTI1IiwiQW1vdW50IjoiMTUwMCIsIkN1cnJlbmN5Q29kZSI6IlVTRCJ9fSwiT2JqZWN0aWZ5UGF' . + '5bG9hZCI6dHJ1ZX0.4fwdXfIgUe7bAiHP2bZsxSG-s-wJOyaCmCe9MOQhs-m6LLjRGarguA_0SqZA2EeUaytMO4R' . + 'G84ZEOfbYfS8c1A'; + } + + /** + * Returns JWT with invalid signature. + * + * @return string + */ + private function getJwtWithInvalidSignature(): string + { + return 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhNWE1OWJmYi1hYzA2LTRjNWYtYmU1Yy0zNTFiNjR' . + 'hZTYwOGUiLCJpc3MiOiI1NjU2MGEzNThiOTQ2ZTBjODQ1MjM2NWRzIiwiaWF0IjoiMTQ0ODk5Nzg2NSIsIk9yZ1Vua' . + 'XRJZCI6IjU2NTYwN2MxOGI5NDZlMDU4NDYzZHM4ciIsIlBheWxvYWQiOnsiT3JkZXJEZXRhaWxzIjp7Ik9yZGVyTnV' . + 'tYmVyIjoiMTI1IiwiQW1vdW50IjoiMTUwMCIsIkN1cnJlbmN5Q29kZSI6IlVTRCJ9fSwiT2JqZWN0aWZ5UGF5bG9hZ' . + 'CI6dHJ1ZX0.InvalidSign'; + } + + /** + * Returns token decoded payload. + * + * @return array + */ + private function getTokenPayload(): array + { + return [ + 'jti' => 'a5a59bfb-ac06-4c5f-be5c-351b64ae608e', + 'iss' => '56560a358b946e0c8452365ds', + 'iat' => '1448997865', + 'OrgUnitId' => '565607c18b946e058463ds8r', + 'Payload' => [ + 'OrderDetails' => [ + 'OrderNumber' => '125', + 'Amount' => '1500', + 'CurrencyCode' => 'USD' + ] + ], + 'ObjectifyPayload' => true + ]; + } +} diff --git a/app/code/Magento/CardinalCommerce/Test/Unit/Model/Response/JwtPayloadValidatorTest.php b/app/code/Magento/CardinalCommerce/Test/Unit/Model/Response/JwtPayloadValidatorTest.php new file mode 100644 index 000000000000..cbaae9f777a6 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/Test/Unit/Model/Response/JwtPayloadValidatorTest.php @@ -0,0 +1,202 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CardinalCommerce\Test\Unit\Model\Response; + +use Magento\CardinalCommerce\Model\Response\JwtPayloadValidator; +use Magento\Framework\Intl\DateTimeFactory; + +/** + * Class JwtPayloadValidatorTest + */ +class JwtPayloadValidatorTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var JwtPayloadValidator + */ + private $model; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->model = new JwtPayloadValidator(new DateTimeFactory()); + } + + /** + * Tests successful cases. + * + * @param array $token + * @dataProvider validateSuccessDataProvider + */ + public function testValidateSuccess(array $token) + { + $this->assertTrue( + $this->model->validate($token) + ); + } + + /** + * @case 1. All data are correct, the transaction was successful (Visa, AMEX) + * @case 2. All data are correct, the transaction was successful but requires in no additional action (Visa, AMEX) + * @case 3. All data are correct, the transaction was successful (MasterCard) + * @case 4. All data are correct, the transaction was successful but requires in no additional action (MasterCard) + * + * @return array + */ + public function validateSuccessDataProvider() + { + $expTimestamp = $this->getValidExpTimestamp(); + + return [ + 1 => $this->createToken('05', '0', 'SUCCESS', $expTimestamp), + 2 => $this->createToken('06', '0', 'NOACTION', $expTimestamp), + 3 => $this->createToken('02', '0', 'SUCCESS', $expTimestamp), + 4 => $this->createToken('01', '0', 'NOACTION', $expTimestamp), + ]; + } + + /** + * Case when 3DS authentication is either failed or could not be attempted. + * + * @param array $token + * @dataProvider validationEciFailsDataProvider + */ + public function testValidationEciFails(array $token) + { + $this->assertFalse( + $this->model->validate($token), + 'Negative ECIFlag value validation fails' + ); + } + + /** + * ECIFlag value when 3DS authentication is either failed or could not be attempted. + * + * @case 1. Visa, AMEX, JCB + * @case 2. MasterCard + * @return array + */ + public function validationEciFailsDataProvider(): array + { + $expTimestamp = $this->getValidExpTimestamp(); + return [ + 1 => $this->createToken('07', '0', 'NOACTION', $expTimestamp), + 2 => $this->createToken('00', '0', 'NOACTION', $expTimestamp), + ]; + } + + /** + * Case when resulting state of the transaction is negative. + * + * @param array $token + * @dataProvider validationActionCodeFailsDataProvider + */ + public function testValidationActionCodeFails(array $token) + { + $this->assertFalse( + $this->model->validate($token), + 'Negative ActionCode value validation fails' + ); + } + + /** + * ECIFlag value when 3DS authentication is either failed or could not be attempted. + * + * @return array + */ + public function validationActionCodeFailsDataProvider(): array + { + $expTimestamp = $this->getValidExpTimestamp(); + return [ + $this->createToken('05', '0', 'FAILURE', $expTimestamp), + $this->createToken('05', '0', 'ERROR', $expTimestamp), + ]; + } + + /** + * Case when ErrorNumber not equal 0. + */ + public function testValidationErrorNumberFails() + { + $notAllowedErrorNumber = '10'; + $expTimestamp = $this->getValidExpTimestamp(); + $token = $this->createToken('05', $notAllowedErrorNumber, 'SUCCESS', $expTimestamp); + $this->assertFalse( + $this->model->validate($token), + 'Negative ErrorNumber value validation fails' + ); + } + + /** + * Case when ErrorNumber not equal 0. + */ + public function testValidationExpirationFails() + { + $expTimestamp = $this->getOutdatedExpTimestamp(); + $token = $this->createToken('05', '0', 'SUCCESS', $expTimestamp); + $this->assertFalse( + $this->model->validate($token), + 'Expiration date validation fails' + ); + } + + /** + * Creates a token. + * + * @param string $eciFlag + * @param string $errorNumber + * @param string $actionCode + * @param int $expTimestamp + * + * @return array + */ + private function createToken(string $eciFlag, string $errorNumber, string $actionCode, int $expTimestamp): array + { + return [ + [ + 'Payload' => [ + 'Payment' => [ + 'ExtendedData' => [ + 'ECIFlag' => $eciFlag, + ], + ], + 'ActionCode' => $actionCode, + 'ErrorNumber' => $errorNumber + ], + 'exp' => $expTimestamp + ] + ]; + } + + /** + * Returns valid expiration timestamp. + * + * @return int + */ + private function getValidExpTimestamp() + { + $dateTimeFactory = new DateTimeFactory(); + $currentDate = $dateTimeFactory->create('now', new \DateTimeZone('UTC')); + + return $currentDate->getTimestamp() + 3600; + } + + /** + * Returns outdated expiration timestamp. + * + * @return int + */ + private function getOutdatedExpTimestamp() + { + $dateTimeFactory = new DateTimeFactory(); + $currentDate = $dateTimeFactory->create('now', new \DateTimeZone('UTC')); + + return $currentDate->getTimestamp() - 3600; + } +} diff --git a/app/code/Magento/CardinalCommerce/composer.json b/app/code/Magento/CardinalCommerce/composer.json new file mode 100644 index 000000000000..3e839228dc79 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/composer.json @@ -0,0 +1,27 @@ +{ + "name": "magento/module-cardinal-commerce", + "description": "Provides a possibility to enable 3-D Secure 2.0 support for payment methods.", + "config": { + "sort-packages": true + }, + "require": { + "php": "~7.1.3||~7.2.0", + "magento/framework": "*", + "magento/module-checkout": "*", + "magento/module-payment": "*", + "magento/module-store": "*" + }, + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CardinalCommerce\\": "" + } + } +} diff --git a/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml b/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml new file mode 100644 index 000000000000..ef44f31e08e6 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> + <system> + <section id="three_d_secure" translate="label" type="text" sortOrder="410" showInDefault="1" showInWebsite="1" showInStore="1"> + <label>3D Secure</label> + <tab>sales</tab> + <resource>Magento_Sales::three_d_secure</resource> + <group id="cardinal" type="text" sortOrder="13" showInDefault="1" showInWebsite="1" showInStore="0"> + <group id="config" translate="label comment" sortOrder="15" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>Configuration</label> + <comment><![CDATA[For support contact <a href="mailto:support@cardinalcommerce.com">support@cardinalcommerce.com</a>.]]> + </comment> + <field id="environment" translate="label" type="select" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>Environment</label> + <source_model>Magento\CardinalCommerce\Model\Adminhtml\Source\Environment</source_model> + <config_path>three_d_secure/cardinal/environment</config_path> + </field> + <field id="org_unit_id" translate="label" type="obscure" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>Org Unit Id</label> + <config_path>three_d_secure/cardinal/org_unit_id</config_path> + <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model> + </field> + <field id="api_key" translate="label" type="obscure" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>API Key</label> + <config_path>three_d_secure/cardinal/api_key</config_path> + <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model> + </field> + <field id="api_identifier" translate="label" type="obscure" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>API Identifier</label> + <config_path>three_d_secure/cardinal/api_identifier</config_path> + <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model> + </field> + <field id="debug" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="0"> + <label>Debug</label> + <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> + <config_path>three_d_secure/cardinal/debug</config_path> + </field> + </group> + </group> + </section> + </system> +</config> diff --git a/app/code/Magento/CardinalCommerce/etc/config.xml b/app/code/Magento/CardinalCommerce/etc/config.xml new file mode 100644 index 000000000000..60b111a59cbc --- /dev/null +++ b/app/code/Magento/CardinalCommerce/etc/config.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"> + <default> + <three_d_secure> + <cardinal> + <environment>production</environment> + <api_key backend_model="Magento\Config\Model\Config\Backend\Encrypted" /> + <org_unit_id backend_model="Magento\Config\Model\Config\Backend\Encrypted" /> + <api_identifier backend_model="Magento\Config\Model\Config\Backend\Encrypted" /> + <debug>0</debug> + </cardinal> + </three_d_secure> + </default> +</config> diff --git a/app/code/Magento/CardinalCommerce/etc/di.xml b/app/code/Magento/CardinalCommerce/etc/di.xml new file mode 100644 index 000000000000..ffd3c50ef504 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/etc/di.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> + <preference for="Magento\CardinalCommerce\Model\Response\JwtPayloadValidatorInterface" type="Magento\CardinalCommerce\Model\Response\JwtPayloadValidator" /> +</config> diff --git a/app/code/Magento/CardinalCommerce/etc/frontend/di.xml b/app/code/Magento/CardinalCommerce/etc/frontend/di.xml new file mode 100644 index 000000000000..e3913291aa68 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/etc/frontend/di.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> + <type name="Magento\Checkout\Model\CompositeConfigProvider"> + <arguments> + <argument name="configProviders" xsi:type="array"> + <item name="cardinal_config_provider" xsi:type="object"> + Magento\CardinalCommerce\Model\Checkout\ConfigProvider + </item> + </argument> + </arguments> + </type> +</config> diff --git a/app/code/Magento/CardinalCommerce/etc/module.xml b/app/code/Magento/CardinalCommerce/etc/module.xml new file mode 100644 index 000000000000..8605e81d3fda --- /dev/null +++ b/app/code/Magento/CardinalCommerce/etc/module.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> + <module name="Magento_CardinalCommerce" > + <sequence> + <module name="Magento_Checkout"/> + <module name="Magento_Payment"/> + </sequence> + </module> +</config> diff --git a/app/code/Magento/CardinalCommerce/registration.php b/app/code/Magento/CardinalCommerce/registration.php new file mode 100644 index 000000000000..26fb168fb0ae --- /dev/null +++ b/app/code/Magento/CardinalCommerce/registration.php @@ -0,0 +1,9 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use \Magento\Framework\Component\ComponentRegistrar; + +ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_CardinalCommerce', __DIR__); diff --git a/app/code/Magento/CardinalCommerce/view/frontend/requirejs-config.js b/app/code/Magento/CardinalCommerce/view/frontend/requirejs-config.js new file mode 100644 index 000000000000..0c5e3964d04e --- /dev/null +++ b/app/code/Magento/CardinalCommerce/view/frontend/requirejs-config.js @@ -0,0 +1,20 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +var config = { + shim: { + cardinaljs: { + exports: 'Cardinal' + }, + cardinaljsSandbox: { + exports: 'Cardinal' + } + }, + paths: { + cardinaljsSandbox: 'https://includestest.ccdc02.com/cardinalcruise/v1/songbird', + cardinaljs: 'https://songbird.cardinalcommerce.com/edge/v1/songbird' + } +}; + diff --git a/app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-client.js b/app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-client.js new file mode 100644 index 000000000000..2ddb450d2f81 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-client.js @@ -0,0 +1,131 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'uiClass', + 'Magento_CardinalCommerce/js/cardinal-factory', + 'Magento_Checkout/js/model/quote', + 'mage/translate' +], function ($, Class, cardinalFactory, quote, $t) { + 'use strict'; + + return { + /** + * Starts Cardinal Consumer Authentication + * + * @param {Object} cardData + * @return {jQuery.Deferred} + */ + startAuthentication: function (cardData) { + var deferred = $.Deferred(); + + if (this.cardinalClient) { + this._startAuthentication(deferred, cardData); + } else { + cardinalFactory(this.getEnvironment()) + .done(function (client) { + this.cardinalClient = client; + this._startAuthentication(deferred, cardData); + }.bind(this)); + } + + return deferred.promise(); + }, + + /** + * Cardinal Consumer Authentication + * + * @param {jQuery.Deferred} deferred + * @param {Object} cardData + */ + _startAuthentication: function (deferred, cardData) { + //this.cardinalClient.configure({ logging: { level: 'verbose' } }); + this.cardinalClient.on('payments.validated', function (data, jwt) { + if (data.ErrorNumber !== 0) { + deferred.reject(data.ErrorDescription); + } else if ($.inArray(data.ActionCode, ['FAILURE', 'ERROR']) !== -1) { + deferred.reject($t('Authentication Failed. Please try again with another form of payment.')); + } else { + deferred.resolve(jwt); + } + this.cardinalClient.off('payments.validated'); + }.bind(this)); + + this.cardinalClient.on('payments.setupComplete', function () { + this.cardinalClient.start('cca', this.getRequestOrderObject(cardData)); + this.cardinalClient.off('payments.setupComplete'); + }.bind(this)); + + this.cardinalClient.setup('init', { + jwt: this.getRequestJWT() + }); + }, + + /** + * Returns request order object. + * + * The request order object is structured object that is used to pass data + * to Cardinal that describes an order you'd like to process. + * + * If you pass a request object in both the JWT and the browser, + * Cardinal will merge the objects together where the browser overwrites + * the JWT object as it is considered the most recently captured data. + * + * @param {Object} cardData + * @returns {Object} + */ + getRequestOrderObject: function (cardData) { + var totalAmount = quote.totals()['base_grand_total'], + currencyCode = quote.totals()['base_currency_code'], + billingAddress = quote.billingAddress(), + requestObject; + + requestObject = { + OrderDetails: { + Amount: totalAmount * 100, + CurrencyCode: currencyCode + }, + Consumer: { + Account: { + AccountNumber: cardData.accountNumber, + ExpirationMonth: cardData.expMonth, + ExpirationYear: cardData.expYear, + CardCode: cardData.cardCode + }, + BillingAddress: { + FirstName: billingAddress.firstname, + LastName: billingAddress.lastname, + Address1: billingAddress.street[0], + Address2: billingAddress.street[1], + City: billingAddress.city, + State: billingAddress.region, + PostalCode: billingAddress.postcode, + CountryCode: billingAddress.countryId, + Phone1: billingAddress.telephone + } + } + }; + + return requestObject; + }, + + /** + * Returns request JWT + * @returns {String} + */ + getRequestJWT: function () { + return window.checkoutConfig.cardinal.requestJWT; + }, + + /** + * Returns type of environment + * @returns {String} + */ + getEnvironment: function () { + return window.checkoutConfig.cardinal.environment; + } + }; +}); diff --git a/app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-factory.js b/app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-factory.js new file mode 100644 index 000000000000..1da92ba2ff78 --- /dev/null +++ b/app/code/Magento/CardinalCommerce/view/frontend/web/js/cardinal-factory.js @@ -0,0 +1,29 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery' +], function ($) { + 'use strict'; + + return function (environment) { + var deferred = $.Deferred(), + dependency = 'cardinaljs'; + + if (environment === 'sandbox') { + dependency = 'cardinaljsSandbox'; + } + + require( + [dependency], + function (Cardinal) { + deferred.resolve(Cardinal); + }, + deferred.reject + ); + + return deferred.promise(); + }; +}); diff --git a/composer.json b/composer.json index 1d3e4cef5c7e..434ccee36b8e 100644 --- a/composer.json +++ b/composer.json @@ -106,6 +106,7 @@ "magento/module-authorization": "*", "magento/module-authorizenet": "*", "magento/module-authorizenet-acceptjs": "*", + "magento/module-authorizenet-cardinal": "*", "magento/module-advanced-search": "*", "magento/module-backend": "*", "magento/module-backup": "*", @@ -115,6 +116,7 @@ "magento/module-bundle-import-export": "*", "magento/module-cache-invalidate": "*", "magento/module-captcha": "*", + "magento/module-cardinal-commerce": "*", "magento/module-catalog": "*", "magento/module-catalog-analytics": "*", "magento/module-catalog-import-export": "*", diff --git a/composer.lock b/composer.lock index 4e052c61fd46..00c0d0163bc2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "33e7703ac47e1c27235b830825e14800", + "content-hash": "f208adf6f5c6685484ce11c84b942f2f", "packages": [ { "name": "braintree/braintree_php", @@ -6771,7 +6771,7 @@ "time": "2019-04-29T20:56:26+00:00" }, { - "name": "mikey179/vfsStream", + "name": "mikey179/vfsstream", "version": "v1.6.5", "source": { "type": "git", diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/authorize.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/authorize.php new file mode 100644 index 000000000000..ceab22403d98 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/authorize.php @@ -0,0 +1,70 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +return [ + 'createTransactionRequest' => [ + 'merchantAuthentication' =>[ + 'name' => 'someusername', + 'transactionKey' => 'somepassword', + ], + 'transactionRequest' => [ + 'transactionType' => 'authOnlyTransaction', + 'amount' => '100.00', + 'payment' => [ + 'opaqueData' => [ + 'dataDescriptor' => 'mydescriptor', + 'dataValue' => 'myvalue', + ], + ], + 'solution' => [ + 'id' => 'AAA102993', + ], + 'order' => [ + 'invoiceNumber' => '100000001', + ], + 'poNumber' => null, + 'customer' => [ + 'id' => 1, + 'email' => 'admin@example.com', + ], + 'billTo' => [ + 'firstName' => 'firstname', + 'lastName' => 'lastname', + 'company' => '', + 'address' => 'street', + 'city' => 'Los Angeles', + 'state' => 'CA', + 'zip' => '11111', + 'country' => 'US', + ], + 'shipTo' => [ + 'firstName' => 'John', + 'lastName' => 'Doe', + 'company' => '', + 'address' => '6161 West Centinela Avenue', + 'city' => 'Los Angeles', + 'state' => 'CA', + 'zip' => '11111', + 'country' => 'US', + ], + 'customerIP' => '127.0.0.1', + 'cardholderAuthentication' => [ + 'authenticationIndicator' => '05', + 'cardholderAuthenticationValue' => 'AAABAWFlmQAAAABjRWWZEEFgFz8=', + ], + 'userFields' => [ + 'userField' => [ + [ + 'name' => 'transactionType', + 'value' => 'authOnlyTransaction', + ], + ], + ], + ], + ] +]; diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/sale.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/sale.php new file mode 100644 index 000000000000..f96facb19b3b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/expected_request/sale.php @@ -0,0 +1,70 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +return [ + 'createTransactionRequest' => [ + 'merchantAuthentication' =>[ + 'name' => 'someusername', + 'transactionKey' => 'somepassword', + ], + 'transactionRequest' => [ + 'transactionType' => 'authCaptureTransaction', + 'amount' => '100.00', + 'payment' => [ + 'opaqueData' => [ + 'dataDescriptor' => 'mydescriptor', + 'dataValue' => 'myvalue', + ], + ], + 'solution' => [ + 'id' => 'AAA102993', + ], + 'order' => [ + 'invoiceNumber' => '100000001', + ], + 'poNumber' => null, + 'customer' => [ + 'id' => 1, + 'email' => 'admin@example.com', + ], + 'billTo' => [ + 'firstName' => 'firstname', + 'lastName' => 'lastname', + 'company' => '', + 'address' => 'street', + 'city' => 'Los Angeles', + 'state' => 'CA', + 'zip' => '11111', + 'country' => 'US', + ], + 'shipTo' => [ + 'firstName' => 'John', + 'lastName' => 'Doe', + 'company' => '', + 'address' => '6161 West Centinela Avenue', + 'city' => 'Los Angeles', + 'state' => 'CA', + 'zip' => '11111', + 'country' => 'US', + ], + 'customerIP' => '127.0.0.1', + 'cardholderAuthentication' => [ + 'authenticationIndicator' => '05', + 'cardholderAuthenticationValue' => 'AAABAWFlmQAAAABjRWWZEEFgFz8=', + ], + 'userFields' => [ + 'userField' => [ + [ + 'name' => 'transactionType', + 'value' => 'authCaptureTransaction', + ], + ], + ], + ], + ] +]; diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/full_order_with_3dsecure.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/full_order_with_3dsecure.php new file mode 100644 index 000000000000..4f50b502e855 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/full_order_with_3dsecure.php @@ -0,0 +1,21 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +use Magento\Sales\Model\Order\Payment; +use Magento\TestFramework\Helper\Bootstrap; + +$order = include __DIR__ . '/../../AuthorizenetAcceptjs/_files/full_order.php'; + +$objectManager = Bootstrap::getObjectManager(); +$cardinalJWT = include __DIR__ . '/response/cardinal_jwt.php'; + +/** @var Payment $payment */ +$payment = $order->getPayment(); +$payment->setAdditionalInformation('cardinalJWT', $cardinalJWT); + +return $order; diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/authorize.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/authorize.php new file mode 100644 index 000000000000..3af04813c1ac --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/authorize.php @@ -0,0 +1,47 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +return [ + 'transactionResponse' => [ + 'responseCode' => '1', + 'authCode' => 'abc123', + 'avsResultCode' => 'P', + 'cvvResultCode' => '', + 'cavvResultCode' => '', + 'transId' => '123456', + 'refTransID' => '', + 'transHash' => 'foobar', + 'testRequest' => '0', + 'accountNumber' => 'XXXX1111', + 'accountType' => 'Visa', + 'messages' => [ + [ + 'code' => '1', + 'description' => 'This transaction has been approved.' + ] + ], + 'userFields' => [ + [ + 'name' => 'transactionType', + 'value' => 'authOnlyTransaction' + ] + ], + 'transHashSha2' => 'CD1E57FB1B5C876FDBD536CB16F8BBBA687580EDD78DD881C7F14DC4467C32BF6C' + . '808620FBD59E5977DF19460B98CCFC0DA0D90755992C0D611CABB8E2BA52B0', + 'SupplementalDataQualificationIndicator' => 0 + ], + 'messages' => [ + 'resultCode' => 'Ok', + 'message' => [ + [ + 'code' => 'I00001', + 'text' => 'Successful.' + ] + ] + ] +]; diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/cardinal_jwt.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/cardinal_jwt.php new file mode 100644 index 000000000000..80f42524897f --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Fixture/response/cardinal_jwt.php @@ -0,0 +1,48 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +use Magento\CardinalCommerce\Model\Config; +use Magento\CardinalCommerce\Model\JwtManagement; +use Magento\TestFramework\Helper\Bootstrap; + +$objectManager = Bootstrap::getObjectManager(); +/** @var JwtManagement $jwtManagment */ +$jwtManagment = $objectManager->get(JwtManagement::class); +/** @var Config $config */ +$config = $objectManager->get(Config::class); +$currentDate = new \DateTime('now', new \DateTimeZone('UTC')); +$response = [ + 'iss' => 'some_api_identifier', + 'iat' => 1559855656, + 'exp' => $currentDate->getTimestamp() + 3600, + 'jti' => '0d695df5-ca06-4f7d-b150-ff169510f6d2', + 'ConsumerSessionId' => '0_9e6a4084-2191-4fd7-9631-19f576375e0a', + 'ReferenceId' => '0_9e6a4084-2191-4fd7-9631-19f576375e0a', + 'aud' => '52efb9cc-843c-4ee9-a38c-107943be6b03', + 'Payload' => [ + 'Validated' => true, + 'Payment' => [ + 'Type' => 'CCA', + 'ProcessorTransactionId' => '4l7xg1WA7CS0YwgPgNZ0', + 'ExtendedData' => [ + 'CAVV' => 'AAABAWFlmQAAAABjRWWZEEFgFz8=', + 'ECIFlag' => '05', + 'XID' => 'NGw3eGcxV0E3Q1MwWXdnUGdOWjA=', + 'Enrolled' => 'Y', + 'PAResStatus' => 'Y', + 'SignatureVerification' => 'Y', + ], + ], + 'ActionCode' => 'SUCCESS', + 'ErrorNumber' => 0, + 'ErrorDescription' => 'Success', + ], +]; +$cardinalJWT = $jwtManagment->encode($response, $config->getApiKey()); + +return $cardinalJWT; diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/AuthorizeCommandTest.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/AuthorizeCommandTest.php new file mode 100644 index 000000000000..f41025e08ec2 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/AuthorizeCommandTest.php @@ -0,0 +1,186 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\AuthorizenetCardinal\Gateway\Command; + +use Magento\AuthorizenetAcceptjs\Gateway\AbstractTest; +use Magento\Framework\Exception\LocalizedException; +use Magento\Payment\Gateway\Command\CommandPoolInterface; +use Magento\Sales\Model\Order\Payment; +use Magento\Sales\Model\Order\Payment\Transaction; + +/** + * Tests "Authorize" command for Authorize.net payment requests with 3D-Secure. + */ +class AuthorizeCommandTest extends AbstractTest +{ + /** + * Tests Authorize command with enabled 3D secure and valid Cardinal response JWT. + * + * @magentoConfigFixture default_store three_d_secure/cardinal/enabled_authorizenet 1 + * @magentoConfigFixture default_store three_d_secure/cardinal/environment sandbox + * @magentoConfigFixture default_store three_d_secure/cardinal/api_key some_api_key + * @magentoConfigFixture default_store three_d_secure/cardinal/api_identifier some_api_identifier + * @magentoConfigFixture default_store three_d_secure/cardinal/org_unit_id some_org_unit_id + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/environment sandbox + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/login someusername + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_key somepassword + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_signature_key abc + * + * @magentoAppIsolation enabled + */ + public function testAuthorizeCommandWith3dSecure() + { + /** @var CommandPoolInterface $commandPool */ + $commandPool = $this->objectManager->get('AuthorizenetAcceptjsCommandPool'); + $command = $commandPool->get('authorize'); + + $order = include __DIR__ . '/../../Fixture/full_order_with_3dsecure.php'; + $payment = $order->getPayment(); + + $paymentDO = $this->paymentFactory->create($payment); + + $expectedRequest = include __DIR__ . '/../../Fixture/expected_request/authorize.php'; + $response = include __DIR__ . '/../../Fixture/response/authorize.php'; + + $this->clientMock->method('setRawData') + ->with(json_encode($expectedRequest), 'application/json'); + + $this->responseMock->method('getBody') + ->willReturn(json_encode($response)); + + $command->execute( + [ + 'payment' => $paymentDO, + 'amount' => 100.00 + ] + ); + + /** @var Payment $payment */ + $rawDetails = [ + 'authCode' => 'abc123', + 'avsResultCode' => 'P', + 'cvvResultCode' => '', + 'cavvResultCode' => '', + 'accountType' => 'Visa', + ]; + $this->assertSame('1111', $payment->getCcLast4()); + $this->assertSame('P', $payment->getCcAvsStatus()); + $this->assertFalse($payment->getData('is_transaction_closed')); + + $transactionDetails = $payment->getTransactionAdditionalInfo(); + foreach ($rawDetails as $key => $value) { + $this->assertSame($value, $payment->getAdditionalInformation($key)); + $this->assertSame($value, $transactionDetails[Transaction::RAW_DETAILS][$key]); + } + + $this->assertSame('123456', $payment->getTransactionId()); + $this->assertSame('123456', $transactionDetails['real_transaction_id']); + } + + /** + * Tests Authorize command with enabled 3D secure and invalid Cardinal response JWT. + * + * @magentoConfigFixture default_store three_d_secure/cardinal/enabled_authorizenet 1 + * @magentoConfigFixture default_store three_d_secure/cardinal/environment sandbox + * @magentoConfigFixture default_store three_d_secure/cardinal/api_key some_api_key + * @magentoConfigFixture default_store three_d_secure/cardinal/api_identifier some_api_identifier + * @magentoConfigFixture default_store three_d_secure/cardinal/org_unit_id some_org_unit_id + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/environment sandbox + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/login someusername + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_key somepassword + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_signature_key abc + * + * @magentoAppIsolation enabled + */ + public function testAuthorizeCommandWithInvalidJwt() + { + /** @var CommandPoolInterface $commandPool */ + $commandPool = $this->objectManager->get('AuthorizenetAcceptjsCommandPool'); + $command = $commandPool->get('authorize'); + + $order = include __DIR__ . '/../../../AuthorizenetAcceptjs/_files/full_order.php'; + $payment = $order->getPayment(); + $payment->setAdditionalInformation('cardinalJWT', 'Invalid JWT'); + + $paymentDO = $this->paymentFactory->create($payment); + + $this->expectException(LocalizedException::class); + + $command->execute( + [ + 'payment' => $paymentDO, + 'amount' => 100.00 + ] + ); + } + + /** + * Tests Authorize command with disabled 3D secure. + * + * @magentoConfigFixture default_store three_d_secure/cardinal/enabled_authorizenet 0 + * @magentoConfigFixture default_store three_d_secure/cardinal/environment sandbox + * @magentoConfigFixture default_store three_d_secure/cardinal/api_key some_api_key + * @magentoConfigFixture default_store three_d_secure/cardinal/api_identifier some_api_identifier + * @magentoConfigFixture default_store three_d_secure/cardinal/org_unit_id some_org_unit_id + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/environment sandbox + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/login someusername + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_key somepassword + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_signature_key abc + * + * @magentoAppIsolation enabled + */ + public function testAuthorizeCommandWithDisabled3dSecure() + { + /** @var CommandPoolInterface $commandPool */ + $commandPool = $this->objectManager->get('AuthorizenetAcceptjsCommandPool'); + $command = $commandPool->get('authorize'); + + $order = include __DIR__ . '/../../Fixture/full_order_with_3dsecure.php'; + $payment = $order->getPayment(); + + $paymentDO = $this->paymentFactory->create($payment); + + $expectedRequest = include __DIR__ . '/../../../AuthorizenetAcceptjs/_files/expected_request/authorize.php'; + $response = include __DIR__ . '/../../../AuthorizenetAcceptjs/_files/response/authorize.php'; + + $this->clientMock->method('setRawData') + ->with(json_encode($expectedRequest), 'application/json'); + + $this->responseMock->method('getBody') + ->willReturn(json_encode($response)); + + $command->execute( + [ + 'payment' => $paymentDO, + 'amount' => 100.00 + ] + ); + + /** @var Payment $payment */ + $rawDetails = [ + 'authCode' => 'abc123', + 'avsResultCode' => 'Y', + 'cvvResultCode' => 'P', + 'cavvResultCode' => '2', + 'accountType' => 'Visa', + ]; + $this->assertSame('1111', $payment->getCcLast4()); + $this->assertSame('Y', $payment->getCcAvsStatus()); + $this->assertFalse($payment->getData('is_transaction_closed')); + + $transactionDetails = $payment->getTransactionAdditionalInfo(); + foreach ($rawDetails as $key => $value) { + $this->assertSame($value, $payment->getAdditionalInformation($key)); + $this->assertSame($value, $transactionDetails[Transaction::RAW_DETAILS][$key]); + } + + $this->assertSame('123456', $payment->getTransactionId()); + $this->assertSame('123456', $transactionDetails['real_transaction_id']); + } +} diff --git a/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/SaleCommandTest.php b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/SaleCommandTest.php new file mode 100644 index 000000000000..c22e1fceaa84 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/AuthorizenetCardinal/Gateway/Command/SaleCommandTest.php @@ -0,0 +1,85 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\AuthorizenetCardinal\Gateway\Command; + +use Magento\AuthorizenetAcceptjs\Gateway\AbstractTest; +use Magento\Framework\Exception\LocalizedException; +use Magento\Payment\Gateway\Command\CommandPoolInterface; +use Magento\Sales\Model\Order\Payment; +use Magento\Sales\Model\Order\Payment\Transaction; + +/** + * Tests "Sale" command for Authorize.net payment requests with 3D-Secure. + */ +class SaleCommandTest extends AbstractTest +{ + /** + * Tests Sale command with enabled 3D secure and valid Cardinal response JWT. + * + * @magentoConfigFixture default_store three_d_secure/cardinal/enabled_authorizenet 1 + * @magentoConfigFixture default_store three_d_secure/cardinal/environment sandbox + * @magentoConfigFixture default_store three_d_secure/cardinal/api_key some_api_key + * @magentoConfigFixture default_store three_d_secure/cardinal/api_identifier some_api_identifier + * @magentoConfigFixture default_store three_d_secure/cardinal/org_unit_id some_org_unit_id + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/environment sandbox + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/login someusername + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_key somepassword + * @magentoConfigFixture default_store payment/authorizenet_acceptjs/trans_signature_key abc + * + * @magentoAppIsolation enabled + */ + public function testSaleCommandWith3dSecure() + { + /** @var CommandPoolInterface $commandPool */ + $commandPool = $this->objectManager->get('AuthorizenetAcceptjsCommandPool'); + $command = $commandPool->get('sale'); + + $order = include __DIR__ . '/../../Fixture/full_order_with_3dsecure.php'; + $payment = $order->getPayment(); + + $paymentDO = $this->paymentFactory->create($payment); + + $expectedRequest = include __DIR__ . '/../../Fixture/expected_request/sale.php'; + $response = include __DIR__ . '/../../../AuthorizenetAcceptjs/_files/response/sale.php'; + + $this->clientMock->method('setRawData') + ->with(json_encode($expectedRequest), 'application/json'); + + $this->responseMock->method('getBody') + ->willReturn(json_encode($response)); + + $command->execute( + [ + 'payment' => $paymentDO, + 'amount' => 100.00 + ] + ); + + /** @var Payment $payment */ + $rawDetails = [ + 'authCode' => 'abc123', + 'avsResultCode' => 'Y', + 'cvvResultCode' => 'P', + 'cavvResultCode' => '2', + 'accountType' => 'Visa', + ]; + $this->assertSame('1111', $payment->getCcLast4()); + $this->assertSame('Y', $payment->getCcAvsStatus()); + $this->assertFalse($payment->getData('is_transaction_closed')); + + $transactionDetails = $payment->getTransactionAdditionalInfo(); + foreach ($rawDetails as $key => $value) { + $this->assertSame($value, $payment->getAdditionalInformation($key)); + $this->assertSame($value, $transactionDetails[Transaction::RAW_DETAILS][$key]); + } + + $this->assertSame('123456', $payment->getTransactionId()); + $this->assertSame('123456', $transactionDetails['real_transaction_id']); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/DynamicBundleWithCatalogPriceRuleCalculatorTest.php b/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/DynamicBundleWithCatalogPriceRuleCalculatorTest.php index 3c756041eacc..0162f70c76b2 100644 --- a/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/DynamicBundleWithCatalogPriceRuleCalculatorTest.php +++ b/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/DynamicBundleWithCatalogPriceRuleCalculatorTest.php @@ -10,6 +10,7 @@ * @codingStandardsIgnoreStart * @magentoDataFixtureBeforeTransaction Magento/Bundle/_files/PriceCalculator/dynamic_bundle_product_with_catalog_rule.php * @codingStandardsIgnoreEnd + * @magentoDbIsolation enabled * @magentoAppArea frontend */ class DynamicBundleWithCatalogPriceRuleCalculatorTest extends BundlePriceAbstract From b9a36c336f4b216fd7a5347a2d041d637c28b56f Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Tue, 11 Jun 2019 23:40:04 +0400 Subject: [PATCH 105/209] MAGETWO-69893: Error appears when restricted user tries to add new category from product page - Updated automated test script --- .../Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml index c084dd78b71b..cd401b7a4651 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRestrictedUserAddCategoryFromProductPageTest.xml @@ -14,7 +14,7 @@ <title value="Adding new category from product page by restricted user"/> <description value="Adding new category from product page by restricted user"/> <severity value="MAJOR"/> - <testCaseId value="MAGETWO-99063"/> + <testCaseId value="MC-17229"/> <useCaseId value="MAGETWO-69893"/> <group value="catalog"/> </annotations> From b0366a249c7f5d71fe8cfb05ca8b36e96d52d170 Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Tue, 11 Jun 2019 15:05:43 -0500 Subject: [PATCH 106/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test -- fix merge conflict --- app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php index 4b537a78adc6..7e43f2fc064a 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php @@ -16,7 +16,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended { /** - * @var \Magento\Framework\Module\Manager + * @var \Magento\Framework\Module\ModuleManagerInterface */ protected $moduleManager; @@ -59,7 +59,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended * @param \Magento\Catalog\Model\Product\Type $type * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status * @param \Magento\Catalog\Model\Product\Visibility $visibility - * @param \Magento\Framework\Module\Manager $moduleManager + * @param \Magento\Framework\Module\ModuleManagerInterface $moduleManager * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -73,7 +73,7 @@ public function __construct( \Magento\Catalog\Model\Product\Type $type, \Magento\Catalog\Model\Product\Attribute\Source\Status $status, \Magento\Catalog\Model\Product\Visibility $visibility, - \Magento\Framework\Module\Manager $moduleManager, + \Magento\Framework\Module\ModuleManagerInterface $moduleManager, array $data = [] ) { $this->_websiteFactory = $websiteFactory; @@ -101,7 +101,7 @@ protected function _construct() } /** - * Get store + * Get store. * * @return Store * @throws \Magento\Framework\Exception\NoSuchEntityException From 54358cfb7c85ef189c521b0bde8aec1d27ab4e3d Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Tue, 11 Jun 2019 15:06:09 -0500 Subject: [PATCH 107/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test --- .../Review/Test/Unit/Block/Adminhtml/RssTest.php | 7 +++++-- .../testsuite/Magento/Test/Legacy/LayoutTest.php | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php index dbd2bff41473..2ffd0ea11814 100644 --- a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php +++ b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php @@ -81,7 +81,9 @@ public function testGetRssData() ], ], ]; - $productModel = $this->createPartialMock(\Magento\Catalog\Model\ResourceModel\Product::class, [ + $productModel = $this->createPartialMock( + \Magento\Catalog\Model\ResourceModel\Product::class, + [ 'getStoreId', 'getId', 'getReviewId', @@ -90,7 +92,8 @@ public function testGetRssData() 'getTitle', 'getNickname', 'getProductUrl' - ]); + ] + ); $storeModel = $this->createMock(\Magento\Store\Model\Store::class); $this->storeManagerInterface->expects($this->once())->method('getStore')->will($this->returnValue($storeModel)); $storeModel->expects($this->once())->method('getName') diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php index 1ee599a04463..4efad02468a3 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php @@ -11,6 +11,9 @@ use Magento\Framework\Component\ComponentRegistrar; +/** + * Layout test + */ class LayoutTest extends \PHPUnit\Framework\TestCase { /** @@ -85,6 +88,9 @@ class LayoutTest extends \PHPUnit\Framework\TestCase ], ]; + /** + * @throws \Exception + */ public function testLayoutFile() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); @@ -141,6 +147,11 @@ function ($layoutFile) { $componentRegistrar->getPath(ComponentRegistrar::MODULE, 'Magento_Shipping') . '/view/adminhtml/layout/adminhtml_order' ) + || false !== strpos( + $layoutFile, + $componentRegistrar->getPath(ComponentRegistrar::MODULE, 'Magento_Catalog') + . '/view/adminhtml/layout/catalog_product_grid.xml' + ) ) { $this->markTestIncomplete( "The file {$layoutFile} has to use \\Magento\\Core\\Block\\Text\\List, \n" . @@ -204,6 +215,9 @@ protected function _testObsoleteAttributes($layoutXml) } } + /** + * @throws \Exception + */ public function testActionNodeMethods() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); From 361965b1c874f096d0758782ed7539e53460dc19 Mon Sep 17 00:00:00 2001 From: Arjen Miedema <arjen.miedema@mediact.nl> Date: Wed, 12 Jun 2019 07:42:49 +0200 Subject: [PATCH 108/209] Fix the 404 message for product alerts when not logged in When the user isn't logged in and presses the product alert link (either stock or price), the user has to login and gets redirected to a 404 page. This is because the redirect done by the login page is a `GET` call. The fix done is to change the used interface for the product alerts from `POST` to `GET`, as this is the easy fix and there's no reason to use `POST` here at this moment, as all parameters for the call are all in get URL parameters. --- app/code/Magento/ProductAlert/Controller/Add/Price.php | 4 ++-- app/code/Magento/ProductAlert/Controller/Add/Stock.php | 4 ++-- .../ProductAlert/view/frontend/templates/product/view.phtml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/ProductAlert/Controller/Add/Price.php b/app/code/Magento/ProductAlert/Controller/Add/Price.php index fbaff109fd15..b7519f0bc7a5 100644 --- a/app/code/Magento/ProductAlert/Controller/Add/Price.php +++ b/app/code/Magento/ProductAlert/Controller/Add/Price.php @@ -6,7 +6,7 @@ namespace Magento\ProductAlert\Controller\Add; -use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\ProductAlert\Controller\Add as AddController; use Magento\Framework\App\Action\Context; use Magento\Customer\Model\Session as CustomerSession; @@ -20,7 +20,7 @@ /** * Controller for notifying about price. */ -class Price extends AddController implements HttpPostActionInterface +class Price extends AddController implements HttpGetActionInterface { /** * @var \Magento\Store\Model\StoreManagerInterface diff --git a/app/code/Magento/ProductAlert/Controller/Add/Stock.php b/app/code/Magento/ProductAlert/Controller/Add/Stock.php index 24cab39d544f..f36fdf5fb715 100644 --- a/app/code/Magento/ProductAlert/Controller/Add/Stock.php +++ b/app/code/Magento/ProductAlert/Controller/Add/Stock.php @@ -6,7 +6,7 @@ namespace Magento\ProductAlert\Controller\Add; -use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\ProductAlert\Controller\Add as AddController; use Magento\Framework\App\Action\Context; use Magento\Customer\Model\Session as CustomerSession; @@ -19,7 +19,7 @@ /** * Controller for notifying about stock. */ -class Stock extends AddController implements HttpPostActionInterface +class Stock extends AddController implements HttpGetActionInterface { /** * @var \Magento\Catalog\Api\ProductRepositoryInterface diff --git a/app/code/Magento/ProductAlert/view/frontend/templates/product/view.phtml b/app/code/Magento/ProductAlert/view/frontend/templates/product/view.phtml index 5b9553a49e72..462196d773aa 100644 --- a/app/code/Magento/ProductAlert/view/frontend/templates/product/view.phtml +++ b/app/code/Magento/ProductAlert/view/frontend/templates/product/view.phtml @@ -6,7 +6,7 @@ ?> <?php /* @var $block \Magento\ProductAlert\Block\Product\View */?> <div class="product alert <?= $block->getHtmlClass() ?>"> - <a href="#" data-post='<?= /* @noEscape */ $block->getPostAction() ?>' + <a href="<?= $block->escapeUrl($block->getSignupUrl()) ?>" title="<?= $block->escapeHtml(__($block->getSignupLabel())) ?>" class="action alert"> <?= $block->escapeHtml(__($block->getSignupLabel())) ?> </a> From 3bc4a678c046294e34de239a04e7c2182536ca7e Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Wed, 12 Jun 2019 14:04:54 +0400 Subject: [PATCH 109/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values - Updated automated test script. --- .../AdminConfigurableProductActionGroup.xml | 35 ++++++------- ...reateProductConfigurationsPanelSection.xml | 2 + ...bleProductAttributeValueUniquenessTest.xml | 50 +++++-------------- 3 files changed, 31 insertions(+), 56 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml index 8b409935eb5c..0ad7860c4087 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml @@ -205,25 +205,22 @@ <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnThirdNextButton"/> <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnFourthNextButton"/> </actionGroup> - <actionGroup name="adminSelectAttributeForConfigurableProductFromPage"> - <arguments> - <argument name="productAttributeCode" type="string" defaultValue="{{dropdownProductAttribute.attribute_code}}"/> - </arguments> - <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" stepKey="clickToFilterAttributeNames"/> - <waitForElementVisible selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" stepKey="waitForAttributeCodeInputBeVisible"/> - <fillField selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" userInput="{{productAttributeCode}}" stepKey="fillAttributeName"/> - <click selector="{{AdminCreateProductConfigurationsPanel.applyFilters}}" stepKey="applyFilter"/> - <click selector="{{AdminCreateProductConfigurationsPanel.firstCheckbox}}" stepKey="selectFilteredAttribute"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton"/> - </actionGroup> - <actionGroup name="createAnOptionForAttribute"> - <arguments> - <argument name="optionName" type="string" defaultValue="opt1"/> - </arguments> - <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateFirstNewValue"/> - <fillField userInput="{{optionName}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewOption"/> - <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveNewAttribute"/> - <click selector="{{AdminCreateProductConfigurationsPanel.selectAll}}" stepKey="clickOnSelectAll"/> + <actionGroup name="selectCreatedAttributeAndCreateTwoOptions" extends="addNewProductConfigurationAttribute"> + <remove keyForRemoval="clickOnNewAttribute"/> + <remove keyForRemoval="waitForIFrame"/> + <remove keyForRemoval="switchToNewAttributeIFrame"/> + <remove keyForRemoval="fillDefaultLabel"/> + <remove keyForRemoval="clickOnNewAttributePanel"/> + <remove keyForRemoval="waitForSaveAttribute"/> + <remove keyForRemoval="switchOutOfIFrame"/> + <remove keyForRemoval="waitForFilters"/> + <fillField userInput="{{attribute.attribute_code}}" selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" stepKey="fillFilterAttributeCodeField"/> + <fillField userInput="{{firstOption.label}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewFirstOption"/> + <fillField userInput="{{secondOption.label}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewSecondOption"/> + <remove keyForRemoval="clickOnSelectAll"/> + <remove keyForRemoval="clickOnSecondNextButton"/> + <remove keyForRemoval="clickOnThirdNextButton"/> + <remove keyForRemoval="clickOnFourthNextButton"/> </actionGroup> <actionGroup name="changeProductConfigurationsInGrid"> <arguments> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml index a5e74145c9fe..7b36b4ac276d 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml @@ -22,7 +22,9 @@ <element name="selectAll" type="button" selector=".action-select-all"/> <element name="selectAllByAttribute" type="button" selector="//div[@data-attribute-title='{{attr}}']//button[contains(@class, 'action-select-all')]" parameterized="true"/> <element name="createNewValue" type="input" selector=".action-create-new" timeout="30"/> + <element name="attributeNameInTitle" type="input" selector="//div[@class='attribute-entity-title-block']/div[@class='attribute-entity-title']"/> <element name="attributeName" type="input" selector="li[data-attribute-option-title=''] .admin__field-create-new .admin__control-text"/> + <element name="attributeNameWithError" type="text" selector="//li[@data-attribute-option-title='']/div[contains(@class,'admin__field admin__field-create-new _error')]"/> <element name="saveAttribute" type="button" selector="li[data-attribute-option-title=''] .action-save" timeout="30"/> <element name="attributeCheckboxByIndex" type="input" selector="li.attribute-option:nth-of-type({{var1}}) input" parameterized="true"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml index 28d594dd072c..41a88e32a7f2 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml @@ -54,43 +54,19 @@ <conditionalClick selector="{{AdminProductFormConfigurationsSection.sectionHeader}}" dependentSelector="{{AdminProductFormConfigurationsSection.createConfigurations}}" visible="false" stepKey="expandConfigurationsTab1"/> <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations1"/> <waitForPageLoad stepKey="waitForSelectAttributesPage1"/> - <actionGroup ref="adminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute1"> - <argument name="attributeName" value="$$createProductAttribute.attribute_code$$"/> + <actionGroup ref="selectCreatedAttributeAndCreateTwoOptions" stepKey="selectCreatedAttributeAndCreateOptions"> + <argument name="attribute" value="dropdownProductAttribute"/> + <argument name="firstOption" value="productAttributeOption1"/> + <argument name="secondOption" value="productAttributeOption1"/> </actionGroup> - <actionGroup ref="createAnOptionForAttribute" stepKey="createOption1ForSelectedAttribute"> - <argument name="optionName" value="opt1"/> - </actionGroup> - <actionGroup ref="createAnOptionForAttribute" stepKey="createOption2ForSelectedAttribute"> - <argument name="optionName" value="opt2"/> - </actionGroup> - <!--Proceed generation--> - <comment userInput="Proceed generation" stepKey="proceedGeneration"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNext1"/> - <waitForPageLoad stepKey="waitForStep3Page"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNext2"/> - <waitForPageLoad stepKey="waitForStep4Page"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickGenerateProducts"/> - <waitForPageLoad stepKey="waitProductGeneration"/> - <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> - <waitForPageLoad stepKey="waitForProductSave"/> - <click selector="{{AdminChooseAffectedAttributeSetPopup.confirm}}" stepKey="clickOnConfirmInPopup"/> - <waitForPageLoad stepKey="waitForProductPage2"/> - <seeInCurrentUrl url="{{ProductCatalogPage.url}}" stepKey="seeInProductUrl"/> - <!--Add an option with existing name--> - <comment userInput="Add an option with existing name" stepKey="addAnOptionWithExistingName"/> - <conditionalClick selector="{{AdminProductFormConfigurationsSection.sectionHeader}}" dependentSelector="{{AdminProductFormConfigurationsSection.createConfigurations}}" visible="false" stepKey="expandConfigurationsTab2"/> - <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations2"/> - <waitForPageLoad stepKey="waitForSelectAttributesPage2"/> - <actionGroup ref="adminSelectAttributeForConfigurableProductFromPage" stepKey="selectCreatedAttribute2"> - <argument name="attributeName" value="$$createProductAttribute.attribute_code$$"/> - </actionGroup> - <actionGroup ref="createAnOptionForAttribute" stepKey="createAnOptionWithExistingName"> - <argument name="optionName" value="opt1"/> - </actionGroup> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNextToSubmitOption"/> - <waitForPageLoad stepKey="waitForPageLoad"/> - <!--Assert Error message--> - <comment userInput="Assert Error message" stepKey="assertErrorMsg"/> - <see userInput="Attributes must have unique option values" stepKey="verifyErrorMessage"/> + <!--Check that system does not allow to save 2 options with same name--> + <comment userInput="Check that system does not allow to save 2 options with same name" stepKey="checkOptionNameUniqueness"/> + <seeElement selector="{{AdminCreateProductConfigurationsPanel.attributeNameWithError}}" stepKey="seeThatOptionWithSameNameIsNotSaved"/> + <!--Click next and assert error message--> + <comment userInput="Click next and assert error message" stepKey="clickNextAndAssertErrMssg"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickNext"/> + <waitForPageLoad time="10" stepKey="waitForPageLoad"/> + <grabTextFrom selector="{{AdminCreateProductConfigurationsPanel.attributeNameInTitle}}" stepKey="grabErrMsg"/> + <see userInput='The value of attribute "$grabErrMsg" must be unique' stepKey="verifyAttributesValueUniqueness"/> </test> </tests> From 0c402aedc254ca85864008f54d5d4b2545b605d0 Mon Sep 17 00:00:00 2001 From: eduard13 <e.chitoraga@atwix.com> Date: Wed, 12 Jun 2019 19:27:31 +0300 Subject: [PATCH 110/209] Calling the always action on opening and closing the modal. --- app/code/Magento/Ui/view/base/web/js/modal/alert.js | 1 - app/code/Magento/Ui/view/base/web/js/modal/confirm.js | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js index 911d0e02578d..4741f26ba257 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js @@ -43,7 +43,6 @@ define([ * Close modal window. */ closeModal: function () { - this.options.actions.always(); this.element.bind('alertclosed', _.bind(this._remove, this)); return this._super(); diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js index eceab940d114..08a6fe2dc07c 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js @@ -80,6 +80,8 @@ define([ * Open modal window. */ openModal: function () { + this.options.actions.always(); + return this._super(); }, From 236b467aa9ae3e47dea790043643b177b1a1af4a Mon Sep 17 00:00:00 2001 From: Roman Lytvynenko <lytvynen@adobe.com> Date: Wed, 12 Jun 2019 14:42:02 -0500 Subject: [PATCH 111/209] MAGETWO-99500: Configurable options attribute position is not saved correctly via API --- .../Model/LinkManagement.php | 15 +- .../Api/LinkManagementTest.php | 204 +++++++++++++++--- ...figurable_attributes_for_position_test.php | 101 +++++++++ ..._attributes_for_position_test_rollback.php | 41 ++++ 4 files changed, 327 insertions(+), 34 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test.php create mode 100644 dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test_rollback.php diff --git a/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php b/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php index 2f07f8b90ce7..890564fdb303 100644 --- a/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php +++ b/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php @@ -132,7 +132,7 @@ public function addChild($sku, $childSku) throw new StateException(__("The parent product doesn't have configurable product options.")); } - $attributeIds = []; + $attributeData = []; foreach ($configurableProductOptions as $configurableProductOption) { $attributeCode = $configurableProductOption->getProductAttribute()->getAttributeCode(); if (!$child->getData($attributeCode)) { @@ -143,9 +143,11 @@ public function addChild($sku, $childSku) ) ); } - $attributeIds[] = $configurableProductOption->getAttributeId(); + $attributeData[$configurableProductOption->getAttributeId()] = [ + 'position' => $configurableProductOption->getPosition() + ]; } - $configurableOptionData = $this->getConfigurableAttributesData($attributeIds); + $configurableOptionData = $this->getConfigurableAttributesData($attributeData); /** @var \Magento\ConfigurableProduct\Helper\Product\Options\Factory $optionFactory */ $optionFactory = $this->getOptionsFactory(); @@ -211,16 +213,16 @@ private function getOptionsFactory() /** * Get Configurable Attribute Data * - * @param int[] $attributeIds + * @param int[] $attributeData * @return array */ - private function getConfigurableAttributesData($attributeIds) + private function getConfigurableAttributesData($attributeData) { $configurableAttributesData = []; $attributeValues = []; $attributes = $this->attributeFactory->create() ->getCollection() - ->addFieldToFilter('attribute_id', $attributeIds) + ->addFieldToFilter('attribute_id', array_keys($attributeData)) ->getItems(); foreach ($attributes as $attribute) { foreach ($attribute->getOptions() as $option) { @@ -237,6 +239,7 @@ private function getConfigurableAttributesData($attributeIds) 'attribute_id' => $attribute->getId(), 'code' => $attribute->getAttributeCode(), 'label' => $attribute->getStoreLabel(), + 'position' => $attributeData[$attribute->getId()]['position'], 'values' => $attributeValues, ]; } diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php index d899839d43d4..aa8f3b35669b 100644 --- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php @@ -6,11 +6,16 @@ */ namespace Magento\ConfigurableProduct\Api; +use Magento\Catalog\Model\ResourceModel\Eav\Attribute; use Magento\Eav\Model\AttributeRepository; +use Magento\Eav\Model\Entity\Attribute\Option; +use Magento\Framework\Webapi\Rest\Request; +use Magento\TestFramework\TestCase\WebapiAbstract; -class LinkManagementTest extends \Magento\TestFramework\TestCase\WebapiAbstract +class LinkManagementTest extends WebapiAbstract { const SERVICE_NAME = 'configurableProductLinkManagementV1'; + const OPTION_SERVICE_NAME = 'configurableProductOptionRepositoryV1'; const SERVICE_VERSION = 'V1'; const RESOURCE_PATH = '/V1/configurable-products'; @@ -85,9 +90,27 @@ public function testAddChildFullRestCreation() $this->createConfigurableProduct($productSku); $attribute = $this->attributeRepository->get('catalog_product', 'test_configurable'); - $attributeValue = $attribute->getOptions()[1]->getValue(); - $this->addOptionToConfigurableProduct($productSku, $attribute->getAttributeId(), $attributeValue); - $this->createSimpleProduct($childSku, $attributeValue); + + $this->addOptionToConfigurableProduct( + $productSku, + $attribute->getAttributeId(), + [ + [ + 'value_index' => $attribute->getOptions()[1]->getValue() + ] + ] + ); + + $this->createSimpleProduct( + $childSku, + [ + [ + 'attribute_code' => 'test_configurable', + 'value' => $attribute->getOptions()[1]->getValue() + ] + ] + ); + $res = $this->addChild($productSku, $childSku); $this->assertTrue($res); @@ -103,10 +126,129 @@ public function testAddChildFullRestCreation() $this->assertTrue($added); // clean up products + + $this->deleteProduct($productSku); + $this->deleteProduct($childSku); + } + + /** + * Test if configurable option attribute positions are being preserved after simple products were assigned to a + * configurable product. + * + * @magentoApiDataFixture Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test.php + */ + public function testConfigurableOptionPositionPreservation() + { + $productSku = 'configurable-product-sku'; + $childProductSkus = [ + 'simple-product-sku-1', + 'simple-product-sku-2' + ]; + $attributesToAdd = [ + 'custom_attr_1', + 'custom_attr_2', + ]; + + $this->createConfigurableProduct($productSku); + + $position = 0; + $attributeOptions = []; + foreach ($attributesToAdd as $attributeToAdd) { + /** @var Attribute $attribute */ + $attribute = $this->attributeRepository->get('catalog_product', $attributeToAdd); + + /** @var Option $options[] */ + $options = $attribute->getOptions(); + array_shift($options); + + $attributeOptions[$attributeToAdd] = $options; + + $valueIndexesData = []; + foreach ($options as $option) { + $valueIndexesData []['value_index']= $option->getValue(); + } + $this->addOptionToConfigurableProduct( + $productSku, + $attribute->getAttributeId(), + $valueIndexesData, + $position + ); + $position++; + } + + $this->assertArrayHasKey($attributesToAdd[0], $attributeOptions); + $this->assertArrayHasKey($attributesToAdd[1], $attributeOptions); + $this->assertCount(4, $attributeOptions[$attributesToAdd[0]]); + $this->assertCount(4, $attributeOptions[$attributesToAdd[1]]); + + $attributesBeforeAssign = $this->getConfigurableAttribute($productSku); + + $simpleProdsAttributeData = []; + foreach ($attributeOptions as $attributeCode => $options) { + $simpleProdsAttributeData [0][] = [ + 'attribute_code' => $attributeCode, + 'value' => $options[0]->getValue(), + ]; + $simpleProdsAttributeData [0][] = [ + 'attribute_code' => $attributeCode, + 'value' => $options[1]->getValue(), + ]; + $simpleProdsAttributeData [1][] = [ + 'attribute_code' => $attributeCode, + 'value' => $options[2]->getValue(), + ]; + $simpleProdsAttributeData [1][] = [ + 'attribute_code' => $attributeCode, + 'value' => $options[3]->getValue(), + ]; + } + + foreach ($childProductSkus as $childNum => $childSku) { + $this->createSimpleProduct($childSku, $simpleProdsAttributeData[$childNum]); + $res = $this->addChild($productSku, $childSku); + $this->assertTrue($res); + } + + $childProductsDiff = array_diff( + $childProductSkus, + array_column( + $this->getChildren($productSku), + 'sku' + ) + ); + $this->assertCount(0, $childProductsDiff, 'Added child product count mismatch expected result'); + + $attributesAfterAssign = $this->getConfigurableAttribute($productSku); + + $this->assertEquals( + $attributesBeforeAssign[0]['position'], + $attributesAfterAssign[0]['position'], + 'Product 1 attribute option position mismatch' + ); + $this->assertEquals( + $attributesBeforeAssign[1]['position'], + $attributesAfterAssign[1]['position'], + 'Product 2 attribute option position mismatch' + ); + + foreach ($childProductSkus as $childSku) { + $this->deleteProduct($childSku); + } + $this->deleteProduct($productSku); + } + + /** + * Delete product by SKU + * + * @param string $sku + * @return bool + */ + private function deleteProduct(string $sku): bool + { $serviceInfo = [ 'rest' => [ - 'resourcePath' => '/V1/products/' . $productSku, - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE + 'resourcePath' => '/V1/products/' . $sku, + 'httpMethod' => Request::HTTP_METHOD_DELETE ], 'soap' => [ 'service' => 'catalogProductRepositoryV1', @@ -114,19 +256,29 @@ public function testAddChildFullRestCreation() 'operation' => 'catalogProductRepositoryV1DeleteById', ], ]; - $this->_webApiCall($serviceInfo, ['sku' => $productSku]); + return $this->_webApiCall($serviceInfo, ['sku' => $sku]); + } + + /** + * Get configurable product attributes + * + * @param string $productSku + * @return array + */ + protected function getConfigurableAttribute(string $productSku): array + { $serviceInfo = [ 'rest' => [ - 'resourcePath' => '/V1/products/' . $childSku, - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE + 'resourcePath' => self::RESOURCE_PATH . '/' . $productSku . '/options/all', + 'httpMethod' => Request::HTTP_METHOD_GET ], 'soap' => [ - 'service' => 'catalogProductRepositoryV1', + 'service' => self::OPTION_SERVICE_NAME, 'serviceVersion' => self::SERVICE_VERSION, - 'operation' => 'catalogProductRepositoryV1DeleteById', - ], + 'operation' => self::OPTION_SERVICE_NAME . 'GetList' + ] ]; - $this->_webApiCall($serviceInfo, ['sku' => $childSku]); + return $this->_webApiCall($serviceInfo, ['sku' => $productSku]); } private function addChild($productSku, $childSku) @@ -134,7 +286,7 @@ private function addChild($productSku, $childSku) $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH . '/' . $productSku . '/child', - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST + 'httpMethod' => Request::HTTP_METHOD_POST ], 'soap' => [ 'service' => self::SERVICE_NAME, @@ -159,7 +311,7 @@ protected function createConfigurableProduct($productSku) $serviceInfo = [ 'rest' => [ 'resourcePath' => '/V1/products', - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST + 'httpMethod' => Request::HTTP_METHOD_POST ], 'soap' => [ 'service' => 'catalogProductRepositoryV1', @@ -170,24 +322,22 @@ protected function createConfigurableProduct($productSku) return $this->_webApiCall($serviceInfo, $requestData); } - protected function addOptionToConfigurableProduct($productSku, $attributeId, $attributeValue) + protected function addOptionToConfigurableProduct($productSku, $attributeId, $attributeValues, $position = 0) { $requestData = [ 'sku' => $productSku, 'option' => [ 'attribute_id' => $attributeId, 'label' => 'test_configurable', - 'position' => 0, + 'position' => $position, 'is_use_default' => true, - 'values' => [ - ['value_index' => $attributeValue], - ] + 'values' => $attributeValues ] ]; $serviceInfo = [ 'rest' => [ 'resourcePath' => '/V1/configurable-products/'. $productSku .'/options', - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST, + 'httpMethod' => Request::HTTP_METHOD_POST, ], 'soap' => [ 'service' => 'configurableProductOptionRepositoryV1', @@ -198,7 +348,7 @@ protected function addOptionToConfigurableProduct($productSku, $attributeId, $at return $this->_webApiCall($serviceInfo, $requestData); } - protected function createSimpleProduct($sku, $attributeValue) + protected function createSimpleProduct($sku, $customAttributes) { $requestData = [ 'product' => [ @@ -209,15 +359,13 @@ protected function createSimpleProduct($sku, $attributeValue) 'price' => 3.62, 'status' => 1, 'visibility' => 4, - 'custom_attributes' => [ - ['attribute_code' => 'test_configurable', 'value' => $attributeValue], - ] + 'custom_attributes' => $customAttributes ] ]; $serviceInfo = [ 'rest' => [ 'resourcePath' => '/V1/products', - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST, + 'httpMethod' => Request::HTTP_METHOD_POST, ], 'soap' => [ 'service' => 'catalogProductRepositoryV1', @@ -244,7 +392,7 @@ protected function removeChild($productSku, $childSku) $serviceInfo = [ 'rest' => [ 'resourcePath' => sprintf($resourcePath, $productSku, $childSku), - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE + 'httpMethod' => Request::HTTP_METHOD_DELETE ], 'soap' => [ 'service' => self::SERVICE_NAME, @@ -265,7 +413,7 @@ protected function getChildren($productSku) $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH . '/' . $productSku . '/children', - 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET + 'httpMethod' => Request::HTTP_METHOD_GET ], 'soap' => [ 'service' => self::SERVICE_NAME, diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test.php new file mode 100644 index 000000000000..3f907c0ad0cb --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test.php @@ -0,0 +1,101 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use Magento\Catalog\Model\ResourceModel\Eav\Attribute; +use Magento\Catalog\Setup\CategorySetup; +use Magento\Eav\Model\Config; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Eav\Api\AttributeRepositoryInterface; + +Bootstrap::getInstance()->reinitialize(); + +/** @var $eavConfig Config */ +$eavConfig = Bootstrap::getObjectManager()->get(Config::class); + +/** @var $installer CategorySetup */ +$installer = Bootstrap::getObjectManager()->create(CategorySetup::class); + +$attributesData = [ + [ + 'code' => 'custom_attr_1', + 'label' => 'custom_attr_1', + ], + [ + 'code' => 'custom_attr_2', + 'label' => 'custom_attr_2', + ], +]; + +foreach ($attributesData as $attributeData) { + $attribute = $eavConfig->getAttribute('catalog_product', $attributeData['code']); + + $eavConfig->clear(); + + + if (!$attribute->getId()) { + + /** @var $attribute Attribute */ + $attribute = Bootstrap::getObjectManager()->create( + Attribute::class + ); + + /** @var AttributeRepositoryInterface $attributeRepository */ + $attributeRepository = Bootstrap::getObjectManager()->create(AttributeRepositoryInterface::class); + + $attribute->setData( + [ + 'attribute_code' => $attributeData['code'], + 'entity_type_id' => $installer->getEntityTypeId('catalog_product'), + 'is_global' => 1, + 'is_user_defined' => 1, + 'frontend_input' => 'select', + 'is_unique' => 0, + 'is_required' => 0, + 'is_searchable' => 0, + 'is_visible_in_advanced_search' => 0, + 'is_comparable' => 0, + 'is_filterable' => 0, + 'is_filterable_in_search' => 0, + 'is_used_for_promo_rules' => 0, + 'is_html_allowed_on_front' => 1, + 'is_visible_on_front' => 0, + 'used_in_product_listing' => 0, + 'used_for_sort_by' => 0, + 'frontend_label' => $attributeData['label'], + 'backend_type' => 'int', + 'option' => [ + 'value' => [ + 'option_0' => [ + $attributeData['label'] . ' Option 1' + ], + 'option_1' => [ + $attributeData['label'] . ' Option 2' + ], + 'option_2' => [ + $attributeData['label'] . ' Option 3' + ], + 'option_3' => [ + $attributeData['label'] . ' Option 4' + ] + ], + 'order' => [ + 'option_0' => 1, + 'option_1' => 2, + 'option_2' => 3, + 'option_3' => 4 + ], + ], + ] + ); + + $attributeRepository->save($attribute); + + /* Assign attribute to attribute set */ + $installer->addAttributeToGroup('catalog_product', 'Default', 'General', $attribute->getId()); + } +} + +$eavConfig->clear(); diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test_rollback.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test_rollback.php new file mode 100644 index 000000000000..c947eaafda39 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attributes_for_position_test_rollback.php @@ -0,0 +1,41 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use Magento\Catalog\Model\ResourceModel\Product\Collection; +use Magento\Eav\Model\Config; +use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; +use Magento\Framework\Registry; +use Magento\TestFramework\Helper\Bootstrap; + +/** @var Registry $registry */ +$registry = Bootstrap::getObjectManager()->get(Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); +$productCollection = Bootstrap::getObjectManager() + ->get(Collection::class); +foreach ($productCollection as $product) { + $product->delete(); +} + +$attributesToDelete = [ + 'custom_attr_1', + 'custom_attr_2', +]; + +foreach ($attributesToDelete as $attributeToDelete) { + $eavConfig = Bootstrap::getObjectManager()->get(Config::class); + $attribute = $eavConfig->getAttribute('catalog_product', $attributeToDelete); + if ($attribute instanceof AbstractAttribute + && $attribute->getId() + ) { + $attribute->delete(); + } + $eavConfig->clear(); +} + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); From 129f24ffe075767a9e150e6d4c43285cd94c18df Mon Sep 17 00:00:00 2001 From: Roman Lytvynenko <lytvynen@adobe.com> Date: Wed, 12 Jun 2019 16:20:39 -0500 Subject: [PATCH 112/209] MAGETWO-99500: Configurable options attribute position is not saved correctly via API --- .../Test/Unit/Model/LinkManagementTest.php | 4 +++- .../Magento/ConfigurableProduct/Api/LinkManagementTest.php | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php index ad2fcd1e5936..b50e9794caac 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php @@ -158,7 +158,7 @@ public function testAddChild() ->getMock(); $optionMock = $this->getMockBuilder(\Magento\ConfigurableProduct\Api\Data\Option::class) ->disableOriginalConstructor() - ->setMethods(['getProductAttribute', 'getAttributeId']) + ->setMethods(['getProductAttribute', 'getPosition', 'getAttributeId']) ->getMock(); $productAttributeMock = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class) ->disableOriginalConstructor() @@ -216,6 +216,7 @@ public function testAddChild() $productAttributeMock->expects($this->any())->method('getAttributeCode')->willReturn('color'); $simple->expects($this->any())->method('getData')->willReturn('color'); $optionMock->expects($this->any())->method('getAttributeId')->willReturn('1'); + $optionMock->expects($this->any())->method('getPosition')->willReturn('0'); $optionsFactoryMock->expects($this->any())->method('create')->willReturn([$optionMock]); $attributeFactoryMock->expects($this->any())->method('create')->willReturn($attributeMock); @@ -223,6 +224,7 @@ public function testAddChild() $attributeCollectionMock->expects($this->any())->method('addFieldToFilter')->willReturnSelf(); $attributeCollectionMock->expects($this->any())->method('getItems')->willReturn([$attributeMock]); + $attributeMock->expects($this->any())->method('getId')->willReturn(1); $attributeMock->expects($this->any())->method('getOptions')->willReturn([$attributeOptionMock]); $extensionAttributesMock->expects($this->any())->method('setConfigurableProductOptions'); diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php index aa8f3b35669b..53c1bf08bb79 100644 --- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php @@ -12,6 +12,9 @@ use Magento\Framework\Webapi\Rest\Request; use Magento\TestFramework\TestCase\WebapiAbstract; +/** + * Class LinkManagementTest for testing ConfigurableProduct to SimpleProduct link functionality + */ class LinkManagementTest extends WebapiAbstract { const SERVICE_NAME = 'configurableProductLinkManagementV1'; From 54d2e318e2a676c9ab695779230df5b968cbd2c9 Mon Sep 17 00:00:00 2001 From: Roman Lytvynenko <lytvynen@adobe.com> Date: Wed, 12 Jun 2019 16:53:52 -0500 Subject: [PATCH 113/209] MAGETWO-99500: Configurable options attribute position is not saved correctly via API --- .../Test/Unit/Model/LinkManagementTest.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php index b50e9794caac..ae00399be46d 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php @@ -152,9 +152,13 @@ public function testAddChild() $extensionAttributesMock = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductExtension::class) ->disableOriginalConstructor() - ->setMethods([ - 'getConfigurableProductOptions', 'setConfigurableProductOptions', 'setConfigurableProductLinks' - ]) + ->setMethods( + [ + 'getConfigurableProductOptions', + 'setConfigurableProductOptions', + 'setConfigurableProductLinks' + ] + ) ->getMock(); $optionMock = $this->getMockBuilder(\Magento\ConfigurableProduct\Api\Data\Option::class) ->disableOriginalConstructor() From e4c7282464275c741b8ac5de3ed6d347b6c9b314 Mon Sep 17 00:00:00 2001 From: Roman Lytvynenko <lytvynen@adobe.com> Date: Wed, 12 Jun 2019 17:31:25 -0500 Subject: [PATCH 114/209] MAGETWO-99500: Configurable options attribute position is not saved correctly via API --- .../Test/Unit/Model/LinkManagementTest.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php index ae00399be46d..c385934352ab 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php @@ -149,7 +149,6 @@ public function testAddChild() ->disableOriginalConstructor() ->setMethods(['getId', 'getData']) ->getMock(); - $extensionAttributesMock = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductExtension::class) ->disableOriginalConstructor() ->setMethods( @@ -193,7 +192,6 @@ public function testAddChild() ->disableOriginalConstructor() ->setMethods(['getValue', 'getLabel']) ->getMock(); - $attributeCollectionMock = $this->getMockBuilder( \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection::class ) @@ -227,15 +225,11 @@ public function testAddChild() $attributeMock->expects($this->any())->method('getCollection')->willReturn($attributeCollectionMock); $attributeCollectionMock->expects($this->any())->method('addFieldToFilter')->willReturnSelf(); $attributeCollectionMock->expects($this->any())->method('getItems')->willReturn([$attributeMock]); - $attributeMock->expects($this->any())->method('getId')->willReturn(1); $attributeMock->expects($this->any())->method('getOptions')->willReturn([$attributeOptionMock]); - $extensionAttributesMock->expects($this->any())->method('setConfigurableProductOptions'); $extensionAttributesMock->expects($this->any())->method('setConfigurableProductLinks'); - $this->productRepository->expects($this->once())->method('save'); - $this->assertTrue(true, $this->object->addChild($productSku, $childSku)); } From 25b50ecd1b5f7dacee5c843f6a9d90dd45edb5a8 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Tue, 11 Jun 2019 15:37:35 -0500 Subject: [PATCH 115/209] MAGETWO-99736: Authorize.net - 3D Secure 2.0 Support for 2.3 - update composer hash and minor fixes --- .../Gateway/Request/Authorize3DSecureBuilder.php | 4 ++-- app/code/Magento/AuthorizenetCardinal/Model/Config.php | 2 ++ .../Test/Unit/Observer/DataAssignObserverTest.php | 2 +- app/code/Magento/AuthorizenetCardinal/composer.json | 1 + app/code/Magento/CardinalCommerce/Model/Config.php | 6 ++++-- app/code/Magento/CardinalCommerce/Model/JwtManagement.php | 2 +- .../Test/Unit/{ => Model}/JwtManagementTest.php | 0 app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml | 2 +- composer.lock | 6 +++--- 9 files changed, 15 insertions(+), 10 deletions(-) rename app/code/Magento/CardinalCommerce/Test/Unit/{ => Model}/JwtManagementTest.php (100%) diff --git a/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php b/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php index 3ff4f7dcea06..7e3d63d6f186 100644 --- a/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php +++ b/app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php @@ -65,8 +65,8 @@ public function build(array $buildSubject): array if ($payment instanceof Payment) { $cardinalJwt = (string)$payment->getAdditionalInformation('cardinalJWT'); $jwtPayload = $this->jwtParser->execute($cardinalJwt); - $eciFlag = $jwtPayload['Payload']['Payment']['ExtendedData']['ECIFlag']; - $cavv = $jwtPayload['Payload']['Payment']['ExtendedData']['CAVV']; + $eciFlag = $jwtPayload['Payload']['Payment']['ExtendedData']['ECIFlag'] ?? ''; + $cavv = $jwtPayload['Payload']['Payment']['ExtendedData']['CAVV'] ?? ''; $data = [ 'transactionRequest' => [ 'cardholderAuthentication' => [ diff --git a/app/code/Magento/AuthorizenetCardinal/Model/Config.php b/app/code/Magento/AuthorizenetCardinal/Model/Config.php index a4390bb10369..e70a6a2e39c1 100644 --- a/app/code/Magento/AuthorizenetCardinal/Model/Config.php +++ b/app/code/Magento/AuthorizenetCardinal/Model/Config.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\AuthorizenetCardinal\Model; use Magento\Framework\App\Config\ScopeConfigInterface; diff --git a/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php b/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php index a45ddc6cfbb3..9f560507e34d 100644 --- a/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php +++ b/app/code/Magento/AuthorizenetCardinal/Test/Unit/Observer/DataAssignObserverTest.php @@ -86,7 +86,7 @@ public function testDoesntSetDataWhenEmpty() /** * Tests case when CardinalCommerce is disabled. */ - public function testDoesnttDataWhenEmpty() + public function testDoesntSetDataWhenDisabled() { $config = $this->createMock(Config::class); $config->method('isActive') diff --git a/app/code/Magento/AuthorizenetCardinal/composer.json b/app/code/Magento/AuthorizenetCardinal/composer.json index e98e41551bcd..2d3ceee20937 100644 --- a/app/code/Magento/AuthorizenetCardinal/composer.json +++ b/app/code/Magento/AuthorizenetCardinal/composer.json @@ -7,6 +7,7 @@ "require": { "php": "~7.1.3||~7.2.0", "magento/module-authorizenet-acceptjs": "*", + "magento/framework": "*", "magento/module-cardinal-commerce": "*", "magento/module-payment": "*", "magento/module-sales": "*", diff --git a/app/code/Magento/CardinalCommerce/Model/Config.php b/app/code/Magento/CardinalCommerce/Model/Config.php index 0975ed77c970..64c72dae8d59 100644 --- a/app/code/Magento/CardinalCommerce/Model/Config.php +++ b/app/code/Magento/CardinalCommerce/Model/Config.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\CardinalCommerce\Model; use Magento\Framework\App\Config\ScopeConfigInterface; @@ -92,12 +94,12 @@ public function getOrgUnitId(?int $storeId = null): string */ public function getEnvironment(?int $storeId = null): string { - $orgUnitId = $this->scopeConfig->getValue( + $environment = $this->scopeConfig->getValue( 'three_d_secure/cardinal/environment', ScopeInterface::SCOPE_STORE, $storeId ); - return $orgUnitId; + return $environment; } /** diff --git a/app/code/Magento/CardinalCommerce/Model/JwtManagement.php b/app/code/Magento/CardinalCommerce/Model/JwtManagement.php index cfbdb2d8a1f1..953af1751fd6 100644 --- a/app/code/Magento/CardinalCommerce/Model/JwtManagement.php +++ b/app/code/Magento/CardinalCommerce/Model/JwtManagement.php @@ -53,7 +53,7 @@ public function decode(string $jwt, string $key): array throw new \InvalidArgumentException('Wrong number of segments in JWT'); } - list($headB64, $payloadB64, $signatureB64) = $parts; + [$headB64, $payloadB64, $signatureB64] = $parts; $headerJson = $this->urlSafeB64Decode($headB64); $header = $this->json->unserialize($headerJson); diff --git a/app/code/Magento/CardinalCommerce/Test/Unit/JwtManagementTest.php b/app/code/Magento/CardinalCommerce/Test/Unit/Model/JwtManagementTest.php similarity index 100% rename from app/code/Magento/CardinalCommerce/Test/Unit/JwtManagementTest.php rename to app/code/Magento/CardinalCommerce/Test/Unit/Model/JwtManagementTest.php diff --git a/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml b/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml index ef44f31e08e6..4fa40436d4a9 100644 --- a/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml +++ b/app/code/Magento/CardinalCommerce/etc/adminhtml/system.xml @@ -36,7 +36,7 @@ <config_path>three_d_secure/cardinal/api_identifier</config_path> <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model> </field> - <field id="debug" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="0"> + <field id="debug" translate="label" type="select" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="0"> <label>Debug</label> <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> <config_path>three_d_secure/cardinal/debug</config_path> diff --git a/composer.lock b/composer.lock index 5454994ca82d..7eecee3b74ae 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "912e04a44c38c8918799bd01b828fba0", + "content-hash": "cac9237019d018c1f7f9463414bc9bef", "packages": [ { "name": "braintree/braintree_php", @@ -2169,7 +2169,7 @@ }, { "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "email": "backendtea@gmail.com" } ], "description": "Symfony polyfill for ctype functions", @@ -6771,7 +6771,7 @@ "time": "2019-04-29T20:56:26+00:00" }, { - "name": "mikey179/vfsStream", + "name": "mikey179/vfsstream", "version": "v1.6.5", "source": { "type": "git", From 1883c3f7a6c8f6f97d41a44ef426cc58c790fe69 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Thu, 13 Jun 2019 09:14:06 +0300 Subject: [PATCH 116/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../js/variations/steps/attributes_values.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index 9a2ef138919b..6454dd61060f 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -98,20 +98,20 @@ define([ }, /** - * @param {Object} option + * @param {Object} newOption * @return boolean */ - isValidOption: function (option) { + isValidOption: function (newOption) { var duplicatedOptions = [], errorOption, allOptions = []; - if (_.isEmpty(option.label)) { + if (_.isEmpty(newOption.label)) { return false; } _.each(this.options(), function (option) { - if (!_.isUndefined(allOptions[option.label])) { + if (!_.isUndefined(allOptions[option.label]) && (newOption.label === option.label)) { duplicatedOptions.push(option); } @@ -119,8 +119,10 @@ define([ }); if (duplicatedOptions.length) { - errorOption = $("[data-role=\"" + option.id + "\""); - errorOption.addClass("_error"); + _.each(duplicatedOptions, function (duplicatedOption) { + errorOption = $("[data-role=\"" + duplicatedOption.id + "\""); + errorOption.addClass("_error"); + }); return false; } return true; @@ -224,8 +226,9 @@ define([ if (option['is_new'] === true) { if (!attribute.isValidOption(option)) { - throw new Error($.mage.__( - 'The value of attribute ""%1"" must be unique').replace("\"%1\"", attribute.label) + throw new Error( + $.mage.__('The value of attribute ""%1"" must be unique') + .replace("\"%1\"", attribute.label) ); } From 5d060a07204c4f5d29f1cfcb46bfc6ddba03b524 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Thu, 13 Jun 2019 12:47:43 +0400 Subject: [PATCH 117/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values - Updated automated test script. --- .../Section/AdminCreateProductConfigurationsPanelSection.xml | 2 +- ...dminCheckConfigurableProductAttributeValueUniquenessTest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml index 7b36b4ac276d..33fc25b98338 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml @@ -22,7 +22,7 @@ <element name="selectAll" type="button" selector=".action-select-all"/> <element name="selectAllByAttribute" type="button" selector="//div[@data-attribute-title='{{attr}}']//button[contains(@class, 'action-select-all')]" parameterized="true"/> <element name="createNewValue" type="input" selector=".action-create-new" timeout="30"/> - <element name="attributeNameInTitle" type="input" selector="//div[@class='attribute-entity-title-block']/div[@class='attribute-entity-title']"/> + <element name="attributeNameInTitle" type="input" selector="//div[contains(@class,'attribute-entity-title-block')]/div[@class='attribute-entity-title']"/> <element name="attributeName" type="input" selector="li[data-attribute-option-title=''] .admin__field-create-new .admin__control-text"/> <element name="attributeNameWithError" type="text" selector="//li[@data-attribute-option-title='']/div[contains(@class,'admin__field admin__field-create-new _error')]"/> <element name="saveAttribute" type="button" selector="li[data-attribute-option-title=''] .action-save" timeout="30"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml index 41a88e32a7f2..df934446fc89 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml @@ -14,7 +14,7 @@ <title value="Attribute value validation (check for uniqueness) in configurable products"/> <description value="Attribute value validation (check for uniqueness) in configurable products"/> <severity value="MAJOR"/> - <testCaseId value="MAGETWO-99519"/> + <testCaseId value="MC-17450"/> <useCaseId value="MAGETWO-99443"/> <group value="ConfigurableProduct"/> </annotations> From 1b2ce675e12ec32981fe52bba276d8f7d5455e0f Mon Sep 17 00:00:00 2001 From: Anahit Martirosyan <anahit_martirosyan@epam.com> Date: Thu, 13 Jun 2019 14:35:27 +0400 Subject: [PATCH 118/209] MAGETWO-72172: [2.3] No option available to configure disabled product - Updated automated test script --- ... => NoOptionAvailableToConfigureDisabledProductTest.xml} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename app/code/Magento/ConfigurableProduct/Test/Mftf/Test/{AdminCantAddConfigurableProductToShoppingCart.xml => NoOptionAvailableToConfigureDisabledProductTest.xml} (96%) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml similarity index 96% rename from app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml rename to app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml index 3e2d5fa34dfe..d169075823ac 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCantAddConfigurableProductToShoppingCart.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml @@ -8,10 +8,10 @@ <tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> - <test name="AdminCantAddConfigurableProductToShoppingCart"> + <test name="NoOptionAvailableToConfigureDisabledProductTest"> <annotations> - <title value="Disabled variation of configurable product can't be added to shopping cart via admin"/> - <description value="Disabled variation of configurable product can't be added to shopping cart via admin"/> + <title value="No option available to configure disabled product"/> + <description value="No option available to configure disabled product"/> <severity value="AVERAGE"/> <testCaseId value="MC-17373"/> <useCaseId value="MAGETWO-72172"/> From 10c89f7cab704d239ad666a01d0538bcfdfd812f Mon Sep 17 00:00:00 2001 From: eduard13 <e.chitoraga@atwix.com> Date: Thu, 13 Jun 2019 15:10:36 +0300 Subject: [PATCH 119/209] Revert "Calling the always action on opening and closing the modal." This reverts commit 0c402aedc254ca85864008f54d5d4b2545b605d0. --- app/code/Magento/Ui/view/base/web/js/modal/alert.js | 1 + app/code/Magento/Ui/view/base/web/js/modal/confirm.js | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js index 4741f26ba257..911d0e02578d 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js @@ -43,6 +43,7 @@ define([ * Close modal window. */ closeModal: function () { + this.options.actions.always(); this.element.bind('alertclosed', _.bind(this._remove, this)); return this._super(); diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js index 08a6fe2dc07c..eceab940d114 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js @@ -80,8 +80,6 @@ define([ * Open modal window. */ openModal: function () { - this.options.actions.always(); - return this._super(); }, From 07590d9ed581b4f760bdd66135d5ca2a93704cf4 Mon Sep 17 00:00:00 2001 From: eduard13 <e.chitoraga@atwix.com> Date: Thu, 13 Jun 2019 16:16:54 +0300 Subject: [PATCH 120/209] Calling the always action on creating the widget. --- app/code/Magento/Ui/view/base/web/js/modal/alert.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js index 911d0e02578d..07b7230bd126 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js @@ -39,6 +39,14 @@ define([ }] }, + /** + * Create widget. + */ + _create: function () { + this.options.actions.always(); + this._super(); + }, + /** * Close modal window. */ From a3b3f55c67ef70c35680122613f374fa51fa07b5 Mon Sep 17 00:00:00 2001 From: Aliaksei Yakimovich2 <aliaksei_yakimovich2@epam.com> Date: Thu, 13 Jun 2019 17:31:31 +0300 Subject: [PATCH 121/209] MAGETWO-60918: Fatal error on Import/Export page if deleted category ids exists in category path - Added integrational test; --- .../Model/Export/ProductTest.php | 37 ++++++-- ...uct_export_with_broken_categories_path.php | 90 +++++++++++++++++++ ...t_with_broken_categories_path_rollback.php | 35 ++++++++ 3 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php index c212d4c0d971..183ba86ca757 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php @@ -3,6 +3,9 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types = 1); + namespace Magento\CatalogImportExport\Model\Export; /** @@ -248,9 +251,11 @@ public function testExceptionInGetExportData() */ public function testExportWithFieldsEnclosure() { - $this->model->setParameters([ - \Magento\ImportExport\Model\Export::FIELDS_ENCLOSURE => 1 - ]); + $this->model->setParameters( + [ + \Magento\ImportExport\Model\Export::FIELDS_ENCLOSURE => 1 + ] + ); $this->model->setWriter( $this->objectManager->create( @@ -278,11 +283,13 @@ public function testCategoryIdsFilter() ) ); - $this->model->setParameters([ - \Magento\ImportExport\Model\Export::FILTER_ELEMENT_GROUP => [ - 'category_ids' => '2,13' + $this->model->setParameters( + [ + \Magento\ImportExport\Model\Export::FILTER_ELEMENT_GROUP => [ + 'category_ids' => '2,13' + ] ] - ]); + ); $exportData = $this->model->export(); @@ -292,6 +299,22 @@ public function testCategoryIdsFilter() $this->assertNotContains('Simple Product Not Visible On Storefront', $exportData); } + /** + * Verify that export processed successfully with wrong category path + * + * @magentoDataFixture Magento/CatalogImportExport/_files/product_export_with_broken_categories_path.php + */ + public function testExportWithWrongCategoryPath() + { + $this->model->setWriter( + $this->objectManager->create( + \Magento\ImportExport\Model\Export\Adapter\Csv::class + ) + ); + + $this->model->export(); + } + /** * Test 'hide from product page' export for non-default store. * diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path.php new file mode 100644 index 000000000000..3fdfeda826ab --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path.php @@ -0,0 +1,90 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types = 1); + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +$defaultAttributeSet = $objectManager->get(Magento\Eav\Model\Config::class) + ->getEntityType('catalog_product') + ->getDefaultAttributeSetId(); + +$productRepository = $objectManager->create( + \Magento\Catalog\Api\ProductRepositoryInterface::class +); + +$categoryLinkRepository = $objectManager->create( + \Magento\Catalog\Api\CategoryLinkRepositoryInterface::class, + [ + 'productRepository' => $productRepository + ] +); + +/** @var Magento\Catalog\Api\CategoryLinkManagementInterface $linkManagement */ +$categoryLinkManagement = $objectManager->create(\Magento\Catalog\Api\CategoryLinkManagementInterface::class); +$reflectionClass = new \ReflectionClass(get_class($categoryLinkManagement)); +$properties = [ + 'productRepository' => $productRepository, + 'categoryLinkRepository' => $categoryLinkRepository +]; +foreach ($properties as $key => $value) { + if ($reflectionClass->hasProperty($key)) { + $reflectionProperty = $reflectionClass->getProperty($key); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($categoryLinkManagement, $value); + } +} + +/** + * After installation system has two categories: root one with ID:1 and Default category with ID:2 + */ +/** @var $category \Magento\Catalog\Model\Category */ +$category = $objectManager->create(\Magento\Catalog\Model\Category::class); +$category->isObjectNew(true); +$category->setId(3) + ->setName('Category 1') + ->setParentId(2) + ->setPath('1/2/3') + ->setLevel(2) + ->setAvailableSortBy('name') + ->setDefaultSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->save(); + +$category = $objectManager->create(\Magento\Catalog\Model\Category::class); +$category->isObjectNew(true); +$category->setId(5) + ->setName('Category 1.1') + ->setParentId(3) + ->setPath('1/2/3/4/5') + ->setLevel(4) + ->setAvailableSortBy('name') + ->setDefaultSortBy('name') + ->setIsActive(true) + ->setIsAnchor(true) + ->setPosition(1) + ->save(); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create(\Magento\Catalog\Model\Product::class); +$product->isObjectNew(true); +$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE) + ->setAttributeSetId($defaultAttributeSet) + ->setStoreId(1) + ->setWebsiteIds([1]) + ->setName('Simple Product') + ->setSku('simple') + ->setPrice(10) + ->setWeight(18) + ->setStockData(['use_config_manage_stock' => 0]) + ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH) + ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) + ->save(); + +$categoryLinkManagement->assignProductToCategories( + $product->getSku(), + [5] +); diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php new file mode 100644 index 000000000000..46a596addae5 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types = 1); + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); +/** @var \Magento\Framework\Registry $registry */ +$registry = $objectManager->get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +// Remove products +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); + +try { + $product = $productRepository->get('simple', false, null, true); + $productRepository->delete($product); +} catch (\Magento\Framework\Exception\NoSuchEntityException $e) { + //Product already removed +} + +//Remove categories +/** @var Magento\Catalog\Model\ResourceModel\Category\Collection $collection */ +$collection = $objectManager->create(\Magento\Catalog\Model\ResourceModel\Category\Collection::class); +foreach ($collection->addAttributeToFilter('level', ['in' => [2, 3, 4]]) as $category) { + /** @var \Magento\Catalog\Model\Category $category */ + $category->delete(); +} + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); From f8078de520b88fdacc8375f6e9ed7a01d3a6f0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Bajsarowicz?= <lukasz.bajsarowicz@strix.net> Date: Thu, 13 Jun 2019 15:01:41 +0200 Subject: [PATCH 122/209] Refactor: Replace equality to identity comparison (Refer: phpbench.com), removing try ... catch blocks throwing just caught exception, make use of imports and extract method initializing Subscription, use short-return structure to reduce complexity. --- lib/internal/Magento/Framework/Mview/View.php | 202 +++++++++--------- 1 file changed, 100 insertions(+), 102 deletions(-) diff --git a/lib/internal/Magento/Framework/Mview/View.php b/lib/internal/Magento/Framework/Mview/View.php index 20736eb21963..fa1bfa0d38c6 100644 --- a/lib/internal/Magento/Framework/Mview/View.php +++ b/lib/internal/Magento/Framework/Mview/View.php @@ -6,15 +6,19 @@ namespace Magento\Framework\Mview; +use InvalidArgumentException; +use Magento\Framework\DataObject; use Magento\Framework\Mview\View\ChangelogTableNotExistsException; use Magento\Framework\Mview\View\SubscriptionFactory; +use Exception; +use Magento\Framework\Mview\View\SubscriptionInterface; /** * Mview * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class View extends \Magento\Framework\DataObject implements ViewInterface +class View extends DataObject implements ViewInterface { /** * Default batch size for partial reindex @@ -52,7 +56,7 @@ class View extends \Magento\Framework\DataObject implements ViewInterface protected $subscriptionFactory; /** - * @var \Magento\Framework\Mview\View\StateInterface + * @var View\StateInterface */ protected $state; @@ -113,7 +117,7 @@ public function setId($id) /** * Id field name setter * - * @param string $name + * @param string $name * @return $this */ public function setIdFieldName($name) @@ -167,13 +171,13 @@ public function getSubscriptions() * * @param string $viewId * @return ViewInterface - * @throws \InvalidArgumentException + * @throws InvalidArgumentException */ public function load($viewId) { $view = $this->config->getView($viewId); - if (empty($view) || empty($view['view_id']) || $view['view_id'] != $viewId) { - throw new \InvalidArgumentException("{$viewId} view does not exist."); + if (empty($view) || empty($view['view_id']) || $view['view_id'] !== $viewId) { + throw new InvalidArgumentException("{$viewId} view does not exist."); } $this->setId($viewId); @@ -185,37 +189,21 @@ public function load($viewId) /** * Create subscriptions * - * @throws \Exception * @return ViewInterface + * @throws Exception */ public function subscribe() { - if ($this->getState()->getMode() != View\StateInterface::MODE_ENABLED) { - try { - // Create changelog table - $this->getChangelog()->create(); - - // Create subscriptions - foreach ($this->getSubscriptions() as $subscriptionConfig) { - /** @var \Magento\Framework\Mview\View\SubscriptionInterface $subscription */ - $subscriptionInstance = $this->subscriptionFactory->create( - [ - 'view' => $this, - 'tableName' => $subscriptionConfig['name'], - 'columnName' => $subscriptionConfig['column'], - 'subscriptionModel' => !empty($subscriptionConfig['subscription_model']) - ? $subscriptionConfig['subscription_model'] - : SubscriptionFactory::INSTANCE_NAME, - ] - ); - $subscriptionInstance->create(); - } + if ($this->getState()->getMode() !== View\StateInterface::MODE_ENABLED) { + // Create changelog table + $this->getChangelog()->create(); - // Update view state - $this->getState()->setMode(View\StateInterface::MODE_ENABLED)->save(); - } catch (\Exception $e) { - throw $e; + foreach ($this->getSubscriptions() as $subscriptionConfig) { + $this->initSubscriptionInstance($subscriptionConfig)->create(); } + + // Update view state + $this->getState()->setMode(View\StateInterface::MODE_ENABLED)->save(); } return $this; @@ -224,34 +212,19 @@ public function subscribe() /** * Remove subscriptions * - * @throws \Exception * @return ViewInterface + * @throws Exception */ public function unsubscribe() { if ($this->getState()->getMode() != View\StateInterface::MODE_DISABLED) { - try { - // Remove subscriptions - foreach ($this->getSubscriptions() as $subscriptionConfig) { - /** @var \Magento\Framework\Mview\View\SubscriptionInterface $subscription */ - $subscriptionInstance = $this->subscriptionFactory->create( - [ - 'view' => $this, - 'tableName' => $subscriptionConfig['name'], - 'columnName' => $subscriptionConfig['column'], - 'subscriptionModel' => !empty($subscriptionConfig['subscriptionModel']) - ? $subscriptionConfig['subscriptionModel'] - : SubscriptionFactory::INSTANCE_NAME, - ] - ); - $subscriptionInstance->remove(); - } - - // Update view state - $this->getState()->setMode(View\StateInterface::MODE_DISABLED)->save(); - } catch (\Exception $e) { - throw $e; + // Remove subscriptions + foreach ($this->getSubscriptions() as $subscriptionConfig) { + $this->initSubscriptionInstance($subscriptionConfig)->remove(); } + + // Update view state + $this->getState()->setMode(View\StateInterface::MODE_DISABLED)->save(); } return $this; @@ -261,53 +234,56 @@ public function unsubscribe() * Materialize view by IDs in changelog * * @return void - * @throws \Exception + * @throws Exception */ public function update() { - if ($this->getState()->getStatus() == View\StateInterface::STATUS_IDLE) { - try { - $currentVersionId = $this->getChangelog()->getVersion(); - } catch (ChangelogTableNotExistsException $e) { - return; - } - $lastVersionId = (int) $this->getState()->getVersionId(); - $action = $this->actionFactory->get($this->getActionClass()); - - try { - $this->getState()->setStatus(View\StateInterface::STATUS_WORKING)->save(); - - $versionBatchSize = self::$maxVersionQueryBatch; - $batchSize = isset($this->changelogBatchSize[$this->getChangelog()->getViewId()]) - ? $this->changelogBatchSize[$this->getChangelog()->getViewId()] - : self::DEFAULT_BATCH_SIZE; - - for ($vsFrom = $lastVersionId; $vsFrom < $currentVersionId; $vsFrom += $versionBatchSize) { - // Don't go past the current version for atomicy. - $versionTo = min($currentVersionId, $vsFrom + $versionBatchSize); - $ids = $this->getChangelog()->getList($vsFrom, $versionTo); - - // We run the actual indexer in batches. - // Chunked AFTER loading to avoid duplicates in separate chunks. - $chunks = array_chunk($ids, $batchSize); - foreach ($chunks as $ids) { - $action->execute($ids); - } - } + if ($this->getState()->getStatus() !== View\StateInterface::STATUS_IDLE) { + return; + } + + try { + $currentVersionId = $this->getChangelog()->getVersion(); + } catch (ChangelogTableNotExistsException $e) { + return; + } + + $lastVersionId = (int)$this->getState()->getVersionId(); + $action = $this->actionFactory->get($this->getActionClass()); - $this->getState()->loadByView($this->getId()); - $statusToRestore = $this->getState()->getStatus() == View\StateInterface::STATUS_SUSPENDED - ? View\StateInterface::STATUS_SUSPENDED - : View\StateInterface::STATUS_IDLE; - $this->getState()->setVersionId($currentVersionId)->setStatus($statusToRestore)->save(); - } catch (\Exception $exception) { - $this->getState()->loadByView($this->getId()); - $statusToRestore = $this->getState()->getStatus() == View\StateInterface::STATUS_SUSPENDED - ? View\StateInterface::STATUS_SUSPENDED - : View\StateInterface::STATUS_IDLE; - $this->getState()->setStatus($statusToRestore)->save(); - throw $exception; + try { + $this->getState()->setStatus(View\StateInterface::STATUS_WORKING)->save(); + + $versionBatchSize = self::$maxVersionQueryBatch; + $batchSize = isset($this->changelogBatchSize[$this->getChangelog()->getViewId()]) + ? $this->changelogBatchSize[$this->getChangelog()->getViewId()] + : self::DEFAULT_BATCH_SIZE; + + for ($vsFrom = $lastVersionId; $vsFrom < $currentVersionId; $vsFrom += $versionBatchSize) { + // Don't go past the current version for atomicy. + $versionTo = min($currentVersionId, $vsFrom + $versionBatchSize); + $ids = $this->getChangelog()->getList($vsFrom, $versionTo); + + // We run the actual indexer in batches. + // Chunked AFTER loading to avoid duplicates in separate chunks. + $chunks = array_chunk($ids, $batchSize); + foreach ($chunks as $ids) { + $action->execute($ids); + } } + + $this->getState()->loadByView($this->getId()); + $statusToRestore = $this->getState()->getStatus() === View\StateInterface::STATUS_SUSPENDED + ? View\StateInterface::STATUS_SUSPENDED + : View\StateInterface::STATUS_IDLE; + $this->getState()->setVersionId($currentVersionId)->setStatus($statusToRestore)->save(); + } catch (Exception $exception) { + $this->getState()->loadByView($this->getId()); + $statusToRestore = $this->getState()->getStatus() === View\StateInterface::STATUS_SUSPENDED + ? View\StateInterface::STATUS_SUSPENDED + : View\StateInterface::STATUS_IDLE; + $this->getState()->setStatus($statusToRestore)->save(); + throw $exception; } } @@ -315,10 +291,11 @@ public function update() * Suspend view updates and set version ID to changelog's end * * @return void + * @throws Exception */ public function suspend() { - if ($this->getState()->getMode() == View\StateInterface::MODE_ENABLED) { + if ($this->getState()->getMode() === View\StateInterface::MODE_ENABLED) { $state = $this->getState(); $state->setVersionId($this->getChangelog()->getVersion()); $state->setStatus(View\StateInterface::STATUS_SUSPENDED); @@ -330,11 +307,12 @@ public function suspend() * Resume view updates * * @return void + * @throws Exception */ public function resume() { $state = $this->getState(); - if ($state->getStatus() == View\StateInterface::STATUS_SUSPENDED) { + if ($state->getStatus() === View\StateInterface::STATUS_SUSPENDED) { $state->setStatus(View\StateInterface::STATUS_IDLE); $state->save(); } @@ -347,7 +325,7 @@ public function resume() */ public function clearChangelog() { - if ($this->getState()->getMode() == View\StateInterface::MODE_ENABLED) { + if ($this->getState()->getMode() === View\StateInterface::MODE_ENABLED) { $this->getChangelog()->clear($this->getState()->getVersionId()); } } @@ -384,7 +362,7 @@ public function setState(View\StateInterface $state) */ public function isEnabled() { - return $this->getState()->getMode() == View\StateInterface::MODE_ENABLED; + return $this->getState()->getMode() === View\StateInterface::MODE_ENABLED; } /** @@ -394,7 +372,7 @@ public function isEnabled() */ public function isIdle() { - return $this->getState()->getStatus() == \Magento\Framework\Mview\View\StateInterface::STATUS_IDLE; + return $this->getState()->getStatus() === View\StateInterface::STATUS_IDLE; } /** @@ -404,7 +382,7 @@ public function isIdle() */ public function isWorking() { - return $this->getState()->getStatus() == \Magento\Framework\Mview\View\StateInterface::STATUS_WORKING; + return $this->getState()->getStatus() === View\StateInterface::STATUS_WORKING; } /** @@ -414,7 +392,7 @@ public function isWorking() */ public function isSuspended() { - return $this->getState()->getStatus() == \Magento\Framework\Mview\View\StateInterface::STATUS_SUSPENDED; + return $this->getState()->getStatus() === View\StateInterface::STATUS_SUSPENDED; } /** @@ -439,4 +417,24 @@ public function getChangelog() } return $this->changelog; } + + /** + * Initializes Subscription instance + * + * @param array $subscriptionConfig + * @return SubscriptionInterface + */ + private function initSubscriptionInstance(array $subscriptionConfig): SubscriptionInterface + { + return $this->subscriptionFactory->create( + [ + 'view' => $this, + 'tableName' => $subscriptionConfig['name'], + 'columnName' => $subscriptionConfig['column'], + 'subscriptionModel' => !empty($subscriptionConfig['subscription_model']) + ? $subscriptionConfig['subscription_model'] + : SubscriptionFactory::INSTANCE_NAME, + ] + ); + } } From ce56c70e90172d8cb936c12232bf66532ea8b32c Mon Sep 17 00:00:00 2001 From: shankar <konar.shankar2013@gmail.com> Date: Thu, 13 Jun 2019 22:35:13 +0530 Subject: [PATCH 123/209] Fixed sticky issue in admin grid --- app/code/Magento/Ui/view/base/web/js/grid/toolbar.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js b/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js index fd2d09c6a65f..9013b07a83f3 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js @@ -271,7 +271,9 @@ define([ */ show: function () { this.visible = true; - + if($('.page-main-actions').length === 0) { + this.$sticky.style.top = 0; + } this.$sticky.style.display = ''; this.$toolbar.style.visibility = 'hidden'; From f5a93b779a41a5cb14830814e553876ccb7cdbcb Mon Sep 17 00:00:00 2001 From: shankar <konar.shankar2013@gmail.com> Date: Thu, 13 Jun 2019 22:39:22 +0530 Subject: [PATCH 124/209] Comment added --- app/code/Magento/Ui/view/base/web/js/grid/toolbar.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js b/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js index 9013b07a83f3..6e647cb4239f 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js @@ -271,6 +271,7 @@ define([ */ show: function () { this.visible = true; + //Check admin grid button has addedr not if($('.page-main-actions').length === 0) { this.$sticky.style.top = 0; } From 759cf80db66356d9aa3fd84523f17f5e90b5f13b Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Thu, 13 Jun 2019 12:53:50 -0500 Subject: [PATCH 125/209] MC-17400: Calendar template update - Updated calendar template --- .../view/frontend/templates/js/calendar.phtml | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml index fcc6f092ff18..f5bfa54f644b 100644 --- a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml +++ b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml @@ -20,20 +20,20 @@ require([ //<![CDATA[ $.extend(true, $, { calendarConfig: { - dayNames: <?= $block->escapeJs($days['wide']) ?>, - dayNamesMin: <?= $block->escapeJs($days['abbreviated']) ?>, - monthNames: <?= $block->escapeJs($months['wide']) ?>, - monthNamesShort: <?= $block->escapeJs($months['abbreviated']) ?>, - infoTitle: "<?= $block->escapeJs(__('About the calendar')) ?>", - firstDay: <?= $block->escapeJs($firstDay) ?>, - closeText: "<?= $block->escapeJs(__('Close')) ?>", - currentText: "<?= $block->escapeJs(__('Go Today')) ?>", - prevText: "<?= $block->escapeJs(__('Previous')) ?>", - nextText: "<?= $block->escapeJs(__('Next')) ?>", - weekHeader: "<?= $block->escapeJs(__('WK')) ?>", - timeText: "<?= $block->escapeJs(__('Time')) ?>", - hourText: "<?= $block->escapeJs(__('Hour')) ?>", - minuteText: "<?= $block->escapeJs(__('Minute')) ?>", + dayNames: <?= /* @noEscape */ $days['wide'] ?>, + dayNamesMin: <?= /* @noEscape */ $days['abbreviated'] ?>, + monthNames: <?= /* @noEscape */ $months['wide'] ?>, + monthNamesShort: <?= /* @noEscape */ $months['abbreviated'] ?>, + infoTitle: "<?= /* @noEscape */ __('About the calendar') ?>", + firstDay: <?= /* @noEscape */ $firstDay ?>, + closeText: "<?= /* @noEscape */ __('Close') ?>", + currentText: "<?= /* @noEscape */ __('Go Today') ?>", + prevText: "<?= /* @noEscape */ __('Previous')) ?>", + nextText: "<?= /* @noEscape */ __('Next') ?>", + weekHeader: "<?= /* @noEscape */ __('WK') ?>", + timeText: "<?= /* @noEscape */ __('Time') ?>", + hourText: "<?= /* @noEscape */ __('Hour') ?>", + minuteText: "<?= /* @noEscape */ __('Minute') ?>", dateFormat: $.datepicker.RFC_2822, showOn: "button", showAnim: "", From a52d069900777c291d27b2e20c122970b7aaecca Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Thu, 13 Jun 2019 13:05:04 -0500 Subject: [PATCH 126/209] MAGETWO-99941: Configuarable product stock status stays 'In Stock' --- .../Observer/ParentItemProcessorInterface.php | 24 ++++ .../Observer/SaveInventoryDataObserver.php | 31 ++++- .../Model/Inventory/ParentItemProcessor.php | 123 ++++++++++++++++++ .../Magento/ConfigurableProduct/etc/di.xml | 7 + .../SaveInventoryDataObserverTest.php | 85 ++++++++++++ .../configurable_options_with_low_stock.php | 37 ++++++ 6 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/CatalogInventory/Observer/ParentItemProcessorInterface.php create mode 100644 app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php diff --git a/app/code/Magento/CatalogInventory/Observer/ParentItemProcessorInterface.php b/app/code/Magento/CatalogInventory/Observer/ParentItemProcessorInterface.php new file mode 100644 index 000000000000..dd5689a396eb --- /dev/null +++ b/app/code/Magento/CatalogInventory/Observer/ParentItemProcessorInterface.php @@ -0,0 +1,24 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\CatalogInventory\Observer; + +use Magento\Catalog\Api\Data\ProductInterface as Product; + +/** + * Interface for processing parent items of complex product types + */ +interface ParentItemProcessorInterface +{ + /** + * Process stock for parent items + * + * @param Product $product + * @return void + */ + public function process(Product $product); +} diff --git a/app/code/Magento/CatalogInventory/Observer/SaveInventoryDataObserver.php b/app/code/Magento/CatalogInventory/Observer/SaveInventoryDataObserver.php index 03ba58d3f498..dd67140fa0c1 100644 --- a/app/code/Magento/CatalogInventory/Observer/SaveInventoryDataObserver.php +++ b/app/code/Magento/CatalogInventory/Observer/SaveInventoryDataObserver.php @@ -13,6 +13,8 @@ use Magento\CatalogInventory\Api\StockRegistryInterface; use Magento\CatalogInventory\Model\StockItemValidator; use Magento\Framework\Event\Observer as EventObserver; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Exception\NoSuchEntityException; /** * Saves stock data from a product to the Stock Item @@ -39,6 +41,11 @@ class SaveInventoryDataObserver implements ObserverInterface */ private $stockItemValidator; + /** + * @var ParentItemProcessorInterface[] + */ + private $parentItemProcessorPool; + /** * @var array */ @@ -77,15 +84,18 @@ class SaveInventoryDataObserver implements ObserverInterface * @param StockConfigurationInterface $stockConfiguration * @param StockRegistryInterface $stockRegistry * @param StockItemValidator $stockItemValidator + * @param ParentItemProcessorInterface[] $parentItemProcessorPool */ public function __construct( StockConfigurationInterface $stockConfiguration, StockRegistryInterface $stockRegistry, - StockItemValidator $stockItemValidator = null + StockItemValidator $stockItemValidator = null, + array $parentItemProcessorPool = [] ) { $this->stockConfiguration = $stockConfiguration; $this->stockRegistry = $stockRegistry; $this->stockItemValidator = $stockItemValidator ?: ObjectManager::getInstance()->get(StockItemValidator::class); + $this->parentItemProcessorPool = $parentItemProcessorPool; } /** @@ -96,10 +106,15 @@ public function __construct( * * @param EventObserver $observer * @return void + * @throws LocalizedException + * @throws NoSuchEntityException */ public function execute(EventObserver $observer) { + /** @var Product $product */ $product = $observer->getEvent()->getProduct(); + + /** @var Item $stockItem */ $stockItem = $this->getStockItemToBeUpdated($product); if ($product->getStockData() !== null) { @@ -108,6 +123,7 @@ public function execute(EventObserver $observer) } $this->stockItemValidator->validate($product, $stockItem); $this->stockRegistry->updateStockItemBySku($product->getSku(), $stockItem); + $this->processParents($product); } /** @@ -156,4 +172,17 @@ private function getStockData(Product $product) } return $stockData; } + + /** + * Process stock data for parent products + * + * @param Product $product + * @return void + */ + private function processParents(Product $product) + { + foreach ($this->parentItemProcessorPool as $processor) { + $processor->process($product); + } + } } diff --git a/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php b/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php new file mode 100644 index 000000000000..0812cef24a49 --- /dev/null +++ b/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php @@ -0,0 +1,123 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\ConfigurableProduct\Model\Inventory; + +use Magento\ConfigurableProduct\Model\Product\Type\Configurable; +use Magento\Catalog\Api\Data\ProductInterface as Product; +use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory; +use Magento\CatalogInventory\Api\StockItemRepositoryInterface; +use Magento\CatalogInventory\Api\StockConfigurationInterface; +use Magento\CatalogInventory\Api\Data\StockItemInterface; +use Magento\CatalogInventory\Observer\ParentItemProcessorInterface; + +/** + * Process parent stock item + */ +class ParentItemProcessor implements ParentItemProcessorInterface +{ + /** + * @var Configurable + */ + private $configurableType; + + /** + * @var StockItemCriteriaInterfaceFactory + */ + private $criteriaInterfaceFactory; + + /** + * @var StockItemRepositoryInterface + */ + private $stockItemRepository; + + /** + * @var StockConfigurationInterface + */ + private $stockConfiguration; + + public function __construct( + Configurable $configurableType, + StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory, + StockItemRepositoryInterface $stockItemRepository, + StockConfigurationInterface $stockConfiguration + ) { + $this->configurableType = $configurableType; + $this->criteriaInterfaceFactory = $criteriaInterfaceFactory; + $this->stockItemRepository = $stockItemRepository; + $this->stockConfiguration = $stockConfiguration; + } + + /** + * Process parent products + * + * @param Product $product + * @return void + */ + public function process(Product $product) + { + $parentIds = $this->configurableType->getParentIdsByChild($product->getId()); + foreach ($parentIds as $productId) { + $this->processStockForParent((int)$productId); + } + } + + /** + * Change stock item for parent product depending on children stock items + * + * @param int $productId + * @return void + */ + private function processStockForParent(int $productId) + { + $criteria = $this->criteriaInterfaceFactory->create(); + $criteria->setScopeFilter($this->stockConfiguration->getDefaultScopeId()); + + $criteria->setProductsFilter($productId); + $stockItemCollection = $this->stockItemRepository->getList($criteria); + $allItems = $stockItemCollection->getItems(); + if (empty($allItems)) { + return; + } + $parentStockItem = array_shift($allItems); + + $childrenIds = $this->configurableType->getChildrenIds($productId); + $criteria->setProductsFilter($childrenIds); + $stockItemCollection = $this->stockItemRepository->getList($criteria); + $allItems = $stockItemCollection->getItems(); + + $childrenIsInStock = false; + + foreach ($allItems as $childItem) { + if ($childItem->getIsInStock() === true) { + $childrenIsInStock = true; + break; + } + } + + if ($this->isNeedToUpdateParent($parentStockItem, $childrenIsInStock)) { + $parentStockItem->setIsInStock($childrenIsInStock); + $parentStockItem->setStockStatusChangedAuto(1); + $this->stockItemRepository->save($parentStockItem); + } + } + + /** + * Check is parent item should be updated + * + * @param StockItemInterface $parentStockItem + * @param bool $childrenIsInStock + * @return bool + */ + private function isNeedToUpdateParent( + StockItemInterface $parentStockItem, + bool $childrenIsInStock + ): bool { + return $parentStockItem->getIsInStock() !== $childrenIsInStock && + ($childrenIsInStock === false || $parentStockItem->getStockStatusChangedAuto()); + } +} diff --git a/app/code/Magento/ConfigurableProduct/etc/di.xml b/app/code/Magento/ConfigurableProduct/etc/di.xml index c3ffe988b00d..8cec84abc4fe 100644 --- a/app/code/Magento/ConfigurableProduct/etc/di.xml +++ b/app/code/Magento/ConfigurableProduct/etc/di.xml @@ -255,4 +255,11 @@ </argument> </arguments> </type> + <type name="Magento\CatalogInventory\Observer\SaveInventoryDataObserver"> + <arguments> + <argument name="parentItemProcessorPool" xsi:type="array"> + <item name="configurable" xsi:type="object"> Magento\ConfigurableProduct\Model\Inventory\ParentItemProcessor</item> + </argument> + </arguments> + </type> </config> diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php new file mode 100644 index 000000000000..1b986b7670a1 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php @@ -0,0 +1,85 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\CatalogInventory\Observer; + +use Magento\TestFramework\Helper\Bootstrap; +use PHPUnit\Framework\TestCase; +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Api\Data\ProductExtensionInterface; +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\CatalogInventory\Api\Data\StockItemInterface; +use Magento\CatalogInventory\Api\StockItemRepositoryInterface; +use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Exception\InputException; +use Magento\Framework\Exception\StateException; +use Magento\Framework\Exception\CouldNotSaveException; + +/** + * Test for SaveInventoryDataObserver + */ +class SaveInventoryDataObserverTest extends TestCase +{ + /** + * @var ProductRepositoryInterface + */ + private $productRepository; + + /** + * @var StockItemRepositoryInterface + */ + private $stockItemRepository; + + /** + * @inheritDoc + */ + protected function setUp() + { + $this->productRepository = Bootstrap::getObjectManager() + ->get(ProductRepositoryInterface::class); + $this->stockItemRepository = Bootstrap::getObjectManager() + ->get(StockItemRepositoryInterface::class); + } + + /** + * Check that parent product will be out of stock + * + * @magentoAppArea adminhtml + * @magentoAppIsolation enabled + * @magentoDataFixture Magento/CatalogInventory/_files/configurable_options_with_low_stock.php + * @throws NoSuchEntityException + * @throws InputException + * @throws StateException + * @throws CouldNotSaveException + * @return void + */ + public function testAutoChangingIsInStockForParent() + { + /** @var ProductInterface $product */ + $product = $this->productRepository->get('simple_10'); + + /** @var ProductExtensionInterface $attributes*/ + $attributes = $product->getExtensionAttributes(); + + /** @var StockItemInterface $stockItem */ + $stockItem = $attributes->getStockItem(); + $stockItem->setQty(0); + $stockItem->setIsInStock(false); + $attributes->setStockItem($stockItem); + $product->setExtensionAttributes($attributes); + $this->productRepository->save($product); + + /** @var ProductInterface $product */ + $parentProduct = $this->productRepository->get('configurable'); + + $parentProductStockItem = $this->stockItemRepository->get( + $parentProduct->getExtensionAttributes()->getStockItem()->getItemId() + ); + $this->assertSame(false, $parentProductStockItem->getIsInStock()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php new file mode 100644 index 000000000000..fc78b27ea59c --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php @@ -0,0 +1,37 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\CatalogInventory\Api\Data\StockItemInterface; +use Magento\CatalogInventory\Api\StockItemRepositoryInterface; +use Magento\TestFramework\Helper\Bootstrap; + +require __DIR__ . '/../../../Magento/ConfigurableProduct/_files/product_configurable.php'; + +$objectManager = Bootstrap::getObjectManager(); + +/** @var StockItemRepositoryInterface $stockItemRepository */ +$stockItemRepository = $objectManager->get(StockItemRepositoryInterface::class); + +/** @var ProductInterface $product */ +$product = $productRepository->get('simple_10'); + +/** @var StockItemInterface $stockItem */ +$stockItem = $product->getExtensionAttributes()->getStockItem(); +$stockItem->setIsInStock(true) + ->setQty(1); +$stockItemRepository->save($stockItem); + +/** @var ProductInterface $product */ +$product = $productRepository->get('simple_20'); + +/** @var StockItemInterface $stockItem */ +$stockItem = $product->getExtensionAttributes()->getStockItem(); +$stockItem->setIsInStock(false) + ->setQty(0); +$stockItemRepository->save($stockItem); + From b5f44f268402b2cee214af38d9cd0a1f612d5875 Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Thu, 13 Jun 2019 13:06:32 -0500 Subject: [PATCH 127/209] MC-17400: Calendar template update - Updated calendar template --- .../Magento/Theme/view/frontend/templates/js/calendar.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml index f5bfa54f644b..21a23f0e1408 100644 --- a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml +++ b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml @@ -28,7 +28,7 @@ require([ firstDay: <?= /* @noEscape */ $firstDay ?>, closeText: "<?= /* @noEscape */ __('Close') ?>", currentText: "<?= /* @noEscape */ __('Go Today') ?>", - prevText: "<?= /* @noEscape */ __('Previous')) ?>", + prevText: "<?= /* @noEscape */ __('Previous') ?>", nextText: "<?= /* @noEscape */ __('Next') ?>", weekHeader: "<?= /* @noEscape */ __('WK') ?>", timeText: "<?= /* @noEscape */ __('Time') ?>", From f616a52ca92ea3ae3366c0efe68c3a4e2519e264 Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Thu, 13 Jun 2019 13:23:41 -0500 Subject: [PATCH 128/209] MC-17400: Calendar template update - Updated calendar template --- .../view/frontend/templates/js/calendar.phtml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml index 21a23f0e1408..a4106c17d3fd 100644 --- a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml +++ b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml @@ -24,16 +24,16 @@ require([ dayNamesMin: <?= /* @noEscape */ $days['abbreviated'] ?>, monthNames: <?= /* @noEscape */ $months['wide'] ?>, monthNamesShort: <?= /* @noEscape */ $months['abbreviated'] ?>, - infoTitle: "<?= /* @noEscape */ __('About the calendar') ?>", - firstDay: <?= /* @noEscape */ $firstDay ?>, - closeText: "<?= /* @noEscape */ __('Close') ?>", - currentText: "<?= /* @noEscape */ __('Go Today') ?>", - prevText: "<?= /* @noEscape */ __('Previous') ?>", - nextText: "<?= /* @noEscape */ __('Next') ?>", - weekHeader: "<?= /* @noEscape */ __('WK') ?>", - timeText: "<?= /* @noEscape */ __('Time') ?>", - hourText: "<?= /* @noEscape */ __('Hour') ?>", - minuteText: "<?= /* @noEscape */ __('Minute') ?>", + infoTitle: "<?= $block->escapeJs(__('About the calendar')) ?>", + firstDay: <?= (int)$firstDay ?>, + closeText: "<?= $block->escapeJs(__('Close')) ?>", + currentText: "<?= $block->escapeJs(__('Go Today')) ?>", + prevText: "<?= $block->escapeJs(__('Previous')) ?>", + nextText: "<?= $block->escapeJs(__('Next')) ?>", + weekHeader: "<?= $block->escapeJs(__('WK')) ?>", + timeText: "<?= $block->escapeJs(__('Time')) ?>", + hourText: "<?= $block->escapeJs(__('Hour')) ?>", + minuteText: "<?= $block->escapeJs(__('Minute')) ?>", dateFormat: $.datepicker.RFC_2822, showOn: "button", showAnim: "", From 3f99d89309d1d3a3959412b12a23775928ef9090 Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Thu, 13 Jun 2019 14:15:38 -0500 Subject: [PATCH 129/209] MAGETWO-99941: Configuarable product stock status stays 'In Stock' --- .../Model/Inventory/ParentItemProcessor.php | 6 ++++++ .../Observer/SaveInventoryDataObserverTest.php | 1 + .../_files/configurable_options_with_low_stock.php | 7 ++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php b/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php index 0812cef24a49..f1567f2b196d 100644 --- a/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php +++ b/app/code/Magento/ConfigurableProduct/Model/Inventory/ParentItemProcessor.php @@ -40,6 +40,12 @@ class ParentItemProcessor implements ParentItemProcessorInterface */ private $stockConfiguration; + /** + * @param Configurable $configurableType + * @param StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory + * @param StockItemRepositoryInterface $stockItemRepository + * @param StockConfigurationInterface $stockConfiguration + */ public function __construct( Configurable $configurableType, StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory, diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php index 1b986b7670a1..a50a7b096fe1 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/SaveInventoryDataObserverTest.php @@ -51,6 +51,7 @@ protected function setUp() * * @magentoAppArea adminhtml * @magentoAppIsolation enabled + * @magentoDataFixture Magento/ConfigurableProduct/_files/product_configurable.php * @magentoDataFixture Magento/CatalogInventory/_files/configurable_options_with_low_stock.php * @throws NoSuchEntityException * @throws InputException diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php index fc78b27ea59c..f6013b2e4b93 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/_files/configurable_options_with_low_stock.php @@ -9,11 +9,13 @@ use Magento\CatalogInventory\Api\Data\StockItemInterface; use Magento\CatalogInventory\Api\StockItemRepositoryInterface; use Magento\TestFramework\Helper\Bootstrap; - -require __DIR__ . '/../../../Magento/ConfigurableProduct/_files/product_configurable.php'; +use Magento\Catalog\Api\ProductRepositoryInterface; $objectManager = Bootstrap::getObjectManager(); +/** @var ProductRepositoryInterface $productRepository */ +$productRepository = $objectManager->create(ProductRepositoryInterface::class); + /** @var StockItemRepositoryInterface $stockItemRepository */ $stockItemRepository = $objectManager->get(StockItemRepositoryInterface::class); @@ -34,4 +36,3 @@ $stockItem->setIsInStock(false) ->setQty(0); $stockItemRepository->save($stockItem); - From 3fce729e829966b9b20dfaf5761e4625614152e0 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov <evgeny_petrov@epam.com> Date: Thu, 13 Jun 2019 14:03:47 +0300 Subject: [PATCH 130/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values --- .../web/js/variations/steps/attributes_values.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js index 6454dd61060f..6c790c634ee9 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/attributes_values.js @@ -111,7 +111,7 @@ define([ } _.each(this.options(), function (option) { - if (!_.isUndefined(allOptions[option.label]) && (newOption.label === option.label)) { + if (!_.isUndefined(allOptions[option.label]) && newOption.label === option.label) { duplicatedOptions.push(option); } @@ -120,11 +120,13 @@ define([ if (duplicatedOptions.length) { _.each(duplicatedOptions, function (duplicatedOption) { - errorOption = $("[data-role=\"" + duplicatedOption.id + "\""); - errorOption.addClass("_error"); + errorOption = $('[data-role="' + duplicatedOption.id + '"]'); + errorOption.addClass('_error'); }); + return false; } + return true; }, @@ -228,7 +230,7 @@ define([ if (!attribute.isValidOption(option)) { throw new Error( $.mage.__('The value of attribute ""%1"" must be unique') - .replace("\"%1\"", attribute.label) + .replace('"%1"', attribute.label) ); } From 8196f97d2980dd9e31fdf7955dc72ed66e57c22d Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Thu, 13 Jun 2019 16:16:05 -0500 Subject: [PATCH 131/209] MC-17400: Calendar template update - Updated calendar template --- .../Magento/Theme/view/frontend/templates/js/calendar.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml index a4106c17d3fd..e0a3169f4a8e 100644 --- a/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml +++ b/app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml @@ -50,7 +50,7 @@ require([ } }); - enUS = <?= $block->escapeJs($enUS) ?>; // en_US locale reference + enUS = <?= /* @noEscape */ $enUS ?>; // en_US locale reference //]]> }); From 43f5cdcf9ea86800e73faa15d72d1857b4c09b66 Mon Sep 17 00:00:00 2001 From: Lilit Sargsyan <Lilit_Sargsyan@epam.com> Date: Fri, 14 Jun 2019 08:33:31 +0400 Subject: [PATCH 132/209] MAGETWO-99443: Product attribute cannot be edited if the attribute was created with 2 same values - Updated automated test script. --- .../Section/AdminCreateProductConfigurationsPanelSection.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml index 33fc25b98338..a4c7d79d89c3 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Section/AdminCreateProductConfigurationsPanelSection.xml @@ -22,7 +22,7 @@ <element name="selectAll" type="button" selector=".action-select-all"/> <element name="selectAllByAttribute" type="button" selector="//div[@data-attribute-title='{{attr}}']//button[contains(@class, 'action-select-all')]" parameterized="true"/> <element name="createNewValue" type="input" selector=".action-create-new" timeout="30"/> - <element name="attributeNameInTitle" type="input" selector="//div[contains(@class,'attribute-entity-title-block')]/div[@class='attribute-entity-title']"/> + <element name="attributeNameInTitle" type="input" selector="//div[contains(@class,'attribute-entity-title-block')]/div[contains(@class,'attribute-entity-title')]"/> <element name="attributeName" type="input" selector="li[data-attribute-option-title=''] .admin__field-create-new .admin__control-text"/> <element name="attributeNameWithError" type="text" selector="//li[@data-attribute-option-title='']/div[contains(@class,'admin__field admin__field-create-new _error')]"/> <element name="saveAttribute" type="button" selector="li[data-attribute-option-title=''] .action-save" timeout="30"/> From a3fa8d1e2cb5713c7071c0fa8997af57fe67a559 Mon Sep 17 00:00:00 2001 From: shankar <konar.shankar2013@gmail.com> Date: Fri, 14 Jun 2019 12:28:52 +0530 Subject: [PATCH 133/209] fixed static test build --- app/code/Magento/Ui/view/base/web/js/grid/toolbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js b/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js index 6e647cb4239f..4f3f71289302 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/toolbar.js @@ -272,7 +272,7 @@ define([ show: function () { this.visible = true; //Check admin grid button has addedr not - if($('.page-main-actions').length === 0) { + if ($('.page-main-actions').length === 0) { this.$sticky.style.top = 0; } this.$sticky.style.display = ''; From 3ae710c0efe84f1d19d8d4bc967f47891d19316f Mon Sep 17 00:00:00 2001 From: Sankalp Shekhar <shekhar.sankalp@gmail.com> Date: Fri, 14 Jun 2019 09:58:28 -0500 Subject: [PATCH 134/209] Move Quote related Plugins to correct module --- app/code/Magento/Quote/etc/webapi_rest/di.xml | 1 + app/code/Magento/Quote/etc/webapi_soap/di.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/code/Magento/Quote/etc/webapi_rest/di.xml b/app/code/Magento/Quote/etc/webapi_rest/di.xml index 2c8da7c775ec..27d5ff775342 100644 --- a/app/code/Magento/Quote/etc/webapi_rest/di.xml +++ b/app/code/Magento/Quote/etc/webapi_rest/di.xml @@ -11,5 +11,6 @@ </type> <type name="Magento\Quote\Model\QuoteRepository"> <plugin name="accessControl" type="Magento\Quote\Model\QuoteRepository\Plugin\AccessChangeQuoteControl" /> + <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" /> </type> </config> diff --git a/app/code/Magento/Quote/etc/webapi_soap/di.xml b/app/code/Magento/Quote/etc/webapi_soap/di.xml index 2c8da7c775ec..27d5ff775342 100644 --- a/app/code/Magento/Quote/etc/webapi_soap/di.xml +++ b/app/code/Magento/Quote/etc/webapi_soap/di.xml @@ -11,5 +11,6 @@ </type> <type name="Magento\Quote\Model\QuoteRepository"> <plugin name="accessControl" type="Magento\Quote\Model\QuoteRepository\Plugin\AccessChangeQuoteControl" /> + <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" /> </type> </config> From 4da30fde2195e041ba0e89a61bb121077cac949d Mon Sep 17 00:00:00 2001 From: Dzmitry Tabusheu <dzmitry_tabusheu@epam.com> Date: Fri, 14 Jun 2019 17:59:40 +0300 Subject: [PATCH 135/209] MAGETWO-72172: [2.3] Disabled variation of configurable product can't be added to shopping cart via admin - Fixed functional test --- .../Test/NoOptionAvailableToConfigureDisabledProductTest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml index d169075823ac..132c77be627a 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml @@ -120,8 +120,8 @@ <click selector="{{AdminOrderFormConfigureProductSection.configure($$createConfigProduct.id$$)}}" stepKey="clickOnConfigure"/> <!--Click on attribute drop-down and check no option 1 is available--> <comment userInput="Click on attribute drop-down and check no option 1 is available" stepKey="commentNoOptionIsAvailable"/> - <waitForElement selector="{{AdminOrderFormConfigureProductSection.attributeSelect}}" stepKey="waitForShippingSectionLoaded"/> - <click selector="{{AdminOrderFormConfigureProductSection.attributeSelect}}" stepKey="clickToSelectOption"/> + <waitForElement selector="{{AdminOrderFormConfigureProductSection.selectOption}}" stepKey="waitForShippingSectionLoaded"/> + <click selector="{{AdminOrderFormConfigureProductSection.selectOption}}" stepKey="clickToSelectOption"/> <dontSee userInput="$$createConfigProductAttributeOption1.option[store_labels][1][label]$$" stepKey="dontSeeOption1"/> </test> </tests> From 9c1cb77ba2648f61d9b330d63b96660594d26afc Mon Sep 17 00:00:00 2001 From: Dmytro Horytskyi <horytsky@adobe.com> Date: Fri, 14 Jun 2019 10:31:14 -0500 Subject: [PATCH 136/209] MAGETWO-99669: [Magento Cloud] Error on searching for < symbol --- .../Magento/Search/Model/ResourceModel/SynonymReader.php | 2 +- .../testsuite/Magento/Search/Model/SynonymReaderTest.php | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Search/Model/ResourceModel/SynonymReader.php b/app/code/Magento/Search/Model/ResourceModel/SynonymReader.php index 45eee0a4001d..1ac1547eb8d0 100644 --- a/app/code/Magento/Search/Model/ResourceModel/SynonymReader.php +++ b/app/code/Magento/Search/Model/ResourceModel/SynonymReader.php @@ -106,7 +106,7 @@ private function queryByPhrase($phrase) */ private function escapePhrase(string $phrase): string { - return preg_replace('/@+|[@+-]+$/', '', $phrase); + return preg_replace('/@+|[@+-]+$|[<>]/', '', $phrase); } /** diff --git a/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php b/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php index 2d0020ba2268..9a6df9b9966d 100644 --- a/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php @@ -64,6 +64,15 @@ public static function loadByPhraseDataProvider() [ 'query_value+@', [] ], + [ + '<', [] + ], + [ + '>', [] + ], + [ + '<english>', [['synonyms' => 'british,english', 'store_id' => 1, 'website_id' => 0]] + ], ]; } From 13ae59625cf6671e42089b0de5d1de564a31aa9c Mon Sep 17 00:00:00 2001 From: Dmytro Horytskyi <horytsky@adobe.com> Date: Fri, 14 Jun 2019 13:25:36 -0500 Subject: [PATCH 137/209] MAGETWO-99669: [Magento Cloud] Error on searching for < symbol --- .../testsuite/Magento/Search/Model/SynonymReaderTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php b/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php index 9a6df9b9966d..90540a1d637d 100644 --- a/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Search/Model/SynonymReaderTest.php @@ -25,7 +25,7 @@ protected function setUp() /** * @return array */ - public static function loadByPhraseDataProvider() + public function loadByPhraseDataProvider(): array { return [ [ @@ -81,7 +81,7 @@ public static function loadByPhraseDataProvider() * @param array $expectedResult * @dataProvider loadByPhraseDataProvider */ - public function testLoadByPhrase($phrase, $expectedResult) + public function testLoadByPhrase(string $phrase, array $expectedResult) { $data = $this->model->loadByPhrase($phrase)->getData(); From 32baf1968c487453d8f2a488f1cd6a31dae88393 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Sat, 15 Jun 2019 13:59:21 -0500 Subject: [PATCH 138/209] MC-17337: Braintree Error Code Mapping Not Working for CVV 200 --- .../Gateway/Validator/ErrorCodeProvider.php | 8 ++ .../Validator/ErrorCodeProviderTest.php | 94 +++++++++++++++++++ .../Braintree/etc/braintree_error_mapping.xml | 1 + 3 files changed, 103 insertions(+) create mode 100644 app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ErrorCodeProviderTest.php diff --git a/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeProvider.php b/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeProvider.php index 167fcb1569cb..58ce33305da8 100644 --- a/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeProvider.php +++ b/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeProvider.php @@ -38,6 +38,14 @@ public function getErrorCodes($response): array $result[] = $error->code; } + if (isset($response->transaction) && $response->transaction->status === 'gateway_rejected') { + $result[] = $response->transaction->gatewayRejectionReason; + } + + if (isset($response->transaction) && $response->transaction->status === 'processor_declined') { + $result[] = $response->transaction->processorResponseCode; + } + return $result; } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ErrorCodeProviderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ErrorCodeProviderTest.php new file mode 100644 index 000000000000..cddb4852da0e --- /dev/null +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ErrorCodeProviderTest.php @@ -0,0 +1,94 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\Braintree\Test\Unit\Gateway\Validator; + +use Braintree\Result\Error; +use Magento\Braintree\Gateway\Validator\ErrorCodeProvider; +use PHPUnit\Framework\TestCase; + +/** + * Class ErrorCodeProviderTest + */ +class ErrorCodeProviderTest extends TestCase +{ + /** + * @var ErrorCodeProvider + */ + private $model; + + /** + * Checks a extracting error codes from response. + * + * @param array $errors + * @param array $transaction + * @param array $expectedResult + * @return void + * @dataProvider getErrorCodeDataProvider + */ + public function testGetErrorCodes(array $errors, array $transaction, array $expectedResult): void + { + $response = new Error( + [ + 'errors' => ['errors' => $errors], + 'transaction' => $transaction, + ] + ); + $this->model = new ErrorCodeProvider(); + $actual = $this->model->getErrorCodes($response); + + $this->assertSame($expectedResult, $actual); + } + + /** + * Gets list of errors variations. + * + * @return array + */ + public function getErrorCodeDataProvider(): array + { + return [ + [ + 'errors' => [ + ['code' => 91734], + ['code' => 91504] + ], + 'transaction' => [ + 'status' => 'success', + ], + 'expectedResult' => ['91734', '91504'] + ], + [ + 'errors' => [], + 'transaction' => [ + 'status' => 'processor_declined', + 'processorResponseCode' => '1000' + ], + 'expectedResult' => ['1000'] + ], + [ + 'errors' => [], + 'transaction' => [ + 'status' => 'processor_declined', + 'processorResponseCode' => '1000' + ], + 'expectedResult' => ['1000'] + ], + [ + 'errors' => [ + ['code' => 91734], + ['code' => 91504] + ], + 'transaction' => [ + 'status' => 'processor_declined', + 'processorResponseCode' => '1000' + ], + 'expectedResult' => ['91734', '91504', '1000'] + ], + ]; + } +} diff --git a/app/code/Magento/Braintree/etc/braintree_error_mapping.xml b/app/code/Magento/Braintree/etc/braintree_error_mapping.xml index 81da0a252e56..7155264b4e6a 100644 --- a/app/code/Magento/Braintree/etc/braintree_error_mapping.xml +++ b/app/code/Magento/Braintree/etc/braintree_error_mapping.xml @@ -20,6 +20,7 @@ <message code="81716" translate="true">Credit card number must be 12-19 digits.</message> <message code="81723" translate="true">Cardholder name is too long.</message> <message code="81736" translate="true">CVV verification failed.</message> + <message code="cvv" translate="true">CVV verification failed.</message> <message code="81737" translate="true">Postal code verification failed.</message> <message code="81750" translate="true">Credit card number is prohibited.</message> <message code="81801" translate="true">Addresses must have at least one field filled in.</message> From 32bdf860aada270a8945dd44076649a69359ee6a Mon Sep 17 00:00:00 2001 From: "Kristof Ringleff, Fooman" <kristof@fooman.co.nz> Date: Sun, 16 Jun 2019 16:53:30 +1200 Subject: [PATCH 139/209] Add wait steps after clicks that open a new page for Order related actions --- .../Backend/Test/Mftf/Test/AdminDashboardWithChartsChart.xml | 2 ++ ...rontPurchaseProductWithCustomOptionsWithLongValuesTitle.xml | 1 + .../Test/AssociatedProductToConfigurableOutOfStockTest.xml | 3 +++ .../Checkout/Test/Mftf/Test/StorefrontCustomerCheckoutTest.xml | 1 + .../Checkout/Test/Mftf/Test/StorefrontGuestCheckoutTest.xml | 1 + .../Test/Mftf/Test/ProductsQtyReturnAfterOrderCancelTest.xml | 1 + .../Magento/Sales/Test/Mftf/Test/AdminCreateInvoiceTest.xml | 3 +++ .../Mftf/Test/CreditMemoTotalAfterShippingDiscountTest.xml | 2 ++ 8 files changed, 14 insertions(+) diff --git a/app/code/Magento/Backend/Test/Mftf/Test/AdminDashboardWithChartsChart.xml b/app/code/Magento/Backend/Test/Mftf/Test/AdminDashboardWithChartsChart.xml index c3ef66b39948..f48c7752efc7 100644 --- a/app/code/Magento/Backend/Test/Mftf/Test/AdminDashboardWithChartsChart.xml +++ b/app/code/Magento/Backend/Test/Mftf/Test/AdminDashboardWithChartsChart.xml @@ -83,7 +83,9 @@ <!-- Create invoice --> <comment userInput="Create invoice" stepKey="createInvoice"/> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoiceButton"/> + <waitForPageLoad stepKey="waitForInvoicePageToLoad"/> <see selector="{{AdminHeaderSection.pageTitle}}" userInput="New Invoice" stepKey="seeNewInvoiceInPageTitle" after="clickInvoiceButton"/> <see selector="{{AdminInvoiceTotalSection.total('Subtotal')}}" userInput="$150.00" stepKey="seeCorrectGrandTotal"/> <click selector="{{AdminInvoiceMainActionsSection.submitInvoice}}" stepKey="clickSubmitInvoice"/> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/StorefrontPurchaseProductWithCustomOptionsWithLongValuesTitle.xml b/app/code/Magento/Catalog/Test/Mftf/Test/StorefrontPurchaseProductWithCustomOptionsWithLongValuesTitle.xml index 04cb813ec0ef..294dcb8c1b81 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/StorefrontPurchaseProductWithCustomOptionsWithLongValuesTitle.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/StorefrontPurchaseProductWithCustomOptionsWithLongValuesTitle.xml @@ -102,6 +102,7 @@ <click selector="{{AdminOrdersGridSection.submitSearch}}" stepKey="submitSearchOrderNum"/> <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappearOnSearch"/> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <!-- Checking the correctness of displayed custom options for user parameters on Order --> diff --git a/app/code/Magento/CatalogInventory/Test/Mftf/Test/AssociatedProductToConfigurableOutOfStockTest.xml b/app/code/Magento/CatalogInventory/Test/Mftf/Test/AssociatedProductToConfigurableOutOfStockTest.xml index 706df79b1ef8..8458fcf3b94e 100644 --- a/app/code/Magento/CatalogInventory/Test/Mftf/Test/AssociatedProductToConfigurableOutOfStockTest.xml +++ b/app/code/Magento/CatalogInventory/Test/Mftf/Test/AssociatedProductToConfigurableOutOfStockTest.xml @@ -122,8 +122,11 @@ <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask4"/> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoice"/> + <waitForPageLoad stepKey="waitForNewInvoicePageToLoad"/> <click selector="{{AdminInvoiceMainActionsSection.submitInvoice}}" stepKey="clickSubmitInvoice"/> + <waitForPageLoad stepKey="waitForNewInvoiceToBeCreated"/> <see selector="{{AdminOrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." stepKey="seeSuccessMessage"/> <click selector="{{AdminOrderDetailsMainActionsSection.ship}}" stepKey="clickShip"/> <waitForLoadingMaskToDisappear stepKey="waitForShipLoadingMask"/> diff --git a/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontCustomerCheckoutTest.xml b/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontCustomerCheckoutTest.xml index f77e3df11713..40b781df9b2a 100644 --- a/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontCustomerCheckoutTest.xml +++ b/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontCustomerCheckoutTest.xml @@ -72,6 +72,7 @@ <click stepKey="s81" selector="{{AdminOrdersGridSection.submitSearch22}}" /> <waitForPageLoad stepKey="s831"/> <click stepKey="s84" selector="{{AdminOrdersGridSection.firstRow}}" /> + <waitForPageLoad stepKey="waitForOrderToLoad"/> <see stepKey="s85" selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="Pending" /> <see stepKey="s87" selector="{{AdminOrderDetailsInformationSection.accountInformation}}" userInput="Customer" /> <see stepKey="s89" selector="{{AdminOrderDetailsInformationSection.accountInformation}}" userInput="$$simpleuscustomer.email$$" /> diff --git a/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontGuestCheckoutTest.xml b/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontGuestCheckoutTest.xml index 15410921f1bb..a77341b8697b 100644 --- a/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontGuestCheckoutTest.xml +++ b/app/code/Magento/Checkout/Test/Mftf/Test/StorefrontGuestCheckoutTest.xml @@ -62,6 +62,7 @@ <click selector="{{AdminOrdersGridSection.submitSearch}}" stepKey="submitSearchOrderNum"/> <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappearOnSearch"/> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="Pending" stepKey="seeAdminOrderStatus"/> <see selector="{{AdminOrderDetailsInformationSection.accountInformation}}" userInput="{{CustomerEntityOne.fullname}}" stepKey="seeAdminOrderGuest"/> <see selector="{{AdminOrderDetailsInformationSection.accountInformation}}" userInput="{{CustomerEntityOne.email}}" stepKey="seeAdminOrderEmail"/> diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/ProductsQtyReturnAfterOrderCancelTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/ProductsQtyReturnAfterOrderCancelTest.xml index f6469e060747..c3459aec3449 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/ProductsQtyReturnAfterOrderCancelTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/ProductsQtyReturnAfterOrderCancelTest.xml @@ -71,6 +71,7 @@ </actionGroup> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoiceButton"/> <waitForPageLoad stepKey="waitForNewInvoicePageLoad"/> <fillField selector="{{AdminInvoiceItemsSection.qtyToInvoiceColumn}}" userInput="1" stepKey="ChangeQtyToInvoice"/> diff --git a/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateInvoiceTest.xml b/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateInvoiceTest.xml index ce66409ed9b3..800517236cb3 100644 --- a/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateInvoiceTest.xml +++ b/app/code/Magento/Sales/Test/Mftf/Test/AdminCreateInvoiceTest.xml @@ -69,8 +69,11 @@ <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask4"/> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoice"/> + <waitForPageLoad stepKey="waitForNewInvoicePageToLoad"/> <click selector="{{AdminInvoiceMainActionsSection.submitInvoice}}" stepKey="clickSubmitInvoice"/> + <waitForPageLoad stepKey="waitForInvoiceToBeCreated"/> <see selector="{{AdminOrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." stepKey="seeSuccessMessage"/> <click selector="{{AdminOrderDetailsOrderViewSection.invoices}}" stepKey="clickInvoices"/> <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask5" /> diff --git a/app/code/Magento/Sales/Test/Mftf/Test/CreditMemoTotalAfterShippingDiscountTest.xml b/app/code/Magento/Sales/Test/Mftf/Test/CreditMemoTotalAfterShippingDiscountTest.xml index dfbdc5367799..93f4233af90e 100644 --- a/app/code/Magento/Sales/Test/Mftf/Test/CreditMemoTotalAfterShippingDiscountTest.xml +++ b/app/code/Magento/Sales/Test/Mftf/Test/CreditMemoTotalAfterShippingDiscountTest.xml @@ -104,7 +104,9 @@ <!-- Create invoice --> <click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <waitForPageLoad stepKey="waitForOrderPageToLoad"/> <click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoiceButton"/> + <waitForPageLoad stepKey="waitForNewInvoicePageToLoad"/> <see selector="{{AdminHeaderSection.pageTitle}}" userInput="New Invoice" stepKey="seeNewInvoiceInPageTitle" after="clickInvoiceButton"/> <!-- Verify Invoice Totals including subTotal Shipping Discount and GrandTotal --> From 29cc561352cf0ed1b500cf463fa9b2b27aae9f30 Mon Sep 17 00:00:00 2001 From: Sankalp Shekhar <shekhar.sankalp@gmail.com> Date: Fri, 14 Jun 2019 09:58:28 -0500 Subject: [PATCH 140/209] Move Quote related Plugins to correct module --- app/code/Magento/Quote/etc/webapi_rest/di.xml | 1 + app/code/Magento/Quote/etc/webapi_soap/di.xml | 1 + app/code/Magento/Sales/etc/webapi_rest/di.xml | 3 --- app/code/Magento/Sales/etc/webapi_soap/di.xml | 3 --- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Quote/etc/webapi_rest/di.xml b/app/code/Magento/Quote/etc/webapi_rest/di.xml index 2c8da7c775ec..27d5ff775342 100644 --- a/app/code/Magento/Quote/etc/webapi_rest/di.xml +++ b/app/code/Magento/Quote/etc/webapi_rest/di.xml @@ -11,5 +11,6 @@ </type> <type name="Magento\Quote\Model\QuoteRepository"> <plugin name="accessControl" type="Magento\Quote\Model\QuoteRepository\Plugin\AccessChangeQuoteControl" /> + <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" /> </type> </config> diff --git a/app/code/Magento/Quote/etc/webapi_soap/di.xml b/app/code/Magento/Quote/etc/webapi_soap/di.xml index 2c8da7c775ec..27d5ff775342 100644 --- a/app/code/Magento/Quote/etc/webapi_soap/di.xml +++ b/app/code/Magento/Quote/etc/webapi_soap/di.xml @@ -11,5 +11,6 @@ </type> <type name="Magento\Quote\Model\QuoteRepository"> <plugin name="accessControl" type="Magento\Quote\Model\QuoteRepository\Plugin\AccessChangeQuoteControl" /> + <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" /> </type> </config> diff --git a/app/code/Magento/Sales/etc/webapi_rest/di.xml b/app/code/Magento/Sales/etc/webapi_rest/di.xml index f2cbd14eb804..5d7838297a7c 100644 --- a/app/code/Magento/Sales/etc/webapi_rest/di.xml +++ b/app/code/Magento/Sales/etc/webapi_rest/di.xml @@ -6,9 +6,6 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> - <type name="Magento\Quote\Model\QuoteRepository"> - <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" /> - </type> <type name="Magento\Sales\Model\ResourceModel\Order"> <plugin name="authorization" type="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization" /> </type> diff --git a/app/code/Magento/Sales/etc/webapi_soap/di.xml b/app/code/Magento/Sales/etc/webapi_soap/di.xml index f2cbd14eb804..5d7838297a7c 100644 --- a/app/code/Magento/Sales/etc/webapi_soap/di.xml +++ b/app/code/Magento/Sales/etc/webapi_soap/di.xml @@ -6,9 +6,6 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> - <type name="Magento\Quote\Model\QuoteRepository"> - <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" /> - </type> <type name="Magento\Sales\Model\ResourceModel\Order"> <plugin name="authorization" type="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization" /> </type> From 50d8546617115c3daedeff78af318849acb9c1cf Mon Sep 17 00:00:00 2001 From: Atish Goswami <atishgoswami@gmail.com> Date: Sat, 4 May 2019 11:39:47 +0530 Subject: [PATCH 141/209] Adds fixes for issue #13227 --- app/code/Magento/Catalog/Model/Product/Url.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Url.php b/app/code/Magento/Catalog/Model/Product/Url.php index f3ac9f55d1ae..2760b0f9fddb 100644 --- a/app/code/Magento/Catalog/Model/Product/Url.php +++ b/app/code/Magento/Catalog/Model/Product/Url.php @@ -162,11 +162,8 @@ public function getUrl(\Magento\Catalog\Model\Product $product, $params = []) \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); - if ($categoryId) { - $filterData[UrlRewrite::METADATA]['category_id'] = $categoryId; - } elseif (!$useCategories) { - $filterData[UrlRewrite::METADATA]['category_id'] = ''; - } + $filterData[UrlRewrite::METADATA]['category_id'] + = $categoryId && $useCategories ? $categoryId : ''; $rewrite = $this->urlFinder->findOneByData($filterData); From 58677ab776a70b7884d11323b6ae81b8bd3938ca Mon Sep 17 00:00:00 2001 From: Aliaksei Yakimovich2 <aliaksei_yakimovich2@epam.com> Date: Mon, 17 Jun 2019 13:29:10 +0300 Subject: [PATCH 142/209] MAGETWO-60918: Fatal error on Import/Export page if deleted category ids exists in category path - Fixed static test; --- ...roduct_export_with_broken_categories_path_rollback.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php index 46a596addae5..d642fbf01c55 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php @@ -16,12 +16,8 @@ /** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ $productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); -try { - $product = $productRepository->get('simple', false, null, true); - $productRepository->delete($product); -} catch (\Magento\Framework\Exception\NoSuchEntityException $e) { - //Product already removed -} +$product = $productRepository->get('simple', false, null, true); +$productRepository->delete($product); //Remove categories /** @var Magento\Catalog\Model\ResourceModel\Category\Collection $collection */ From 17ce132e162d2c34e8dc103aa83e5e74e9bd566e Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Mon, 17 Jun 2019 12:45:43 -0500 Subject: [PATCH 143/209] MC-17502: Cannot place order using transparent-redirect based payment and multishipping - fix attaching form key on submit when one form contains another form --- lib/web/mage/common.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/web/mage/common.js b/lib/web/mage/common.js index 01f696ec1b7f..53f5b7487219 100644 --- a/lib/web/mage/common.js +++ b/lib/web/mage/common.js @@ -18,10 +18,21 @@ define([ 'form', function (e) { var formKeyElement, + existingFormKeyElement, + isKeyPresentInForm, form = $(e.target), formKey = $('input[name="form_key"]').val(); - if (formKey && !form.find('input[name="form_key"]').length && form[0].method !== 'get') { + existingFormKeyElement = form.find('input[name="form_key"]'); + isKeyPresentInForm = existingFormKeyElement.length; + + /* Verifies that existing auto-added form key is a direct form child element, + protection from a case when one form contains another form. */ + if (isKeyPresentInForm && existingFormKeyElement.attr('auto-added-form-key') === '1') { + isKeyPresentInForm = form.find('> input[name="form_key"]').length; + } + + if (formKey && !isKeyPresentInForm && form[0].method !== 'get') { formKeyElement = document.createElement('input'); formKeyElement.setAttribute('type', 'hidden'); formKeyElement.setAttribute('name', 'form_key'); From ad56730bca3a96f7497e9a2c49091c44a677abae Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Mon, 17 Jun 2019 08:59:23 -0500 Subject: [PATCH 144/209] MC-17337: Braintree Error Code Mapping Not Working for CVV 200 - fix tests --- .../Gateway/Validator/GeneralResponseValidatorTest.php | 9 +++++++-- .../Checkout/Api/PaymentInformationManagementTest.php | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php index 4741a3ea38c6..3a4e9d581dd0 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php @@ -14,6 +14,9 @@ use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; use PHPUnit_Framework_MockObject_MockObject as MockObject; +/** + * Class GeneralResponseValidatorTest + */ class GeneralResponseValidatorTest extends \PHPUnit\Framework\TestCase { /** @@ -82,9 +85,11 @@ public function dataProviderTestValidate() { $successTransaction = new \stdClass(); $successTransaction->success = true; + $successTransaction->status = 'authorized'; $failureTransaction = new \stdClass(); $failureTransaction->success = false; + $failureTransaction->status = 'declined'; $failureTransaction->message = 'Transaction was failed.'; $errors = [ @@ -93,10 +98,10 @@ public function dataProviderTestValidate() 'code' => 81804, 'attribute' => 'base', 'message' => 'Cannot process transaction.' - ] + ], ] ]; - $errorTransaction = new Error(['errors' => $errors]); + $errorTransaction = new Error(['errors' => $errors, 'transaction' => ['status' => 'declined']]); return [ [ diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php index f6338c1ee166..1266dc7bb884 100644 --- a/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php +++ b/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php @@ -96,7 +96,7 @@ public function testSavePaymentInformationAndPlaceOrderWithErrors( array_push($errors['errors'], ['code' => $testErrorCode]); } - $response = new Error(['errors' => $errors]); + $response = new Error(['errors' => $errors, 'transaction' => ['status' => 'declined']]); $this->client->method('placeRequest') ->willReturn(['object' => $response]); From 168d998b610bc661eb82ef4dc9afdf7f7d5508f1 Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Mon, 17 Jun 2019 15:12:09 -0500 Subject: [PATCH 145/209] MC-17546: Incorrect bundle and downloadable email template update - Resolved incorrect template updates --- .../creditmemo/create/items/renderer.phtml | 18 +++++++++--------- .../sales/creditmemo/view/items/renderer.phtml | 2 +- .../sales/invoice/create/items/renderer.phtml | 18 +++++++++--------- .../sales/invoice/view/items/renderer.phtml | 2 +- .../sales/order/view/items/renderer.phtml | 14 +++++++------- .../sales/shipment/create/items/renderer.phtml | 2 +- .../sales/shipment/view/items/renderer.phtml | 2 +- .../email/order/items/creditmemo/default.phtml | 4 ++-- .../email/order/items/invoice/default.phtml | 4 ++-- .../email/order/items/order/default.phtml | 4 ++-- .../order/creditmemo/items/renderer.phtml | 2 +- .../sales/order/invoice/items/renderer.phtml | 2 +- .../sales/order/shipment/items/renderer.phtml | 2 +- .../order/items/creditmemo/downloadable.phtml | 4 ++-- .../order/items/invoice/downloadable.phtml | 4 ++-- .../email/order/items/order/downloadable.phtml | 4 ++-- .../items/renderer/downloadable.phtml | 2 +- .../invoice/items/renderer/downloadable.phtml | 12 ++++++------ .../order/items/renderer/downloadable.phtml | 8 ++++---- .../product/composite/fieldset/grouped.phtml | 2 +- 20 files changed, 56 insertions(+), 56 deletions(-) diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml index e65269559a3a..04658a376118 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml @@ -68,30 +68,30 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyOrdered()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyInvoiced()) : ?> <tr> <th><?= $block->escapeHtml(__('Invoiced')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyInvoiced()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyInvoiced()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyShipped() && $block->isShipmentSeparately($_item)) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyShipped()*1) ?></td> + <td><?= (int)$_item->getOrderItem()->getQtyShipped()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyRefunded()) : ?> <tr> <th><?= $block->escapeHtml(__('Refunded')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyRefunded()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyRefunded()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyCanceled()) : ?> <tr> <th><?= $block->escapeHtml(__('Canceled')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyCanceled()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyCanceled()*1 ?></td> </tr> <?php endif; ?> </table> @@ -99,12 +99,12 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyOrdered()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyShipped()) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyShipped()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyShipped()*1 ?></td> </tr> <?php endif; ?> </table> @@ -133,9 +133,9 @@ <input type="text" class="input-text admin__control-text qty-input" name="creditmemo[items][<?= $block->escapeHtmlAttr($_item->getOrderItemId()) ?>][qty]" - value="<?= $block->escapeHtmlAttr($_item->getQty()*1) ?>" /> + value="<?= (int)$_item->getQty()*1 ?>" /> <?php else : ?> - <?= $block->escapeHtml($_item->getQty()*1) ?> + <?= (int)$_item->getQty()*1 ?> <?php endif; ?> <?php else : ?>   diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml index 18dc5db23d56..d52f41e27262 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml @@ -63,7 +63,7 @@ </td> <td class="col-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($_item->getQty()*1) ?> + <?= (int)$_item->getQty()*1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml index de0ac23340cc..5ed137a32d12 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml @@ -78,30 +78,30 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><span><?= $block->escapeHtml($_item->getOrderItem()->getQtyOrdered()*1) ?></span></td> + <td><span><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></span></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyInvoiced()) : ?> <tr> <th><?= $block->escapeHtml(__('Invoiced')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyInvoiced()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyInvoiced()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyShipped() && $block->isShipmentSeparately($_item)) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyShipped()*1) ?></td> + <td><?= (int)$_item->getOrderItem()->getQtyShipped()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyRefunded()) : ?> <tr> <th><?= $block->escapeHtml(__('Refunded')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyRefunded()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyRefunded()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyCanceled()) : ?> <tr> <th><?= $block->escapeHtml(__('Canceled')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyCanceled()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyCanceled()*1 ?></td> </tr> <?php endif; ?> </table> @@ -109,12 +109,12 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyOrdered()*1) ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyShipped()) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= $block->escapeHtml($_item->getOrderItem()->getQtyShipped()*1) ?></td> + <td><?= (int)$_item->getOrderItem()->getQtyShipped()*1 ?></td> </tr> <?php endif; ?> </table> @@ -128,9 +128,9 @@ <input type="text" class="input-text admin__control-text qty-input" name="invoice[items][<?= $block->escapeHtmlAttr($_item->getOrderItemId()) ?>]" - value="<?= $block->escapeHtmlAttr($_item->getQty()*1) ?>" /> + value="<?= (int)$_item->getQty()*1 ?>" /> <?php else : ?> - <?= $block->escapeHtml($_item->getQty()*1) ?> + <?= (int)$_item->getQty()*1 ?> <?php endif; ?> <?php else : ?>   diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml index b8a2c0db82d4..212603021967 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml @@ -64,7 +64,7 @@ </td> <td class="col-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($_item->getQty()*1) ?> + <?= (int)$_item->getQty()*1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml index 280bf67d6378..dba1fc5492b0 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml @@ -87,30 +87,30 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyOrdered()*1) ?></td> + <td><?= (int)$_item->getQtyOrdered()*1 ?></td> </tr> <?php if ((float) $_item->getQtyInvoiced()) : ?> <tr> <th><?= $block->escapeHtml(__('Invoiced')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyInvoiced()*1) ?></td> + <td><?= (int)$_item->getQtyInvoiced()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getQtyShipped() && $block->isShipmentSeparately($_item)) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyShipped()*1) ?></td> + <td><?= (int)$_item->getQtyShipped()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getQtyRefunded()) : ?> <tr> <th><?= $block->escapeHtml(__('Refunded')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyRefunded()*1) ?></td> + <td><?= (int)$_item->getQtyRefunded()*1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getQtyCanceled()) : ?> <tr> <th><?= $block->escapeHtml(__('Canceled')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyCanceled()*1) ?></td> + <td><?= (int)$_item->getQtyCanceled()*1 ?></td> </tr> <?php endif; ?> </table> @@ -118,12 +118,12 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyOrdered()*1) ?></td> + <td><?= (int)$_item->getQtyOrdered()*1 ?></td> </tr> <?php if ((float) $_item->getQtyShipped()) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= $block->escapeHtml($_item->getQtyShipped()*1) ?></td> + <td><?= (int)$_item->getQtyShipped()*1 ?></td> </tr> <?php endif; ?> </table> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml index fe446ec09571..3cb8473905fe 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml @@ -58,7 +58,7 @@ <input type="text" class="input-text admin__control-text" name="shipment[items][<?= $block->escapeHtmlAttr($_item->getOrderItemId()) ?>]" - value="<?= $block->escapeHtmlAttr($_item->getQty()*1) ?>" /> + value="<?= (int)$_item->getQty()*1 ?>" /> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml index d99cabe41420..bd9587024bcc 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml @@ -48,7 +48,7 @@ <td class="col-qty last"> <?php if (($block->isShipmentSeparately() && $_item->getParentItem()) || (!$block->isShipmentSeparately() && !$_item->getParentItem())) : ?> <?php if (isset($shipItems[$_item->getId()])) : ?> - <?= $block->escapeHtml($shipItems[$_item->getId()]->getQty()*1) ?> + <?= (int)$shipItems[$_item->getId()]->getQty()*1 ?> <?php elseif ($_item->getIsVirtual()) : ?> <?= $block->escapeHtml(__('N/A')) ?> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml index 47f9eade7f6a..b831522d402b 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml @@ -53,14 +53,14 @@ <?php endif; ?> <td class="item-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($_item->getQty() * 1) ?> + <?= (int)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> </td> <td class="item-price"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($block->getItemPrice($_item)) ?> + <?= /* @noEscape */ $block->getItemPrice($_item) ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml index 544e5f60f54b..2db335117b87 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml @@ -54,14 +54,14 @@ <?php endif; ?> <td class="item-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($_item->getQty() * 1) ?> + <?= (int)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> </td> <td class="item-price"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($block->getItemPrice($_item)) ?> + <?= /* @noEscape */ $block->getItemPrice($_item) ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml index 2b34016f8150..cc2ffe12b135 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml @@ -40,10 +40,10 @@ <p class="sku"><?= $block->escapeHtml(__('SKU')) ?>: <?= $block->escapeHtml($block->getSku($_item)) ?></p> </td> <td class="item-qty"> - <?= $block->escapeHtml($_item->getQtyOrdered() * 1) ?> + <?= (int)$_item->getQtyOrdered() * 1 ?> </td> <td class="item-price"> - <?= $block->escapeHtml($block->getItemPrice($_item)) ?> + <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> </tr> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml index 267366c1b5f0..0ecf2250b0d6 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml @@ -53,7 +53,7 @@ </td> <td class="col qty" data-th="<?= $block->escapeHtml(__('Quantity')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($_item->getQty()*1) ?> + <?= (int)$_item->getQty()*1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml index 097139fbace0..aeeec75d9448 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml @@ -56,7 +56,7 @@ </td> <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty Invoiced')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= $block->escapeHtml($_item->getQty()*1) ?> + <?= (int)$_item->getQty()*1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml index db658964253e..0126a2372e2e 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml @@ -43,7 +43,7 @@ <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty Shipped')) ?>"> <?php if (($block->isShipmentSeparately() && $_item->getParentItem()) || (!$block->isShipmentSeparately() && !$_item->getParentItem())) : ?> <?php if (isset($shipItems[$_item->getId()])) : ?> - <?= $block->escapeHtml($shipItems[$_item->getId()]->getQty()*1) ?> + <?= (int)$shipItems[$_item->getId()]->getQty()*1 ?> <?php elseif ($_item->getIsVirtual()) : ?> <?= $block->escapeHtml(__('N/A')) ?> <?php else : ?> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml index 78c9f712dfaa..31bc92cf47e1 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml @@ -31,8 +31,8 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="item-qty"><?= $block->escapeHtml($_item->getQty() * 1) ?></td> + <td class="item-qty"><?= (int)$_item->getQty() * 1 ?></td> <td class="item-price"> - <?= $block->escapeHtml($block->getItemPrice($_item)) ?> + <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> </tr> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml index 727bf156f368..aa4e3239d1a4 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml @@ -32,8 +32,8 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="item-qty"><?= $block->escapeHtml($_item->getQty() * 1) ?></td> + <td class="item-qty"><?= (int)$_item->getQty() * 1 ?></td> <td class="item-price"> - <?= $block->escapeHtml($block->getItemPrice($_item)) ?> + <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> </tr> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml index 9f9de6bf7d05..da6ae3ca1248 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml @@ -46,8 +46,8 @@ </table> <?php endif; ?> </td> - <td class="item-qty"><?= $block->escapeHtml($_item->getQtyOrdered() * 1) ?></td> + <td class="item-qty"><?= (int)$_item->getQtyOrdered() * 1 ?></td> <td class="item-price"> - <?= $block->escapeHtml($block->getItemPrice($_item)) ?> + <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> </tr> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml index 2d263635718d..df5ddf6e1033 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml @@ -55,7 +55,7 @@ <td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>"> <?= $block->getItemPriceHtml() ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty')) ?>"><?= $block->escapeHtml($_item->getQty()*1) ?></td> + <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty')) ?>"><?= (int)$_item->getQty()*1 ?></td> <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> <?= $block->getItemRowTotalHtml() ?> </td> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml index 6e86dc5bf878..85f083879019 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml @@ -9,7 +9,7 @@ <?php $_item = $block->getItem() ?> <?php $_order = $block->getItem()->getOrderItem()->getOrder() ?> <tr id="order-item-row-<?= $block->escapeHtmlAttr($_item->getId()) ?>"> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong> <?php if ($_options = $block->getItemOptions()) : ?> <dl class="item-options links"> @@ -50,14 +50,14 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= /* @noEscape */ $block->prepareSku($block->getSku()) ?></td> - <td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')) ?>"><?= /* @noEscape */ $block->prepareSku($block->getSku()) ?></td> + <td class="col price" data-th="<?= $block->escapeHtmlAttr(__('Price')) ?>"> <?= $block->getItemPriceHtml() ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty Invoiced')) ?>"> - <span class="qty summary" data-label="<?= $block->escapeHtml(__('Qty Invoiced')) ?>"><?= $block->escapeHtml($_item->getQty()*1) ?></span> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Qty Invoiced')) ?>"> + <span class="qty summary" data-label="<?= $block->escapeHtmlAttr(__('Qty Invoiced')) ?>"><?= (int)$_item->getQty()*1 ?></span> </td> - <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> + <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?= $block->getItemRowTotalHtml() ?> </td> </tr> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml index 4caedd3e2d23..b3795420f273 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml @@ -60,25 +60,25 @@ <?php if ($block->getItem()->getQtyOrdered() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Ordered')) ?></span> - <span class="content"><?= $block->escapeHtml($block->getItem()->getQtyOrdered()*1) ?></span> + <span class="content"><?= (int)$block->getItem()->getQtyOrdered()*1 ?></span> </li> <?php endif; ?> <?php if ($block->getItem()->getQtyShipped() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Shipped')) ?></span> - <span class="content"><?= $block->escapeHtml($block->getItem()->getQtyShipped() * 1) ?></span> + <span class="content"><?= (int)$block->getItem()->getQtyShipped()*1 ?></span> </li> <?php endif; ?> <?php if ($block->getItem()->getQtyCanceled() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Canceled')) ?></span> - <span class="content"><?= $block->escapeHtml($block->getItem()->getQtyCanceled()*1) ?></span> + <span class="content"><?= (int)$block->getItem()->getQtyCanceled()*1 ?></span> </li> <?php endif; ?> <?php if ($block->getItem()->getQtyRefunded() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Refunded')) ?></span> - <span class="content"><?= $block->escapeHtml($block->getItem()->getQtyRefunded()*1) ?></span> + <span class="content"><?= (int)$block->getItem()->getQtyRefunded()*1 ?></span> </li> <?php endif; ?> </ul> diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml b/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml index 7c6fa5007031..4e9c5bf6fdd5 100644 --- a/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml +++ b/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml @@ -54,7 +54,7 @@ name="super_group[<?= $block->escapeHtmlAttr($_item->getId()) ?>]" id="super_group[<?= $block->escapeHtmlAttr($_item->getId()) ?>]" maxlength="12" - value="<?= $block->escapeHtmlAttr($_item->getQty()*1) ?>" + value="<?= (int)$_item->getQty()*1 ?>" title="<?= $block->escapeHtmlAttr(__('Qty')) ?>" class="input-text admin__control-text qty" /> <input type="hidden" value="1" price="<?= $block->escapeHtmlAttr($block->getCurrencyPrice($_item->getPrice())) ?>" qtyId="super_group[<?= $block->escapeHtmlAttr($_item->getId()) ?>]" /> From 421d946701833628c1e0a7209d9f6da12fec782f Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Mon, 17 Jun 2019 15:24:26 -0500 Subject: [PATCH 146/209] MC-17546: Incorrect bundle and downloadable email template update - Resolved incorrect template updates --- .../frontend/templates/email/order/items/shipment/default.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml index 0dbcbbb392bd..033172758fba 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml @@ -48,7 +48,7 @@ <td class="item-qty"> <?php if (($block->isShipmentSeparately() && $_item->getParentItem()) || (!$block->isShipmentSeparately() && !$_item->getParentItem())) : ?> <?php if (isset($shipItems[$_item->getId()])) : ?> - <?= $block->escapeHtml($shipItems[$_item->getId()]->getQty() * 1) ?> + <?= (int)$shipItems[$_item->getId()]->getQty() * 1 ?> <?php elseif ($_item->getIsVirtual()) : ?> <?= $block->escapeHtml(__('N/A')) ?> <?php else : ?> From 8475a14f20d68013422c3add927f65f7dc4bb484 Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Mon, 17 Jun 2019 15:33:06 -0500 Subject: [PATCH 147/209] MC-17546: Incorrect bundle and downloadable email template update - Reverted unrelated template updates --- .../templates/catalog/product/composite/fieldset/grouped.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml b/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml index 4e9c5bf6fdd5..7c6fa5007031 100644 --- a/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml +++ b/app/code/Magento/GroupedProduct/view/adminhtml/templates/catalog/product/composite/fieldset/grouped.phtml @@ -54,7 +54,7 @@ name="super_group[<?= $block->escapeHtmlAttr($_item->getId()) ?>]" id="super_group[<?= $block->escapeHtmlAttr($_item->getId()) ?>]" maxlength="12" - value="<?= (int)$_item->getQty()*1 ?>" + value="<?= $block->escapeHtmlAttr($_item->getQty()*1) ?>" title="<?= $block->escapeHtmlAttr(__('Qty')) ?>" class="input-text admin__control-text qty" /> <input type="hidden" value="1" price="<?= $block->escapeHtmlAttr($block->getCurrencyPrice($_item->getPrice())) ?>" qtyId="super_group[<?= $block->escapeHtmlAttr($_item->getId()) ?>]" /> From 8a835ad12f1964374b0053bcb287cb2b358889c9 Mon Sep 17 00:00:00 2001 From: Serhiy Yelahin <serhiy.yelahin@transoftgroup.com> Date: Tue, 18 Jun 2019 10:50:43 +0300 Subject: [PATCH 148/209] MC-17505: Customer address attribute Phone validation issue --- app/code/Magento/Eav/Model/Attribute/Data/Text.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Text.php b/app/code/Magento/Eav/Model/Attribute/Data/Text.php index c5167821fdfc..071b2b83e396 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Text.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Text.php @@ -168,7 +168,7 @@ private function validateLength(\Magento\Eav\Model\Attribute $attribute, string */ private function validateInputRule(string $value): array { - $result = $this->_validateInputRule($value); + $result = $this->_validateInputRule(trim($value)); return \is_array($result) ? $result : []; } } From 27ec5134ce328464e6b74b236f830fed331f55e5 Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Tue, 18 Jun 2019 11:40:50 +0300 Subject: [PATCH 149/209] MAGETWO-99591: Restricted admin cannot edit reviews from pending reviews grid --- .../Magento/Review/Block/Adminhtml/Edit.php | 28 +++++- .../Review/Controller/Adminhtml/Product.php | 13 +-- .../Controller/Adminhtml/Product/Delete.php | 56 ++++++++++- .../Controller/Adminhtml/Product/Edit.php | 50 ++++++++++ .../Adminhtml/Product/MassDelete.php | 96 +++++++++++++++++- .../Adminhtml/Product/MassUpdateStatus.php | 97 ++++++++++++++++++- .../Controller/Adminhtml/Product/Pending.php | 17 +++- .../Adminhtml/Product/ReviewGrid.php | 29 +++++- .../Controller/Adminhtml/Product/Save.php | 56 ++++++++++- app/code/Magento/Review/i18n/en_US.csv | 2 + .../Controller/Adminhtml/Product/EditTest.php | 91 +++++++++++++++++ .../Adminhtml/Product/MassUpdateTest.php | 93 ++++++++++++++++++ 12 files changed, 601 insertions(+), 27 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php diff --git a/app/code/Magento/Review/Block/Adminhtml/Edit.php b/app/code/Magento/Review/Block/Adminhtml/Edit.php index f6f0ccef9b4e..38e0d6c7e0d5 100644 --- a/app/code/Magento/Review/Block/Adminhtml/Edit.php +++ b/app/code/Magento/Review/Block/Adminhtml/Edit.php @@ -6,7 +6,7 @@ namespace Magento\Review\Block\Adminhtml; /** - * Review edit form + * Review edit form. */ class Edit extends \Magento\Backend\Block\Widget\Form\Container { @@ -77,7 +77,13 @@ protected function _construct() 'previous', [ 'label' => __('Previous'), - 'onclick' => 'setLocation(\'' . $this->getUrl('review/*/*', ['id' => $prevId]) . '\')' + 'onclick' => 'setLocation(\'' . $this->getUrl( + 'review/*/*', + [ + 'id' => $prevId, + 'ret' => $this->getRequest()->getParam('ret'), + ] + ) . '\')' ], 3, 10 @@ -93,7 +99,10 @@ protected function _construct() 'button' => [ 'event' => 'save', 'target' => '#edit_form', - 'eventData' => ['action' => ['args' => ['next_item' => $prevId]]], + 'eventData' => ['action' => ['args' => [ + 'next_item' => $prevId, + 'ret' => $this->getRequest()->getParam('ret'), + ]]], ], ], ] @@ -113,7 +122,10 @@ protected function _construct() 'button' => [ 'event' => 'save', 'target' => '#edit_form', - 'eventData' => ['action' => ['args' => ['next_item' => $nextId]]], + 'eventData' => ['action' => ['args' => [ + 'next_item' => $nextId, + 'ret' => $this->getRequest()->getParam('ret'), + ]]], ], ], ] @@ -126,7 +138,13 @@ protected function _construct() 'next', [ 'label' => __('Next'), - 'onclick' => 'setLocation(\'' . $this->getUrl('review/*/*', ['id' => $nextId]) . '\')' + 'onclick' => 'setLocation(\'' . $this->getUrl( + 'review/*/*', + [ + 'id' => $nextId, + 'ret' => $this->getRequest()->getParam('ret'), + ] + ) . '\')' ], 3, 105 diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product.php b/app/code/Magento/Review/Controller/Adminhtml/Product.php index 8c4503d8f023..968c84359b5b 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product.php @@ -12,7 +12,7 @@ use Magento\Review\Model\RatingFactory; /** - * Reviews admin controller + * Reviews admin controller. */ abstract class Product extends Action { @@ -63,17 +63,10 @@ public function __construct( } /** - * @return bool + * @inheritdoc */ protected function _isAllowed() { - switch ($this->getRequest()->getActionName()) { - case 'pending': - return $this->_authorization->isAllowed('Magento_Review::pending'); - break; - default: - return $this->_authorization->isAllowed('Magento_Review::reviews_all'); - break; - } + return $this->_authorization->isAllowed('Magento_Review::reviews_all'); } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php index 75015d65e1a1..3228ed78cab4 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php @@ -5,12 +5,25 @@ */ namespace Magento\Review\Controller\Adminhtml\Product; +use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Controller\ResultFactory; +use Magento\Review\Model\Review; +use Magento\Framework\App\Action\HttpGetActionInterface; -class Delete extends ProductController +/** + * Delete action. + */ +class Delete extends ProductController implements HttpGetActionInterface, HttpPostActionInterface { /** + * @var Review + */ + private $model; + + /** + * Execute action. + * * @return \Magento\Backend\Model\View\Result\Redirect */ public function execute() @@ -19,7 +32,7 @@ public function execute() $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); $reviewId = $this->getRequest()->getParam('id', false); try { - $this->reviewFactory->create()->setId($reviewId)->aggregate()->delete(); + $this->getModel()->aggregate()->delete(); $this->messageManager->addSuccess(__('The review has been deleted.')); if ($this->getRequest()->getParam('ret') == 'pending') { @@ -36,4 +49,43 @@ public function execute() return $resultRedirect->setPath('review/*/edit/', ['id' => $reviewId]); } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + return true; + } + + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; + } + + if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { + $this->messageManager->addErrorMessage( + __('Sorry, You have not permission to do this. The Review is not in Pending status.') + ); + + return false; + } + + return true; + } + + /** + * Returns requested model. + * + * @return Review + */ + private function getModel(): Review + { + if (!$this->model) { + $this->model = $this->reviewFactory->create() + ->load($this->getRequest()->getParam('id', false)); + } + + return $this->model; + } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php index 7d922f30cd98..c037c1a93bbe 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php @@ -8,10 +8,21 @@ use Magento\Framework\App\Action\HttpGetActionInterface as HttpGetActionInterface; use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Controller\ResultFactory; +use Magento\Review\Model\Review; +/** + * Edit action. + */ class Edit extends ProductController implements HttpGetActionInterface { /** + * @var Review + */ + private $review; + + /** + * Execute action. + * * @return \Magento\Backend\Model\View\Result\Page */ public function execute() @@ -24,4 +35,43 @@ public function execute() $resultPage->addContent($resultPage->getLayout()->createBlock(\Magento\Review\Block\Adminhtml\Edit::class)); return $resultPage; } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + return true; + } + + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; + } + + if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { + $this->messageManager->addErrorMessage( + __('Sorry, You have not permission to do this. The Review is not in Pending status.') + ); + + return false; + } + + return true; + } + + /** + * Returns requested model. + * + * @return Review + */ + private function getModel(): Review + { + if (!$this->review) { + $this->review = $this->reviewFactory->create() + ->load($this->getRequest()->getParam('id', false)); + } + + return $this->review; + } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php index c79254000023..bbde9dc11aca 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php @@ -5,13 +5,54 @@ */ namespace Magento\Review\Controller\Adminhtml\Product; +use Magento\Backend\App\Action\Context; +use Magento\Framework\Registry; use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Controller\ResultFactory; +use Magento\Review\Model\RatingFactory; +use Magento\Review\Model\Review; +use Magento\Review\Model\ResourceModel\Review\Collection; +use Magento\Review\Model\ResourceModel\Review\CollectionFactory; +use Magento\Review\Model\ReviewFactory; +use Magento\Framework\App\Action\HttpPostActionInterface; -class MassDelete extends ProductController +/** + * Mass Delete action. + */ +class MassDelete extends ProductController implements HttpPostActionInterface { /** + * @var Collection + */ + private $collection; + + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * @param Context $context + * @param Registry $coreRegistry + * @param ReviewFactory $reviewFactory + * @param RatingFactory $ratingFactory + * @param CollectionFactory $collectionFactory + */ + public function __construct( + Context $context, + Registry $coreRegistry, + ReviewFactory $reviewFactory, + RatingFactory $ratingFactory, + CollectionFactory $collectionFactory + ) { + parent::__construct($context, $coreRegistry, $reviewFactory, $ratingFactory); + $this->collectionFactory = $collectionFactory; + } + + /** + * Execute action. + * * @return \Magento\Backend\Model\View\Result\Redirect */ public function execute() @@ -21,8 +62,7 @@ public function execute() $this->messageManager->addError(__('Please select review(s).')); } else { try { - foreach ($reviewsIds as $reviewId) { - $model = $this->reviewFactory->create()->load($reviewId); + foreach ($this->getCollection() as $model) { $model->delete(); } $this->messageManager->addSuccess( @@ -39,4 +79,54 @@ public function execute() $resultRedirect->setPath('review/*/' . $this->getRequest()->getParam('ret', 'index')); return $resultRedirect; } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + return true; + } + + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; + } + + foreach ($this->getCollection() as $model) { + if ($model->getStatusId() != Review::STATUS_PENDING) { + $this->messageManager->addErrorMessage( + __( + 'Sorry, You have not permission to do this.' + . ' One or more of the reviews are not in Pending Status.' + ) + ); + + return false; + } + } + + return true; + } + + /** + * Returns requested collection. + * + * @return Collection + */ + private function getCollection(): Collection + { + if (!$this->collection) { + $collection = $this->collectionFactory->create(); + $collection->addFieldToFilter( + 'main_table.' . $collection->getResource() + ->getIdFieldName(), + $this->getRequest()->getParam('reviews') + ); + + $this->collection = $collection; + } + + return $this->collection; + } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php index 2769a35ba9a4..ea735263f1a3 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php @@ -5,13 +5,54 @@ */ namespace Magento\Review\Controller\Adminhtml\Product; +use Magento\Backend\App\Action\Context; +use Magento\Framework\Registry; use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Controller\ResultFactory; +use Magento\Review\Model\RatingFactory; +use Magento\Review\Model\Review; +use Magento\Review\Model\ResourceModel\Review\Collection; +use Magento\Review\Model\ResourceModel\Review\CollectionFactory; +use Magento\Review\Model\ReviewFactory; +use Magento\Framework\App\Action\HttpPostActionInterface; -class MassUpdateStatus extends ProductController +/** + * Mass Update Status action. + */ +class MassUpdateStatus extends ProductController implements HttpPostActionInterface { /** + * @var Collection + */ + private $collection; + + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * @param Context $context + * @param Registry $coreRegistry + * @param ReviewFactory $reviewFactory + * @param RatingFactory $ratingFactory + * @param CollectionFactory $collectionFactory + */ + public function __construct( + Context $context, + Registry $coreRegistry, + ReviewFactory $reviewFactory, + RatingFactory $ratingFactory, + CollectionFactory $collectionFactory + ) { + parent::__construct($context, $coreRegistry, $reviewFactory, $ratingFactory); + $this->collectionFactory = $collectionFactory; + } + + /** + * Execute action. + * * @return \Magento\Backend\Model\View\Result\Redirect */ public function execute() @@ -22,8 +63,7 @@ public function execute() } else { try { $status = $this->getRequest()->getParam('status'); - foreach ($reviewsIds as $reviewId) { - $model = $this->reviewFactory->create()->load($reviewId); + foreach ($this->getCollection() as $model) { $model->setStatusId($status)->save()->aggregate(); } $this->messageManager->addSuccess( @@ -43,4 +83,55 @@ public function execute() $resultRedirect->setPath('review/*/' . $this->getRequest()->getParam('ret', 'index')); return $resultRedirect; } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; + } + + if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + return true; + } + + foreach ($this->getCollection() as $model) { + if ($model->getStatusId() != Review::STATUS_PENDING) { + $this->messageManager->addErrorMessage( + __( + 'Sorry, You have not permission to do this.' + . ' One or more of the reviews are not in Pending Status.' + ) + ); + + + return false; + } + } + + return true; + } + + /** + * Returns requested collection. + * + * @return Collection + */ + private function getCollection(): Collection + { + if (!$this->collection) { + $collection = $this->collectionFactory->create(); + $collection->addFieldToFilter( + 'main_table.' . $collection->getResource() + ->getIdFieldName(), + $this->getRequest()->getParam('reviews') + ); + + $this->collection = $collection; + } + + return $this->collection; + } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php index 75eaaaeeef24..51a55f26cb46 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php @@ -7,10 +7,16 @@ use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\App\Action\HttpGetActionInterface; -class Pending extends ProductController +/** + * Pending reviews grid. + */ +class Pending extends ProductController implements HttpGetActionInterface { /** + * Execute action. + * * @return \Magento\Framework\Controller\ResultInterface */ public function execute() @@ -30,4 +36,13 @@ public function execute() $resultPage->addContent($resultPage->getLayout()->createBlock(\Magento\Review\Block\Adminhtml\Main::class)); return $resultPage; } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + return $this->_authorization->isAllowed('Magento_Review::reviews_all') + || $this->_authorization->isAllowed('Magento_Review::pending'); + } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php index 017fbc95a8b9..f65e97333ed5 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php @@ -12,8 +12,13 @@ use Magento\Review\Model\RatingFactory; use Magento\Framework\View\LayoutFactory; use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\App\Request\Http; +use Magento\Framework\App\Action\HttpGetActionInterface; -class ReviewGrid extends ProductController +/** + * Review grid. + */ +class ReviewGrid extends ProductController implements HttpGetActionInterface { /** * @var \Magento\Framework\View\LayoutFactory @@ -39,6 +44,8 @@ public function __construct( } /** + * Execute action. + * * @return \Magento\Framework\Controller\Result\Raw */ public function execute() @@ -49,4 +56,24 @@ public function execute() $resultRaw->setContents($layout->createBlock(\Magento\Review\Block\Adminhtml\Grid::class)->toHtml()); return $resultRaw; } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + return true; + } + + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; + } + + if ($this->getRequest() instanceof Http) { + return $this->getRequest()->getBeforeForwardInfo('action_name') == 'pending'; + } + + return false; + } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php index d9498580c39b..5af5a2077ec7 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php @@ -9,12 +9,18 @@ use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Controller\ResultFactory; use Magento\Framework\Exception\LocalizedException; +use Magento\Review\Model\Review; /** * Save Review action. */ class Save extends ProductController implements HttpPostActionInterface { + /** + * @var Review + */ + private $review; + /** * Save Review action. * @@ -26,7 +32,7 @@ public function execute() /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); if (($data = $this->getRequest()->getPostValue()) && ($reviewId = $this->getRequest()->getParam('id'))) { - $review = $this->reviewFactory->create()->load($reviewId); + $review = $this->getModel(); if (!$review->getId()) { $this->messageManager->addError(__('The review was removed by another user or does not exist.')); } else { @@ -67,7 +73,14 @@ public function execute() $nextId = (int)$this->getRequest()->getParam('next_item'); if ($nextId) { - $resultRedirect->setPath('review/*/edit', ['id' => $nextId]); + $resultRedirect->setPath( + 'review/*/edit', + [ + 'id' => $nextId, + 'ret' => $this->getRequest() + ->getParam('ret'), + ] + ); } elseif ($this->getRequest()->getParam('ret') == 'pending') { $resultRedirect->setPath('review/*/pending'); } else { @@ -86,4 +99,43 @@ public function execute() $resultRedirect->setPath('review/*/'); return $resultRedirect; } + + /** + * @inheritdoc + */ + protected function _isAllowed() + { + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; + } + + if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + return true; + } + + if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { + $this->messageManager->addErrorMessage( + __('Sorry, You have not permission to do this. The Review is not in Pending status.') + ); + + return false; + } + + return true; + } + + /** + * Returns requested model. + * + * @return Review + */ + private function getModel(): Review + { + if (!$this->review) { + $this->review = $this->reviewFactory->create() + ->load($this->getRequest()->getParam('id', false)); + } + + return $this->review; + } } diff --git a/app/code/Magento/Review/i18n/en_US.csv b/app/code/Magento/Review/i18n/en_US.csv index b3ea21dfcae9..c597f0ae70f0 100644 --- a/app/code/Magento/Review/i18n/en_US.csv +++ b/app/code/Magento/Review/i18n/en_US.csv @@ -135,3 +135,5 @@ Inactive,Inactive "Please select one of each of the ratings above.","Please select one of each of the ratings above." star,star stars,stars +"Sorry, You have not permission to do this. One or more of the reviews are not in Pending Status.","Sorry, You have not permission to do this. One or more of the reviews are not in Pending Status." +"Sorry, You have not permission to do this. The Review is not in Pending status.","Sorry, You have not permission to do this. The Review is not in Pending status." diff --git a/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php new file mode 100644 index 000000000000..4b2bc459c7e2 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php @@ -0,0 +1,91 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\Review\Controller\Adminhtml\Product; + +use Magento\Review\Model\Review; +use Magento\TestFramework\TestCase\AbstractBackendController; +use Magento\Framework\Acl\Builder; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Framework\UrlInterface; +use Magento\Review\Model\ResourceModel\Review\CollectionFactory; + +/** + * Test Edit action. + * + * @magentoAppArea adminhtml + */ +class EditTest extends AbstractBackendController +{ + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * @var Builder + */ + private $aclBuilder; + + /** + * @var UrlInterface + */ + private $urlBuilder; + + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * @inheritDoc + */ + protected function setUp() + { + parent::setUp(); + + $this->objectManager = Bootstrap::getObjectManager(); + $this->aclBuilder = $this->objectManager->get(Builder::class); + $this->urlBuilder = $this->objectManager->get(UrlInterface::class); + $this->collectionFactory = $this->objectManager->get(CollectionFactory::class); + $this->aclBuilder->resetRuntimeAcl(); + } + + /** + * Tests Edit action without reviews_all resource when manipulating Pending review. + * + * @return void + * @magentoDataFixture Magento/Review/_files/reviews.php + */ + public function testAclHasAccess(): void + { + $collection = $this->collectionFactory->create(); + $collection->addFilter('detail.nickname', 'Nickname'); + /** @var Review $review */ + $review = $collection->getItemByColumnValue('status_id', Review::STATUS_PENDING); + + // Exclude resource from ACL. + $this->aclBuilder->getAcl()->deny(null, 'Magento_Review::reviews_all'); + $this->uri = 'backend/review/product/edit/id/' . $review->getId(); + + parent::testAclHasAccess(); + } + + /** + * Tests Edit action without pending and reviews_all resources. + * + * @return void + */ + public function testAclNoAccess(): void + { + // Exclude resource from ACL. + $this->resource = ['Magento_Review::reviews_all', 'Magento_Review::pending']; + $this->uri = 'backend/review/product/edit/id/' . 'doesnt matter'; + + parent::testAclNoAccess(); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php new file mode 100644 index 000000000000..6242f1812c1c --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php @@ -0,0 +1,93 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\Review\Controller\Adminhtml\Product; + +use Magento\Review\Model\Review; +use Magento\TestFramework\TestCase\AbstractBackendController; +use Magento\Framework\Acl\Builder; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Framework\UrlInterface; +use Magento\Review\Model\ResourceModel\Review\CollectionFactory; +use Zend\Http\Request; + +/** + * Test Mass Update action. + * + * @magentoAppArea adminhtml + */ +class MassUpdateTest extends AbstractBackendController +{ + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * @var Builder + */ + private $aclBuilder; + + /** + * @var UrlInterface + */ + private $urlBuilder; + + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * @inheritDoc + */ + protected function setUp() + { + parent::setUp(); + + $this->objectManager = Bootstrap::getObjectManager(); + $this->aclBuilder = $this->objectManager->get(Builder::class); + $this->urlBuilder = $this->objectManager->get(UrlInterface::class); + $this->collectionFactory = $this->objectManager->get(CollectionFactory::class); + $this->aclBuilder->resetRuntimeAcl(); + $this->httpMethod = Request::METHOD_POST; + $this->uri = 'backend/review/product/massUpdateStatus'; + } + + /** + * Tests Mass Update action without reviews_all resource when manipulating Pending reviews. + * + * @return void + * @magentoDataFixture Magento/Review/_files/reviews.php + */ + public function testAclHasAccess(): void + { + $collection = $this->collectionFactory->create(); + $collection->addFilter('detail.nickname', 'Nickname'); + /** @var Review $review */ + $review = $collection->getItemByColumnValue('status_id', Review::STATUS_PENDING); + + // Exclude resource from ACL. + $this->aclBuilder->getAcl()->deny(null, 'Magento_Review::reviews_all'); + $this->getRequest()->setPostValue(['reviews' => $review->getId()]); + + parent::testAclHasAccess(); + } + + /** + * Tests Mass Update action without pending and reviews_all resources. + * + * @return void + */ + public function testAclNoAccess(): void + { + // Exclude resource from ACL. + $this->resource = ['Magento_Review::reviews_all', 'Magento_Review::pending']; + + parent::testAclNoAccess(); + } +} From 92adfeb2ebf9e2d27dc715ef4dcad8deddd2a4ad Mon Sep 17 00:00:00 2001 From: eduard13 <e.chitoraga@atwix.com> Date: Tue, 18 Jun 2019 11:54:52 +0300 Subject: [PATCH 150/209] Removing the always calling on closeModal --- app/code/Magento/Ui/view/base/web/js/modal/alert.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js index 07b7230bd126..b63294e3d875 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js @@ -51,7 +51,6 @@ define([ * Close modal window. */ closeModal: function () { - this.options.actions.always(); this.element.bind('alertclosed', _.bind(this._remove, this)); return this._super(); From 34f8da1f405a9c64616baa7c09ccade6c4399fec Mon Sep 17 00:00:00 2001 From: Serhiy Yelahin <serhiy.yelahin@transoftgroup.com> Date: Tue, 18 Jun 2019 13:26:11 +0300 Subject: [PATCH 151/209] MC-17505: Customer address attribute Phone validation issue --- app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php index 331d1e6216ae..6cda134c433c 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php @@ -135,6 +135,7 @@ public function alphanumDataProvider(): array ['QazWsx12345', [ __('"%1" length must be equal or less than %2 characters.', 'Test', 10)] ], + [' 12345 ', true], ]; } From 35242dadd5f36bff04652b03dec03d9c0e321aff Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Tue, 18 Jun 2019 13:32:29 +0300 Subject: [PATCH 152/209] MAGETWO-99591: Restricted admin cannot edit reviews from pending reviews grid --- .../Review/Controller/Adminhtml/Product/MassUpdateStatus.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php index ea735263f1a3..036a5284c59f 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php @@ -106,7 +106,6 @@ protected function _isAllowed() ) ); - return false; } } From 2c91e5a431fc3fe6aab36b29205ec2e487993f96 Mon Sep 17 00:00:00 2001 From: Oleksii Lisovyi <olexii.lisovyi@ven.com> Date: Tue, 2 Apr 2019 16:04:45 +0300 Subject: [PATCH 153/209] Framework: remove checking on dev packages requirements --- .../Composer/ComposerInformationTest.php | 4 +- .../_files/testFromClone/composer.lock | 9556 +++++-- .../testFromCreateProject/composer.lock | 20754 +++++++++++---- .../_files/testSkeleton/composer.lock | 20809 +++++++++++++--- .../Composer/ComposerInformation.php | 7 +- 5 files changed, 40750 insertions(+), 10380 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php b/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php index 3c1d77ac9e75..b1aee3ace528 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php @@ -81,7 +81,7 @@ public function testGetRequiredPhpVersion($composerDir) ['composerFactory' => $this->composerFactory] ); - $this->assertEquals("~5.5.0|~5.6.0|~7.0.0", $composerInfo->getRequiredPhpVersion()); + $this->assertEquals("~7.1.3||~7.2.0", $composerInfo->getRequiredPhpVersion()); } /** @@ -92,7 +92,7 @@ public function testGetRequiredPhpVersion($composerDir) public function testGetRequiredExtensions($composerDir) { $this->setupDirectory($composerDir); - $expectedExtensions = ['ctype', 'gd', 'spl', 'dom', 'simplexml', 'mcrypt', 'hash', 'curl', 'iconv', 'intl']; + $expectedExtensions = ['ctype', 'gd', 'spl', 'dom', 'simplexml', 'hash', 'curl', 'iconv', 'intl']; /** @var \Magento\Framework\Composer\ComposerInformation $composerInfo */ $composerInfo = $this->objectManager->create( diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.lock b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.lock index c2df6e0637e1..094f899a2605 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.lock +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.lock @@ -1,39 +1,300 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "68035e485f35f7660cc3e736d3f8fde2", + "content-hash": "60007664938710edf52eadddd7551867", "packages": [ + { + "name": "braintree/braintree_php", + "version": "3.35.0", + "source": { + "type": "git", + "url": "https://github.com/braintree/braintree_php.git", + "reference": "6c4388199ce379432804a5c18b88585157ef2ed7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/6c4388199ce379432804a5c18b88585157ef2ed7", + "reference": "6c4388199ce379432804a5c18b88585157ef2ed7", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-dom": "*", + "ext-hash": "*", + "ext-openssl": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "autoload": { + "psr-0": { + "Braintree": "lib/" + }, + "psr-4": { + "Braintree\\": "lib/Braintree" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Braintree", + "homepage": "https://www.braintreepayments.com" + } + ], + "description": "Braintree PHP Client Library", + "time": "2018-07-26T14:37:38+00:00" + }, + { + "name": "colinmollenhour/cache-backend-file", + "version": "v1.4.4", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_File.git", + "reference": "184171cc79933a828c3f9b1a1054724cea22a216" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_File/zipball/184171cc79933a828c3f9b1a1054724cea22a216", + "reference": "184171cc79933a828c3f9b1a1054724cea22a216", + "shasum": "" + }, + "type": "magento-module", + "autoload": { + "classmap": [ + "File.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "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": "2018-04-05T15:28:43+00:00" + }, + { + "name": "colinmollenhour/cache-backend-redis", + "version": "1.10.6", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", + "reference": "cc941a5f4cc017e11d3eab9061811ba9583ed6bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/cc941a5f4cc017e11d3eab9061811ba9583ed6bf", + "reference": "cc941a5f4cc017e11d3eab9061811ba9583ed6bf", + "shasum": "" + }, + "require": { + "magento-hackathon/magento-composer-installer": "*" + }, + "type": "magento-module", + "autoload": { + "classmap": [ + "Cm/Cache/Backend/Redis.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "description": "Zend_Cache backend using Redis with full support for tags.", + "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", + "time": "2018-09-24T16:02:07+00:00" + }, + { + "name": "colinmollenhour/credis", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/credis.git", + "reference": "8ab6db707c821055f9856b8cf76d5f44beb6fd8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/8ab6db707c821055f9856b8cf76d5f44beb6fd8a", + "reference": "8ab6db707c821055f9856b8cf76d5f44beb6fd8a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "Client.php", + "Cluster.php", + "Sentinel.php", + "Module.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Colin Mollenhour", + "email": "colin@mollenhour.com" + } + ], + "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": "2018-05-07T14:45:04+00:00" + }, + { + "name": "colinmollenhour/php-redis-session-abstract", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/php-redis-session-abstract.git", + "reference": "4cb15d557f58f45ad257cbcce3c12511e6deb5bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinmollenhour/php-redis-session-abstract/zipball/4cb15d557f58f45ad257cbcce3c12511e6deb5bc", + "reference": "4cb15d557f58f45ad257cbcce3c12511e6deb5bc", + "shasum": "" + }, + "require": { + "colinmollenhour/credis": "~1.6", + "php": "~5.5.0|~5.6.0|~7.0.0|~7.1.0|~7.2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Cm\\RedisSession\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "description": "A Redis-based session handler with optimistic locking", + "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", + "time": "2018-03-29T15:54:15+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2019-01-28T09:30:10+00:00" + }, { "name": "composer/composer", - "version": "1.0.0-alpha9", + "version": "1.8.4", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24" + "reference": "bc364c2480c17941e2135cfc568fa41794392534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/eb1ce550ca51134ee619ad3e37f5a0b7e980dd24", - "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24", + "url": "https://api.github.com/repos/composer/composer/zipball/bc364c2480c17941e2135cfc568fa41794392534", + "reference": "bc364c2480c17941e2135cfc568fa41794392534", "shasum": "" }, "require": { - "justinrainbow/json-schema": "~1.1", - "php": ">=5.3.2", - "seld/jsonlint": "~1.0", - "symfony/console": "~2.3", - "symfony/finder": "~2.2", - "symfony/process": "~2.1" + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic" + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" }, "bin": [ "bin/composer" @@ -41,12 +302,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.8-dev" } }, "autoload": { - "psr-0": { - "Composer": "src/" + "psr-4": { + "Composer\\": "src/Composer" } }, "notification-url": "https://packagist.org/downloads/", @@ -66,253 +327,5746 @@ } ], "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", - "homepage": "http://getcomposer.org/", + "homepage": "https://getcomposer.org/", "keywords": [ "autoload", "dependency", "package" ], - "time": "2014-12-07 17:15:20" + "time": "2019-02-11T09:52:10+00:00" }, { - "name": "justinrainbow/json-schema", - "version": "1.4.4", + "name": "composer/semver", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "8dc9b9d85ab639ca60ab4608b34c1279d6ae7bce" + "url": "https://github.com/composer/semver.git", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8dc9b9d85ab639ca60ab4608b34c1279d6ae7bce", - "reference": "8dc9b9d85ab639ca60ab4608b34c1279d6ae7bce", + "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^5.3.2 || ^7.0" }, "require-dev": { - "json-schema/json-schema-test-suite": "1.1.0", - "phpdocumentor/phpdocumentor": "~2", - "phpunit/phpunit": "~3.7" + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, - "bin": [ - "bin/validate-json" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-0": { - "JsonSchema": "src/" + "psr-4": { + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "json", - "schema" + "semantic", + "semver", + "validation", + "versioning" ], - "time": "2015-07-14 16:29:50" + "time": "2016-08-30T16:08:34+00:00" }, { - "name": "magento/magento-composer-installer", - "version": "0.1.4", + "name": "composer/spdx-licenses", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/magento/magento-composer-installer.git", - "reference": "7f03451f71e55d52c2bb07325d56a4e6df322f30" + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "7a9556b22bd9d4df7cad89876b00af58ef20d3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento-composer-installer/zipball/7f03451f71e55d52c2bb07325d56a4e6df322f30", - "reference": "7f03451f71e55d52c2bb07325d56a4e6df322f30", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7a9556b22bd9d4df7cad89876b00af58ef20d3a2", + "reference": "7a9556b22bd9d4df7cad89876b00af58ef20d3a2", "shasum": "" }, "require": { - "composer-plugin-api": "1.0.0" + "php": "^5.3.2 || ^7.0" }, "require-dev": { - "composer/composer": "*@dev", - "firegento/phpcs": "dev-patch-1", - "mikey179/vfsstream": "*", - "phpunit/phpunit": "*", - "phpunit/phpunit-mock-objects": "dev-master", - "squizlabs/php_codesniffer": "1.4.7", - "symfony/process": "*" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, - "type": "composer-plugin", + "type": "library", "extra": { - "composer-command-registry": [ - "MagentoHackathon\\Composer\\Magento\\Command\\DeployCommand" - ], - "class": "MagentoHackathon\\Composer\\Magento\\Plugin" + "branch-alias": { + "dev-master": "1.x-dev" + } }, "autoload": { - "psr-0": { - "MagentoHackathon\\Composer\\Magento": "src/" + "psr-4": { + "Composer\\Spdx\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0" + "MIT" ], "authors": [ { - "name": "Vinai Kopp", - "email": "vinai@netzarbeiter.com" - }, - { - "name": "Daniel Fahlke aka Flyingmana", - "email": "flyingmana@googlemail.com" - }, - { - "name": "Jörg Weller", - "email": "weller@flagbit.de" - }, - { - "name": "Karl Spies", - "email": "karl.spies@gmx.net" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Tobias Vogt", - "email": "tobi@webguys.de" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "David Fuhr", - "email": "fuhr@flagbit.de" + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Composer installer for Magento modules", - "homepage": "https://github.com/magento/magento-composer-installer", + "description": "SPDX licenses list and validation library.", "keywords": [ - "composer-installer", - "magento" + "license", + "spdx", + "validator" ], - "time": "2015-03-05 21:40:30" + "time": "2018-11-01T09:45:54+00:00" }, { - "name": "magento/zendframework1", - "version": "1.12.10", + "name": "composer/xdebug-handler", + "version": "1.3.2", "source": { "type": "git", - "url": "https://github.com/magento/zf1.git", - "reference": "d1e5cd8c9f83229bcdd9bb485c3ce25259c77884" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "d17708133b6c276d6e42ef887a877866b909d892" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/zf1/zipball/d1e5cd8c9f83229bcdd9bb485c3ce25259c77884", - "reference": "d1e5cd8c9f83229bcdd9bb485c3ce25259c77884", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", + "reference": "d17708133b6c276d6e42ef887a877866b909d892", "shasum": "" }, "require": { - "php": ">=5.2.11" + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" }, "require-dev": { - "phpunit/dbunit": "1.3.*", - "phpunit/phpunit": "3.7.*" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", - "extra": { - "branch-alias": { + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-01-28T20:25:53+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "elasticsearch/elasticsearch", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/elastic/elasticsearch-php.git", + "reference": "b237a37b2cdf23a5a17fd3576cdea771394ad00d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/b237a37b2cdf23a5a17fd3576cdea771394ad00d", + "reference": "b237a37b2cdf23a5a17fd3576cdea771394ad00d", + "shasum": "" + }, + "require": { + "ext-json": ">=1.3.7", + "guzzlehttp/ringphp": "~1.0", + "php": "^7.0", + "psr/log": "~1.0" + }, + "require-dev": { + "cpliakas/git-wrapper": "~1.0", + "doctrine/inflector": "^1.1", + "mockery/mockery": "0.9.4", + "phpstan/phpstan-shim": "0.8.3", + "phpunit/phpunit": "6.3.0", + "squizlabs/php_codesniffer": "3.0.2", + "symfony/finder": "^2.8", + "symfony/yaml": "^2.8" + }, + "suggest": { + "ext-curl": "*", + "monolog/monolog": "Allows for client-level logging and tracing" + }, + "type": "library", + "autoload": { + "psr-4": { + "Elasticsearch\\": "src/Elasticsearch/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Zachary Tong" + } + ], + "description": "PHP Client for Elasticsearch", + "keywords": [ + "client", + "elasticsearch", + "search" + ], + "time": "2019-01-08T18:53:46+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "time": "2018-07-31T13:22:33+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-10-12T19:18:40+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.8", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2019-01-14T23:55:14+00:00" + }, + { + "name": "magento/composer", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/magento/composer.git", + "reference": "6fb9eb3dd72a5e70aa53983f132f8e1883e79978" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/composer/zipball/6fb9eb3dd72a5e70aa53983f132f8e1883e79978", + "reference": "6fb9eb3dd72a5e70aa53983f132f8e1883e79978", + "shasum": "" + }, + "require": { + "composer/composer": "^1.6", + "php": "~7.1.3|~7.2.0", + "symfony/console": "~4.0.0 || ~4.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~7.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Magento\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Magento composer library helps to instantiate Composer application and run composer commands.", + "time": "2018-06-29T18:46:51+00:00" + }, + { + "name": "magento/magento-composer-installer", + "version": "0.1.13", + "source": { + "type": "git", + "url": "https://github.com/magento/magento-composer-installer.git", + "reference": "8b6c32f53b4944a5d6656e86344cd0f9784709a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/magento-composer-installer/zipball/8b6c32f53b4944a5d6656e86344cd0f9784709a1", + "reference": "8b6c32f53b4944a5d6656e86344cd0f9784709a1", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0" + }, + "replace": { + "magento-hackathon/magento-composer-installer": "*" + }, + "require-dev": { + "composer/composer": "*@dev", + "firegento/phpcs": "dev-patch-1", + "mikey179/vfsstream": "*", + "phpunit/phpunit": "*", + "phpunit/phpunit-mock-objects": "dev-master", + "squizlabs/php_codesniffer": "1.4.7", + "symfony/process": "*" + }, + "type": "composer-plugin", + "extra": { + "composer-command-registry": [ + "MagentoHackathon\\Composer\\Magento\\Command\\DeployCommand" + ], + "class": "MagentoHackathon\\Composer\\Magento\\Plugin" + }, + "autoload": { + "psr-0": { + "MagentoHackathon\\Composer\\Magento": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Vinai Kopp", + "email": "vinai@netzarbeiter.com" + }, + { + "name": "Daniel Fahlke aka Flyingmana", + "email": "flyingmana@googlemail.com" + }, + { + "name": "Jörg Weller", + "email": "weller@flagbit.de" + }, + { + "name": "Karl Spies", + "email": "karl.spies@gmx.net" + }, + { + "name": "Tobias Vogt", + "email": "tobi@webguys.de" + }, + { + "name": "David Fuhr", + "email": "fuhr@flagbit.de" + } + ], + "description": "Composer installer for Magento modules", + "homepage": "https://github.com/magento/magento-composer-installer", + "keywords": [ + "composer-installer", + "magento" + ], + "time": "2017-12-29T16:45:24+00:00" + }, + { + "name": "magento/zendframework1", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/magento/zf1.git", + "reference": "4df018254c70b5b998b00a8cb1a30760f831ff0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/zf1/zipball/4df018254c70b5b998b00a8cb1a30760f831ff0d", + "reference": "4df018254c70b5b998b00a8cb1a30760f831ff0d", + "shasum": "" + }, + "require": { + "php": ">=5.2.11" + }, + "require-dev": { + "phpunit/dbunit": "1.3.*", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { "dev-master": "1.12.x-dev" } }, "autoload": { "psr-0": { - "Zend_": "library/" + "Zend_": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "library/" + ], + "license": [ + "BSD-3-Clause" + ], + "description": "Magento Zend Framework 1", + "homepage": "http://framework.zend.com/", + "keywords": [ + "ZF1", + "framework" + ], + "time": "2018-08-09T15:03:40+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.24.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2018-11-05T09:00:11+00:00" + }, + { + "name": "oyejorge/less.php", + "version": "v1.7.0.14", + "source": { + "type": "git", + "url": "https://github.com/oyejorge/less.php.git", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oyejorge/less.php/zipball/42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.24" + }, + "bin": [ + "bin/lessc" + ], + "type": "library", + "autoload": { + "psr-0": { + "Less": "lib/" + }, + "classmap": [ + "lessc.inc.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin Jantošovič", + "homepage": "https://github.com/Mordred" + }, + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + } + ], + "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", + "homepage": "http://lessphp.gpeasy.com", + "keywords": [ + "css", + "less", + "less.js", + "lesscss", + "php", + "stylesheet" + ], + "time": "2017-03-28T22:19:25+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "paragonie/sodium_compat", + "version": "v1.8.1", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "57bb5ef079d3724148da3d5c99e30695ab17afda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/57bb5ef079d3724148da3d5c99e30695ab17afda", + "reference": "57bb5ef079d3724148da3d5c99e30695ab17afda", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "time": "2019-01-03T21:00:55+00:00" + }, + { + "name": "pelago/emogrifier", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/emogrifier.git", + "reference": "8ee7fb5ad772915451ed3415c1992bd3697d4983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/8ee7fb5ad772915451ed3415c1992bd3697d4983", + "reference": "8ee7fb5ad772915451ed3415c1992bd3697d4983", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0", + "symfony/css-selector": "^3.4.0 || ^4.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2.0", + "phpmd/phpmd": "^2.6.0", + "phpunit/phpunit": "^4.8.0", + "squizlabs/php_codesniffer": "^3.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Pelago\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Reeve", + "email": "jreeve@pelagodesign.com" + }, + { + "name": "Cameron Brooks" + }, + { + "name": "Jaime Prado" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Zoli Szabó", + "email": "zoli.szabo+github@gmail.com" + }, + { + "name": "Jake Hotson", + "email": "jake@qzdesign.co.uk" + } + ], + "description": "Converts CSS styles into inline style attributes in your HTML code", + "homepage": "https://www.myintervals.com/emogrifier.php", + "keywords": [ + "css", + "email", + "pre-processing" + ], + "time": "2018-12-10T10:36:30+00:00" + }, + { + "name": "php-amqplib/php-amqplib", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/php-amqplib/php-amqplib.git", + "reference": "a8ba54bd35b973fc6861e4c2e105f71e9e95f43f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/a8ba54bd35b973fc6861e4c2e105f71e9e95f43f", + "reference": "a8ba54bd35b973fc6861e4c2e105f71e9e95f43f", + "shasum": "" + }, + "require": { + "ext-bcmath": "*", + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "replace": { + "videlalvaro/php-amqplib": "self.version" + }, + "require-dev": { + "phpdocumentor/phpdocumentor": "^2.9", + "phpunit/phpunit": "^4.8", + "scrutinizer/ocular": "^1.1", + "squizlabs/php_codesniffer": "^2.5" + }, + "suggest": { + "ext-sockets": "Use AMQPSocketConnection" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpAmqpLib\\": "PhpAmqpLib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Alvaro Videla", + "role": "Original Maintainer" + }, + { + "name": "John Kelly", + "email": "johnmkelly86@gmail.com", + "role": "Maintainer" + }, + { + "name": "Raúl Araya", + "email": "nubeiro@gmail.com", + "role": "Maintainer" + } + ], + "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.", + "homepage": "https://github.com/php-amqplib/php-amqplib/", + "keywords": [ + "message", + "queue", + "rabbitmq" + ], + "time": "2018-04-30T03:54:54+00:00" + }, + { + "name": "phpseclib/mcrypt_compat", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/mcrypt_compat.git", + "reference": "f74c7b1897b62f08f268184b8bb98d9d9ab723b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/mcrypt_compat/zipball/f74c7b1897b62f08f268184b8bb98d9d9ab723b0", + "reference": "f74c7b1897b62f08f268184b8bb98d9d9ab723b0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpseclib/phpseclib": ">=2.0.11 <3.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.7|^6.0" + }, + "suggest": { + "ext-openssl": "Will enable faster cryptographic operations" + }, + "type": "library", + "autoload": { + "files": [ + "lib/mcrypt.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "homepage": "http://phpseclib.sourceforge.net" + } + ], + "description": "PHP 7.1 polyfill for the mcrypt extension from PHP <= 7.0", + "keywords": [ + "cryptograpy", + "encryption", + "mcrypt" + ], + "time": "2018-08-22T03:11:43+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.14", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "8ebfcadbf30524aeb75b2c446bc2519d5b321478" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/8ebfcadbf30524aeb75b2c446bc2519d5b321478", + "reference": "8ebfcadbf30524aeb75b2c446bc2519d5b321478", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2019-01-27T19:37:29+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" + }, + { + "name": "ramsey/uuid", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2018-07-19T23:38:55+00:00" + }, + { + "name": "react/promise", + "version": "v2.7.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2019-01-07T21:25:54+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" + }, + { + "name": "symfony/console", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9e87c798f67dc9fceeb4f3d57847b52d945d1a02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9e87c798f67dc9fceeb4f3d57847b52d945d1a02", + "reference": "9e87c798f67dc9fceeb4f3d57847b52d945d1a02", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2019-01-25T14:34:37+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "48eddf66950fa57996e1be4a55916d65c10c604a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a", + "reference": "48eddf66950fa57996e1be4a55916d65c10c604a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T20:31:39+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "51be1b61dfe04d64a260223f2b81475fa8066b97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/51be1b61dfe04d64a260223f2b81475fa8066b97", + "reference": "51be1b61dfe04d64a260223f2b81475fa8066b97", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T18:35:49+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e16b9e471703b2c60b95f14d31c1239f68f11601", + "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2019-02-07T11:40:08+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/267b7002c1b70ea80db0833c3afe05f0fbde580a", + "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:42:05+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T13:07:52+00:00" + }, + { + "name": "symfony/process", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "72d838aafaa7c790330fe362b9cecec362c64629" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/72d838aafaa7c790330fe362b9cecec362c64629", + "reference": "72d838aafaa7c790330fe362b9cecec362c64629", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T19:07:26+00:00" + }, + { + "name": "tedivm/jshrink", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/tedious/JShrink.git", + "reference": "21254058dc3ce6aba6bef458cff4bfa25cf8b198" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tedious/JShrink/zipball/21254058dc3ce6aba6bef458cff4bfa25cf8b198", + "reference": "21254058dc3ce6aba6bef458cff4bfa25cf8b198", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.8", + "php-coveralls/php-coveralls": "^1.1.0", + "phpunit/phpunit": "^6" + }, + "type": "library", + "autoload": { + "psr-0": { + "JShrink": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Robert Hafner", + "email": "tedivm@tedivm.com" + } + ], + "description": "Javascript Minifier built in PHP", + "homepage": "http://github.com/tedious/JShrink", + "keywords": [ + "javascript", + "minifier" + ], + "time": "2018-09-16T00:02:51+00:00" + }, + { + "name": "true/punycode", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/true/php-punycode.git", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.7", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "TrueBV\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Renan Gonçalves", + "email": "renan.saddam@gmail.com" + } + ], + "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)", + "homepage": "https://github.com/true/php-punycode", + "keywords": [ + "idna", + "punycode" + ], + "time": "2016-11-16T10:37:54+00:00" + }, + { + "name": "tubalmartin/cssmin", + "version": "v4.1.1", + "source": { + "type": "git", + "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", + "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/3cbf557f4079d83a06f9c3ff9b957c022d7805cf", + "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.3.2" + }, + "require-dev": { + "cogpowered/finediff": "0.3.*", + "phpunit/phpunit": "4.8.*" + }, + "bin": [ + "cssmin" + ], + "type": "library", + "autoload": { + "psr-4": { + "tubalmartin\\CssMin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Túbal Martín", + "homepage": "http://tubalmartin.me/" + } + ], + "description": "A PHP port of the YUI CSS compressor", + "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", + "keywords": [ + "compress", + "compressor", + "css", + "cssmin", + "minify", + "yui" + ], + "time": "2018-01-15T15:26:51+00:00" + }, + { + "name": "webonyx/graphql-php", + "version": "v0.12.6", + "source": { + "type": "git", + "url": "https://github.com/webonyx/graphql-php.git", + "reference": "4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95", + "reference": "4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "psr/http-message": "^1.0", + "react/promise": "2.*" + }, + "suggest": { + "psr/http-message": "To use standard GraphQL server", + "react/promise": "To leverage async resolving on React PHP platform" + }, + "type": "library", + "autoload": { + "psr-4": { + "GraphQL\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP port of GraphQL reference implementation", + "homepage": "https://github.com/webonyx/graphql-php", + "keywords": [ + "api", + "graphql" + ], + "time": "2018-09-02T14:59:54+00:00" + }, + { + "name": "zendframework/zend-captcha", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-captcha.git", + "reference": "37e9b6a4f632a9399eecbf2e5e325ad89083f87b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-captcha/zipball/37e9b6a4f632a9399eecbf2e5e325ad89083f87b", + "reference": "37e9b6a4f632a9399eecbf2e5e325ad89083f87b", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-math": "^2.7 || ^3.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-session": "^2.8", + "zendframework/zend-text": "^2.6", + "zendframework/zend-validator": "^2.10.1", + "zendframework/zendservice-recaptcha": "^3.0" + }, + "suggest": { + "zendframework/zend-i18n-resources": "Translations of captcha messages", + "zendframework/zend-session": "Zend\\Session component", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Captcha\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Generate and validate CAPTCHAs using Figlets, images, ReCaptcha, and more", + "keywords": [ + "ZendFramework", + "captcha", + "zf" + ], + "time": "2018-04-24T17:24:10+00:00" + }, + { + "name": "zendframework/zend-code", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-code.git", + "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb", + "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb", + "shasum": "" + }, + "require": { + "php": "^7.1", + "zendframework/zend-eventmanager": "^2.6 || ^3.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "zendframework/zend-coding-standard": "^1.0.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "zendframework/zend-stdlib": "Zend\\Stdlib component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides facilities to generate arbitrary code using an object oriented interface", + "homepage": "https://github.com/zendframework/zend-code", + "keywords": [ + "code", + "zf2" + ], + "time": "2018-08-13T20:36:59+00:00" + }, + { + "name": "zendframework/zend-config", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.5", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" + ], + "time": "2016-02-04T23:01:10+00:00" + }, + { + "name": "zendframework/zend-console", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-console.git", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-console/zipball/e8aa08da83de3d265256c40ba45cd649115f0e18", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-filter": "^2.7.2", + "zendframework/zend-json": "^2.6 || ^3.0", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "zendframework/zend-filter": "To support DefaultRouteMatcher usage", + "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Console\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Build console applications using getopt syntax or routing, complete with prompts", + "keywords": [ + "ZendFramework", + "console", + "zf" + ], + "time": "2018-01-25T19:08:04+00:00" + }, + { + "name": "zendframework/zend-crypt", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-crypt.git", + "reference": "1b2f5600bf6262904167116fa67b58ab1457036d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-crypt/zipball/1b2f5600bf6262904167116fa67b58ab1457036d", + "reference": "1b2f5600bf6262904167116fa67b58ab1457036d", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0", + "zendframework/zend-math": "^2.6", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-mcrypt": "Required for most features of Zend\\Crypt" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Crypt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-crypt", + "keywords": [ + "crypt", + "zf2" + ], + "time": "2016-02-03T23:46:30+00:00" + }, + { + "name": "zendframework/zend-db", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-db.git", + "reference": "77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-db/zipball/77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e", + "reference": "77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "Zend\\EventManager component", + "zendframework/zend-hydrator": "Zend\\Hydrator component for using HydratingResultSets", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9-dev", + "dev-develop": "2.10-dev" + }, + "zf": { + "component": "Zend\\Db", + "config-provider": "Zend\\Db\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Db\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations", + "keywords": [ + "ZendFramework", + "db", + "zf" + ], + "time": "2019-02-25T11:37:45+00:00" + }, + { + "name": "zendframework/zend-di", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-di.git", + "reference": "1fd1ba85660b5a2718741b38639dc7c4c3194b37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-di/zipball/1fd1ba85660b5a2718741b38639dc7c4c3194b37", + "reference": "1fd1ba85660b5a2718741b38639dc7c4c3194b37", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-code": "^2.6 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Di\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-di", + "keywords": [ + "di", + "zf2" + ], + "time": "2016-04-25T20:58:11+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "1.8.6", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", + "zendframework/zend-coding-standard": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev", + "dev-develop": "1.9.x-dev", + "dev-release-2.0": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2018-09-05T19:29:37+00:00" + }, + { + "name": "zendframework/zend-escaper", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-escaper.git", + "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074", + "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "keywords": [ + "ZendFramework", + "escaper", + "zf" + ], + "time": "2018-04-25T15:48:53+00:00" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "2.6.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "d238c443220dce4b6396579c8ab2200ec25f9108" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/d238c443220dce4b6396579c8ab2200ec25f9108", + "reference": "d238c443220dce4b6396579c8ab2200ec25f9108", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7" + }, + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-release-2.6": "2.6-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "eventmanager", + "zf2" + ], + "time": "2017-12-12T17:48:56+00:00" + }, + { + "name": "zendframework/zend-feed", + "version": "2.10.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-feed.git", + "reference": "6641f4cf3f4586c63f83fd70b6d19966025c8888" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/6641f4cf3f4586c63f83fd70b6d19966025c8888", + "reference": "6641f4cf3f4586c63f83fd70b6d19966025c8888", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-escaper": "^2.5.2", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-message": "^1.0.1", + "zendframework/zend-cache": "^2.7.2", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-http": "^2.7", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Zend\\Feed\\Reader\\Http\\Psr7ResponseDecorator", + "zendframework/zend-cache": "Zend\\Cache component, for optionally caching feeds between requests", + "zendframework/zend-db": "Zend\\Db component, for use with PubSubHubbub", + "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for easily extending ExtensionManager implementations", + "zendframework/zend-validator": "Zend\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Feed\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides functionality for consuming RSS and Atom feeds", + "keywords": [ + "ZendFramework", + "feed", + "zf" + ], + "time": "2018-08-01T13:53:20+00:00" + }, + { + "name": "zendframework/zend-filter", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "1c3e6d02f9cd5f6c929c9859498f5efbe216e86f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/1c3e6d02f9cd5f6c929c9859498f5efbe216e86f", + "reference": "1c3e6d02f9cd5f6c929c9859498f5efbe216e86f", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "conflict": { + "zendframework/zend-validator": "<2.10.1" + }, + "require-dev": { + "pear/archive_tar": "^1.4.3", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-factory": "^1.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-crypt": "^3.2.1", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-uri": "^2.6" + }, + "suggest": { + "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters", + "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters", + "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality", + "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\Filter", + "config-provider": "Zend\\Filter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed data filters", + "keywords": [ + "ZendFramework", + "filter", + "zf" + ], + "time": "2018-12-17T16:00:04+00:00" + }, + { + "name": "zendframework/zend-form", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-form.git", + "reference": "c713a12ccbd43148b71c9339e171ca11e3f8a1da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-form/zipball/c713a12ccbd43148b71c9339e171ca11e3f8a1da", + "reference": "c713a12ccbd43148b71c9339e171ca11e3f8a1da", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0", + "zendframework/zend-inputfilter": "^2.8", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "phpunit/phpunit": "^5.7.23 || ^6.5.3", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-code": "^2.6 || ^3.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.6", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.2", + "zendframework/zendservice-recaptcha": "^3.0.0" + }, + "suggest": { + "zendframework/zend-captcha": "^2.7.1, required for using CAPTCHA form elements", + "zendframework/zend-code": "^2.6 || ^3.0, required to use zend-form annotations support", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, reuired for zend-form annotations support", + "zendframework/zend-i18n": "^2.6, required when using zend-form view helpers", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, required to use the form factories or provide services", + "zendframework/zend-view": "^2.6.2, required for using the zend-form view helpers", + "zendframework/zendservice-recaptcha": "in order to use the ReCaptcha form element" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.13.x-dev", + "dev-develop": "2.14.x-dev" + }, + "zf": { + "component": "Zend\\Form", + "config-provider": "Zend\\Form\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Form\\": "src/" + }, + "files": [ + "autoload/formElementManagerPolyfill.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Validate and display simple and complex forms, casting forms to business objects and vice versa", + "keywords": [ + "ZendFramework", + "form", + "zf" + ], + "time": "2018-12-11T22:51:29+00:00" + }, + { + "name": "zendframework/zend-http", + "version": "2.8.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-http.git", + "reference": "d160aedc096be230af0fe9c31151b2b33ad4e807" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/d160aedc096be230af0fe9c31151b2b33ad4e807", + "reference": "d160aedc096be230af0fe9c31151b2b33ad4e807", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-loader": "^2.5.1", + "zendframework/zend-stdlib": "^3.1 || ^2.7.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-validator": "^2.10.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^3.1 || ^2.6" + }, + "suggest": { + "paragonie/certainty": "For automated management of cacert.pem" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "keywords": [ + "ZendFramework", + "http", + "http client", + "zend", + "zf" + ], + "time": "2019-02-07T17:47:08+00:00" + }, + { + "name": "zendframework/zend-hydrator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-hydrator.git", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0@dev", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, to support aggregate hydrator usage", + "zendframework/zend-filter": "^2.6, to support naming strategy hydrator usage", + "zendframework/zend-serializer": "^2.6.1, to use the SerializableStrategy", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, to support hydrator plugin manager usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-release-1.0": "1.0-dev", + "dev-release-1.1": "1.1-dev", + "dev-master": "2.0-dev", + "dev-develop": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Hydrator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-hydrator", + "keywords": [ + "hydrator", + "zf2" + ], + "time": "2016-02-18T22:38:26+00:00" + }, + { + "name": "zendframework/zend-i18n", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "6d69af5a04e1a4de7250043cb1322f077a0cdb7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/6d69af5a04e1a4de7250043cb1322f077a0cdb7f", + "reference": "6d69af5a04e1a4de7250043cb1322f077a0cdb7f", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.3" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-i18n-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\I18n", + "config-provider": "Zend\\I18n\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provide translations for your application, and filter and validate internationalized values", + "keywords": [ + "ZendFramework", + "i18n", + "zf" + ], + "time": "2018-05-16T16:39:13+00:00" + }, + { + "name": "zendframework/zend-inputfilter", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-inputfilter.git", + "reference": "4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c", + "reference": "4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-filter": "^2.9.1", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.11" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-message": "^1.0", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "suggest": { + "psr/http-message-implementation": "PSR-7 is required if you wish to validate PSR-7 UploadedFileInterface payloads" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\InputFilter", + "config-provider": "Zend\\InputFilter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\InputFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files", + "keywords": [ + "ZendFramework", + "inputfilter", + "zf" + ], + "time": "2019-01-30T16:58:51+00:00" + }, + { + "name": "zendframework/zend-json", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28", + "reference": "4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-stdlib": "^2.5 || ^3.0", + "zendframework/zendxml": "^1.0.2" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component, required to use Zend\\Json\\Server", + "zendframework/zend-server": "Zend\\Server component, required to use Zend\\Json\\Server", + "zendframework/zend-stdlib": "Zend\\Stdlib component, for use with caching Zend\\Json\\Server responses", + "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://github.com/zendframework/zend-json", + "keywords": [ + "json", + "zf2" + ], + "time": "2016-02-04T21:20:26+00:00" + }, + { + "name": "zendframework/zend-loader", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-loader.git", + "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/78f11749ea340f6ca316bca5958eef80b38f9b6c", + "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Loader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Autoloading and plugin loading strategies", + "keywords": [ + "ZendFramework", + "loader", + "zf" + ], + "time": "2018-04-30T15:20:54+00:00" + }, + { + "name": "zendframework/zend-log", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-log.git", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-log/zipball/9cec3b092acb39963659c2f32441cccc56b3f430", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "psr/log": "^1.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-filter": "^2.5", + "zendframework/zend-mail": "^2.6.1", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "ext-mongo": "mongo extension to use Mongo writer", + "ext-mongodb": "mongodb extension to use MongoDB writer", + "zendframework/zend-console": "Zend\\Console component to use the RequestID log processor", + "zendframework/zend-db": "Zend\\Db component to use the database log writer", + "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML log formatter", + "zendframework/zend-mail": "Zend\\Mail component to use the email log writer", + "zendframework/zend-validator": "Zend\\Validator component to block invalid log messages" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Log", + "config-provider": "Zend\\Log\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Log\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "component for general purpose logging", + "homepage": "https://github.com/zendframework/zend-log", + "keywords": [ + "log", + "logging", + "zf2" + ], + "time": "2018-04-09T21:59:51+00:00" + }, + { + "name": "zendframework/zend-mail", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mail.git", + "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-mail/zipball/d7beb63d5f7144a21ac100072c453e63860cdab8", + "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": "^5.6 || ^7.0", + "true/punycode": "^2.1", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mime": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.10.2" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-crypt": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1" + }, + "suggest": { + "zendframework/zend-crypt": "Crammd5 support in SMTP Auth", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1 when using SMTP to deliver messages" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Mail", + "config-provider": "Zend\\Mail\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages", + "keywords": [ + "ZendFramework", + "mail", + "zf" + ], + "time": "2018-06-07T13:37:07+00:00" + }, + { + "name": "zendframework/zend-math", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-math.git", + "reference": "1abce074004dacac1a32cd54de94ad47ef960d38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-math/zipball/1abce074004dacac1a32cd54de94ad47ef960d38", + "reference": "1abce074004dacac1a32cd54de94ad47ef960d38", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "ircmaxell/random-lib": "~1.1", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-bcmath": "If using the bcmath functionality", + "ext-gmp": "If using the gmp functionality", + "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if Mcrypt extensions is unavailable" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-math", + "keywords": [ + "math", + "zf2" + ], + "time": "2018-12-04T15:34:17+00:00" + }, + { + "name": "zendframework/zend-mime", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mime.git", + "reference": "52ae5fa9f12845cae749271034a2d594f0e4c6f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-mime/zipball/52ae5fa9f12845cae749271034a2d594f0e4c6f2", + "reference": "52ae5fa9f12845cae749271034a2d594f0e4c6f2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.21 || ^6.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-mail": "^2.6" + }, + "suggest": { + "zendframework/zend-mail": "Zend\\Mail component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create and parse MIME messages and parts", + "homepage": "https://github.com/zendframework/zend-mime", + "keywords": [ + "ZendFramework", + "mime", + "zf" + ], + "time": "2018-05-14T19:02:50+00:00" + }, + { + "name": "zendframework/zend-modulemanager", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-modulemanager.git", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/394df6e12248ac430a312d4693f793ee7120baa6", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-config": "^3.1 || ^2.6", + "zendframework/zend-eventmanager": "^3.2 || ^2.6.3", + "zendframework/zend-stdlib": "^3.1 || ^2.7" + }, + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-console": "^2.6", + "zendframework/zend-di": "^2.6", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mvc": "^3.0 || ^2.7", + "zendframework/zend-servicemanager": "^3.0.3 || ^2.7.5" + }, + "suggest": { + "zendframework/zend-console": "Zend\\Console component", + "zendframework/zend-loader": "Zend\\Loader component if you are not using Composer autoloading for your modules", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ModuleManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Modular application system for zend-mvc applications", + "homepage": "https://github.com/zendframework/zend-modulemanager", + "keywords": [ + "ZendFramework", + "modulemanager", + "zf" + ], + "time": "2017-12-02T06:11:18+00:00" + }, + { + "name": "zendframework/zend-mvc", + "version": "2.7.15", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mvc.git", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-console": "^2.7", + "zendframework/zend-eventmanager": "^2.6.4 || ^3.0", + "zendframework/zend-form": "^2.11", + "zendframework/zend-hydrator": "^1.1 || ^2.4", + "zendframework/zend-psr7bridge": "^0.2", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7.5 || ^3.0" + }, + "replace": { + "zendframework/zend-router": "^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.8.36", + "sebastian/comparator": "^1.2.4", + "sebastian/version": "^1.0.4", + "zendframework/zend-authentication": "^2.6", + "zendframework/zend-cache": "^2.8", + "zendframework/zend-di": "^2.6", + "zendframework/zend-filter": "^2.8", + "zendframework/zend-http": "^2.8", + "zendframework/zend-i18n": "^2.8", + "zendframework/zend-inputfilter": "^2.8", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.3", + "zendframework/zend-modulemanager": "^2.8", + "zendframework/zend-serializer": "^2.8", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.7", + "zendframework/zend-uri": "^2.6", + "zendframework/zend-validator": "^2.10", + "zendframework/zend-view": "^2.9" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-di": "Zend\\Di component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", + "zendframework/zend-inputfilter": "Zend\\Inputfilter component", + "zendframework/zend-json": "Zend\\Json component", + "zendframework/zend-log": "Zend\\Log component", + "zendframework/zend-modulemanager": "Zend\\ModuleManager component", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager-di": "^1.0.1, if using zend-servicemanager v3 and requiring the zend-di integration", + "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-uri": "Zend\\Uri component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zend-view": "Zend\\View component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Zend\\Mvc\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-mvc", + "keywords": [ + "mvc", + "zf2" + ], + "time": "2018-05-03T13:13:41+00:00" + }, + { + "name": "zendframework/zend-psr7bridge", + "version": "0.2.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-psr7bridge.git", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-psr7bridge/zipball/86c0b53b0c6381391c4add4a93a56e51d5c74605", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "psr/http-message": "^1.0", + "zendframework/zend-diactoros": "^1.1", + "zendframework/zend-http": "^2.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.7", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Psr7Bridge\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-7 <-> Zend\\Http bridge", + "homepage": "https://github.com/zendframework/zend-psr7bridge", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2016-05-10T21:44:39+00:00" + }, + { + "name": "zendframework/zend-serializer", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "0172690db48d8935edaf625c4cba38b79719892c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/0172690db48d8935edaf625c4cba38b79719892c", + "reference": "0172690db48d8935edaf625c4cba38b79719892c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-json": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-math": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization", + "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\Serializer", + "config-provider": "Zend\\Serializer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "keywords": [ + "ZendFramework", + "serializer", + "zf" + ], + "time": "2018-05-14T18:45:18+00:00" + }, + { + "name": "zendframework/zend-server", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-server.git", + "reference": "23a2e9a5599c83c05da831cb7c649e8a7809595e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-server/zipball/23a2e9a5599c83c05da831cb7c649e8a7809595e", + "reference": "23a2e9a5599c83c05da831cb7c649e8a7809595e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-code": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.5 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create Reflection-based RPC servers", + "keywords": [ + "ZendFramework", + "server", + "zf" + ], + "time": "2018-04-30T22:21:28+00:00" + }, + { + "name": "zendframework/zend-servicemanager", + "version": "2.7.11", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "99ec9ed5d0f15aed9876433c74c2709eb933d4c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/99ec9ed5d0f15aed9876433c74c2709eb933d4c7", + "reference": "99ec9ed5d0f15aed9876433c74c2709eb933d4c7", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ], + "time": "2018-06-22T14:49:54+00:00" + }, + { + "name": "zendframework/zend-session", + "version": "2.8.5", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-session.git", + "reference": "2cfd90e1a2f6b066b9f908599251d8f64f07021b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-session/zipball/2cfd90e1a2f6b066b9f908599251d8f64f07021b", + "reference": "2cfd90e1a2f6b066b9f908599251d8f64f07021b", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "container-interop/container-interop": "^1.1", + "mongodb/mongodb": "^1.0.1", + "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0", + "phpunit/phpunit": "^5.7.5 || >=6.0.13 <6.5.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.7", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6" + }, + "suggest": { + "mongodb/mongodb": "If you want to use the MongoDB session save handler", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-db": "Zend\\Db component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "Zend\\Validator component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + }, + "zf": { + "component": "Zend\\Session", + "config-provider": "Zend\\Session\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Session\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "manage and preserve session data, a logical complement of cookie data, across multiple page requests by the same client", + "keywords": [ + "ZendFramework", + "session", + "zf" + ], + "time": "2018-02-22T16:33:54+00:00" + }, + { + "name": "zendframework/zend-soap", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-soap.git", + "reference": "af03c32f0db2b899b3df8cfe29aeb2b49857d284" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/af03c32f0db2b899b3df8cfe29aeb2b49857d284", + "reference": "af03c32f0db2b899b3df8cfe29aeb2b49857d284", + "shasum": "" + }, + "require": { + "ext-soap": "*", + "php": "^5.6 || ^7.0", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-uri": "^2.5.2" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.21 || ^6.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-http": "^2.5.4" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Soap\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-soap", + "keywords": [ + "soap", + "zf2" + ], + "time": "2018-01-29T17:51:26+00:00" + }, + { + "name": "zendframework/zend-stdlib", + "version": "2.7.7", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-hydrator": "~1.1" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-release-2.7": "2.7-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2016-04-12T21:17:31+00:00" + }, + { + "name": "zendframework/zend-text", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-text.git", + "reference": "ca987dd4594f5f9508771fccd82c89bc7fbb39ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-text/zipball/ca987dd4594f5f9508771fccd82c89bc7fbb39ac", + "reference": "ca987dd4594f5f9508771fccd82c89bc7fbb39ac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Text\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create FIGlets and text-based tables", + "keywords": [ + "ZendFramework", + "text", + "zf" + ], + "time": "2018-04-30T14:55:10+00:00" + }, + { + "name": "zendframework/zend-uri", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-uri.git", + "reference": "b2785cd38fe379a784645449db86f21b7739b1ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/b2785cd38fe379a784645449db86f21b7739b1ee", + "reference": "b2785cd38fe379a784645449db86f21b7739b1ee", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-validator": "^2.10" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "keywords": [ + "ZendFramework", + "uri", + "zf" + ], + "time": "2019-02-27T21:39:04+00:00" + }, + { + "name": "zendframework/zend-validator", + "version": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-validator.git", + "reference": "3c28dfe4e5951ba38059cea895244d9d206190b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/3c28dfe4e5951ba38059cea895244d9d206190b3", + "reference": "3c28dfe4e5951ba38059cea895244d9d206190b3", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.6 || ^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "psr/http-message": "^1.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-db": "^2.7", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-math": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators", + "zendframework/zend-db": "Zend\\Db component, required by the (No)RecordExists validator", + "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", + "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages", + "zendframework/zend-i18n-resources": "Translations of validator messages", + "zendframework/zend-math": "Zend\\Math component, required by the Csrf validator", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "zendframework/zend-session": "Zend\\Session component, ^2.8; required by the Csrf validator", + "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.11.x-dev", + "dev-develop": "2.12.x-dev" + }, + "zf": { + "component": "Zend\\Validator", + "config-provider": "Zend\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed validators", + "homepage": "https://github.com/zendframework/zend-validator", + "keywords": [ + "validator", + "zf2" + ], + "time": "2019-01-29T22:26:39+00:00" + }, + { + "name": "zendframework/zend-view", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-view.git", + "reference": "c1a3f2043fb75b5983ab9adfc369ae396601be7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-view/zipball/c1a3f2043fb75b5983ab9adfc369ae396601be7e", + "reference": "c1a3f2043fb75b5983ab9adfc369ae396601be7e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-authentication": "^2.5", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-console": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-feed": "^2.7", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-log": "^2.7", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-mvc": "^2.7.14 || ^3.0", + "zendframework/zend-navigation": "^2.5", + "zendframework/zend-paginator": "^2.5", + "zendframework/zend-permissions-acl": "^2.6", + "zendframework/zend-router": "^3.0.1", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component", + "zendframework/zend-escaper": "Zend\\Escaper component", + "zendframework/zend-feed": "Zend\\Feed component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-mvc-plugin-flashmessenger": "zend-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with zend-mvc versions 3 and up", + "zendframework/zend-navigation": "Zend\\Navigation component", + "zendframework/zend-paginator": "Zend\\Paginator component", + "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component" + }, + "bin": [ + "bin/templatemap_generator.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\View\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a system of helpers, output filters, and variable escaping", + "homepage": "https://github.com/zendframework/zend-view", + "keywords": [ + "view", + "zf2" + ], + "time": "2018-12-06T21:20:01+00:00" + } + ], + "packages-dev": [ + { + "name": "allure-framework/allure-codeception", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-codeception.git", + "reference": "9d31d781b3622b028f1f6210bc76ba88438bd518" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/allure-framework/allure-codeception/zipball/9d31d781b3622b028f1f6210bc76ba88438bd518", + "reference": "9d31d781b3622b028f1f6210bc76ba88438bd518", + "shasum": "" + }, + "require": { + "allure-framework/allure-php-api": "~1.1.0", + "codeception/codeception": "~2.1", + "php": ">=5.4.0", + "symfony/filesystem": ">=2.6", + "symfony/finder": ">=2.6" + }, + "type": "library", + "autoload": { + "psr-0": { + "Yandex": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "A Codeception adapter for Allure report.", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "attachments", + "cases", + "codeception", + "report", + "steps", + "testing" + ], + "time": "2018-12-18T19:47:23+00:00" + }, + { + "name": "allure-framework/allure-php-api", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-php-adapter-api.git", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/allure-framework/allure-php-adapter-api/zipball/a462a0da121681577033e13c123b6cc4e89cdc64", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64", + "shasum": "" + }, + "require": { + "jms/serializer": ">=0.16.0", + "moontoast/math": ">=1.1.0", + "php": ">=5.4.0", + "phpunit/phpunit": ">=4.0.0", + "ramsey/uuid": ">=3.0.0", + "symfony/http-foundation": ">=2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Yandex": [ + "src/", + "test/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "PHP API for Allure adapter", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "api", + "php", + "report" + ], + "time": "2016-12-07T12:15:46+00:00" + }, + { + "name": "allure-framework/allure-phpunit", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-phpunit.git", + "reference": "45504aeba41304cf155a898fa9ac1aae79f4a089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/allure-framework/allure-phpunit/zipball/45504aeba41304cf155a898fa9ac1aae79f4a089", + "reference": "45504aeba41304cf155a898fa9ac1aae79f4a089", + "shasum": "" + }, + "require": { + "allure-framework/allure-php-api": "~1.1.0", + "mikey179/vfsstream": "1.*", + "php": ">=7.0.0", + "phpunit/phpunit": ">=6.0.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Yandex": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "A PHPUnit adapter for Allure report.", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "attachments", + "cases", + "phpunit", + "report", + "steps", + "testing" + ], + "time": "2017-11-03T13:08:21+00:00" + }, + { + "name": "behat/gherkin", + "version": "v4.6.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2019-01-16T14:22:17+00:00" + }, + { + "name": "codeception/codeception", + "version": "2.4.5", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5fee32d5c82791548931cbc34806b4de6aa1abfc", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", + "codeception/stub": "^2.0", + "ext-json": "*", + "ext-mbstring": "*", + "facebook/webdriver": ">=1.1.3 <2.0", + "guzzlehttp/guzzle": ">=4.1.4 <7.0", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2018-08-01T07:21:49+00:00" + }, + { + "name": "codeception/phpunit-wrapper", + "version": "6.6.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c", + "reference": "d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c", + "shasum": "" + }, + "require": { + "phpunit/php-code-coverage": ">=4.0.4 <6.0", + "phpunit/phpunit": ">=6.5.13 <7.0", + "sebastian/comparator": ">=1.2.4 <3.0", + "sebastian/diff": ">=1.4 <4.0" + }, + "replace": { + "codeception/phpunit-wrapper": "*" + }, + "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src\\" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2019-02-26T20:47:39+00:00" + }, + { + "name": "codeception/stub", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "853657f988942f7afb69becf3fd0059f192c705a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", + "reference": "853657f988942f7afb69becf3fd0059f192c705a", + "shasum": "" + }, + "require": { + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2019-03-02T15:35:10+00:00" + }, + { + "name": "consolidation/annotated-command", + "version": "2.11.2", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/004af26391cd7d1cd04b0ac736dc1324d1b4f572", + "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572", + "shasum": "" + }, + "require": { + "consolidation/output-formatters": "^3.4", + "php": ">=5.4.5", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "time": "2019-02-02T02:29:53+00:00" + }, + { + "name": "consolidation/config", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "scenarios": { + "symfony4": { + "require-dev": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require-dev": { + "symfony/console": "^2.8", + "symfony/event-dispatcher": "^2.8", + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2019-03-03T19:37:04+00:00" + }, + { + "name": "consolidation/log", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "shasum": "" + }, + "require": { + "php": ">=5.4.5", + "psr/log": "^1.0", + "symfony/console": "^2.8|^3|^4" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2" + }, + "type": "library", + "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", + "time": "2019-01-01T17:30:51+00:00" + }, + { + "name": "consolidation/output-formatters", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19", + "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "g1a/composer-test-scenarios": "^2", + "phpunit/phpunit": "^5.7.27", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.7", + "symfony/console": "3.2.3", + "symfony/var-dumper": "^2.8|^3|^4", + "victorjonsson/markdowndocs": "^1.3" + }, + "suggest": { + "symfony/var-dumper": "For using the var_dump formatter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "time": "2018-10-19T22:35:38+00:00" + }, + { + "name": "consolidation/robo", + "version": "1.4.6", + "source": { + "type": "git", + "url": "https://github.com/consolidation/Robo.git", + "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3", + "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3", + "shasum": "" + }, + "require": { + "consolidation/annotated-command": "^2.10.2", + "consolidation/config": "^1.0.10", + "consolidation/log": "~1", + "consolidation/output-formatters": "^3.1.13", + "consolidation/self-update": "^1", + "grasmash/yaml-expander": "^1.3", + "league/container": "^2.2", + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "g1a/composer-test-scenarios": "^3", + "goaop/framework": "~2.1.2", + "goaop/parser-reflection": "^1.1.0", + "natxet/cssmin": "3.0.4", + "nikic/php-parser": "^3.1.5", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.4", + "php-coveralls/php-coveralls": "^1", + "phpunit/php-code-coverage": "~2|~4", + "squizlabs/php_codesniffer": "^2.8" + }, + "suggest": { + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "natxet/CssMin": "For minifying CSS files in taskMinify", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." + }, + "bin": [ + "robo" + ], + "type": "library", + "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "remove": [ + "goaop/framework" + ], + "config": { + "platform": { + "php": "5.5.9" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Robo\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "Modern task runner", + "time": "2019-02-17T05:32:27+00:00" + }, + { + "name": "consolidation/self-update", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/self-update.git", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/filesystem": "^2.5|^3|^4" + }, + "bin": [ + "scripts/release" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "SelfUpdate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + }, + { + "name": "Alexander Menk", + "email": "menk@mestrona.net" + } + ], + "description": "Provides a self:update command for Symfony Console applications.", + "time": "2018-10-28T01:52:03+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+00:00" + }, + { + "name": "doctrine/collections", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2017-07-22T10:37:32+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "library/" + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "epfremme/swagger-php", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/epfremmer/swagger-php.git", + "reference": "eee28a442b7e6220391ec953d3c9b936354f23bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/epfremmer/swagger-php/zipball/eee28a442b7e6220391ec953d3c9b936354f23bc", + "reference": "eee28a442b7e6220391ec953d3c9b936354f23bc", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.2", + "doctrine/collections": "^1.3", + "jms/serializer": "^1.1", + "php": ">=5.5", + "phpoption/phpoption": "^1.1", + "symfony/yaml": "^2.7|^3.1" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "~4.8|~5.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "package", + "autoload": { + "psr-4": { + "Epfremme\\Swagger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "Magento Zend Framework 1", - "homepage": "http://framework.zend.com/", + "authors": [ + { + "name": "Edward Pfremmer", + "email": "epfremme@nerdery.com" + } + ], + "description": "Library for parsing swagger documentation into PHP entities for use in testing and code generation", + "time": "2016-09-26T17:24:17+00:00" + }, + { + "name": "facebook/webdriver", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/facebook/php-webdriver.git", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "time": "2018-05-16T17:37:13+00:00" + }, + { + "name": "flow/jsonpath", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/FlowCommunications/JSONPath.git", + "reference": "f0222818d5c938e4ab668ab2e2c079bd51a27112" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlowCommunications/JSONPath/zipball/f0222818d5c938e4ab668ab2e2c079bd51a27112", + "reference": "f0222818d5c938e4ab668ab2e2c079bd51a27112", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "peekmo/jsonpath": "dev-master", + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Flow\\JSONPath": "src/", + "Flow\\JSONPath\\Test": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stephen Frank", + "email": "stephen@flowsa.com" + } + ], + "description": "JSONPath implementation for parsing, searching and flattening arrays", + "time": "2018-03-04T16:39:47+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.13.3", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "38d6f2e9be2aa80bf3c7365612af7f9eb9078719" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/38d6f2e9be2aa80bf3c7365612af7f9eb9078719", + "reference": "38d6f2e9be2aa80bf3c7365612af7f9eb9078719", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || >=7.0 <7.3", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6", + "symfony/event-dispatcher": "^3.0 || ^4.0", + "symfony/filesystem": "^3.0 || ^4.0", + "symfony/finder": "^3.0 || ^4.0", + "symfony/options-resolver": "^3.0 || ^4.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0", + "symfony/stopwatch": "^3.0 || ^4.0" + }, + "conflict": { + "hhvm": "*" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.0.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.0.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1", + "phpunitgoodpractices/traits": "^1.5.1", + "symfony/phpunit-bridge": "^4.0" + }, + "suggest": { + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "time": "2019-01-04T18:24:28+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "ZF1", - "framework" + "data", + "faker", + "fixtures" ], - "time": "2015-02-06 17:25:45" + "time": "2018-07-12T10:23:15+00:00" }, { - "name": "monolog/monolog", - "version": "1.11.0", + "name": "grasmash/expander", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "ec3961874c43840e96da3a8a1ed20d8c73d7e5aa" + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/ec3961874c43840e96da3a8a1ed20d8c73d7e5aa", - "reference": "ec3961874c43840e96da3a8a1ed20d8c73d7e5aa", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~3.7.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "videlalvaro/php-amqplib": "~2.4" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Grasmash\\Expander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -321,240 +6075,214 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Matthew Grasmick" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "time": "2014-09-30 13:30:58" + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" }, { - "name": "oyejorge/less.php", - "version": "v1.7.0.3", + "name": "grasmash/yaml-expander", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/oyejorge/less.php.git", - "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de" + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/oyejorge/less.php/zipball/6e08ecb07e6f6d9170c23e8744c58fdd822ad0de", - "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", "shasum": "" }, "require": { - "php": ">=5.2" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, - "bin": [ - "bin/lessc" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, "autoload": { - "psr-0": { - "Less": "lib/" - }, - "classmap": [ - "lessc.inc.php" - ] + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "Matt Agar", - "homepage": "https://github.com/agar" - }, - { - "name": "Martin Jantošovič", - "homepage": "https://github.com/Mordred" - }, - { - "name": "Josh Schmidt", - "homepage": "https://github.com/oyejorge" + "name": "Matthew Grasmick" } ], - "description": "PHP port of the Javascript version of LESS http://lesscss.org", - "homepage": "http://lessphp.gpeasy.com", - "keywords": [ - "css", - "less", - "less.js", - "lesscss", - "php", - "stylesheet" - ], - "time": "2015-03-10 18:12:59" + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" }, { - "name": "phpseclib/phpseclib", - "version": "0.3.10", + "name": "guzzlehttp/guzzle", + "version": "6.3.3", "source": { "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d15bba1edcc7c89e09cc74c5d961317a8b947bf4", - "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { - "php": ">=5.0.0" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~1.5" + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" }, "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", - "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3." + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.3-dev" + "dev-master": "6.3-dev" } }, "autoload": { - "psr-0": { - "Crypt": "phpseclib/", - "File": "phpseclib/", - "Math": "phpseclib/", - "Net": "phpseclib/", - "System": "phpseclib/" - }, "files": [ - "phpseclib/Crypt/Random.php" - ] + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "phpseclib/" - ], "license": [ "MIT" ], "authors": [ { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" ], - "time": "2015-01-28 21:50:33" + "time": "2018-04-22T15:46:56+00:00" }, { - "name": "psr/log", - "version": "1.0.0", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" } }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Common interface for logging libraries", + "description": "Guzzle promises library", "keywords": [ - "log", - "psr", - "psr-3" + "promise" ], - "time": "2012-12-21 11:40:51" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "seld/jsonlint", - "version": "1.3.1", + "name": "guzzlehttp/psr7", + "version": "1.5.2", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4" + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4", - "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, - "bin": [ - "bin/jsonlint" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, "autoload": { "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -562,57 +6290,58 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "JSON Linter", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "json", - "linter", - "parser", - "validator" + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" ], - "time": "2015-01-04 21:18:15" + "time": "2018-12-04T20:46:45+00:00" }, { - "name": "symfony/console", - "version": "v2.7.3", + "name": "jms/metadata", + "version": "1.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/Console.git", - "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e" + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "e5854ab1aa643623dc64adde718a8eec32b957a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/d6cf02fe73634c96677e428f840704bfbcaec29e", - "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/e5854ab1aa643623dc64adde718a8eec32b957a8", + "reference": "e5854ab1aa643623dc64adde718a8eec32b957a8", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/phpunit-bridge": "~2.7", - "symfony/process": "~2.1" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "1.5.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" + "psr-0": { + "Metadata\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -621,96 +6350,111 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-07-28 15:18:12" + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2018-10-26T12:40:10+00:00" }, { - "name": "symfony/finder", - "version": "v2.7.3", + "name": "jms/parser-lib", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "ae0f363277485094edc04c9f3cbe595b183b78e4" + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/ae0f363277485094edc04c9f3cbe595b183b78e4", - "reference": "ae0f363277485094edc04c9f3cbe595b183b78e4", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", "shasum": "" }, "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpoption/phpoption": ">=0.9,<2.0-dev" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" + "psr-0": { + "JMS\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "Apache2" ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2015-07-09 16:07:40" + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" }, { - "name": "symfony/process", - "version": "v2.7.3", + "name": "jms/serializer", + "version": "1.13.0", "source": { "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "48aeb0e48600321c272955132d7606ab0a49adb3" + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "00863e1d55b411cc33ad3e1de09a4c8d3aae793c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/48aeb0e48600321c272955132d7606ab0a49adb3", - "reference": "48aeb0e48600321c272955132d7606ab0a49adb3", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/00863e1d55b411cc33ad3e1de09a4c8d3aae793c", + "reference": "00863e1d55b411cc33ad3e1de09a4c8d3aae793c", "shasum": "" }, "require": { - "php": ">=5.3.9" + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "^1.3", + "jms/parser-lib": "1.*", + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0" + }, + "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to serialize data to YAML format." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-1.x": "1.13-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" + "psr-0": { + "JMS\\Serializer": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -719,1860 +6463,1818 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2015-07-01 11:25:50" + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2018-07-25T13:58:54+00:00" }, { - "name": "tubalmartin/cssmin", - "version": "v2.4.8-p4", + "name": "league/container", + "version": "2.4.1", "source": { "type": "git", - "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", - "reference": "fe84d71e8420243544c0ce3bd0f5d7c1936b0f90" + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/fe84d71e8420243544c0ce3bd0f5d7c1936b0f90", - "reference": "fe84d71e8420243544c0ce3bd0f5d7c1936b0f90", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", "shasum": "" }, "require": { - "php": ">=5.0.0" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } }, - "type": "library", "autoload": { - "classmap": [ - "cssmin.php" - ] + "psr-4": { + "League\\Container\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Túbal Martín", - "homepage": "http://tubalmartin.me/" + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" } ], - "description": "A PHP port of the YUI CSS compressor", - "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", "keywords": [ - "compress", - "compressor", - "css", - "minify", - "yui" + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" ], - "time": "2014-09-22 08:08:50" + "time": "2017-05-10T09:20:27+00:00" }, { - "name": "zendframework/zend-code", - "version": "2.4.0", + "name": "lusitanian/oauth", + "version": "v0.8.11", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "0ed94f842ba60cdc900c46a61bdbd7ac95a3e140" + "url": "https://github.com/Lusitanian/PHPoAuthLib.git", + "reference": "fc11a53db4b66da555a6a11fce294f574a8374f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/0ed94f842ba60cdc900c46a61bdbd7ac95a3e140", - "reference": "0ed94f842ba60cdc900c46a61bdbd7ac95a3e140", + "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/fc11a53db4b66da555a6a11fce294f574a8374f9", + "reference": "fc11a53db4b66da555a6a11fce294f574a8374f9", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version" + "php": ">=5.3.0" }, "require-dev": { - "doctrine/common": ">=2.1", - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-stdlib": "self.version" + "phpunit/phpunit": "3.7.*", + "predis/predis": "0.8.*@dev", + "squizlabs/php_codesniffer": "2.*", + "symfony/http-foundation": "~2.1" }, "suggest": { - "doctrine/common": "Doctrine\\Common >=2.1 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" + "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", + "predis/predis": "Allows using the Redis storage backend.", + "symfony/http-foundation": "Allows using the Symfony Session storage backend." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "0.1-dev" } }, "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" + "psr-0": { + "OAuth": "src", + "OAuth\\Unit": "tests" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides facilities to generate arbitrary code using an object oriented interface", - "homepage": "https://github.com/zendframework/zend-code", + "authors": [ + { + "name": "David Desberg", + "email": "david@daviddesberg.com" + }, + { + "name": "Elliot Chance", + "email": "elliotchance@gmail.com" + }, + { + "name": "Pieter Hordijk", + "email": "info@pieterhordijk.com" + } + ], + "description": "PHP 5.3+ oAuth 1/2 Library", "keywords": [ - "code", - "zf2" + "Authentication", + "authorization", + "oauth", + "security" ], - "time": "2015-03-31 15:39:14" + "time": "2018-02-14T22:37:14+00:00" }, { - "name": "zendframework/zend-config", - "version": "2.4.0", + "name": "magento/magento2-functional-testing-framework", + "version": "2.3.14", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-config.git", - "reference": "95f3a4b3fa85d49e6f060183122de4596fa6d29d" + "url": "https://github.com/magento/magento2-functional-testing-framework.git", + "reference": "b4002b3fe53884895921b44cf519d42918e3c7c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-config/zipball/95f3a4b3fa85d49e6f060183122de4596fa6d29d", - "reference": "95f3a4b3fa85d49e6f060183122de4596fa6d29d", + "url": "https://api.github.com/repos/magento/magento2-functional-testing-framework/zipball/b4002b3fe53884895921b44cf519d42918e3c7c6", + "reference": "b4002b3fe53884895921b44cf519d42918e3c7c6", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "allure-framework/allure-codeception": "~1.3.0", + "codeception/codeception": "~2.3.4 || ~2.4.0 ", + "consolidation/robo": "^1.0.0", + "epfremme/swagger-php": "^2.0", + "ext-curl": "*", + "flow/jsonpath": ">0.2", + "fzaninotto/faker": "^1.6", + "monolog/monolog": "^1.0", + "mustache/mustache": "~2.5", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0|~7.2.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0", + "vlucas/phpdotenv": "^2.4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", - "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + "brainmaestro/composer-git-hooks": "^2.3", + "codacy/coverage": "^1.4", + "codeception/aspect-mock": "^3.0", + "doctrine/cache": "<1.7.0", + "goaop/framework": "2.2.0", + "php-coveralls/php-coveralls": "^1.0", + "phpmd/phpmd": "^2.6.0", + "phpunit/phpunit": "~6.5.0 || ~7.0.0", + "rregeer/phpunit-coverage-check": "^0.1.4", + "sebastian/phpcpd": "~3.0 || ~4.0", + "squizlabs/php_codesniffer": "~3.2", + "symfony/stopwatch": "~3.4.6" }, + "bin": [ + "bin/mftf" + ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "hooks": { + "pre-push": "bin/all-checks" } }, "autoload": { + "files": [ + "src/Magento/FunctionalTestingFramework/_bootstrap.php" + ], "psr-4": { - "Zend\\Config\\": "src/" + "Magento\\FunctionalTestingFramework\\": "src/Magento/FunctionalTestingFramework", + "MFTF\\": "dev/tests/functional/MFTF" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "AGPL-3.0" ], - "description": "provides a nested object property based user interface for accessing this configuration data within application code", - "homepage": "https://github.com/zendframework/zend-config", + "description": "Magento2 Functional Testing Framework", "keywords": [ - "config", - "zf2" + "automation", + "functional", + "magento", + "testing" ], - "time": "2015-03-25 20:55:48" + "time": "2019-02-19T16:03:22+00:00" }, { - "name": "zendframework/zend-console", - "version": "2.4.0", + "name": "mikey179/vfsStream", + "version": "v1.6.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-console.git", - "reference": "54823d9ba6f8ce39046384ee5a043b5b3d5f56d7" + "url": "https://github.com/mikey179/vfsStream.git", + "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-console/zipball/54823d9ba6f8ce39046384ee5a043b5b3d5f56d7", - "reference": "54823d9ba6f8ce39046384ee5a043b5b3d5f56d7", + "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", + "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" - }, - "suggest": { - "zendframework/zend-filter": "To support DefaultRouteMatcher usage", - "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + "phpunit/phpunit": "~4.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Console\\": "src/" + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-console", - "keywords": [ - "console", - "zf2" + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } ], - "time": "2015-03-25 20:55:48" + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "time": "2017-08-01T08:02:14+00:00" }, { - "name": "zendframework/zend-di", - "version": "2.4.0", + "name": "moontoast/math", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-di.git", - "reference": "b9f8de081adecf71a003a569e9ba76c0a4c00bf2" + "url": "https://github.com/ramsey/moontoast-math.git", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-di/zipball/b9f8de081adecf71a003a569e9ba76c0a4c00bf2", - "reference": "b9f8de081adecf71a003a569e9ba76c0a4c00bf2", + "url": "https://api.github.com/repos/ramsey/moontoast-math/zipball/c2792a25df5cad4ff3d760dd37078fc5b6fccc79", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" + "ext-bcmath": "*", + "php": ">=5.3.3" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + "jakub-onderka/php-parallel-lint": "^0.9.0", + "phpunit/phpunit": "^4.7|>=5.0 <5.4", + "satooshi/php-coveralls": "^0.6.1", + "squizlabs/php_codesniffer": "^2.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { "psr-4": { - "Zend\\Di\\": "src/" + "Moontoast\\Math\\": "src/Moontoast/Math/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Apache-2.0" ], - "homepage": "https://github.com/zendframework/zend-di", + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A mathematics library, providing functionality for large numbers", + "homepage": "https://github.com/ramsey/moontoast-math", "keywords": [ - "di", - "zf2" + "bcmath", + "math" ], - "time": "2015-03-25 20:55:48" + "time": "2017-02-16T16:54:46+00:00" }, { - "name": "zendframework/zend-escaper", - "version": "2.4.0", + "name": "mustache/mustache", + "version": "v2.12.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-escaper.git", - "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97" + "url": "https://github.com/bobthecow/mustache.php.git", + "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97", - "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97", + "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/fe8fe72e9d580591854de404cc59a1b83ca4d19e", + "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": ">=5.2.4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "friendsofphp/php-cs-fixer": "~1.11", + "phpunit/phpunit": "~3.7|~4.0|~5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Escaper\\": "src/" + "psr-0": { + "Mustache": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } ], - "homepage": "https://github.com/zendframework/zend-escaper", + "description": "A Mustache implementation in PHP.", + "homepage": "https://github.com/bobthecow/mustache.php", "keywords": [ - "escaper", - "zf2" + "mustache", + "templating" ], - "time": "2015-03-23 18:29:14" + "time": "2017-07-11T12:54:05+00:00" }, { - "name": "zendframework/zend-eventmanager", - "version": "2.4.0", + "name": "myclabs/deep-copy", + "version": "1.8.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "58d21c95c7005a527262fd536499195f104e83f9" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/58d21c95c7005a527262fd536499195f104e83f9", - "reference": "58d21c95c7005a527262fd536499195f104e83f9", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { "psr-4": { - "Zend\\EventManager\\": "src/" - } + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-event-manager", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "eventmanager", - "zf2" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], - "time": "2015-03-23 18:29:14" + "time": "2018-06-11T23:09:50+00:00" }, { - "name": "zendframework/zend-filter", - "version": "2.4.0", + "name": "pdepend/pdepend", + "version": "2.5.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-filter.git", - "reference": "6d8aed2da81b62a04747346c4370562cdbe34595" + "url": "https://github.com/pdepend/pdepend.git", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/6d8aed2da81b62a04747346c4370562cdbe34595", - "reference": "6d8aed2da81b62a04747346c4370562cdbe34595", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4", + "symfony/dependency-injection": "^2.3.0|^3|^4", + "symfony/filesystem": "^2.3.0|^3|^4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-crypt": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-crypt": "Zend\\Crypt component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter" + "phpunit/phpunit": "^4.8|^5.7", + "squizlabs/php_codesniffer": "^2.0.0" }, + "bin": [ + "src/bin/pdepend" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { "psr-4": { - "Zend\\Filter\\": "src/" + "PDepend\\": "src/main/php/PDepend" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a set of commonly needed data filters", - "homepage": "https://github.com/zendframework/zend-filter", - "keywords": [ - "filter", - "zf2" - ], - "time": "2015-03-25 20:55:48" + "description": "Official version of pdepend to be handled with Composer", + "time": "2017-12-13T13:21:38+00:00" }, { - "name": "zendframework/zend-form", - "version": "2.4.0", + "name": "phar-io/manifest", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-form.git", - "reference": "bca0db55718355d25c2c10fdd41a83561f1c94b3" + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-form/zipball/bca0db55718355d25c2c10fdd41a83561f1c94b3", - "reference": "bca0db55718355d25c2c10fdd41a83561f1c94b3", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-inputfilter": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-captcha": "self.version", - "zendframework/zend-code": "self.version", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-view": "self.version", - "zendframework/zendservice-recaptcha": "*" - }, - "suggest": { - "zendframework/zend-captcha": "Zend\\Captcha component", - "zendframework/zend-code": "Zend\\Code component", - "zendframework/zend-eventmanager": "Zend\\EventManager component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-view": "Zend\\View component", - "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Form\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-form", - "keywords": [ - "form", - "zf2" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], - "time": "2015-03-28 20:29:18" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" }, { - "name": "zendframework/zend-http", - "version": "2.4.0", + "name": "phar-io/version", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-http.git", - "reference": "9c6047a0bdb3094d3ea07a215ff929cc47de4deb" + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/9c6047a0bdb3094d3ea07a215ff929cc47de4deb", - "reference": "9c6047a0bdb3094d3ea07a215ff929cc47de4deb", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-uri": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "php": "^5.6 || ^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Http\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", - "homepage": "https://github.com/zendframework/zend-http", - "keywords": [ - "http", - "zf2" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], - "time": "2015-03-27 15:46:30" + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" }, { - "name": "zendframework/zend-i18n", - "version": "2.4.0", + "name": "php-cs-fixer/diff", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-i18n.git", - "reference": "9aebc5287373a802540d75fe5508417f866c2e52" + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/9aebc5287373a802540d75fe5508417f866c2e52", - "reference": "9aebc5287373a802540d75fe5508417f866c2e52", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": "^5.6 || ^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-cache": "self.version", - "zendframework/zend-config": "self.version", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-view": "self.version" - }, - "suggest": { - "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", - "zendframework/zend-cache": "Zend\\Cache component", - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", - "zendframework/zend-filter": "You should install this package to use the provided filters", - "zendframework/zend-resources": "Translation resources", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-validator": "You should install this package to use the provided validators", - "zendframework/zend-view": "You should install this package to use the provided view helpers" + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\I18n\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-i18n", + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", "keywords": [ - "i18n", - "zf2" + "diff" ], - "time": "2015-03-25 20:55:48" + "time": "2018-02-15T16:58:55+00:00" }, { - "name": "zendframework/zend-inputfilter", - "version": "2.4.0", + "name": "phpcollection/phpcollection", + "version": "0.5.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "4b1398f3635fae3cc5e873c5bb067274f3d10a93" + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/4b1398f3635fae3cc5e873c5bb067274f3d10a93", - "reference": "4b1398f3635fae3cc5e873c5bb067274f3d10a93", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-filter": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "phpoption/phpoption": "1.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "0.4-dev" } }, "autoload": { - "psr-4": { - "Zend\\InputFilter\\": "src/" + "psr-0": { + "PhpCollection": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } ], - "homepage": "https://github.com/zendframework/zend-input-filter", + "description": "General-Purpose Collection Library for PHP", "keywords": [ - "inputfilter", - "zf2" + "collection", + "list", + "map", + "sequence", + "set" ], - "time": "2015-03-23 18:29:14" + "time": "2015-05-17T12:39:23+00:00" }, { - "name": "zendframework/zend-json", - "version": "2.4.0", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-json.git", - "reference": "2d845e151c1b9a237cf1899ac31e17fb10bd1e3f" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-json/zipball/2d845e151c1b9a237cf1899ac31e17fb10bd1e3f", - "reference": "2d845e151c1b9a237cf1899ac31e17fb10bd1e3f", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.5" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-http": "self.version", - "zendframework/zend-server": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-server": "Zend\\Server component", - "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Zend\\Json\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", - "homepage": "https://github.com/zendframework/zend-json", + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "json", - "zf2" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], - "time": "2015-03-25 20:55:48" + "time": "2017-09-11T18:02:19+00:00" }, { - "name": "zendframework/zend-loader", - "version": "2.4.0", + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-loader.git", - "reference": "65de2c7a56f8eee633c6bf1cfab73e45648880d4" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/65de2c7a56f8eee633c6bf1cfab73e45648880d4", - "reference": "65de2c7a56f8eee633c6bf1cfab73e45648880d4", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "Zend\\Loader\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-loader", - "keywords": [ - "loader", - "zf2" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2015-03-23 18:29:14" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" }, { - "name": "zendframework/zend-log", - "version": "2.4.0", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-log.git", - "reference": "002e3c810cad7e31e51c9895e9e3cb6fbd312cdd" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-log/zipball/002e3c810cad7e31e51c9895e9e3cb6fbd312cdd", - "reference": "002e3c810cad7e31e51c9895e9e3cb6fbd312cdd", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-console": "self.version", - "zendframework/zend-db": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-mail": "self.version", - "zendframework/zend-validator": "self.version" - }, - "suggest": { - "ext-mongo": "*", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML formatter", - "zendframework/zend-mail": "Zend\\Mail component", - "zendframework/zend-validator": "Zend\\Validator component" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Zend\\Log\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "component for general purpose logging", - "homepage": "https://github.com/zendframework/zend-log", - "keywords": [ - "log", - "logging", - "zf2" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2015-03-25 20:55:48" + "time": "2017-07-14T14:27:02+00:00" }, { - "name": "zendframework/zend-math", - "version": "2.4.0", + "name": "phpmd/phpmd", + "version": "2.6.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-math.git", - "reference": "f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73" + "url": "https://github.com/phpmd/phpmd.git", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-math/zipball/f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73", - "reference": "f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", "shasum": "" }, "require": { - "php": ">=5.3.23" + "ext-xml": "*", + "pdepend/pdepend": "^2.5", + "php": ">=5.3.9" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" - }, - "suggest": { - "ext-bcmath": "If using the bcmath functionality", - "ext-gmp": "If using the gmp functionality", - "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable", - "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" }, + "bin": [ + "src/bin/phpmd" + ], + "type": "project", "autoload": { - "psr-4": { - "Zend\\Math\\": "src/" + "psr-0": { + "PHPMD\\": "src/main/php" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-math", + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", "keywords": [ - "math", - "zf2" + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" ], - "time": "2015-03-23 18:29:14" + "time": "2017-01-20T14:41:10+00:00" }, { - "name": "zendframework/zend-modulemanager", - "version": "2.4.0", + "name": "phpoption/phpoption", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-modulemanager.git", - "reference": "af7ae3cd29a1efb73cc66ae1081e606039d5c20f" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/af7ae3cd29a1efb73cc66ae1081e606039d5c20f", - "reference": "af7ae3cd29a1efb73cc66ae1081e606039d5c20f", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-config": "self.version", - "zendframework/zend-console": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-loader": "Zend\\Loader component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + "phpunit/phpunit": "4.7.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.3-dev" } }, "autoload": { - "psr-4": { - "Zend\\ModuleManager\\": "src/" + "psr-0": { + "PhpOption\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } ], - "homepage": "https://github.com/zendframework/zend-module-manager", + "description": "Option Type for PHP", "keywords": [ - "modulemanager", - "zf2" + "language", + "option", + "php", + "type" ], - "time": "2015-03-23 18:29:14" + "time": "2015-07-25T16:39:46+00:00" }, { - "name": "zendframework/zend-mvc", - "version": "2.4.0", + "name": "phpspec/prophecy", + "version": "1.8.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-mvc.git", - "reference": "0b4a4a829b30be510a3f215c4ff00c703ee8b431" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/0b4a4a829b30be510a3f215c4ff00c703ee8b431", - "reference": "0b4a4a829b30be510a3f215c4ff00c703ee8b431", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-form": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-authentication": "self.version", - "zendframework/zend-console": "self.version", - "zendframework/zend-di": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-inputfilter": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-log": "self.version", - "zendframework/zend-modulemanager": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-text": "self.version", - "zendframework/zend-uri": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-version": "self.version", - "zendframework/zend-view": "self.version" - }, - "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-di": "Zend\\Di component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", - "zendframework/zend-inputfilter": "Zend\\Inputfilter component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-log": "Zend\\Log component", - "zendframework/zend-modulemanager": "Zend\\ModuleManager component", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", - "zendframework/zend-stdlib": "Zend\\Stdlib component", - "zendframework/zend-text": "Zend\\Text component", - "zendframework/zend-uri": "Zend\\Uri component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-version": "Zend\\Version component", - "zendframework/zend-view": "Zend\\View component" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Mvc\\": "src/" + "psr-0": { + "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-mvc", + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "mvc", - "zf2" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "time": "2015-03-26 18:55:14" + "time": "2018-08-05T17:53:17+00:00" }, { - "name": "zendframework/zend-serializer", - "version": "2.4.0", + "name": "phpunit/php-code-coverage", + "version": "5.3.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-serializer.git", - "reference": "3c531789a9882a5deb721356a7bd2642b65d4b09" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/3c531789a9882a5deb721356a7bd2642b65d4b09", - "reference": "3c531789a9882a5deb721356a7bd2642b65d4b09", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-json": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-stdlib": "self.version" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" + "phpunit/phpunit": "^6.0" }, "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "ext-xdebug": "^2.5.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Serializer\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", - "homepage": "https://github.com/zendframework/zend-serializer", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "serializer", - "zf2" + "coverage", + "testing", + "xunit" ], - "time": "2015-03-25 20:55:48" + "time": "2018-04-06T15:36:58+00:00" }, { - "name": "zendframework/zend-server", - "version": "2.4.0", + "name": "phpunit/php-file-iterator", + "version": "1.4.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-server.git", - "reference": "d11ff0bd529d202022823d4accf5983cbd50fc49" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-server/zipball/d11ff0bd529d202022823d4accf5983cbd50fc49", - "reference": "d11ff0bd529d202022823d4accf5983cbd50fc49", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Server\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-server", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "server", - "zf2" + "filesystem", + "iterator" ], - "time": "2015-03-25 20:55:48" + "time": "2017-11-27T13:52:08+00:00" }, { - "name": "zendframework/zend-servicemanager", - "version": "2.4.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "57cf99fa5ac08c05a135a8d0d676c52a5e450083" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/57cf99fa5ac08c05a135a8d0d676c52a5e450083", - "reference": "57cf99fa5ac08c05a135a8d0d676c52a5e450083", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-di": "self.version" - }, - "suggest": { - "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", - "zendframework/zend-di": "Zend\\Di component" + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\ServiceManager\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-service-manager", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "servicemanager", - "zf2" + "template" ], - "time": "2015-03-23 18:29:14" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "zendframework/zend-soap", - "version": "2.4.0", + "name": "phpunit/php-timer", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-soap.git", - "reference": "a599463aba97ce247faf3fb443e3c7858b46449b" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/a599463aba97ce247faf3fb443e3c7858b46449b", - "reference": "a599463aba97ce247faf3fb443e3c7858b46449b", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-server": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-uri": "self.version" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-http": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Zend\\Soap\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-soap", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "soap", - "zf2" + "timer" ], - "time": "2015-03-25 20:55:48" + "time": "2017-02-26T11:10:40+00:00" }, { - "name": "zendframework/zend-stdlib", - "version": "2.4.0", + "name": "phpunit/php-token-stream", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3", - "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { - "php": ">=5.3.23" + "ext-tokenizer": "*", + "php": "^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Zend\\Stdlib\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-stdlib", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "stdlib", - "zf2" + "tokenizer" ], - "time": "2015-03-25 20:55:48" + "time": "2017-11-27T05:48:46+00:00" }, { - "name": "zendframework/zend-text", - "version": "2.4.0", + "name": "phpunit/phpunit", + "version": "6.5.14", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-text.git", - "reference": "d962ea25647b20527f3ca34ae225bbc885dabfc7" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-text/zipball/d962ea25647b20527f3ca34ae225bbc885dabfc7", - "reference": "d962ea25647b20527f3ca34ae225bbc885dabfc7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Text\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-text", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "text", - "zf2" + "phpunit", + "testing", + "xunit" ], - "time": "2015-03-25 20:55:48" + "time": "2019-02-01T05:22:47+00:00" }, { - "name": "zendframework/zend-uri", - "version": "2.4.0", + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-uri.git", - "reference": "bd9e625639415376f6a82551c73328448d7bc7d1" + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/bd9e625639415376f6a82551c73328448d7bc7d1", - "reference": "bd9e625639415376f6a82551c73328448d7bc7d1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-validator": "self.version" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^6.5.11" + }, + "suggest": { + "ext-soap": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Uri\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", - "homepage": "https://github.com/zendframework/zend-uri", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ - "uri", - "zf2" + "mock", + "xunit" ], - "time": "2015-03-25 20:55:48" + "abandoned": true, + "time": "2018-08-09T05:50:03+00:00" }, { - "name": "zendframework/zend-validator", - "version": "2.4.0", + "name": "ralouphie/getallheaders", + "version": "2.0.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-validator.git", - "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/45fac2545a0f2eb66d71cb7966feee481e7c475f", - "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-db": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Validator\\": "src/" - } + "files": [ + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides a set of commonly needed validators", - "homepage": "https://github.com/zendframework/zend-validator", - "keywords": [ - "validator", - "zf2" + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } ], - "time": "2015-03-25 20:55:48" + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" }, { - "name": "zendframework/zend-view", - "version": "2.4.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-view.git", - "reference": "37beb1ad46e530f627b4b6c3716efd728e976ba9" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-view/zipball/37beb1ad46e530f627b4b6c3716efd728e976ba9", - "reference": "37beb1ad46e530f627b4b6c3716efd728e976ba9", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^5.6 || ^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-authentication": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-feed": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-mvc": "self.version", - "zendframework/zend-navigation": "self.version", - "zendframework/zend-paginator": "self.version", - "zendframework/zend-permissions-acl": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component", - "zendframework/zend-escaper": "Zend\\Escaper component", - "zendframework/zend-feed": "Zend\\Feed component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-navigation": "Zend\\Navigation component", - "zendframework/zend-paginator": "Zend\\Paginator component", - "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\View\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a system of helpers, output filters, and variable escaping", - "homepage": "https://github.com/zendframework/zend-view", - "keywords": [ - "view", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "time": "2015-03-25 20:55:48" - } - ], - "packages-dev": [ + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.0.5", + "name": "sebastian/comparator", + "version": "2.1.3", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "constructor", - "instantiate" + "comparator", + "compare", + "equality" ], - "time": "2015-06-14 21:17:01" + "time": "2018-02-01T13:46:46+00:00" }, { - "name": "fabpot/php-cs-fixer", - "version": "v1.10", + "name": "sebastian/diff", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "8e21b4fb32c4618a425817d9f0daf3d57a9808d1" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/8e21b4fb32c4618a425817d9f0daf3d57a9808d1", - "reference": "8e21b4fb32c4618a425817d9f0daf3d57a9808d1", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.6", - "sebastian/diff": "~1.1", - "symfony/console": "~2.3", - "symfony/event-dispatcher": "~2.1", - "symfony/filesystem": "~2.1", - "symfony/finder": "~2.1", - "symfony/process": "~2.3", - "symfony/stopwatch": "~2.5" + "php": "^7.0" }, "require-dev": { - "satooshi/php-coveralls": "0.7.*@dev" + "phpunit/phpunit": "^6.2" }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "Symfony\\CS\\": "Symfony/CS/" + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A tool to automatically fix PHP code style", - "time": "2015-07-27 20:56:10" + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-08-03T08:09:46+00:00" }, { - "name": "league/climate", - "version": "2.6.1", + "name": "sebastian/environment", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/climate.git", - "reference": "28851c909017424f61cc6a62089316313c645d1c" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/climate/zipball/28851c909017424f61cc6a62089316313c645d1c", - "reference": "28851c909017424f61cc6a62089316313c645d1c", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.0" }, "require-dev": { - "mockery/mockery": "dev-master", - "phpunit/phpunit": "4.1.*" + "phpunit/phpunit": "^6.1" }, "type": "library", - "autoload": { - "psr-4": { - "League\\CLImate\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Joe Tannenbaum", - "email": "hey@joe.codes", - "homepage": "http://joe.codes/", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "cli", - "colors", - "command", - "php", - "terminal" + "Xdebug", + "environment", + "hhvm" ], - "time": "2015-01-18 14:31:58" + "time": "2017-07-01T08:51:00+00:00" }, { - "name": "lusitanian/oauth", - "version": "v0.3.5", + "name": "sebastian/exporter", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/Lusitanian/PHPoAuthLib.git", - "reference": "ac5a1cd5a4519143728dce2213936eea302edf8a" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/ac5a1cd5a4519143728dce2213936eea302edf8a", - "reference": "ac5a1cd5a4519143728dce2213936eea302edf8a", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "3.7.*", - "predis/predis": "0.8.*@dev", - "symfony/http-foundation": "~2.1" - }, - "suggest": { - "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", - "predis/predis": "Allows using the Redis storage backend.", - "symfony/http-foundation": "Allows using the Symfony Session storage backend." + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.1-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { - "psr-0": { - "OAuth": "src", - "OAuth\\Unit": "tests" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "David Desberg", - "email": "david@daviddesberg.com" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Pieter Hordijk", - "email": "info@pieterhordijk.com" + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "PHP 5.3+ oAuth 1/2 Library", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "Authentication", - "authorization", - "oauth", - "security" + "export", + "exporter" ], - "time": "2014-09-05 15:19:58" + "time": "2017-04-03T13:19:02+00:00" }, { - "name": "pdepend/pdepend", - "version": "2.0.6", + "name": "sebastian/finder-facade", + "version": "1.2.2", "source": { "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "a15ffcbfbcc4570d4a733ca7b76e9cac0a56c3f4" + "url": "https://github.com/sebastianbergmann/finder-facade.git", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/a15ffcbfbcc4570d4a733ca7b76e9cac0a56c3f4", - "reference": "a15ffcbfbcc4570d4a733ca7b76e9cac0a56c3f4", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", "shasum": "" }, "require": { - "symfony/config": ">=2.4", - "symfony/dependency-injection": ">=2.4", - "symfony/filesystem": ">=2.4" - }, - "require-dev": { - "phpunit/phpunit": "4.*@stable", - "squizlabs/php_codesniffer": "@stable" + "symfony/finder": "~2.3|~3.0|~4.0", + "theseer/fdomdocument": "~1.3" }, - "bin": [ - "src/bin/pdepend" - ], "type": "library", "autoload": { - "psr-0": { - "PDepend\\": "src/main/php/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "Official version of pdepend to be handled with Composer", - "time": "2015-03-02 08:06:43" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", + "homepage": "https://github.com/sebastianbergmann/finder-facade", + "time": "2017-11-18T17:31:49+00:00" }, { - "name": "phpmd/phpmd", - "version": "2.2.3", + "name": "sebastian/global-state", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "5eeb5a4d39c8304910b33ae49f8813905346cc35" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/5eeb5a4d39c8304910b33ae49f8813905346cc35", - "reference": "5eeb5a4d39c8304910b33ae49f8813905346cc35", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "pdepend/pdepend": "~2.0", - "php": ">=5.3.0", - "symfony/config": ">=2.4", - "symfony/dependency-injection": ">=2.4", - "symfony/filesystem": ">=2.4" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "*", - "squizlabs/php_codesniffer": "*" + "phpunit/phpunit": "^6.0" }, - "bin": [ - "src/bin/phpmd" - ], - "type": "project", - "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project founder" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "http://phpmd.org/", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" + "global state" ], - "time": "2015-05-27 18:16:57" + "time": "2017-04-27T15:39:26+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "2.2.2", + "name": "sebastian/object-enumerator", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2d7c03c0e4e080901b8f33b2897b0577be18a13c", - "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -2587,82 +8289,88 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-08-04 03:42:39" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "1.3.4", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { "classmap": [ - "File/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2013-10-10 15:34:57" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "sebastian/phpcpd", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/phpcpd.git", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.6|^7.0", + "phpunit/php-timer": "^1.0.6", + "sebastian/finder-facade": "^1.1", + "sebastian/version": "^1.0|^2.0", + "symfony/console": "^2.7|^3.0|^4.0" }, + "bin": [ + "phpcpd" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -2679,31 +8387,36 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" + "description": "Copy/Paste Detector (CPD) for PHP code.", + "homepage": "https://github.com/sebastianbergmann/phpcpd", + "time": "2017-11-16T08:49:28+00:00" }, { - "name": "phpunit/php-timer", - "version": "1.0.7", + "name": "sebastian/recursion-context", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -2714,44 +8427,44 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-21 08:01:12" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "1.4.6", + "name": "sebastian/resource-operations", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3ab72c62e550370a6cd5dc873e1a04ab57562f5b" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3ab72c62e550370a6cd5dc873e1a04ab57562f5b", - "reference": "3ab72c62e550370a6cd5dc873e1a04ab57562f5b", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" + "php": ">=5.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -2769,56 +8482,31 @@ "email": "sebastian@phpunit.de" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-08-16 08:51:00" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" }, { - "name": "phpunit/phpunit", - "version": "4.1.0", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "efb1b1334605594417a3bd466477772d06d460a8" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/efb1b1334605594417a3bd466477772d06d460a8", - "reference": "efb1b1334605594417a3bd466477772d06d460a8", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~2.0", - "phpunit/php-file-iterator": "~1.3.1", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", - "phpunit/phpunit-mock-objects": "~2.1", - "sebastian/comparator": "~1.0", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.0", - "sebastian/exporter": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" + "php": ">=5.6" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2827,10 +8515,6 @@ ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], "license": [ "BSD-3-Clause" ], @@ -2841,429 +8525,463 @@ "role": "lead" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2014-05-02 07:13:40" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.7", + "name": "squizlabs/php_codesniffer", + "version": "3.3.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "5e2645ad49d196e020b85598d7c97e482725786a" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "628a481780561150481a9ec74709092b9759b3ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5e2645ad49d196e020b85598d7c97e482725786a", - "reference": "5e2645ad49d196e020b85598d7c97e482725786a", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/628a481780561150481a9ec74709092b9759b3ec", + "reference": "628a481780561150481a9ec74709092b9759b3ec", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3.x-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "name": "Greg Sherwood", "role": "lead" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", "keywords": [ - "mock", - "xunit" + "phpcs", + "standards" ], - "time": "2015-08-19 09:14:08" + "time": "2018-07-26T23:47:18+00:00" }, { - "name": "sebastian/comparator", - "version": "1.2.0", + "name": "symfony/browser-kit", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "url": "https://github.com/symfony/browser-kit.git", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/61d85c5af2fc058014c7c89504c3944e73a086f0", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-07-26 15:48:44" + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "sebastian/diff", - "version": "1.3.0", + "name": "symfony/config", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" + "url": "https://github.com/symfony/config.git", + "reference": "7f70d79c7a24a94f8e98abb988049403a53d7b31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", + "url": "https://api.github.com/repos/symfony/config/zipball/7f70d79c7a24a94f8e98abb988049403a53d7b31", + "reference": "7f70d79c7a24a94f8e98abb988049403a53d7b31", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "sebastian/environment", - "version": "1.3.2", + "name": "symfony/contracts", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" + "url": "https://github.com/symfony/contracts.git", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", + "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "psr/cache": "^1.0", + "psr/container": "^1.0" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], - "time": "2015-08-03 06:14:51" + "time": "2018-12-05T08:06:11+00:00" }, { - "name": "sebastian/exporter", - "version": "1.2.1", + "name": "symfony/dependency-injection", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "cdadb3765df7c89ac93628743913b92bb91f1704" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/cdadb3765df7c89ac93628743913b92bb91f1704", + "reference": "cdadb3765df7c89ac93628743913b92bb91f1704", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/contracts": "^1.0" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-contracts-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "symfony/config": "~4.2", + "symfony/expression-language": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-06-21 07:55:53" + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "sebastian/recursion-context", - "version": "1.0.1", + "name": "symfony/dom-crawler", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/53c97769814c80a84a8403efcf3ae7ae966d53bb", + "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "symfony/css-selector": "~3.4|~4.0" + }, + "suggest": { + "symfony/css-selector": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-06-21 08:04:50" + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "sebastian/version", - "version": "1.0.6", + "name": "symfony/http-foundation", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "850a667d6254ccf6c61d853407b16f21c4579c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/850a667d6254ccf6c61d853407b16f21c4579c77", + "reference": "850a667d6254ccf6c61d853407b16f21c4579c77", "shasum": "" }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "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" + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2019-02-26T08:03:39+00:00" }, { - "name": "sjparkinson/static-review", - "version": "4.1.1", + "name": "symfony/options-resolver", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/sjparkinson/static-review.git", - "reference": "493c3410cf146a12fca84209bad126c494e125f0" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "3896e5a7d06fd15fa4947694c8dcdd371ff147d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sjparkinson/static-review/zipball/493c3410cf146a12fca84209bad126c494e125f0", - "reference": "493c3410cf146a12fca84209bad126c494e125f0", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3896e5a7d06fd15fa4947694c8dcdd371ff147d1", + "reference": "3896e5a7d06fd15fa4947694c8dcdd371ff147d1", "shasum": "" }, "require": { - "league/climate": "~2.0", - "php": ">=5.4.0", - "symfony/console": "~2.0", - "symfony/process": "~2.0" - }, - "require-dev": { - "mockery/mockery": "~0.9", - "phpunit/phpunit": "~4.0", - "sensiolabs/security-checker": "~2.0", - "squizlabs/php_codesniffer": "~1.0" - }, - "suggest": { - "sensiolabs/security-checker": "Required for ComposerSecurityReview.", - "squizlabs/php_codesniffer": "Required for PhpCodeSnifferReview." + "php": "^7.1.3" }, - "bin": [ - "bin/static-review.php" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { "psr-4": { - "StaticReview\\": "src/" - } + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3271,120 +8989,112 @@ ], "authors": [ { - "name": "Samuel Parkinson", - "email": "sam.james.parkinson@gmail.com", - "homepage": "http://samp.im" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "An extendable framework for version control hooks.", - "time": "2014-09-22 08:40:36" + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "1.5.3", + "name": "symfony/polyfill-php70", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "396178ada8499ec492363587f037125bf7b07fcc" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/396178ada8499ec492363587f037125bf7b07fcc", - "reference": "396178ada8499ec492363587f037125bf7b07fcc", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.1.2" - }, - "suggest": { - "phpunit/php-timer": "dev-master" + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" }, - "bin": [ - "scripts/phpcs" - ], "type": "library", "extra": { "branch-alias": { - "dev-phpcs-fixer": "2.0.x-dev" + "dev-master": "1.9-dev" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/CommentParser/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Greg Sherwood", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "phpcs", - "standards" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2014-05-01 03:07:07" + "time": "2018-09-21T06:26:08+00:00" }, { - "name": "symfony/config", - "version": "v2.7.3", + "name": "symfony/polyfill-php72", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/symfony/Config.git", - "reference": "6c905bbed1e728226de656e4c07d620dfe9e80d9" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Config/zipball/6c905bbed1e728226de656e4c07d620dfe9e80d9", - "reference": "6c905bbed1e728226de656e4c07d620dfe9e80d9", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", + "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/filesystem": "~2.3" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Config\\": "" - } + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3392,59 +9102,55 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2015-07-09 16:07:40" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T13:07:52+00:00" }, { - "name": "symfony/dependency-injection", - "version": "v2.7.3", + "name": "symfony/stopwatch", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/symfony/DependencyInjection.git", - "reference": "851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6", - "reference": "851e3ffe8a366b1590bdaf3df2c1395f2d27d8a6", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b1a5f646d56a3290230dbc8edf2a0d62cda23f67", + "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67", "shasum": "" }, "require": { - "php": ">=5.3.9" - }, - "conflict": { - "symfony/expression-language": "<2.6" - }, - "require-dev": { - "symfony/config": "~2.2", - "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", - "symfony/yaml": "~2.1" - }, - "suggest": { - "symfony/config": "", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" + "php": "^7.1.3", + "symfony/contracts": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - } + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3460,49 +9166,50 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2015-07-28 14:07:07" + "time": "2019-01-16T20:31:39+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v2.7.3", + "name": "symfony/yaml", + "version": "v3.4.23", "source": { "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3" + "url": "https://github.com/symfony/yaml.git", + "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3", - "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3", + "url": "https://api.github.com/repos/symfony/yaml/zipball/57f1ce82c997f5a8701b89ef970e36bb657fd09c", + "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5", - "symfony/dependency-injection": "~2.6", - "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", - "symfony/stopwatch": "~2.3" + "symfony/console": "~3.4|~4.0" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3518,137 +9225,172 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-06-18 19:21:56" + "time": "2019-02-23T15:06:07+00:00" }, { - "name": "symfony/filesystem", - "version": "v2.7.3", + "name": "theseer/fdomdocument", + "version": "1.6.6", "source": { "type": "git", - "url": "https://github.com/symfony/Filesystem.git", - "reference": "2d7b2ddaf3f548f4292df49a99d19c853d43f0b8" + "url": "https://github.com/theseer/fDOMDocument.git", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Filesystem/zipball/2d7b2ddaf3f548f4292df49a99d19c853d43f0b8", - "reference": "2d7b2ddaf3f548f4292df49a99d19c853d43f0b8", + "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", "shasum": "" }, "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "ext-dom": "*", + "lib-libxml": "*", + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "lead" } + ], + "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-30T11:53:12+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, + "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2015-07-09 16:07:40" + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2017-04-07T12:08:54+00:00" }, { - "name": "symfony/stopwatch", - "version": "v2.7.3", + "name": "vlucas/phpdotenv", + "version": "v2.6.1", "source": { "type": "git", - "url": "https://github.com/symfony/Stopwatch.git", - "reference": "b07a866719bbac5294c67773340f97b871733310" + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/b07a866719bbac5294c67773340f97b871733310", - "reference": "b07a866719bbac5294c67773340f97b871733310", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpunit/phpunit": "^4.8.35 || ^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.6-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" + "Dotenv\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "http://www.vancelucas.com" } ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2015-07-01 18:23:16" + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2019-01-29T11:11:52+00:00" }, { - "name": "symfony/yaml", - "version": "v2.7.3", + "name": "webmozart/assert", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "71340e996171474a53f3d29111d046be4ad8a0ff" + "url": "https://github.com/webmozart/assert.git", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/71340e996171474a53f3d29111d046be4ad8a0ff", - "reference": "71340e996171474a53f3d29111d046be4ad8a0ff", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3657,41 +9399,45 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-07-28 14:07:07" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], - "minimum-stability": "alpha", + "minimum-stability": "stable", "stability-flags": { - "composer/composer": 15, "phpmd/phpmd": 0 }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "~5.5.0|~5.6.0|~7.0.0" - }, - "platform-dev": { - "lib-libxml": "*", + "php": "~7.1.3||~7.2.0", + "ext-bcmath": "*", "ext-ctype": "*", - "ext-gd": "*", - "ext-spl": "*", + "ext-curl": "*", "ext-dom": "*", - "ext-simplexml": "*", - "ext-mcrypt": "*", + "ext-gd": "*", "ext-hash": "*", - "ext-curl": "*", "ext-iconv": "*", - "ext-intl": "*" - } + "ext-intl": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pdo_mysql": "*", + "ext-simplexml": "*", + "ext-soap": "*", + "ext-spl": "*", + "ext-xsl": "*", + "ext-zip": "*", + "lib-libxml": "*" + }, + "platform-dev": [] } diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.lock b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.lock index 756542fbdb22..4fb998ab77b3 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.lock +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.lock @@ -1,4437 +1,15991 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "8500e076fe26c04cf68124e561f62f52", + "content-hash": "758832dca53cba659d813c126f37d8a1", "packages": [ { - "name": "composer/composer", - "version": "1.0.0-alpha9", + "name": "amzn/amazon-pay-and-login-magento-2-module", + "version": "3.1.4", + "require": { + "amzn/amazon-pay-and-login-with-amazon-core-module": "3.1.4", + "amzn/amazon-pay-module": "3.1.4", + "amzn/login-with-amazon-module": "3.1.4" + }, + "type": "metapackage", + "license": [ + "Apache-2.0" + ], + "description": "Official Magento2 Plugin to integrate with Amazon Pay and Login with Amazon" + }, + { + "name": "amzn/amazon-pay-and-login-with-amazon-core-module", + "version": "3.1.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/amzn/amazon-pay-and-login-with-amazon-core-module/amzn-amazon-pay-and-login-with-amazon-core-module-3.1.4.0.zip", + "reference": null, + "shasum": "1ad5fdd9a997284f005d933b1fead3a746f158bb" + }, + "require": { + "amzn/amazon-pay-sdk-php": "^3.2.0", + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-checkout": "*", + "magento/module-config": "*", + "magento/module-customer": "*", + "magento/module-developer": "*", + "magento/module-payment": "*", + "magento/module-paypal": "*", + "magento/module-quote": "*", + "magento/module-sales": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Amazon\\Core\\": "" + } + }, + "license": [ + "Apache-2.0" + ], + "description": "Shared functionality for Amazon Pay and Login with Amazon modules" + }, + { + "name": "amzn/amazon-pay-module", + "version": "3.1.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/amzn/amazon-pay-module/amzn-amazon-pay-module-3.1.4.0.zip", + "reference": null, + "shasum": "03cec957586f9e14f0914b58f651c661c509d08d" + }, + "require": { + "amzn/amazon-pay-and-login-with-amazon-core-module": "^3.1.4", + "amzn/login-with-amazon-module": "^3.1.4", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-checkout": "*", + "magento/module-customer": "*", + "magento/module-directory": "*", + "magento/module-eav": "*", + "magento/module-payment": "*", + "magento/module-paypal": "*", + "magento/module-quote": "*", + "magento/module-sales": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "*", + "magento/module-scalable-checkout": "*", + "magento/module-scalable-oms": "*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Amazon\\Payment\\": "" + } + }, + "license": [ + "Apache-2.0" + ], + "description": "Amazon Pay module" + }, + { + "name": "amzn/amazon-pay-sdk-php", + "version": "3.4.1", "source": { "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24" + "url": "https://github.com/amzn/amazon-pay-sdk-php.git", + "reference": "aff849d831b95469d68708ac1bdb316a56896e4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/eb1ce550ca51134ee619ad3e37f5a0b7e980dd24", - "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24", + "url": "https://api.github.com/repos/amzn/amazon-pay-sdk-php/zipball/aff849d831b95469d68708ac1bdb316a56896e4c", + "reference": "aff849d831b95469d68708ac1bdb316a56896e4c", "shasum": "" }, "require": { - "justinrainbow/json-schema": "~1.1", - "php": ">=5.3.2", - "seld/jsonlint": "~1.0", - "symfony/console": "~2.3", - "symfony/finder": "~2.2", - "symfony/process": "~2.1" + "ext-curl": "*", + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4" }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic" - }, - "bin": [ - "bin/composer" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "psr-0": { - "Composer": "src/" + "psr-4": { + "AmazonPay\\": "AmazonPay/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache OSL-2" ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Amazon Pay SDK", + "email": "amazon-pay-sdk@amazon.com" } ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", - "homepage": "http://getcomposer.org/", + "description": "Amazon Pay SDK (PHP)", + "homepage": "https://github.com/amzn/amazon-pay-sdk-php", "keywords": [ - "autoload", - "dependency", - "package" + "amazon", + "amazon pay", + "amazon payments", + "pay", + "pay with amazon", + "payment", + "payments" + ], + "time": "2019-02-11T16:32:17+00:00" + }, + { + "name": "amzn/login-with-amazon-module", + "version": "3.1.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/amzn/login-with-amazon-module/amzn-login-with-amazon-module-3.1.4.0.zip", + "reference": null, + "shasum": "d927403b521e59d36d42a29998c774986c65398b" + }, + "require": { + "amzn/amazon-pay-and-login-with-amazon-core-module": "^3.1.4", + "magento/module-checkout": "*", + "magento/module-checkout-agreements": "*", + "magento/module-customer": "*", + "magento/module-eav": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-sales": "*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Amazon\\Login\\": "" + } + }, + "license": [ + "Apache-2.0" ], - "time": "2014-12-07 17:15:20" + "description": "Login with Amazon module" }, { - "name": "justinrainbow/json-schema", - "version": "1.4.1", + "name": "bacon/bacon-qr-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2465fe486c864e30badaa4d005ebdf89dbc503f3" + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2465fe486c864e30badaa4d005ebdf89dbc503f3", - "reference": "2465fe486c864e30badaa4d005ebdf89dbc503f3", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/5a91b62b9d37cee635bbf8d553f4546057250bee", + "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-iconv": "*", + "php": "^5.4|^7.0" }, "require-dev": { - "json-schema/json-schema-test-suite": "1.1.0", - "phpdocumentor/phpdocumentor": "~2", - "phpunit/phpunit": "~3.7" + "phpunit/phpunit": "^4.8" }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } + "suggest": { + "ext-gd": "to generate QR code images" }, + "type": "library", "autoload": { "psr-0": { - "JsonSchema": "src/" + "BaconQrCode": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-2-Clause" ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "http://www.dasprids.de", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "time": "2017-10-17T09:59:25+00:00" + }, + { + "name": "beberlei/assert", + "version": "v2.9.6", + "source": { + "type": "git", + "url": "https://github.com/beberlei/assert.git", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.1.1", + "phpunit/phpunit": "^4.8.35|^5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Assert\\": "lib/Assert" }, + "files": [ + "lib/Assert/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" }, { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "description": "Thin assertion library for input validation in business models.", "keywords": [ - "json", - "schema" + "assert", + "assertion", + "validation" ], - "time": "2015-03-27 16:41:39" + "time": "2018-06-11T17:15:25+00:00" }, { - "name": "magento/framework", - "version": "0.74.0-beta9", + "name": "braintree/braintree_php", + "version": "3.35.0", + "source": { + "type": "git", + "url": "https://github.com/braintree/braintree_php.git", + "reference": "6c4388199ce379432804a5c18b88585157ef2ed7" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_framework-0.74.0-beta9.zip", - "reference": null, - "shasum": "bd9d7a552b4f71dc2b3c74f9bd2d81f15a9037c4" + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/6c4388199ce379432804a5c18b88585157ef2ed7", + "reference": "6c4388199ce379432804a5c18b88585157ef2ed7", + "shasum": "" }, "require": { "ext-curl": "*", "ext-dom": "*", - "ext-gd": "*", "ext-hash": "*", - "ext-iconv": "*", - "ext-mcrypt": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "lib-libxml": "*", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "ext-imagick": "Use Image Magick >=3.0.0 as an optional alternative image processing library" + "ext-openssl": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, - "type": "magento2-library", - "extra": { - "map": [ - [ - "*", - "Magento/Framework" - ] - ] + "require-dev": { + "phpunit/phpunit": "3.7.*" }, + "type": "library", "autoload": { + "psr-0": { + "Braintree": "lib/" + }, "psr-4": { - "Magento\\Framework\\": "" + "Braintree\\": "lib/Braintree" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Braintree", + "homepage": "https://www.braintreepayments.com" + } + ], + "description": "Braintree PHP Client Library", + "time": "2018-07-26T14:37:38+00:00" }, { - "name": "magento/language-de_de", - "version": "0.74.0-beta9", + "name": "christian-riesen/base32", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/ChristianRiesen/base32.git", + "reference": "80ff0e3b2124e61b4b39e2535709452f70bff367" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-de_de-0.74.0-beta9.zip", - "reference": null, - "shasum": "6b1072242183699164f1717d996bb165769c1b6b" + "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/80ff0e3b2124e61b4b39e2535709452f70bff367", + "reference": "80ff0e3b2124e61b4b39e2535709452f70bff367", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "php": ">=5.3" }, - "type": "magento2-language", + "require-dev": { + "php": ">=5.6", + "phpunit/phpunit": "^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "magento/de_de" - ] - ] + "branch-alias": { + "dev-master": "1.1.x-dev" + } }, + "autoload": { + "psr-4": { + "Base32\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "German (Germany) language" + "authors": [ + { + "name": "Christian Riesen", + "email": "chris.riesen@gmail.com", + "homepage": "http://christianriesen.com", + "role": "Developer" + } + ], + "description": "Base32 encoder/decoder according to RFC 4648", + "homepage": "https://github.com/ChristianRiesen/base32", + "keywords": [ + "base32", + "decode", + "encode", + "rfc4648" + ], + "time": "2018-11-02T09:03:50+00:00" }, { - "name": "magento/language-en_us", - "version": "0.74.0-beta9", + "name": "colinmollenhour/cache-backend-file", + "version": "v1.4.4", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_File.git", + "reference": "184171cc79933a828c3f9b1a1054724cea22a216" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-en_us-0.74.0-beta9.zip", - "reference": null, - "shasum": "70adc34f8d995776366273ff94a0524861b463a2" - }, - "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_File/zipball/184171cc79933a828c3f9b1a1054724cea22a216", + "reference": "184171cc79933a828c3f9b1a1054724cea22a216", + "shasum": "" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/en_us" - ] + "type": "magento-module", + "autoload": { + "classmap": [ + "File.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "English (United States) language" + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "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": "2018-04-05T15:28:43+00:00" }, { - "name": "magento/language-es_es", - "version": "0.74.0-beta9", + "name": "colinmollenhour/cache-backend-redis", + "version": "1.10.6", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", + "reference": "cc941a5f4cc017e11d3eab9061811ba9583ed6bf" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-es_es-0.74.0-beta9.zip", - "reference": null, - "shasum": "ff62ceb7ce109c31c67fb1fdf154a2415bcc8045" + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/cc941a5f4cc017e11d3eab9061811ba9583ed6bf", + "reference": "cc941a5f4cc017e11d3eab9061811ba9583ed6bf", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "magento-hackathon/magento-composer-installer": "*" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/es_es" - ] + "type": "magento-module", + "autoload": { + "classmap": [ + "Cm/Cache/Backend/Redis.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "Spanish (Spain) language" + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "description": "Zend_Cache backend using Redis with full support for tags.", + "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", + "time": "2018-09-24T16:02:07+00:00" }, { - "name": "magento/language-fr_fr", - "version": "0.74.0-beta9", + "name": "colinmollenhour/credis", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/credis.git", + "reference": "8ab6db707c821055f9856b8cf76d5f44beb6fd8a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-fr_fr-0.74.0-beta9.zip", - "reference": null, - "shasum": "69f30ec0de09458d7e99d9c4ea42548f31411ee2" + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/8ab6db707c821055f9856b8cf76d5f44beb6fd8a", + "reference": "8ab6db707c821055f9856b8cf76d5f44beb6fd8a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "php": ">=5.4.0" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/fr_fr" - ] + "type": "library", + "autoload": { + "classmap": [ + "Client.php", + "Cluster.php", + "Sentinel.php", + "Module.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "French (France) language" + "authors": [ + { + "name": "Colin Mollenhour", + "email": "colin@mollenhour.com" + } + ], + "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": "2018-05-07T14:45:04+00:00" }, { - "name": "magento/language-nl_nl", - "version": "0.74.0-beta9", + "name": "colinmollenhour/php-redis-session-abstract", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/php-redis-session-abstract.git", + "reference": "4949ca28b86037abb44984c77bab9d0a4e075643" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-nl_nl-0.74.0-beta9.zip", - "reference": null, - "shasum": "e11c7880d71955b794bccefcf2a26e6f381657a7" + "url": "https://api.github.com/repos/colinmollenhour/php-redis-session-abstract/zipball/4949ca28b86037abb44984c77bab9d0a4e075643", + "reference": "4949ca28b86037abb44984c77bab9d0a4e075643", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "colinmollenhour/credis": "~1.6", + "php": "^5.5 || ^7.0" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/nl_nl" - ] - ] + "type": "library", + "autoload": { + "psr-0": { + "Cm\\RedisSession\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "Dutch (Netherlands) language" + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "description": "A Redis-based session handler with optimistic locking", + "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", + "time": "2019-03-18T14:43:14+00:00" }, { - "name": "magento/language-pt_br", - "version": "0.74.0-beta9", + "name": "composer/ca-bundle", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-pt_br-0.74.0-beta9.zip", - "reference": null, - "shasum": "0b74dfba9407e5d69aca5f6723529e2c1daab7cf" + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" }, - "type": "magento2-language", + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "magento/pt_br" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "Portuguese (Brazil) language" + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2019-01-28T09:30:10+00:00" }, { - "name": "magento/language-zh_cn", - "version": "0.74.0-beta9", + "name": "composer/composer", + "version": "1.8.5", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "949b116f9e7d98d8d276594fed74b580d125c0e6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-zh_cn-0.74.0-beta9.zip", - "reference": null, - "shasum": "360355c1ee1d29b958630427d086ba33607f3ef3" + "url": "https://api.github.com/repos/composer/composer/zipball/949b116f9e7d98d8d276594fed74b580d125c0e6", + "reference": "949b116f9e7d98d8d276594fed74b580d125c0e6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*" + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" }, - "type": "magento2-language", + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "magento/zh_cn" - ] - ] + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "Chinese (China) language" + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2019-04-09T15:46:48+00:00" }, { - "name": "magento/magento-composer-installer", - "version": "0.1.4", + "name": "composer/semver", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/magento/magento-composer-installer.git", - "reference": "7f03451f71e55d52c2bb07325d56a4e6df322f30" + "url": "https://github.com/composer/semver.git", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento-composer-installer/zipball/7f03451f71e55d52c2bb07325d56a4e6df322f30", - "reference": "7f03451f71e55d52c2bb07325d56a4e6df322f30", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", "shasum": "" }, "require": { - "composer-plugin-api": "1.0.0" + "php": "^5.3.2 || ^7.0" }, "require-dev": { - "composer/composer": "*@dev", - "firegento/phpcs": "dev-patch-1", - "mikey179/vfsstream": "*", - "phpunit/phpunit": "*", - "phpunit/phpunit-mock-objects": "dev-master", - "squizlabs/php_codesniffer": "1.4.7", - "symfony/process": "*" + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, - "type": "composer-plugin", + "type": "library", "extra": { - "composer-command-registry": [ - "MagentoHackathon\\Composer\\Magento\\Command\\DeployCommand" - ], - "class": "MagentoHackathon\\Composer\\Magento\\Plugin" + "branch-alias": { + "dev-master": "1.x-dev" + } }, "autoload": { - "psr-0": { - "MagentoHackathon\\Composer\\Magento": "src/" + "psr-4": { + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0" + "MIT" ], "authors": [ { - "name": "Vinai Kopp", - "email": "vinai@netzarbeiter.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Daniel Fahlke aka Flyingmana", - "email": "flyingmana@googlemail.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "Jörg Weller", - "email": "weller@flagbit.de" - }, + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2019-03-19T17:25:45+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", + "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "Karl Spies", - "email": "karl.spies@gmx.net" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Tobias Vogt", - "email": "tobi@webguys.de" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "David Fuhr", - "email": "fuhr@flagbit.de" + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Composer installer for Magento modules", - "homepage": "https://github.com/magento/magento-composer-installer", + "description": "SPDX licenses list and validation library.", "keywords": [ - "composer-installer", - "magento" + "license", + "spdx", + "validator" ], - "time": "2015-03-05 21:40:30" + "time": "2019-03-26T10:23:26+00:00" }, { - "name": "magento/magento2-base", - "version": "0.74.0-beta9", + "name": "composer/xdebug-handler", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "d17708133b6c276d6e42ef887a877866b909d892" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_magento2-base-0.74.0-beta9.zip", - "reference": null, - "shasum": "268b541398bbca13688ade93d66d390b2f30da7a" + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", + "reference": "d17708133b6c276d6e42ef887a877866b909d892", + "shasum": "" }, "require": { - "magento/magento-composer-installer": "*" + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" }, - "replace": { - "blueimp/jquery-file-upload": "5.6.14", - "colinmollenhour/cache-backend-redis": "dev-master#193d377b7fb2e88595578b282fa01a62d1185abc", - "colinmollenhour/credis": "dev-master#f07bbfd4117294f462f0fb19c49221d350bf396f", - "components/jquery": "1.11.0", - "components/jqueryui": "1.10.4", - "linkorb/jsmin-php": "1.1.2", - "tinymce/tinymce": "3.4.7", - "trentrichardson/jquery-timepicker-addon": "1.4.3", - "twbs/bootstrap": "3.1.0" + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, - "type": "magento2-component", - "extra": { - "component_paths": { - "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js", - "colinmollenhour/cache-backend-redis": "lib/internal/Cm/Cache/Backend/Redis.php", - "colinmollenhour/credis": "lib/internal/Credis", - "linkorb/jsmin-php": "lib/internal/JSMin", - "components/jquery": [ - "lib/web/jquery.js", - "lib/web/jquery/jquery.min.js", - "lib/web/jquery/jquery-migrate.js", - "lib/web/jquery/jquery-migrate.min.js" - ], - "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader", - "components/jqueryui": [ - "lib/web/jquery/jquery-ui.js", - "lib/web/jquery/jquery-ui.min.js" - ], - "twbs/bootstrap": "lib/web/jquery/jquery.tabs.js", - "tinymce/tinymce": "lib/web/tiny_mce" - }, - "map": [ - [ - "lib/internal/Cm", - "lib/internal/Cm" - ], - [ - "lib/internal/LinLibertineFont", - "lib/internal/LinLibertineFont" + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-01-28T20:25:53+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "donatj/phpuseragentparser", + "version": "v0.13.0", + "source": { + "type": "git", + "url": "https://github.com/donatj/PhpUserAgent.git", + "reference": "5f2da266d2a386f9b231d4344ae37baf7a467c2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/5f2da266d2a386f9b231d4344ae37baf7a467c2d", + "reference": "5f2da266d2a386f9b231d4344ae37baf7a467c2d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "camspiers/json-pretty": "0.1.*", + "donatj/drop": "*", + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "files": [ + "src/UserAgentParser.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jesse G. Donat", + "email": "donatj@gmail.com", + "homepage": "http://donatstudios.com", + "role": "Developer" + } + ], + "description": "Lightning fast, minimalist PHP UserAgent string parser.", + "homepage": "http://donatstudios.com/PHP-Parser-HTTP_USER_AGENT", + "keywords": [ + "browser", + "browser detection", + "parser", + "user agent", + "useragent" + ], + "time": "2019-03-08T20:52:23+00:00" + }, + { + "name": "dotmailer/dotmailer-magento2-extension", + "version": "3.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/dotmailer/dotmailer-magento2-extension/dotmailer-dotmailer-magento2-extension-3.1.1.0.zip", + "reference": null, + "shasum": "2ede8827f7faacf72f6bc2004f9d4325f61cbd3f" + }, + "require": { + "magento/framework": ">=100 <103", + "magento/module-backend": ">=100 <102", + "magento/module-catalog": ">=101 <104", + "magento/module-catalog-inventory": "100.*", + "magento/module-catalog-rule": ">=100 <102", + "magento/module-checkout": "100.*", + "magento/module-config": ">=100 <103", + "magento/module-cron": "100.*", + "magento/module-customer": ">=100 <103", + "magento/module-directory": "100.*", + "magento/module-eav": ">=100 <103", + "magento/module-email": ">=100 <102", + "magento/module-newsletter": "100.*", + "magento/module-payment": "100.*", + "magento/module-product-alert": "100.*", + "magento/module-quote": ">=100 <102", + "magento/module-reports": "100.*", + "magento/module-review": ">=100 <102", + "magento/module-sales": ">=100 <103", + "magento/module-sales-rule": ">=100 <102", + "magento/module-send-friend": "100.*", + "magento/module-shipping": "100.*", + "magento/module-store": ">=100 <102", + "magento/module-ui": ">=100 <102", + "magento/module-user": ">=100 <102", + "magento/module-wishlist": ">=100 <102" + }, + "require-dev": { + "magento/marketplace-eqp": "dev-master", + "phpmd/phpmd": "@stable", + "squizlabs/php_codesniffer": "@stable" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Dotdigitalgroup\\Email\\": "" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Calin Diacon", + "email": "calin.diacon@dotmailer.com" + }, + { + "name": "Adeel Qamar", + "email": "adeel.qamar@dotmailer.com" + }, + { + "name": "Zygimantas", + "email": "zygimantas.simkus@dotmailer.com" + } + ], + "description": "dotmailer integration for magento 2" + }, + { + "name": "elasticsearch/elasticsearch", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/elastic/elasticsearch-php.git", + "reference": "b237a37b2cdf23a5a17fd3576cdea771394ad00d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/b237a37b2cdf23a5a17fd3576cdea771394ad00d", + "reference": "b237a37b2cdf23a5a17fd3576cdea771394ad00d", + "shasum": "" + }, + "require": { + "ext-json": ">=1.3.7", + "guzzlehttp/ringphp": "~1.0", + "php": "^7.0", + "psr/log": "~1.0" + }, + "require-dev": { + "cpliakas/git-wrapper": "~1.0", + "doctrine/inflector": "^1.1", + "mockery/mockery": "0.9.4", + "phpstan/phpstan-shim": "0.8.3", + "phpunit/phpunit": "6.3.0", + "squizlabs/php_codesniffer": "3.0.2", + "symfony/finder": "^2.8", + "symfony/yaml": "^2.8" + }, + "suggest": { + "ext-curl": "*", + "monolog/monolog": "Allows for client-level logging and tracing" + }, + "type": "library", + "autoload": { + "psr-4": { + "Elasticsearch\\": "src/Elasticsearch/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Zachary Tong" + } + ], + "description": "PHP Client for Elasticsearch", + "keywords": [ + "client", + "elasticsearch", + "search" + ], + "time": "2019-01-08T18:53:46+00:00" + }, + { + "name": "endroid/qr-code", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "a9a57ab57ac75928fcdcfb2a71179963ff6fe573" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/a9a57ab57ac75928fcdcfb2a71179963ff6fe573", + "reference": "a9a57ab57ac75928fcdcfb2a71179963ff6fe573", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^1.0.3", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^1.0", + "myclabs/php-enum": "^1.5", + "php": ">=5.6", + "symfony/options-resolver": ">=2.7", + "symfony/property-access": ">=2.7" + }, + "require-dev": { + "phpunit/phpunit": ">=5.7", + "symfony/asset": ">=2.7", + "symfony/browser-kit": ">=2.7", + "symfony/finder": ">=2.7", + "symfony/framework-bundle": ">=2.7", + "symfony/http-kernel": ">=2.7", + "symfony/templating": ">=2.7", + "symfony/yaml": ">=2.7" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/QrCode", + "keywords": [ + "bundle", + "code", + "endroid", + "flex", + "qr", + "qrcode", + "symfony" + ], + "time": "2017-10-22T18:56:00+00:00" + }, + { + "name": "google/recaptcha", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/google/recaptcha.git", + "reference": "e7add3be59211482ecdb942288f52da64a35f61a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/recaptcha/zipball/e7add3be59211482ecdb942288f52da64a35f61a", + "reference": "e7add3be59211482ecdb942288f52da64a35f61a", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2.20|^2.12", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^4.8.36|^5.7.27|^6.59|^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "ReCaptcha\\": "src/ReCaptcha" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", + "homepage": "https://www.google.com/recaptcha/", + "keywords": [ + "Abuse", + "captcha", + "recaptcha", + "spam" + ], + "time": "2018-08-05T09:31:53+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "time": "2018-07-31T13:22:33+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-10-12T19:18:40+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.8", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2019-01-14T23:55:14+00:00" + }, + { + "name": "khanamiryan/qrcode-detector-decoder", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/khanamiryan/php-qrcode-detector-decoder.git", + "reference": "a75482d3bc804e3f6702332bfda6cccbb0dfaa76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/khanamiryan/php-qrcode-detector-decoder/zipball/a75482d3bc804e3f6702332bfda6cccbb0dfaa76", + "reference": "a75482d3bc804e3f6702332bfda6cccbb0dfaa76", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Zxing\\": "lib/" + }, + "files": [ + "lib/Common/customFunctions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ashot Khanamiryan", + "email": "a.khanamiryan@gmail.com", + "homepage": "https://github.com/khanamiryan", + "role": "Developer" + } + ], + "description": "QR code decoder / reader", + "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder/", + "keywords": [ + "barcode", + "qr", + "zxing" + ], + "time": "2018-04-26T11:41:33+00:00" + }, + { + "name": "klarna/m2-payments", + "version": "7.1.0", + "require": { + "klarna/module-core": "5.1.0", + "klarna/module-kp": "6.1.0", + "klarna/module-ordermanagement": "5.0.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "metapackage", + "license": [ + "Apache-2.0" + ], + "description": "Klarna Payments for Magento 2 (CE & EE)" + }, + { + "name": "klarna/module-core", + "version": "5.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/klarna/module-core/klarna-module-core-5.1.0.0.zip", + "reference": null, + "shasum": "050cc44c0077880e6a364e93f60d607cfd33c813" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "magento/framework": "^100.1||^101.0||^102.0", + "magento/module-bundle": "^100.1", + "magento/module-catalog": "^102.0||^103.0", + "magento/module-config": "^101.0||^102.0", + "magento/module-customer": "^101.0||^102.0", + "magento/module-directory": "^100.1", + "magento/module-payment": "^100.2", + "magento/module-quote": "^101.0", + "magento/module-sales": "^101.0||^102.0", + "magento/module-store": "^100.1||^101.0", + "magento/module-tax": "^100.1", + "php": "~7.0.13|~7.1.0|~7.2.0", + "psr/log": "^1.0", + "ramsey/uuid": "3.6.1||^3.7" + }, + "conflict": { + "magento/module-payment": "100.0.8 || 100.1.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "magento2-module", + "autoload": { + "psr-4": { + "Klarna\\Core\\": "." + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joe Constant", + "email": "joe.constant@klarna.com" + }, + { + "name": "Jason Grim", + "email": "jason.grim@klarna.com" + }, + { + "name": "Fei Chen", + "email": "fei.chen@klarna.com" + } + ], + "description": "Klarna Core Magento 2 Extension" + }, + { + "name": "klarna/module-kp", + "version": "6.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/klarna/module-kp/klarna-module-kp-6.1.0.0.zip", + "reference": null, + "shasum": "cf1911ce01da43e226fced1d3d72baec66875393" + }, + "require": { + "klarna/module-core": "^4.0||^5.0", + "klarna/module-ordermanagement": "^4.0||^5.0", + "magento/framework": "^100.1||^101.0||^102.0", + "magento/module-checkout": "^100.1", + "magento/module-customer": "^100.1||^101.0||^102.0", + "magento/module-directory": "^100.1", + "magento/module-payment": "^100.1", + "magento/module-quote": "^100.1||^101.0", + "magento/module-sales": "^100.1||^101.0||^102.0", + "magento/module-store": "^100.1||^101.0", + "php": "~7.0.13|~7.1.0|~7.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "magento/framework": "^101.0.0", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "magento2-module", + "autoload": { + "psr-4": { + "Klarna\\Kp\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joe Constant", + "email": "joe.constant@klarna.com" + }, + { + "name": "Jason Grim", + "email": "jason.grim@klarna.com" + }, + { + "name": "Fei Chen", + "email": "fei.chen@klarna.com" + }, + { + "name": "Dario Kassler", + "email": "dario.kassler@klarna.com" + } + ], + "description": "Klarna Payments Magento 2 Extension" + }, + { + "name": "klarna/module-ordermanagement", + "version": "5.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/klarna/module-ordermanagement/klarna-module-ordermanagement-5.0.3.0.zip", + "reference": null, + "shasum": "5a73ab885349d4c7f9a56dc9465c4ff712e808ca" + }, + "require": { + "klarna/module-core": "^4.0||^5.0", + "magento/framework": "^102.0", + "magento/module-payment": "^100.1", + "magento/module-quote": "^100.1||^101.0||^102.0", + "magento/module-sales": "^100.1||^101.0||^102.0", + "magento/module-store": "^100.1||^101.0", + "php": "~7.1.0|~7.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "magento/framework": "^101.0.0", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "magento2-module", + "autoload": { + "psr-4": { + "Klarna\\Ordermanagement\\": "." + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joe Constant", + "email": "joe.constant@klarna.com" + }, + { + "name": "Jason Grim", + "email": "jason.grim@klarna.com" + }, + { + "name": "Fei Chen", + "email": "fei.chen@klarna.com" + }, + { + "name": "Dario Kassler", + "email": "dario.kassler@klarna.com" + } + ], + "description": "Klarna Order Management Magento 2 Extension" + }, + { + "name": "magento/composer", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/magento/composer.git", + "reference": "6fb9eb3dd72a5e70aa53983f132f8e1883e79978" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/composer/zipball/6fb9eb3dd72a5e70aa53983f132f8e1883e79978", + "reference": "6fb9eb3dd72a5e70aa53983f132f8e1883e79978", + "shasum": "" + }, + "require": { + "composer/composer": "^1.6", + "php": "~7.1.3|~7.2.0", + "symfony/console": "~4.0.0 || ~4.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~7.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Magento\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Magento composer library helps to instantiate Composer application and run composer commands.", + "time": "2018-06-29T18:46:51+00:00" + }, + { + "name": "magento/framework", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework/magento-framework-102.0.1.0.zip", + "reference": null, + "shasum": "399d85904a005db76ce518a265cfdaff68d02984" + }, + "require": { + "colinmollenhour/php-redis-session-abstract": "~1.4.0", + "composer/composer": "^1.6", + "ext-bcmath": "*", + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-iconv": "*", + "ext-openssl": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "ext-xsl": "*", + "lib-libxml": "*", + "magento/zendframework1": "~1.14.0", + "monolog/monolog": "^1.17", + "oyejorge/less.php": "~1.7.0", + "php": "~7.1.3||~7.2.0", + "symfony/console": "~4.1.0", + "symfony/process": "~4.1.0", + "tedivm/jshrink": "~1.3.0", + "zendframework/zend-code": "~3.3.0", + "zendframework/zend-crypt": "^2.6.0", + "zendframework/zend-http": "^2.6.0", + "zendframework/zend-mvc": "~2.7.0", + "zendframework/zend-stdlib": "^2.7.7", + "zendframework/zend-uri": "^2.5.1", + "zendframework/zend-validator": "^2.6.0" + }, + "suggest": { + "ext-imagick": "Use Image Magick >=3.0.0 as an optional alternative image processing library" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/framework-amqp", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework-amqp/magento-framework-amqp-100.3.1.0.zip", + "reference": null, + "shasum": "40a4d6799c43dd9eed1f7dba4ca2eb6b26518966" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0", + "php-amqplib/php-amqplib": "~2.7.0" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\Amqp\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/framework-bulk", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework-bulk/magento-framework-bulk-100.3.1.0.zip", + "reference": null, + "shasum": "efa487ceac1c91824797e1f8a87d9b6bd2fdfa3a" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\Bulk\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/framework-message-queue", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework-message-queue/magento-framework-message-queue-100.3.1.0.zip", + "reference": null, + "shasum": "51901caed892f2e26241677df2f72deaa010a1a3" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\MessageQueue\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/inventory-composer-installer", + "version": "1.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/inventory-composer-installer/magento-inventory-composer-installer-1.1.0.0.zip", + "reference": null, + "shasum": "c52566b82926bb37487a2b3cb2c8ae091be9be9e" + }, + "require": { + "composer-plugin-api": "^1.1", + "magento/framework": "*" + }, + "require-dev": { + "composer/composer": "*" + }, + "type": "composer-plugin", + "extra": { + "class": "Magento\\InventoryComposerInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "Magento\\InventoryComposerInstaller\\": "src" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Composer plugin for Magento Multi Source Inventory" + }, + { + "name": "magento/inventory-composer-metapackage", + "version": "1.1.1", + "require": { + "magento/inventory-composer-installer": "1.1.0", + "magento/module-inventory": "1.0.4", + "magento/module-inventory-admin-ui": "1.0.4", + "magento/module-inventory-api": "1.0.4", + "magento/module-inventory-bundle-product": "1.0.3", + "magento/module-inventory-bundle-product-admin-ui": "1.0.3", + "magento/module-inventory-cache": "1.0.3", + "magento/module-inventory-catalog": "1.0.4", + "magento/module-inventory-catalog-admin-ui": "1.0.4", + "magento/module-inventory-catalog-api": "1.0.4", + "magento/module-inventory-catalog-search": "1.0.4", + "magento/module-inventory-configurable-product": "1.0.4", + "magento/module-inventory-configurable-product-admin-ui": "1.0.4", + "magento/module-inventory-configurable-product-indexer": "1.0.3", + "magento/module-inventory-configuration": "1.0.4", + "magento/module-inventory-configuration-api": "1.0.4", + "magento/module-inventory-distance-based-source-selection": "1.0.0", + "magento/module-inventory-distance-based-source-selection-admin-ui": "1.0.0", + "magento/module-inventory-distance-based-source-selection-api": "1.0.0", + "magento/module-inventory-elasticsearch": "1.0.0", + "magento/module-inventory-grouped-product": "1.0.3", + "magento/module-inventory-grouped-product-admin-ui": "1.0.4", + "magento/module-inventory-grouped-product-indexer": "1.0.3", + "magento/module-inventory-import-export": "1.0.4", + "magento/module-inventory-indexer": "1.0.4", + "magento/module-inventory-low-quantity-notification": "1.0.4", + "magento/module-inventory-low-quantity-notification-admin-ui": "1.0.4", + "magento/module-inventory-low-quantity-notification-api": "1.0.3", + "magento/module-inventory-multi-dimensional-indexer-api": "1.0.4", + "magento/module-inventory-product-alert": "1.0.4", + "magento/module-inventory-reservations": "1.0.4", + "magento/module-inventory-reservations-api": "1.0.3", + "magento/module-inventory-sales": "1.0.4", + "magento/module-inventory-sales-admin-ui": "1.0.4", + "magento/module-inventory-sales-api": "1.0.4", + "magento/module-inventory-sales-frontend-ui": "1.0.3", + "magento/module-inventory-setup-fixture-generator": "1.0.0", + "magento/module-inventory-shipping": "1.0.4", + "magento/module-inventory-shipping-admin-ui": "1.0.4", + "magento/module-inventory-source-deduction-api": "1.0.4", + "magento/module-inventory-source-selection": "1.0.4", + "magento/module-inventory-source-selection-api": "1.1.0" + }, + "type": "metapackage", + "description": "Metapackage with Magento Inventory modules for simple installation" + }, + { + "name": "magento/language-de_de", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-de_de/magento-language-de_de-100.3.1.0.zip", + "reference": null, + "shasum": "4fa504af2bb938cadea2376cb17caa0832791bfa" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "German (Germany) language" + }, + { + "name": "magento/language-en_us", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-en_us/magento-language-en_us-100.3.1.0.zip", + "reference": null, + "shasum": "13e74a7d83dbd49dec496aeaedc5ad0dc82dacd8" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "English (United States) language" + }, + { + "name": "magento/language-es_es", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-es_es/magento-language-es_es-100.3.1.0.zip", + "reference": null, + "shasum": "ea3dd068fe9caad30835e9dff5a2aab96032e4c0" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Spanish (Spain) language" + }, + { + "name": "magento/language-fr_fr", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-fr_fr/magento-language-fr_fr-100.3.1.0.zip", + "reference": null, + "shasum": "9ab44b7845abb6f1b031864c815de6ae836dbaf7" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "French (France) language" + }, + { + "name": "magento/language-nl_nl", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-nl_nl/magento-language-nl_nl-100.3.1.0.zip", + "reference": null, + "shasum": "060a175c553e80abf77f877a6d92746658e270f0" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Dutch (Netherlands) language" + }, + { + "name": "magento/language-pt_br", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-pt_br/magento-language-pt_br-100.3.1.0.zip", + "reference": null, + "shasum": "50c59308621d44fe8def4a93253087fa69bdae70" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Portuguese (Brazil) language" + }, + { + "name": "magento/language-zh_hans_cn", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-zh_hans_cn/magento-language-zh_hans_cn-100.3.1.0.zip", + "reference": null, + "shasum": "8b2e9a40c956bc05c50b02ea54e10c00d9d24d78" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Chinese (China) language" + }, + { + "name": "magento/magento-composer-installer", + "version": "0.1.13", + "source": { + "type": "git", + "url": "https://github.com/magento/magento-composer-installer.git", + "reference": "8b6c32f53b4944a5d6656e86344cd0f9784709a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/magento-composer-installer/zipball/8b6c32f53b4944a5d6656e86344cd0f9784709a1", + "reference": "8b6c32f53b4944a5d6656e86344cd0f9784709a1", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0" + }, + "replace": { + "magento-hackathon/magento-composer-installer": "*" + }, + "require-dev": { + "composer/composer": "*@dev", + "firegento/phpcs": "dev-patch-1", + "mikey179/vfsstream": "*", + "phpunit/phpunit": "*", + "phpunit/phpunit-mock-objects": "dev-master", + "squizlabs/php_codesniffer": "1.4.7", + "symfony/process": "*" + }, + "type": "composer-plugin", + "extra": { + "composer-command-registry": [ + "MagentoHackathon\\Composer\\Magento\\Command\\DeployCommand" + ], + "class": "MagentoHackathon\\Composer\\Magento\\Plugin" + }, + "autoload": { + "psr-0": { + "MagentoHackathon\\Composer\\Magento": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Vinai Kopp", + "email": "vinai@netzarbeiter.com" + }, + { + "name": "Daniel Fahlke aka Flyingmana", + "email": "flyingmana@googlemail.com" + }, + { + "name": "Jörg Weller", + "email": "weller@flagbit.de" + }, + { + "name": "Karl Spies", + "email": "karl.spies@gmx.net" + }, + { + "name": "Tobias Vogt", + "email": "tobi@webguys.de" + }, + { + "name": "David Fuhr", + "email": "fuhr@flagbit.de" + } + ], + "description": "Composer installer for Magento modules", + "homepage": "https://github.com/magento/magento-composer-installer", + "keywords": [ + "composer-installer", + "magento" + ], + "time": "2017-12-29T16:45:24+00:00" + }, + { + "name": "magento/magento2-base", + "version": "2.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/magento2-base/magento-magento2-base-2.3.1.0.zip", + "reference": null, + "shasum": "7877828bb63a7cfca5c62c6c6caf6a9c05ab154b" + }, + "require": { + "braintree/braintree_php": "3.35.0", + "composer/composer": "^1.6", + "ext-intl": "*", + "ext-mbstring": "*", + "magento/composer": "~1.4.0", + "magento/magento-composer-installer": "*", + "magento/zendframework1": "~1.14.1", + "monolog/monolog": "^1.17", + "oyejorge/less.php": "~1.7.0", + "pelago/emogrifier": "^2.0.0", + "php": "~7.1.3||~7.2.0", + "phpseclib/phpseclib": "2.0.*", + "symfony/console": "~4.1.0", + "symfony/event-dispatcher": "~4.1.0", + "tedivm/jshrink": "~1.3.0", + "tubalmartin/cssmin": "4.1.1", + "zendframework/zend-code": "~3.3.0", + "zendframework/zend-config": "^2.6.0", + "zendframework/zend-console": "^2.6.0", + "zendframework/zend-crypt": "^2.6.0", + "zendframework/zend-di": "^2.6.1", + "zendframework/zend-eventmanager": "^2.6.3", + "zendframework/zend-form": "^2.10.0", + "zendframework/zend-http": "^2.6.0", + "zendframework/zend-i18n": "^2.7.3", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.1", + "zendframework/zend-modulemanager": "^2.7", + "zendframework/zend-mvc": "~2.7.0", + "zendframework/zend-serializer": "^2.7.2", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.8", + "zendframework/zend-soap": "^2.7.0", + "zendframework/zend-stdlib": "^2.7.7", + "zendframework/zend-text": "^2.6.0", + "zendframework/zend-uri": "^2.5.1", + "zendframework/zend-validator": "^2.6.0", + "zendframework/zend-view": "~2.10.0" + }, + "conflict": { + "gene/bluefoot": "*" + }, + "replace": { + "blueimp/jquery-file-upload": "5.6.14", + "components/jquery": "1.11.0", + "components/jqueryui": "1.10.4", + "tinymce/tinymce": "3.4.7", + "trentrichardson/jquery-timepicker-addon": "1.4.3", + "twbs/bootstrap": "3.1.0" + }, + "type": "magento2-component", + "extra": { + "component_paths": { + "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js", + "components/jquery": [ + "lib/web/jquery.js", + "lib/web/jquery/jquery.min.js", + "lib/web/jquery/jquery-migrate.js" ], + "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader", + "components/jqueryui": "lib/web/jquery/jquery-ui.js", + "twbs/bootstrap": "lib/web/jquery/jquery.tabs.js", + "tinymce/tinymce": "lib/web/tiny_mce_4" + }, + "map": [ [ - "lib/internal/Credis", - "lib/internal/Credis" + ".github", + ".github" ], [ - "lib/internal/CardinalCommerce", - "lib/internal/CardinalCommerce" + ".htaccess", + ".htaccess" ], [ - "lib/internal/JSMin", - "lib/internal/JSMin" + ".htaccess.sample", + ".htaccess.sample" ], [ - "lib/.htaccess", - "lib/.htaccess" + ".php_cs.dist", + ".php_cs.dist" ], [ - "lib/web/lib", - "lib/web/lib" + ".travis.yml", + ".travis.yml" ], [ - "lib/web/requirejs", - "lib/web/requirejs" + ".user.ini", + ".user.ini" ], [ - "lib/web/prototype", - "lib/web/prototype" + "COPYING.txt", + "COPYING.txt" ], [ - "lib/web/moment.js", - "lib/web/moment.js" + "Gruntfile.js.sample", + "Gruntfile.js.sample" ], [ - "lib/web/i18n", - "lib/web/i18n" + "LICENSE.txt", + "LICENSE.txt" ], [ - "lib/web/varien", - "lib/web/varien" + "LICENSE_AFL.txt", + "LICENSE_AFL.txt" ], [ - "lib/web/blank.html", - "lib/web/blank.html" + "app/.htaccess", + "app/.htaccess" ], [ - "lib/web/scriptaculous", - "lib/web/scriptaculous" + "app/autoload.php", + "app/autoload.php" ], [ - "lib/web/ko", - "lib/web/ko" + "app/bootstrap.php", + "app/bootstrap.php" ], [ - "lib/web/modernizr", - "lib/web/modernizr" + "app/design/adminhtml/Magento", + "app/design/adminhtml/Magento" ], [ - "lib/web/spacer.gif", - "lib/web/spacer.gif" + "app/design/frontend/Magento", + "app/design/frontend/Magento" ], [ - "lib/web/images", - "lib/web/images" + "app/etc/NonComposerComponentRegistration.php", + "app/etc/NonComposerComponentRegistration.php" ], [ - "lib/web/matchMedia.js", - "lib/web/matchMedia.js" + "app/etc/db_schema.xml", + "app/etc/db_schema.xml" ], [ - "lib/web/extjs", - "lib/web/extjs" + "app/etc/di.xml", + "app/etc/di.xml" ], [ - "lib/web/css", - "lib/web/css" + "app/etc/registration_globlist.php", + "app/etc/registration_globlist.php" ], [ - "lib/web/fonts", - "lib/web/fonts" + "app/functions.php", + "app/functions.php" ], [ - "lib/web/jquery", - "lib/web/jquery" + "auth.json.sample", + "auth.json.sample" ], [ - "lib/web/less", - "lib/web/less" + "bin/.htaccess", + "bin/.htaccess" ], [ - "lib/web/jquery.js", - "lib/web/jquery.js" + "bin/magento", + "bin/magento" ], [ - "lib/web/underscore.js", - "lib/web/underscore.js" + "dev/.htaccess", + "dev/.htaccess" ], [ - "lib/web/legacy-build.min.js", - "lib/web/legacy-build.min.js" + "dev/tests/acceptance", + "dev/tests/acceptance" ], [ - "lib/web/mage", - "lib/web/mage" + "dev/tests/api-functional/.gitignore", + "dev/tests/api-functional/.gitignore" ], [ - "lib/web/tiny_mce", - "lib/web/tiny_mce" + "dev/tests/api-functional/_files", + "dev/tests/api-functional/_files" ], [ - ".htaccess.sample", - ".htaccess.sample" + "dev/tests/api-functional/config", + "dev/tests/api-functional/config" ], [ - "CONTRIBUTING.md", - "CONTRIBUTING.md" + "dev/tests/api-functional/framework", + "dev/tests/api-functional/framework" ], [ - "package.json", - "package.json" + "dev/tests/api-functional/phpunit_graphql.xml.dist", + "dev/tests/api-functional/phpunit_graphql.xml.dist" ], [ - "bin", - "bin" + "dev/tests/api-functional/phpunit_rest.xml.dist", + "dev/tests/api-functional/phpunit_rest.xml.dist" ], [ - "nginx.conf.sample", - "nginx.conf.sample" + "dev/tests/api-functional/phpunit_soap.xml.dist", + "dev/tests/api-functional/phpunit_soap.xml.dist" ], [ - "var/.htaccess", - "var/.htaccess" + "dev/tests/api-functional/testsuite/Magento", + "dev/tests/api-functional/testsuite/Magento" ], [ - "pub/media/downloadable/.htaccess", - "pub/media/downloadable/.htaccess" + "dev/tests/error_handler.php", + "dev/tests/error_handler.php" ], [ - "pub/media/theme_customization/.htaccess", - "pub/media/theme_customization/.htaccess" + "dev/tests/functional/.gitignore", + "dev/tests/functional/.gitignore" ], [ - "pub/media/customer/.htaccess", - "pub/media/customer/.htaccess" + "dev/tests/functional/.htaccess.sample", + "dev/tests/functional/.htaccess.sample" ], [ - "pub/media/.htaccess", - "pub/media/.htaccess" + "dev/tests/functional/bootstrap.php", + "dev/tests/functional/bootstrap.php" + ], + [ + "dev/tests/functional/composer.json", + "dev/tests/functional/composer.json" + ], + [ + "dev/tests/functional/credentials.xml.dist", + "dev/tests/functional/credentials.xml.dist" + ], + [ + "dev/tests/functional/etc", + "dev/tests/functional/etc" + ], + [ + "dev/tests/functional/isolation.php", + "dev/tests/functional/isolation.php" + ], + [ + "dev/tests/functional/lib", + "dev/tests/functional/lib" + ], + [ + "dev/tests/functional/phpunit.xml.dist", + "dev/tests/functional/phpunit.xml.dist" + ], + [ + "dev/tests/functional/tests", + "dev/tests/functional/tests" + ], + [ + "dev/tests/functional/testsuites/Magento", + "dev/tests/functional/testsuites/Magento" + ], + [ + "dev/tests/functional/utils", + "dev/tests/functional/utils" + ], + [ + "dev/tests/integration/.gitignore", + "dev/tests/integration/.gitignore" + ], + [ + "dev/tests/integration/_files", + "dev/tests/integration/_files" + ], + [ + "dev/tests/integration/bin", + "dev/tests/integration/bin" + ], + [ + "dev/tests/integration/etc", + "dev/tests/integration/etc" + ], + [ + "dev/tests/integration/framework", + "dev/tests/integration/framework" + ], + [ + "dev/tests/integration/phpunit.xml.dist", + "dev/tests/integration/phpunit.xml.dist" + ], + [ + "dev/tests/integration/testsuite/Magento", + "dev/tests/integration/testsuite/Magento" + ], + [ + "dev/tests/integration/tmp", + "dev/tests/integration/tmp" + ], + [ + "dev/tests/js", + "dev/tests/js" + ], + [ + "dev/tests/setup-integration", + "dev/tests/setup-integration" + ], + [ + "dev/tests/static/.gitignore", + "dev/tests/static/.gitignore" + ], + [ + "dev/tests/static/framework", + "dev/tests/static/framework" + ], + [ + "dev/tests/static/get_github_changes.php", + "dev/tests/static/get_github_changes.php" + ], + [ + "dev/tests/static/phpunit-all.xml.dist", + "dev/tests/static/phpunit-all.xml.dist" + ], + [ + "dev/tests/static/phpunit.xml.dist", + "dev/tests/static/phpunit.xml.dist" + ], + [ + "dev/tests/static/testsuite/Magento", + "dev/tests/static/testsuite/Magento" ], [ - "pub/errors", - "pub/errors" + "dev/tests/static/tmp", + "dev/tests/static/tmp" ], [ - "pub/opt", - "pub/opt" + "dev/tests/unit/.gitignore", + "dev/tests/unit/.gitignore" ], [ - "pub/get.php", - "pub/get.php" + "dev/tests/unit/framework", + "dev/tests/unit/framework" ], [ - "pub/static/.htaccess", - "pub/static/.htaccess" + "dev/tests/unit/phpunit.xml.dist", + "dev/tests/unit/phpunit.xml.dist" ], [ - "pub/.htaccess", - "pub/.htaccess" + "dev/tests/unit/tmp", + "dev/tests/unit/tmp" ], [ - "pub/static.php", - "pub/static.php" + "dev/tools", + "dev/tools" ], [ - "pub/cron.php", - "pub/cron.php" + "dev/travis", + "dev/travis" ], [ - "pub/index.php", - "pub/index.php" + "generated", + "generated" ], [ - ".php_cs", - ".php_cs" + "grunt-config.json.sample", + "grunt-config.json.sample" ], [ - "COPYING.txt", - "COPYING.txt" + "index.php", + "index.php" ], [ - "dev/shell", - "dev/shell" + "lib/.htaccess", + "lib/.htaccess" ], [ - "dev/tools", - "dev/tools" + "lib/internal/GnuFreeFont", + "lib/internal/GnuFreeFont" ], [ - "dev/tests/integration/phpunit.xml.dist", - "dev/tests/integration/phpunit.xml.dist" + "lib/internal/LinLibertineFont", + "lib/internal/LinLibertineFont" ], [ - "dev/tests/integration/etc", - "dev/tests/integration/etc" + "lib/web/FormData.js", + "lib/web/FormData.js" ], [ - "dev/tests/integration/tmp", - "dev/tests/integration/tmp" + "lib/web/MutationObserver.js", + "lib/web/MutationObserver.js" ], [ - "dev/tests/integration/framework", - "dev/tests/integration/framework" + "lib/web/blank.html", + "lib/web/blank.html" ], [ - "dev/tests/integration/testsuite/Magento", - "dev/tests/integration/testsuite/Magento" + "lib/web/css", + "lib/web/css" ], [ - "dev/tests/integration/.gitignore", - "dev/tests/integration/.gitignore" + "lib/web/es6-collections.js", + "lib/web/es6-collections.js" ], [ - "dev/tests/functional/composer.json", - "dev/tests/functional/composer.json" + "lib/web/extjs", + "lib/web/extjs" ], [ - "dev/tests/functional/lib", - "dev/tests/functional/lib" + "lib/web/fonts", + "lib/web/fonts" ], [ - "dev/tests/functional/phpunit.xml.dist", - "dev/tests/functional/phpunit.xml.dist" + "lib/web/fotorama", + "lib/web/fotorama" ], [ - "dev/tests/functional/composer.json.dist", - "dev/tests/functional/composer.json.dist" + "lib/web/i18n", + "lib/web/i18n" ], [ - "dev/tests/functional/bootstrap.php", - "dev/tests/functional/bootstrap.php" + "lib/web/images", + "lib/web/images" ], [ - "dev/tests/functional/credentials.xml.dist", - "dev/tests/functional/credentials.xml.dist" + "lib/web/jquery.js", + "lib/web/jquery.js" ], [ - "dev/tests/functional/tests", - "dev/tests/functional/tests" + "lib/web/jquery", + "lib/web/jquery" ], [ - "dev/tests/functional/utils", - "dev/tests/functional/utils" + "lib/web/knockoutjs", + "lib/web/knockoutjs" ], [ - "dev/tests/functional/isolation.php", - "dev/tests/functional/isolation.php" + "lib/web/legacy-build.min.js", + "lib/web/legacy-build.min.js" ], [ - "dev/tests/functional/etc", - "dev/tests/functional/etc" + "lib/web/less", + "lib/web/less" ], [ - "dev/tests/functional/.htaccess", - "dev/tests/functional/.htaccess" + "lib/web/lib", + "lib/web/lib" ], [ - "dev/tests/functional/testsuites/Magento", - "dev/tests/functional/testsuites/Magento" + "lib/web/mage", + "lib/web/mage" ], [ - "dev/tests/functional/.gitignore", - "dev/tests/functional/.gitignore" + "lib/web/magnifier", + "lib/web/magnifier" ], [ - "dev/tests/js/jasmine", - "dev/tests/js/jasmine" + "lib/web/matchMedia.js", + "lib/web/matchMedia.js" ], [ - "dev/tests/api-functional/phpunit.xml.dist", - "dev/tests/api-functional/phpunit.xml.dist" + "lib/web/modernizr", + "lib/web/modernizr" ], [ - "dev/tests/api-functional/config", - "dev/tests/api-functional/config" + "lib/web/moment-timezone-with-data.js", + "lib/web/moment-timezone-with-data.js" ], [ - "dev/tests/api-functional/framework", - "dev/tests/api-functional/framework" + "lib/web/moment.js", + "lib/web/moment.js" ], [ - "dev/tests/api-functional/_files", - "dev/tests/api-functional/_files" + "lib/web/prototype", + "lib/web/prototype" ], [ - "dev/tests/api-functional/testsuite/Magento", - "dev/tests/api-functional/testsuite/Magento" + "lib/web/requirejs", + "lib/web/requirejs" ], [ - "dev/tests/api-functional/.gitignore", - "dev/tests/api-functional/.gitignore" + "lib/web/scriptaculous", + "lib/web/scriptaculous" ], [ - "dev/tests/unit/phpunit.xml.dist", - "dev/tests/unit/phpunit.xml.dist" + "lib/web/spacer.gif", + "lib/web/spacer.gif" ], [ - "dev/tests/unit/tmp", - "dev/tests/unit/tmp" + "lib/web/tiny_mce_4", + "lib/web/tiny_mce_4" ], [ - "dev/tests/unit/framework", - "dev/tests/unit/framework" + "lib/web/underscore.js", + "lib/web/underscore.js" ], [ - "dev/tests/unit/.gitignore", - "dev/tests/unit/.gitignore" + "lib/web/varien", + "lib/web/varien" ], [ - "dev/tests/static/phpunit-all.xml.dist", - "dev/tests/static/phpunit-all.xml.dist" + "nginx.conf.sample", + "nginx.conf.sample" ], [ - "dev/tests/static/phpunit.xml.dist", - "dev/tests/static/phpunit.xml.dist" + "package.json.sample", + "package.json.sample" ], [ - "dev/tests/static/framework", - "dev/tests/static/framework" + "phpserver", + "phpserver" ], [ - "dev/tests/static/testsuite/Magento", - "dev/tests/static/testsuite/Magento" + "pub/.htaccess", + "pub/.htaccess" ], [ - "dev/tests/static/.gitignore", - "dev/tests/static/.gitignore" + "pub/.user.ini", + "pub/.user.ini" ], [ - "dev/.htaccess", - "dev/.htaccess" + "pub/cron.php", + "pub/cron.php" ], [ - "Gruntfile.js", - "Gruntfile.js" + "pub/errors", + "pub/errors" ], [ - "setup", - "setup" + "pub/get.php", + "pub/get.php" ], [ - "LICENSE.txt", - "LICENSE.txt" + "pub/health_check.php", + "pub/health_check.php" ], [ - ".travis.yml", - ".travis.yml" + "pub/index.php", + "pub/index.php" ], [ - "app/bootstrap.php", - "app/bootstrap.php" + "pub/media/.htaccess", + "pub/media/.htaccess" ], [ - "app/design/frontend", - "app/design/frontend" + "pub/media/customer/.htaccess", + "pub/media/customer/.htaccess" ], [ - "app/design/adminhtml", - "app/design/adminhtml" + "pub/media/downloadable/.htaccess", + "pub/media/downloadable/.htaccess" ], [ - "app/etc/di.xml", - "app/etc/di.xml" + "pub/media/import", + "pub/media/import" ], [ - "app/.htaccess", - "app/.htaccess" + "pub/media/theme_customization/.htaccess", + "pub/media/theme_customization/.htaccess" ], [ - "app/functions.php", - "app/functions.php" + "pub/opt", + "pub/opt" ], [ - "app/autoload.php", - "app/autoload.php" + "pub/static.php", + "pub/static.php" ], [ - ".htaccess", - ".htaccess" + "pub/static/.htaccess", + "pub/static/.htaccess" ], [ - "php.ini.sample", - "php.ini.sample" + "setup", + "setup" ], [ - "index.php", - "index.php" + "var/.htaccess", + "var/.htaccess" ], [ - "LICENSE_AFL.txt", - "LICENSE_AFL.txt" + "vendor/.htaccess", + "vendor/.htaccess" ] + ], + "chmod": [ + { + "mask": "0755", + "path": "bin/magento" + } + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Magento 2 Base (Community Edition)" + }, + { + "name": "magento/module-admin-notification", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-admin-notification/magento-module-admin-notification-100.3.1.0.zip", + "reference": null, + "shasum": "e7aea76407406c35e6505d4fce2cb06be409ec64" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdminNotification\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-advanced-pricing-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-advanced-pricing-import-export/magento-module-advanced-pricing-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "fbb58c6284f6eba01927bdcf2be6460650a8eef7" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdvancedPricingImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-advanced-search", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-advanced-search/magento-module-advanced-search-100.3.1.0.zip", + "reference": null, + "shasum": "3dbf902fa79a08b136205c7b2681ad91425a97b5" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdvancedSearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-amqp", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-amqp/magento-module-amqp-100.3.1.0.zip", + "reference": null, + "shasum": "fdf734b25eb5fd29a7a8743b3d1e575ba29aa947" + }, + "require": { + "magento/framework": "102.0.*", + "magento/framework-amqp": "100.3.*", + "magento/framework-message-queue": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Amqp\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-analytics/magento-module-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "c17c1d3353335fb9c9197e715ad7ec117700755c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Analytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-asynchronous-operations", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-asynchronous-operations/magento-module-asynchronous-operations-100.3.1.0.zip", + "reference": null, + "shasum": "9666e0949545697e66d13df886e16915ddfd3ffa" + }, + "require": { + "magento/framework": "102.0.*", + "magento/framework-bulk": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-admin-notification": "100.3.*", + "magento/module-logging": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AsynchronousOperations\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-authorization", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorization/magento-module-authorization-100.3.1.0.zip", + "reference": null, + "shasum": "c2a05780a4568e92634a46199c6925fecb4c32e3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Authorization\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Authorization module provides access to Magento ACL functionality." + }, + { + "name": "magento/module-authorizenet", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorizenet/magento-module-authorizenet-100.3.1.0.zip", + "reference": null, + "shasum": "ab9dc9018f1a5b71cfaa54c1975d6ee6b5c7610c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Authorizenet\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-authorizenet-acceptjs", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorizenet-acceptjs/magento-module-authorizenet-acceptjs-100.3.0.0.zip", + "reference": null, + "shasum": "16bc1b50a4e7f63bfa3869fa2c3bd4c67cedd8a3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AuthorizenetAcceptjs\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-backend", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-backend/magento-module-backend-101.0.1.0.zip", + "reference": null, + "shasum": "3670764e864583abb604107c13490e239ba094d8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backup": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-developer": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-translation": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Backend\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-backup", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-backup/magento-module-backup-100.3.1.0.zip", + "reference": null, + "shasum": "bb5a040e418e42554c0887673e21420479e8bf76" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cron": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Backup\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-braintree", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-braintree/magento-module-braintree-100.3.1.0.zip", + "reference": null, + "shasum": "bc99da6e5eef549dc2542cfe914aa7742361e2c6" + }, + "require": { + "braintree/braintree_php": "3.35.0", + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-instant-purchase": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-paypal": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-ui": "101.1.*", + "magento/module-vault": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout-agreements": "100.3.*", + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Braintree\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-bundle", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-bundle/magento-module-bundle-100.3.1.0.zip", + "reference": null, + "shasum": "b1ce50b01d2d8997e1f6dcfc9b2dc82f47d987db" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle-sample-data": "Sample Data version: 100.3.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Bundle\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-bundle-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-bundle-graph-ql/magento-module-bundle-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "4adf0dc50f886e121dde5f906ceaff8630a96697" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\BundleGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-bundle-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-bundle-import-export/magento-module-bundle-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "bdd21ea7945b87b643de52d93fb63b4c6ee625c9" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\BundleImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cache-invalidate", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cache-invalidate/magento-module-cache-invalidate-100.3.1.0.zip", + "reference": null, + "shasum": "ee84c4c87bc878f08f1c325f82b88a7f8a2b4d85" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-page-cache": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CacheInvalidate\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-captcha", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-captcha/magento-module-captcha-100.3.1.0.zip", + "reference": null, + "shasum": "1d37fe2ce55a611af45abf9a79bf3ab45b18fb41" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-session": "^2.7.3" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Captcha\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog", + "version": "103.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog/magento-module-catalog-103.0.1.0.zip", + "reference": null, + "shasum": "9f6308528cd0b385c47300ac96e88a48c7462958" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-indexer": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-product-alert": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-url-rewrite": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-sample-data": "Sample Data version: 100.3.*", + "magento/module-cookie": "100.3.*", + "magento/module-sales": "102.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Catalog\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-analytics/magento-module-catalog-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "78dad80df624ec870cd1fe528eb6bf23dd2a9174" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-catalog": "103.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-graph-ql/magento-module-catalog-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "cab0f652a82a7011271931cfedbb8c13f362ea8c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-eav-graph-ql": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*", + "magento/module-store-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-import-export", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-import-export/magento-module-catalog-import-export-101.0.1.0.zip", + "reference": null, + "shasum": "240b1ea27fb0bdebd2cf674ce280917363463216" + }, + "require": { + "ext-ctype": "*", + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-inventory", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-inventory/magento-module-catalog-inventory-100.3.1.0.zip", + "reference": null, + "shasum": "c7c8e7308fa130fa471cf228537506667473d982" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogInventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-inventory-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-inventory-graph-ql/magento-module-catalog-inventory-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "5438ed8a7e381b27d5325801f87a6a844005ff08" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogInventoryGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-rule", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-rule/magento-module-catalog-rule-101.1.1.0.zip", + "reference": null, + "shasum": "9892c5ab997236ed1611d9a02ea9a5be925475d6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-rule": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-rule-sample-data": "Sample Data version: 100.3.*", + "magento/module-import-export": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogRule\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-rule-configurable", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-rule-configurable/magento-module-catalog-rule-configurable-100.3.1.0.zip", + "reference": null, + "shasum": "0281e9723bb534ba2e12a55ae11260f6904485d6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-rule": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogRuleConfigurable\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-search", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-search/magento-module-catalog-search-101.0.1.0.zip", + "reference": null, + "shasum": "933c002006e94c91b14203178d694acbe3308f86" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-indexer": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogSearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Catalog search" + }, + { + "name": "magento/module-catalog-url-rewrite", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-url-rewrite/magento-module-catalog-url-rewrite-100.3.1.0.zip", + "reference": null, + "shasum": "7a978d3ff25ffebd252182269ecd18039159af70" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-url-rewrite": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogUrlRewrite\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-url-rewrite-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-url-rewrite-graph-ql/magento-module-catalog-url-rewrite-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "408be2e9c2c72d92f43764bfeeedd0063538fc23" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-url-rewrite-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogUrlRewriteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-widget", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-widget/magento-module-catalog-widget-100.3.1.0.zip", + "reference": null, + "shasum": "5ff1f431ea8c9453e632e3892afc50f07f45f5a6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-rule": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogWidget\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-checkout", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-checkout/magento-module-checkout-100.3.1.0.zip", + "reference": null, + "shasum": "259dfe67c0b4d6dc00746ac7f004999c58f1fded" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-msrp": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cookie": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Checkout\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-checkout-agreements", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-checkout-agreements/magento-module-checkout-agreements-100.3.1.0.zip", + "reference": null, + "shasum": "fe21cdbe902b50a634df92ebe4bac90967140671" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CheckoutAgreements\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms", + "version": "103.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms/magento-module-cms-103.0.1.0.zip", + "reference": null, + "shasum": "32b4db597a118386cfe5619f0a39129ab6f28e06" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-email": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-variable": "100.3.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cms-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Cms\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms-graph-ql/magento-module-cms-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "fae2f46721d225970beeb9e1cb26eff1dac6ad7f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*", + "magento/module-store-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CmsGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms-url-rewrite", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms-url-rewrite/magento-module-cms-url-rewrite-100.3.1.0.zip", + "reference": null, + "shasum": "66b9ca23c0af7c8387cfb24028128a64bf3337f4" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CmsUrlRewrite\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms-url-rewrite-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms-url-rewrite-graph-ql/magento-module-cms-url-rewrite-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "3b58ec81afb10bbd30a2e011f887635b69803783" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite-graph-ql": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-cms-url-rewrite": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CmsUrlRewriteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-config", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-config/magento-module-config-101.1.1.0.zip", + "reference": null, + "shasum": "9458355eb5e383f148fbf503fe75d40d02de60b4" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cron": "100.3.*", + "magento/module-deploy": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-email": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Config\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-import-export/magento-module-configurable-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "ac89ef960f75a7fcdf635dc3691366f7b0f41550" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-product", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-product/magento-module-configurable-product-100.3.1.0.zip", + "reference": null, + "shasum": "2f0f6c53b969b8b4378e91933ba2fa129fd0763c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-configurable-sample-data": "Sample Data version: 100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-product-links-sample-data": "Sample Data version: 100.3.*", + "magento/module-product-video": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-product-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-product-graph-ql/magento-module-configurable-product-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "6cf1902c260aa70630b96b806a49844b42136b9c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-configurable-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableProductGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-product-sales", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-product-sales/magento-module-configurable-product-sales-100.3.1.0.zip", + "reference": null, + "shasum": "ab8e7350ef1fdc6e55f2dfd708d095560afe9d5b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-configurable-product": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableProductSales\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-contact", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-contact/magento-module-contact-100.3.1.0.zip", + "reference": null, + "shasum": "4aed3599fdc7f885086726076d52e4b800b3d0ec" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Contact\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cookie", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cookie/magento-module-cookie-100.3.1.0.zip", + "reference": null, + "shasum": "2b52880fe617d8e17746b8c637f56303063f54d0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-backend": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Cookie\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cron", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cron/magento-module-cron-100.3.1.0.zip", + "reference": null, + "shasum": "953c6de628fbf6c2c02943c9fb14df9c384498c6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Cron\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-currency-symbol", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-currency-symbol/magento-module-currency-symbol-100.3.1.0.zip", + "reference": null, + "shasum": "5967df5328174a24f59bdad5cc8e7a825878b195" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CurrencySymbol\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer/magento-module-customer-102.0.1.0.zip", + "reference": null, + "shasum": "9f99c836860ea853b7803e34c40f0874019f2a71" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-integration": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-review": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cookie": "100.3.*", + "magento/module-customer-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Customer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer-analytics/magento-module-customer-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "6a055c7b8b46eb899cd5161a1ecc0874e576f3cd" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-customer": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer-graph-ql/magento-module-customer-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "127e9dfe4e63721218264c9046272f43ddce13de" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-integration": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer-import-export/magento-module-customer-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "f1cdc6d8fe40bb058e76a0a0641230769a59a774" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-deploy", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-deploy/magento-module-deploy-100.3.1.0.zip", + "reference": null, + "shasum": "40006c50c2e0d0ee9d17aebb98cc12e9b76a59f9" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "cli_commands.php", + "registration.php" + ], + "psr-4": { + "Magento\\Deploy\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-developer", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-developer/magento-module-developer-100.3.1.0.zip", + "reference": null, + "shasum": "007a40f6eaceb427b1a9f24f102bb1c5268c97e0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Developer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-dhl", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-dhl/magento-module-dhl-100.3.1.0.zip", + "reference": null, + "shasum": "a54951a456d9ae56103fcac8a342fc8104f433e2" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Dhl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-directory", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-directory/magento-module-directory-100.3.1.0.zip", + "reference": null, + "shasum": "401fd817778dcfb8b7091ede60e3b0bb99267051" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Directory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-directory-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-directory-graph-ql/magento-module-directory-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "1d9d2307d514ea00d5a8a66cf0556d83986c6189" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-directory": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DirectoryGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-downloadable", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-downloadable/magento-module-downloadable-100.3.1.0.zip", + "reference": null, + "shasum": "c3f2cd868754a23af542b2b19d72c4c4e506c618" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-downloadable-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Downloadable\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-downloadable-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-downloadable-graph-ql/magento-module-downloadable-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "6324aa9e2f9ba1957778b509b7dcfa7662eb7488" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-downloadable": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DownloadableGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-downloadable-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-downloadable-import-export/magento-module-downloadable-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "1d8ddfaabe5b6a7a5e5792f09737c0685916417c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DownloadableImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-eav", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-eav/magento-module-eav-102.0.1.0.zip", + "reference": null, + "shasum": "a28509b94e703c3002eeb3238bf3c5eb35b90d5d" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Eav\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-eav-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-eav-graph-ql/magento-module-eav-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "66edb69cdfbce0784166e7f83bf3ecc8adf7ae0e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-eav": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\EavGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-elasticsearch", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-elasticsearch/magento-module-elasticsearch-100.3.1.0.zip", + "reference": null, + "shasum": "ed1da1137848560dde1a85f0f54dc2fac262359e" + }, + "require": { + "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1", + "magento/framework": "102.0.*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Elasticsearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-elasticsearch-6", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-elasticsearch-6/magento-module-elasticsearch-6-100.3.0.0.zip", + "reference": null, + "shasum": "a9da3243900390ad163efc7969b07116d2eb793f" + }, + "require": { + "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1", + "magento/framework": "102.0.*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-elasticsearch": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Elasticsearch6\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-email", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-email/magento-module-email-101.0.1.0.zip", + "reference": null, + "shasum": "ebcc5912a5e51f97b8c393638d00ddfcf2f73731" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-variable": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Email\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-encryption-key", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-encryption-key/magento-module-encryption-key-100.3.1.0.zip", + "reference": null, + "shasum": "099f36ac60c8226e0c3c1485d29d336c44744dde" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\EncryptionKey\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-fedex", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-fedex/magento-module-fedex-100.3.1.0.zip", + "reference": null, + "shasum": "1840c2272127aba6e51599aa2f751c3d250aa1ef" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Fedex\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-gift-message", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-gift-message/magento-module-gift-message-100.3.1.0.zip", + "reference": null, + "shasum": "b94369cb227d47c934982c8feb06856892c999af" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-multishipping": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GiftMessage\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-google-adwords", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-google-adwords/magento-module-google-adwords-100.3.1.0.zip", + "reference": null, + "shasum": "6302122da3e9d4084e128ea1a13282bd92ca503a" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GoogleAdwords\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-google-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-google-analytics/magento-module-google-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "f87431addf8245441f53dc88bcb1df6bf9a2b95f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cookie": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GoogleAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-google-optimizer", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-google-optimizer/magento-module-google-optimizer-100.3.1.0.zip", + "reference": null, + "shasum": "5239b8174777bdf3fac9f72aad27a604b3febdbb" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-cms": "103.0.*", + "magento/module-google-analytics": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GoogleOptimizer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-graph-ql/magento-module-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "ccb0cfb89c1acbb09c88e01b2c70e924e62a19ce" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-catalog-inventory", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-catalog-inventory/magento-module-grouped-catalog-inventory-100.3.0.0.zip", + "reference": null, + "shasum": "bc0564d1cfb19b3ff7a3a45f287c5fd42749aa83" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedCatalogInventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-import-export/magento-module-grouped-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "0d3764973ae6083a9046166bb8f0456b562b638e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-import-export": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-product", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-product/magento-module-grouped-product-100.3.1.0.zip", + "reference": null, + "shasum": "a80950a2b6919304e818ea52e5bbbd450f272130" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-grouped-product-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-product-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-product-graph-ql/magento-module-grouped-product-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "4ec0716ff30b242c05ea435ddbd43a4c82802a77" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedProductGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-import-export/magento-module-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "3e09156751856fd6a7d96486687c5b56347672c2" + }, + "require": { + "ext-ctype": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-indexer", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-indexer/magento-module-indexer-100.3.1.0.zip", + "reference": null, + "shasum": "bdd64582681713f6836e03916fbd5f88754480e5" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Indexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-instant-purchase", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-instant-purchase/magento-module-instant-purchase-100.3.1.0.zip", + "reference": null, + "shasum": "6a831727392f922a7af24ee282db3d8c0201f7db" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-vault": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InstantPurchase\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-integration", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-integration/magento-module-integration-100.3.1.0.zip", + "reference": null, + "shasum": "416802c817152d1ceac6c1dd16162f08274f5ee6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Integration\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory/magento-module-inventory-1.0.4.0.zip", + "reference": null, + "shasum": "ce21405c9662b13edd131a3d52c562160f4d9f52" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Inventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-admin-ui/magento-module-inventory-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "ccdcdf958be78bf2b73b6d8fa558c42d07b87bbf" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-directory": "*", + "magento/module-inventory-api": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-api/magento-module-inventory-api-1.0.4.0.zip", + "reference": null, + "shasum": "f6da7918669ed256fab8bcf90537a1c853abd612" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-bundle-product", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-bundle-product/magento-module-inventory-bundle-product-1.0.3.0.zip", + "reference": null, + "shasum": "395b08dcd35f14465f338a9da1cf1953a68ca327" + }, + "require": { + "magento/framework": "*", + "magento/module-bundle": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryBundleProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-bundle-product-admin-ui", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-bundle-product-admin-ui/magento-module-inventory-bundle-product-admin-ui-1.0.3.0.zip", + "reference": null, + "shasum": "295705218a4f38202a3ee913092503dc5ccb9074" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryBundleProductAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-cache", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-cache/magento-module-inventory-cache-1.0.3.0.zip", + "reference": null, + "shasum": "024f1d29d27adab967ae77e8b90ee208a06872e7" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-catalog-api": "1.0.*", + "magento/module-inventory-indexer": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog": "103.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCache\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog/magento-module-inventory-catalog-1.0.4.0.zip", + "reference": null, + "shasum": "cf9fc73a20f4d4929c67ffddc5046bcf92437c69" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-reservations-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalog\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog-admin-ui/magento-module-inventory-catalog-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "828a6c4961021129eda07527d2d25eedac0e1bfa" + }, + "require": { + "magento/framework": "*", + "magento/module-asynchronous-operations": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-admin-ui": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalogAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog-api/magento-module-inventory-catalog-api-1.0.4.0.zip", + "reference": null, + "shasum": "edc148f4419e249b37a316afefeef4b97c73bad1" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalogApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog-search", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog-search/magento-module-inventory-catalog-search-1.0.4.0.zip", + "reference": null, + "shasum": "cbe649fee67d9740d1cf2f3d9ce874d1a6413f76" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-search": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalogSearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configurable-product", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configurable-product/magento-module-inventory-configurable-product-1.0.4.0.zip", + "reference": null, + "shasum": "8d4c12fcdaa863c47893664e38fa1ad60e90ffb8" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-configurable-product": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurableProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configurable-product-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configurable-product-admin-ui/magento-module-inventory-configurable-product-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "18dfb9d8cb702ba1d2f465cbe0a5b8b57db07207" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-configurable-product": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-admin-ui": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurableProductAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configurable-product-indexer", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configurable-product-indexer/magento-module-inventory-configurable-product-indexer-1.0.3.0.zip", + "reference": null, + "shasum": "540f1a1687b90b81168dca0f463fe12dae5e4e84" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-inventory-api": "1.0.*", + "magento/module-inventory-catalog-api": "1.0.*", + "magento/module-inventory-indexer": "1.0.*", + "magento/module-inventory-multi-dimensional-indexer-api": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurableProductIndexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configuration", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configuration/magento-module-inventory-configuration-1.0.4.0.zip", + "reference": null, + "shasum": "a9869aeddeede17ba0e442a989b809f86f0a86fe" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfiguration\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configuration-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configuration-api/magento-module-inventory-configuration-api-1.0.4.0.zip", + "reference": null, + "shasum": "d091e7523a1d18099360d9e49f86a3e04dba71b4" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurationApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-distance-based-source-selection", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-distance-based-source-selection/magento-module-inventory-distance-based-source-selection-1.0.0.0.zip", + "reference": null, + "shasum": "c9b93cdfd600a3b493753313ac617dfc0ce8f19c" + }, + "require": { + "magento/framework": "*", + "magento/module-config": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-distance-based-source-selection-api": "*", + "magento/module-inventory-source-selection-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryDistanceBasedSourceSelection\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-distance-based-source-selection-admin-ui", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-distance-based-source-selection-admin-ui/magento-module-inventory-distance-based-source-selection-admin-ui-1.0.0.0.zip", + "reference": null, + "shasum": "b75ca632a07386dc60c5572e353fe4ba47e22d01" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryDistanceBasedSourceSelectionAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-distance-based-source-selection-api", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-distance-based-source-selection-api/magento-module-inventory-distance-based-source-selection-api-1.0.0.0.zip", + "reference": null, + "shasum": "79d9c3f965d14612e95a4723000b1200d5a55b6c" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-source-selection-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryDistanceBasedSourceSelectionApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-elasticsearch", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-elasticsearch/magento-module-inventory-elasticsearch-1.0.0.0.zip", + "reference": null, + "shasum": "b46ff3807763c9967e60f67b155b47658387457b" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog-inventory": "*", + "magento/module-catalog-search": "*", + "magento/module-elasticsearch": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryElasticsearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-grouped-product", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-grouped-product/magento-module-inventory-grouped-product-1.0.3.0.zip", + "reference": null, + "shasum": "19c3284175d75dafd8ad97cc35e1e47a527c82da" + }, + "require": { + "magento/framework": "*", + "magento/module-grouped-product": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryGroupedProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-grouped-product-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-grouped-product-admin-ui/magento-module-inventory-grouped-product-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "d15af53f7bbdd213fdb0af1a16f0e50d968c7240" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-grouped-product": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-admin-ui": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryGroupedProductAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-grouped-product-indexer", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-grouped-product-indexer/magento-module-inventory-grouped-product-indexer-1.0.3.0.zip", + "reference": null, + "shasum": "f8aeffd329e1b556ebf1dfcb3ce23103ae724980" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-grouped-product": "*", + "magento/module-inventory-api": "1.0.*", + "magento/module-inventory-catalog-api": "1.0.*", + "magento/module-inventory-indexer": "1.0.*", + "magento/module-inventory-multi-dimensional-indexer-api": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryGroupedProductIndexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-import-export", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-import-export/magento-module-inventory-import-export-1.0.4.0.zip", + "reference": null, + "shasum": "deefee73fd3c2bb9132e102cc272e4e2dce71088" + }, + "require": { + "magento/framework": "*", + "magento/module-eav": "*", + "magento/module-import-export": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-import-export": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-indexer", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-indexer/magento-module-inventory-indexer-1.0.4.0.zip", + "reference": null, + "shasum": "61bc4572359a82e85b10d2a60a2ec15b9e917a9d" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-multi-dimensional-indexer-api": "*", + "magento/module-inventory-sales": "*", + "magento/module-inventory-sales-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog": "103.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryIndexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-low-quantity-notification", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-low-quantity-notification/magento-module-inventory-low-quantity-notification-1.0.4.0.zip", + "reference": null, + "shasum": "d6779810c096678fa838aff0dc1d5d4c04cb3af6" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-eav": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-low-quantity-notification-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryLowQuantityNotification\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-low-quantity-notification-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-low-quantity-notification-admin-ui/magento-module-inventory-low-quantity-notification-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "c61e759363d9cd39f6deae99ffcc2b8248831477" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-low-quantity-notification": "*", + "magento/module-inventory-low-quantity-notification-api": "*", + "magento/module-reports": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryLowQuantityNotificationAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-low-quantity-notification-api", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-low-quantity-notification-api/magento-module-inventory-low-quantity-notification-api-1.0.3.0.zip", + "reference": null, + "shasum": "08c2657ee45ff0db1ca949437d7dd2da0da956a1" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryLowQuantityNotificationApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-multi-dimensional-indexer-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-multi-dimensional-indexer-api/magento-module-inventory-multi-dimensional-indexer-api-1.0.4.0.zip", + "reference": null, + "shasum": "630ab27e5d236a5f0d061a76f80656a248c36000" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryMultiDimensionalIndexerApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-product-alert", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-product-alert/magento-module-inventory-product-alert-1.0.4.0.zip", + "reference": null, + "shasum": "e21d973d4e58ffa137824b1856cb4ea028fb5135" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-product-alert": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-product-alert": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryProductAlert\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-reservations", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-reservations/magento-module-inventory-reservations-1.0.4.0.zip", + "reference": null, + "shasum": "e527a03b2f48c13cea4081da2c7261bd69c4c92d" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-reservations-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryReservations\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-reservations-api", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-reservations-api/magento-module-inventory-reservations-api-1.0.3.0.zip", + "reference": null, + "shasum": "3955de482006ccbf8d823ec28e042a69862059da" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryReservationsApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales/magento-module-inventory-sales-1.0.4.0.zip", + "reference": null, + "shasum": "d0a9a3d09d41dc3c1e7cce3a07335935ae2b7fc6" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-reservations-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-inventory-source-deduction-api": "*", + "magento/module-sales": "*", + "magento/module-sales-inventory": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "require-dev": { + "magento/module-inventory-indexer": "*" + }, + "suggest": { + "magento/module-inventory-catalog": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySales\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales-admin-ui/magento-module-inventory-sales-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "13daf51ba16c09101f2574eb3dabf2221e81cb0a" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-admin-ui": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySalesAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales-api/magento-module-inventory-sales-api-1.0.4.0.zip", + "reference": null, + "shasum": "6b8847fc22bd04015a9fc5717dfa94f6154d14b4" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-sales": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySalesApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales-frontend-ui", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales-frontend-ui/magento-module-inventory-sales-frontend-ui-1.0.3.0.zip", + "reference": null, + "shasum": "ef1f4e1d67c0add33fa1a5b6da08bed1fd6a7b97" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-configuration-api": "1.0.*", + "magento/module-inventory-sales-api": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySalesFrontendUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-setup-fixture-generator", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-setup-fixture-generator/magento-module-inventory-setup-fixture-generator-1.0.0.0.zip", + "reference": null, + "shasum": "207fe21748b53ad44330a5abc5dc79f1f2a24bed" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySetupFixtureGenerator\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-shipping", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-shipping/magento-module-inventory-shipping-1.0.4.0.zip", + "reference": null, + "shasum": "338a6df150d1ad1107cedba355c896b50275c431" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-inventory-source-deduction-api": "*", + "magento/module-inventory-source-selection-api": "*", + "magento/module-sales": "*", + "magento/module-shipping": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryShipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-shipping-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-shipping-admin-ui/magento-module-inventory-shipping-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "faa48dd7930974c8fd4c792d70f9ab71fd971b78" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-inventory-source-selection-api": "*", + "magento/module-sales": "*", + "magento/module-shipping": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryShippingAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-source-deduction-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-source-deduction-api/magento-module-inventory-source-deduction-api-1.0.4.0.zip", + "reference": null, + "shasum": "4f3167eb248232b18483dae7cde986cb4170239e" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-sales-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySourceDeductionApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-source-selection", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-source-selection/magento-module-inventory-source-selection-1.0.4.0.zip", + "reference": null, + "shasum": "3b8465fcb2f094c82eb86226581a74f8f6a23424" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-source-selection-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySourceSelection\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-source-selection-api", + "version": "1.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-source-selection-api/magento-module-inventory-source-selection-api-1.1.0.0.zip", + "reference": null, + "shasum": "b7cf97c809075fe6fc2d95535a61c44f11440b77" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-sales": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySourceSelectionApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-layered-navigation", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-layered-navigation/magento-module-layered-navigation-100.3.1.0.zip", + "reference": null, + "shasum": "32c5d1e9d21dd98adabe7083ddb3b39ab49d2bde" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\LayeredNavigation\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-marketplace", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-marketplace/magento-module-marketplace-100.3.1.0.zip", + "reference": null, + "shasum": "81415a17e166c349e179e79fe8bb891a5cb63283" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Marketplace\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-media-storage", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-media-storage/magento-module-media-storage-100.3.1.0.zip", + "reference": null, + "shasum": "dbf17a763cbf65cae32bb86fc1a0584fc51b00a0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MediaStorage\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-message-queue", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-message-queue/magento-module-message-queue-100.3.1.0.zip", + "reference": null, + "shasum": "e7a221ac13a53fc8e428bce254620f2d318ffd9c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MessageQueue\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-msrp", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-msrp/magento-module-msrp-100.3.1.0.zip", + "reference": null, + "shasum": "45cee25e493e4b43f1f10fc732f9967c62d36656" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle": "100.3.*", + "magento/module-msrp-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Msrp\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-msrp-configurable-product", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-msrp-configurable-product/magento-module-msrp-configurable-product-100.3.0.0.zip", + "reference": null, + "shasum": "cf76e419dad2243cd680b38e4d85aa48a1ea9ac9" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-msrp": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MsrpConfigurableProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-msrp-grouped-product", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-msrp-grouped-product/magento-module-msrp-grouped-product-100.3.0.0.zip", + "reference": null, + "shasum": "083080ce31393078e30cb6fb17b274c865839b0c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-msrp": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MsrpGroupedProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-multishipping", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-multishipping/magento-module-multishipping-100.3.1.0.zip", + "reference": null, + "shasum": "2da74e0371ddccaca808e55dc81863dd65e3fa6f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Multishipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-mysql-mq", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-mysql-mq/magento-module-mysql-mq-100.3.1.0.zip", + "reference": null, + "shasum": "dda5a554028c56847a1ce717f92927b453708cfd" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MysqlMq\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-new-relic-reporting", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-new-relic-reporting/magento-module-new-relic-reporting-100.3.1.0.zip", + "reference": null, + "shasum": "ee8dbe8627dbadf731cb2f8a9182971b530b54b2" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\NewRelicReporting\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-newsletter", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-newsletter/magento-module-newsletter-100.3.1.0.zip", + "reference": null, + "shasum": "fad2941ec1d5451f5adc492d298eeef4e2410fe4" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-email": "101.0.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Newsletter\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-offline-payments", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-offline-payments/magento-module-offline-payments-100.3.1.0.zip", + "reference": null, + "shasum": "1299eb55d0cabd756610f1f091f5a57b71d4813c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\OfflinePayments\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-offline-shipping", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-offline-shipping/magento-module-offline-shipping-100.3.1.0.zip", + "reference": null, + "shasum": "2d4ae255389cf87a50ed8bfe9af7e7cabdd6e664" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout": "100.3.*", + "magento/module-offline-shipping-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\OfflineShipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-page-cache", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-page-cache/magento-module-page-cache-100.3.1.0.zip", + "reference": null, + "shasum": "4e2729548eee3283f06d3ed3bd0aac2c2c012a2f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\PageCache\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-payment", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-payment/magento-module-payment-100.3.1.0.zip", + "reference": null, + "shasum": "3a5dc59dc2f36c28e1b84701d2deb444a1110373" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Payment\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-paypal", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-paypal/magento-module-paypal-100.3.1.0.zip", + "reference": null, + "shasum": "1c9210c8fd9354d89d580ddc2d29121f0ffc8c20" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-instant-purchase": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-vault": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout-agreements": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Paypal\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-persistent", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-persistent/magento-module-persistent-100.3.1.0.zip", + "reference": null, + "shasum": "bb6e14bbf0d568563cf1dc2e4aafdedaa31709de" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-cron": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Persistent\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-product-alert", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-product-alert/magento-module-product-alert-100.3.1.0.zip", + "reference": null, + "shasum": "324a647bc52ff96f365e0be0e9628f1d36829026" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ProductAlert\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-product-video", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-product-video/magento-module-product-video-100.3.1.0.zip", + "reference": null, + "shasum": "c6cb19d8f73d44399dde39e72d79bf6b7ff8e029" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ProductVideo\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Add Video to Products" + }, + { + "name": "magento/module-quote", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-quote/magento-module-quote-101.1.1.0.zip", + "reference": null, + "shasum": "e2b39264ded8af41839229e7ce6dc1e13f41dab1" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Quote\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-quote-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-quote-analytics/magento-module-quote-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "04b120e37bfe9d985dcf1b1eb90b5d8044dd4d77" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-quote": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\QuoteAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-quote-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-quote-graph-ql/magento-module-quote-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "232b4284ed0ccd26c715fcc23a089b3a011c5639" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-customer-graph-ql": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\QuoteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-release-notification", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-release-notification/magento-module-release-notification-100.3.1.0.zip", + "reference": null, + "shasum": "b6f40a4a0a6328fdf5dde3dd18d702190d5c2347" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ReleaseNotification\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-reports", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-reports/magento-module-reports-100.3.1.0.zip", + "reference": null, + "shasum": "56df5dc26d25298d608a2e130073aa46c51d7a45" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-review": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Reports\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-require-js", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-require-js/magento-module-require-js-100.3.1.0.zip", + "reference": null, + "shasum": "348fa995170de7f4d508a600d8ca2b73cddfc17f" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\RequireJs\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-review", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-review/magento-module-review-100.3.1.0.zip", + "reference": null, + "shasum": "5d226e5ddf781537a69ef6bf648cf2be7621d0a8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-newsletter": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cookie": "100.3.*", + "magento/module-review-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Review\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-review-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-review-analytics/magento-module-review-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "eb26fb256b43d77b4da00e16d9e76d0cb7078c96" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-review": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ReviewAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-robots", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-robots/magento-module-robots-101.0.1.0.zip", + "reference": null, + "shasum": "52129625db7928a4723a47fed097c843a27663d8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Robots\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-rss", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-rss/magento-module-rss-100.3.1.0.zip", + "reference": null, + "shasum": "1f792762c259e85590143df883323534611dc299" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Rss\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-rule", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-rule/magento-module-rule-100.3.1.0.zip", + "reference": null, + "shasum": "2eec15c18c6ab5983a61e768f114c6dc96ec883d" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Rule\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales/magento-module-sales-102.0.1.0.zip", + "reference": null, + "shasum": "f7e58a0a0bcb551e96dde31c9de350e20e4d7ff5" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-sales-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Sales\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-analytics/magento-module-sales-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "f2d5d1dd165e3ea17667a5eaa105bd4757ac5844" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-sales": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-graph-ql/magento-module-sales-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "e10599dcbd5dd7866bfdaf8af7065577ce1e7ebc" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-customer-graph-ql": "100.3.*", + "magento/module-sales": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-inventory", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-inventory/magento-module-sales-inventory-100.3.1.0.zip", + "reference": null, + "shasum": "6982aab2739a7ec5df5b25b5cac28dc70fea4c6b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesInventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-rule", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-rule/magento-module-sales-rule-101.1.1.0.zip", + "reference": null, + "shasum": "043d64f9e5a5b1564473532a1599c2fd58deed6e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-rule": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-sales-rule-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesRule\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-sequence", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-sequence/magento-module-sales-sequence-100.3.1.0.zip", + "reference": null, + "shasum": "d045268eeef55a7d66f98c1ec77569ccc52b6683" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesSequence\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sample-data", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sample-data/magento-module-sample-data-100.3.1.0.zip", + "reference": null, + "shasum": "da0800d6ed74b8956ef00ee080230a18f048ed8f" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/sample-data-media": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "cli_commands.php", + "registration.php" + ], + "psr-4": { + "Magento\\SampleData\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Sample Data fixtures" + }, + { + "name": "magento/module-search", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-search/magento-module-search-101.0.1.0.zip", + "reference": null, + "shasum": "a9486668c87a5ba4bb4aa6c9f8060637f7027ca1" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-reports": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Search\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-security", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-security/magento-module-security-100.3.1.0.zip", + "reference": null, + "shasum": "17018cf2303e60994bf28daa52fa6f7180f182da" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "102.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Security\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Security management module" + }, + { + "name": "magento/module-send-friend", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-send-friend/magento-module-send-friend-100.3.1.0.zip", + "reference": null, + "shasum": "547e26b8d3570b3f0969b9f5802725e8d8651714" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-captcha": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SendFriend\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-send-friend-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-send-friend-graph-ql/magento-module-send-friend-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "ef5fbfcd51beb3ad8225fa03320cc45012b0bd70" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-send-friend": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SendFriendGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-shipping", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-shipping/magento-module-shipping-100.3.1.0.zip", + "reference": null, + "shasum": "dd53451df643e7d4513cb3102f182eb1f96bbc36" + }, + "require": { + "ext-gd": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-contact": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*", + "magento/module-fedex": "100.3.*", + "magento/module-ups": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Shipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-signifyd", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-signifyd/magento-module-signifyd-100.3.1.0.zip", + "reference": null, + "shasum": "768442b807e31bacfb5bbf914e155bac3ca88dde" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Signifyd\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Submitting Case Entry to Signifyd on Order Creation" + }, + { + "name": "magento/module-sitemap", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sitemap/magento-module-sitemap-100.3.1.0.zip", + "reference": null, + "shasum": "2f4535120d0551397680bdbd2365c08dd175f5f1" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-robots": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Sitemap\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-store", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-store/magento-module-store-101.0.1.0.zip", + "reference": null, + "shasum": "aa4a2db8d42094f5978782138eb16e3adcf6798c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-deploy": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Store\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-store-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-store-graph-ql/magento-module-store-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "7c00e21d6f4c5c45bf2cc4bf0dd9dfdaa83ccad3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\StoreGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swagger", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swagger/magento-module-swagger-100.3.1.0.zip", + "reference": null, + "shasum": "f17474413c08f94ca5f704d9eff5b6ad268a0440" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Swagger\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swagger-webapi", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swagger-webapi/magento-module-swagger-webapi-100.3.1.0.zip", + "reference": null, + "shasum": "7e4ee0f77d30c0e358771d2815ed1065bcfea7a2" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-swagger": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwaggerWebapi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swagger-webapi-async", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swagger-webapi-async/magento-module-swagger-webapi-async-100.3.1.0.zip", + "reference": null, + "shasum": "8e47ef5ab81bf92742b100c75879871e5d356095" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-swagger": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwaggerWebapiAsync\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swatches", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swatches/magento-module-swatches-100.3.1.0.zip", + "reference": null, + "shasum": "e8f12b8f0935403f693e78d60633da666162cb5a" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-layered-navigation": "100.3.*", + "magento/module-swatches-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Swatches\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Add Swatches to Products" + }, + { + "name": "magento/module-swatches-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swatches-graph-ql/magento-module-swatches-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "81636dcec8824fd41c6287203e25dd850afab20b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-swatches": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwatchesGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swatches-layered-navigation", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swatches-layered-navigation/magento-module-swatches-layered-navigation-100.3.1.0.zip", + "reference": null, + "shasum": "0ba7397b12656fa9db3faee319ca64e65504cffa" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwatchesLayeredNavigation\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tax", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tax/magento-module-tax-100.3.1.0.zip", + "reference": null, + "shasum": "ec9848f312abb6c03393aae776b086b1d4177ab0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-tax-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Tax\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tax-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tax-graph-ql/magento-module-tax-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "eabd499aaf645826ac644dce948bba133d76aaf0" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-tax": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\TaxGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tax-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tax-import-export/magento-module-tax-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "8027abc153f14886965525539f873c8a4120cf8c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-directory": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\TaxImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-theme", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-theme/magento-module-theme-101.0.1.0.zip", + "reference": null, + "shasum": "e6fed3b1a3a3f21452f151e1eb2aa36510cb1b50" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-deploy": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-theme-sample-data": "Sample Data version: 100.3.*", + "magento/module-translation": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Theme\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-theme-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-theme-graph-ql/magento-module-theme-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "cd9d5fd79db5547f5a5b1e4761b901451b2fc013" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-store-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ThemeGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tinymce-3", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tinymce-3/magento-module-tinymce-3-100.3.1.0.zip", + "reference": null, + "shasum": "5153d30d5f5e5a8d99182a65dce142569f22861e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-variable": "100.3.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cms": "103.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Tinymce3\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-translation", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-translation/magento-module-translation-100.3.1.0.zip", + "reference": null, + "shasum": "dbc9a6bd9d8aa234c5809103e6ac93372fa33c81" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-developer": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-deploy": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Translation\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-ui", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-ui/magento-module-ui-101.1.1.0.zip", + "reference": null, + "shasum": "fc1e9663747d2f40f9a3278983598d9098ffca1a" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Ui\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-ups", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-ups/magento-module-ups-100.3.1.0.zip", + "reference": null, + "shasum": "34c0f3f7c03bd533aff334fb88750fc109a71d1d" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Ups\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-url-rewrite", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-url-rewrite/magento-module-url-rewrite-101.1.1.0.zip", + "reference": null, + "shasum": "f21c8619cec00fda18dd3dcb51cb2a4e8d451aee" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-cms-url-rewrite": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\UrlRewrite\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-url-rewrite-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-url-rewrite-graph-ql/magento-module-url-rewrite-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "ba563f2348277b9f06cd2f4e3118fa756f453d6e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\UrlRewriteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-user", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-user/magento-module-user-101.1.1.0.zip", + "reference": null, + "shasum": "28a050491e3e447c8460f42b0f0549ad6adca190" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-email": "101.0.*", + "magento/module-integration": "100.3.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\User\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-usps", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-usps/magento-module-usps-100.3.1.0.zip", + "reference": null, + "shasum": "cf9a786445d64b36c1d4bc32666213225821d84d" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Usps\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-variable", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-variable/magento-module-variable-100.3.1.0.zip", + "reference": null, + "shasum": "7b8faefa05dc6e563ac5663db86b86a2dc3c02e8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Variable\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-vault", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-vault/magento-module-vault-101.1.1.0.zip", + "reference": null, + "shasum": "c8702e4f0ec7fa9538194203be7e5bbf0bc8077b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Vault\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ] + }, + { + "name": "magento/module-version", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-version/magento-module-version-100.3.1.0.zip", + "reference": null, + "shasum": "f35d618be8f999ec653c83de3e364d4eea5eb796" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Version\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-webapi", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-webapi/magento-module-webapi-100.3.1.0.zip", + "reference": null, + "shasum": "9aee9870a6296462ed7b834383725b6f8cbfd8fe" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "102.0.*", + "magento/module-user": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Webapi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-webapi-async", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-webapi-async/magento-module-webapi-async-100.3.1.0.zip", + "reference": null, + "shasum": "061d2e2ffd3476b78dedef5d078227fae7869019" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-asynchronous-operations": "100.3.*", + "magento/module-webapi": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "102.0.*", + "magento/module-user": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WebapiAsync\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-webapi-security", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-webapi-security/magento-module-webapi-security-100.3.1.0.zip", + "reference": null, + "shasum": "ddc3201ecae4ff4fd0179fc387c69fe7af902caf" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-webapi": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WebapiSecurity\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "WebapiSecurity module provides option to loosen security on some webapi resources." + }, + { + "name": "magento/module-weee", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-weee/magento-module-weee-100.3.1.0.zip", + "reference": null, + "shasum": "665d507e1d1baad1769f91ad021a0484f811c745" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Weee\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-weee-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-weee-graph-ql/magento-module-weee-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "8cd539c61f3f52683cdf1d081d03ba1ab198da43" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-weee": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WeeeGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-widget", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-widget/magento-module-widget-101.1.1.0.zip", + "reference": null, + "shasum": "f7c8f6136274aee6ec623112981505475b36ea04" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-variable": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-widget-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Widget\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-wishlist", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-wishlist/magento-module-wishlist-101.1.1.0.zip", + "reference": null, + "shasum": "e73a999d11356a60646ccf7bc753d8ee04ed7035" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-captcha": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-rss": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle": "100.3.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-cookie": "100.3.*", + "magento/module-downloadable": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-wishlist-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Wishlist\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-wishlist-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-wishlist-analytics/magento-module-wishlist-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "65852d6f8437a52706906c7c529398e60bf9052d" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WishlistAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-wishlist-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-wishlist-graph-ql/magento-module-wishlist-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "6b63731e8f68755b22f29e0b29febc8c3c374842" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WishlistGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/product-community-edition", + "version": "2.3.1", + "require": { + "amzn/amazon-pay-and-login-magento-2-module": "3.1.4", + "braintree/braintree_php": "3.35.0", + "colinmollenhour/cache-backend-file": "~1.4.1", + "colinmollenhour/cache-backend-redis": "1.10.6", + "colinmollenhour/credis": "1.10.0", + "colinmollenhour/php-redis-session-abstract": "~1.4.0", + "composer/composer": "^1.6", + "dotmailer/dotmailer-magento2-extension": "3.1.1", + "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1", + "ext-bcmath": "*", + "ext-ctype": "*", + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-iconv": "*", + "ext-intl": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pdo_mysql": "*", + "ext-simplexml": "*", + "ext-soap": "*", + "ext-spl": "*", + "ext-xsl": "*", + "ext-zip": "*", + "klarna/m2-payments": "7.1.0", + "lib-libxml": "*", + "magento/composer": "~1.4.0", + "magento/framework": "102.0.1", + "magento/framework-amqp": "100.3.1", + "magento/framework-bulk": "100.3.1", + "magento/framework-message-queue": "100.3.1", + "magento/inventory-composer-metapackage": "1.1.1", + "magento/language-de_de": "100.3.1", + "magento/language-en_us": "100.3.1", + "magento/language-es_es": "100.3.1", + "magento/language-fr_fr": "100.3.1", + "magento/language-nl_nl": "100.3.1", + "magento/language-pt_br": "100.3.1", + "magento/language-zh_hans_cn": "100.3.1", + "magento/magento-composer-installer": ">=0.1.11", + "magento/magento2-base": "2.3.1", + "magento/module-admin-notification": "100.3.1", + "magento/module-advanced-pricing-import-export": "100.3.1", + "magento/module-advanced-search": "100.3.1", + "magento/module-amqp": "100.3.1", + "magento/module-analytics": "100.3.1", + "magento/module-asynchronous-operations": "100.3.1", + "magento/module-authorization": "100.3.1", + "magento/module-authorizenet": "100.3.1", + "magento/module-authorizenet-acceptjs": "100.3.0", + "magento/module-backend": "101.0.1", + "magento/module-backup": "100.3.1", + "magento/module-braintree": "100.3.1", + "magento/module-bundle": "100.3.1", + "magento/module-bundle-graph-ql": "100.3.1", + "magento/module-bundle-import-export": "100.3.1", + "magento/module-cache-invalidate": "100.3.1", + "magento/module-captcha": "100.3.1", + "magento/module-catalog": "103.0.1", + "magento/module-catalog-analytics": "100.3.1", + "magento/module-catalog-graph-ql": "100.3.1", + "magento/module-catalog-import-export": "101.0.1", + "magento/module-catalog-inventory": "100.3.1", + "magento/module-catalog-inventory-graph-ql": "100.3.1", + "magento/module-catalog-rule": "101.1.1", + "magento/module-catalog-rule-configurable": "100.3.1", + "magento/module-catalog-search": "101.0.1", + "magento/module-catalog-url-rewrite": "100.3.1", + "magento/module-catalog-url-rewrite-graph-ql": "100.3.1", + "magento/module-catalog-widget": "100.3.1", + "magento/module-checkout": "100.3.1", + "magento/module-checkout-agreements": "100.3.1", + "magento/module-cms": "103.0.1", + "magento/module-cms-graph-ql": "100.3.1", + "magento/module-cms-url-rewrite": "100.3.1", + "magento/module-cms-url-rewrite-graph-ql": "100.3.1", + "magento/module-config": "101.1.1", + "magento/module-configurable-import-export": "100.3.1", + "magento/module-configurable-product": "100.3.1", + "magento/module-configurable-product-graph-ql": "100.3.1", + "magento/module-configurable-product-sales": "100.3.1", + "magento/module-contact": "100.3.1", + "magento/module-cookie": "100.3.1", + "magento/module-cron": "100.3.1", + "magento/module-currency-symbol": "100.3.1", + "magento/module-customer": "102.0.1", + "magento/module-customer-analytics": "100.3.1", + "magento/module-customer-graph-ql": "100.3.1", + "magento/module-customer-import-export": "100.3.1", + "magento/module-deploy": "100.3.1", + "magento/module-developer": "100.3.1", + "magento/module-dhl": "100.3.1", + "magento/module-directory": "100.3.1", + "magento/module-directory-graph-ql": "100.3.0", + "magento/module-downloadable": "100.3.1", + "magento/module-downloadable-graph-ql": "100.3.1", + "magento/module-downloadable-import-export": "100.3.1", + "magento/module-eav": "102.0.1", + "magento/module-eav-graph-ql": "100.3.1", + "magento/module-elasticsearch": "100.3.1", + "magento/module-elasticsearch-6": "100.3.0", + "magento/module-email": "101.0.1", + "magento/module-encryption-key": "100.3.1", + "magento/module-fedex": "100.3.1", + "magento/module-gift-message": "100.3.1", + "magento/module-google-adwords": "100.3.1", + "magento/module-google-analytics": "100.3.1", + "magento/module-google-optimizer": "100.3.1", + "magento/module-graph-ql": "100.3.1", + "magento/module-grouped-catalog-inventory": "100.3.0", + "magento/module-grouped-import-export": "100.3.1", + "magento/module-grouped-product": "100.3.1", + "magento/module-grouped-product-graph-ql": "100.3.1", + "magento/module-import-export": "100.3.1", + "magento/module-indexer": "100.3.1", + "magento/module-instant-purchase": "100.3.1", + "magento/module-integration": "100.3.1", + "magento/module-layered-navigation": "100.3.1", + "magento/module-marketplace": "100.3.1", + "magento/module-media-storage": "100.3.1", + "magento/module-message-queue": "100.3.1", + "magento/module-msrp": "100.3.1", + "magento/module-msrp-configurable-product": "100.3.0", + "magento/module-msrp-grouped-product": "100.3.0", + "magento/module-multishipping": "100.3.1", + "magento/module-mysql-mq": "100.3.1", + "magento/module-new-relic-reporting": "100.3.1", + "magento/module-newsletter": "100.3.1", + "magento/module-offline-payments": "100.3.1", + "magento/module-offline-shipping": "100.3.1", + "magento/module-page-cache": "100.3.1", + "magento/module-payment": "100.3.1", + "magento/module-paypal": "100.3.1", + "magento/module-persistent": "100.3.1", + "magento/module-product-alert": "100.3.1", + "magento/module-product-video": "100.3.1", + "magento/module-quote": "101.1.1", + "magento/module-quote-analytics": "100.3.1", + "magento/module-quote-graph-ql": "100.3.1", + "magento/module-release-notification": "100.3.1", + "magento/module-reports": "100.3.1", + "magento/module-require-js": "100.3.1", + "magento/module-review": "100.3.1", + "magento/module-review-analytics": "100.3.1", + "magento/module-robots": "101.0.1", + "magento/module-rss": "100.3.1", + "magento/module-rule": "100.3.1", + "magento/module-sales": "102.0.1", + "magento/module-sales-analytics": "100.3.1", + "magento/module-sales-graph-ql": "100.3.0", + "magento/module-sales-inventory": "100.3.1", + "magento/module-sales-rule": "101.1.1", + "magento/module-sales-sequence": "100.3.1", + "magento/module-sample-data": "100.3.1", + "magento/module-search": "101.0.1", + "magento/module-security": "100.3.1", + "magento/module-send-friend": "100.3.1", + "magento/module-send-friend-graph-ql": "100.3.0", + "magento/module-shipping": "100.3.1", + "magento/module-signifyd": "100.3.1", + "magento/module-sitemap": "100.3.1", + "magento/module-store": "101.0.1", + "magento/module-store-graph-ql": "100.3.1", + "magento/module-swagger": "100.3.1", + "magento/module-swagger-webapi": "100.3.1", + "magento/module-swagger-webapi-async": "100.3.1", + "magento/module-swatches": "100.3.1", + "magento/module-swatches-graph-ql": "100.3.1", + "magento/module-swatches-layered-navigation": "100.3.1", + "magento/module-tax": "100.3.1", + "magento/module-tax-graph-ql": "100.3.1", + "magento/module-tax-import-export": "100.3.1", + "magento/module-theme": "101.0.1", + "magento/module-theme-graph-ql": "100.3.0", + "magento/module-tinymce-3": "100.3.1", + "magento/module-translation": "100.3.1", + "magento/module-ui": "101.1.1", + "magento/module-ups": "100.3.1", + "magento/module-url-rewrite": "101.1.1", + "magento/module-url-rewrite-graph-ql": "100.3.1", + "magento/module-user": "101.1.1", + "magento/module-usps": "100.3.1", + "magento/module-variable": "100.3.1", + "magento/module-vault": "101.1.1", + "magento/module-version": "100.3.1", + "magento/module-webapi": "100.3.1", + "magento/module-webapi-async": "100.3.1", + "magento/module-webapi-security": "100.3.1", + "magento/module-weee": "100.3.1", + "magento/module-weee-graph-ql": "100.3.1", + "magento/module-widget": "101.1.1", + "magento/module-wishlist": "101.1.1", + "magento/module-wishlist-analytics": "100.3.1", + "magento/module-wishlist-graph-ql": "100.3.0", + "magento/theme-adminhtml-backend": "100.3.1", + "magento/theme-frontend-blank": "100.3.1", + "magento/theme-frontend-luma": "100.3.1", + "magento/zendframework1": "~1.14.1", + "monolog/monolog": "^1.17", + "msp/recaptcha": "2.0.2", + "msp/twofactorauth": "3.0.0", + "oyejorge/less.php": "~1.7.0", + "paragonie/sodium_compat": "^1.6", + "pelago/emogrifier": "^2.0.0", + "php": "~7.1.3||~7.2.0", + "php-amqplib/php-amqplib": "~2.7.0", + "phpseclib/mcrypt_compat": "1.0.8", + "phpseclib/phpseclib": "2.0.*", + "ramsey/uuid": "~3.8.0", + "symfony/console": "~4.1.0", + "symfony/event-dispatcher": "~4.1.0", + "symfony/process": "~4.1.0", + "tedivm/jshrink": "~1.3.0", + "temando/module-shipping-m2": "1.5.1", + "tubalmartin/cssmin": "4.1.1", + "vertex/product-magento-module": "3.1.0", + "webonyx/graphql-php": "^0.12.6", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-code": "~3.3.0", + "zendframework/zend-config": "^2.6.0", + "zendframework/zend-console": "^2.6.0", + "zendframework/zend-crypt": "^2.6.0", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-di": "^2.6.1", + "zendframework/zend-eventmanager": "^2.6.3", + "zendframework/zend-feed": "^2.9.0", + "zendframework/zend-form": "^2.10.0", + "zendframework/zend-http": "^2.6.0", + "zendframework/zend-i18n": "^2.7.3", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.1", + "zendframework/zend-mail": "^2.9.0", + "zendframework/zend-modulemanager": "^2.7", + "zendframework/zend-mvc": "~2.7.0", + "zendframework/zend-serializer": "^2.7.2", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.8", + "zendframework/zend-session": "^2.7.3", + "zendframework/zend-soap": "^2.7.0", + "zendframework/zend-stdlib": "^2.7.7", + "zendframework/zend-text": "^2.6.0", + "zendframework/zend-uri": "^2.5.1", + "zendframework/zend-validator": "^2.6.0", + "zendframework/zend-view": "~2.10.0" + }, + "type": "metapackage", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "eCommerce Platform for Growth (Community Edition)" + }, + { + "name": "magento/theme-adminhtml-backend", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/theme-adminhtml-backend/magento-theme-adminhtml-backend-100.3.1.0.zip", + "reference": null, + "shasum": "16ba686421c8f62c5adafea59b9348dc3f9f9dc1" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-theme", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/theme-frontend-blank", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/theme-frontend-blank/magento-theme-frontend-blank-100.3.1.0.zip", + "reference": null, + "shasum": "5d0c6b04a16d20899bb5b70394fe8db257832dd1" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-theme", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/theme-frontend-luma", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/theme-frontend-luma/magento-theme-frontend-luma-100.3.1.0.zip", + "reference": null, + "shasum": "4ecc9f6a9fa4dfc5be7f4dec8fc8a9535ec1f5f3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/theme-frontend-blank": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-theme", + "autoload": { + "files": [ + "registration.php" ] }, "license": [ - "OSL-3.0", - "AFL-3.0" + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/zendframework1", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/magento/zf1.git", + "reference": "4df018254c70b5b998b00a8cb1a30760f831ff0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/zf1/zipball/4df018254c70b5b998b00a8cb1a30760f831ff0d", + "reference": "4df018254c70b5b998b00a8cb1a30760f831ff0d", + "shasum": "" + }, + "require": { + "php": ">=5.2.11" + }, + "require-dev": { + "phpunit/dbunit": "1.3.*", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12.x-dev" + } + }, + "autoload": { + "psr-0": { + "Zend_": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "library/" + ], + "license": [ + "BSD-3-Clause" + ], + "description": "Magento Zend Framework 1", + "homepage": "http://framework.zend.com/", + "keywords": [ + "ZF1", + "framework" + ], + "time": "2018-08-09T15:03:40+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.24.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2018-11-05T09:00:11+00:00" + }, + { + "name": "msp/recaptcha", + "version": "2.0.2", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/msp/recaptcha/msp-recaptcha-2.0.2.0.zip", + "reference": null, + "shasum": "f037ce5e2b4202117adc4ec0ab93212ef31bff7e" + }, + "require": { + "google/recaptcha": "^1.1", + "magento/magento-composer-installer": "*", + "php": "^7.0|^7.1|^7.2" + }, + "suggest": { + "msp/security-suite": "Full MageSpecialist Security Suite" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "MSP\\ReCaptcha\\": "" + } + }, + "license": [ + "OSL-3.0" ], - "description": "Magento 2 Base (Community Edition)" + "authors": [ + { + "name": "Riccardo Tempesta", + "email": "riccardo.tempesta@magespecialist.it" + } + ], + "description": "Google reCaptcha integration for Magento2 - Member of MageSpecialist SecuritySuite" }, { - "name": "magento/module-admin-notification", - "version": "0.74.0-beta9", + "name": "msp/twofactorauth", + "version": "3.0.0", "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-admin-notification-0.74.0-beta9.zip", + "url": "https://repo.magento.com/archives/msp/twofactorauth/msp-twofactorauth-3.0.0.0.zip", "reference": null, - "shasum": "9d9f819a651566a2ae6f12225d69941dbe5d0920" + "shasum": "ba56d984ae834a8e87a76aed81bcaf6fd6d811b1" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta9", + "christian-riesen/base32": "^1.3", + "donatj/phpuseragentparser": "~0.7", + "endroid/qr-code": "^2.5", "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.0|^7.1|^7.2", + "spomky-labs/otphp": "~8.3", + "yubico/u2flib-server": "^1.0" + }, + "suggest": { + "msp/security-suite": "Full MageSpecialist Security Suite" }, "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/AdminNotification" - ] + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "MSP\\TwoFactorAuth\\": "" + } + }, + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Riccardo Tempesta", + "email": "riccardo.tempesta@magespecialist.it" + } + ], + "description": "Two Factor Authentication module for Magento2 - Member of MageSpecialist SecuritySuite" + }, + { + "name": "myclabs/php-enum", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "32c4202886c51fbe5cc3a7c34ec5c9a4a790345e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/32c4202886c51fbe5cc3a7c34ec5c9a4a790345e", + "reference": "32c4202886c51fbe5cc3a7c34ec5c9a4a790345e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2019-02-04T21:18:49+00:00" + }, + { + "name": "oyejorge/less.php", + "version": "v1.7.0.14", + "source": { + "type": "git", + "url": "https://github.com/oyejorge/less.php.git", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oyejorge/less.php/zipball/42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.24" + }, + "bin": [ + "bin/lessc" + ], + "type": "library", + "autoload": { + "psr-0": { + "Less": "lib/" + }, + "classmap": [ + "lessc.inc.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" + ], + "authors": [ + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin Jantošovič", + "homepage": "https://github.com/Mordred" + }, + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + } + ], + "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", + "homepage": "http://lessphp.gpeasy.com", + "keywords": [ + "css", + "less", + "less.js", + "lesscss", + "php", + "stylesheet" + ], + "time": "2017-03-28T22:19:25+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.2.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/55af0dc01992b4d0da7f6372e2eac097bbbaffdb", + "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7", + "vimeo/psalm": "^1|^2" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "time": "2019-01-03T20:26:31+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "paragonie/sodium_compat", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "87125d5b265f98c4d1b8d83a1f0726607c229421" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/87125d5b265f98c4d1b8d83a1f0726607c229421", + "reference": "87125d5b265f98c4d1b8d83a1f0726607c229421", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "time": "2019-03-20T17:19:05+00:00" + }, + { + "name": "pelago/emogrifier", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/emogrifier.git", + "reference": "8ee7fb5ad772915451ed3415c1992bd3697d4983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/8ee7fb5ad772915451ed3415c1992bd3697d4983", + "reference": "8ee7fb5ad772915451ed3415c1992bd3697d4983", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0", + "symfony/css-selector": "^3.4.0 || ^4.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2.0", + "phpmd/phpmd": "^2.6.0", + "phpunit/phpunit": "^4.8.0", + "squizlabs/php_codesniffer": "^3.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Pelago\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Reeve", + "email": "jreeve@pelagodesign.com" + }, + { + "name": "Cameron Brooks" + }, + { + "name": "Jaime Prado" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Zoli Szabó", + "email": "zoli.szabo+github@gmail.com" + }, + { + "name": "Jake Hotson", + "email": "jake@qzdesign.co.uk" + } ], - "description": "N/A" + "description": "Converts CSS styles into inline style attributes in your HTML code", + "homepage": "https://www.myintervals.com/emogrifier.php", + "keywords": [ + "css", + "email", + "pre-processing" + ], + "time": "2018-12-10T10:36:30+00:00" }, { - "name": "magento/module-authorization", - "version": "0.74.0-beta9", + "name": "php-amqplib/php-amqplib", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/php-amqplib/php-amqplib.git", + "reference": "a8ba54bd35b973fc6861e4c2e105f71e9e95f43f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-authorization-0.74.0-beta9.zip", - "reference": null, - "shasum": "28fb39cd7d95979865ee34293004c2dbd7fb0c74" + "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/a8ba54bd35b973fc6861e4c2e105f71e9e95f43f", + "reference": "a8ba54bd35b973fc6861e4c2e105f71e9e95f43f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-bcmath": "*", + "ext-mbstring": "*", + "php": ">=5.3.0" }, - "type": "magento2-module", + "replace": { + "videlalvaro/php-amqplib": "self.version" + }, + "require-dev": { + "phpdocumentor/phpdocumentor": "^2.9", + "phpunit/phpunit": "^4.8", + "scrutinizer/ocular": "^1.1", + "squizlabs/php_codesniffer": "^2.5" + }, + "suggest": { + "ext-sockets": "Use AMQPSocketConnection" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Authorization" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpAmqpLib\\": "PhpAmqpLib/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "LGPL-2.1-or-later" ], - "description": "Authorization module provides access to Magento ACL functionality." + "authors": [ + { + "name": "Alvaro Videla", + "role": "Original Maintainer" + }, + { + "name": "John Kelly", + "email": "johnmkelly86@gmail.com", + "role": "Maintainer" + }, + { + "name": "Raúl Araya", + "email": "nubeiro@gmail.com", + "role": "Maintainer" + } + ], + "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.", + "homepage": "https://github.com/php-amqplib/php-amqplib/", + "keywords": [ + "message", + "queue", + "rabbitmq" + ], + "time": "2018-04-30T03:54:54+00:00" }, { - "name": "magento/module-backend", - "version": "0.74.0-beta9", + "name": "phpseclib/mcrypt_compat", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/mcrypt_compat.git", + "reference": "f74c7b1897b62f08f268184b8bb98d9d9ab723b0" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-backend-0.74.0-beta9.zip", - "reference": null, - "shasum": "47a8139710f3c269b06d444c29fd275b2a3c9c9b" + "url": "https://api.github.com/repos/phpseclib/mcrypt_compat/zipball/f74c7b1897b62f08f268184b8bb98d9d9ab723b0", + "reference": "f74c7b1897b62f08f268184b8bb98d9d9ab723b0", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backup": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-cron": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-developer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-reports": "0.74.0-beta9", - "magento/module-require-js": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-translation": "0.74.0-beta9", - "magento/module-user": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.3", + "phpseclib/phpseclib": ">=2.0.11 <3.0.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Backend" - ] + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.7|^6.0" + }, + "suggest": { + "ext-openssl": "Will enable faster cryptographic operations" + }, + "type": "library", + "autoload": { + "files": [ + "lib/mcrypt.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "homepage": "http://phpseclib.sourceforge.net" + } + ], + "description": "PHP 7.1 polyfill for the mcrypt extension from PHP <= 7.0", + "keywords": [ + "cryptograpy", + "encryption", + "mcrypt" + ], + "time": "2018-08-22T03:11:43+00:00" }, { - "name": "magento/module-backup", - "version": "0.74.0-beta9", + "name": "phpseclib/phpseclib", + "version": "2.0.15", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "11cf67cf78dc4acb18dc9149a57be4aee5036ce0" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-backup-0.74.0-beta9.zip", - "reference": null, - "shasum": "defb31a8d7de0856753a04e15f5bf34684d25d90" + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/11cf67cf78dc4acb18dc9149a57be4aee5036ce0", + "reference": "11cf67cf78dc4acb18dc9149a57be4aee5036ce0", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-cron": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.3" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Backup" - ] - ] + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2019-03-10T16:53:45+00:00" }, { - "name": "magento/module-bundle", - "version": "0.74.0-beta9", + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-bundle-0.74.0-beta9.zip", - "reference": null, - "shasum": "a63880815cf2c96fc4e6e45cd982bf724682fe8b" + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-catalog-rule": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-gift-message": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-webapi": "0.74.0-beta9" + "php": ">=5.3.0" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Bundle" - ] - ] + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "magento/module-cache-invalidate", - "version": "0.74.0-beta9", + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cache-invalidate-0.74.0-beta9.zip", - "reference": null, - "shasum": "e0316dae00343426e331cb39520acf0f6c0c3db3" + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-page-cache": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CacheInvalidate" - ] - ] + "branch-alias": { + "dev-master": "1.0.x-dev" + } }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "magento/module-captcha", - "version": "0.74.0-beta9", + "name": "psr/log", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-captcha-0.74.0-beta9.zip", - "reference": null, - "shasum": "cfc73a9579a990f215e10ec6b475255bef919920" + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Captcha" - ] - ] + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" }, { - "name": "magento/module-catalog", - "version": "0.74.0-beta9", + "name": "ralouphie/getallheaders", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-0.74.0-beta9.zip", - "reference": null, - "shasum": "705f5317c0495c0a94ce0d6ad9c2400c7eee9494" + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-catalog-rule": "0.74.0-beta9", - "magento/module-catalog-url-rewrite": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-msrp": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-product-alert": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-url-rewrite": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-cookie": "0.74.0-beta9" + "php": ">=5.3" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Catalog" - ] + "require-dev": { + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" }, { - "name": "magento/module-catalog-import-export", - "version": "0.74.0-beta9", + "name": "ramsey/uuid", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-import-export-0.74.0-beta9.zip", - "reference": null, - "shasum": "81dfb1108a4717ba212b46af6502a17ba8a1f85d" + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "shasum": "" }, "require": { - "ext-ctype": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, - "type": "magento2-module", + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogImportExport" - ] - ] + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2018-07-19T23:38:55+00:00" }, { - "name": "magento/module-catalog-inventory", - "version": "0.74.0-beta9", + "name": "react/promise", + "version": "v2.7.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-inventory-0.74.0-beta9.zip", - "reference": null, - "shasum": "1b2039959817f22889fa461cd48c58dec10c5b0d" + "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.4.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/CatalogInventory" - ] + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2019-01-07T21:25:54+00:00" }, { - "name": "magento/module-catalog-rule", - "version": "0.74.0-beta9", + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-rule-0.74.0-beta9.zip", - "reference": null, - "shasum": "43e105ef491933e96ee5f6c9543edb72076b9b8f" + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-rule": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.3 || ^7.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/CatalogRule" - ] - ] + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" }, { - "name": "magento/module-catalog-search", - "version": "0.74.0-beta9", + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-search-0.74.0-beta9.zip", - "reference": null, - "shasum": "3eb4841fe35753202d6985f65387da848ded3d9e" + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-search": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogSearch" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" }, { - "name": "magento/module-catalog-url-rewrite", - "version": "0.74.0-beta9", + "name": "spomky-labs/otphp", + "version": "v8.3.3", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "eb14442699ae6470b29ffd89238a9ccfb9f20788" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-url-rewrite-0.74.0-beta9.zip", - "reference": null, - "shasum": "d6ff96ba9c854368c0cdc2aa4ebb66bbb5201349" + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/eb14442699ae6470b29ffd89238a9ccfb9f20788", + "reference": "eb14442699ae6470b29ffd89238a9ccfb9f20788", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-import-export": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-url-rewrite": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "beberlei/assert": "^2.4", + "paragonie/constant_time_encoding": "^1.0|^2.0", + "paragonie/random_compat": ">=2", + "php": "^5.5|^7.0", + "symfony/polyfill-mbstring": "^1.1", + "symfony/polyfill-php56": "^1.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "~4.0|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogUrlRewrite" - ] - ] + "branch-alias": { + "dev-master": "8.2.x-dev" + } }, + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "time": "2018-09-13T19:25:26+00:00" }, { - "name": "magento/module-catalog-widget", - "version": "0.74.0-beta9", + "name": "symfony/console", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9e87c798f67dc9fceeb4f3d57847b52d945d1a02" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-widget-0.74.0-beta9.zip", - "reference": null, - "shasum": "7aa5387069cdcae7a6c4dab63a5e3a8e12921f2c" + "url": "https://api.github.com/repos/symfony/console/zipball/9e87c798f67dc9fceeb4f3d57847b52d945d1a02", + "reference": "9e87c798f67dc9fceeb4f3d57847b52d945d1a02", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-rule": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" }, - "type": "magento2-module", + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogWidget" - ] + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2019-01-25T14:34:37+00:00" }, { - "name": "magento/module-centinel", - "version": "0.74.0-beta9", + "name": "symfony/css-selector", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "48eddf66950fa57996e1be4a55916d65c10c604a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-centinel-0.74.0-beta9.zip", - "reference": null, - "shasum": "4bda8da48084d11cd97f59292b35501ad1dae554" + "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a", + "reference": "48eddf66950fa57996e1be4a55916d65c10c604a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Centinel" - ] + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T20:31:39+00:00" }, { - "name": "magento/module-checkout", - "version": "0.74.0-beta9", + "name": "symfony/event-dispatcher", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "51be1b61dfe04d64a260223f2b81475fa8066b97" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-checkout-0.74.0-beta9.zip", - "reference": null, - "shasum": "c8ab1ccad853365098f1ea9efd3b2640f6ce1ab1" + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/51be1b61dfe04d64a260223f2b81475fa8066b97", + "reference": "51be1b61dfe04d64a260223f2b81475fa8066b97", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-gift-message": "0.74.0-beta9", - "magento/module-msrp": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-cookie": "0.74.0-beta9" + "php": "^7.1.3" }, - "type": "magento2-module", + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Checkout" - ] + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T18:35:49+00:00" }, { - "name": "magento/module-checkout-agreements", - "version": "0.74.0-beta9", + "name": "symfony/filesystem", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-checkout-agreements-0.74.0-beta9.zip", - "reference": null, - "shasum": "9adef902e061afdd2bc88b9257bbb7def693f46d" + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e16b9e471703b2c60b95f14d31c1239f68f11601", + "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CheckoutAgreements" - ] + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2019-02-07T11:40:08+00:00" }, { - "name": "magento/module-cms", - "version": "0.74.0-beta9", + "name": "symfony/finder", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cms-0.74.0-beta9.zip", - "reference": null, - "shasum": "31142e011e4269d240ea9389888484ab69b1eab1" + "url": "https://api.github.com/repos/symfony/finder/zipball/267b7002c1b70ea80db0833c3afe05f0fbde580a", + "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-email": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "magento/module-variable": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Cms" - ] + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:42:05+00:00" }, { - "name": "magento/module-cms-url-rewrite", - "version": "0.74.0-beta9", + "name": "symfony/inflector", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "275e54941a4f17a471c68d2a00e2513fc1fd4a78" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cms-url-rewrite-0.74.0-beta9.zip", - "reference": null, - "shasum": "fe26190823ea1e1bd828ff5fc087506b38c45c5f" + "url": "https://api.github.com/repos/symfony/inflector/zipball/275e54941a4f17a471c68d2a00e2513fc1fd4a78", + "reference": "275e54941a4f17a471c68d2a00e2513fc1fd4a78", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-cms": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-url-rewrite": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CmsUrlRewrite" - ] + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "time": "2019-01-16T20:31:39+00:00" }, { - "name": "magento/module-config", - "version": "0.74.0-beta9", + "name": "symfony/options-resolver", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "3896e5a7d06fd15fa4947694c8dcdd371ff147d1" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-config-0.74.0-beta9.zip", - "reference": null, - "shasum": "ae36b5498a9f299bacb1cc306a066db4386ad3c8" + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3896e5a7d06fd15fa4947694c8dcdd371ff147d1", + "reference": "3896e5a7d06fd15fa4947694c8dcdd371ff147d1", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-cron": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-email": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Config" - ] + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "magento/module-configurable-import-export", - "version": "0.74.0-beta9", + "name": "symfony/polyfill-ctype", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "82ebae02209c21113908c229e9883c419720738a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-configurable-import-export-0.74.0-beta9.zip", - "reference": null, - "shasum": "99d781b8ec0fb5c8655a0bacb75b6ff5151d7687" + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-import-export": "0.74.0-beta9", - "magento/module-configurable-product": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.3" }, - "type": "magento2-module", + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ConfigurableImportExport" - ] + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "backendtea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "magento/module-configurable-product", - "version": "0.74.0-beta9", + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-configurable-product-0.74.0-beta9.zip", - "reference": null, - "shasum": "cd60da462c29cecacee7c7cf742ca9e3a962fc81" + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-catalog-rule": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.3" }, "suggest": { - "magento/module-webapi": "0.74.0-beta9" + "ext-mbstring": "For best performance" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ConfigurableProduct" - ] + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "magento/module-contact", - "version": "0.74.0-beta9", + "name": "symfony/polyfill-php56", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-contact-0.74.0-beta9.zip", - "reference": null, - "shasum": "c3a57727ab245a396b597e41c78d9ff81c06fe88" + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/f4dddbc5c3471e1b700a147a20ae17cdb72dbe42", + "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-cms": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Contact" - ] + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "magento/module-cookie", - "version": "0.74.0-beta9", + "name": "symfony/polyfill-util", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "b46c6cae28a3106735323f00a0c38eccf2328897" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cookie-0.74.0-beta9.zip", - "reference": null, - "shasum": "281a79e0f61889c3d17111451be1860abb216939" + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/b46c6cae28a3106735323f00a0c38eccf2328897", + "reference": "b46c6cae28a3106735323f00a0c38eccf2328897", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-store": "0.74.0-beta9", - "php": "~5.4.11|~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-backend": "0.74.0-beta9" + "php": ">=5.3.3" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Cookie" - ] - ] + "branch-alias": { + "dev-master": "1.11-dev" + } }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2019-02-08T14:16:39+00:00" }, { - "name": "magento/module-cron", - "version": "0.74.0-beta9", + "name": "symfony/process", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "72d838aafaa7c790330fe362b9cecec362c64629" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cron-0.74.0-beta9.zip", - "reference": null, - "shasum": "e20e45f6282f8a595637f404faccc444023f02e7" + "url": "https://api.github.com/repos/symfony/process/zipball/72d838aafaa7c790330fe362b9cecec362c64629", + "reference": "72d838aafaa7c790330fe362b9cecec362c64629", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-config": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Cron" - ] + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T19:07:26+00:00" }, { - "name": "magento/module-currency-symbol", - "version": "0.74.0-beta9", + "name": "symfony/property-access", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "5440dd2b5373073beee051bd978b58a0f543b192" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-currency-symbol-0.74.0-beta9.zip", - "reference": null, - "shasum": "3e105d2bae0106c0675e72c3fccf6a6f0463a346" + "url": "https://api.github.com/repos/symfony/property-access/zipball/5440dd2b5373073beee051bd978b58a0f543b192", + "reference": "5440dd2b5373073beee051bd978b58a0f543b192", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3", + "symfony/inflector": "~3.4|~4.0" }, - "type": "magento2-module", + "require-dev": { + "symfony/cache": "~3.4|~4.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CurrencySymbol" - ] + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "time": "2019-03-04T09:16:25+00:00" }, { - "name": "magento/module-customer", - "version": "0.74.0-beta9", + "name": "tedivm/jshrink", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/tedious/JShrink.git", + "reference": "21254058dc3ce6aba6bef458cff4bfa25cf8b198" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-customer-0.74.0-beta9.zip", - "reference": null, - "shasum": "7d303f83ba1340fd2a979d87d7184f6d6c831f9f" + "url": "https://api.github.com/repos/tedious/JShrink/zipball/21254058dc3ce6aba6bef458cff4bfa25cf8b198", + "reference": "21254058dc3ce6aba6bef458cff4bfa25cf8b198", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-integration": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-newsletter": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-review": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-cookie": "0.74.0-beta9" + "php": "^5.6|^7.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Customer" - ] - ] + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.8", + "php-coveralls/php-coveralls": "^1.1.0", + "phpunit/phpunit": "^6" + }, + "type": "library", + "autoload": { + "psr-0": { + "JShrink": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Robert Hafner", + "email": "tedivm@tedivm.com" + } + ], + "description": "Javascript Minifier built in PHP", + "homepage": "http://github.com/tedious/JShrink", + "keywords": [ + "javascript", + "minifier" + ], + "time": "2018-09-16T00:02:51+00:00" }, { - "name": "magento/module-customer-import-export", - "version": "0.74.0-beta9", + "name": "temando/module-shipping-m2", + "version": "1.5.1", "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-customer-import-export-0.74.0-beta9.zip", + "url": "https://repo.magento.com/archives/temando/module-shipping-m2/temando-module-shipping-m2-1.5.1.0.zip", "reference": null, - "shasum": "865cf1afa2dcd6daecde627492421421d1b4b4ea" + "shasum": "7fb7a9164d6bc4a17e9b8869ddbc8c5f79106905" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-iconv": "*", + "ext-intl": "*", + "ext-json": "*", + "magento/framework": "^102.0.0", + "magento/module-backend": "^101.0.0", + "magento/module-catalog": "^103.0.0", + "magento/module-checkout": "^100.3.0", + "magento/module-config": "^101.1.0||^102.0.0", + "magento/module-customer": "^102.0.0", + "magento/module-directory": "^100.3.0", + "magento/module-eav": "^102.0.0", + "magento/module-email": "^101.0.0", + "magento/module-integration": "^100.3.0", + "magento/module-multishipping": "^100.3.0", + "magento/module-payment": "^100.3.0", + "magento/module-quote": "^101.1.0", + "magento/module-sales": "^102.0.0", + "magento/module-security": "^100.3.0", + "magento/module-shipping": "^100.3.0", + "magento/module-store": "^101.0.0", + "magento/module-tax": "^100.3.0", + "magento/module-ui": "^101.1.0", + "monolog/monolog": "^1.17.0", + "php": "~7.1.3||~7.2.0", + "psr/log": "~1.0", + "zendframework/zend-barcode": "^2.7.0", + "zendframework/zend-http": "^2.6.0" + }, + "suggest": { + "magento/module-rma": "^101.1.0", + "magento/module-scalable-checkout": "^100.3.0", + "magento/module-scalable-oms": "^100.3.0" }, "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/CustomerImportExport" - ] - ] + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Temando\\Shipping\\": "" + } }, "license": [ - "OSL-3.0", - "AFL-3.0" + "OSL-3.0" ], - "description": "N/A" + "authors": [ + { + "name": "Christoph Aßmann", + "email": "christoph.assmann@netresearch.de", + "homepage": "https://www.netresearch.de/", + "role": "Developer" + } + ], + "description": "Temando multi-carrier shipping extension for Magento 2" }, { - "name": "magento/module-developer", - "version": "0.74.0-beta9", + "name": "true/punycode", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/true/php-punycode.git", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-developer-0.74.0-beta9.zip", - "reference": null, - "shasum": "6706b2f7949678e99496ebea9fd12d9262b62004" + "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0", + "symfony/polyfill-mbstring": "^1.3" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Developer" - ] - ] + "require-dev": { + "phpunit/phpunit": "~4.7", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "TrueBV\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" + ], + "authors": [ + { + "name": "Renan Gonçalves", + "email": "renan.saddam@gmail.com" + } ], - "description": "N/A" + "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)", + "homepage": "https://github.com/true/php-punycode", + "keywords": [ + "idna", + "punycode" + ], + "time": "2016-11-16T10:37:54+00:00" }, { - "name": "magento/module-dhl", - "version": "0.74.0-beta9", + "name": "tubalmartin/cssmin", + "version": "v4.1.1", + "source": { + "type": "git", + "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", + "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-dhl-0.74.0-beta9.zip", - "reference": null, - "shasum": "34a111604699481f2eb3904bf4a1100c743f0e20" + "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/3cbf557f4079d83a06f9c3ff9b957c022d7805cf", + "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-pcre": "*", + "php": ">=5.3.2" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Dhl" - ] - ] + "require-dev": { + "cogpowered/finediff": "0.3.*", + "phpunit/phpunit": "4.8.*" }, + "bin": [ + "cssmin" + ], + "type": "library", + "autoload": { + "psr-4": { + "tubalmartin\\CssMin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Túbal Martín", + "homepage": "http://tubalmartin.me/" + } + ], + "description": "A PHP port of the YUI CSS compressor", + "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", + "keywords": [ + "compress", + "compressor", + "css", + "cssmin", + "minify", + "yui" + ], + "time": "2018-01-15T15:26:51+00:00" }, { - "name": "magento/module-directory", - "version": "0.74.0-beta9", + "name": "vertex/module-tax", + "version": "3.1.0", "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-directory-0.74.0-beta9.zip", + "url": "https://repo.magento.com/archives/vertex/module-tax/vertex-module-tax-3.1.0.0.zip", "reference": null, - "shasum": "426f27e9626d056dad46e805eae800eadf5e44fe" + "shasum": "f741436e6732930f69d24f7f8291101b0d3382c6" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-json": "*", + "ext-simplexml": "*", + "ext-soap": "*", + "magento/framework": "^100|^101|^102", + "magento/module-backend": "^100|^101", + "magento/module-catalog": "^100|^101|^102|^103", + "magento/module-checkout": "^100", + "magento/module-config": "^100|^101", + "magento/module-cron": "^100", + "magento/module-customer": "^100|^101|^102", + "magento/module-directory": "^100", + "magento/module-eav": "^100|^101|^102", + "magento/module-quote": "^100|^101", + "magento/module-sales": "^100|^101|^102", + "magento/module-shipping": "^100", + "magento/module-store": "^100|^101", + "magento/module-tax": "^100", + "magento/module-ui": "^100|^101", + "php": "^5.6|^7.0", + "vertex/sdk": "^1.1.0" + }, + "conflict": { + "magento/module-gift-wrapping": ">=102", + "pixafy/tax": "*", + "pixafy/tax-ee": "*", + "vertex/tax": "*", + "vertex/tax-ee": "*" + }, + "require-dev": { + "ext-dom": "*", + "ext-simplexml": "*", + "magento/marketplace-eqp": "^1.0", + "magento/module-offline-shipping": "^100.2", + "magento/module-usps": "^100.2" + }, + "suggest": { + "magento/module-gift-card-account": "Vertex Tax Links for Magento 2 also supports Magento's Gift Card Account module", + "magento/module-gift-wrapping": "Vertex Tax Links for Magento 2 also supports Magento's Gift Wrapping module", + "magento/module-multishipping": "Vertex Tax Links for Magento 2 also supports Magento's Multishipping module", + "magento/module-reward": "Vertex Tax Links for Magento 2 also supports Magento's Reward module" }, "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Directory" - ] - ] + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Vertex\\Tax\\": "" + } }, "license": [ - "OSL-3.0", - "AFL-3.0" + "proprietary" ], - "description": "N/A" + "description": "Vertex Tax Links for Magento 2" }, { - "name": "magento/module-downloadable", - "version": "0.74.0-beta9", - "dist": { - "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-downloadable-0.74.0-beta9.zip", - "reference": null, - "shasum": "548720f2619acfd6d05c2e2d4ef6d4e0add8bc32" - }, + "name": "vertex/product-magento-module", + "version": "3.1.0", "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-gift-message": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-msrp": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Downloadable" - ] - ] + "vertex/module-tax": "3.1.0" }, + "type": "metapackage", "license": [ - "OSL-3.0", - "AFL-3.0" + "proprietary" ], - "description": "N/A" + "authors": [ + { + "name": "Mediotype", + "email": "diveinto@mediotype.com", + "homepage": "http://www.mediotype.com/", + "role": "Development Company" + } + ], + "description": "Vertex Tax Links for Magento 2", + "homepage": "http://go.vertexsmb.com/magento_cbe", + "keywords": [ + "tax", + "vertex" + ] }, { - "name": "magento/module-eav", - "version": "0.74.0-beta9", + "name": "vertex/sdk", + "version": "1.1.0", "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-eav-0.74.0-beta9.zip", + "url": "https://repo.magento.com/archives/vertex/sdk/vertex-sdk-1.1.0.0.zip", "reference": null, - "shasum": "6c3a9b09465bab43077912e1b592aad51f5535ea" + "shasum": "85c38829f8233c14865912e092a2c5c6c80146ec" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-soap": "*", + "php": "^5.4|^7" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Eav" - ] - ] + "require-dev": { + "php": "^7.1", + "phpmd/phpmd": "^2.6", + "phpunit/phpunit": "^7.2", + "squizlabs/php_codesniffer": "^3.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Vertex\\": "src/" + } }, "license": [ - "OSL-3.0", - "AFL-3.0" + "proprietary" ], - "description": "N/A" + "description": "Tools for communicating with Vertex Cloud and Vertex O-Series" }, { - "name": "magento/module-email", - "version": "0.74.0-beta9", + "name": "webonyx/graphql-php", + "version": "v0.12.6", + "source": { + "type": "git", + "url": "https://github.com/webonyx/graphql-php.git", + "reference": "4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-email-0.74.0-beta9.zip", - "reference": null, - "shasum": "fdcbc0aa8f3bb96f267b77f560f0888c1dd07b4b" + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95", + "reference": "4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-variable": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-mbstring": "*", + "php": ">=5.6" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Email" - ] - ] + "require-dev": { + "phpunit/phpunit": "^4.8", + "psr/http-message": "^1.0", + "react/promise": "2.*" + }, + "suggest": { + "psr/http-message": "To use standard GraphQL server", + "react/promise": "To leverage async resolving on React PHP platform" + }, + "type": "library", + "autoload": { + "psr-4": { + "GraphQL\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "description": "A PHP port of GraphQL reference implementation", + "homepage": "https://github.com/webonyx/graphql-php", + "keywords": [ + "api", + "graphql" + ], + "time": "2018-09-02T14:59:54+00:00" }, { - "name": "magento/module-fedex", - "version": "0.74.0-beta9", + "name": "yubico/u2flib-server", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/Yubico/php-u2flib-server.git", + "reference": "55d813acf68212ad2cadecde07551600d6971939" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-fedex-0.74.0-beta9.zip", - "reference": null, - "shasum": "ddb21f39509d35d91d654ed4cee2d0bd6d96b8ff" + "url": "https://api.github.com/repos/Yubico/php-u2flib-server/zipball/55d813acf68212ad2cadecde07551600d6971939", + "reference": "55d813acf68212ad2cadecde07551600d6971939", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-openssl": "*", + "paragonie/random_compat": ">= 1", + "php": ">=5.6" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Fedex" - ] + "require-dev": { + "phpunit/phpunit": "~5.7", + "vimeo/psalm": "^0|^1|^2" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-2-Clause" ], - "description": "N/A" + "description": "Library for U2F implementation", + "homepage": "https://developers.yubico.com/php-u2flib-server", + "time": "2018-09-07T08:16:44+00:00" }, { - "name": "magento/module-gift-message", - "version": "0.74.0-beta9", + "name": "zendframework/zend-barcode", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-barcode.git", + "reference": "50f24f604ef2172a0127efe91e786bc2caf2e8cf" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-gift-message-0.74.0-beta9.zip", - "reference": null, - "shasum": "baa084f6f8c5098573a39441b1e7ff478aaf645d" + "url": "https://api.github.com/repos/zendframework/zend-barcode/zipball/50f24f604ef2172a0127efe91e786bc2caf2e8cf", + "reference": "50f24f604ef2172a0127efe91e786bc2caf2e8cf", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-multishipping": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1", + "zendframework/zend-validator": "^2.10.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6 || ^3.1", + "zendframework/zendpdf": "^2.0.2" + }, + "suggest": { + "zendframework/zendpdf": "ZendPdf component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GiftMessage" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Barcode\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a generic way to generate barcodes", + "keywords": [ + "ZendFramework", + "barcode", + "zf" + ], + "time": "2017-12-11T15:30:02+00:00" }, { - "name": "magento/module-google-adwords", - "version": "0.74.0-beta9", + "name": "zendframework/zend-captcha", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-captcha.git", + "reference": "37e9b6a4f632a9399eecbf2e5e325ad89083f87b" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-adwords-0.74.0-beta9.zip", - "reference": null, - "shasum": "2e07b618a3a20384a128f6c769f0dd767d11da84" + "url": "https://api.github.com/repos/zendframework/zend-captcha/zipball/37e9b6a4f632a9399eecbf2e5e325ad89083f87b", + "reference": "37e9b6a4f632a9399eecbf2e5e325ad89083f87b", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-math": "^2.7 || ^3.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-session": "^2.8", + "zendframework/zend-text": "^2.6", + "zendframework/zend-validator": "^2.10.1", + "zendframework/zendservice-recaptcha": "^3.0" + }, + "suggest": { + "zendframework/zend-i18n-resources": "Translations of captcha messages", + "zendframework/zend-session": "Zend\\Session component", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleAdwords" - ] - ] + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Captcha\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Generate and validate CAPTCHAs using Figlets, images, ReCaptcha, and more", + "keywords": [ + "ZendFramework", + "captcha", + "zf" + ], + "time": "2018-04-24T17:24:10+00:00" }, { - "name": "magento/module-google-analytics", - "version": "0.74.0-beta9", + "name": "zendframework/zend-code", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-code.git", + "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-analytics-0.74.0-beta9.zip", - "reference": null, - "shasum": "006250c389821f90c61bca62b29aa477f66071b5" + "url": "https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb", + "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-cookie": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1", + "zendframework/zend-eventmanager": "^2.6 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "doctrine/annotations": "~1.0", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "zendframework/zend-coding-standard": "^1.0.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "zendframework/zend-stdlib": "Zend\\Stdlib component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleAnalytics" - ] - ] + "branch-alias": { + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Code\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides facilities to generate arbitrary code using an object oriented interface", + "homepage": "https://github.com/zendframework/zend-code", + "keywords": [ + "code", + "zf2" + ], + "time": "2018-08-13T20:36:59+00:00" }, { - "name": "magento/module-google-optimizer", - "version": "0.74.0-beta9", + "name": "zendframework/zend-config", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-optimizer-0.74.0-beta9.zip", - "reference": null, - "shasum": "35f7d31d069c1bfb8a9fc6e30757546f4188e05c" + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-google-analytics": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.5", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleOptimizer" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" + ], + "time": "2016-02-04T23:01:10+00:00" }, { - "name": "magento/module-google-shopping", - "version": "0.74.0-beta9", + "name": "zendframework/zend-console", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-console.git", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-shopping-0.74.0-beta9.zip", - "reference": null, - "shasum": "b0867fd647a13818a701974a0224fd3c7f306d1a" + "url": "https://api.github.com/repos/zendframework/zend-console/zipball/e8aa08da83de3d265256c40ba45cd649115f0e18", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-filter": "^2.7.2", + "zendframework/zend-json": "^2.6 || ^3.0", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "zendframework/zend-filter": "To support DefaultRouteMatcher usage", + "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleShopping" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Console\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Build console applications using getopt syntax or routing, complete with prompts", + "keywords": [ + "ZendFramework", + "console", + "zf" + ], + "time": "2018-01-25T19:08:04+00:00" }, { - "name": "magento/module-grouped-import-export", - "version": "0.74.0-beta9", + "name": "zendframework/zend-crypt", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-crypt.git", + "reference": "1b2f5600bf6262904167116fa67b58ab1457036d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-grouped-import-export-0.74.0-beta9.zip", - "reference": null, - "shasum": "b740cdb730ba164f15c8beca9e42076cd73506f6" + "url": "https://api.github.com/repos/zendframework/zend-crypt/zipball/1b2f5600bf6262904167116fa67b58ab1457036d", + "reference": "1b2f5600bf6262904167116fa67b58ab1457036d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-import-export": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-grouped-product": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0", + "zendframework/zend-math": "^2.6", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-mcrypt": "Required for most features of Zend\\Crypt" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GroupedImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Crypt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-crypt", + "keywords": [ + "crypt", + "zf2" + ], + "time": "2016-02-03T23:46:30+00:00" }, { - "name": "magento/module-grouped-product", - "version": "0.74.0-beta9", + "name": "zendframework/zend-db", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-db.git", + "reference": "77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-grouped-product-0.74.0-beta9.zip", - "reference": null, - "shasum": "3b81ed8cbbe0118632fb0a73d96defaf17001627" + "url": "https://api.github.com/repos/zendframework/zend-db/zipball/77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e", + "reference": "77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-msrp": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "Zend\\EventManager component", + "zendframework/zend-hydrator": "Zend\\Hydrator component for using HydratingResultSets", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GroupedProduct" - ] - ] + "branch-alias": { + "dev-master": "2.9-dev", + "dev-develop": "2.10-dev" + }, + "zf": { + "component": "Zend\\Db", + "config-provider": "Zend\\Db\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Db\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations", + "keywords": [ + "ZendFramework", + "db", + "zf" + ], + "time": "2019-02-25T11:37:45+00:00" }, { - "name": "magento/module-import-export", - "version": "0.74.0-beta9", + "name": "zendframework/zend-di", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-di.git", + "reference": "1fd1ba85660b5a2718741b38639dc7c4c3194b37" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-import-export-0.74.0-beta9.zip", - "reference": null, - "shasum": "bdda8672b34b093b89ec54210b4e025b942f66b0" + "url": "https://api.github.com/repos/zendframework/zend-di/zipball/1fd1ba85660b5a2718741b38639dc7c4c3194b37", + "reference": "1fd1ba85660b5a2718741b38639dc7c4c3194b37", + "shasum": "" }, "require": { - "ext-ctype": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-code": "^2.6 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Di\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-di", + "keywords": [ + "di", + "zf2" + ], + "time": "2016-04-25T20:58:11+00:00" }, { - "name": "magento/module-indexer", - "version": "0.74.0-beta9", + "name": "zendframework/zend-diactoros", + "version": "1.8.6", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-indexer-0.74.0-beta9.zip", - "reference": null, - "shasum": "f87dcac18e19a70d34be3c8e486397fa37368fe6" + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" }, - "type": "magento2-module", + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", + "zendframework/zend-coding-standard": "~1.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Indexer" - ] - ] + "branch-alias": { + "dev-master": "1.8.x-dev", + "dev-develop": "1.9.x-dev", + "dev-release-2.0": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-2-Clause" ], - "description": "N/A" + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2018-09-05T19:29:37+00:00" }, { - "name": "magento/module-integration", - "version": "0.74.0-beta9", + "name": "zendframework/zend-escaper", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-escaper.git", + "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-integration-0.74.0-beta9.zip", - "reference": null, - "shasum": "4a4f8808a49733e7434198fd072a0f7dbb3dcff2" + "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074", + "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-user": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Integration" - ] - ] + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } }, - "license": [ - "OSL-3.0", - "AFL-3.0" + "autoload": { + "psr-4": { + "Zend\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], - "description": "N/A" + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "keywords": [ + "ZendFramework", + "escaper", + "zf" + ], + "time": "2018-04-25T15:48:53+00:00" }, { - "name": "magento/module-layered-navigation", - "version": "0.74.0-beta9", + "name": "zendframework/zend-eventmanager", + "version": "2.6.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "d238c443220dce4b6396579c8ab2200ec25f9108" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-layered-navigation-0.74.0-beta9.zip", - "reference": null, - "shasum": "a305729e3b91e7d37169eeb3e1dc8b1532982e7e" + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/d238c443220dce4b6396579c8ab2200ec25f9108", + "reference": "d238c443220dce4b6396579c8ab2200ec25f9108", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7" }, - "type": "magento2-module", + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/LayeredNavigation" - ] - ] + "branch-alias": { + "dev-release-2.6": "2.6-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "eventmanager", + "zf2" + ], + "time": "2017-12-12T17:48:56+00:00" }, { - "name": "magento/module-media-storage", - "version": "0.74.0-beta9", + "name": "zendframework/zend-feed", + "version": "2.10.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-feed.git", + "reference": "6641f4cf3f4586c63f83fd70b6d19966025c8888" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-media-storage-0.74.0-beta9.zip", - "reference": null, - "shasum": "385de9b553cd7e712e4fbc9d5b8a9aab22b19734" + "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/6641f4cf3f4586c63f83fd70b6d19966025c8888", + "reference": "6641f4cf3f4586c63f83fd70b6d19966025c8888", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-escaper": "^2.5.2", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-message": "^1.0.1", + "zendframework/zend-cache": "^2.7.2", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-http": "^2.7", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Zend\\Feed\\Reader\\Http\\Psr7ResponseDecorator", + "zendframework/zend-cache": "Zend\\Cache component, for optionally caching feeds between requests", + "zendframework/zend-db": "Zend\\Db component, for use with PubSubHubbub", + "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for easily extending ExtensionManager implementations", + "zendframework/zend-validator": "Zend\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/MediaStorage" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Feed\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides functionality for consuming RSS and Atom feeds", + "keywords": [ + "ZendFramework", + "feed", + "zf" + ], + "time": "2018-08-01T13:53:20+00:00" }, { - "name": "magento/module-msrp", - "version": "0.74.0-beta9", + "name": "zendframework/zend-filter", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "1c3e6d02f9cd5f6c929c9859498f5efbe216e86f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-msrp-0.74.0-beta9.zip", - "reference": null, - "shasum": "a938500cd0391fb081840683bc1d25c8d24bde3f" + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/1c3e6d02f9cd5f6c929c9859498f5efbe216e86f", + "reference": "1c3e6d02f9cd5f6c929c9859498f5efbe216e86f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-bundle": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-downloadable": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-grouped-product": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "conflict": { + "zendframework/zend-validator": "<2.10.1" + }, + "require-dev": { + "pear/archive_tar": "^1.4.3", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-factory": "^1.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-crypt": "^3.2.1", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-uri": "^2.6" + }, + "suggest": { + "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters", + "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters", + "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality", + "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Msrp" - ] - ] + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\Filter", + "config-provider": "Zend\\Filter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a set of commonly needed data filters", + "keywords": [ + "ZendFramework", + "filter", + "zf" + ], + "time": "2018-12-17T16:00:04+00:00" }, { - "name": "magento/module-multishipping", - "version": "0.74.0-beta9", + "name": "zendframework/zend-form", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-form.git", + "reference": "c713a12ccbd43148b71c9339e171ca11e3f8a1da" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-multishipping-0.74.0-beta9.zip", - "reference": null, - "shasum": "ed5f5195814708f0a40a063ede492ce28b7a85b6" + "url": "https://api.github.com/repos/zendframework/zend-form/zipball/c713a12ccbd43148b71c9339e171ca11e3f8a1da", + "reference": "c713a12ccbd43148b71c9339e171ca11e3f8a1da", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0", + "zendframework/zend-inputfilter": "^2.8", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "doctrine/annotations": "~1.0", + "phpunit/phpunit": "^5.7.23 || ^6.5.3", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-code": "^2.6 || ^3.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.6", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.2", + "zendframework/zendservice-recaptcha": "^3.0.0" + }, + "suggest": { + "zendframework/zend-captcha": "^2.7.1, required for using CAPTCHA form elements", + "zendframework/zend-code": "^2.6 || ^3.0, required to use zend-form annotations support", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, reuired for zend-form annotations support", + "zendframework/zend-i18n": "^2.6, required when using zend-form view helpers", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, required to use the form factories or provide services", + "zendframework/zend-view": "^2.6.2, required for using the zend-form view helpers", + "zendframework/zendservice-recaptcha": "in order to use the ReCaptcha form element" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Multishipping" - ] + "branch-alias": { + "dev-master": "2.13.x-dev", + "dev-develop": "2.14.x-dev" + }, + "zf": { + "component": "Zend\\Form", + "config-provider": "Zend\\Form\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Form\\": "src/" + }, + "files": [ + "autoload/formElementManagerPolyfill.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Validate and display simple and complex forms, casting forms to business objects and vice versa", + "keywords": [ + "ZendFramework", + "form", + "zf" + ], + "time": "2018-12-11T22:51:29+00:00" }, { - "name": "magento/module-newsletter", - "version": "0.74.0-beta9", + "name": "zendframework/zend-http", + "version": "2.8.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-http.git", + "reference": "d160aedc096be230af0fe9c31151b2b33ad4e807" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-newsletter-0.74.0-beta9.zip", - "reference": null, - "shasum": "1d65d77fdcefdfb81fb7831ddf925340fb8e18da" + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/d160aedc096be230af0fe9c31151b2b33ad4e807", + "reference": "d160aedc096be230af0fe9c31151b2b33ad4e807", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-cron": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-email": "0.74.0-beta9", - "magento/module-require-js": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-loader": "^2.5.1", + "zendframework/zend-stdlib": "^3.1 || ^2.7.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-validator": "^2.10.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^3.1 || ^2.6" + }, + "suggest": { + "paragonie/certainty": "For automated management of cacert.pem" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Newsletter" - ] - ] + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Http\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "keywords": [ + "ZendFramework", + "http", + "http client", + "zend", + "zf" + ], + "time": "2019-02-07T17:47:08+00:00" }, { - "name": "magento/module-offline-payments", - "version": "0.74.0-beta9", + "name": "zendframework/zend-hydrator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-hydrator.git", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-offline-payments-0.74.0-beta9.zip", - "reference": null, - "shasum": "820a2b58d81446545b30016a3601839d01d0d319" + "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-payment": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0@dev", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, to support aggregate hydrator usage", + "zendframework/zend-filter": "^2.6, to support naming strategy hydrator usage", + "zendframework/zend-serializer": "^2.6.1, to use the SerializableStrategy", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, to support hydrator plugin manager usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/OfflinePayments" - ] - ] + "branch-alias": { + "dev-release-1.0": "1.0-dev", + "dev-release-1.1": "1.1-dev", + "dev-master": "2.0-dev", + "dev-develop": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Hydrator\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-hydrator", + "keywords": [ + "hydrator", + "zf2" + ], + "time": "2016-02-18T22:38:26+00:00" }, { - "name": "magento/module-offline-shipping", - "version": "0.74.0-beta9", + "name": "zendframework/zend-i18n", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "6d69af5a04e1a4de7250043cb1322f077a0cdb7f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-offline-shipping-0.74.0-beta9.zip", - "reference": null, - "shasum": "e72fb8afe1ca9edc7c5fc82a68873ff2961565cc" + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/6d69af5a04e1a4de7250043cb1322f077a0cdb7f", + "reference": "6d69af5a04e1a4de7250043cb1322f077a0cdb7f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-sales-rule": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.3" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-i18n-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/OfflineShipping" - ] - ] + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\I18n", + "config-provider": "Zend\\I18n\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Provide translations for your application, and filter and validate internationalized values", + "keywords": [ + "ZendFramework", + "i18n", + "zf" + ], + "time": "2018-05-16T16:39:13+00:00" }, { - "name": "magento/module-page-cache", - "version": "0.74.0-beta9", + "name": "zendframework/zend-inputfilter", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-inputfilter.git", + "reference": "4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-page-cache-0.74.0-beta9.zip", - "reference": null, - "shasum": "756fb21471c1b0259baf4e594032e7aea5b222f2" + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c", + "reference": "4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-filter": "^2.9.1", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.11" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-message": "^1.0", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "suggest": { + "psr/http-message-implementation": "PSR-7 is required if you wish to validate PSR-7 UploadedFileInterface payloads" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/PageCache" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\InputFilter", + "config-provider": "Zend\\InputFilter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\InputFilter\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files", + "keywords": [ + "ZendFramework", + "inputfilter", + "zf" + ], + "time": "2019-01-30T16:58:51+00:00" }, { - "name": "magento/module-payment", - "version": "0.74.0-beta9", + "name": "zendframework/zend-json", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-payment-0.74.0-beta9.zip", - "reference": null, - "shasum": "4514f7446e6e9a19e82eddd8212e31d04377aa77" + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28", + "reference": "4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-centinel": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-stdlib": "^2.5 || ^3.0", + "zendframework/zendxml": "^1.0.2" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component, required to use Zend\\Json\\Server", + "zendframework/zend-server": "Zend\\Server component, required to use Zend\\Json\\Server", + "zendframework/zend-stdlib": "Zend\\Stdlib component, for use with caching Zend\\Json\\Server responses", + "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Payment" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://github.com/zendframework/zend-json", + "keywords": [ + "json", + "zf2" + ], + "time": "2016-02-04T21:20:26+00:00" }, { - "name": "magento/module-persistent", - "version": "0.74.0-beta9", + "name": "zendframework/zend-loader", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-loader.git", + "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-persistent-0.74.0-beta9.zip", - "reference": null, - "shasum": "afb7d470522a94295bc40744f6e99ae0ec682011" + "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/78f11749ea340f6ca316bca5958eef80b38f9b6c", + "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-cron": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Persistent" - ] - ] + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Loader\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Autoloading and plugin loading strategies", + "keywords": [ + "ZendFramework", + "loader", + "zf" + ], + "time": "2018-04-30T15:20:54+00:00" }, { - "name": "magento/module-product-alert", - "version": "0.74.0-beta9", + "name": "zendframework/zend-log", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-log.git", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-product-alert-0.74.0-beta9.zip", - "reference": null, - "shasum": "d3235530b5f3efd21e517052bdcf7fea0ced7475" + "url": "https://api.github.com/repos/zendframework/zend-log/zipball/9cec3b092acb39963659c2f32441cccc56b3f430", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "psr/log": "^1.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-filter": "^2.5", + "zendframework/zend-mail": "^2.6.1", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "ext-mongo": "mongo extension to use Mongo writer", + "ext-mongodb": "mongodb extension to use MongoDB writer", + "zendframework/zend-console": "Zend\\Console component to use the RequestID log processor", + "zendframework/zend-db": "Zend\\Db component to use the database log writer", + "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML log formatter", + "zendframework/zend-mail": "Zend\\Mail component to use the email log writer", + "zendframework/zend-validator": "Zend\\Validator component to block invalid log messages" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ProductAlert" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Log", + "config-provider": "Zend\\Log\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Log\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "component for general purpose logging", + "homepage": "https://github.com/zendframework/zend-log", + "keywords": [ + "log", + "logging", + "zf2" + ], + "time": "2018-04-09T21:59:51+00:00" }, { - "name": "magento/module-quote", - "version": "0.74.0-beta9", + "name": "zendframework/zend-mail", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mail.git", + "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-quote-0.74.0-beta9.zip", - "reference": null, - "shasum": "5c6a5e737a7c2fae72aa5381303030601eb3fac2" + "url": "https://api.github.com/repos/zendframework/zend-mail/zipball/d7beb63d5f7144a21ac100072c453e63860cdab8", + "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-catalog-rule": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-sales-sequence": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-iconv": "*", + "php": "^5.6 || ^7.0", + "true/punycode": "^2.1", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mime": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.10.2" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-crypt": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1" + }, + "suggest": { + "zendframework/zend-crypt": "Crammd5 support in SMTP Auth", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1 when using SMTP to deliver messages" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Quote" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Mail", + "config-provider": "Zend\\Mail\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mail\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages", + "keywords": [ + "ZendFramework", + "mail", + "zf" + ], + "time": "2018-06-07T13:37:07+00:00" }, { - "name": "magento/module-reports", - "version": "0.74.0-beta9", + "name": "zendframework/zend-math", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-math.git", + "reference": "1abce074004dacac1a32cd54de94ad47ef960d38" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-reports-0.74.0-beta9.zip", - "reference": null, - "shasum": "6dd2cca08c4b7c0560167f2ee3fe846004a241bd" + "url": "https://api.github.com/repos/zendframework/zend-math/zipball/1abce074004dacac1a32cd54de94ad47ef960d38", + "reference": "1abce074004dacac1a32cd54de94ad47ef960d38", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-downloadable": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-review": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-sales-rule": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "ircmaxell/random-lib": "~1.1", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-bcmath": "If using the bcmath functionality", + "ext-gmp": "If using the gmp functionality", + "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if Mcrypt extensions is unavailable" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Reports" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Math\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-math", + "keywords": [ + "math", + "zf2" + ], + "time": "2018-12-04T15:34:17+00:00" }, { - "name": "magento/module-require-js", - "version": "0.74.0-beta9", + "name": "zendframework/zend-mime", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mime.git", + "reference": "52ae5fa9f12845cae749271034a2d594f0e4c6f2" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-require-js-0.74.0-beta9.zip", - "reference": null, - "shasum": "842a7c38569cd97b61412c1d60d979710a6a7f9e" + "url": "https://api.github.com/repos/zendframework/zend-mime/zipball/52ae5fa9f12845cae749271034a2d594f0e4c6f2", + "reference": "52ae5fa9f12845cae749271034a2d594f0e4c6f2", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.21 || ^6.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-mail": "^2.6" + }, + "suggest": { + "zendframework/zend-mail": "Zend\\Mail component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/RequireJs" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mime\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Create and parse MIME messages and parts", + "homepage": "https://github.com/zendframework/zend-mime", + "keywords": [ + "ZendFramework", + "mime", + "zf" + ], + "time": "2018-05-14T19:02:50+00:00" }, { - "name": "magento/module-review", - "version": "0.74.0-beta9", + "name": "zendframework/zend-modulemanager", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-modulemanager.git", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-review-0.74.0-beta9.zip", - "reference": null, - "shasum": "507b801b44f75bc421976918b068da84367eb9f7" + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/394df6e12248ac430a312d4693f793ee7120baa6", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-newsletter": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-config": "^3.1 || ^2.6", + "zendframework/zend-eventmanager": "^3.2 || ^2.6.3", + "zendframework/zend-stdlib": "^3.1 || ^2.7" + }, + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-console": "^2.6", + "zendframework/zend-di": "^2.6", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mvc": "^3.0 || ^2.7", + "zendframework/zend-servicemanager": "^3.0.3 || ^2.7.5" }, "suggest": { - "magento/module-cookie": "0.74.0-beta9" + "zendframework/zend-console": "Zend\\Console component", + "zendframework/zend-loader": "Zend\\Loader component if you are not using Composer autoloading for your modules", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Review" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ModuleManager\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Modular application system for zend-mvc applications", + "homepage": "https://github.com/zendframework/zend-modulemanager", + "keywords": [ + "ZendFramework", + "modulemanager", + "zf" + ], + "time": "2017-12-02T06:11:18+00:00" }, { - "name": "magento/module-rss", - "version": "0.74.0-beta9", + "name": "zendframework/zend-mvc", + "version": "2.7.15", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mvc.git", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-rss-0.74.0-beta9.zip", - "reference": null, - "shasum": "dcbfaecc7026ed1ef047b6b8274db47009f7306f" + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-console": "^2.7", + "zendframework/zend-eventmanager": "^2.6.4 || ^3.0", + "zendframework/zend-form": "^2.11", + "zendframework/zend-hydrator": "^1.1 || ^2.4", + "zendframework/zend-psr7bridge": "^0.2", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7.5 || ^3.0" }, - "type": "magento2-module", + "replace": { + "zendframework/zend-router": "^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.8.36", + "sebastian/comparator": "^1.2.4", + "sebastian/version": "^1.0.4", + "zendframework/zend-authentication": "^2.6", + "zendframework/zend-cache": "^2.8", + "zendframework/zend-di": "^2.6", + "zendframework/zend-filter": "^2.8", + "zendframework/zend-http": "^2.8", + "zendframework/zend-i18n": "^2.8", + "zendframework/zend-inputfilter": "^2.8", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.3", + "zendframework/zend-modulemanager": "^2.8", + "zendframework/zend-serializer": "^2.8", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.7", + "zendframework/zend-uri": "^2.6", + "zendframework/zend-validator": "^2.10", + "zendframework/zend-view": "^2.9" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-di": "Zend\\Di component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", + "zendframework/zend-inputfilter": "Zend\\Inputfilter component", + "zendframework/zend-json": "Zend\\Json component", + "zendframework/zend-log": "Zend\\Log component", + "zendframework/zend-modulemanager": "Zend\\ModuleManager component", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager-di": "^1.0.1, if using zend-servicemanager v3 and requiring the zend-di integration", + "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-uri": "Zend\\Uri component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zend-view": "Zend\\View component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Rss" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Zend\\Mvc\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-mvc", + "keywords": [ + "mvc", + "zf2" + ], + "time": "2018-05-03T13:13:41+00:00" }, { - "name": "magento/module-rule", - "version": "0.74.0-beta9", + "name": "zendframework/zend-psr7bridge", + "version": "0.2.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-psr7bridge.git", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-rule-0.74.0-beta9.zip", - "reference": null, - "shasum": "20aa3361bafb3587d9168521d7a6283122dc4ead" + "url": "https://api.github.com/repos/zendframework/zend-psr7bridge/zipball/86c0b53b0c6381391c4add4a93a56e51d5c74605", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.5", + "psr/http-message": "^1.0", + "zendframework/zend-diactoros": "^1.1", + "zendframework/zend-http": "^2.5" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^4.7", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Rule" - ] - ] + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Psr7Bridge\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "PSR-7 <-> Zend\\Http bridge", + "homepage": "https://github.com/zendframework/zend-psr7bridge", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2016-05-10T21:44:39+00:00" }, { - "name": "magento/module-sales", - "version": "0.74.0-beta9", + "name": "zendframework/zend-serializer", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "0172690db48d8935edaf625c4cba38b79719892c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sales-0.74.0-beta9.zip", - "reference": null, - "shasum": "007ca46fc540820c8f17786cabaa544f0fe7f984" + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/0172690db48d8935edaf625c4cba38b79719892c", + "reference": "0172690db48d8935edaf625c4cba38b79719892c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-email": "0.74.0-beta9", - "magento/module-gift-message": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-reports": "0.74.0-beta9", - "magento/module-sales-rule": "0.74.0-beta9", - "magento/module-sales-sequence": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-json": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-math": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization", + "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Sales" - ] - ] + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\Serializer", + "config-provider": "Zend\\Serializer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "keywords": [ + "ZendFramework", + "serializer", + "zf" + ], + "time": "2018-05-14T18:45:18+00:00" }, { - "name": "magento/module-sales-rule", - "version": "0.74.0-beta9", + "name": "zendframework/zend-server", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-server.git", + "reference": "23a2e9a5599c83c05da831cb7c649e8a7809595e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sales-rule-0.74.0-beta9.zip", - "reference": null, - "shasum": "25a2d8e1c2e722e102745e88928de0bd1dd80274" + "url": "https://api.github.com/repos/zendframework/zend-server/zipball/23a2e9a5599c83c05da831cb7c649e8a7809595e", + "reference": "23a2e9a5599c83c05da831cb7c649e8a7809595e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-rule": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-reports": "0.74.0-beta9", - "magento/module-rule": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-code": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.5 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/SalesRule" - ] - ] + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Create Reflection-based RPC servers", + "keywords": [ + "ZendFramework", + "server", + "zf" + ], + "time": "2018-04-30T22:21:28+00:00" }, { - "name": "magento/module-sales-sequence", - "version": "0.74.0-beta9", + "name": "zendframework/zend-servicemanager", + "version": "2.7.11", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "99ec9ed5d0f15aed9876433c74c2709eb933d4c7" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sales-sequence-0.74.0-beta9.zip", - "reference": null, - "shasum": "a242a2b697fc95c36a125bb4e51ec0a2b206b359" + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/99ec9ed5d0f15aed9876433c74c2709eb933d4c7", + "reference": "99ec9ed5d0f15aed9876433c74c2709eb933d4c7", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/SalesSequence" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ], + "time": "2018-06-22T14:49:54+00:00" }, { - "name": "magento/module-search", - "version": "0.74.0-beta9", + "name": "zendframework/zend-session", + "version": "2.8.5", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-session.git", + "reference": "2cfd90e1a2f6b066b9f908599251d8f64f07021b" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-search-0.74.0-beta9.zip", - "reference": null, - "shasum": "0005f68bc5abaa007361df0236b5fba80517af4d" + "url": "https://api.github.com/repos/zendframework/zend-session/zipball/2cfd90e1a2f6b066b9f908599251d8f64f07021b", + "reference": "2cfd90e1a2f6b066b9f908599251d8f64f07021b", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog-search": "0.74.0-beta9", - "magento/module-reports": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "container-interop/container-interop": "^1.1", + "mongodb/mongodb": "^1.0.1", + "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0", + "phpunit/phpunit": "^5.7.5 || >=6.0.13 <6.5.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.7", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6" + }, + "suggest": { + "mongodb/mongodb": "If you want to use the MongoDB session save handler", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-db": "Zend\\Db component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "Zend\\Validator component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Search" - ] - ] + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + }, + "zf": { + "component": "Zend\\Session", + "config-provider": "Zend\\Session\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Session\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "manage and preserve session data, a logical complement of cookie data, across multiple page requests by the same client", + "keywords": [ + "ZendFramework", + "session", + "zf" + ], + "time": "2018-02-22T16:33:54+00:00" }, { - "name": "magento/module-sendfriend", - "version": "0.74.0-beta9", + "name": "zendframework/zend-soap", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-soap.git", + "reference": "af03c32f0db2b899b3df8cfe29aeb2b49857d284" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sendfriend-0.74.0-beta9.zip", - "reference": null, - "shasum": "adb2246c88b666e9340f1a725bea2fb0aa037ca0" + "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/af03c32f0db2b899b3df8cfe29aeb2b49857d284", + "reference": "af03c32f0db2b899b3df8cfe29aeb2b49857d284", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "ext-soap": "*", + "php": "^5.6 || ^7.0", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-uri": "^2.5.2" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.21 || ^6.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-http": "^2.5.4" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Sendfriend" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Soap\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-soap", + "keywords": [ + "soap", + "zf2" + ], + "time": "2018-01-29T17:51:26+00:00" }, { - "name": "magento/module-shipping", - "version": "0.74.0-beta9", + "name": "zendframework/zend-stdlib", + "version": "2.7.7", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-shipping-0.74.0-beta9.zip", - "reference": null, - "shasum": "76013d8582463caeb15ce63a96139048a07ba90b" + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "shasum": "" }, "require": { - "ext-gd": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-contact": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-hydrator": "~1.1" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" }, "suggest": { - "magento/module-fedex": "0.74.0-beta9", - "magento/module-ups": "0.74.0-beta9" + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Shipping" - ] - ] + "branch-alias": { + "dev-release-2.7": "2.7-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2016-04-12T21:17:31+00:00" }, { - "name": "magento/module-sitemap", - "version": "0.74.0-beta9", + "name": "zendframework/zend-text", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-text.git", + "reference": "ca987dd4594f5f9508771fccd82c89bc7fbb39ac" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sitemap-0.74.0-beta9.zip", - "reference": null, - "shasum": "2169a32cae4f3de305ec17c4d8246175b7ddde9e" + "url": "https://api.github.com/repos/zendframework/zend-text/zipball/ca987dd4594f5f9508771fccd82c89bc7fbb39ac", + "reference": "ca987dd4594f5f9508771fccd82c89bc7fbb39ac", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-url-rewrite": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Sitemap" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Text\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Create FIGlets and text-based tables", + "keywords": [ + "ZendFramework", + "text", + "zf" + ], + "time": "2018-04-30T14:55:10+00:00" }, { - "name": "magento/module-store", - "version": "0.74.0-beta9", + "name": "zendframework/zend-uri", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-uri.git", + "reference": "b2785cd38fe379a784645449db86f21b7739b1ee" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-store-0.74.0-beta9.zip", - "reference": null, - "shasum": "85ff2ce1c9c32ecb4696e96616b3523e2b78979d" + "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/b2785cd38fe379a784645449db86f21b7739b1ee", + "reference": "b2785cd38fe379a784645449db86f21b7739b1ee", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-validator": "^2.10" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Store" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "keywords": [ + "ZendFramework", + "uri", + "zf" + ], + "time": "2019-02-27T21:39:04+00:00" }, { - "name": "magento/module-tax", - "version": "0.74.0-beta9", + "name": "zendframework/zend-validator", + "version": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-validator.git", + "reference": "3c28dfe4e5951ba38059cea895244d9d206190b3" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-tax-0.74.0-beta9.zip", - "reference": null, - "shasum": "8be068d30674efe3bc2bfe1dba983d8b5d5e680d" + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/3c28dfe4e5951ba38059cea895244d9d206190b3", + "reference": "3c28dfe4e5951ba38059cea895244d9d206190b3", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-reports": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.1", + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.6 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "psr/http-message": "^1.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-db": "^2.7", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-math": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators", + "zendframework/zend-db": "Zend\\Db component, required by the (No)RecordExists validator", + "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", + "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages", + "zendframework/zend-i18n-resources": "Translations of validator messages", + "zendframework/zend-math": "Zend\\Math component, required by the Csrf validator", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "zendframework/zend-session": "Zend\\Session component, ^2.8; required by the Csrf validator", + "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Tax" - ] - ] + "branch-alias": { + "dev-master": "2.11.x-dev", + "dev-develop": "2.12.x-dev" + }, + "zf": { + "component": "Zend\\Validator", + "config-provider": "Zend\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Validator\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a set of commonly needed validators", + "homepage": "https://github.com/zendframework/zend-validator", + "keywords": [ + "validator", + "zf2" + ], + "time": "2019-01-29T22:26:39+00:00" }, { - "name": "magento/module-tax-import-export", - "version": "0.74.0-beta9", + "name": "zendframework/zend-view", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-view.git", + "reference": "c1a3f2043fb75b5983ab9adfc369ae396601be7e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-tax-import-export-0.74.0-beta9.zip", - "reference": null, - "shasum": "f2e9b0c55788af457a52ea579e2bb009f7f70ccd" + "url": "https://api.github.com/repos/zendframework/zend-view/zipball/c1a3f2043fb75b5983ab9adfc369ae396601be7e", + "reference": "c1a3f2043fb75b5983ab9adfc369ae396601be7e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-authentication": "^2.5", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-console": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-feed": "^2.7", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-log": "^2.7", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-mvc": "^2.7.14 || ^3.0", + "zendframework/zend-navigation": "^2.5", + "zendframework/zend-paginator": "^2.5", + "zendframework/zend-permissions-acl": "^2.6", + "zendframework/zend-router": "^3.0.1", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component", + "zendframework/zend-escaper": "Zend\\Escaper component", + "zendframework/zend-feed": "Zend\\Feed component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-mvc-plugin-flashmessenger": "zend-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with zend-mvc versions 3 and up", + "zendframework/zend-navigation": "Zend\\Navigation component", + "zendframework/zend-paginator": "Zend\\Paginator component", + "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component" + }, + "bin": [ + "bin/templatemap_generator.php" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/TaxImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\View\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" - }, + "description": "provides a system of helpers, output filters, and variable escaping", + "homepage": "https://github.com/zendframework/zend-view", + "keywords": [ + "view", + "zf2" + ], + "time": "2018-12-06T21:20:01+00:00" + } + ], + "packages-dev": [ { - "name": "magento/module-theme", - "version": "0.74.0-beta9", + "name": "allure-framework/allure-codeception", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-codeception.git", + "reference": "9d31d781b3622b028f1f6210bc76ba88438bd518" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-theme-0.74.0-beta9.zip", - "reference": null, - "shasum": "34fbc07ab9a15edac3b102a4ae6e04cbc16c4383" + "url": "https://api.github.com/repos/allure-framework/allure-codeception/zipball/9d31d781b3622b028f1f6210bc76ba88438bd518", + "reference": "9d31d781b3622b028f1f6210bc76ba88438bd518", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-require-js": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-translation": "0.74.0-beta9" + "allure-framework/allure-php-api": "~1.1.0", + "codeception/codeception": "~2.1", + "php": ">=5.4.0", + "symfony/filesystem": ">=2.6", + "symfony/finder": ">=2.6" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Theme" - ] - ] + "type": "library", + "autoload": { + "psr-0": { + "Yandex": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "A Codeception adapter for Allure report.", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "attachments", + "cases", + "codeception", + "report", + "steps", + "testing" + ], + "time": "2018-12-18T19:47:23+00:00" }, { - "name": "magento/module-translation", - "version": "0.74.0-beta9", + "name": "allure-framework/allure-php-api", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-php-adapter-api.git", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-translation-0.74.0-beta9.zip", - "reference": null, - "shasum": "a7d61f2d4fc262495f4d577ead1d66e6caebe200" + "url": "https://api.github.com/repos/allure-framework/allure-php-adapter-api/zipball/a462a0da121681577033e13c123b6cc4e89cdc64", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-developer": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "jms/serializer": ">=0.16.0", + "moontoast/math": ">=1.1.0", + "php": ">=5.4.0", + "phpunit/phpunit": ">=4.0.0", + "ramsey/uuid": ">=3.0.0", + "symfony/http-foundation": ">=2.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Translation" + "type": "library", + "autoload": { + "psr-0": { + "Yandex": [ + "src/", + "test/" ] - ] + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "PHP API for Allure adapter", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "api", + "php", + "report" + ], + "time": "2016-12-07T12:15:46+00:00" }, { - "name": "magento/module-ui", - "version": "0.74.0-beta9", + "name": "allure-framework/allure-phpunit", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-phpunit.git", + "reference": "45504aeba41304cf155a898fa9ac1aae79f4a089" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-ui-0.74.0-beta9.zip", - "reference": null, - "shasum": "501305e3a3648d549c5bc91baca89395495b2a74" + "url": "https://api.github.com/repos/allure-framework/allure-phpunit/zipball/45504aeba41304cf155a898fa9ac1aae79f4a089", + "reference": "45504aeba41304cf155a898fa9ac1aae79f4a089", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "allure-framework/allure-php-api": "~1.1.0", + "mikey179/vfsstream": "1.*", + "php": ">=7.0.0", + "phpunit/phpunit": ">=6.0.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Ui" - ] - ] + "type": "library", + "autoload": { + "psr-0": { + "Yandex": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "A PHPUnit adapter for Allure report.", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "attachments", + "cases", + "phpunit", + "report", + "steps", + "testing" + ], + "time": "2017-11-03T13:08:21+00:00" }, { - "name": "magento/module-ups", - "version": "0.74.0-beta9", + "name": "behat/gherkin", + "version": "v4.6.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-ups-0.74.0-beta9.zip", - "reference": null, - "shasum": "b818adcf10ebdc0586a81b7165a34af5b3860008" + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Ups" - ] - ] + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2019-01-16T14:22:17+00:00" }, { - "name": "magento/module-url-rewrite", - "version": "0.74.0-beta9", + "name": "codeception/codeception", + "version": "2.4.5", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-url-rewrite-0.74.0-beta9.zip", - "reference": null, - "shasum": "34d054a4ebd87ce92e1d1046d956862604f65b37" + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5fee32d5c82791548931cbc34806b4de6aa1abfc", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-url-rewrite": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-cms-url-rewrite": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", + "codeception/stub": "^2.0", + "ext-json": "*", + "ext-mbstring": "*", + "facebook/webdriver": ">=1.1.3 <2.0", + "guzzlehttp/guzzle": ">=4.1.4 <7.0", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" }, - "type": "magento2-module", + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/UrlRewrite" - ] - ] + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2018-08-01T07:21:49+00:00" }, { - "name": "magento/module-user", - "version": "0.74.0-beta9", + "name": "codeception/phpunit-wrapper", + "version": "6.6.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-user-0.74.0-beta9.zip", - "reference": null, - "shasum": "4d31751fe30d0f71eead11dc4a55d389c6093eda" + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c", + "reference": "d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-integration": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "phpunit/php-code-coverage": ">=4.0.4 <6.0", + "phpunit/phpunit": ">=6.5.13 <7.0", + "sebastian/comparator": ">=1.2.4 <3.0", + "sebastian/diff": ">=1.4 <4.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/User" - ] - ] + "replace": { + "codeception/phpunit-wrapper": "*" + }, + "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src\\" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2019-02-26T20:47:39+00:00" }, { - "name": "magento/module-usps", - "version": "0.74.0-beta9", + "name": "codeception/stub", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "853657f988942f7afb69becf3fd0059f192c705a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-usps-0.74.0-beta9.zip", - "reference": null, - "shasum": "81d063228ed743310ee1c9bbdc62562ac2fc9241" + "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", + "reference": "853657f988942f7afb69becf3fd0059f192c705a", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Usps" - ] - ] + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2019-03-02T15:35:10+00:00" }, { - "name": "magento/module-variable", - "version": "0.74.0-beta9", + "name": "consolidation/annotated-command", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "512a2e54c98f3af377589de76c43b24652bcb789" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-variable-0.74.0-beta9.zip", - "reference": null, - "shasum": "37a886883455a5321e5d28a5fc28248d56e32ee3" + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789", + "reference": "512a2e54c98f3af377589de76c43b24652bcb789", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-email": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.4.11|~5.5.0|~5.6.0" + "consolidation/output-formatters": "^3.4", + "php": ">=5.4.5", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Variable" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "time": "2019-03-08T16:55:03+00:00" }, { - "name": "magento/module-version", - "version": "0.74.0-beta9", + "name": "consolidation/config", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-version-0.74.0-beta9.zip", - "reference": null, - "shasum": "7867b8eb39d12d99ed28373b30d0904e4cc115ca" + "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Version" - ] - ] + "scenarios": { + "symfony4": { + "require-dev": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require-dev": { + "symfony/console": "^2.8", + "symfony/event-dispatcher": "^2.8", + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } ], - "description": "N/A" + "description": "Provide configuration services for a commandline tool.", + "time": "2019-03-03T19:37:04+00:00" }, { - "name": "magento/module-webapi", - "version": "0.74.0-beta9", + "name": "consolidation/log", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-webapi-0.74.0-beta9.zip", - "reference": null, - "shasum": "aa667d18e1f941bafa1067f077ff473bcd43ef0f" + "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-integration": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": ">=5.4.5", + "psr/log": "^1.0", + "symfony/console": "^2.8|^3|^4" }, - "suggest": { - "magento/module-user": "0.74.0-beta9" + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Webapi" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", + "time": "2019-01-01T17:30:51+00:00" }, { - "name": "magento/module-weee", - "version": "0.74.0-beta9", + "name": "consolidation/output-formatters", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "0881112642ad9059071f13f397f571035b527cb9" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-weee-0.74.0-beta9.zip", - "reference": null, - "shasum": "93cb501b913b88987b014815620f77c3d2c2ba34" + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0881112642ad9059071f13f397f571035b527cb9", + "reference": "0881112642ad9059071f13f397f571035b527cb9", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5.7.27", + "squizlabs/php_codesniffer": "^2.7", + "symfony/var-dumper": "^2.8|^3|^4", + "victorjonsson/markdowndocs": "^1.3" + }, + "suggest": { + "symfony/var-dumper": "For using the var_dump formatter" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Weee" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^6" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony3": { + "require": { + "symfony/console": "^3.4", + "symfony/finder": "^3.4", + "symfony/var-dumper": "^3.4" + }, + "config": { + "platform": { + "php": "5.6.32" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, + "branch-alias": { + "dev-master": "3.x-dev" + } }, + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "time": "2019-03-14T03:45:44+00:00" }, { - "name": "magento/module-widget", - "version": "0.74.0-beta9", + "name": "consolidation/robo", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/consolidation/Robo.git", + "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-widget-0.74.0-beta9.zip", - "reference": null, - "shasum": "15f9242331dc9ba7a212e0a5ad2a8feea4b6c947" + "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345", + "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-variable": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "consolidation/annotated-command": "^2.10.2", + "consolidation/config": "^1.2", + "consolidation/log": "~1", + "consolidation/output-formatters": "^3.1.13", + "consolidation/self-update": "^1", + "grasmash/yaml-expander": "^1.3", + "league/container": "^2.2", + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" }, - "type": "magento2-module", + "replace": { + "codegyre/robo": "< 1.0" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "g1a/composer-test-scenarios": "^3", + "goaop/framework": "~2.1.2", + "goaop/parser-reflection": "^1.1.0", + "natxet/cssmin": "3.0.4", + "nikic/php-parser": "^3.1.5", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.4", + "php-coveralls/php-coveralls": "^1", + "phpunit/php-code-coverage": "~2|~4", + "squizlabs/php_codesniffer": "^2.8" + }, + "suggest": { + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "natxet/CssMin": "For minifying CSS files in taskMinify", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." + }, + "bin": [ + "robo" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Widget" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "remove": [ + "goaop/framework" + ], + "config": { + "platform": { + "php": "5.5.9" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Robo\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "Modern task runner", + "time": "2019-03-19T18:07:19+00:00" }, { - "name": "magento/module-wishlist", - "version": "0.74.0-beta9", + "name": "consolidation/self-update", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/self-update.git", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-wishlist-0.74.0-beta9.zip", - "reference": null, - "shasum": "bd837563e9db26a98f853f8c812a033e3a522be9" + "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-grouped-product": "0.74.0-beta9", - "magento/module-rss": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-bundle": "0.74.0-beta9", - "magento/module-configurable-product": "0.74.0-beta9", - "magento/module-cookie": "0.74.0-beta9", - "magento/module-downloadable": "0.74.0-beta9" + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/filesystem": "^2.5|^3|^4" }, - "type": "magento2-module", + "bin": [ + "scripts/release" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Wishlist" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "SelfUpdate\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + }, + { + "name": "Alexander Menk", + "email": "menk@mestrona.net" + } + ], + "description": "Provides a self:update command for Symfony Console applications.", + "time": "2018-10-28T01:52:03+00:00" }, { - "name": "magento/product-community-edition", - "version": "0.74.0-beta9", + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_product-community-edition-0.74.0-beta9.zip", - "reference": null, - "shasum": "dcdb19ed1bd35078af02e032d57fa56f657e2de5" + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" }, "require": { - "composer/composer": "1.0.0-alpha9", - "magento/framework": "0.74.0-beta9", - "magento/language-de_de": "0.74.0-beta9", - "magento/language-en_us": "0.74.0-beta9", - "magento/language-es_es": "0.74.0-beta9", - "magento/language-fr_fr": "0.74.0-beta9", - "magento/language-nl_nl": "0.74.0-beta9", - "magento/language-pt_br": "0.74.0-beta9", - "magento/language-zh_cn": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/magento2-base": "0.74.0-beta9", - "magento/module-admin-notification": "0.74.0-beta9", - "magento/module-authorization": "0.74.0-beta9", - "magento/module-backend": "0.74.0-beta9", - "magento/module-backup": "0.74.0-beta9", - "magento/module-bundle": "0.74.0-beta9", - "magento/module-cache-invalidate": "0.74.0-beta9", - "magento/module-captcha": "0.74.0-beta9", - "magento/module-catalog": "0.74.0-beta9", - "magento/module-catalog-import-export": "0.74.0-beta9", - "magento/module-catalog-inventory": "0.74.0-beta9", - "magento/module-catalog-rule": "0.74.0-beta9", - "magento/module-catalog-search": "0.74.0-beta9", - "magento/module-catalog-url-rewrite": "0.74.0-beta9", - "magento/module-catalog-widget": "0.74.0-beta9", - "magento/module-centinel": "0.74.0-beta9", - "magento/module-checkout": "0.74.0-beta9", - "magento/module-checkout-agreements": "0.74.0-beta9", - "magento/module-cms": "0.74.0-beta9", - "magento/module-cms-url-rewrite": "0.74.0-beta9", - "magento/module-config": "0.74.0-beta9", - "magento/module-configurable-import-export": "0.74.0-beta9", - "magento/module-configurable-product": "0.74.0-beta9", - "magento/module-contact": "0.74.0-beta9", - "magento/module-cookie": "0.74.0-beta9", - "magento/module-cron": "0.74.0-beta9", - "magento/module-currency-symbol": "0.74.0-beta9", - "magento/module-customer": "0.74.0-beta9", - "magento/module-customer-import-export": "0.74.0-beta9", - "magento/module-developer": "0.74.0-beta9", - "magento/module-dhl": "0.74.0-beta9", - "magento/module-directory": "0.74.0-beta9", - "magento/module-downloadable": "0.74.0-beta9", - "magento/module-eav": "0.74.0-beta9", - "magento/module-email": "0.74.0-beta9", - "magento/module-fedex": "0.74.0-beta9", - "magento/module-gift-message": "0.74.0-beta9", - "magento/module-google-adwords": "0.74.0-beta9", - "magento/module-google-analytics": "0.74.0-beta9", - "magento/module-google-optimizer": "0.74.0-beta9", - "magento/module-google-shopping": "0.74.0-beta9", - "magento/module-grouped-import-export": "0.74.0-beta9", - "magento/module-grouped-product": "0.74.0-beta9", - "magento/module-import-export": "0.74.0-beta9", - "magento/module-indexer": "0.74.0-beta9", - "magento/module-integration": "0.74.0-beta9", - "magento/module-layered-navigation": "0.74.0-beta9", - "magento/module-media-storage": "0.74.0-beta9", - "magento/module-msrp": "0.74.0-beta9", - "magento/module-multishipping": "0.74.0-beta9", - "magento/module-newsletter": "0.74.0-beta9", - "magento/module-offline-payments": "0.74.0-beta9", - "magento/module-offline-shipping": "0.74.0-beta9", - "magento/module-page-cache": "0.74.0-beta9", - "magento/module-payment": "0.74.0-beta9", - "magento/module-persistent": "0.74.0-beta9", - "magento/module-product-alert": "0.74.0-beta9", - "magento/module-quote": "0.74.0-beta9", - "magento/module-reports": "0.74.0-beta9", - "magento/module-require-js": "0.74.0-beta9", - "magento/module-review": "0.74.0-beta9", - "magento/module-rss": "0.74.0-beta9", - "magento/module-rule": "0.74.0-beta9", - "magento/module-sales": "0.74.0-beta9", - "magento/module-sales-rule": "0.74.0-beta9", - "magento/module-sales-sequence": "0.74.0-beta9", - "magento/module-search": "0.74.0-beta9", - "magento/module-sendfriend": "0.74.0-beta9", - "magento/module-shipping": "0.74.0-beta9", - "magento/module-sitemap": "0.74.0-beta9", - "magento/module-store": "0.74.0-beta9", - "magento/module-tax": "0.74.0-beta9", - "magento/module-tax-import-export": "0.74.0-beta9", - "magento/module-theme": "0.74.0-beta9", - "magento/module-translation": "0.74.0-beta9", - "magento/module-ui": "0.74.0-beta9", - "magento/module-ups": "0.74.0-beta9", - "magento/module-url-rewrite": "0.74.0-beta9", - "magento/module-user": "0.74.0-beta9", - "magento/module-usps": "0.74.0-beta9", - "magento/module-variable": "0.74.0-beta9", - "magento/module-version": "0.74.0-beta9", - "magento/module-webapi": "0.74.0-beta9", - "magento/module-weee": "0.74.0-beta9", - "magento/module-widget": "0.74.0-beta9", - "magento/module-wishlist": "0.74.0-beta9", - "magento/theme-adminhtml-backend": "0.74.0-beta9", - "magento/theme-frontend-blank": "0.74.0-beta9", - "magento/theme-frontend-luma": "0.74.0-beta9", - "magento/zendframework1": "1.12.10", - "monolog/monolog": "1.11.0", - "oyejorge/less.php": "1.7.0.3", - "php": "~5.5.0|~5.6.0|~7.0.0", - "symfony/console": "~2.3", - "tubalmartin/cssmin": "2.4.8-p4", - "zendframework/zend-code": "2.4.0", - "zendframework/zend-config": "2.4.0", - "zendframework/zend-console": "2.4.0", - "zendframework/zend-di": "2.4.0", - "zendframework/zend-eventmanager": "2.4.0", - "zendframework/zend-form": "2.4.0", - "zendframework/zend-http": "2.4.0", - "zendframework/zend-i18n": "2.4.0", - "zendframework/zend-json": "2.4.0", - "zendframework/zend-log": "2.4.0", - "zendframework/zend-modulemanager": "2.4.0", - "zendframework/zend-mvc": "2.4.0", - "zendframework/zend-serializer": "2.4.0", - "zendframework/zend-server": "2.4.0", - "zendframework/zend-servicemanager": "2.4.0", - "zendframework/zend-soap": "2.4.0", - "zendframework/zend-stdlib": "2.4.0", - "zendframework/zend-text": "2.4.0", - "zendframework/zend-uri": "2.4.0", - "zendframework/zend-validator": "2.4.0", - "zendframework/zend-view": "2.4.0" + "php": ">=5.3.2" }, - "type": "metapackage", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "eCommerce Platform for Growth (Community Edition)" + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" }, { - "name": "magento/theme-adminhtml-backend", - "version": "0.74.0-beta9", + "name": "doctrine/annotations", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "53120e0eb10355388d6ccbe462f1fea34ddadb24" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_theme-adminhtml-backend-0.74.0-beta9.zip", - "reference": null, - "shasum": "180c47b61bd4711070cdc4156e652c0158fb85a6" + "url": "https://api.github.com/repos/doctrine/annotations/zipball/53120e0eb10355388d6ccbe462f1fea34ddadb24", + "reference": "53120e0eb10355388d6ccbe462f1fea34ddadb24", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "doctrine/lexer": "1.*", + "php": "^7.1" }, - "type": "magento2-theme", + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "adminhtml/Magento/backend" - ] - ] + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2019-03-25T19:12:02+00:00" }, { - "name": "magento/theme-frontend-blank", - "version": "0.74.0-beta9", + "name": "doctrine/collections", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "d2ae4ef05e25197343b6a39bae1d3c427a2f6956" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_theme-frontend-blank-0.74.0-beta9.zip", - "reference": null, - "shasum": "dc037fe5de13aff46169958e58c07993b623909a" + "url": "https://api.github.com/repos/doctrine/collections/zipball/d2ae4ef05e25197343b6a39bae1d3c427a2f6956", + "reference": "d2ae4ef05e25197343b6a39bae1d3c427a2f6956", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3" }, - "type": "magento2-theme", + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.2.2" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "frontend/Magento/blank" - ] - ] + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "time": "2019-03-25T19:03:48+00:00" }, { - "name": "magento/theme-frontend-luma", - "version": "0.74.0-beta9", + "name": "doctrine/instantiator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "a2c590166b2133a4633738648b6b064edae0814a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_theme-frontend-luma-0.74.0-beta9.zip", - "reference": null, - "shasum": "11d0b3dd1f800ef730bf87c02a5e5031c8a8e214" + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta9", - "magento/magento-composer-installer": "*", - "magento/theme-frontend-blank": "0.74.0-beta9", - "php": "~5.5.0|~5.6.0" + "php": "^7.1" }, - "type": "magento2-theme", + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "frontend/Magento/luma" - ] - ] + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-03-17T17:37:11+00:00" }, { - "name": "magento/zendframework1", - "version": "1.12.10", + "name": "doctrine/lexer", + "version": "v1.0.1", "source": { "type": "git", - "url": "https://github.com/magento/zf1.git", - "reference": "d1e5cd8c9f83229bcdd9bb485c3ce25259c77884" + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/zf1/zipball/d1e5cd8c9f83229bcdd9bb485c3ce25259c77884", - "reference": "d1e5cd8c9f83229bcdd9bb485c3ce25259c77884", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", "shasum": "" }, "require": { - "php": ">=5.2.11" - }, - "require-dev": { - "phpunit/dbunit": "1.3.*", - "phpunit/phpunit": "3.7.*" + "php": ">=5.3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-0": { - "Zend_": "library/" + "Doctrine\\Common\\Lexer\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "library/" - ], "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "Magento Zend Framework 1", - "homepage": "http://framework.zend.com/", + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", "keywords": [ - "ZF1", - "framework" + "lexer", + "parser" ], - "time": "2015-02-06 17:25:45" + "time": "2014-09-09T13:34:57+00:00" }, { - "name": "monolog/monolog", - "version": "1.11.0", + "name": "epfremme/swagger-php", + "version": "v2.0.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "ec3961874c43840e96da3a8a1ed20d8c73d7e5aa" + "url": "https://github.com/epfremmer/swagger-php.git", + "reference": "eee28a442b7e6220391ec953d3c9b936354f23bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/ec3961874c43840e96da3a8a1ed20d8c73d7e5aa", - "reference": "ec3961874c43840e96da3a8a1ed20d8c73d7e5aa", + "url": "https://api.github.com/repos/epfremmer/swagger-php/zipball/eee28a442b7e6220391ec953d3c9b936354f23bc", + "reference": "eee28a442b7e6220391ec953d3c9b936354f23bc", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "doctrine/annotations": "^1.2", + "doctrine/collections": "^1.3", + "jms/serializer": "^1.1", + "php": ">=5.5", + "phpoption/phpoption": "^1.1", + "symfony/yaml": "^2.7|^3.1" }, - "provide": { - "psr/log-implementation": "1.0.0" + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "~4.8|~5.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "package", + "autoload": { + "psr-4": { + "Epfremme\\Swagger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Edward Pfremmer", + "email": "epfremme@nerdery.com" + } + ], + "description": "Library for parsing swagger documentation into PHP entities for use in testing and code generation", + "time": "2016-09-26T17:24:17+00:00" + }, + { + "name": "facebook/webdriver", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/facebook/php-webdriver.git", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~3.7.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "videlalvaro/php-amqplib": "~2.4" + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" }, "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + "ext-SimpleXML": "For Firefox profile creation" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-community": "1.5-dev" } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Facebook\\WebDriver\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } + "Apache-2.0" ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", "keywords": [ - "log", - "logging", - "psr-3" + "facebook", + "php", + "selenium", + "webdriver" ], - "time": "2014-09-30 13:30:58" + "time": "2018-05-16T17:37:13+00:00" }, { - "name": "oyejorge/less.php", - "version": "v1.7.0.3", + "name": "flow/jsonpath", + "version": "0.4.0", "source": { "type": "git", - "url": "https://github.com/oyejorge/less.php.git", - "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de" + "url": "https://github.com/FlowCommunications/JSONPath.git", + "reference": "f0222818d5c938e4ab668ab2e2c079bd51a27112" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/oyejorge/less.php/zipball/6e08ecb07e6f6d9170c23e8744c58fdd822ad0de", - "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de", + "url": "https://api.github.com/repos/FlowCommunications/JSONPath/zipball/f0222818d5c938e4ab668ab2e2c079bd51a27112", + "reference": "f0222818d5c938e4ab668ab2e2c079bd51a27112", "shasum": "" }, "require": { - "php": ">=5.2" + "php": ">=5.4.0" + }, + "require-dev": { + "peekmo/jsonpath": "dev-master", + "phpunit/phpunit": "^4.0" }, - "bin": [ - "bin/lessc" - ], "type": "library", "autoload": { "psr-0": { - "Less": "lib/" - }, - "classmap": [ - "lessc.inc.php" - ] + "Flow\\JSONPath": "src/", + "Flow\\JSONPath\\Test": "tests/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "Matt Agar", - "homepage": "https://github.com/agar" - }, - { - "name": "Martin Jantošovič", - "homepage": "https://github.com/Mordred" - }, - { - "name": "Josh Schmidt", - "homepage": "https://github.com/oyejorge" + "name": "Stephen Frank", + "email": "stephen@flowsa.com" } ], - "description": "PHP port of the Javascript version of LESS http://lesscss.org", - "homepage": "http://lessphp.gpeasy.com", - "keywords": [ - "css", - "less", - "less.js", - "lesscss", - "php", - "stylesheet" - ], - "time": "2015-03-10 18:12:59" + "description": "JSONPath implementation for parsing, searching and flattening arrays", + "time": "2018-03-04T16:39:47+00:00" }, { - "name": "psr/log", - "version": "1.0.0", + "name": "friendsofphp/php-cs-fixer", + "version": "v2.13.3", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "38d6f2e9be2aa80bf3c7365612af7f9eb9078719" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/38d6f2e9be2aa80bf3c7365612af7f9eb9078719", + "reference": "38d6f2e9be2aa80bf3c7365612af7f9eb9078719", "shasum": "" }, - "type": "library", + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || >=7.0 <7.3", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6", + "symfony/event-dispatcher": "^3.0 || ^4.0", + "symfony/filesystem": "^3.0 || ^4.0", + "symfony/finder": "^3.0 || ^4.0", + "symfony/options-resolver": "^3.0 || ^4.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0", + "symfony/stopwatch": "^3.0 || ^4.0" + }, + "conflict": { + "hhvm": "*" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.0.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.0.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1", + "phpunitgoodpractices/traits": "^1.5.1", + "symfony/phpunit-bridge": "^4.0" + }, + "suggest": { + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/TestCase.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4439,42 +15993,48 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" + "description": "A tool to automatically fix PHP code style", + "time": "2019-01-04T18:24:28+00:00" }, { - "name": "seld/jsonlint", - "version": "1.3.1", + "name": "fzaninotto/faker", + "version": "v1.8.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4" + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4", - "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^1.5" }, - "bin": [ - "bin/jsonlint" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, "autoload": { "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" + "Faker\\": "src/Faker/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4483,58 +16043,50 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "François Zaninotto" } ], - "description": "JSON Linter", + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "json", - "linter", - "parser", - "validator" + "data", + "faker", + "fixtures" ], - "time": "2015-01-04 21:18:15" + "time": "2018-07-12T10:23:15+00:00" }, { - "name": "symfony/console", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Console", + "name": "grasmash/expander", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/Console.git", - "reference": "ebc5679854aa24ed7d65062e9e3ab0b18a917272" + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/ebc5679854aa24ed7d65062e9e3ab0b18a917272", - "reference": "ebc5679854aa24ed7d65062e9e3ab0b18a917272", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" }, "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/phpunit-bridge": "~2.7", - "symfony/process": "~2.1" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Console\\": "" + "psr-4": { + "Grasmash\\Expander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4543,98 +16095,90 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Matthew Grasmick" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" }, { - "name": "symfony/finder", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Finder", + "name": "grasmash/yaml-expander", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "704c64c8b12c8882640d5c0330a8414b1e06dc99" + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/704c64c8b12c8882640d5c0330a8414b1e06dc99", - "reference": "704c64c8b12c8882640d5c0330a8414b1e06dc99", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Finder\\": "" + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, + "MIT" + ], + "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Matthew Grasmick" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" }, { - "name": "symfony/process", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Process", + "name": "jms/metadata", + "version": "1.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "9f3c4baaf840ed849e1b1f7bfd5ae246e8509562" + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "e5854ab1aa643623dc64adde718a8eec32b957a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/9f3c4baaf840ed849e1b1f7bfd5ae246e8509562", - "reference": "9f3c4baaf840ed849e1b1f7bfd5ae246e8509562", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/e5854ab1aa643623dc64adde718a8eec32b957a8", + "reference": "e5854ab1aa643623dc64adde718a8eec32b957a8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "1.5.x-dev" } }, "autoload": { "psr-0": { - "Symfony\\Component\\Process\\": "" + "Metadata\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4643,1528 +16187,1516 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2018-10-26T12:40:10+00:00" }, { - "name": "tubalmartin/cssmin", - "version": "v2.4.8-p4", + "name": "jms/parser-lib", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", - "reference": "fe84d71e8420243544c0ce3bd0f5d7c1936b0f90" + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/fe84d71e8420243544c0ce3bd0f5d7c1936b0f90", - "reference": "fe84d71e8420243544c0ce3bd0f5d7c1936b0f90", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", "shasum": "" }, "require": { - "php": ">=5.0.0" + "phpoption/phpoption": ">=0.9,<2.0-dev" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "classmap": [ - "cssmin.php" - ] + "psr-0": { + "JMS\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Túbal Martín", - "homepage": "http://tubalmartin.me/" - } - ], - "description": "A PHP port of the YUI CSS compressor", - "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", - "keywords": [ - "compress", - "compressor", - "css", - "minify", - "yui" + "Apache2" ], - "time": "2014-09-22 08:08:50" + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" }, { - "name": "zendframework/zend-code", - "version": "2.4.0", + "name": "jms/serializer", + "version": "1.13.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "0ed94f842ba60cdc900c46a61bdbd7ac95a3e140" + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "00863e1d55b411cc33ad3e1de09a4c8d3aae793c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/0ed94f842ba60cdc900c46a61bdbd7ac95a3e140", - "reference": "0ed94f842ba60cdc900c46a61bdbd7ac95a3e140", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/00863e1d55b411cc33ad3e1de09a4c8d3aae793c", + "reference": "00863e1d55b411cc33ad3e1de09a4c8d3aae793c", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version" + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "^1.3", + "jms/parser-lib": "1.*", + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" }, "require-dev": { - "doctrine/common": ">=2.1", - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-stdlib": "self.version" + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0" }, "suggest": { - "doctrine/common": "Doctrine\\Common >=2.1 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to serialize data to YAML format." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-1.x": "1.13-dev" } }, "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" + "psr-0": { + "JMS\\Serializer": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides facilities to generate arbitrary code using an object oriented interface", - "homepage": "https://github.com/zendframework/zend-code", + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", "keywords": [ - "code", - "zf2" + "deserialization", + "jaxb", + "json", + "serialization", + "xml" ], - "time": "2015-03-31 15:39:14" + "time": "2018-07-25T13:58:54+00:00" }, { - "name": "zendframework/zend-config", - "version": "2.4.0", + "name": "league/container", + "version": "2.4.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-config.git", - "reference": "95f3a4b3fa85d49e6f060183122de4596fa6d29d" + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-config/zipball/95f3a4b3fa85d49e6f060183122de4596fa6d29d", - "reference": "95f3a4b3fa85d49e6f060183122de4596fa6d29d", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-servicemanager": "self.version" + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, - "suggest": { - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", - "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "Zend\\Config\\": "src/" + "League\\Container\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides a nested object property based user interface for accessing this configuration data within application code", - "homepage": "https://github.com/zendframework/zend-config", + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", "keywords": [ - "config", - "zf2" + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" ], - "time": "2015-03-25 20:55:48" + "time": "2017-05-10T09:20:27+00:00" }, { - "name": "zendframework/zend-console", - "version": "2.4.0", + "name": "lusitanian/oauth", + "version": "v0.8.11", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-console.git", - "reference": "54823d9ba6f8ce39046384ee5a043b5b3d5f56d7" + "url": "https://github.com/Lusitanian/PHPoAuthLib.git", + "reference": "fc11a53db4b66da555a6a11fce294f574a8374f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-console/zipball/54823d9ba6f8ce39046384ee5a043b5b3d5f56d7", - "reference": "54823d9ba6f8ce39046384ee5a043b5b3d5f56d7", + "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/fc11a53db4b66da555a6a11fce294f574a8374f9", + "reference": "fc11a53db4b66da555a6a11fce294f574a8374f9", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "3.7.*", + "predis/predis": "0.8.*@dev", + "squizlabs/php_codesniffer": "2.*", + "symfony/http-foundation": "~2.1" }, "suggest": { - "zendframework/zend-filter": "To support DefaultRouteMatcher usage", - "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", + "predis/predis": "Allows using the Redis storage backend.", + "symfony/http-foundation": "Allows using the Symfony Session storage backend." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "0.1-dev" } }, "autoload": { - "psr-4": { - "Zend\\Console\\": "src/" + "psr-0": { + "OAuth": "src", + "OAuth\\Unit": "tests" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "David Desberg", + "email": "david@daviddesberg.com" + }, + { + "name": "Elliot Chance", + "email": "elliotchance@gmail.com" + }, + { + "name": "Pieter Hordijk", + "email": "info@pieterhordijk.com" + } ], - "homepage": "https://github.com/zendframework/zend-console", + "description": "PHP 5.3+ oAuth 1/2 Library", "keywords": [ - "console", - "zf2" + "Authentication", + "authorization", + "oauth", + "security" ], - "time": "2015-03-25 20:55:48" + "time": "2018-02-14T22:37:14+00:00" }, { - "name": "zendframework/zend-di", - "version": "2.4.0", + "name": "magento/magento2-functional-testing-framework", + "version": "2.3.14", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-di.git", - "reference": "b9f8de081adecf71a003a569e9ba76c0a4c00bf2" + "url": "https://github.com/magento/magento2-functional-testing-framework.git", + "reference": "b4002b3fe53884895921b44cf519d42918e3c7c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-di/zipball/b9f8de081adecf71a003a569e9ba76c0a4c00bf2", - "reference": "b9f8de081adecf71a003a569e9ba76c0a4c00bf2", + "url": "https://api.github.com/repos/magento/magento2-functional-testing-framework/zipball/b4002b3fe53884895921b44cf519d42918e3c7c6", + "reference": "b4002b3fe53884895921b44cf519d42918e3c7c6", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" + "allure-framework/allure-codeception": "~1.3.0", + "codeception/codeception": "~2.3.4 || ~2.4.0 ", + "consolidation/robo": "^1.0.0", + "epfremme/swagger-php": "^2.0", + "ext-curl": "*", + "flow/jsonpath": ">0.2", + "fzaninotto/faker": "^1.6", + "monolog/monolog": "^1.0", + "mustache/mustache": "~2.5", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0|~7.2.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0", + "vlucas/phpdotenv": "^2.4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + "brainmaestro/composer-git-hooks": "^2.3", + "codacy/coverage": "^1.4", + "codeception/aspect-mock": "^3.0", + "doctrine/cache": "<1.7.0", + "goaop/framework": "2.2.0", + "php-coveralls/php-coveralls": "^1.0", + "phpmd/phpmd": "^2.6.0", + "phpunit/phpunit": "~6.5.0 || ~7.0.0", + "rregeer/phpunit-coverage-check": "^0.1.4", + "sebastian/phpcpd": "~3.0 || ~4.0", + "squizlabs/php_codesniffer": "~3.2", + "symfony/stopwatch": "~3.4.6" }, + "bin": [ + "bin/mftf" + ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "hooks": { + "pre-push": "bin/all-checks" } }, "autoload": { + "files": [ + "src/Magento/FunctionalTestingFramework/_bootstrap.php" + ], "psr-4": { - "Zend\\Di\\": "src/" + "Magento\\FunctionalTestingFramework\\": "src/Magento/FunctionalTestingFramework", + "MFTF\\": "dev/tests/functional/MFTF" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "AGPL-3.0" ], - "homepage": "https://github.com/zendframework/zend-di", + "description": "Magento2 Functional Testing Framework", "keywords": [ - "di", - "zf2" + "automation", + "functional", + "magento", + "testing" ], - "time": "2015-03-25 20:55:48" + "time": "2019-02-19T16:03:22+00:00" }, { - "name": "zendframework/zend-escaper", - "version": "2.4.0", + "name": "mikey179/vfsStream", + "version": "v1.6.6", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-escaper.git", - "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97" + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/15e5769e4fcdb4bf07ebd76500810e7070e23a97", - "reference": "15e5769e4fcdb4bf07ebd76500810e7070e23a97", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/095238a0711c974ae5b4ebf4c4534a23f3f6c99d", + "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": ">=5.3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "~4.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Escaper\\": "src/" + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-escaper", - "keywords": [ - "escaper", - "zf2" + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } ], - "time": "2015-03-23 18:29:14" + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "time": "2019-04-08T13:54:32+00:00" }, { - "name": "zendframework/zend-eventmanager", - "version": "2.4.0", + "name": "moontoast/math", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "58d21c95c7005a527262fd536499195f104e83f9" + "url": "https://github.com/ramsey/moontoast-math.git", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/58d21c95c7005a527262fd536499195f104e83f9", - "reference": "58d21c95c7005a527262fd536499195f104e83f9", + "url": "https://api.github.com/repos/ramsey/moontoast-math/zipball/c2792a25df5cad4ff3d760dd37078fc5b6fccc79", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "ext-bcmath": "*", + "php": ">=5.3.3" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "jakub-onderka/php-parallel-lint": "^0.9.0", + "phpunit/phpunit": "^4.7|>=5.0 <5.4", + "satooshi/php-coveralls": "^0.6.1", + "squizlabs/php_codesniffer": "^2.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { "psr-4": { - "Zend\\EventManager\\": "src/" + "Moontoast\\Math\\": "src/Moontoast/Math/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Apache-2.0" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } ], - "homepage": "https://github.com/zendframework/zend-event-manager", + "description": "A mathematics library, providing functionality for large numbers", + "homepage": "https://github.com/ramsey/moontoast-math", "keywords": [ - "eventmanager", - "zf2" + "bcmath", + "math" ], - "time": "2015-03-23 18:29:14" + "time": "2017-02-16T16:54:46+00:00" }, { - "name": "zendframework/zend-filter", - "version": "2.4.0", + "name": "mustache/mustache", + "version": "v2.12.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-filter.git", - "reference": "6d8aed2da81b62a04747346c4370562cdbe34595" + "url": "https://github.com/bobthecow/mustache.php.git", + "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/6d8aed2da81b62a04747346c4370562cdbe34595", - "reference": "6d8aed2da81b62a04747346c4370562cdbe34595", + "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/fe8fe72e9d580591854de404cc59a1b83ca4d19e", + "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.2.4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-crypt": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-crypt": "Zend\\Crypt component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter" + "friendsofphp/php-cs-fixer": "~1.11", + "phpunit/phpunit": "~3.7|~4.0|~5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Filter\\": "src/" + "psr-0": { + "Mustache": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides a set of commonly needed data filters", - "homepage": "https://github.com/zendframework/zend-filter", + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "A Mustache implementation in PHP.", + "homepage": "https://github.com/bobthecow/mustache.php", "keywords": [ - "filter", - "zf2" + "mustache", + "templating" ], - "time": "2015-03-25 20:55:48" + "time": "2017-07-11T12:54:05+00:00" }, { - "name": "zendframework/zend-form", - "version": "2.4.0", + "name": "myclabs/deep-copy", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-form.git", - "reference": "bca0db55718355d25c2c10fdd41a83561f1c94b3" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-form/zipball/bca0db55718355d25c2c10fdd41a83561f1c94b3", - "reference": "bca0db55718355d25c2c10fdd41a83561f1c94b3", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-inputfilter": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-captcha": "self.version", - "zendframework/zend-code": "self.version", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-view": "self.version", - "zendframework/zendservice-recaptcha": "*" - }, - "suggest": { - "zendframework/zend-captcha": "Zend\\Captcha component", - "zendframework/zend-code": "Zend\\Code component", - "zendframework/zend-eventmanager": "Zend\\EventManager component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-view": "Zend\\View component", - "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { "psr-4": { - "Zend\\Form\\": "src/" - } + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-form", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "form", - "zf2" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], - "time": "2015-03-28 20:29:18" + "time": "2019-04-07T13:18:21+00:00" }, { - "name": "zendframework/zend-http", - "version": "2.4.0", + "name": "pdepend/pdepend", + "version": "2.5.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-http.git", - "reference": "9c6047a0bdb3094d3ea07a215ff929cc47de4deb" + "url": "https://github.com/pdepend/pdepend.git", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/9c6047a0bdb3094d3ea07a215ff929cc47de4deb", - "reference": "9c6047a0bdb3094d3ea07a215ff929cc47de4deb", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-uri": "self.version", - "zendframework/zend-validator": "self.version" + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4", + "symfony/dependency-injection": "^2.3.0|^3|^4", + "symfony/filesystem": "^2.3.0|^3|^4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^4.8|^5.7", + "squizlabs/php_codesniffer": "^2.0.0" }, + "bin": [ + "src/bin/pdepend" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { "psr-4": { - "Zend\\Http\\": "src/" + "PDepend\\": "src/main/php/PDepend" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", - "homepage": "https://github.com/zendframework/zend-http", - "keywords": [ - "http", - "zf2" - ], - "time": "2015-03-27 15:46:30" + "description": "Official version of pdepend to be handled with Composer", + "time": "2017-12-13T13:21:38+00:00" }, { - "name": "zendframework/zend-i18n", - "version": "2.4.0", + "name": "phar-io/manifest", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-i18n.git", - "reference": "9aebc5287373a802540d75fe5508417f866c2e52" + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/9aebc5287373a802540d75fe5508417f866c2e52", - "reference": "9aebc5287373a802540d75fe5508417f866c2e52", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-cache": "self.version", - "zendframework/zend-config": "self.version", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-view": "self.version" - }, - "suggest": { - "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", - "zendframework/zend-cache": "Zend\\Cache component", - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", - "zendframework/zend-filter": "You should install this package to use the provided filters", - "zendframework/zend-resources": "Translation resources", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-validator": "You should install this package to use the provided validators", - "zendframework/zend-view": "You should install this package to use the provided view helpers" + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\I18n\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-i18n", - "keywords": [ - "i18n", - "zf2" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], - "time": "2015-03-25 20:55:48" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" }, { - "name": "zendframework/zend-inputfilter", - "version": "2.4.0", + "name": "phar-io/version", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "4b1398f3635fae3cc5e873c5bb067274f3d10a93" + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/4b1398f3635fae3cc5e873c5bb067274f3d10a93", - "reference": "4b1398f3635fae3cc5e873c5bb067274f3d10a93", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-filter": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "php": "^5.6 || ^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\InputFilter\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-input-filter", - "keywords": [ - "inputfilter", - "zf2" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], - "time": "2015-03-23 18:29:14" + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" }, { - "name": "zendframework/zend-json", - "version": "2.4.0", + "name": "php-cs-fixer/diff", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-json.git", - "reference": "2d845e151c1b9a237cf1899ac31e17fb10bd1e3f" + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-json/zipball/2d845e151c1b9a237cf1899ac31e17fb10bd1e3f", - "reference": "2d845e151c1b9a237cf1899ac31e17fb10bd1e3f", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": "^5.6 || ^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-http": "self.version", - "zendframework/zend-server": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-server": "Zend\\Server component", - "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Json\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", - "homepage": "https://github.com/zendframework/zend-json", + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", "keywords": [ - "json", - "zf2" + "diff" ], - "time": "2015-03-25 20:55:48" + "time": "2018-02-15T16:58:55+00:00" }, { - "name": "zendframework/zend-loader", - "version": "2.4.0", + "name": "phpcollection/phpcollection", + "version": "0.5.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-loader.git", - "reference": "65de2c7a56f8eee633c6bf1cfab73e45648880d4" + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/65de2c7a56f8eee633c6bf1cfab73e45648880d4", - "reference": "65de2c7a56f8eee633c6bf1cfab73e45648880d4", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", "shasum": "" }, "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpoption/phpoption": "1.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "0.4-dev" } }, "autoload": { - "psr-4": { - "Zend\\Loader\\": "src/" + "psr-0": { + "PhpCollection": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } ], - "homepage": "https://github.com/zendframework/zend-loader", + "description": "General-Purpose Collection Library for PHP", "keywords": [ - "loader", - "zf2" + "collection", + "list", + "map", + "sequence", + "set" ], - "time": "2015-03-23 18:29:14" + "time": "2015-05-17T12:39:23+00:00" }, { - "name": "zendframework/zend-log", - "version": "2.4.0", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-log.git", - "reference": "002e3c810cad7e31e51c9895e9e3cb6fbd312cdd" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-log/zipball/002e3c810cad7e31e51c9895e9e3cb6fbd312cdd", - "reference": "002e3c810cad7e31e51c9895e9e3cb6fbd312cdd", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.5" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-console": "self.version", - "zendframework/zend-db": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-mail": "self.version", - "zendframework/zend-validator": "self.version" - }, - "suggest": { - "ext-mongo": "*", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML formatter", - "zendframework/zend-mail": "Zend\\Mail component", - "zendframework/zend-validator": "Zend\\Validator component" + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Zend\\Log\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "component for general purpose logging", - "homepage": "https://github.com/zendframework/zend-log", + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "log", - "logging", - "zf2" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], - "time": "2015-03-25 20:55:48" + "time": "2017-09-11T18:02:19+00:00" }, { - "name": "zendframework/zend-math", - "version": "2.4.0", + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-math.git", - "reference": "f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-math/zipball/f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73", - "reference": "f41fe4acfd809c14f2a802d1aa45dec8fcd2cc73", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" - }, - "suggest": { - "ext-bcmath": "If using the bcmath functionality", - "ext-gmp": "If using the gmp functionality", - "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable", - "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "Zend\\Math\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-math", - "keywords": [ - "math", - "zf2" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2015-03-23 18:29:14" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" }, { - "name": "zendframework/zend-modulemanager", - "version": "2.4.0", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-modulemanager.git", - "reference": "af7ae3cd29a1efb73cc66ae1081e606039d5c20f" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/af7ae3cd29a1efb73cc66ae1081e606039d5c20f", - "reference": "af7ae3cd29a1efb73cc66ae1081e606039d5c20f", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-config": "self.version", - "zendframework/zend-console": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-loader": "Zend\\Loader component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Zend\\ModuleManager\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-module-manager", - "keywords": [ - "modulemanager", - "zf2" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2015-03-23 18:29:14" + "time": "2017-07-14T14:27:02+00:00" }, { - "name": "zendframework/zend-mvc", - "version": "2.4.0", + "name": "phpmd/phpmd", + "version": "2.6.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-mvc.git", - "reference": "0b4a4a829b30be510a3f215c4ff00c703ee8b431" + "url": "https://github.com/phpmd/phpmd.git", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/0b4a4a829b30be510a3f215c4ff00c703ee8b431", - "reference": "0b4a4a829b30be510a3f215c4ff00c703ee8b431", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-form": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "ext-xml": "*", + "pdepend/pdepend": "^2.5", + "php": ">=5.3.9" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-authentication": "self.version", - "zendframework/zend-console": "self.version", - "zendframework/zend-di": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-inputfilter": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-log": "self.version", - "zendframework/zend-modulemanager": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-text": "self.version", - "zendframework/zend-uri": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-version": "self.version", - "zendframework/zend-view": "self.version" - }, - "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-di": "Zend\\Di component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", - "zendframework/zend-inputfilter": "Zend\\Inputfilter component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-log": "Zend\\Log component", - "zendframework/zend-modulemanager": "Zend\\ModuleManager component", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", - "zendframework/zend-stdlib": "Zend\\Stdlib component", - "zendframework/zend-text": "Zend\\Text component", - "zendframework/zend-uri": "Zend\\Uri component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-version": "Zend\\Version component", - "zendframework/zend-view": "Zend\\View component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" }, + "bin": [ + "src/bin/phpmd" + ], + "type": "project", "autoload": { - "psr-4": { - "Zend\\Mvc\\": "src/" + "psr-0": { + "PHPMD\\": "src/main/php" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-mvc", + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", "keywords": [ - "mvc", - "zf2" + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" ], - "time": "2015-03-26 18:55:14" + "time": "2017-01-20T14:41:10+00:00" }, { - "name": "zendframework/zend-serializer", - "version": "2.4.0", + "name": "phpoption/phpoption", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-serializer.git", - "reference": "3c531789a9882a5deb721356a7bd2642b65d4b09" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/3c531789a9882a5deb721356a7bd2642b65d4b09", - "reference": "3c531789a9882a5deb721356a7bd2642b65d4b09", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-json": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" + "php": ">=5.3.0" }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "require-dev": { + "phpunit/phpunit": "4.7.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.3-dev" } }, "autoload": { - "psr-4": { - "Zend\\Serializer\\": "src/" + "psr-0": { + "PhpOption\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "Apache2" ], - "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", - "homepage": "https://github.com/zendframework/zend-serializer", + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", "keywords": [ - "serializer", - "zf2" + "language", + "option", + "php", + "type" ], - "time": "2015-03-25 20:55:48" + "time": "2015-07-25T16:39:46+00:00" }, { - "name": "zendframework/zend-server", - "version": "2.4.0", + "name": "phpspec/prophecy", + "version": "1.8.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-server.git", - "reference": "d11ff0bd529d202022823d4accf5983cbd50fc49" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-server/zipball/d11ff0bd529d202022823d4accf5983cbd50fc49", - "reference": "d11ff0bd529d202022823d4accf5983cbd50fc49", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Server\\": "src/" + "psr-0": { + "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-server", + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "server", - "zf2" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "time": "2015-03-25 20:55:48" + "time": "2018-08-05T17:53:17+00:00" }, { - "name": "zendframework/zend-servicemanager", - "version": "2.4.0", + "name": "phpunit/php-code-coverage", + "version": "5.3.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "57cf99fa5ac08c05a135a8d0d676c52a5e450083" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/57cf99fa5ac08c05a135a8d0d676c52a5e450083", - "reference": "57cf99fa5ac08c05a135a8d0d676c52a5e450083", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", "shasum": "" }, "require": { - "php": ">=5.3.23" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-di": "self.version" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", - "zendframework/zend-di": "Zend\\Di component" + "ext-xdebug": "^2.5.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\ServiceManager\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-service-manager", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "servicemanager", - "zf2" + "coverage", + "testing", + "xunit" ], - "time": "2015-03-23 18:29:14" + "time": "2018-04-06T15:36:58+00:00" }, { - "name": "zendframework/zend-soap", - "version": "2.4.0", + "name": "phpunit/php-file-iterator", + "version": "1.4.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-soap.git", - "reference": "a599463aba97ce247faf3fb443e3c7858b46449b" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/a599463aba97ce247faf3fb443e3c7858b46449b", - "reference": "a599463aba97ce247faf3fb443e3c7858b46449b", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-server": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-uri": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-http": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Soap\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-soap", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "soap", - "zf2" + "filesystem", + "iterator" ], - "time": "2015-03-25 20:55:48" + "time": "2017-11-27T13:52:08+00:00" }, { - "name": "zendframework/zend-stdlib", - "version": "2.4.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cf05c5ba75606e47ffee91cedc72778da46f74c3", - "reference": "cf05c5ba75606e47ffee91cedc72778da46f74c3", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Stdlib\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-stdlib", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "stdlib", - "zf2" + "template" ], - "time": "2015-03-25 20:55:48" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "zendframework/zend-text", - "version": "2.4.0", + "name": "phpunit/php-timer", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-text.git", - "reference": "d962ea25647b20527f3ca34ae225bbc885dabfc7" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-text/zipball/d962ea25647b20527f3ca34ae225bbc885dabfc7", - "reference": "d962ea25647b20527f3ca34ae225bbc885dabfc7", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Zend\\Text\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-text", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "text", - "zf2" + "timer" ], - "time": "2015-03-25 20:55:48" + "time": "2017-02-26T11:10:40+00:00" }, { - "name": "zendframework/zend-uri", - "version": "2.4.0", + "name": "phpunit/php-token-stream", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-uri.git", - "reference": "bd9e625639415376f6a82551c73328448d7bc7d1" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/bd9e625639415376f6a82551c73328448d7bc7d1", - "reference": "bd9e625639415376f6a82551c73328448d7bc7d1", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-validator": "self.version" + "ext-tokenizer": "*", + "php": "^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Zend\\Uri\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", - "homepage": "https://github.com/zendframework/zend-uri", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "uri", - "zf2" + "tokenizer" ], - "time": "2015-03-25 20:55:48" + "time": "2017-11-27T05:48:46+00:00" }, { - "name": "zendframework/zend-validator", - "version": "2.4.0", + "name": "phpunit/phpunit", + "version": "6.5.14", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-validator.git", - "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/45fac2545a0f2eb66d71cb7966feee481e7c475f", - "reference": "45fac2545a0f2eb66d71cb7966feee481e7c475f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-db": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-uri": "self.version" + "ext-pdo": "*" }, "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Validator\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a set of commonly needed validators", - "homepage": "https://github.com/zendframework/zend-validator", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "validator", - "zf2" + "phpunit", + "testing", + "xunit" ], - "time": "2015-03-25 20:55:48" + "time": "2019-02-01T05:22:47+00:00" }, { - "name": "zendframework/zend-view", - "version": "2.4.0", + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-view.git", - "reference": "37beb1ad46e530f627b4b6c3716efd728e976ba9" + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-view/zipball/37beb1ad46e530f627b4b6c3716efd728e976ba9", - "reference": "37beb1ad46e530f627b4b6c3716efd728e976ba9", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-authentication": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-feed": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-mvc": "self.version", - "zendframework/zend-navigation": "self.version", - "zendframework/zend-paginator": "self.version", - "zendframework/zend-permissions-acl": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" + "phpunit/phpunit": "^6.5.11" }, "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component", - "zendframework/zend-escaper": "Zend\\Escaper component", - "zendframework/zend-feed": "Zend\\Feed component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-navigation": "Zend\\Navigation component", - "zendframework/zend-paginator": "Zend\\Paginator component", - "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component" + "ext-soap": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\View\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a system of helpers, output filters, and variable escaping", - "homepage": "https://github.com/zendframework/zend-view", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ - "view", - "zf2" + "mock", + "xunit" ], - "time": "2015-03-25 20:55:48" - } - ], - "packages-dev": [ + "abandoned": true, + "time": "2018-08-09T05:50:03+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.0.4", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^5.6 || ^7.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -6173,266 +17705,280 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2014-10-13 12:58:55" + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" }, { - "name": "fabpot/php-cs-fixer", - "version": "v1.8", + "name": "sebastian/comparator", + "version": "2.1.3", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "93c723fe0c50ed54292006e7249a4c1173cf5847" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/93c723fe0c50ed54292006e7249a4c1173cf5847", - "reference": "93c723fe0c50ed54292006e7249a4c1173cf5847", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.6", - "sebastian/diff": "~1.1", - "symfony/console": "~2.3", - "symfony/event-dispatcher": "~2.1", - "symfony/filesystem": "~2.1", - "symfony/finder": "~2.1", - "symfony/process": "~2.3", - "symfony/stopwatch": "~2.5" + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "satooshi/php-coveralls": "0.7.*@dev" + "phpunit/phpunit": "^6.4" }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "Symfony\\CS\\": "Symfony/CS/" + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A tool to automatically fix PHP code style", - "time": "2015-05-04 17:06:20" + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-02-01T13:46:46+00:00" }, { - "name": "league/climate", - "version": "2.6.1", + "name": "sebastian/diff", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/climate.git", - "reference": "28851c909017424f61cc6a62089316313c645d1c" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/climate/zipball/28851c909017424f61cc6a62089316313c645d1c", - "reference": "28851c909017424f61cc6a62089316313c645d1c", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.0" }, "require-dev": { - "mockery/mockery": "dev-master", - "phpunit/phpunit": "4.1.*" + "phpunit/phpunit": "^6.2" }, "type": "library", - "autoload": { - "psr-4": { - "League\\CLImate\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Joe Tannenbaum", - "email": "hey@joe.codes", - "homepage": "http://joe.codes/", - "role": "Developer" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "cli", - "colors", - "command", - "php", - "terminal" + "diff" ], - "time": "2015-01-18 14:31:58" + "time": "2017-08-03T08:09:46+00:00" }, { - "name": "lusitanian/oauth", - "version": "v0.3.5", + "name": "sebastian/environment", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/Lusitanian/PHPoAuthLib.git", - "reference": "ac5a1cd5a4519143728dce2213936eea302edf8a" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/ac5a1cd5a4519143728dce2213936eea302edf8a", - "reference": "ac5a1cd5a4519143728dce2213936eea302edf8a", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "3.7.*", - "predis/predis": "0.8.*@dev", - "symfony/http-foundation": "~2.1" - }, - "suggest": { - "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", - "predis/predis": "Allows using the Redis storage backend.", - "symfony/http-foundation": "Allows using the Symfony Session storage backend." + "phpunit/phpunit": "^6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.1-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { - "psr-0": { - "OAuth": "src", - "OAuth\\Unit": "tests" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "David Desberg", - "email": "david@daviddesberg.com" - }, - { - "name": "Pieter Hordijk", - "email": "info@pieterhordijk.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "PHP 5.3+ oAuth 1/2 Library", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "Authentication", - "authorization", - "oauth", - "security" + "Xdebug", + "environment", + "hhvm" ], - "time": "2014-09-05 15:19:58" + "time": "2017-07-01T08:51:00+00:00" }, { - "name": "pdepend/pdepend", - "version": "2.0.6", + "name": "sebastian/exporter", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "a15ffcbfbcc4570d4a733ca7b76e9cac0a56c3f4" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/a15ffcbfbcc4570d4a733ca7b76e9cac0a56c3f4", - "reference": "a15ffcbfbcc4570d4a733ca7b76e9cac0a56c3f4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "symfony/config": ">=2.4", - "symfony/dependency-injection": ">=2.4", - "symfony/filesystem": ">=2.4" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "4.*@stable", - "squizlabs/php_codesniffer": "@stable" + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" }, - "bin": [ - "src/bin/pdepend" - ], "type": "library", - "autoload": { - "psr-0": { - "PDepend\\": "src/main/php/" + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "Official version of pdepend to be handled with Composer", - "time": "2015-03-02 08:06:43" + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2017-04-03T13:19:02+00:00" }, { - "name": "phpmd/phpmd", - "version": "2.2.2", + "name": "sebastian/finder-facade", + "version": "1.2.2", "source": { "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "7dc4a6b5c07b119ab5da7960b56303fa6855eb84" + "url": "https://github.com/sebastianbergmann/finder-facade.git", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/7dc4a6b5c07b119ab5da7960b56303fa6855eb84", - "reference": "7dc4a6b5c07b119ab5da7960b56303fa6855eb84", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", "shasum": "" }, "require": { - "pdepend/pdepend": "2.0.*", - "php": ">=5.3.0", - "symfony/config": ">=2.4", - "symfony/dependency-injection": ">=2.4", - "symfony/filesystem": ">=2.4" - }, - "require-dev": { - "phpunit/phpunit": "*", - "squizlabs/php_codesniffer": "*" + "symfony/finder": "~2.3|~3.0|~4.0", + "theseer/fdomdocument": "~1.3" }, - "bin": [ - "src/bin/phpmd" - ], - "type": "project", + "type": "library", "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6440,63 +17986,42 @@ ], "authors": [ { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project founder" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "http://phpmd.org/", - "keywords": [ - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" - ], - "time": "2015-03-26 07:47:05" + "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", + "homepage": "https://github.com/sebastianbergmann/finder-facade", + "time": "2017-11-18T17:31:49+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "2.0.16", + "name": "sebastian/global-state", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/934fd03eb6840508231a7f73eb8940cf32c3b66c", - "reference": "934fd03eb6840508231a7f73eb8940cf32c3b66c", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", - "sebastian/version": "~1.0" + "php": "^7.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6511,177 +18036,182 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "coverage", - "testing", - "xunit" + "global state" ], - "time": "2015-04-11 04:35:00" + "time": "2017-04-27T15:39:26+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "1.3.4", + "name": "sebastian/object-enumerator", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, "autoload": { "classmap": [ - "File/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2013-10-10 15:34:57" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.0", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { "classmap": [ - "Text/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2014-01-30 17:20:04" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" }, { - "name": "phpunit/php-timer", - "version": "1.0.5", + "name": "sebastian/phpcpd", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" + "url": "https://github.com/sebastianbergmann/phpcpd.git", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.6|^7.0", + "phpunit/php-timer": "^1.0.6", + "sebastian/finder-facade": "^1.1", + "sebastian/version": "^1.0|^2.0", + "symfony/console": "^2.7|^3.0|^4.0" }, + "bin": [ + "phpcpd" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2013-08-02 07:42:54" + "description": "Copy/Paste Detector (CPD) for PHP code.", + "homepage": "https://github.com/sebastianbergmann/phpcpd", + "time": "2017-11-16T08:49:28+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "1.4.1", + "name": "sebastian/recursion-context", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "eab81d02569310739373308137284e0158424330" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330", - "reference": "eab81d02569310739373308137284e0158424330", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -6694,61 +18224,44 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-04-08 04:46:07" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" }, { - "name": "phpunit/phpunit", - "version": "4.1.0", + "name": "sebastian/resource-operations", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "efb1b1334605594417a3bd466477772d06d460a8" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/efb1b1334605594417a3bd466477772d06d460a8", - "reference": "efb1b1334605594417a3bd466477772d06d460a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~2.0", - "phpunit/php-file-iterator": "~1.3.1", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", - "phpunit/phpunit-mock-objects": "~2.1", - "sebastian/comparator": "~1.0", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.0", - "sebastian/exporter": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" + "php": ">=5.6.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -6757,58 +18270,40 @@ ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2014-05-02 07:13:40" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.1", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "74ffb87f527f24616f72460e54b595f508dccb5c" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c", - "reference": "74ffb87f527f24616f72460e54b595f508dccb5c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -6823,376 +18318,418 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-04-02 05:36:41" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "sebastian/comparator", - "version": "1.1.1", + "name": "squizlabs/php_codesniffer", + "version": "3.3.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "628a481780561150481a9ec74709092b9759b3ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/628a481780561150481a9ec74709092b9759b3ec", + "reference": "628a481780561150481a9ec74709092b9759b3ec", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Greg Sherwood", + "role": "lead" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", "keywords": [ - "comparator", - "compare", - "equality" + "phpcs", + "standards" ], - "time": "2015-01-29 16:28:08" + "time": "2018-07-26T23:47:18+00:00" }, { - "name": "sebastian/diff", - "version": "1.3.0", + "name": "symfony/browser-kit", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" + "url": "https://github.com/symfony/browser-kit.git", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/61d85c5af2fc058014c7c89504c3944e73a086f0", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "sebastian/environment", - "version": "1.2.2", + "name": "symfony/config", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" + "url": "https://github.com/symfony/config.git", + "reference": "0e745ead307d5dcd4e163e94a47ec04b1428943f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", + "url": "https://api.github.com/repos/symfony/config/zipball/0e745ead307d5dcd4e163e94a47ec04b1428943f", + "reference": "0e745ead307d5dcd4e163e94a47ec04b1428943f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2015-01-01 10:01:08" + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2019-04-01T14:03:25+00:00" }, { - "name": "sebastian/exporter", - "version": "1.2.0", + "name": "symfony/contracts", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" + "url": "https://github.com/symfony/contracts.git", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", + "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": "^7.1.3" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "psr/cache": "^1.0", + "psr/container": "^1.0" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], - "time": "2015-01-27 07:23:06" + "time": "2018-12-05T08:06:11+00:00" }, { - "name": "sebastian/recursion-context", - "version": "1.0.0", + "name": "symfony/dependency-injection", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "1806e43ff6bff57398d33b326cd753a12d9f434f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1806e43ff6bff57398d33b326cd753a12d9f434f", + "reference": "1806e43ff6bff57398d33b326cd753a12d9f434f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/contracts": "^1.0" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-contracts-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "symfony/config": "~4.2", + "symfony/expression-language": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-01-24 09:48:32" + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2019-03-30T15:58:42+00:00" }, { - "name": "sebastian/version", - "version": "1.0.5", + "name": "symfony/dom-crawler", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/53c97769814c80a84a8403efcf3ae7ae966d53bb", + "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb", "shasum": "" }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "~3.4|~4.0" + }, + "suggest": { + "symfony/css-selector": "" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-02-24 06:35:25" + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "sjparkinson/static-review", - "version": "4.1.1", + "name": "symfony/http-foundation", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/sjparkinson/static-review.git", - "reference": "493c3410cf146a12fca84209bad126c494e125f0" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sjparkinson/static-review/zipball/493c3410cf146a12fca84209bad126c494e125f0", - "reference": "493c3410cf146a12fca84209bad126c494e125f0", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1", + "reference": "5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1", "shasum": "" }, "require": { - "league/climate": "~2.0", - "php": ">=5.4.0", - "symfony/console": "~2.0", - "symfony/process": "~2.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "mockery/mockery": "~0.9", - "phpunit/phpunit": "~4.0", - "sensiolabs/security-checker": "~2.0", - "squizlabs/php_codesniffer": "~1.0" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, - "suggest": { - "sensiolabs/security-checker": "Required for ComposerSecurityReview.", - "squizlabs/php_codesniffer": "Required for PhpCodeSnifferReview." - }, - "bin": [ - "bin/static-review.php" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { "psr-4": { - "StaticReview\\": "src/" - } + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7200,121 +18737,107 @@ ], "authors": [ { - "name": "Samuel Parkinson", - "email": "sam.james.parkinson@gmail.com", - "homepage": "http://samp.im" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "An extendable framework for version control hooks.", - "time": "2014-09-22 08:40:36" + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2019-03-30T15:58:42+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "1.5.3", + "name": "symfony/polyfill-php70", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "396178ada8499ec492363587f037125bf7b07fcc" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "bc4858fb611bda58719124ca079baff854149c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/396178ada8499ec492363587f037125bf7b07fcc", - "reference": "396178ada8499ec492363587f037125bf7b07fcc", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", + "reference": "bc4858fb611bda58719124ca079baff854149c89", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.1.2" - }, - "suggest": { - "phpunit/php-timer": "dev-master" + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" }, - "bin": [ - "scripts/phpcs" - ], "type": "library", "extra": { "branch-alias": { - "dev-phpcs-fixer": "2.0.x-dev" + "dev-master": "1.11-dev" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/CommentParser/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Greg Sherwood", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "phpcs", - "standards" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2014-05-01 03:07:07" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/config", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Config", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/Config.git", - "reference": "b6fddb4aa2daaa2b06f0040071ac131b4a1ecf25" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Config/zipball/b6fddb4aa2daaa2b06f0040071ac131b4a1ecf25", - "reference": "b6fddb4aa2daaa2b06f0040071ac131b4a1ecf25", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/filesystem": "~2.3" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "1.11-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Config\\": "" - } + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7322,60 +18845,55 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/dependency-injection", - "version": "v2.6.7", - "target-dir": "Symfony/Component/DependencyInjection", + "name": "symfony/stopwatch", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/DependencyInjection.git", - "reference": "b575c160af001d3525ee733085bcc4ec7c8e1b51" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/b575c160af001d3525ee733085bcc4ec7c8e1b51", - "reference": "b575c160af001d3525ee733085bcc4ec7c8e1b51", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b1a5f646d56a3290230dbc8edf2a0d62cda23f67", + "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "conflict": { - "symfony/expression-language": "<2.6" - }, - "require-dev": { - "symfony/config": "~2.2", - "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", - "symfony/yaml": "~2.1" - }, - "suggest": { - "symfony/config": "", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" + "php": "^7.1.3", + "symfony/contracts": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\DependencyInjection\\": "" - } + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7391,50 +18909,50 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "time": "2019-01-16T20:31:39+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v2.6.7", - "target-dir": "Symfony/Component/EventDispatcher", + "name": "symfony/yaml", + "version": "v3.4.24", "source": { "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02" + "url": "https://github.com/symfony/yaml.git", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/672593bc4b0043a0acf91903bb75a1c82d8f2e02", - "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5", - "symfony/dependency-injection": "~2.6", - "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", - "symfony/stopwatch": "~2.3" + "symfony/console": "~3.4|~4.0" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "3.4-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" - } + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7450,80 +18968,110 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "time": "2019-03-25T07:48:46+00:00" }, { - "name": "symfony/filesystem", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Filesystem", + "name": "theseer/fdomdocument", + "version": "1.6.6", "source": { "type": "git", - "url": "https://github.com/symfony/Filesystem.git", - "reference": "f73904bd2dae525c42ea1f0340c7c98480ecacde" + "url": "https://github.com/theseer/fDOMDocument.git", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Filesystem/zipball/f73904bd2dae525c42ea1f0340c7c98480ecacde", - "reference": "f73904bd2dae525c42ea1f0340c7c98480ecacde", + "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", "shasum": "" }, "require": { + "ext-dom": "*", + "lib-libxml": "*", "php": ">=5.3.3" }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "lead" } + ], + "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-30T11:53:12+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", + "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, + "type": "library", "autoload": { - "psr-0": { - "Symfony\\Component\\Filesystem\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2015-05-08 00:09:07" + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-04-04T09:56:43+00:00" }, { - "name": "symfony/stopwatch", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Stopwatch", + "name": "vlucas/phpdotenv", + "version": "v2.6.1", "source": { "type": "git", - "url": "https://github.com/symfony/Stopwatch.git", - "reference": "b470f87c69837cb71115f1fa720388bb19b63635" + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/b470f87c69837cb71115f1fa720388bb19b63635", - "reference": "b470f87c69837cb71115f1fa720388bb19b63635", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpunit/phpunit": "^4.8.35 || ^5.0" }, "type": "library", "extra": { @@ -7532,58 +19080,60 @@ } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Stopwatch\\": "" + "psr-4": { + "Dotenv\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "http://www.vancelucas.com" } ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2019-01-29T11:11:52+00:00" }, { - "name": "symfony/yaml", - "version": "v2.6.7", - "target-dir": "Symfony/Component/Yaml", + "name": "webmozart/assert", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2" + "url": "https://github.com/webmozart/assert.git", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/f157ab074e453ecd4c0fa775f721f6e67a99d9e2", - "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "1.3-dev" } }, "autoload": { - "psr-0": { - "Symfony\\Component\\Yaml\\": "" + "psr-4": { + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -7592,38 +19142,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-05-02 15:18:45" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2018-12-25T11:19:39+00:00" } ], "aliases": [], - "minimum-stability": "alpha", + "minimum-stability": "stable", "stability-flags": { "phpmd/phpmd": 0 }, - "prefer-stable": true, + "prefer-stable": false, "prefer-lowest": false, "platform": [], - "platform-dev": { - "lib-libxml": "*", - "ext-ctype": "*", - "ext-gd": "*", - "ext-spl": "*", - "ext-dom": "*", - "ext-simplexml": "*", - "ext-mcrypt": "*", - "ext-hash": "*", - "ext-curl": "*", - "ext-iconv": "*", - "ext-intl": "*" - } + "platform-dev": [] } diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.lock b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.lock index 48fa6d0d0cd3..36a98e6cd959 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.lock +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.lock @@ -1,4677 +1,17821 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "8601c8b464025318475d28dbabf9ee67", + "content-hash": "758832dca53cba659d813c126f37d8a1", "packages": [ { - "name": "composer/composer", - "version": "1.0.0-alpha8", + "name": "amzn/amazon-pay-and-login-magento-2-module", + "version": "3.1.4", + "require": { + "amzn/amazon-pay-and-login-with-amazon-core-module": "3.1.4", + "amzn/amazon-pay-module": "3.1.4", + "amzn/login-with-amazon-module": "3.1.4" + }, + "type": "metapackage", + "license": [ + "Apache-2.0" + ], + "description": "Official Magento2 Plugin to integrate with Amazon Pay and Login with Amazon" + }, + { + "name": "amzn/amazon-pay-and-login-with-amazon-core-module", + "version": "3.1.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/amzn/amazon-pay-and-login-with-amazon-core-module/amzn-amazon-pay-and-login-with-amazon-core-module-3.1.4.0.zip", + "reference": null, + "shasum": "1ad5fdd9a997284f005d933b1fead3a746f158bb" + }, + "require": { + "amzn/amazon-pay-sdk-php": "^3.2.0", + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-checkout": "*", + "magento/module-config": "*", + "magento/module-customer": "*", + "magento/module-developer": "*", + "magento/module-payment": "*", + "magento/module-paypal": "*", + "magento/module-quote": "*", + "magento/module-sales": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Amazon\\Core\\": "" + } + }, + "license": [ + "Apache-2.0" + ], + "description": "Shared functionality for Amazon Pay and Login with Amazon modules" + }, + { + "name": "amzn/amazon-pay-module", + "version": "3.1.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/amzn/amazon-pay-module/amzn-amazon-pay-module-3.1.4.0.zip", + "reference": null, + "shasum": "03cec957586f9e14f0914b58f651c661c509d08d" + }, + "require": { + "amzn/amazon-pay-and-login-with-amazon-core-module": "^3.1.4", + "amzn/login-with-amazon-module": "^3.1.4", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-checkout": "*", + "magento/module-customer": "*", + "magento/module-directory": "*", + "magento/module-eav": "*", + "magento/module-payment": "*", + "magento/module-paypal": "*", + "magento/module-quote": "*", + "magento/module-sales": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "*", + "magento/module-scalable-checkout": "*", + "magento/module-scalable-oms": "*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Amazon\\Payment\\": "" + } + }, + "license": [ + "Apache-2.0" + ], + "description": "Amazon Pay module" + }, + { + "name": "amzn/amazon-pay-sdk-php", + "version": "3.4.1", "source": { "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46" + "url": "https://github.com/amzn/amazon-pay-sdk-php.git", + "reference": "aff849d831b95469d68708ac1bdb316a56896e4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/1eb1df44a97fb2daca1bb8b007f3bee012f0aa46", - "reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46", + "url": "https://api.github.com/repos/amzn/amazon-pay-sdk-php/zipball/aff849d831b95469d68708ac1bdb316a56896e4c", + "reference": "aff849d831b95469d68708ac1bdb316a56896e4c", "shasum": "" }, "require": { - "justinrainbow/json-schema": "1.1.*", - "php": ">=5.3.2", - "seld/jsonlint": "1.*", - "symfony/console": "~2.3", - "symfony/finder": "~2.2", - "symfony/process": "~2.1" + "ext-curl": "*", + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~3.7.10" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic" + "phpunit/phpunit": "^4" }, - "bin": [ - "bin/composer" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "psr-0": { - "Composer": "src/" + "psr-4": { + "AmazonPay\\": "AmazonPay/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache OSL-2" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be", - "role": "Developer" - }, - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de", - "role": "Developer" + "name": "Amazon Pay SDK", + "email": "amazon-pay-sdk@amazon.com" } ], - "description": "Dependency Manager", - "homepage": "http://getcomposer.org/", + "description": "Amazon Pay SDK (PHP)", + "homepage": "https://github.com/amzn/amazon-pay-sdk-php", "keywords": [ - "autoload", - "dependency", - "package" + "amazon", + "amazon pay", + "amazon payments", + "pay", + "pay with amazon", + "payment", + "payments" ], - "time": "2014-01-06 18:39:59" + "time": "2019-02-11T16:32:17+00:00" }, { - "name": "justinrainbow/json-schema", - "version": "1.1.0", + "name": "amzn/login-with-amazon-module", + "version": "3.1.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/amzn/login-with-amazon-module/amzn-login-with-amazon-module-3.1.4.0.zip", + "reference": null, + "shasum": "d927403b521e59d36d42a29998c774986c65398b" + }, + "require": { + "amzn/amazon-pay-and-login-with-amazon-core-module": "^3.1.4", + "magento/module-checkout": "*", + "magento/module-checkout-agreements": "*", + "magento/module-customer": "*", + "magento/module-eav": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-sales": "*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Amazon\\Login\\": "" + } + }, + "license": [ + "Apache-2.0" + ], + "description": "Login with Amazon module" + }, + { + "name": "bacon/bacon-qr-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c" + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/05ff6d8d79fe3ad190b0663d80d3f9deee79416c", - "reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/5a91b62b9d37cee635bbf8d553f4546057250bee", + "reference": "5a91b62b9d37cee635bbf8d553f4546057250bee", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-iconv": "*", + "php": "^5.4|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "suggest": { + "ext-gd": "to generate QR code images" }, "type": "library", "autoload": { "psr-0": { - "JsonSchema": "src/" + "BaconQrCode": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "NewBSD" + "BSD-2-Clause" ], "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch", - "homepage": "http://wiedler.ch/igor/" - }, - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "http://www.dasprids.de", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "time": "2017-10-17T09:59:25+00:00" + }, + { + "name": "beberlei/assert", + "version": "v2.9.6", + "source": { + "type": "git", + "url": "https://github.com/beberlei/assert.git", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", + "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.1.1", + "phpunit/phpunit": "^4.8.35|^5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Assert\\": "lib/Assert" }, + "files": [ + "lib/Assert/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" }, { - "name": "Robert Schönthal", - "email": "robert.schoenthal@gmail.com", - "homepage": "http://digitalkaoz.net" + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "description": "Thin assertion library for input validation in business models.", "keywords": [ - "json", - "schema" + "assert", + "assertion", + "validation" ], - "time": "2012-01-03 00:33:17" + "time": "2018-06-11T17:15:25+00:00" }, { - "name": "magento/framework", - "version": "0.74.0-beta2", + "name": "braintree/braintree_php", + "version": "3.35.0", + "source": { + "type": "git", + "url": "https://github.com/braintree/braintree_php.git", + "reference": "6c4388199ce379432804a5c18b88585157ef2ed7" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_framework-0.74.0-beta2.zip", - "reference": null, - "shasum": "ebb865d9aae1b48e41706a7d2fe080b7735a1a0c" + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/6c4388199ce379432804a5c18b88585157ef2ed7", + "reference": "6c4388199ce379432804a5c18b88585157ef2ed7", + "shasum": "" }, "require": { "ext-curl": "*", "ext-dom": "*", - "ext-gd": "*", "ext-hash": "*", - "ext-iconv": "*", - "ext-mcrypt": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "lib-libxml": "*", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "ext-openssl": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, - "suggest": { - "ext-imagick": "Use Image Magick >=3.0.0 as an optional alternative image processing library" - }, - "type": "magento2-library", - "extra": { - "map": [ - [ - "*", - "Magento/Framework" - ] - ] + "require-dev": { + "phpunit/phpunit": "3.7.*" }, + "type": "library", "autoload": { + "psr-0": { + "Braintree": "lib/" + }, "psr-4": { - "Magento\\Framework\\": "" + "Braintree\\": "lib/Braintree" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Braintree", + "homepage": "https://www.braintreepayments.com" + } + ], + "description": "Braintree PHP Client Library", + "time": "2018-07-26T14:37:38+00:00" }, { - "name": "magento/language-de_de", - "version": "0.74.0-beta2", + "name": "christian-riesen/base32", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/ChristianRiesen/base32.git", + "reference": "80ff0e3b2124e61b4b39e2535709452f70bff367" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-de_de-0.74.0-beta2.zip", - "reference": null, - "shasum": "574416a036e55513a6437b287b77426c291d9051" + "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/80ff0e3b2124e61b4b39e2535709452f70bff367", + "reference": "80ff0e3b2124e61b4b39e2535709452f70bff367", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "php": ">=5.3" }, - "type": "magento2-language", + "require-dev": { + "php": ">=5.6", + "phpunit/phpunit": "^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "magento/de_de" - ] - ] + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Base32\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "German (Germany) language" + "authors": [ + { + "name": "Christian Riesen", + "email": "chris.riesen@gmail.com", + "homepage": "http://christianriesen.com", + "role": "Developer" + } + ], + "description": "Base32 encoder/decoder according to RFC 4648", + "homepage": "https://github.com/ChristianRiesen/base32", + "keywords": [ + "base32", + "decode", + "encode", + "rfc4648" + ], + "time": "2018-11-02T09:03:50+00:00" }, { - "name": "magento/language-en_us", - "version": "0.74.0-beta2", + "name": "colinmollenhour/cache-backend-file", + "version": "v1.4.4", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_File.git", + "reference": "184171cc79933a828c3f9b1a1054724cea22a216" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-en_us-0.74.0-beta2.zip", - "reference": null, - "shasum": "6246a6a773d86c078bb4f0bc5cee50e2eeab639f" - }, - "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_File/zipball/184171cc79933a828c3f9b1a1054724cea22a216", + "reference": "184171cc79933a828c3f9b1a1054724cea22a216", + "shasum": "" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/en_us" - ] + "type": "magento-module", + "autoload": { + "classmap": [ + "File.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "English (United States) language" + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "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": "2018-04-05T15:28:43+00:00" }, { - "name": "magento/language-es_es", - "version": "0.74.0-beta2", + "name": "colinmollenhour/cache-backend-redis", + "version": "1.10.6", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", + "reference": "cc941a5f4cc017e11d3eab9061811ba9583ed6bf" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-es_es-0.74.0-beta2.zip", - "reference": null, - "shasum": "da8197a083474993b935bd16d8b001160475b97e" + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/cc941a5f4cc017e11d3eab9061811ba9583ed6bf", + "reference": "cc941a5f4cc017e11d3eab9061811ba9583ed6bf", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "magento-hackathon/magento-composer-installer": "*" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/es_es" - ] + "type": "magento-module", + "autoload": { + "classmap": [ + "Cm/Cache/Backend/Redis.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "Spanish (Spain) language" + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "description": "Zend_Cache backend using Redis with full support for tags.", + "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", + "time": "2018-09-24T16:02:07+00:00" }, { - "name": "magento/language-fr_fr", - "version": "0.74.0-beta2", + "name": "colinmollenhour/credis", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/credis.git", + "reference": "8ab6db707c821055f9856b8cf76d5f44beb6fd8a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-fr_fr-0.74.0-beta2.zip", - "reference": null, - "shasum": "e3d58180b96a709e0b2fb8dccaee95b3be5dadd4" + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/8ab6db707c821055f9856b8cf76d5f44beb6fd8a", + "reference": "8ab6db707c821055f9856b8cf76d5f44beb6fd8a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "php": ">=5.4.0" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/fr_fr" - ] + "type": "library", + "autoload": { + "classmap": [ + "Client.php", + "Cluster.php", + "Sentinel.php", + "Module.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "French (France) language" + "authors": [ + { + "name": "Colin Mollenhour", + "email": "colin@mollenhour.com" + } + ], + "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": "2018-05-07T14:45:04+00:00" }, { - "name": "magento/language-nl_nl", - "version": "0.74.0-beta2", + "name": "colinmollenhour/php-redis-session-abstract", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/colinmollenhour/php-redis-session-abstract.git", + "reference": "4949ca28b86037abb44984c77bab9d0a4e075643" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-nl_nl-0.74.0-beta2.zip", - "reference": null, - "shasum": "d7b29b6275aefa26e7a6d9fb4bcdb62a8ee34332" + "url": "https://api.github.com/repos/colinmollenhour/php-redis-session-abstract/zipball/4949ca28b86037abb44984c77bab9d0a4e075643", + "reference": "4949ca28b86037abb44984c77bab9d0a4e075643", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "colinmollenhour/credis": "~1.6", + "php": "^5.5 || ^7.0" }, - "type": "magento2-language", - "extra": { - "map": [ - [ - "*", - "magento/nl_nl" - ] - ] + "type": "library", + "autoload": { + "psr-0": { + "Cm\\RedisSession\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "Dutch (Netherlands) language" + "authors": [ + { + "name": "Colin Mollenhour" + } + ], + "description": "A Redis-based session handler with optimistic locking", + "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", + "time": "2019-03-18T14:43:14+00:00" }, { - "name": "magento/language-pt_br", - "version": "0.74.0-beta2", + "name": "composer/ca-bundle", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-pt_br-0.74.0-beta2.zip", - "reference": null, - "shasum": "7b6bc50f18adc85d524cc549accd05752beb8858" + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "reference": "558f321c52faeb4828c03e7dc0cfe39a09e09a2d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" }, - "type": "magento2-language", + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "magento/pt_br" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "Portuguese (Brazil) language" + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2019-01-28T09:30:10+00:00" }, { - "name": "magento/language-zh_cn", - "version": "0.74.0-beta2", + "name": "composer/composer", + "version": "1.8.5", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "949b116f9e7d98d8d276594fed74b580d125c0e6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_language-zh_cn-0.74.0-beta2.zip", - "reference": null, - "shasum": "f9a151b4d1bbc6620289e9e91fb8bee023d14c5f" + "url": "https://api.github.com/repos/composer/composer/zipball/949b116f9e7d98d8d276594fed74b580d125c0e6", + "reference": "949b116f9e7d98d8d276594fed74b580d125c0e6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*" + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" }, - "type": "magento2-language", + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "magento/zh_cn" - ] - ] + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "Chinese (China) language" + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2019-04-09T15:46:48+00:00" }, { - "name": "magento/magento-composer-installer", - "version": "dev-master", + "name": "composer/semver", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/magento/magento-composer-installer.git", - "reference": "7f03451f71e55d52c2bb07325d56a4e6df322f30" + "url": "https://github.com/composer/semver.git", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento-composer-installer/zipball/7f03451f71e55d52c2bb07325d56a4e6df322f30", - "reference": "7f03451f71e55d52c2bb07325d56a4e6df322f30", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", "shasum": "" }, "require": { - "composer-plugin-api": "1.0.0" + "php": "^5.3.2 || ^7.0" }, "require-dev": { - "composer/composer": "*@dev", - "firegento/phpcs": "dev-patch-1", - "mikey179/vfsstream": "*", - "phpunit/phpunit": "*", - "phpunit/phpunit-mock-objects": "dev-master", - "squizlabs/php_codesniffer": "1.4.7", - "symfony/process": "*" + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" }, - "type": "composer-plugin", + "type": "library", "extra": { - "composer-command-registry": [ - "MagentoHackathon\\Composer\\Magento\\Command\\DeployCommand" - ], - "class": "MagentoHackathon\\Composer\\Magento\\Plugin" + "branch-alias": { + "dev-master": "1.x-dev" + } }, "autoload": { - "psr-0": { - "MagentoHackathon\\Composer\\Magento": "src/" + "psr-4": { + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0" + "MIT" ], "authors": [ { - "name": "Vinai Kopp", - "email": "vinai@netzarbeiter.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Daniel Fahlke aka Flyingmana", - "email": "flyingmana@googlemail.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "Jörg Weller", - "email": "weller@flagbit.de" - }, + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2019-03-19T17:25:45+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", + "reference": "a1aa51cf3ab838b83b0867b14e56fc20fbd55b3d", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "Karl Spies", - "email": "karl.spies@gmx.net" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Tobias Vogt", - "email": "tobi@webguys.de" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "David Fuhr", - "email": "fuhr@flagbit.de" + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Composer installer for Magento modules", - "homepage": "https://github.com/magento/magento-composer-installer", + "description": "SPDX licenses list and validation library.", "keywords": [ - "composer-installer", - "magento" + "license", + "spdx", + "validator" ], - "time": "2015-03-05 21:40:30" + "time": "2019-03-26T10:23:26+00:00" }, { - "name": "magento/magento2-base", - "version": "0.74.0-beta2", + "name": "composer/xdebug-handler", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "d17708133b6c276d6e42ef887a877866b909d892" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_magento2-base-0.74.0-beta2.zip", - "reference": null, - "shasum": "be10c634940670ff0cecf5f952f57891c626c652" + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", + "reference": "d17708133b6c276d6e42ef887a877866b909d892", + "shasum": "" }, "require": { - "magento/magento-composer-installer": "*" + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" }, - "replace": { - "blueimp/jquery-file-upload": "5.6.14", - "colinmollenhour/cache-backend-redis": "dev-master#193d377b7fb2e88595578b282fa01a62d1185abc", - "colinmollenhour/credis": "dev-master#f07bbfd4117294f462f0fb19c49221d350bf396f", - "components/jquery": "1.11.0", - "components/jqueryui": "1.10.4", - "linkorb/jsmin-php": "1.1.2", - "tinymce/tinymce": "3.4.7", - "trentrichardson/jquery-timepicker-addon": "1.4.3", - "twbs/bootstrap": "3.1.0" + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, - "type": "magento2-component", - "extra": { - "component_paths": { - "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js", - "colinmollenhour/cache-backend-redis": "lib/internal/Cm/Cache/Backend/Redis.php", - "colinmollenhour/credis": "lib/internal/Credis", - "linkorb/jsmin-php": "lib/internal/JSMin", - "components/jquery": [ - "lib/web/jquery.js", - "lib/web/jquery/jquery.min.js", - "lib/web/jquery/jquery-migrate.js", - "lib/web/jquery/jquery-migrate.min.js" - ], - "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader", - "components/jqueryui": [ - "lib/web/jquery/jquery-ui.js", - "lib/web/jquery/jquery-ui.min.js" - ], - "twbs/bootstrap": [ - "lib/web/jquery/jquery.tabs.js" - ], - "tinymce/tinymce": "lib/web/tiny_mce" - }, - "map": [ - [ - "lib/internal/Cm", - "lib/internal/Cm" - ], - [ - "lib/internal/LinLibertineFont", - "lib/internal/LinLibertineFont" - ], - [ - "lib/internal/Credis", - "lib/internal/Credis" - ], - [ - "lib/internal/CardinalCommerce", - "lib/internal/CardinalCommerce" - ], - [ - "lib/internal/JSMin", - "lib/internal/JSMin" - ], - [ - "lib/.htaccess", - "lib/.htaccess" - ], - [ - "lib/web/lib", - "lib/web/lib" - ], - [ - "lib/web/requirejs", - "lib/web/requirejs" - ], + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-01-28T20:25:53+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "donatj/phpuseragentparser", + "version": "v0.13.0", + "source": { + "type": "git", + "url": "https://github.com/donatj/PhpUserAgent.git", + "reference": "5f2da266d2a386f9b231d4344ae37baf7a467c2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/5f2da266d2a386f9b231d4344ae37baf7a467c2d", + "reference": "5f2da266d2a386f9b231d4344ae37baf7a467c2d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "camspiers/json-pretty": "0.1.*", + "donatj/drop": "*", + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "files": [ + "src/UserAgentParser.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jesse G. Donat", + "email": "donatj@gmail.com", + "homepage": "http://donatstudios.com", + "role": "Developer" + } + ], + "description": "Lightning fast, minimalist PHP UserAgent string parser.", + "homepage": "http://donatstudios.com/PHP-Parser-HTTP_USER_AGENT", + "keywords": [ + "browser", + "browser detection", + "parser", + "user agent", + "useragent" + ], + "time": "2019-03-08T20:52:23+00:00" + }, + { + "name": "dotmailer/dotmailer-magento2-extension", + "version": "3.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/dotmailer/dotmailer-magento2-extension/dotmailer-dotmailer-magento2-extension-3.1.1.0.zip", + "reference": null, + "shasum": "2ede8827f7faacf72f6bc2004f9d4325f61cbd3f" + }, + "require": { + "magento/framework": ">=100 <103", + "magento/module-backend": ">=100 <102", + "magento/module-catalog": ">=101 <104", + "magento/module-catalog-inventory": "100.*", + "magento/module-catalog-rule": ">=100 <102", + "magento/module-checkout": "100.*", + "magento/module-config": ">=100 <103", + "magento/module-cron": "100.*", + "magento/module-customer": ">=100 <103", + "magento/module-directory": "100.*", + "magento/module-eav": ">=100 <103", + "magento/module-email": ">=100 <102", + "magento/module-newsletter": "100.*", + "magento/module-payment": "100.*", + "magento/module-product-alert": "100.*", + "magento/module-quote": ">=100 <102", + "magento/module-reports": "100.*", + "magento/module-review": ">=100 <102", + "magento/module-sales": ">=100 <103", + "magento/module-sales-rule": ">=100 <102", + "magento/module-send-friend": "100.*", + "magento/module-shipping": "100.*", + "magento/module-store": ">=100 <102", + "magento/module-ui": ">=100 <102", + "magento/module-user": ">=100 <102", + "magento/module-wishlist": ">=100 <102" + }, + "require-dev": { + "magento/marketplace-eqp": "dev-master", + "phpmd/phpmd": "@stable", + "squizlabs/php_codesniffer": "@stable" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Dotdigitalgroup\\Email\\": "" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Calin Diacon", + "email": "calin.diacon@dotmailer.com" + }, + { + "name": "Adeel Qamar", + "email": "adeel.qamar@dotmailer.com" + }, + { + "name": "Zygimantas", + "email": "zygimantas.simkus@dotmailer.com" + } + ], + "description": "dotmailer integration for magento 2" + }, + { + "name": "elasticsearch/elasticsearch", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/elastic/elasticsearch-php.git", + "reference": "b237a37b2cdf23a5a17fd3576cdea771394ad00d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/b237a37b2cdf23a5a17fd3576cdea771394ad00d", + "reference": "b237a37b2cdf23a5a17fd3576cdea771394ad00d", + "shasum": "" + }, + "require": { + "ext-json": ">=1.3.7", + "guzzlehttp/ringphp": "~1.0", + "php": "^7.0", + "psr/log": "~1.0" + }, + "require-dev": { + "cpliakas/git-wrapper": "~1.0", + "doctrine/inflector": "^1.1", + "mockery/mockery": "0.9.4", + "phpstan/phpstan-shim": "0.8.3", + "phpunit/phpunit": "6.3.0", + "squizlabs/php_codesniffer": "3.0.2", + "symfony/finder": "^2.8", + "symfony/yaml": "^2.8" + }, + "suggest": { + "ext-curl": "*", + "monolog/monolog": "Allows for client-level logging and tracing" + }, + "type": "library", + "autoload": { + "psr-4": { + "Elasticsearch\\": "src/Elasticsearch/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Zachary Tong" + } + ], + "description": "PHP Client for Elasticsearch", + "keywords": [ + "client", + "elasticsearch", + "search" + ], + "time": "2019-01-08T18:53:46+00:00" + }, + { + "name": "endroid/qr-code", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "a9a57ab57ac75928fcdcfb2a71179963ff6fe573" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/a9a57ab57ac75928fcdcfb2a71179963ff6fe573", + "reference": "a9a57ab57ac75928fcdcfb2a71179963ff6fe573", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^1.0.3", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^1.0", + "myclabs/php-enum": "^1.5", + "php": ">=5.6", + "symfony/options-resolver": ">=2.7", + "symfony/property-access": ">=2.7" + }, + "require-dev": { + "phpunit/phpunit": ">=5.7", + "symfony/asset": ">=2.7", + "symfony/browser-kit": ">=2.7", + "symfony/finder": ">=2.7", + "symfony/framework-bundle": ">=2.7", + "symfony/http-kernel": ">=2.7", + "symfony/templating": ">=2.7", + "symfony/yaml": ">=2.7" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/QrCode", + "keywords": [ + "bundle", + "code", + "endroid", + "flex", + "qr", + "qrcode", + "symfony" + ], + "time": "2017-10-22T18:56:00+00:00" + }, + { + "name": "google/recaptcha", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/google/recaptcha.git", + "reference": "e7add3be59211482ecdb942288f52da64a35f61a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/recaptcha/zipball/e7add3be59211482ecdb942288f52da64a35f61a", + "reference": "e7add3be59211482ecdb942288f52da64a35f61a", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2.20|^2.12", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^4.8.36|^5.7.27|^6.59|^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "ReCaptcha\\": "src/ReCaptcha" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", + "homepage": "https://www.google.com/recaptcha/", + "keywords": [ + "Abuse", + "captcha", + "recaptcha", + "spam" + ], + "time": "2018-08-05T09:31:53+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "time": "2018-07-31T13:22:33+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-10-12T19:18:40+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.8", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2019-01-14T23:55:14+00:00" + }, + { + "name": "khanamiryan/qrcode-detector-decoder", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/khanamiryan/php-qrcode-detector-decoder.git", + "reference": "a75482d3bc804e3f6702332bfda6cccbb0dfaa76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/khanamiryan/php-qrcode-detector-decoder/zipball/a75482d3bc804e3f6702332bfda6cccbb0dfaa76", + "reference": "a75482d3bc804e3f6702332bfda6cccbb0dfaa76", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Zxing\\": "lib/" + }, + "files": [ + "lib/Common/customFunctions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ashot Khanamiryan", + "email": "a.khanamiryan@gmail.com", + "homepage": "https://github.com/khanamiryan", + "role": "Developer" + } + ], + "description": "QR code decoder / reader", + "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder/", + "keywords": [ + "barcode", + "qr", + "zxing" + ], + "time": "2018-04-26T11:41:33+00:00" + }, + { + "name": "klarna/m2-payments", + "version": "7.1.0", + "require": { + "klarna/module-core": "5.1.0", + "klarna/module-kp": "6.1.0", + "klarna/module-ordermanagement": "5.0.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "metapackage", + "license": [ + "Apache-2.0" + ], + "description": "Klarna Payments for Magento 2 (CE & EE)" + }, + { + "name": "klarna/module-core", + "version": "5.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/klarna/module-core/klarna-module-core-5.1.0.0.zip", + "reference": null, + "shasum": "050cc44c0077880e6a364e93f60d607cfd33c813" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "magento/framework": "^100.1||^101.0||^102.0", + "magento/module-bundle": "^100.1", + "magento/module-catalog": "^102.0||^103.0", + "magento/module-config": "^101.0||^102.0", + "magento/module-customer": "^101.0||^102.0", + "magento/module-directory": "^100.1", + "magento/module-payment": "^100.2", + "magento/module-quote": "^101.0", + "magento/module-sales": "^101.0||^102.0", + "magento/module-store": "^100.1||^101.0", + "magento/module-tax": "^100.1", + "php": "~7.0.13|~7.1.0|~7.2.0", + "psr/log": "^1.0", + "ramsey/uuid": "3.6.1||^3.7" + }, + "conflict": { + "magento/module-payment": "100.0.8 || 100.1.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "magento2-module", + "autoload": { + "psr-4": { + "Klarna\\Core\\": "." + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joe Constant", + "email": "joe.constant@klarna.com" + }, + { + "name": "Jason Grim", + "email": "jason.grim@klarna.com" + }, + { + "name": "Fei Chen", + "email": "fei.chen@klarna.com" + } + ], + "description": "Klarna Core Magento 2 Extension" + }, + { + "name": "klarna/module-kp", + "version": "6.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/klarna/module-kp/klarna-module-kp-6.1.0.0.zip", + "reference": null, + "shasum": "cf1911ce01da43e226fced1d3d72baec66875393" + }, + "require": { + "klarna/module-core": "^4.0||^5.0", + "klarna/module-ordermanagement": "^4.0||^5.0", + "magento/framework": "^100.1||^101.0||^102.0", + "magento/module-checkout": "^100.1", + "magento/module-customer": "^100.1||^101.0||^102.0", + "magento/module-directory": "^100.1", + "magento/module-payment": "^100.1", + "magento/module-quote": "^100.1||^101.0", + "magento/module-sales": "^100.1||^101.0||^102.0", + "magento/module-store": "^100.1||^101.0", + "php": "~7.0.13|~7.1.0|~7.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "magento/framework": "^101.0.0", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "magento2-module", + "autoload": { + "psr-4": { + "Klarna\\Kp\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joe Constant", + "email": "joe.constant@klarna.com" + }, + { + "name": "Jason Grim", + "email": "jason.grim@klarna.com" + }, + { + "name": "Fei Chen", + "email": "fei.chen@klarna.com" + }, + { + "name": "Dario Kassler", + "email": "dario.kassler@klarna.com" + } + ], + "description": "Klarna Payments Magento 2 Extension" + }, + { + "name": "klarna/module-ordermanagement", + "version": "5.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/klarna/module-ordermanagement/klarna-module-ordermanagement-5.0.3.0.zip", + "reference": null, + "shasum": "5a73ab885349d4c7f9a56dc9465c4ff712e808ca" + }, + "require": { + "klarna/module-core": "^4.0||^5.0", + "magento/framework": "^102.0", + "magento/module-payment": "^100.1", + "magento/module-quote": "^100.1||^101.0||^102.0", + "magento/module-sales": "^100.1||^101.0||^102.0", + "magento/module-store": "^100.1||^101.0", + "php": "~7.1.0|~7.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.10.1", + "jakub-onderka/php-console-highlighter": "^0.3.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "lusitanian/oauth": "~0.8.10", + "magento-ecg/coding-standard": "^3.1", + "magento/framework": "^101.0.0", + "mikey179/vfsstream": "^1.6", + "pdepend/pdepend": "^2.5", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "@stable", + "phpro/grumphp": "^0.14", + "phpunit/phpunit": "~6.2.0", + "sebastian/phpcpd": "~3.0", + "squizlabs/php_codesniffer": "^3.2", + "theseer/phpdox": "^0.10.1" + }, + "type": "magento2-module", + "autoload": { + "psr-4": { + "Klarna\\Ordermanagement\\": "." + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joe Constant", + "email": "joe.constant@klarna.com" + }, + { + "name": "Jason Grim", + "email": "jason.grim@klarna.com" + }, + { + "name": "Fei Chen", + "email": "fei.chen@klarna.com" + }, + { + "name": "Dario Kassler", + "email": "dario.kassler@klarna.com" + } + ], + "description": "Klarna Order Management Magento 2 Extension" + }, + { + "name": "magento/composer", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/magento/composer.git", + "reference": "6fb9eb3dd72a5e70aa53983f132f8e1883e79978" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/composer/zipball/6fb9eb3dd72a5e70aa53983f132f8e1883e79978", + "reference": "6fb9eb3dd72a5e70aa53983f132f8e1883e79978", + "shasum": "" + }, + "require": { + "composer/composer": "^1.6", + "php": "~7.1.3|~7.2.0", + "symfony/console": "~4.0.0 || ~4.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~7.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Magento\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Magento composer library helps to instantiate Composer application and run composer commands.", + "time": "2018-06-29T18:46:51+00:00" + }, + { + "name": "magento/framework", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework/magento-framework-102.0.1.0.zip", + "reference": null, + "shasum": "399d85904a005db76ce518a265cfdaff68d02984" + }, + "require": { + "colinmollenhour/php-redis-session-abstract": "~1.4.0", + "composer/composer": "^1.6", + "ext-bcmath": "*", + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-iconv": "*", + "ext-openssl": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "ext-xsl": "*", + "lib-libxml": "*", + "magento/zendframework1": "~1.14.0", + "monolog/monolog": "^1.17", + "oyejorge/less.php": "~1.7.0", + "php": "~7.1.3||~7.2.0", + "symfony/console": "~4.1.0", + "symfony/process": "~4.1.0", + "tedivm/jshrink": "~1.3.0", + "zendframework/zend-code": "~3.3.0", + "zendframework/zend-crypt": "^2.6.0", + "zendframework/zend-http": "^2.6.0", + "zendframework/zend-mvc": "~2.7.0", + "zendframework/zend-stdlib": "^2.7.7", + "zendframework/zend-uri": "^2.5.1", + "zendframework/zend-validator": "^2.6.0" + }, + "suggest": { + "ext-imagick": "Use Image Magick >=3.0.0 as an optional alternative image processing library" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/framework-amqp", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework-amqp/magento-framework-amqp-100.3.1.0.zip", + "reference": null, + "shasum": "40a4d6799c43dd9eed1f7dba4ca2eb6b26518966" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0", + "php-amqplib/php-amqplib": "~2.7.0" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\Amqp\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/framework-bulk", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework-bulk/magento-framework-bulk-100.3.1.0.zip", + "reference": null, + "shasum": "efa487ceac1c91824797e1f8a87d9b6bd2fdfa3a" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\Bulk\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/framework-message-queue", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/framework-message-queue/magento-framework-message-queue-100.3.1.0.zip", + "reference": null, + "shasum": "51901caed892f2e26241677df2f72deaa010a1a3" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-library", + "autoload": { + "psr-4": { + "Magento\\Framework\\MessageQueue\\": "" + }, + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/inventory-composer-installer", + "version": "1.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/inventory-composer-installer/magento-inventory-composer-installer-1.1.0.0.zip", + "reference": null, + "shasum": "c52566b82926bb37487a2b3cb2c8ae091be9be9e" + }, + "require": { + "composer-plugin-api": "^1.1", + "magento/framework": "*" + }, + "require-dev": { + "composer/composer": "*" + }, + "type": "composer-plugin", + "extra": { + "class": "Magento\\InventoryComposerInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "Magento\\InventoryComposerInstaller\\": "src" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Composer plugin for Magento Multi Source Inventory" + }, + { + "name": "magento/inventory-composer-metapackage", + "version": "1.1.1", + "require": { + "magento/inventory-composer-installer": "1.1.0", + "magento/module-inventory": "1.0.4", + "magento/module-inventory-admin-ui": "1.0.4", + "magento/module-inventory-api": "1.0.4", + "magento/module-inventory-bundle-product": "1.0.3", + "magento/module-inventory-bundle-product-admin-ui": "1.0.3", + "magento/module-inventory-cache": "1.0.3", + "magento/module-inventory-catalog": "1.0.4", + "magento/module-inventory-catalog-admin-ui": "1.0.4", + "magento/module-inventory-catalog-api": "1.0.4", + "magento/module-inventory-catalog-search": "1.0.4", + "magento/module-inventory-configurable-product": "1.0.4", + "magento/module-inventory-configurable-product-admin-ui": "1.0.4", + "magento/module-inventory-configurable-product-indexer": "1.0.3", + "magento/module-inventory-configuration": "1.0.4", + "magento/module-inventory-configuration-api": "1.0.4", + "magento/module-inventory-distance-based-source-selection": "1.0.0", + "magento/module-inventory-distance-based-source-selection-admin-ui": "1.0.0", + "magento/module-inventory-distance-based-source-selection-api": "1.0.0", + "magento/module-inventory-elasticsearch": "1.0.0", + "magento/module-inventory-grouped-product": "1.0.3", + "magento/module-inventory-grouped-product-admin-ui": "1.0.4", + "magento/module-inventory-grouped-product-indexer": "1.0.3", + "magento/module-inventory-import-export": "1.0.4", + "magento/module-inventory-indexer": "1.0.4", + "magento/module-inventory-low-quantity-notification": "1.0.4", + "magento/module-inventory-low-quantity-notification-admin-ui": "1.0.4", + "magento/module-inventory-low-quantity-notification-api": "1.0.3", + "magento/module-inventory-multi-dimensional-indexer-api": "1.0.4", + "magento/module-inventory-product-alert": "1.0.4", + "magento/module-inventory-reservations": "1.0.4", + "magento/module-inventory-reservations-api": "1.0.3", + "magento/module-inventory-sales": "1.0.4", + "magento/module-inventory-sales-admin-ui": "1.0.4", + "magento/module-inventory-sales-api": "1.0.4", + "magento/module-inventory-sales-frontend-ui": "1.0.3", + "magento/module-inventory-setup-fixture-generator": "1.0.0", + "magento/module-inventory-shipping": "1.0.4", + "magento/module-inventory-shipping-admin-ui": "1.0.4", + "magento/module-inventory-source-deduction-api": "1.0.4", + "magento/module-inventory-source-selection": "1.0.4", + "magento/module-inventory-source-selection-api": "1.1.0" + }, + "type": "metapackage", + "description": "Metapackage with Magento Inventory modules for simple installation" + }, + { + "name": "magento/language-de_de", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-de_de/magento-language-de_de-100.3.1.0.zip", + "reference": null, + "shasum": "4fa504af2bb938cadea2376cb17caa0832791bfa" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "German (Germany) language" + }, + { + "name": "magento/language-en_us", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-en_us/magento-language-en_us-100.3.1.0.zip", + "reference": null, + "shasum": "13e74a7d83dbd49dec496aeaedc5ad0dc82dacd8" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "English (United States) language" + }, + { + "name": "magento/language-es_es", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-es_es/magento-language-es_es-100.3.1.0.zip", + "reference": null, + "shasum": "ea3dd068fe9caad30835e9dff5a2aab96032e4c0" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Spanish (Spain) language" + }, + { + "name": "magento/language-fr_fr", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-fr_fr/magento-language-fr_fr-100.3.1.0.zip", + "reference": null, + "shasum": "9ab44b7845abb6f1b031864c815de6ae836dbaf7" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "French (France) language" + }, + { + "name": "magento/language-nl_nl", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-nl_nl/magento-language-nl_nl-100.3.1.0.zip", + "reference": null, + "shasum": "060a175c553e80abf77f877a6d92746658e270f0" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Dutch (Netherlands) language" + }, + { + "name": "magento/language-pt_br", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-pt_br/magento-language-pt_br-100.3.1.0.zip", + "reference": null, + "shasum": "50c59308621d44fe8def4a93253087fa69bdae70" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Portuguese (Brazil) language" + }, + { + "name": "magento/language-zh_hans_cn", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/language-zh_hans_cn/magento-language-zh_hans_cn-100.3.1.0.zip", + "reference": null, + "shasum": "8b2e9a40c956bc05c50b02ea54e10c00d9d24d78" + }, + "require": { + "magento/framework": "102.0.*" + }, + "type": "magento2-language", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Chinese (China) language" + }, + { + "name": "magento/magento-composer-installer", + "version": "0.1.13", + "source": { + "type": "git", + "url": "https://github.com/magento/magento-composer-installer.git", + "reference": "8b6c32f53b4944a5d6656e86344cd0f9784709a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/magento-composer-installer/zipball/8b6c32f53b4944a5d6656e86344cd0f9784709a1", + "reference": "8b6c32f53b4944a5d6656e86344cd0f9784709a1", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0" + }, + "replace": { + "magento-hackathon/magento-composer-installer": "*" + }, + "require-dev": { + "composer/composer": "*@dev", + "firegento/phpcs": "dev-patch-1", + "mikey179/vfsstream": "*", + "phpunit/phpunit": "*", + "phpunit/phpunit-mock-objects": "dev-master", + "squizlabs/php_codesniffer": "1.4.7", + "symfony/process": "*" + }, + "type": "composer-plugin", + "extra": { + "composer-command-registry": [ + "MagentoHackathon\\Composer\\Magento\\Command\\DeployCommand" + ], + "class": "MagentoHackathon\\Composer\\Magento\\Plugin" + }, + "autoload": { + "psr-0": { + "MagentoHackathon\\Composer\\Magento": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Vinai Kopp", + "email": "vinai@netzarbeiter.com" + }, + { + "name": "Daniel Fahlke aka Flyingmana", + "email": "flyingmana@googlemail.com" + }, + { + "name": "Jörg Weller", + "email": "weller@flagbit.de" + }, + { + "name": "Karl Spies", + "email": "karl.spies@gmx.net" + }, + { + "name": "Tobias Vogt", + "email": "tobi@webguys.de" + }, + { + "name": "David Fuhr", + "email": "fuhr@flagbit.de" + } + ], + "description": "Composer installer for Magento modules", + "homepage": "https://github.com/magento/magento-composer-installer", + "keywords": [ + "composer-installer", + "magento" + ], + "time": "2017-12-29T16:45:24+00:00" + }, + { + "name": "magento/magento2-base", + "version": "2.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/magento2-base/magento-magento2-base-2.3.1.0.zip", + "reference": null, + "shasum": "7877828bb63a7cfca5c62c6c6caf6a9c05ab154b" + }, + "require": { + "braintree/braintree_php": "3.35.0", + "composer/composer": "^1.6", + "ext-intl": "*", + "ext-mbstring": "*", + "magento/composer": "~1.4.0", + "magento/magento-composer-installer": "*", + "magento/zendframework1": "~1.14.1", + "monolog/monolog": "^1.17", + "oyejorge/less.php": "~1.7.0", + "pelago/emogrifier": "^2.0.0", + "php": "~7.1.3||~7.2.0", + "phpseclib/phpseclib": "2.0.*", + "symfony/console": "~4.1.0", + "symfony/event-dispatcher": "~4.1.0", + "tedivm/jshrink": "~1.3.0", + "tubalmartin/cssmin": "4.1.1", + "zendframework/zend-code": "~3.3.0", + "zendframework/zend-config": "^2.6.0", + "zendframework/zend-console": "^2.6.0", + "zendframework/zend-crypt": "^2.6.0", + "zendframework/zend-di": "^2.6.1", + "zendframework/zend-eventmanager": "^2.6.3", + "zendframework/zend-form": "^2.10.0", + "zendframework/zend-http": "^2.6.0", + "zendframework/zend-i18n": "^2.7.3", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.1", + "zendframework/zend-modulemanager": "^2.7", + "zendframework/zend-mvc": "~2.7.0", + "zendframework/zend-serializer": "^2.7.2", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.8", + "zendframework/zend-soap": "^2.7.0", + "zendframework/zend-stdlib": "^2.7.7", + "zendframework/zend-text": "^2.6.0", + "zendframework/zend-uri": "^2.5.1", + "zendframework/zend-validator": "^2.6.0", + "zendframework/zend-view": "~2.10.0" + }, + "conflict": { + "gene/bluefoot": "*" + }, + "replace": { + "blueimp/jquery-file-upload": "5.6.14", + "components/jquery": "1.11.0", + "components/jqueryui": "1.10.4", + "tinymce/tinymce": "3.4.7", + "trentrichardson/jquery-timepicker-addon": "1.4.3", + "twbs/bootstrap": "3.1.0" + }, + "type": "magento2-component", + "extra": { + "component_paths": { + "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js", + "components/jquery": [ + "lib/web/jquery.js", + "lib/web/jquery/jquery.min.js", + "lib/web/jquery/jquery-migrate.js" + ], + "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader", + "components/jqueryui": "lib/web/jquery/jquery-ui.js", + "twbs/bootstrap": "lib/web/jquery/jquery.tabs.js", + "tinymce/tinymce": "lib/web/tiny_mce_4" + }, + "map": [ [ - "lib/web/prototype", - "lib/web/prototype" + ".github", + ".github" ], [ - "lib/web/moment.js", - "lib/web/moment.js" + ".htaccess", + ".htaccess" ], [ - "lib/web/i18n", - "lib/web/i18n" + ".htaccess.sample", + ".htaccess.sample" ], [ - "lib/web/varien", - "lib/web/varien" + ".php_cs.dist", + ".php_cs.dist" ], [ - "lib/web/blank.html", - "lib/web/blank.html" + ".travis.yml", + ".travis.yml" ], [ - "lib/web/scriptaculous", - "lib/web/scriptaculous" + ".user.ini", + ".user.ini" ], [ - "lib/web/ko", - "lib/web/ko" + "COPYING.txt", + "COPYING.txt" ], [ - "lib/web/modernizr", - "lib/web/modernizr" + "Gruntfile.js.sample", + "Gruntfile.js.sample" ], [ - "lib/web/date-format-normalizer.js", - "lib/web/date-format-normalizer.js" + "LICENSE.txt", + "LICENSE.txt" ], [ - "lib/web/spacer.gif", - "lib/web/spacer.gif" + "LICENSE_AFL.txt", + "LICENSE_AFL.txt" ], [ - "lib/web/images", - "lib/web/images" + "app/.htaccess", + "app/.htaccess" ], [ - "lib/web/matchMedia.js", - "lib/web/matchMedia.js" + "app/autoload.php", + "app/autoload.php" ], [ - "lib/web/extjs", - "lib/web/extjs" + "app/bootstrap.php", + "app/bootstrap.php" ], [ - "lib/web/css", - "lib/web/css" + "app/design/adminhtml/Magento", + "app/design/adminhtml/Magento" ], [ - "lib/web/fonts", - "lib/web/fonts" + "app/design/frontend/Magento", + "app/design/frontend/Magento" ], [ - "lib/web/jquery", - "lib/web/jquery" + "app/etc/NonComposerComponentRegistration.php", + "app/etc/NonComposerComponentRegistration.php" ], [ - "lib/web/less", - "lib/web/less" + "app/etc/db_schema.xml", + "app/etc/db_schema.xml" ], [ - "lib/web/jquery.js", - "lib/web/jquery.js" + "app/etc/di.xml", + "app/etc/di.xml" ], [ - "lib/web/underscore.js", - "lib/web/underscore.js" + "app/etc/registration_globlist.php", + "app/etc/registration_globlist.php" ], [ - "lib/web/legacy-build.min.js", - "lib/web/legacy-build.min.js" + "app/functions.php", + "app/functions.php" ], [ - "lib/web/mage", - "lib/web/mage" + "auth.json.sample", + "auth.json.sample" ], [ - "lib/web/tiny_mce", - "lib/web/tiny_mce" + "bin/.htaccess", + "bin/.htaccess" ], [ - ".htaccess.sample", - ".htaccess.sample" + "bin/magento", + "bin/magento" ], [ - "CONTRIBUTING.md", - "CONTRIBUTING.md" + "dev/.htaccess", + "dev/.htaccess" ], [ - "package.json", - "package.json" + "dev/tests/acceptance", + "dev/tests/acceptance" ], [ - "nginx.conf.sample", - "nginx.conf.sample" + "dev/tests/api-functional/.gitignore", + "dev/tests/api-functional/.gitignore" ], [ - "var/.htaccess", - "var/.htaccess" + "dev/tests/api-functional/_files", + "dev/tests/api-functional/_files" ], [ - "pub/media/downloadable/.htaccess", - "pub/media/downloadable/.htaccess" + "dev/tests/api-functional/config", + "dev/tests/api-functional/config" ], [ - "pub/media/theme_customization/.htaccess", - "pub/media/theme_customization/.htaccess" + "dev/tests/api-functional/framework", + "dev/tests/api-functional/framework" ], [ - "pub/media/customer/.htaccess", - "pub/media/customer/.htaccess" + "dev/tests/api-functional/phpunit_graphql.xml.dist", + "dev/tests/api-functional/phpunit_graphql.xml.dist" ], [ - "pub/media/.htaccess", - "pub/media/.htaccess" + "dev/tests/api-functional/phpunit_rest.xml.dist", + "dev/tests/api-functional/phpunit_rest.xml.dist" ], [ - "pub/errors", - "pub/errors" + "dev/tests/api-functional/phpunit_soap.xml.dist", + "dev/tests/api-functional/phpunit_soap.xml.dist" ], [ - "pub/opt", - "pub/opt" + "dev/tests/api-functional/testsuite/Magento", + "dev/tests/api-functional/testsuite/Magento" ], [ - "pub/get.php", - "pub/get.php" + "dev/tests/error_handler.php", + "dev/tests/error_handler.php" + ], + [ + "dev/tests/functional/.gitignore", + "dev/tests/functional/.gitignore" + ], + [ + "dev/tests/functional/.htaccess.sample", + "dev/tests/functional/.htaccess.sample" + ], + [ + "dev/tests/functional/bootstrap.php", + "dev/tests/functional/bootstrap.php" + ], + [ + "dev/tests/functional/composer.json", + "dev/tests/functional/composer.json" + ], + [ + "dev/tests/functional/credentials.xml.dist", + "dev/tests/functional/credentials.xml.dist" + ], + [ + "dev/tests/functional/etc", + "dev/tests/functional/etc" + ], + [ + "dev/tests/functional/isolation.php", + "dev/tests/functional/isolation.php" + ], + [ + "dev/tests/functional/lib", + "dev/tests/functional/lib" + ], + [ + "dev/tests/functional/phpunit.xml.dist", + "dev/tests/functional/phpunit.xml.dist" + ], + [ + "dev/tests/functional/tests", + "dev/tests/functional/tests" + ], + [ + "dev/tests/functional/testsuites/Magento", + "dev/tests/functional/testsuites/Magento" + ], + [ + "dev/tests/functional/utils", + "dev/tests/functional/utils" + ], + [ + "dev/tests/integration/.gitignore", + "dev/tests/integration/.gitignore" + ], + [ + "dev/tests/integration/_files", + "dev/tests/integration/_files" + ], + [ + "dev/tests/integration/bin", + "dev/tests/integration/bin" + ], + [ + "dev/tests/integration/etc", + "dev/tests/integration/etc" + ], + [ + "dev/tests/integration/framework", + "dev/tests/integration/framework" + ], + [ + "dev/tests/integration/phpunit.xml.dist", + "dev/tests/integration/phpunit.xml.dist" + ], + [ + "dev/tests/integration/testsuite/Magento", + "dev/tests/integration/testsuite/Magento" + ], + [ + "dev/tests/integration/tmp", + "dev/tests/integration/tmp" + ], + [ + "dev/tests/js", + "dev/tests/js" + ], + [ + "dev/tests/setup-integration", + "dev/tests/setup-integration" + ], + [ + "dev/tests/static/.gitignore", + "dev/tests/static/.gitignore" + ], + [ + "dev/tests/static/framework", + "dev/tests/static/framework" + ], + [ + "dev/tests/static/get_github_changes.php", + "dev/tests/static/get_github_changes.php" + ], + [ + "dev/tests/static/phpunit-all.xml.dist", + "dev/tests/static/phpunit-all.xml.dist" + ], + [ + "dev/tests/static/phpunit.xml.dist", + "dev/tests/static/phpunit.xml.dist" + ], + [ + "dev/tests/static/testsuite/Magento", + "dev/tests/static/testsuite/Magento" + ], + [ + "dev/tests/static/tmp", + "dev/tests/static/tmp" ], [ - "pub/static/.htaccess", - "pub/static/.htaccess" + "dev/tests/unit/.gitignore", + "dev/tests/unit/.gitignore" ], [ - "pub/.htaccess", - "pub/.htaccess" + "dev/tests/unit/framework", + "dev/tests/unit/framework" ], [ - "pub/static.php", - "pub/static.php" + "dev/tests/unit/phpunit.xml.dist", + "dev/tests/unit/phpunit.xml.dist" ], [ - "pub/cron.php", - "pub/cron.php" + "dev/tests/unit/tmp", + "dev/tests/unit/tmp" ], [ - "pub/index.php", - "pub/index.php" + "dev/tools", + "dev/tools" ], [ - ".php_cs", - ".php_cs" + "dev/travis", + "dev/travis" ], [ - "COPYING.txt", - "COPYING.txt" + "generated", + "generated" ], [ - "dev/shell", - "dev/shell" + "grunt-config.json.sample", + "grunt-config.json.sample" ], [ - "dev/tools", - "dev/tools" + "index.php", + "index.php" ], [ - "dev/tests/integration/phpunit.xml.dist", - "dev/tests/integration/phpunit.xml.dist" + "lib/.htaccess", + "lib/.htaccess" ], [ - "dev/tests/integration/etc", - "dev/tests/integration/etc" + "lib/internal/GnuFreeFont", + "lib/internal/GnuFreeFont" ], [ - "dev/tests/integration/tmp", - "dev/tests/integration/tmp" + "lib/internal/LinLibertineFont", + "lib/internal/LinLibertineFont" ], [ - "dev/tests/integration/framework", - "dev/tests/integration/framework" + "lib/web/FormData.js", + "lib/web/FormData.js" ], [ - "dev/tests/integration/testsuite/Magento", - "dev/tests/integration/testsuite/Magento" + "lib/web/MutationObserver.js", + "lib/web/MutationObserver.js" ], [ - "dev/tests/integration/.gitignore", - "dev/tests/integration/.gitignore" + "lib/web/blank.html", + "lib/web/blank.html" ], [ - "dev/tests/functional/composer.json", - "dev/tests/functional/composer.json" + "lib/web/css", + "lib/web/css" ], [ - "dev/tests/functional/lib", - "dev/tests/functional/lib" + "lib/web/es6-collections.js", + "lib/web/es6-collections.js" ], [ - "dev/tests/functional/phpunit.xml.dist", - "dev/tests/functional/phpunit.xml.dist" + "lib/web/extjs", + "lib/web/extjs" ], [ - "dev/tests/functional/composer.json.dist", - "dev/tests/functional/composer.json.dist" + "lib/web/fonts", + "lib/web/fonts" ], [ - "dev/tests/functional/bootstrap.php", - "dev/tests/functional/bootstrap.php" + "lib/web/fotorama", + "lib/web/fotorama" ], [ - "dev/tests/functional/credentials.xml.dist", - "dev/tests/functional/credentials.xml.dist" + "lib/web/i18n", + "lib/web/i18n" ], [ - "dev/tests/functional/tests", - "dev/tests/functional/tests" + "lib/web/images", + "lib/web/images" ], [ - "dev/tests/functional/utils", - "dev/tests/functional/utils" + "lib/web/jquery.js", + "lib/web/jquery.js" ], [ - "dev/tests/functional/isolation.php", - "dev/tests/functional/isolation.php" + "lib/web/jquery", + "lib/web/jquery" ], [ - "dev/tests/functional/etc", - "dev/tests/functional/etc" + "lib/web/knockoutjs", + "lib/web/knockoutjs" ], [ - "dev/tests/functional/.htaccess", - "dev/tests/functional/.htaccess" + "lib/web/legacy-build.min.js", + "lib/web/legacy-build.min.js" ], [ - "dev/tests/functional/testsuites/Magento", - "dev/tests/functional/testsuites/Magento" + "lib/web/less", + "lib/web/less" ], [ - "dev/tests/functional/.gitignore", - "dev/tests/functional/.gitignore" + "lib/web/lib", + "lib/web/lib" ], [ - "dev/tests/js/spec", - "dev/tests/js/spec" + "lib/web/mage", + "lib/web/mage" ], [ - "dev/tests/js/framework", - "dev/tests/js/framework" + "lib/web/magnifier", + "lib/web/magnifier" ], [ - "dev/tests/js/testsuite/lib", - "dev/tests/js/testsuite/lib" + "lib/web/matchMedia.js", + "lib/web/matchMedia.js" ], [ - "dev/tests/js/testsuite/mage", - "dev/tests/js/testsuite/mage" + "lib/web/modernizr", + "lib/web/modernizr" ], [ - "dev/tests/js/.gitignore", - "dev/tests/js/.gitignore" + "lib/web/moment-timezone-with-data.js", + "lib/web/moment-timezone-with-data.js" ], [ - "dev/tests/api-functional/phpunit.xml.dist", - "dev/tests/api-functional/phpunit.xml.dist" + "lib/web/moment.js", + "lib/web/moment.js" ], [ - "dev/tests/api-functional/config", - "dev/tests/api-functional/config" + "lib/web/prototype", + "lib/web/prototype" ], [ - "dev/tests/api-functional/framework", - "dev/tests/api-functional/framework" + "lib/web/requirejs", + "lib/web/requirejs" ], [ - "dev/tests/api-functional/_files", - "dev/tests/api-functional/_files" + "lib/web/scriptaculous", + "lib/web/scriptaculous" ], [ - "dev/tests/api-functional/testsuite/Magento", - "dev/tests/api-functional/testsuite/Magento" + "lib/web/spacer.gif", + "lib/web/spacer.gif" ], [ - "dev/tests/api-functional/.gitignore", - "dev/tests/api-functional/.gitignore" + "lib/web/tiny_mce_4", + "lib/web/tiny_mce_4" ], [ - "dev/tests/unit/phpunit.xml.dist", - "dev/tests/unit/phpunit.xml.dist" + "lib/web/underscore.js", + "lib/web/underscore.js" ], [ - "dev/tests/unit/tmp", - "dev/tests/unit/tmp" + "lib/web/varien", + "lib/web/varien" ], [ - "dev/tests/unit/framework", - "dev/tests/unit/framework" + "nginx.conf.sample", + "nginx.conf.sample" ], [ - "dev/tests/unit/.gitignore", - "dev/tests/unit/.gitignore" + "package.json.sample", + "package.json.sample" ], [ - "dev/tests/static/phpunit-all.xml.dist", - "dev/tests/static/phpunit-all.xml.dist" + "phpserver", + "phpserver" ], [ - "dev/tests/static/phpunit.xml.dist", - "dev/tests/static/phpunit.xml.dist" + "pub/.htaccess", + "pub/.htaccess" ], [ - "dev/tests/static/framework", - "dev/tests/static/framework" + "pub/.user.ini", + "pub/.user.ini" ], [ - "dev/tests/static/testsuite/Magento", - "dev/tests/static/testsuite/Magento" + "pub/cron.php", + "pub/cron.php" ], [ - "dev/tests/static/.gitignore", - "dev/tests/static/.gitignore" + "pub/errors", + "pub/errors" ], [ - "dev/.htaccess", - "dev/.htaccess" + "pub/get.php", + "pub/get.php" ], [ - "Gruntfile.js", - "Gruntfile.js" + "pub/health_check.php", + "pub/health_check.php" ], [ - "setup", - "setup" + "pub/index.php", + "pub/index.php" ], [ - "LICENSE.txt", - "LICENSE.txt" + "pub/media/.htaccess", + "pub/media/.htaccess" ], [ - ".travis.yml", - ".travis.yml" + "pub/media/customer/.htaccess", + "pub/media/customer/.htaccess" ], [ - "app/bootstrap.php", - "app/bootstrap.php" + "pub/media/downloadable/.htaccess", + "pub/media/downloadable/.htaccess" ], [ - "app/etc/di.xml", - "app/etc/di.xml" + "pub/media/import", + "pub/media/import" ], [ - "app/.htaccess", - "app/.htaccess" + "pub/media/theme_customization/.htaccess", + "pub/media/theme_customization/.htaccess" ], [ - "app/functions.php", - "app/functions.php" + "pub/opt", + "pub/opt" ], [ - "app/autoload.php", - "app/autoload.php" + "pub/static.php", + "pub/static.php" ], [ - ".htaccess", - ".htaccess" + "pub/static/.htaccess", + "pub/static/.htaccess" ], [ - "php.ini.sample", - "php.ini.sample" + "setup", + "setup" ], [ - "index.php", - "index.php" + "var/.htaccess", + "var/.htaccess" ], [ - "LICENSE_AFL.txt", - "LICENSE_AFL.txt" + "vendor/.htaccess", + "vendor/.htaccess" ] + ], + "chmod": [ + { + "mask": "0755", + "path": "bin/magento" + } + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Magento 2 Base (Community Edition)" + }, + { + "name": "magento/module-admin-notification", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-admin-notification/magento-module-admin-notification-100.3.1.0.zip", + "reference": null, + "shasum": "e7aea76407406c35e6505d4fce2cb06be409ec64" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdminNotification\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-advanced-pricing-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-advanced-pricing-import-export/magento-module-advanced-pricing-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "fbb58c6284f6eba01927bdcf2be6460650a8eef7" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdvancedPricingImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-advanced-search", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-advanced-search/magento-module-advanced-search-100.3.1.0.zip", + "reference": null, + "shasum": "3dbf902fa79a08b136205c7b2681ad91425a97b5" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AdvancedSearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-amqp", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-amqp/magento-module-amqp-100.3.1.0.zip", + "reference": null, + "shasum": "fdf734b25eb5fd29a7a8743b3d1e575ba29aa947" + }, + "require": { + "magento/framework": "102.0.*", + "magento/framework-amqp": "100.3.*", + "magento/framework-message-queue": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Amqp\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-analytics/magento-module-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "c17c1d3353335fb9c9197e715ad7ec117700755c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Analytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-asynchronous-operations", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-asynchronous-operations/magento-module-asynchronous-operations-100.3.1.0.zip", + "reference": null, + "shasum": "9666e0949545697e66d13df886e16915ddfd3ffa" + }, + "require": { + "magento/framework": "102.0.*", + "magento/framework-bulk": "100.3.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-admin-notification": "100.3.*", + "magento/module-logging": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AsynchronousOperations\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-authorization", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorization/magento-module-authorization-100.3.1.0.zip", + "reference": null, + "shasum": "c2a05780a4568e92634a46199c6925fecb4c32e3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Authorization\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Authorization module provides access to Magento ACL functionality." + }, + { + "name": "magento/module-authorizenet", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorizenet/magento-module-authorizenet-100.3.1.0.zip", + "reference": null, + "shasum": "ab9dc9018f1a5b71cfaa54c1975d6ee6b5c7610c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Authorizenet\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-authorizenet-acceptjs", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorizenet-acceptjs/magento-module-authorizenet-acceptjs-100.3.0.0.zip", + "reference": null, + "shasum": "16bc1b50a4e7f63bfa3869fa2c3bd4c67cedd8a3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\AuthorizenetAcceptjs\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-backend", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-backend/magento-module-backend-101.0.1.0.zip", + "reference": null, + "shasum": "3670764e864583abb604107c13490e239ba094d8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backup": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-developer": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-translation": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Backend\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-backup", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-backup/magento-module-backup-100.3.1.0.zip", + "reference": null, + "shasum": "bb5a040e418e42554c0887673e21420479e8bf76" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cron": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Backup\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-braintree", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-braintree/magento-module-braintree-100.3.1.0.zip", + "reference": null, + "shasum": "bc99da6e5eef549dc2542cfe914aa7742361e2c6" + }, + "require": { + "braintree/braintree_php": "3.35.0", + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-instant-purchase": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-paypal": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-ui": "101.1.*", + "magento/module-vault": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout-agreements": "100.3.*", + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Braintree\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-bundle", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-bundle/magento-module-bundle-100.3.1.0.zip", + "reference": null, + "shasum": "b1ce50b01d2d8997e1f6dcfc9b2dc82f47d987db" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle-sample-data": "Sample Data version: 100.3.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Bundle\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-bundle-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-bundle-graph-ql/magento-module-bundle-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "4adf0dc50f886e121dde5f906ceaff8630a96697" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\BundleGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-bundle-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-bundle-import-export/magento-module-bundle-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "bdd21ea7945b87b643de52d93fb63b4c6ee625c9" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\BundleImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cache-invalidate", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cache-invalidate/magento-module-cache-invalidate-100.3.1.0.zip", + "reference": null, + "shasum": "ee84c4c87bc878f08f1c325f82b88a7f8a2b4d85" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-page-cache": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CacheInvalidate\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-captcha", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-captcha/magento-module-captcha-100.3.1.0.zip", + "reference": null, + "shasum": "1d37fe2ce55a611af45abf9a79bf3ab45b18fb41" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-session": "^2.7.3" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Captcha\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog", + "version": "103.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog/magento-module-catalog-103.0.1.0.zip", + "reference": null, + "shasum": "9f6308528cd0b385c47300ac96e88a48c7462958" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-indexer": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-product-alert": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-url-rewrite": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-sample-data": "Sample Data version: 100.3.*", + "magento/module-cookie": "100.3.*", + "magento/module-sales": "102.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Catalog\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-analytics/magento-module-catalog-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "78dad80df624ec870cd1fe528eb6bf23dd2a9174" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-catalog": "103.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-graph-ql/magento-module-catalog-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "cab0f652a82a7011271931cfedbb8c13f362ea8c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-eav-graph-ql": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*", + "magento/module-store-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-import-export", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-import-export/magento-module-catalog-import-export-101.0.1.0.zip", + "reference": null, + "shasum": "240b1ea27fb0bdebd2cf674ce280917363463216" + }, + "require": { + "ext-ctype": "*", + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-inventory", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-inventory/magento-module-catalog-inventory-100.3.1.0.zip", + "reference": null, + "shasum": "c7c8e7308fa130fa471cf228537506667473d982" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogInventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-inventory-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-inventory-graph-ql/magento-module-catalog-inventory-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "5438ed8a7e381b27d5325801f87a6a844005ff08" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogInventoryGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-rule", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-rule/magento-module-catalog-rule-101.1.1.0.zip", + "reference": null, + "shasum": "9892c5ab997236ed1611d9a02ea9a5be925475d6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-rule": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-rule-sample-data": "Sample Data version: 100.3.*", + "magento/module-import-export": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogRule\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-rule-configurable", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-rule-configurable/magento-module-catalog-rule-configurable-100.3.1.0.zip", + "reference": null, + "shasum": "0281e9723bb534ba2e12a55ae11260f6904485d6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-rule": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogRuleConfigurable\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-search", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-search/magento-module-catalog-search-101.0.1.0.zip", + "reference": null, + "shasum": "933c002006e94c91b14203178d694acbe3308f86" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-indexer": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogSearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Catalog search" + }, + { + "name": "magento/module-catalog-url-rewrite", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-url-rewrite/magento-module-catalog-url-rewrite-100.3.1.0.zip", + "reference": null, + "shasum": "7a978d3ff25ffebd252182269ecd18039159af70" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-url-rewrite": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogUrlRewrite\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-url-rewrite-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-url-rewrite-graph-ql/magento-module-catalog-url-rewrite-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "408be2e9c2c72d92f43764bfeeedd0063538fc23" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-url-rewrite-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogUrlRewriteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-catalog-widget", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-catalog-widget/magento-module-catalog-widget-100.3.1.0.zip", + "reference": null, + "shasum": "5ff1f431ea8c9453e632e3892afc50f07f45f5a6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-rule": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CatalogWidget\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-checkout", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-checkout/magento-module-checkout-100.3.1.0.zip", + "reference": null, + "shasum": "259dfe67c0b4d6dc00746ac7f004999c58f1fded" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-msrp": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cookie": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Checkout\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-checkout-agreements", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-checkout-agreements/magento-module-checkout-agreements-100.3.1.0.zip", + "reference": null, + "shasum": "fe21cdbe902b50a634df92ebe4bac90967140671" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CheckoutAgreements\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms", + "version": "103.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms/magento-module-cms-103.0.1.0.zip", + "reference": null, + "shasum": "32b4db597a118386cfe5619f0a39129ab6f28e06" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-email": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-variable": "100.3.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cms-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Cms\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms-graph-ql/magento-module-cms-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "fae2f46721d225970beeb9e1cb26eff1dac6ad7f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*", + "magento/module-store-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CmsGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms-url-rewrite", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms-url-rewrite/magento-module-cms-url-rewrite-100.3.1.0.zip", + "reference": null, + "shasum": "66b9ca23c0af7c8387cfb24028128a64bf3337f4" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CmsUrlRewrite\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cms-url-rewrite-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cms-url-rewrite-graph-ql/magento-module-cms-url-rewrite-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "3b58ec81afb10bbd30a2e011f887635b69803783" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite-graph-ql": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-cms-url-rewrite": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CmsUrlRewriteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-config", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-config/magento-module-config-101.1.1.0.zip", + "reference": null, + "shasum": "9458355eb5e383f148fbf503fe75d40d02de60b4" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cron": "100.3.*", + "magento/module-deploy": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-email": "101.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Config\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-import-export/magento-module-configurable-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "ac89ef960f75a7fcdf635dc3691366f7b0f41550" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-product", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-product/magento-module-configurable-product-100.3.1.0.zip", + "reference": null, + "shasum": "2f0f6c53b969b8b4378e91933ba2fa129fd0763c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-configurable-sample-data": "Sample Data version: 100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-product-links-sample-data": "Sample Data version: 100.3.*", + "magento/module-product-video": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-product-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-product-graph-ql/magento-module-configurable-product-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "6cf1902c260aa70630b96b806a49844b42136b9c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-configurable-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableProductGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-configurable-product-sales", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-configurable-product-sales/magento-module-configurable-product-sales-100.3.1.0.zip", + "reference": null, + "shasum": "ab8e7350ef1fdc6e55f2dfd708d095560afe9d5b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-configurable-product": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ConfigurableProductSales\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-contact", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-contact/magento-module-contact-100.3.1.0.zip", + "reference": null, + "shasum": "4aed3599fdc7f885086726076d52e4b800b3d0ec" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Contact\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cookie", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cookie/magento-module-cookie-100.3.1.0.zip", + "reference": null, + "shasum": "2b52880fe617d8e17746b8c637f56303063f54d0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-backend": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Cookie\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-cron", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-cron/magento-module-cron-100.3.1.0.zip", + "reference": null, + "shasum": "953c6de628fbf6c2c02943c9fb14df9c384498c6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Cron\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-currency-symbol", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-currency-symbol/magento-module-currency-symbol-100.3.1.0.zip", + "reference": null, + "shasum": "5967df5328174a24f59bdad5cc8e7a825878b195" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CurrencySymbol\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer/magento-module-customer-102.0.1.0.zip", + "reference": null, + "shasum": "9f99c836860ea853b7803e34c40f0874019f2a71" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-integration": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-review": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cookie": "100.3.*", + "magento/module-customer-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Customer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer-analytics/magento-module-customer-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "6a055c7b8b46eb899cd5161a1ecc0874e576f3cd" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-customer": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer-graph-ql/magento-module-customer-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "127e9dfe4e63721218264c9046272f43ddce13de" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-integration": "100.3.*", + "magento/module-newsletter": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-customer-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-customer-import-export/magento-module-customer-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "f1cdc6d8fe40bb058e76a0a0641230769a59a774" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\CustomerImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-deploy", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-deploy/magento-module-deploy-100.3.1.0.zip", + "reference": null, + "shasum": "40006c50c2e0d0ee9d17aebb98cc12e9b76a59f9" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "cli_commands.php", + "registration.php" + ], + "psr-4": { + "Magento\\Deploy\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-developer", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-developer/magento-module-developer-100.3.1.0.zip", + "reference": null, + "shasum": "007a40f6eaceb427b1a9f24f102bb1c5268c97e0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Developer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-dhl", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-dhl/magento-module-dhl-100.3.1.0.zip", + "reference": null, + "shasum": "a54951a456d9ae56103fcac8a342fc8104f433e2" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Dhl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-directory", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-directory/magento-module-directory-100.3.1.0.zip", + "reference": null, + "shasum": "401fd817778dcfb8b7091ede60e3b0bb99267051" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Directory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-directory-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-directory-graph-ql/magento-module-directory-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "1d9d2307d514ea00d5a8a66cf0556d83986c6189" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-directory": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DirectoryGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-downloadable", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-downloadable/magento-module-downloadable-100.3.1.0.zip", + "reference": null, + "shasum": "c3f2cd868754a23af542b2b19d72c4c4e506c618" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-downloadable-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Downloadable\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-downloadable-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-downloadable-graph-ql/magento-module-downloadable-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "6324aa9e2f9ba1957778b509b7dcfa7662eb7488" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-downloadable": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DownloadableGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-downloadable-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-downloadable-import-export/magento-module-downloadable-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "1d8ddfaabe5b6a7a5e5792f09737c0685916417c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-import-export": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\DownloadableImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-eav", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-eav/magento-module-eav-102.0.1.0.zip", + "reference": null, + "shasum": "a28509b94e703c3002eeb3238bf3c5eb35b90d5d" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Eav\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-eav-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-eav-graph-ql/magento-module-eav-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "66edb69cdfbce0784166e7f83bf3ecc8adf7ae0e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-eav": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\EavGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-elasticsearch", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-elasticsearch/magento-module-elasticsearch-100.3.1.0.zip", + "reference": null, + "shasum": "ed1da1137848560dde1a85f0f54dc2fac262359e" + }, + "require": { + "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1", + "magento/framework": "102.0.*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Elasticsearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-elasticsearch-6", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-elasticsearch-6/magento-module-elasticsearch-6-100.3.0.0.zip", + "reference": null, + "shasum": "a9da3243900390ad163efc7969b07116d2eb793f" + }, + "require": { + "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1", + "magento/framework": "102.0.*", + "magento/module-advanced-search": "100.3.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-elasticsearch": "100.3.*", + "magento/module-search": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Elasticsearch6\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-email", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-email/magento-module-email-101.0.1.0.zip", + "reference": null, + "shasum": "ebcc5912a5e51f97b8c393638d00ddfcf2f73731" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-variable": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Email\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-encryption-key", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-encryption-key/magento-module-encryption-key-100.3.1.0.zip", + "reference": null, + "shasum": "099f36ac60c8226e0c3c1485d29d336c44744dde" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\EncryptionKey\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-fedex", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-fedex/magento-module-fedex-100.3.1.0.zip", + "reference": null, + "shasum": "1840c2272127aba6e51599aa2f751c3d250aa1ef" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Fedex\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-gift-message", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-gift-message/magento-module-gift-message-100.3.1.0.zip", + "reference": null, + "shasum": "b94369cb227d47c934982c8feb06856892c999af" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-multishipping": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GiftMessage\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-google-adwords", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-google-adwords/magento-module-google-adwords-100.3.1.0.zip", + "reference": null, + "shasum": "6302122da3e9d4084e128ea1a13282bd92ca503a" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GoogleAdwords\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-google-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-google-analytics/magento-module-google-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "f87431addf8245441f53dc88bcb1df6bf9a2b95f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-cookie": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GoogleAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-google-optimizer", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-google-optimizer/magento-module-google-optimizer-100.3.1.0.zip", + "reference": null, + "shasum": "5239b8174777bdf3fac9f72aad27a604b3febdbb" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-cms": "103.0.*", + "magento/module-google-analytics": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GoogleOptimizer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-graph-ql/magento-module-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "ccb0cfb89c1acbb09c88e01b2c70e924e62a19ce" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-catalog-inventory", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-catalog-inventory/magento-module-grouped-catalog-inventory-100.3.0.0.zip", + "reference": null, + "shasum": "bc0564d1cfb19b3ff7a3a45f287c5fd42749aa83" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedCatalogInventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-import-export/magento-module-grouped-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "0d3764973ae6083a9046166bb8f0456b562b638e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-import-export": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-import-export": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-product", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-product/magento-module-grouped-product-100.3.1.0.zip", + "reference": null, + "shasum": "a80950a2b6919304e818ea52e5bbbd450f272130" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-msrp": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-grouped-product-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-grouped-product-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-grouped-product-graph-ql/magento-module-grouped-product-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "4ec0716ff30b242c05ea435ddbd43a4c82802a77" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\GroupedProductGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-import-export/magento-module-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "3e09156751856fd6a7d96486687c5b56347672c2" + }, + "require": { + "ext-ctype": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-indexer", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-indexer/magento-module-indexer-100.3.1.0.zip", + "reference": null, + "shasum": "bdd64582681713f6836e03916fbd5f88754480e5" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Indexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-instant-purchase", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-instant-purchase/magento-module-instant-purchase-100.3.1.0.zip", + "reference": null, + "shasum": "6a831727392f922a7af24ee282db3d8c0201f7db" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-vault": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InstantPurchase\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-integration", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-integration/magento-module-integration-100.3.1.0.zip", + "reference": null, + "shasum": "416802c817152d1ceac6c1dd16162f08274f5ee6" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Integration\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory/magento-module-inventory-1.0.4.0.zip", + "reference": null, + "shasum": "ce21405c9662b13edd131a3d52c562160f4d9f52" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Inventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-admin-ui/magento-module-inventory-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "ccdcdf958be78bf2b73b6d8fa558c42d07b87bbf" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-directory": "*", + "magento/module-inventory-api": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-api/magento-module-inventory-api-1.0.4.0.zip", + "reference": null, + "shasum": "f6da7918669ed256fab8bcf90537a1c853abd612" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-bundle-product", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-bundle-product/magento-module-inventory-bundle-product-1.0.3.0.zip", + "reference": null, + "shasum": "395b08dcd35f14465f338a9da1cf1953a68ca327" + }, + "require": { + "magento/framework": "*", + "magento/module-bundle": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryBundleProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-bundle-product-admin-ui", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-bundle-product-admin-ui/magento-module-inventory-bundle-product-admin-ui-1.0.3.0.zip", + "reference": null, + "shasum": "295705218a4f38202a3ee913092503dc5ccb9074" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryBundleProductAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-cache", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-cache/magento-module-inventory-cache-1.0.3.0.zip", + "reference": null, + "shasum": "024f1d29d27adab967ae77e8b90ee208a06872e7" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-catalog-api": "1.0.*", + "magento/module-inventory-indexer": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog": "103.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCache\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog/magento-module-inventory-catalog-1.0.4.0.zip", + "reference": null, + "shasum": "cf9fc73a20f4d4929c67ffddc5046bcf92437c69" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-reservations-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalog\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog-admin-ui/magento-module-inventory-catalog-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "828a6c4961021129eda07527d2d25eedac0e1bfa" + }, + "require": { + "magento/framework": "*", + "magento/module-asynchronous-operations": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-admin-ui": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalogAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog-api/magento-module-inventory-catalog-api-1.0.4.0.zip", + "reference": null, + "shasum": "edc148f4419e249b37a316afefeef4b97c73bad1" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalogApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-catalog-search", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-catalog-search/magento-module-inventory-catalog-search-1.0.4.0.zip", + "reference": null, + "shasum": "cbe649fee67d9740d1cf2f3d9ce874d1a6413f76" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-search": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryCatalogSearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configurable-product", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configurable-product/magento-module-inventory-configurable-product-1.0.4.0.zip", + "reference": null, + "shasum": "8d4c12fcdaa863c47893664e38fa1ad60e90ffb8" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-configurable-product": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurableProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configurable-product-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configurable-product-admin-ui/magento-module-inventory-configurable-product-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "18dfb9d8cb702ba1d2f465cbe0a5b8b57db07207" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-configurable-product": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-admin-ui": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurableProductAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configurable-product-indexer", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configurable-product-indexer/magento-module-inventory-configurable-product-indexer-1.0.3.0.zip", + "reference": null, + "shasum": "540f1a1687b90b81168dca0f463fe12dae5e4e84" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-inventory-api": "1.0.*", + "magento/module-inventory-catalog-api": "1.0.*", + "magento/module-inventory-indexer": "1.0.*", + "magento/module-inventory-multi-dimensional-indexer-api": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurableProductIndexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configuration", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configuration/magento-module-inventory-configuration-1.0.4.0.zip", + "reference": null, + "shasum": "a9869aeddeede17ba0e442a989b809f86f0a86fe" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfiguration\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-configuration-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-configuration-api/magento-module-inventory-configuration-api-1.0.4.0.zip", + "reference": null, + "shasum": "d091e7523a1d18099360d9e49f86a3e04dba71b4" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryConfigurationApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-distance-based-source-selection", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-distance-based-source-selection/magento-module-inventory-distance-based-source-selection-1.0.0.0.zip", + "reference": null, + "shasum": "c9b93cdfd600a3b493753313ac617dfc0ce8f19c" + }, + "require": { + "magento/framework": "*", + "magento/module-config": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-distance-based-source-selection-api": "*", + "magento/module-inventory-source-selection-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryDistanceBasedSourceSelection\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-distance-based-source-selection-admin-ui", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-distance-based-source-selection-admin-ui/magento-module-inventory-distance-based-source-selection-admin-ui-1.0.0.0.zip", + "reference": null, + "shasum": "b75ca632a07386dc60c5572e353fe4ba47e22d01" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryDistanceBasedSourceSelectionAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-distance-based-source-selection-api", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-distance-based-source-selection-api/magento-module-inventory-distance-based-source-selection-api-1.0.0.0.zip", + "reference": null, + "shasum": "79d9c3f965d14612e95a4723000b1200d5a55b6c" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-source-selection-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryDistanceBasedSourceSelectionApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-elasticsearch", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-elasticsearch/magento-module-inventory-elasticsearch-1.0.0.0.zip", + "reference": null, + "shasum": "b46ff3807763c9967e60f67b155b47658387457b" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog-inventory": "*", + "magento/module-catalog-search": "*", + "magento/module-elasticsearch": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-indexer": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryElasticsearch\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-grouped-product", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-grouped-product/magento-module-inventory-grouped-product-1.0.3.0.zip", + "reference": null, + "shasum": "19c3284175d75dafd8ad97cc35e1e47a527c82da" + }, + "require": { + "magento/framework": "*", + "magento/module-grouped-product": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryGroupedProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-grouped-product-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-grouped-product-admin-ui/magento-module-inventory-grouped-product-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "d15af53f7bbdd213fdb0af1a16f0e50d968c7240" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-grouped-product": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-admin-ui": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory-configuration-api": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryGroupedProductAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-grouped-product-indexer", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-grouped-product-indexer/magento-module-inventory-grouped-product-indexer-1.0.3.0.zip", + "reference": null, + "shasum": "f8aeffd329e1b556ebf1dfcb3ce23103ae724980" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-grouped-product": "*", + "magento/module-inventory-api": "1.0.*", + "magento/module-inventory-catalog-api": "1.0.*", + "magento/module-inventory-indexer": "1.0.*", + "magento/module-inventory-multi-dimensional-indexer-api": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-inventory": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryGroupedProductIndexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-import-export", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-import-export/magento-module-inventory-import-export-1.0.4.0.zip", + "reference": null, + "shasum": "deefee73fd3c2bb9132e102cc272e4e2dce71088" + }, + "require": { + "magento/framework": "*", + "magento/module-eav": "*", + "magento/module-import-export": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-import-export": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-indexer", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-indexer/magento-module-inventory-indexer-1.0.4.0.zip", + "reference": null, + "shasum": "61bc4572359a82e85b10d2a60a2ec15b9e917a9d" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-multi-dimensional-indexer-api": "*", + "magento/module-inventory-sales": "*", + "magento/module-inventory-sales-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog": "103.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryIndexer\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-low-quantity-notification", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-low-quantity-notification/magento-module-inventory-low-quantity-notification-1.0.4.0.zip", + "reference": null, + "shasum": "d6779810c096678fa838aff0dc1d5d4c04cb3af6" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-eav": "*", + "magento/module-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-low-quantity-notification-api": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryLowQuantityNotification\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-low-quantity-notification-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-low-quantity-notification-admin-ui/magento-module-inventory-low-quantity-notification-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "c61e759363d9cd39f6deae99ffcc2b8248831477" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-low-quantity-notification": "*", + "magento/module-inventory-low-quantity-notification-api": "*", + "magento/module-reports": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryLowQuantityNotificationAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-low-quantity-notification-api", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-low-quantity-notification-api/magento-module-inventory-low-quantity-notification-api-1.0.3.0.zip", + "reference": null, + "shasum": "08c2657ee45ff0db1ca949437d7dd2da0da956a1" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryLowQuantityNotificationApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-multi-dimensional-indexer-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-multi-dimensional-indexer-api/magento-module-inventory-multi-dimensional-indexer-api-1.0.4.0.zip", + "reference": null, + "shasum": "630ab27e5d236a5f0d061a76f80656a248c36000" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryMultiDimensionalIndexerApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-product-alert", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-product-alert/magento-module-inventory-product-alert-1.0.4.0.zip", + "reference": null, + "shasum": "e21d973d4e58ffa137824b1856cb4ea028fb5135" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-product-alert": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-product-alert": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryProductAlert\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-reservations", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-reservations/magento-module-inventory-reservations-1.0.4.0.zip", + "reference": null, + "shasum": "e527a03b2f48c13cea4081da2c7261bd69c4c92d" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-reservations-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryReservations\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-reservations-api", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-reservations-api/magento-module-inventory-reservations-api-1.0.3.0.zip", + "reference": null, + "shasum": "3955de482006ccbf8d823ec28e042a69862059da" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryReservationsApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales/magento-module-inventory-sales-1.0.4.0.zip", + "reference": null, + "shasum": "d0a9a3d09d41dc3c1e7cce3a07335935ae2b7fc6" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-reservations-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-inventory-source-deduction-api": "*", + "magento/module-sales": "*", + "magento/module-sales-inventory": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "require-dev": { + "magento/module-inventory-indexer": "*" + }, + "suggest": { + "magento/module-inventory-catalog": "1.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySales\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales-admin-ui/magento-module-inventory-sales-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "13daf51ba16c09101f2574eb3dabf2221e81cb0a" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-catalog": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-admin-ui": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-store": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySalesAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales-api/magento-module-inventory-sales-api-1.0.4.0.zip", + "reference": null, + "shasum": "6b8847fc22bd04015a9fc5717dfa94f6154d14b4" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-sales": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySalesApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-sales-frontend-ui", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-sales-frontend-ui/magento-module-inventory-sales-frontend-ui-1.0.3.0.zip", + "reference": null, + "shasum": "ef1f4e1d67c0add33fa1a5b6da08bed1fd6a7b97" + }, + "require": { + "magento/framework": "*", + "magento/module-catalog-inventory": "*", + "magento/module-inventory-configuration-api": "1.0.*", + "magento/module-inventory-sales-api": "1.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySalesFrontendUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-setup-fixture-generator", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-setup-fixture-generator/magento-module-inventory-setup-fixture-generator-1.0.0.0.zip", + "reference": null, + "shasum": "207fe21748b53ad44330a5abc5dc79f1f2a24bed" + }, + "require": { + "magento/framework": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySetupFixtureGenerator\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-shipping", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-shipping/magento-module-inventory-shipping-1.0.4.0.zip", + "reference": null, + "shasum": "338a6df150d1ad1107cedba355c896b50275c431" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-catalog-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-inventory-source-deduction-api": "*", + "magento/module-inventory-source-selection-api": "*", + "magento/module-sales": "*", + "magento/module-shipping": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryShipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-shipping-admin-ui", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-shipping-admin-ui/magento-module-inventory-shipping-admin-ui-1.0.4.0.zip", + "reference": null, + "shasum": "faa48dd7930974c8fd4c792d70f9ab71fd971b78" + }, + "require": { + "magento/framework": "*", + "magento/module-backend": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-inventory-source-selection-api": "*", + "magento/module-sales": "*", + "magento/module-shipping": "*", + "magento/module-ui": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventoryShippingAdminUi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-source-deduction-api", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-source-deduction-api/magento-module-inventory-source-deduction-api-1.0.4.0.zip", + "reference": null, + "shasum": "4f3167eb248232b18483dae7cde986cb4170239e" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-configuration-api": "*", + "magento/module-inventory-sales-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySourceDeductionApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-source-selection", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-source-selection/magento-module-inventory-source-selection-1.0.4.0.zip", + "reference": null, + "shasum": "3b8465fcb2f094c82eb86226581a74f8f6a23424" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-source-selection-api": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySourceSelection\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-inventory-source-selection-api", + "version": "1.1.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-inventory-source-selection-api/magento-module-inventory-source-selection-api-1.1.0.0.zip", + "reference": null, + "shasum": "b7cf97c809075fe6fc2d95535a61c44f11440b77" + }, + "require": { + "magento/framework": "*", + "magento/module-inventory-api": "*", + "magento/module-inventory-sales-api": "*", + "magento/module-sales": "*", + "magento/module-store": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InventorySourceSelectionApi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-layered-navigation", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-layered-navigation/magento-module-layered-navigation-100.3.1.0.zip", + "reference": null, + "shasum": "32c5d1e9d21dd98adabe7083ddb3b39ab49d2bde" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\LayeredNavigation\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-marketplace", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-marketplace/magento-module-marketplace-100.3.1.0.zip", + "reference": null, + "shasum": "81415a17e166c349e179e79fe8bb891a5cb63283" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Marketplace\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-media-storage", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-media-storage/magento-module-media-storage-100.3.1.0.zip", + "reference": null, + "shasum": "dbf17a763cbf65cae32bb86fc1a0584fc51b00a0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MediaStorage\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-message-queue", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-message-queue/magento-module-message-queue-100.3.1.0.zip", + "reference": null, + "shasum": "e7a221ac13a53fc8e428bce254620f2d318ffd9c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MessageQueue\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-msrp", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-msrp/magento-module-msrp-100.3.1.0.zip", + "reference": null, + "shasum": "45cee25e493e4b43f1f10fc732f9967c62d36656" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle": "100.3.*", + "magento/module-msrp-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Msrp\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-msrp-configurable-product", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-msrp-configurable-product/magento-module-msrp-configurable-product-100.3.0.0.zip", + "reference": null, + "shasum": "cf76e419dad2243cd680b38e4d85aa48a1ea9ac9" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-msrp": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MsrpConfigurableProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-msrp-grouped-product", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-msrp-grouped-product/magento-module-msrp-grouped-product-100.3.0.0.zip", + "reference": null, + "shasum": "083080ce31393078e30cb6fb17b274c865839b0c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-msrp": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MsrpGroupedProduct\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-multishipping", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-multishipping/magento-module-multishipping-100.3.1.0.zip", + "reference": null, + "shasum": "2da74e0371ddccaca808e55dc81863dd65e3fa6f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Multishipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-mysql-mq", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-mysql-mq/magento-module-mysql-mq-100.3.1.0.zip", + "reference": null, + "shasum": "dda5a554028c56847a1ce717f92927b453708cfd" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\MysqlMq\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-new-relic-reporting", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-new-relic-reporting/magento-module-new-relic-reporting-100.3.1.0.zip", + "reference": null, + "shasum": "ee8dbe8627dbadf731cb2f8a9182971b530b54b2" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\NewRelicReporting\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-newsletter", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-newsletter/magento-module-newsletter-100.3.1.0.zip", + "reference": null, + "shasum": "fad2941ec1d5451f5adc492d298eeef4e2410fe4" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-email": "101.0.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Newsletter\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-offline-payments", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-offline-payments/magento-module-offline-payments-100.3.1.0.zip", + "reference": null, + "shasum": "1299eb55d0cabd756610f1f091f5a57b71d4813c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-payment": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\OfflinePayments\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-offline-shipping", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-offline-shipping/magento-module-offline-shipping-100.3.1.0.zip", + "reference": null, + "shasum": "2d4ae255389cf87a50ed8bfe9af7e7cabdd6e664" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout": "100.3.*", + "magento/module-offline-shipping-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\OfflineShipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-page-cache", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-page-cache/magento-module-page-cache-100.3.1.0.zip", + "reference": null, + "shasum": "4e2729548eee3283f06d3ed3bd0aac2c2c012a2f" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\PageCache\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-payment", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-payment/magento-module-payment-100.3.1.0.zip", + "reference": null, + "shasum": "3a5dc59dc2f36c28e1b84701d2deb444a1110373" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Payment\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-paypal", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-paypal/magento-module-paypal-100.3.1.0.zip", + "reference": null, + "shasum": "1c9210c8fd9354d89d580ddc2d29121f0ffc8c20" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-instant-purchase": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-vault": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-checkout-agreements": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Paypal\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-persistent", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-persistent/magento-module-persistent-100.3.1.0.zip", + "reference": null, + "shasum": "bb6e14bbf0d568563cf1dc2e4aafdedaa31709de" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-cron": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Persistent\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-product-alert", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-product-alert/magento-module-product-alert-100.3.1.0.zip", + "reference": null, + "shasum": "324a647bc52ff96f365e0be0e9628f1d36829026" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ProductAlert\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-product-video", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-product-video/magento-module-product-video-100.3.1.0.zip", + "reference": null, + "shasum": "c6cb19d8f73d44399dde39e72d79bf6b7ff8e029" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ProductVideo\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Add Video to Products" + }, + { + "name": "magento/module-quote", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-quote/magento-module-quote-101.1.1.0.zip", + "reference": null, + "shasum": "e2b39264ded8af41839229e7ce6dc1e13f41dab1" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-webapi": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Quote\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-quote-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-quote-analytics/magento-module-quote-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "04b120e37bfe9d985dcf1b1eb90b5d8044dd4d77" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-quote": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\QuoteAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-quote-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-quote-graph-ql/magento-module-quote-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "232b4284ed0ccd26c715fcc23a089b3a011c5639" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-customer-graph-ql": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\QuoteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-release-notification", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-release-notification/magento-module-release-notification-100.3.1.0.zip", + "reference": null, + "shasum": "b6f40a4a0a6328fdf5dde3dd18d702190d5c2347" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ReleaseNotification\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-reports", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-reports/magento-module-reports-100.3.1.0.zip", + "reference": null, + "shasum": "56df5dc26d25298d608a2e130073aa46c51d7a45" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-downloadable": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-quote": "101.1.*", + "magento/module-review": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Reports\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-require-js", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-require-js/magento-module-require-js-100.3.1.0.zip", + "reference": null, + "shasum": "348fa995170de7f4d508a600d8ca2b73cddfc17f" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\RequireJs\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-review", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-review/magento-module-review-100.3.1.0.zip", + "reference": null, + "shasum": "5d226e5ddf781537a69ef6bf648cf2be7621d0a8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-newsletter": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cookie": "100.3.*", + "magento/module-review-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Review\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-review-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-review-analytics/magento-module-review-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "eb26fb256b43d77b4da00e16d9e76d0cb7078c96" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-review": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ReviewAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-robots", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-robots/magento-module-robots-101.0.1.0.zip", + "reference": null, + "shasum": "52129625db7928a4723a47fed097c843a27663d8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-theme": "101.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Robots\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-rss", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-rss/magento-module-rss-100.3.1.0.zip", + "reference": null, + "shasum": "1f792762c259e85590143df883323534611dc299" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Rss\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-rule", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-rule/magento-module-rule-100.3.1.0.zip", + "reference": null, + "shasum": "2eec15c18c6ab5983a61e768f114c6dc96ec883d" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Rule\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales", + "version": "102.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales/magento-module-sales-102.0.1.0.zip", + "reference": null, + "shasum": "f7e58a0a0bcb551e96dde31c9de350e20e4d7ff5" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-bundle": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-gift-message": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-sales-rule": "101.1.*", + "magento/module-sales-sequence": "100.3.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-sales-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Sales\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-analytics/magento-module-sales-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "f2d5d1dd165e3ea17667a5eaa105bd4757ac5844" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-sales": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-graph-ql/magento-module-sales-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "e10599dcbd5dd7866bfdaf8af7065577ce1e7ebc" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-customer-graph-ql": "100.3.*", + "magento/module-sales": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-inventory", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-inventory/magento-module-sales-inventory-100.3.1.0.zip", + "reference": null, + "shasum": "6982aab2739a7ec5df5b25b5cac28dc70fea4c6b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesInventory\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-rule", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-rule/magento-module-sales-rule-101.1.1.0.zip", + "reference": null, + "shasum": "043d64f9e5a5b1564473532a1599c2fd58deed6e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-rule": "101.1.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-rule": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-sales-rule-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesRule\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sales-sequence", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sales-sequence/magento-module-sales-sequence-100.3.1.0.zip", + "reference": null, + "shasum": "d045268eeef55a7d66f98c1ec77569ccc52b6683" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SalesSequence\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-sample-data", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sample-data/magento-module-sample-data-100.3.1.0.zip", + "reference": null, + "shasum": "da0800d6ed74b8956ef00ee080230a18f048ed8f" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/sample-data-media": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "cli_commands.php", + "registration.php" + ], + "psr-4": { + "Magento\\SampleData\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Sample Data fixtures" + }, + { + "name": "magento/module-search", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-search/magento-module-search-101.0.1.0.zip", + "reference": null, + "shasum": "a9486668c87a5ba4bb4aa6c9f8060637f7027ca1" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-search": "101.0.*", + "magento/module-reports": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Search\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-security", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-security/magento-module-security-100.3.1.0.zip", + "reference": null, + "shasum": "17018cf2303e60994bf28daa52fa6f7180f182da" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "102.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Security\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Security management module" + }, + { + "name": "magento/module-send-friend", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-send-friend/magento-module-send-friend-100.3.1.0.zip", + "reference": null, + "shasum": "547e26b8d3570b3f0969b9f5802725e8d8651714" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-captcha": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-customer": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SendFriend\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-send-friend-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-send-friend-graph-ql/magento-module-send-friend-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "ef5fbfcd51beb3ad8225fa03320cc45012b0bd70" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-send-friend": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SendFriendGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-shipping", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-shipping/magento-module-shipping-100.3.1.0.zip", + "reference": null, + "shasum": "dd53451df643e7d4513cb3102f182eb1f96bbc36" + }, + "require": { + "ext-gd": "*", + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-contact": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*", + "magento/module-fedex": "100.3.*", + "magento/module-ups": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Shipping\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-signifyd", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-signifyd/magento-module-signifyd-100.3.1.0.zip", + "reference": null, + "shasum": "768442b807e31bacfb5bbf914e155bac3ca88dde" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-payment": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Signifyd\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Submitting Case Entry to Signifyd on Order Creation" + }, + { + "name": "magento/module-sitemap", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-sitemap/magento-module-sitemap-100.3.1.0.zip", + "reference": null, + "shasum": "2f4535120d0551397680bdbd2365c08dd175f5f1" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-robots": "101.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Sitemap\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-store", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-store/magento-module-store-101.0.1.0.zip", + "reference": null, + "shasum": "aa4a2db8d42094f5978782138eb16e3adcf6798c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-media-storage": "100.3.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-deploy": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Store\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-store-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-store-graph-ql/magento-module-store-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "7c00e21d6f4c5c45bf2cc4bf0dd9dfdaa83ccad3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\StoreGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swagger", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swagger/magento-module-swagger-100.3.1.0.zip", + "reference": null, + "shasum": "f17474413c08f94ca5f704d9eff5b6ad268a0440" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Swagger\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swagger-webapi", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swagger-webapi/magento-module-swagger-webapi-100.3.1.0.zip", + "reference": null, + "shasum": "7e4ee0f77d30c0e358771d2815ed1065bcfea7a2" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-swagger": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwaggerWebapi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swagger-webapi-async", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swagger-webapi-async/magento-module-swagger-webapi-async-100.3.1.0.zip", + "reference": null, + "shasum": "8e47ef5ab81bf92742b100c75879871e5d356095" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-swagger": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwaggerWebapiAsync\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swatches", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swatches/magento-module-swatches-100.3.1.0.zip", + "reference": null, + "shasum": "e8f12b8f0935403f693e78d60633da666162cb5a" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-page-cache": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-layered-navigation": "100.3.*", + "magento/module-swatches-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Swatches\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Add Swatches to Products" + }, + { + "name": "magento/module-swatches-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swatches-graph-ql/magento-module-swatches-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "81636dcec8824fd41c6287203e25dd850afab20b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-swatches": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwatchesGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-swatches-layered-navigation", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-swatches-layered-navigation/magento-module-swatches-layered-navigation-100.3.1.0.zip", + "reference": null, + "shasum": "0ba7397b12656fa9db3faee319ca64e65504cffa" + }, + "require": { + "magento/framework": "102.0.*", + "magento/magento-composer-installer": "*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\SwatchesLayeredNavigation\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tax", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tax/magento-module-tax-100.3.1.0.zip", + "reference": null, + "shasum": "ec9848f312abb6c03393aae776b086b1d4177ab0" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-reports": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-tax-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Tax\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tax-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tax-graph-ql/magento-module-tax-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "eabd499aaf645826ac644dce948bba133d76aaf0" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-tax": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\TaxGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tax-import-export", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tax-import-export/magento-module-tax-import-export-100.3.1.0.zip", + "reference": null, + "shasum": "8027abc153f14886965525539f873c8a4120cf8c" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-directory": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\TaxImportExport\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-theme", + "version": "101.0.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-theme/magento-module-theme-101.0.1.0.zip", + "reference": null, + "shasum": "e6fed3b1a3a3f21452f151e1eb2aa36510cb1b50" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-cms": "103.0.*", + "magento/module-config": "101.1.*", + "magento/module-customer": "102.0.*", + "magento/module-eav": "102.0.*", + "magento/module-media-storage": "100.3.*", + "magento/module-require-js": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-deploy": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-theme-sample-data": "Sample Data version: 100.3.*", + "magento/module-translation": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Theme\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-theme-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-theme-graph-ql/magento-module-theme-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "cd9d5fd79db5547f5a5b1e4761b901451b2fc013" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-store-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ThemeGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-tinymce-3", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-tinymce-3/magento-module-tinymce-3-100.3.1.0.zip", + "reference": null, + "shasum": "5153d30d5f5e5a8d99182a65dce142569f22861e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-ui": "101.1.*", + "magento/module-variable": "100.3.*", + "magento/module-widget": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-cms": "103.0.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Tinymce3\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-translation", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-translation/magento-module-translation-100.3.1.0.zip", + "reference": null, + "shasum": "dbc9a6bd9d8aa234c5809103e6ac93372fa33c81" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-developer": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-deploy": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Translation\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-ui", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-ui/magento-module-ui-101.1.1.0.zip", + "reference": null, + "shasum": "fc1e9663747d2f40f9a3278983598d9098ffca1a" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-eav": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-user": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Ui\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-ups", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-ups/magento-module-ups-100.3.1.0.zip", + "reference": null, + "shasum": "34c0f3f7c03bd533aff334fb88750fc109a71d1d" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-config": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Ups\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-url-rewrite", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-url-rewrite/magento-module-url-rewrite-101.1.1.0.zip", + "reference": null, + "shasum": "f21c8619cec00fda18dd3dcb51cb2a4e8d451aee" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-url-rewrite": "100.3.*", + "magento/module-cms": "103.0.*", + "magento/module-cms-url-rewrite": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\UrlRewrite\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-url-rewrite-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-url-rewrite-graph-ql/magento-module-url-rewrite-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "ba563f2348277b9f06cd2f4e3118fa756f453d6e" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-url-rewrite": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-graph-ql": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\UrlRewriteGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-user", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-user/magento-module-user-101.1.1.0.zip", + "reference": null, + "shasum": "28a050491e3e447c8460f42b0f0549ad6adca190" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-email": "101.0.*", + "magento/module-integration": "100.3.*", + "magento/module-security": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\User\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-usps", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-usps/magento-module-usps-100.3.1.0.zip", + "reference": null, + "shasum": "cf9a786445d64b36c1d4bc32666213225821d84d" + }, + "require": { + "lib-libxml": "*", + "magento/framework": "102.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-config": "101.1.*", + "magento/module-directory": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-shipping": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Usps\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-variable", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-variable/magento-module-variable-100.3.1.0.zip", + "reference": null, + "shasum": "7b8faefa05dc6e563ac5663db86b86a2dc3c02e8" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-config": "101.1.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Variable\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-vault", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-vault/magento-module-vault-101.1.1.0.zip", + "reference": null, + "shasum": "c8702e4f0ec7fa9538194203be7e5bbf0bc8077b" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-payment": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Vault\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ] + }, + { + "name": "magento/module-version", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-version/magento-module-version-100.3.1.0.zip", + "reference": null, + "shasum": "f35d618be8f999ec653c83de3e364d4eea5eb796" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Version\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-webapi", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-webapi/magento-module-webapi-100.3.1.0.zip", + "reference": null, + "shasum": "9aee9870a6296462ed7b834383725b6f8cbfd8fe" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-authorization": "100.3.*", + "magento/module-backend": "101.0.*", + "magento/module-integration": "100.3.*", + "magento/module-store": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "102.0.*", + "magento/module-user": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Webapi\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-webapi-async", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-webapi-async/magento-module-webapi-async-100.3.1.0.zip", + "reference": null, + "shasum": "061d2e2ffd3476b78dedef5d078227fae7869019" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-asynchronous-operations": "100.3.*", + "magento/module-webapi": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-customer": "102.0.*", + "magento/module-user": "101.1.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WebapiAsync\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-webapi-security", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-webapi-security/magento-module-webapi-security-100.3.1.0.zip", + "reference": null, + "shasum": "ddc3201ecae4ff4fd0179fc387c69fe7af902caf" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-webapi": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WebapiSecurity\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "WebapiSecurity module provides option to loosen security on some webapi resources." + }, + { + "name": "magento/module-weee", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-weee/magento-module-weee-100.3.1.0.zip", + "reference": null, + "shasum": "665d507e1d1baad1769f91ad021a0484f811c745" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-directory": "100.3.*", + "magento/module-eav": "102.0.*", + "magento/module-page-cache": "100.3.*", + "magento/module-quote": "101.1.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-tax": "100.3.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Weee\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-weee-graph-ql", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-weee-graph-ql/magento-module-weee-graph-ql-100.3.1.0.zip", + "reference": null, + "shasum": "8cd539c61f3f52683cdf1d081d03ba1ab198da43" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-weee": "100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WeeeGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-widget", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-widget/magento-module-widget-101.1.1.0.zip", + "reference": null, + "shasum": "f7c8f6136274aee6ec623112981505475b36ea04" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-catalog": "103.0.*", + "magento/module-cms": "103.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-variable": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-widget-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Widget\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-wishlist", + "version": "101.1.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-wishlist/magento-module-wishlist-101.1.1.0.zip", + "reference": null, + "shasum": "e73a999d11356a60646ccf7bc753d8ee04ed7035" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "magento/module-captcha": "100.3.*", + "magento/module-catalog": "103.0.*", + "magento/module-catalog-inventory": "100.3.*", + "magento/module-checkout": "100.3.*", + "magento/module-customer": "102.0.*", + "magento/module-rss": "100.3.*", + "magento/module-sales": "102.0.*", + "magento/module-store": "101.0.*", + "magento/module-theme": "101.0.*", + "magento/module-ui": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "suggest": { + "magento/module-bundle": "100.3.*", + "magento/module-configurable-product": "100.3.*", + "magento/module-cookie": "100.3.*", + "magento/module-downloadable": "100.3.*", + "magento/module-grouped-product": "100.3.*", + "magento/module-wishlist-sample-data": "Sample Data version: 100.3.*" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Wishlist\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-wishlist-analytics", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-wishlist-analytics/magento-module-wishlist-analytics-100.3.1.0.zip", + "reference": null, + "shasum": "65852d6f8437a52706906c7c529398e60bf9052d" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-analytics": "100.3.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WishlistAnalytics\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/module-wishlist-graph-ql", + "version": "100.3.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-wishlist-graph-ql/magento-module-wishlist-graph-ql-100.3.0.0.zip", + "reference": null, + "shasum": "6b63731e8f68755b22f29e0b29febc8c3c374842" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-catalog-graph-ql": "100.3.*", + "magento/module-store": "101.0.*", + "magento/module-wishlist": "101.1.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\WishlistGraphQl\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/product-community-edition", + "version": "2.3.1", + "require": { + "amzn/amazon-pay-and-login-magento-2-module": "3.1.4", + "braintree/braintree_php": "3.35.0", + "colinmollenhour/cache-backend-file": "~1.4.1", + "colinmollenhour/cache-backend-redis": "1.10.6", + "colinmollenhour/credis": "1.10.0", + "colinmollenhour/php-redis-session-abstract": "~1.4.0", + "composer/composer": "^1.6", + "dotmailer/dotmailer-magento2-extension": "3.1.1", + "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1", + "ext-bcmath": "*", + "ext-ctype": "*", + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-iconv": "*", + "ext-intl": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pdo_mysql": "*", + "ext-simplexml": "*", + "ext-soap": "*", + "ext-spl": "*", + "ext-xsl": "*", + "ext-zip": "*", + "klarna/m2-payments": "7.1.0", + "lib-libxml": "*", + "magento/composer": "~1.4.0", + "magento/framework": "102.0.1", + "magento/framework-amqp": "100.3.1", + "magento/framework-bulk": "100.3.1", + "magento/framework-message-queue": "100.3.1", + "magento/inventory-composer-metapackage": "1.1.1", + "magento/language-de_de": "100.3.1", + "magento/language-en_us": "100.3.1", + "magento/language-es_es": "100.3.1", + "magento/language-fr_fr": "100.3.1", + "magento/language-nl_nl": "100.3.1", + "magento/language-pt_br": "100.3.1", + "magento/language-zh_hans_cn": "100.3.1", + "magento/magento-composer-installer": ">=0.1.11", + "magento/magento2-base": "2.3.1", + "magento/module-admin-notification": "100.3.1", + "magento/module-advanced-pricing-import-export": "100.3.1", + "magento/module-advanced-search": "100.3.1", + "magento/module-amqp": "100.3.1", + "magento/module-analytics": "100.3.1", + "magento/module-asynchronous-operations": "100.3.1", + "magento/module-authorization": "100.3.1", + "magento/module-authorizenet": "100.3.1", + "magento/module-authorizenet-acceptjs": "100.3.0", + "magento/module-backend": "101.0.1", + "magento/module-backup": "100.3.1", + "magento/module-braintree": "100.3.1", + "magento/module-bundle": "100.3.1", + "magento/module-bundle-graph-ql": "100.3.1", + "magento/module-bundle-import-export": "100.3.1", + "magento/module-cache-invalidate": "100.3.1", + "magento/module-captcha": "100.3.1", + "magento/module-catalog": "103.0.1", + "magento/module-catalog-analytics": "100.3.1", + "magento/module-catalog-graph-ql": "100.3.1", + "magento/module-catalog-import-export": "101.0.1", + "magento/module-catalog-inventory": "100.3.1", + "magento/module-catalog-inventory-graph-ql": "100.3.1", + "magento/module-catalog-rule": "101.1.1", + "magento/module-catalog-rule-configurable": "100.3.1", + "magento/module-catalog-search": "101.0.1", + "magento/module-catalog-url-rewrite": "100.3.1", + "magento/module-catalog-url-rewrite-graph-ql": "100.3.1", + "magento/module-catalog-widget": "100.3.1", + "magento/module-checkout": "100.3.1", + "magento/module-checkout-agreements": "100.3.1", + "magento/module-cms": "103.0.1", + "magento/module-cms-graph-ql": "100.3.1", + "magento/module-cms-url-rewrite": "100.3.1", + "magento/module-cms-url-rewrite-graph-ql": "100.3.1", + "magento/module-config": "101.1.1", + "magento/module-configurable-import-export": "100.3.1", + "magento/module-configurable-product": "100.3.1", + "magento/module-configurable-product-graph-ql": "100.3.1", + "magento/module-configurable-product-sales": "100.3.1", + "magento/module-contact": "100.3.1", + "magento/module-cookie": "100.3.1", + "magento/module-cron": "100.3.1", + "magento/module-currency-symbol": "100.3.1", + "magento/module-customer": "102.0.1", + "magento/module-customer-analytics": "100.3.1", + "magento/module-customer-graph-ql": "100.3.1", + "magento/module-customer-import-export": "100.3.1", + "magento/module-deploy": "100.3.1", + "magento/module-developer": "100.3.1", + "magento/module-dhl": "100.3.1", + "magento/module-directory": "100.3.1", + "magento/module-directory-graph-ql": "100.3.0", + "magento/module-downloadable": "100.3.1", + "magento/module-downloadable-graph-ql": "100.3.1", + "magento/module-downloadable-import-export": "100.3.1", + "magento/module-eav": "102.0.1", + "magento/module-eav-graph-ql": "100.3.1", + "magento/module-elasticsearch": "100.3.1", + "magento/module-elasticsearch-6": "100.3.0", + "magento/module-email": "101.0.1", + "magento/module-encryption-key": "100.3.1", + "magento/module-fedex": "100.3.1", + "magento/module-gift-message": "100.3.1", + "magento/module-google-adwords": "100.3.1", + "magento/module-google-analytics": "100.3.1", + "magento/module-google-optimizer": "100.3.1", + "magento/module-graph-ql": "100.3.1", + "magento/module-grouped-catalog-inventory": "100.3.0", + "magento/module-grouped-import-export": "100.3.1", + "magento/module-grouped-product": "100.3.1", + "magento/module-grouped-product-graph-ql": "100.3.1", + "magento/module-import-export": "100.3.1", + "magento/module-indexer": "100.3.1", + "magento/module-instant-purchase": "100.3.1", + "magento/module-integration": "100.3.1", + "magento/module-layered-navigation": "100.3.1", + "magento/module-marketplace": "100.3.1", + "magento/module-media-storage": "100.3.1", + "magento/module-message-queue": "100.3.1", + "magento/module-msrp": "100.3.1", + "magento/module-msrp-configurable-product": "100.3.0", + "magento/module-msrp-grouped-product": "100.3.0", + "magento/module-multishipping": "100.3.1", + "magento/module-mysql-mq": "100.3.1", + "magento/module-new-relic-reporting": "100.3.1", + "magento/module-newsletter": "100.3.1", + "magento/module-offline-payments": "100.3.1", + "magento/module-offline-shipping": "100.3.1", + "magento/module-page-cache": "100.3.1", + "magento/module-payment": "100.3.1", + "magento/module-paypal": "100.3.1", + "magento/module-persistent": "100.3.1", + "magento/module-product-alert": "100.3.1", + "magento/module-product-video": "100.3.1", + "magento/module-quote": "101.1.1", + "magento/module-quote-analytics": "100.3.1", + "magento/module-quote-graph-ql": "100.3.1", + "magento/module-release-notification": "100.3.1", + "magento/module-reports": "100.3.1", + "magento/module-require-js": "100.3.1", + "magento/module-review": "100.3.1", + "magento/module-review-analytics": "100.3.1", + "magento/module-robots": "101.0.1", + "magento/module-rss": "100.3.1", + "magento/module-rule": "100.3.1", + "magento/module-sales": "102.0.1", + "magento/module-sales-analytics": "100.3.1", + "magento/module-sales-graph-ql": "100.3.0", + "magento/module-sales-inventory": "100.3.1", + "magento/module-sales-rule": "101.1.1", + "magento/module-sales-sequence": "100.3.1", + "magento/module-sample-data": "100.3.1", + "magento/module-search": "101.0.1", + "magento/module-security": "100.3.1", + "magento/module-send-friend": "100.3.1", + "magento/module-send-friend-graph-ql": "100.3.0", + "magento/module-shipping": "100.3.1", + "magento/module-signifyd": "100.3.1", + "magento/module-sitemap": "100.3.1", + "magento/module-store": "101.0.1", + "magento/module-store-graph-ql": "100.3.1", + "magento/module-swagger": "100.3.1", + "magento/module-swagger-webapi": "100.3.1", + "magento/module-swagger-webapi-async": "100.3.1", + "magento/module-swatches": "100.3.1", + "magento/module-swatches-graph-ql": "100.3.1", + "magento/module-swatches-layered-navigation": "100.3.1", + "magento/module-tax": "100.3.1", + "magento/module-tax-graph-ql": "100.3.1", + "magento/module-tax-import-export": "100.3.1", + "magento/module-theme": "101.0.1", + "magento/module-theme-graph-ql": "100.3.0", + "magento/module-tinymce-3": "100.3.1", + "magento/module-translation": "100.3.1", + "magento/module-ui": "101.1.1", + "magento/module-ups": "100.3.1", + "magento/module-url-rewrite": "101.1.1", + "magento/module-url-rewrite-graph-ql": "100.3.1", + "magento/module-user": "101.1.1", + "magento/module-usps": "100.3.1", + "magento/module-variable": "100.3.1", + "magento/module-vault": "101.1.1", + "magento/module-version": "100.3.1", + "magento/module-webapi": "100.3.1", + "magento/module-webapi-async": "100.3.1", + "magento/module-webapi-security": "100.3.1", + "magento/module-weee": "100.3.1", + "magento/module-weee-graph-ql": "100.3.1", + "magento/module-widget": "101.1.1", + "magento/module-wishlist": "101.1.1", + "magento/module-wishlist-analytics": "100.3.1", + "magento/module-wishlist-graph-ql": "100.3.0", + "magento/theme-adminhtml-backend": "100.3.1", + "magento/theme-frontend-blank": "100.3.1", + "magento/theme-frontend-luma": "100.3.1", + "magento/zendframework1": "~1.14.1", + "monolog/monolog": "^1.17", + "msp/recaptcha": "2.0.2", + "msp/twofactorauth": "3.0.0", + "oyejorge/less.php": "~1.7.0", + "paragonie/sodium_compat": "^1.6", + "pelago/emogrifier": "^2.0.0", + "php": "~7.1.3||~7.2.0", + "php-amqplib/php-amqplib": "~2.7.0", + "phpseclib/mcrypt_compat": "1.0.8", + "phpseclib/phpseclib": "2.0.*", + "ramsey/uuid": "~3.8.0", + "symfony/console": "~4.1.0", + "symfony/event-dispatcher": "~4.1.0", + "symfony/process": "~4.1.0", + "tedivm/jshrink": "~1.3.0", + "temando/module-shipping-m2": "1.5.1", + "tubalmartin/cssmin": "4.1.1", + "vertex/product-magento-module": "3.1.0", + "webonyx/graphql-php": "^0.12.6", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-code": "~3.3.0", + "zendframework/zend-config": "^2.6.0", + "zendframework/zend-console": "^2.6.0", + "zendframework/zend-crypt": "^2.6.0", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-di": "^2.6.1", + "zendframework/zend-eventmanager": "^2.6.3", + "zendframework/zend-feed": "^2.9.0", + "zendframework/zend-form": "^2.10.0", + "zendframework/zend-http": "^2.6.0", + "zendframework/zend-i18n": "^2.7.3", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.1", + "zendframework/zend-mail": "^2.9.0", + "zendframework/zend-modulemanager": "^2.7", + "zendframework/zend-mvc": "~2.7.0", + "zendframework/zend-serializer": "^2.7.2", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.8", + "zendframework/zend-session": "^2.7.3", + "zendframework/zend-soap": "^2.7.0", + "zendframework/zend-stdlib": "^2.7.7", + "zendframework/zend-text": "^2.6.0", + "zendframework/zend-uri": "^2.5.1", + "zendframework/zend-validator": "^2.6.0", + "zendframework/zend-view": "~2.10.0" + }, + "type": "metapackage", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "eCommerce Platform for Growth (Community Edition)" + }, + { + "name": "magento/theme-adminhtml-backend", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/theme-adminhtml-backend/magento-theme-adminhtml-backend-100.3.1.0.zip", + "reference": null, + "shasum": "16ba686421c8f62c5adafea59b9348dc3f9f9dc1" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-theme", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/theme-frontend-blank", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/theme-frontend-blank/magento-theme-frontend-blank-100.3.1.0.zip", + "reference": null, + "shasum": "5d0c6b04a16d20899bb5b70394fe8db257832dd1" + }, + "require": { + "magento/framework": "102.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-theme", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/theme-frontend-luma", + "version": "100.3.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/theme-frontend-luma/magento-theme-frontend-luma-100.3.1.0.zip", + "reference": null, + "shasum": "4ecc9f6a9fa4dfc5be7f4dec8fc8a9535ec1f5f3" + }, + "require": { + "magento/framework": "102.0.*", + "magento/theme-frontend-blank": "100.3.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-theme", + "autoload": { + "files": [ + "registration.php" + ] + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "N/A" + }, + { + "name": "magento/zendframework1", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/magento/zf1.git", + "reference": "4df018254c70b5b998b00a8cb1a30760f831ff0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/magento/zf1/zipball/4df018254c70b5b998b00a8cb1a30760f831ff0d", + "reference": "4df018254c70b5b998b00a8cb1a30760f831ff0d", + "shasum": "" + }, + "require": { + "php": ">=5.2.11" + }, + "require-dev": { + "phpunit/dbunit": "1.3.*", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12.x-dev" + } + }, + "autoload": { + "psr-0": { + "Zend_": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "library/" + ], + "license": [ + "BSD-3-Clause" + ], + "description": "Magento Zend Framework 1", + "homepage": "http://framework.zend.com/", + "keywords": [ + "ZF1", + "framework" + ], + "time": "2018-08-09T15:03:40+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.24.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2018-11-05T09:00:11+00:00" + }, + { + "name": "msp/recaptcha", + "version": "2.0.2", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/msp/recaptcha/msp-recaptcha-2.0.2.0.zip", + "reference": null, + "shasum": "f037ce5e2b4202117adc4ec0ab93212ef31bff7e" + }, + "require": { + "google/recaptcha": "^1.1", + "magento/magento-composer-installer": "*", + "php": "^7.0|^7.1|^7.2" + }, + "suggest": { + "msp/security-suite": "Full MageSpecialist Security Suite" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "MSP\\ReCaptcha\\": "" + } + }, + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Riccardo Tempesta", + "email": "riccardo.tempesta@magespecialist.it" + } + ], + "description": "Google reCaptcha integration for Magento2 - Member of MageSpecialist SecuritySuite" + }, + { + "name": "msp/twofactorauth", + "version": "3.0.0", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/msp/twofactorauth/msp-twofactorauth-3.0.0.0.zip", + "reference": null, + "shasum": "ba56d984ae834a8e87a76aed81bcaf6fd6d811b1" + }, + "require": { + "christian-riesen/base32": "^1.3", + "donatj/phpuseragentparser": "~0.7", + "endroid/qr-code": "^2.5", + "magento/magento-composer-installer": "*", + "php": "^7.0|^7.1|^7.2", + "spomky-labs/otphp": "~8.3", + "yubico/u2flib-server": "^1.0" + }, + "suggest": { + "msp/security-suite": "Full MageSpecialist Security Suite" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "MSP\\TwoFactorAuth\\": "" + } + }, + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Riccardo Tempesta", + "email": "riccardo.tempesta@magespecialist.it" + } + ], + "description": "Two Factor Authentication module for Magento2 - Member of MageSpecialist SecuritySuite" + }, + { + "name": "myclabs/php-enum", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "32c4202886c51fbe5cc3a7c34ec5c9a4a790345e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/32c4202886c51fbe5cc3a7c34ec5c9a4a790345e", + "reference": "32c4202886c51fbe5cc3a7c34ec5c9a4a790345e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2019-02-04T21:18:49+00:00" + }, + { + "name": "oyejorge/less.php", + "version": "v1.7.0.14", + "source": { + "type": "git", + "url": "https://github.com/oyejorge/less.php.git", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oyejorge/less.php/zipball/42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "reference": "42925c5a01a07d67ca7e82dfc8fb31814d557bc9", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.24" + }, + "bin": [ + "bin/lessc" + ], + "type": "library", + "autoload": { + "psr-0": { + "Less": "lib/" + }, + "classmap": [ + "lessc.inc.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin Jantošovič", + "homepage": "https://github.com/Mordred" + }, + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + } + ], + "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", + "homepage": "http://lessphp.gpeasy.com", + "keywords": [ + "css", + "less", + "less.js", + "lesscss", + "php", + "stylesheet" + ], + "time": "2017-03-28T22:19:25+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.2.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/55af0dc01992b4d0da7f6372e2eac097bbbaffdb", + "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7", + "vimeo/psalm": "^1|^2" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "time": "2019-01-03T20:26:31+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "paragonie/sodium_compat", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "87125d5b265f98c4d1b8d83a1f0726607c229421" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/87125d5b265f98c4d1b8d83a1f0726607c229421", + "reference": "87125d5b265f98c4d1b8d83a1f0726607c229421", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "time": "2019-03-20T17:19:05+00:00" + }, + { + "name": "pelago/emogrifier", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/emogrifier.git", + "reference": "8ee7fb5ad772915451ed3415c1992bd3697d4983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/8ee7fb5ad772915451ed3415c1992bd3697d4983", + "reference": "8ee7fb5ad772915451ed3415c1992bd3697d4983", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0", + "symfony/css-selector": "^3.4.0 || ^4.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2.0", + "phpmd/phpmd": "^2.6.0", + "phpunit/phpunit": "^4.8.0", + "squizlabs/php_codesniffer": "^3.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Pelago\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Reeve", + "email": "jreeve@pelagodesign.com" + }, + { + "name": "Cameron Brooks" + }, + { + "name": "Jaime Prado" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Zoli Szabó", + "email": "zoli.szabo+github@gmail.com" + }, + { + "name": "Jake Hotson", + "email": "jake@qzdesign.co.uk" + } + ], + "description": "Converts CSS styles into inline style attributes in your HTML code", + "homepage": "https://www.myintervals.com/emogrifier.php", + "keywords": [ + "css", + "email", + "pre-processing" + ], + "time": "2018-12-10T10:36:30+00:00" + }, + { + "name": "php-amqplib/php-amqplib", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/php-amqplib/php-amqplib.git", + "reference": "a8ba54bd35b973fc6861e4c2e105f71e9e95f43f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/a8ba54bd35b973fc6861e4c2e105f71e9e95f43f", + "reference": "a8ba54bd35b973fc6861e4c2e105f71e9e95f43f", + "shasum": "" + }, + "require": { + "ext-bcmath": "*", + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "replace": { + "videlalvaro/php-amqplib": "self.version" + }, + "require-dev": { + "phpdocumentor/phpdocumentor": "^2.9", + "phpunit/phpunit": "^4.8", + "scrutinizer/ocular": "^1.1", + "squizlabs/php_codesniffer": "^2.5" + }, + "suggest": { + "ext-sockets": "Use AMQPSocketConnection" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpAmqpLib\\": "PhpAmqpLib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Alvaro Videla", + "role": "Original Maintainer" + }, + { + "name": "John Kelly", + "email": "johnmkelly86@gmail.com", + "role": "Maintainer" + }, + { + "name": "Raúl Araya", + "email": "nubeiro@gmail.com", + "role": "Maintainer" + } + ], + "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.", + "homepage": "https://github.com/php-amqplib/php-amqplib/", + "keywords": [ + "message", + "queue", + "rabbitmq" + ], + "time": "2018-04-30T03:54:54+00:00" + }, + { + "name": "phpseclib/mcrypt_compat", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/mcrypt_compat.git", + "reference": "f74c7b1897b62f08f268184b8bb98d9d9ab723b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/mcrypt_compat/zipball/f74c7b1897b62f08f268184b8bb98d9d9ab723b0", + "reference": "f74c7b1897b62f08f268184b8bb98d9d9ab723b0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpseclib/phpseclib": ">=2.0.11 <3.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.7|^6.0" + }, + "suggest": { + "ext-openssl": "Will enable faster cryptographic operations" + }, + "type": "library", + "autoload": { + "files": [ + "lib/mcrypt.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "homepage": "http://phpseclib.sourceforge.net" + } + ], + "description": "PHP 7.1 polyfill for the mcrypt extension from PHP <= 7.0", + "keywords": [ + "cryptograpy", + "encryption", + "mcrypt" + ], + "time": "2018-08-22T03:11:43+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.15", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "11cf67cf78dc4acb18dc9149a57be4aee5036ce0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/11cf67cf78dc4acb18dc9149a57be4aee5036ce0", + "reference": "11cf67cf78dc4acb18dc9149a57be4aee5036ce0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2019-03-10T16:53:45+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" + }, + { + "name": "ramsey/uuid", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2018-07-19T23:38:55+00:00" + }, + { + "name": "react/promise", + "version": "v2.7.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2019-01-07T21:25:54+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" + }, + { + "name": "spomky-labs/otphp", + "version": "v8.3.3", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "eb14442699ae6470b29ffd89238a9ccfb9f20788" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/eb14442699ae6470b29ffd89238a9ccfb9f20788", + "reference": "eb14442699ae6470b29ffd89238a9ccfb9f20788", + "shasum": "" + }, + "require": { + "beberlei/assert": "^2.4", + "paragonie/constant_time_encoding": "^1.0|^2.0", + "paragonie/random_compat": ">=2", + "php": "^5.5|^7.0", + "symfony/polyfill-mbstring": "^1.1", + "symfony/polyfill-php56": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "time": "2018-09-13T19:25:26+00:00" + }, + { + "name": "symfony/console", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9e87c798f67dc9fceeb4f3d57847b52d945d1a02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9e87c798f67dc9fceeb4f3d57847b52d945d1a02", + "reference": "9e87c798f67dc9fceeb4f3d57847b52d945d1a02", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2019-01-25T14:34:37+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "48eddf66950fa57996e1be4a55916d65c10c604a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a", + "reference": "48eddf66950fa57996e1be4a55916d65c10c604a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T20:31:39+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "51be1b61dfe04d64a260223f2b81475fa8066b97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/51be1b61dfe04d64a260223f2b81475fa8066b97", + "reference": "51be1b61dfe04d64a260223f2b81475fa8066b97", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T18:35:49+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e16b9e471703b2c60b95f14d31c1239f68f11601", + "reference": "e16b9e471703b2c60b95f14d31c1239f68f11601", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2019-02-07T11:40:08+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/267b7002c1b70ea80db0833c3afe05f0fbde580a", + "reference": "267b7002c1b70ea80db0833c3afe05f0fbde580a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:42:05+00:00" + }, + { + "name": "symfony/inflector", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "275e54941a4f17a471c68d2a00e2513fc1fd4a78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/275e54941a4f17a471c68d2a00e2513fc1fd4a78", + "reference": "275e54941a4f17a471c68d2a00e2513fc1fd4a78", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "time": "2019-01-16T20:31:39+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "3896e5a7d06fd15fa4947694c8dcdd371ff147d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3896e5a7d06fd15fa4947694c8dcdd371ff147d1", + "reference": "3896e5a7d06fd15fa4947694c8dcdd371ff147d1", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2019-02-23T15:17:42+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "82ebae02209c21113908c229e9883c419720738a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "backendtea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/f4dddbc5c3471e1b700a147a20ae17cdb72dbe42", + "reference": "f4dddbc5c3471e1b700a147a20ae17cdb72dbe42", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "b46c6cae28a3106735323f00a0c38eccf2328897" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/b46c6cae28a3106735323f00a0c38eccf2328897", + "reference": "b46c6cae28a3106735323f00a0c38eccf2328897", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2019-02-08T14:16:39+00:00" + }, + { + "name": "symfony/process", + "version": "v4.1.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "72d838aafaa7c790330fe362b9cecec362c64629" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/72d838aafaa7c790330fe362b9cecec362c64629", + "reference": "72d838aafaa7c790330fe362b9cecec362c64629", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T19:07:26+00:00" + }, + { + "name": "symfony/property-access", + "version": "v4.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "5440dd2b5373073beee051bd978b58a0f543b192" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/5440dd2b5373073beee051bd978b58a0f543b192", + "reference": "5440dd2b5373073beee051bd978b58a0f543b192", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/inflector": "~3.4|~4.0" + }, + "require-dev": { + "symfony/cache": "~3.4|~4.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "time": "2019-03-04T09:16:25+00:00" + }, + { + "name": "tedivm/jshrink", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/tedious/JShrink.git", + "reference": "21254058dc3ce6aba6bef458cff4bfa25cf8b198" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tedious/JShrink/zipball/21254058dc3ce6aba6bef458cff4bfa25cf8b198", + "reference": "21254058dc3ce6aba6bef458cff4bfa25cf8b198", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.8", + "php-coveralls/php-coveralls": "^1.1.0", + "phpunit/phpunit": "^6" + }, + "type": "library", + "autoload": { + "psr-0": { + "JShrink": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Robert Hafner", + "email": "tedivm@tedivm.com" + } + ], + "description": "Javascript Minifier built in PHP", + "homepage": "http://github.com/tedious/JShrink", + "keywords": [ + "javascript", + "minifier" + ], + "time": "2018-09-16T00:02:51+00:00" + }, + { + "name": "temando/module-shipping-m2", + "version": "1.5.1", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/temando/module-shipping-m2/temando-module-shipping-m2-1.5.1.0.zip", + "reference": null, + "shasum": "7fb7a9164d6bc4a17e9b8869ddbc8c5f79106905" + }, + "require": { + "ext-iconv": "*", + "ext-intl": "*", + "ext-json": "*", + "magento/framework": "^102.0.0", + "magento/module-backend": "^101.0.0", + "magento/module-catalog": "^103.0.0", + "magento/module-checkout": "^100.3.0", + "magento/module-config": "^101.1.0||^102.0.0", + "magento/module-customer": "^102.0.0", + "magento/module-directory": "^100.3.0", + "magento/module-eav": "^102.0.0", + "magento/module-email": "^101.0.0", + "magento/module-integration": "^100.3.0", + "magento/module-multishipping": "^100.3.0", + "magento/module-payment": "^100.3.0", + "magento/module-quote": "^101.1.0", + "magento/module-sales": "^102.0.0", + "magento/module-security": "^100.3.0", + "magento/module-shipping": "^100.3.0", + "magento/module-store": "^101.0.0", + "magento/module-tax": "^100.3.0", + "magento/module-ui": "^101.1.0", + "monolog/monolog": "^1.17.0", + "php": "~7.1.3||~7.2.0", + "psr/log": "~1.0", + "zendframework/zend-barcode": "^2.7.0", + "zendframework/zend-http": "^2.6.0" + }, + "suggest": { + "magento/module-rma": "^101.1.0", + "magento/module-scalable-checkout": "^100.3.0", + "magento/module-scalable-oms": "^100.3.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Temando\\Shipping\\": "" + } + }, + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christoph Aßmann", + "email": "christoph.assmann@netresearch.de", + "homepage": "https://www.netresearch.de/", + "role": "Developer" + } + ], + "description": "Temando multi-carrier shipping extension for Magento 2" + }, + { + "name": "true/punycode", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/true/php-punycode.git", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.7", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "TrueBV\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Renan Gonçalves", + "email": "renan.saddam@gmail.com" + } + ], + "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)", + "homepage": "https://github.com/true/php-punycode", + "keywords": [ + "idna", + "punycode" + ], + "time": "2016-11-16T10:37:54+00:00" + }, + { + "name": "tubalmartin/cssmin", + "version": "v4.1.1", + "source": { + "type": "git", + "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", + "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/3cbf557f4079d83a06f9c3ff9b957c022d7805cf", + "reference": "3cbf557f4079d83a06f9c3ff9b957c022d7805cf", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.3.2" + }, + "require-dev": { + "cogpowered/finediff": "0.3.*", + "phpunit/phpunit": "4.8.*" + }, + "bin": [ + "cssmin" + ], + "type": "library", + "autoload": { + "psr-4": { + "tubalmartin\\CssMin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Túbal Martín", + "homepage": "http://tubalmartin.me/" + } + ], + "description": "A PHP port of the YUI CSS compressor", + "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", + "keywords": [ + "compress", + "compressor", + "css", + "cssmin", + "minify", + "yui" ], - "description": "Magento 2 Base" + "time": "2018-01-15T15:26:51+00:00" }, { - "name": "magento/module-admin-notification", - "version": "0.74.0-beta2", + "name": "vertex/module-tax", + "version": "3.1.0", "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-admin-notification-0.74.0-beta2.zip", + "url": "https://repo.magento.com/archives/vertex/module-tax/vertex-module-tax-3.1.0.0.zip", "reference": null, - "shasum": "740186bdf97b2161994c10a883211eae76b285e9" + "shasum": "f741436e6732930f69d24f7f8291101b0d3382c6" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-json": "*", + "ext-simplexml": "*", + "ext-soap": "*", + "magento/framework": "^100|^101|^102", + "magento/module-backend": "^100|^101", + "magento/module-catalog": "^100|^101|^102|^103", + "magento/module-checkout": "^100", + "magento/module-config": "^100|^101", + "magento/module-cron": "^100", + "magento/module-customer": "^100|^101|^102", + "magento/module-directory": "^100", + "magento/module-eav": "^100|^101|^102", + "magento/module-quote": "^100|^101", + "magento/module-sales": "^100|^101|^102", + "magento/module-shipping": "^100", + "magento/module-store": "^100|^101", + "magento/module-tax": "^100", + "magento/module-ui": "^100|^101", + "php": "^5.6|^7.0", + "vertex/sdk": "^1.1.0" + }, + "conflict": { + "magento/module-gift-wrapping": ">=102", + "pixafy/tax": "*", + "pixafy/tax-ee": "*", + "vertex/tax": "*", + "vertex/tax-ee": "*" + }, + "require-dev": { + "ext-dom": "*", + "ext-simplexml": "*", + "magento/marketplace-eqp": "^1.0", + "magento/module-offline-shipping": "^100.2", + "magento/module-usps": "^100.2" + }, + "suggest": { + "magento/module-gift-card-account": "Vertex Tax Links for Magento 2 also supports Magento's Gift Card Account module", + "magento/module-gift-wrapping": "Vertex Tax Links for Magento 2 also supports Magento's Gift Wrapping module", + "magento/module-multishipping": "Vertex Tax Links for Magento 2 also supports Magento's Multishipping module", + "magento/module-reward": "Vertex Tax Links for Magento 2 also supports Magento's Reward module" }, "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/AdminNotification" - ] - ] + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Vertex\\Tax\\": "" + } }, "license": [ - "OSL-3.0", - "AFL-3.0" + "proprietary" ], - "description": "N/A" + "description": "Vertex Tax Links for Magento 2" }, { - "name": "magento/module-authorization", - "version": "0.74.0-beta2", + "name": "vertex/product-magento-module", + "version": "3.1.0", + "require": { + "vertex/module-tax": "3.1.0" + }, + "type": "metapackage", + "license": [ + "proprietary" + ], + "authors": [ + { + "name": "Mediotype", + "email": "diveinto@mediotype.com", + "homepage": "http://www.mediotype.com/", + "role": "Development Company" + } + ], + "description": "Vertex Tax Links for Magento 2", + "homepage": "http://go.vertexsmb.com/magento_cbe", + "keywords": [ + "tax", + "vertex" + ] + }, + { + "name": "vertex/sdk", + "version": "1.1.0", "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-authorization-0.74.0-beta2.zip", + "url": "https://repo.magento.com/archives/vertex/sdk/vertex-sdk-1.1.0.0.zip", "reference": null, - "shasum": "045f8440fe82b38ce228b0be52b011bb02773214" + "shasum": "85c38829f8233c14865912e092a2c5c6c80146ec" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-soap": "*", + "php": "^5.4|^7" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Authorization" - ] - ] + "require-dev": { + "php": "^7.1", + "phpmd/phpmd": "^2.6", + "phpunit/phpunit": "^7.2", + "squizlabs/php_codesniffer": "^3.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Vertex\\": "src/" + } }, "license": [ - "OSL-3.0", - "AFL-3.0" + "proprietary" ], - "description": "Authorization module provides access to Magento ACL functionality." + "description": "Tools for communicating with Vertex Cloud and Vertex O-Series" }, { - "name": "magento/module-backend", - "version": "0.74.0-beta2", + "name": "webonyx/graphql-php", + "version": "v0.12.6", + "source": { + "type": "git", + "url": "https://github.com/webonyx/graphql-php.git", + "reference": "4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-backend-0.74.0-beta2.zip", - "reference": null, - "shasum": "39ddbf62a11d9be1b16539733c0f66f46a503033" + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95", + "reference": "4c545e5ec4fc37f6eb36c19f5a0e7feaf5979c95", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backup": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-cron": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-developer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-reports": "0.74.0-beta2", - "magento/module-require-js": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-translation": "0.74.0-beta2", - "magento/module-user": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-mbstring": "*", + "php": ">=5.6" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Backend" - ] + "require-dev": { + "phpunit/phpunit": "^4.8", + "psr/http-message": "^1.0", + "react/promise": "2.*" + }, + "suggest": { + "psr/http-message": "To use standard GraphQL server", + "react/promise": "To leverage async resolving on React PHP platform" + }, + "type": "library", + "autoload": { + "psr-4": { + "GraphQL\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP port of GraphQL reference implementation", + "homepage": "https://github.com/webonyx/graphql-php", + "keywords": [ + "api", + "graphql" + ], + "time": "2018-09-02T14:59:54+00:00" + }, + { + "name": "yubico/u2flib-server", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/Yubico/php-u2flib-server.git", + "reference": "55d813acf68212ad2cadecde07551600d6971939" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Yubico/php-u2flib-server/zipball/55d813acf68212ad2cadecde07551600d6971939", + "reference": "55d813acf68212ad2cadecde07551600d6971939", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "paragonie/random_compat": ">= 1", + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "vimeo/psalm": "^0|^1|^2" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-2-Clause" ], - "description": "N/A" + "description": "Library for U2F implementation", + "homepage": "https://developers.yubico.com/php-u2flib-server", + "time": "2018-09-07T08:16:44+00:00" }, { - "name": "magento/module-backup", - "version": "0.74.0-beta2", + "name": "zendframework/zend-barcode", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-barcode.git", + "reference": "50f24f604ef2172a0127efe91e786bc2caf2e8cf" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-backup-0.74.0-beta2.zip", - "reference": null, - "shasum": "7188d9a41bd9d4294dfd90c7053c301876d82c48" + "url": "https://api.github.com/repos/zendframework/zend-barcode/zipball/50f24f604ef2172a0127efe91e786bc2caf2e8cf", + "reference": "50f24f604ef2172a0127efe91e786bc2caf2e8cf", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-cron": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1", + "zendframework/zend-validator": "^2.10.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6 || ^3.1", + "zendframework/zendpdf": "^2.0.2" + }, + "suggest": { + "zendframework/zendpdf": "ZendPdf component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Backup" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Barcode\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a generic way to generate barcodes", + "keywords": [ + "ZendFramework", + "barcode", + "zf" + ], + "time": "2017-12-11T15:30:02+00:00" }, { - "name": "magento/module-bundle", - "version": "0.74.0-beta2", + "name": "zendframework/zend-captcha", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-captcha.git", + "reference": "37e9b6a4f632a9399eecbf2e5e325ad89083f87b" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-bundle-0.74.0-beta2.zip", - "reference": null, - "shasum": "849f7fc43f7f9b6a37a922272656c6218c681693" + "url": "https://api.github.com/repos/zendframework/zend-captcha/zipball/37e9b6a4f632a9399eecbf2e5e325ad89083f87b", + "reference": "37e9b6a4f632a9399eecbf2e5e325ad89083f87b", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-catalog-rule": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-gift-message": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-math": "^2.7 || ^3.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-session": "^2.8", + "zendframework/zend-text": "^2.6", + "zendframework/zend-validator": "^2.10.1", + "zendframework/zendservice-recaptcha": "^3.0" }, "suggest": { - "magento/module-webapi": "0.74.0-beta2" + "zendframework/zend-i18n-resources": "Translations of captcha messages", + "zendframework/zend-session": "Zend\\Session component", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Bundle" - ] - ] + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Captcha\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Generate and validate CAPTCHAs using Figlets, images, ReCaptcha, and more", + "keywords": [ + "ZendFramework", + "captcha", + "zf" + ], + "time": "2018-04-24T17:24:10+00:00" }, { - "name": "magento/module-captcha", - "version": "0.74.0-beta2", + "name": "zendframework/zend-code", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-code.git", + "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-captcha-0.74.0-beta2.zip", - "reference": null, - "shasum": "a80050a22bad3399e146b242be33f6717fe15d26" + "url": "https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb", + "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^7.1", + "zendframework/zend-eventmanager": "^2.6 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "doctrine/annotations": "~1.0", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "zendframework/zend-coding-standard": "^1.0.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "zendframework/zend-stdlib": "Zend\\Stdlib component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Captcha" - ] - ] + "branch-alias": { + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Code\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides facilities to generate arbitrary code using an object oriented interface", + "homepage": "https://github.com/zendframework/zend-code", + "keywords": [ + "code", + "zf2" + ], + "time": "2018-08-13T20:36:59+00:00" }, { - "name": "magento/module-catalog", - "version": "0.74.0-beta2", + "name": "zendframework/zend-config", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-0.74.0-beta2.zip", - "reference": null, - "shasum": "d4259a0113a3b8eece9bdf88ad24b5cdee349de0" + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-catalog-rule": "0.74.0-beta2", - "magento/module-catalog-url-rewrite": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-indexer": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-msrp": "0.74.0-beta2", - "magento/module-page-cache": "0.74.0-beta2", - "magento/module-product-alert": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-url-rewrite": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-cookie": "0.74.0-beta2" + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.5", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Catalog" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" ], - "description": "N/A" + "time": "2016-02-04T23:01:10+00:00" }, { - "name": "magento/module-catalog-import-export", - "version": "0.74.0-beta2", + "name": "zendframework/zend-console", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-console.git", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-import-export-0.74.0-beta2.zip", - "reference": null, - "shasum": "3a26206abf71888d300c9d72b2190ff0f66eafd2" + "url": "https://api.github.com/repos/zendframework/zend-console/zipball/e8aa08da83de3d265256c40ba45cd649115f0e18", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18", + "shasum": "" }, "require": { - "ext-ctype": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-import-export": "0.74.0-beta2", - "magento/module-indexer": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-filter": "^2.7.2", + "zendframework/zend-json": "^2.6 || ^3.0", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "zendframework/zend-filter": "To support DefaultRouteMatcher usage", + "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Console\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Build console applications using getopt syntax or routing, complete with prompts", + "keywords": [ + "ZendFramework", + "console", + "zf" + ], + "time": "2018-01-25T19:08:04+00:00" }, { - "name": "magento/module-catalog-inventory", - "version": "0.74.0-beta2", + "name": "zendframework/zend-crypt", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-crypt.git", + "reference": "1b2f5600bf6262904167116fa67b58ab1457036d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-inventory-0.74.0-beta2.zip", - "reference": null, - "shasum": "805c2bb2fb2c2f038dd73e4030a02e1208ea23da" + "url": "https://api.github.com/repos/zendframework/zend-crypt/zipball/1b2f5600bf6262904167116fa67b58ab1457036d", + "reference": "1b2f5600bf6262904167116fa67b58ab1457036d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-indexer": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0", + "zendframework/zend-math": "^2.6", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-mcrypt": "Required for most features of Zend\\Crypt" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogInventory" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Crypt\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-crypt", + "keywords": [ + "crypt", + "zf2" + ], + "time": "2016-02-03T23:46:30+00:00" }, { - "name": "magento/module-catalog-rule", - "version": "0.74.0-beta2", + "name": "zendframework/zend-db", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-db.git", + "reference": "77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-rule-0.74.0-beta2.zip", - "reference": null, - "shasum": "e9fe8b0f65dea1f8feba125e7d2974d48d1e0eef" + "url": "https://api.github.com/repos/zendframework/zend-db/zipball/77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e", + "reference": "77022f06f6ffd384fa86d22ab8d8bbdb925a1e8e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-import-export": "0.74.0-beta2", - "magento/module-indexer": "0.74.0-beta2", - "magento/module-rule": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "Zend\\EventManager component", + "zendframework/zend-hydrator": "Zend\\Hydrator component for using HydratingResultSets", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogRule" - ] - ] + "branch-alias": { + "dev-master": "2.9-dev", + "dev-develop": "2.10-dev" + }, + "zf": { + "component": "Zend\\Db", + "config-provider": "Zend\\Db\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Db\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations", + "keywords": [ + "ZendFramework", + "db", + "zf" + ], + "time": "2019-02-25T11:37:45+00:00" }, { - "name": "magento/module-catalog-search", - "version": "0.74.0-beta2", + "name": "zendframework/zend-di", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-di.git", + "reference": "1fd1ba85660b5a2718741b38639dc7c4c3194b37" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-search-0.74.0-beta2.zip", - "reference": null, - "shasum": "e8239e3dbbdccda266347d1ca5f286c1e9a2cb4b" + "url": "https://api.github.com/repos/zendframework/zend-di/zipball/1fd1ba85660b5a2718741b38639dc7c4c3194b37", + "reference": "1fd1ba85660b5a2718741b38639dc7c4c3194b37", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-indexer": "0.74.0-beta2", - "magento/module-search": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-code": "^2.6 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogSearch" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Di\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-di", + "keywords": [ + "di", + "zf2" + ], + "time": "2016-04-25T20:58:11+00:00" }, { - "name": "magento/module-catalog-url-rewrite", - "version": "0.74.0-beta2", + "name": "zendframework/zend-diactoros", + "version": "1.8.6", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-url-rewrite-0.74.0-beta2.zip", - "reference": null, - "shasum": "c3cc582396cc97970e2d0dd92e5315190cde0971" + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-import-export": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-import-export": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-url-rewrite": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" }, - "type": "magento2-module", + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", + "zendframework/zend-coding-standard": "~1.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogUrlRewrite" - ] - ] + "branch-alias": { + "dev-master": "1.8.x-dev", + "dev-develop": "1.9.x-dev", + "dev-release-2.0": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-2-Clause" ], - "description": "N/A" + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2018-09-05T19:29:37+00:00" }, { - "name": "magento/module-catalog-widget", - "version": "0.74.0-beta2", + "name": "zendframework/zend-escaper", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-escaper.git", + "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-catalog-widget-0.74.0-beta2.zip", - "reference": null, - "shasum": "7dad3ad909bc97610211f4f008fa1817f1aac22a" + "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074", + "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-rule": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CatalogWidget" - ] - ] + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Escaper\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "keywords": [ + "ZendFramework", + "escaper", + "zf" + ], + "time": "2018-04-25T15:48:53+00:00" }, { - "name": "magento/module-centinel", - "version": "0.74.0-beta2", + "name": "zendframework/zend-eventmanager", + "version": "2.6.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "d238c443220dce4b6396579c8ab2200ec25f9108" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-centinel-0.74.0-beta2.zip", - "reference": null, - "shasum": "069e94cd124c0d078eeb3174afdc1e49031a7288" + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/d238c443220dce4b6396579c8ab2200ec25f9108", + "reference": "d238c443220dce4b6396579c8ab2200ec25f9108", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7" }, - "type": "magento2-module", + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Centinel" - ] - ] + "branch-alias": { + "dev-release-2.6": "2.6-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "eventmanager", + "zf2" + ], + "time": "2017-12-12T17:48:56+00:00" }, { - "name": "magento/module-checkout", - "version": "0.74.0-beta2", + "name": "zendframework/zend-feed", + "version": "2.10.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-feed.git", + "reference": "6641f4cf3f4586c63f83fd70b6d19966025c8888" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-checkout-0.74.0-beta2.zip", - "reference": null, - "shasum": "8161dcc6c2bba44981cb63cd24cf137900d37db7" + "url": "https://api.github.com/repos/zendframework/zend-feed/zipball/6641f4cf3f4586c63f83fd70b6d19966025c8888", + "reference": "6641f4cf3f4586c63f83fd70b6d19966025c8888", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-gift-message": "0.74.0-beta2", - "magento/module-msrp": "0.74.0-beta2", - "magento/module-page-cache": "0.74.0-beta2", - "magento/module-payment": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-cookie": "0.74.0-beta2" + "php": "^5.6 || ^7.0", + "zendframework/zend-escaper": "^2.5.2", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-message": "^1.0.1", + "zendframework/zend-cache": "^2.7.2", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.8.2", + "zendframework/zend-http": "^2.7", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Zend\\Feed\\Reader\\Http\\Psr7ResponseDecorator", + "zendframework/zend-cache": "Zend\\Cache component, for optionally caching feeds between requests", + "zendframework/zend-db": "Zend\\Db component, for use with PubSubHubbub", + "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for easily extending ExtensionManager implementations", + "zendframework/zend-validator": "Zend\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Checkout" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Feed\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides functionality for consuming RSS and Atom feeds", + "keywords": [ + "ZendFramework", + "feed", + "zf" + ], + "time": "2018-08-01T13:53:20+00:00" }, { - "name": "magento/module-checkout-agreements", - "version": "0.74.0-beta2", + "name": "zendframework/zend-filter", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "1c3e6d02f9cd5f6c929c9859498f5efbe216e86f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-checkout-agreements-0.74.0-beta2.zip", - "reference": null, - "shasum": "be00ed9e3c1e3e4bacf7efc00b67c7cbb2065715" + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/1c3e6d02f9cd5f6c929c9859498f5efbe216e86f", + "reference": "1c3e6d02f9cd5f6c929c9859498f5efbe216e86f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, - "type": "magento2-module", + "conflict": { + "zendframework/zend-validator": "<2.10.1" + }, + "require-dev": { + "pear/archive_tar": "^1.4.3", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-factory": "^1.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-crypt": "^3.2.1", + "zendframework/zend-servicemanager": "^2.7.8 || ^3.3", + "zendframework/zend-uri": "^2.6" + }, + "suggest": { + "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters", + "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters", + "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality", + "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CheckoutAgreements" - ] - ] + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\Filter", + "config-provider": "Zend\\Filter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a set of commonly needed data filters", + "keywords": [ + "ZendFramework", + "filter", + "zf" + ], + "time": "2018-12-17T16:00:04+00:00" }, { - "name": "magento/module-cms", - "version": "0.74.0-beta2", + "name": "zendframework/zend-form", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-form.git", + "reference": "c713a12ccbd43148b71c9339e171ca11e3f8a1da" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cms-0.74.0-beta2.zip", - "reference": null, - "shasum": "15ae95a27b5ff0c82fbdb43ca8570e0cee4b21f5" + "url": "https://api.github.com/repos/zendframework/zend-form/zipball/c713a12ccbd43148b71c9339e171ca11e3f8a1da", + "reference": "c713a12ccbd43148b71c9339e171ca11e3f8a1da", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-email": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "magento/module-variable": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-hydrator": "^1.1 || ^2.1 || ^3.0", + "zendframework/zend-inputfilter": "^2.8", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "doctrine/annotations": "~1.0", + "phpunit/phpunit": "^5.7.23 || ^6.5.3", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-captcha": "^2.7.1", + "zendframework/zend-code": "^2.6 || ^3.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.6", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.2", + "zendframework/zendservice-recaptcha": "^3.0.0" + }, + "suggest": { + "zendframework/zend-captcha": "^2.7.1, required for using CAPTCHA form elements", + "zendframework/zend-code": "^2.6 || ^3.0, required to use zend-form annotations support", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, reuired for zend-form annotations support", + "zendframework/zend-i18n": "^2.6, required when using zend-form view helpers", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, required to use the form factories or provide services", + "zendframework/zend-view": "^2.6.2, required for using the zend-form view helpers", + "zendframework/zendservice-recaptcha": "in order to use the ReCaptcha form element" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Cms" - ] + "branch-alias": { + "dev-master": "2.13.x-dev", + "dev-develop": "2.14.x-dev" + }, + "zf": { + "component": "Zend\\Form", + "config-provider": "Zend\\Form\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Form\\": "src/" + }, + "files": [ + "autoload/formElementManagerPolyfill.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Validate and display simple and complex forms, casting forms to business objects and vice versa", + "keywords": [ + "ZendFramework", + "form", + "zf" + ], + "time": "2018-12-11T22:51:29+00:00" }, { - "name": "magento/module-cms-url-rewrite", - "version": "0.74.0-beta2", + "name": "zendframework/zend-http", + "version": "2.8.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-http.git", + "reference": "d160aedc096be230af0fe9c31151b2b33ad4e807" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cms-url-rewrite-0.74.0-beta2.zip", - "reference": null, - "shasum": "6a3775d7705efcf5b43bfbe327d6ef1db2a1c09c" + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/d160aedc096be230af0fe9c31151b2b33ad4e807", + "reference": "d160aedc096be230af0fe9c31151b2b33ad4e807", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-cms": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-url-rewrite": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-loader": "^2.5.1", + "zendframework/zend-stdlib": "^3.1 || ^2.7.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-validator": "^2.10.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^3.1 || ^2.6" + }, + "suggest": { + "paragonie/certainty": "For automated management of cacert.pem" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CmsUrlRewrite" - ] - ] + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Http\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "keywords": [ + "ZendFramework", + "http", + "http client", + "zend", + "zf" + ], + "time": "2019-02-07T17:47:08+00:00" }, { - "name": "magento/module-config", - "version": "0.74.0-beta2", + "name": "zendframework/zend-hydrator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-hydrator.git", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-config-0.74.0-beta2.zip", - "reference": null, - "shasum": "a4be4800b197ab3a73bbfc0d23d5a1f753a07a57" + "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-cron": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-email": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0@dev", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, to support aggregate hydrator usage", + "zendframework/zend-filter": "^2.6, to support naming strategy hydrator usage", + "zendframework/zend-serializer": "^2.6.1, to use the SerializableStrategy", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, to support hydrator plugin manager usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Config" - ] - ] + "branch-alias": { + "dev-release-1.0": "1.0-dev", + "dev-release-1.1": "1.1-dev", + "dev-master": "2.0-dev", + "dev-develop": "2.1-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Hydrator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-hydrator", + "keywords": [ + "hydrator", + "zf2" + ], + "time": "2016-02-18T22:38:26+00:00" }, { - "name": "magento/module-configurable-import-export", - "version": "0.74.0-beta2", + "name": "zendframework/zend-i18n", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "6d69af5a04e1a4de7250043cb1322f077a0cdb7f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-configurable-import-export-0.74.0-beta2.zip", - "reference": null, - "shasum": "bb6d242228bcbe7c35253dc244c7977994b24b8e" + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/6d69af5a04e1a4de7250043cb1322f077a0cdb7f", + "reference": "6d69af5a04e1a4de7250043cb1322f077a0cdb7f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-import-export": "0.74.0-beta2", - "magento/module-configurable-product": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-import-export": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.3" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-i18n-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ConfigurableImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\I18n", + "config-provider": "Zend\\I18n\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Provide translations for your application, and filter and validate internationalized values", + "keywords": [ + "ZendFramework", + "i18n", + "zf" + ], + "time": "2018-05-16T16:39:13+00:00" }, { - "name": "magento/module-configurable-product", - "version": "0.74.0-beta2", + "name": "zendframework/zend-inputfilter", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-inputfilter.git", + "reference": "4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-configurable-product-0.74.0-beta2.zip", - "reference": null, - "shasum": "fe8e4536a59f60be79211fc0072e640102d3be06" + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c", + "reference": "4f52b71ec9cef3a06e3bba8f5c2124e94055ec0c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-catalog-rule": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-filter": "^2.9.1", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.11" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "psr/http-message": "^1.0", + "zendframework/zend-coding-standard": "~1.0.0" }, "suggest": { - "magento/module-webapi": "0.74.0-beta2" + "psr/http-message-implementation": "PSR-7 is required if you wish to validate PSR-7 UploadedFileInterface payloads" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ConfigurableProduct" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\InputFilter", + "config-provider": "Zend\\InputFilter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\InputFilter\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files", + "keywords": [ + "ZendFramework", + "inputfilter", + "zf" + ], + "time": "2019-01-30T16:58:51+00:00" }, { - "name": "magento/module-contact", - "version": "0.74.0-beta2", + "name": "zendframework/zend-json", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-contact-0.74.0-beta2.zip", - "reference": null, - "shasum": "b53d65b91dd1f596d0a4f7b8bacf73e6eaff98c9" + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28", + "reference": "4c8705dbe4ad7d7e51b2876c5b9eea0ef916ba28", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-cms": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-stdlib": "^2.5 || ^3.0", + "zendframework/zendxml": "^1.0.2" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component, required to use Zend\\Json\\Server", + "zendframework/zend-server": "Zend\\Server component, required to use Zend\\Json\\Server", + "zendframework/zend-stdlib": "Zend\\Stdlib component, for use with caching Zend\\Json\\Server responses", + "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Contact" - ] - ] + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://github.com/zendframework/zend-json", + "keywords": [ + "json", + "zf2" + ], + "time": "2016-02-04T21:20:26+00:00" }, { - "name": "magento/module-cookie", - "version": "0.74.0-beta2", + "name": "zendframework/zend-loader", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-loader.git", + "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cookie-0.74.0-beta2.zip", - "reference": null, - "shasum": "a8a4e29967524214fb6af5c12681d7b410a63bc6" + "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/78f11749ea340f6ca316bca5958eef80b38f9b6c", + "reference": "78f11749ea340f6ca316bca5958eef80b38f9b6c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-store": "0.74.0-beta2", - "php": "~5.4.11|~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0" }, - "suggest": { - "magento/module-backend": "0.74.0-beta2" + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Cookie" - ] - ] + "branch-alias": { + "dev-master": "2.6.x-dev", + "dev-develop": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Loader\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Autoloading and plugin loading strategies", + "keywords": [ + "ZendFramework", + "loader", + "zf" + ], + "time": "2018-04-30T15:20:54+00:00" }, { - "name": "magento/module-cron", - "version": "0.74.0-beta2", + "name": "zendframework/zend-log", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-log.git", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-cron-0.74.0-beta2.zip", - "reference": null, - "shasum": "0e91ec4ade457797e7db0fe1aa4794747817fa6a" + "url": "https://api.github.com/repos/zendframework/zend-log/zipball/9cec3b092acb39963659c2f32441cccc56b3f430", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-config": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "psr/log": "^1.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-filter": "^2.5", + "zendframework/zend-mail": "^2.6.1", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "ext-mongo": "mongo extension to use Mongo writer", + "ext-mongodb": "mongodb extension to use MongoDB writer", + "zendframework/zend-console": "Zend\\Console component to use the RequestID log processor", + "zendframework/zend-db": "Zend\\Db component to use the database log writer", + "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML log formatter", + "zendframework/zend-mail": "Zend\\Mail component to use the email log writer", + "zendframework/zend-validator": "Zend\\Validator component to block invalid log messages" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Cron" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Log", + "config-provider": "Zend\\Log\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Log\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "component for general purpose logging", + "homepage": "https://github.com/zendframework/zend-log", + "keywords": [ + "log", + "logging", + "zf2" + ], + "time": "2018-04-09T21:59:51+00:00" }, { - "name": "magento/module-currency-symbol", - "version": "0.74.0-beta2", + "name": "zendframework/zend-mail", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mail.git", + "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-currency-symbol-0.74.0-beta2.zip", - "reference": null, - "shasum": "261c0a4e05295f852a7986ef2d15509e4c2ad26c" + "url": "https://api.github.com/repos/zendframework/zend-mail/zipball/d7beb63d5f7144a21ac100072c453e63860cdab8", + "reference": "d7beb63d5f7144a21ac100072c453e63860cdab8", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-page-cache": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-iconv": "*", + "php": "^5.6 || ^7.0", + "true/punycode": "^2.1", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mime": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.10.2" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-crypt": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1" + }, + "suggest": { + "zendframework/zend-crypt": "Crammd5 support in SMTP Auth", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1 when using SMTP to deliver messages" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CurrencySymbol" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Mail", + "config-provider": "Zend\\Mail\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mail\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages", + "keywords": [ + "ZendFramework", + "mail", + "zf" + ], + "time": "2018-06-07T13:37:07+00:00" }, { - "name": "magento/module-customer", - "version": "0.74.0-beta2", + "name": "zendframework/zend-math", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-math.git", + "reference": "1abce074004dacac1a32cd54de94ad47ef960d38" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-customer-0.74.0-beta2.zip", - "reference": null, - "shasum": "135623f9517f12f4dc17e062280eaf5f5071e7b7" + "url": "https://api.github.com/repos/zendframework/zend-math/zipball/1abce074004dacac1a32cd54de94ad47ef960d38", + "reference": "1abce074004dacac1a32cd54de94ad47ef960d38", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta2", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-integration": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-newsletter": "0.74.0-beta2", - "magento/module-page-cache": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-review": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" - }, - "suggest": { - "magento/module-cookie": "0.74.0-beta2" + "php": "^5.5 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "ircmaxell/random-lib": "~1.1", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-bcmath": "If using the bcmath functionality", + "ext-gmp": "If using the gmp functionality", + "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if Mcrypt extensions is unavailable" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Customer" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-math", + "keywords": [ + "math", + "zf2" + ], + "time": "2018-12-04T15:34:17+00:00" }, { - "name": "magento/module-customer-import-export", - "version": "0.74.0-beta2", + "name": "zendframework/zend-mime", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mime.git", + "reference": "52ae5fa9f12845cae749271034a2d594f0e4c6f2" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-customer-import-export-0.74.0-beta2.zip", - "reference": null, - "shasum": "9b4f6b059fecce79c7f8ce9fc163858b8a47c7ca" + "url": "https://api.github.com/repos/zendframework/zend-mime/zipball/52ae5fa9f12845cae749271034a2d594f0e4c6f2", + "reference": "52ae5fa9f12845cae749271034a2d594f0e4c6f2", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-import-export": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.21 || ^6.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-mail": "^2.6" + }, + "suggest": { + "zendframework/zend-mail": "Zend\\Mail component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/CustomerImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mime\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Create and parse MIME messages and parts", + "homepage": "https://github.com/zendframework/zend-mime", + "keywords": [ + "ZendFramework", + "mime", + "zf" + ], + "time": "2018-05-14T19:02:50+00:00" }, { - "name": "magento/module-developer", - "version": "0.74.0-beta2", + "name": "zendframework/zend-modulemanager", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-modulemanager.git", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-developer-0.74.0-beta2.zip", - "reference": null, - "shasum": "1a1077d963ec6310df7080defaadc9bd87ed6e21" + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/394df6e12248ac430a312d4693f793ee7120baa6", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-config": "^3.1 || ^2.6", + "zendframework/zend-eventmanager": "^3.2 || ^2.6.3", + "zendframework/zend-stdlib": "^3.1 || ^2.7" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-console": "^2.6", + "zendframework/zend-di": "^2.6", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mvc": "^3.0 || ^2.7", + "zendframework/zend-servicemanager": "^3.0.3 || ^2.7.5" + }, + "suggest": { + "zendframework/zend-console": "Zend\\Console component", + "zendframework/zend-loader": "Zend\\Loader component if you are not using Composer autoloading for your modules", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Developer" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ModuleManager\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Modular application system for zend-mvc applications", + "homepage": "https://github.com/zendframework/zend-modulemanager", + "keywords": [ + "ZendFramework", + "modulemanager", + "zf" + ], + "time": "2017-12-02T06:11:18+00:00" }, { - "name": "magento/module-dhl", - "version": "0.74.0-beta2", + "name": "zendframework/zend-mvc", + "version": "2.7.15", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mvc.git", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-dhl-0.74.0-beta2.zip", - "reference": null, - "shasum": "f525d0b48189b60e2c0def9a8804933133995104" + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-console": "^2.7", + "zendframework/zend-eventmanager": "^2.6.4 || ^3.0", + "zendframework/zend-form": "^2.11", + "zendframework/zend-hydrator": "^1.1 || ^2.4", + "zendframework/zend-psr7bridge": "^0.2", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7.5 || ^3.0" }, - "type": "magento2-module", + "replace": { + "zendframework/zend-router": "^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.8.36", + "sebastian/comparator": "^1.2.4", + "sebastian/version": "^1.0.4", + "zendframework/zend-authentication": "^2.6", + "zendframework/zend-cache": "^2.8", + "zendframework/zend-di": "^2.6", + "zendframework/zend-filter": "^2.8", + "zendframework/zend-http": "^2.8", + "zendframework/zend-i18n": "^2.8", + "zendframework/zend-inputfilter": "^2.8", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.9.3", + "zendframework/zend-modulemanager": "^2.8", + "zendframework/zend-serializer": "^2.8", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.7", + "zendframework/zend-uri": "^2.6", + "zendframework/zend-validator": "^2.10", + "zendframework/zend-view": "^2.9" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-di": "Zend\\Di component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", + "zendframework/zend-inputfilter": "Zend\\Inputfilter component", + "zendframework/zend-json": "Zend\\Json component", + "zendframework/zend-log": "Zend\\Log component", + "zendframework/zend-modulemanager": "Zend\\ModuleManager component", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager-di": "^1.0.1, if using zend-servicemanager v3 and requiring the zend-di integration", + "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-uri": "Zend\\Uri component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zend-view": "Zend\\View component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Dhl" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Zend\\Mvc\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-mvc", + "keywords": [ + "mvc", + "zf2" + ], + "time": "2018-05-03T13:13:41+00:00" }, { - "name": "magento/module-directory", - "version": "0.74.0-beta2", + "name": "zendframework/zend-psr7bridge", + "version": "0.2.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-psr7bridge.git", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-directory-0.74.0-beta2.zip", - "reference": null, - "shasum": "3cb3ed72d237966f9deab3ac0386c3b6701cf66e" + "url": "https://api.github.com/repos/zendframework/zend-psr7bridge/zipball/86c0b53b0c6381391c4add4a93a56e51d5c74605", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.5", + "psr/http-message": "^1.0", + "zendframework/zend-diactoros": "^1.1", + "zendframework/zend-http": "^2.5" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^4.7", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Directory" - ] - ] + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Psr7Bridge\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "PSR-7 <-> Zend\\Http bridge", + "homepage": "https://github.com/zendframework/zend-psr7bridge", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2016-05-10T21:44:39+00:00" }, { - "name": "magento/module-downloadable", - "version": "0.74.0-beta2", + "name": "zendframework/zend-serializer", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "0172690db48d8935edaf625c4cba38b79719892c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-downloadable-0.74.0-beta2.zip", - "reference": null, - "shasum": "5bd1cabf95a5c44e329f1263f40e165b3aa6070e" + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/0172690db48d8935edaf625c4cba38b79719892c", + "reference": "0172690db48d8935edaf625c4cba38b79719892c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-gift-message": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-msrp": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-json": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-math": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization", + "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Downloadable" - ] - ] + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + }, + "zf": { + "component": "Zend\\Serializer", + "config-provider": "Zend\\Serializer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "keywords": [ + "ZendFramework", + "serializer", + "zf" + ], + "time": "2018-05-14T18:45:18+00:00" }, { - "name": "magento/module-eav", - "version": "0.74.0-beta2", + "name": "zendframework/zend-server", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-server.git", + "reference": "23a2e9a5599c83c05da831cb7c649e8a7809595e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-eav-0.74.0-beta2.zip", - "reference": null, - "shasum": "5594f375105dc1921f38772fbb069ff57c2e8f01" + "url": "https://api.github.com/repos/zendframework/zend-server/zipball/23a2e9a5599c83c05da831cb7c649e8a7809595e", + "reference": "23a2e9a5599c83c05da831cb7c649e8a7809595e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-code": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.5 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Eav" - ] - ] + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } }, + "autoload": { + "psr-4": { + "Zend\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Create Reflection-based RPC servers", + "keywords": [ + "ZendFramework", + "server", + "zf" + ], + "time": "2018-04-30T22:21:28+00:00" }, { - "name": "magento/module-email", - "version": "0.74.0-beta2", + "name": "zendframework/zend-servicemanager", + "version": "2.7.11", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "99ec9ed5d0f15aed9876433c74c2709eb933d4c7" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-email-0.74.0-beta2.zip", - "reference": null, - "shasum": "8ff7affa3d22107bd5e519dc24c098acccc44bf8" + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/99ec9ed5d0f15aed9876433c74c2709eb933d4c7", + "reference": "99ec9ed5d0f15aed9876433c74c2709eb933d4c7", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-variable": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Email" - ] - ] + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ], + "time": "2018-06-22T14:49:54+00:00" }, { - "name": "magento/module-fedex", - "version": "0.74.0-beta2", + "name": "zendframework/zend-session", + "version": "2.8.5", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-session.git", + "reference": "2cfd90e1a2f6b066b9f908599251d8f64f07021b" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-fedex-0.74.0-beta2.zip", - "reference": null, - "shasum": "cdc61b901b080b14e42b10889c8fb6f639f520af" + "url": "https://api.github.com/repos/zendframework/zend-session/zipball/2cfd90e1a2f6b066b9f908599251d8f64f07021b", + "reference": "2cfd90e1a2f6b066b9f908599251d8f64f07021b", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "container-interop/container-interop": "^1.1", + "mongodb/mongodb": "^1.0.1", + "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0", + "phpunit/phpunit": "^5.7.5 || >=6.0.13 <6.5.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.7", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6" + }, + "suggest": { + "mongodb/mongodb": "If you want to use the MongoDB session save handler", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-db": "Zend\\Db component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "Zend\\Validator component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Fedex" - ] - ] + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + }, + "zf": { + "component": "Zend\\Session", + "config-provider": "Zend\\Session\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Session\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "manage and preserve session data, a logical complement of cookie data, across multiple page requests by the same client", + "keywords": [ + "ZendFramework", + "session", + "zf" + ], + "time": "2018-02-22T16:33:54+00:00" }, { - "name": "magento/module-gift-message", - "version": "0.74.0-beta2", + "name": "zendframework/zend-soap", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-soap.git", + "reference": "af03c32f0db2b899b3df8cfe29aeb2b49857d284" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-gift-message-0.74.0-beta2.zip", - "reference": null, - "shasum": "76ea03167970205295c95d88f871f7ce0547cdbf" + "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/af03c32f0db2b899b3df8cfe29aeb2b49857d284", + "reference": "af03c32f0db2b899b3df8cfe29aeb2b49857d284", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-multishipping": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-soap": "*", + "php": "^5.6 || ^7.0", + "zendframework/zend-server": "^2.6.1", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-uri": "^2.5.2" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.21 || ^6.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-http": "^2.5.4" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GiftMessage" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Soap\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-soap", + "keywords": [ + "soap", + "zf2" + ], + "time": "2018-01-29T17:51:26+00:00" }, { - "name": "magento/module-google-adwords", - "version": "0.74.0-beta2", + "name": "zendframework/zend-stdlib", + "version": "2.7.7", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-adwords-0.74.0-beta2.zip", - "reference": null, - "shasum": "45dfa690b1f183b0a87e6db39e6399ff0024bc66" + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-hydrator": "~1.1" }, - "type": "magento2-module", + "require-dev": { + "athletic/athletic": "~0.1", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleAdwords" - ] - ] + "branch-alias": { + "dev-release-2.7": "2.7-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2016-04-12T21:17:31+00:00" }, { - "name": "magento/module-google-analytics", - "version": "0.74.0-beta2", + "name": "zendframework/zend-text", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-text.git", + "reference": "ca987dd4594f5f9508771fccd82c89bc7fbb39ac" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-analytics-0.74.0-beta2.zip", - "reference": null, - "shasum": "7460860110d6942c3375db4a05cf079134e8ab6a" + "url": "https://api.github.com/repos/zendframework/zend-text/zipball/ca987dd4594f5f9508771fccd82c89bc7fbb39ac", + "reference": "ca987dd4594f5f9508771fccd82c89bc7fbb39ac", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-cookie": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleAnalytics" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Text\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Create FIGlets and text-based tables", + "keywords": [ + "ZendFramework", + "text", + "zf" + ], + "time": "2018-04-30T14:55:10+00:00" }, { - "name": "magento/module-google-optimizer", - "version": "0.74.0-beta2", + "name": "zendframework/zend-uri", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-uri.git", + "reference": "b2785cd38fe379a784645449db86f21b7739b1ee" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-optimizer-0.74.0-beta2.zip", - "reference": null, - "shasum": "90565d6ecc18276ef08c324caae5178ca8ba82ed" + "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/b2785cd38fe379a784645449db86f21b7739b1ee", + "reference": "b2785cd38fe379a784645449db86f21b7739b1ee", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-google-analytics": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-validator": "^2.10" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleOptimizer" - ] - ] + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Uri\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "keywords": [ + "ZendFramework", + "uri", + "zf" + ], + "time": "2019-02-27T21:39:04+00:00" }, { - "name": "magento/module-google-shopping", - "version": "0.74.0-beta2", + "name": "zendframework/zend-validator", + "version": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-validator.git", + "reference": "3c28dfe4e5951ba38059cea895244d9d206190b3" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-google-shopping-0.74.0-beta2.zip", - "reference": null, - "shasum": "f86c5696c215900805df27dcc6f8d6df5bd8453a" + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/3c28dfe4e5951ba38059cea895244d9d206190b3", + "reference": "3c28dfe4e5951ba38059cea895244d9d206190b3", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.1", + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.6 || ^3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "psr/http-message": "^1.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-db": "^2.7", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-math": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators", + "zendframework/zend-db": "Zend\\Db component, required by the (No)RecordExists validator", + "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", + "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages", + "zendframework/zend-i18n-resources": "Translations of validator messages", + "zendframework/zend-math": "Zend\\Math component, required by the Csrf validator", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "zendframework/zend-session": "Zend\\Session component, ^2.8; required by the Csrf validator", + "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GoogleShopping" - ] - ] + "branch-alias": { + "dev-master": "2.11.x-dev", + "dev-develop": "2.12.x-dev" + }, + "zf": { + "component": "Zend\\Validator", + "config-provider": "Zend\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Validator\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "provides a set of commonly needed validators", + "homepage": "https://github.com/zendframework/zend-validator", + "keywords": [ + "validator", + "zf2" + ], + "time": "2019-01-29T22:26:39+00:00" }, { - "name": "magento/module-grouped-import-export", - "version": "0.74.0-beta2", + "name": "zendframework/zend-view", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-view.git", + "reference": "c1a3f2043fb75b5983ab9adfc369ae396601be7e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-grouped-import-export-0.74.0-beta2.zip", - "reference": null, - "shasum": "3cbf803098dd03d361b51f730930c9c3e6a9292c" + "url": "https://api.github.com/repos/zendframework/zend-view/zipball/c1a3f2043fb75b5983ab9adfc369ae396601be7e", + "reference": "c1a3f2043fb75b5983ab9adfc369ae396601be7e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-import-export": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-grouped-product": "0.74.0-beta2", - "magento/module-import-export": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-authentication": "^2.5", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-console": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-feed": "^2.7", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-log": "^2.7", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-mvc": "^2.7.14 || ^3.0", + "zendframework/zend-navigation": "^2.5", + "zendframework/zend-paginator": "^2.5", + "zendframework/zend-permissions-acl": "^2.6", + "zendframework/zend-router": "^3.0.1", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component", + "zendframework/zend-escaper": "Zend\\Escaper component", + "zendframework/zend-feed": "Zend\\Feed component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-mvc-plugin-flashmessenger": "zend-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with zend-mvc versions 3 and up", + "zendframework/zend-navigation": "Zend\\Navigation component", + "zendframework/zend-paginator": "Zend\\Paginator component", + "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component" + }, + "bin": [ + "bin/templatemap_generator.php" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/GroupedImportExport" - ] - ] + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\View\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" - }, + "description": "provides a system of helpers, output filters, and variable escaping", + "homepage": "https://github.com/zendframework/zend-view", + "keywords": [ + "view", + "zf2" + ], + "time": "2018-12-06T21:20:01+00:00" + } + ], + "packages-dev": [ { - "name": "magento/module-grouped-product", - "version": "0.74.0-beta2", + "name": "allure-framework/allure-codeception", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-codeception.git", + "reference": "9d31d781b3622b028f1f6210bc76ba88438bd518" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-grouped-product-0.74.0-beta2.zip", - "reference": null, - "shasum": "8ad968c974e321d99a9bccfd04721ccfb4bfb86f" + "url": "https://api.github.com/repos/allure-framework/allure-codeception/zipball/9d31d781b3622b028f1f6210bc76ba88438bd518", + "reference": "9d31d781b3622b028f1f6210bc76ba88438bd518", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-msrp": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "allure-framework/allure-php-api": "~1.1.0", + "codeception/codeception": "~2.1", + "php": ">=5.4.0", + "symfony/filesystem": ">=2.6", + "symfony/finder": ">=2.6" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/GroupedProduct" - ] - ] + "type": "library", + "autoload": { + "psr-0": { + "Yandex": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "A Codeception adapter for Allure report.", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "attachments", + "cases", + "codeception", + "report", + "steps", + "testing" + ], + "time": "2018-12-18T19:47:23+00:00" }, { - "name": "magento/module-import-export", - "version": "0.74.0-beta2", + "name": "allure-framework/allure-php-api", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-php-adapter-api.git", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-import-export-0.74.0-beta2.zip", - "reference": null, - "shasum": "c16b13bdf9efb2a9d52b6423ee641ca47d60da36" + "url": "https://api.github.com/repos/allure-framework/allure-php-adapter-api/zipball/a462a0da121681577033e13c123b6cc4e89cdc64", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64", + "shasum": "" }, "require": { - "ext-ctype": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-indexer": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "jms/serializer": ">=0.16.0", + "moontoast/math": ">=1.1.0", + "php": ">=5.4.0", + "phpunit/phpunit": ">=4.0.0", + "ramsey/uuid": ">=3.0.0", + "symfony/http-foundation": ">=2.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/ImportExport" + "type": "library", + "autoload": { + "psr-0": { + "Yandex": [ + "src/", + "test/" ] - ] + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "PHP API for Allure adapter", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "api", + "php", + "report" + ], + "time": "2016-12-07T12:15:46+00:00" }, { - "name": "magento/module-indexer", - "version": "0.74.0-beta2", + "name": "allure-framework/allure-phpunit", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/allure-framework/allure-phpunit.git", + "reference": "45504aeba41304cf155a898fa9ac1aae79f4a089" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-indexer-0.74.0-beta2.zip", - "reference": null, - "shasum": "d1c6e17c92d766f8f3f578d290da957deb5d9a7c" + "url": "https://api.github.com/repos/allure-framework/allure-phpunit/zipball/45504aeba41304cf155a898fa9ac1aae79f4a089", + "reference": "45504aeba41304cf155a898fa9ac1aae79f4a089", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-page-cache": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "allure-framework/allure-php-api": "~1.1.0", + "mikey179/vfsstream": "1.*", + "php": ">=7.0.0", + "phpunit/phpunit": ">=6.0.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Indexer" - ] - ] + "type": "library", + "autoload": { + "psr-0": { + "Yandex": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ivan Krutov", + "email": "vania-pooh@yandex-team.ru", + "role": "Developer" + } + ], + "description": "A PHPUnit adapter for Allure report.", + "homepage": "http://allure.qatools.ru/", + "keywords": [ + "allure", + "attachments", + "cases", + "phpunit", + "report", + "steps", + "testing" + ], + "time": "2017-11-03T13:08:21+00:00" }, { - "name": "magento/module-integration", - "version": "0.74.0-beta2", + "name": "behat/gherkin", + "version": "v4.6.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-integration-0.74.0-beta2.zip", - "reference": null, - "shasum": "8e9a7d4df606513a67a649f63abdd31557061665" + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta2", - "magento/module-backend": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-user": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.1" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Integration" - ] - ] + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2019-01-16T14:22:17+00:00" }, { - "name": "magento/module-layered-navigation", - "version": "0.74.0-beta2", + "name": "codeception/codeception", + "version": "2.4.5", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-layered-navigation-0.74.0-beta2.zip", - "reference": null, - "shasum": "a20af59f1ffcf9565e2fab9ead134ee129bdcc8d" + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5fee32d5c82791548931cbc34806b4de6aa1abfc", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", + "codeception/stub": "^2.0", + "ext-json": "*", + "ext-mbstring": "*", + "facebook/webdriver": ">=1.1.3 <2.0", + "guzzlehttp/guzzle": ">=4.1.4 <7.0", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" }, - "type": "magento2-module", + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/LayeredNavigation" - ] - ] + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2018-08-01T07:21:49+00:00" }, { - "name": "magento/module-media-storage", - "version": "0.74.0-beta2", + "name": "codeception/phpunit-wrapper", + "version": "6.6.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-media-storage-0.74.0-beta2.zip", - "reference": null, - "shasum": "7c1b9232bf83b123c2a3c6b03973bd637f34e0f6" + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c", + "reference": "d0da25a98bcebeb15d97c2ad3b2de6166b6e7a0c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "phpunit/php-code-coverage": ">=4.0.4 <6.0", + "phpunit/phpunit": ">=6.5.13 <7.0", + "sebastian/comparator": ">=1.2.4 <3.0", + "sebastian/diff": ">=1.4 <4.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/MediaStorage" - ] - ] + "replace": { + "codeception/phpunit-wrapper": "*" + }, + "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^3.0" }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src\\" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2019-02-26T20:47:39+00:00" }, { - "name": "magento/module-msrp", - "version": "0.74.0-beta2", + "name": "codeception/stub", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "853657f988942f7afb69becf3fd0059f192c705a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-msrp-0.74.0-beta2.zip", - "reference": null, - "shasum": "16bda583d7a876262fdc740c9513a4fb1739c3eb" + "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", + "reference": "853657f988942f7afb69becf3fd0059f192c705a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-bundle": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-downloadable": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-grouped-product": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Msrp" - ] - ] + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2019-03-02T15:35:10+00:00" }, { - "name": "magento/module-multishipping", - "version": "0.74.0-beta2", + "name": "consolidation/annotated-command", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "512a2e54c98f3af377589de76c43b24652bcb789" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-multishipping-0.74.0-beta2.zip", - "reference": null, - "shasum": "53b01c1acc039dec9e603681264a450f708d5fb6" + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789", + "reference": "512a2e54c98f3af377589de76c43b24652bcb789", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-payment": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "consolidation/output-formatters": "^3.4", + "php": ">=5.4.5", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Multishipping" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "time": "2019-03-08T16:55:03+00:00" }, { - "name": "magento/module-newsletter", - "version": "0.74.0-beta2", + "name": "consolidation/config", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-newsletter-0.74.0-beta2.zip", - "reference": null, - "shasum": "a9e11c0ab106ea0aec8709a5a17169be826680c3" + "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-cron": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-email": "0.74.0-beta2", - "magento/module-require-js": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Newsletter" - ] - ] + "scenarios": { + "symfony4": { + "require-dev": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require-dev": { + "symfony/console": "^2.8", + "symfony/event-dispatcher": "^2.8", + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2019-03-03T19:37:04+00:00" }, { - "name": "magento/module-offline-payments", - "version": "0.74.0-beta2", + "name": "consolidation/log", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-offline-payments-0.74.0-beta2.zip", - "reference": null, - "shasum": "d3b7cd008994bef7456496094f397c82a9f3a8ef" + "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-payment": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.4.5", + "psr/log": "^1.0", + "symfony/console": "^2.8|^3|^4" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/OfflinePayments" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", + "time": "2019-01-01T17:30:51+00:00" }, { - "name": "magento/module-offline-shipping", - "version": "0.74.0-beta2", + "name": "consolidation/output-formatters", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "0881112642ad9059071f13f397f571035b527cb9" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-offline-shipping-0.74.0-beta2.zip", - "reference": null, - "shasum": "94f097652ea87bc0504837366a51b7065ca864d4" + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0881112642ad9059071f13f397f571035b527cb9", + "reference": "0881112642ad9059071f13f397f571035b527cb9", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-sales-rule": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, - "type": "magento2-module", + "require-dev": { + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^5.7.27", + "squizlabs/php_codesniffer": "^2.7", + "symfony/var-dumper": "^2.8|^3|^4", + "victorjonsson/markdowndocs": "^1.3" + }, + "suggest": { + "symfony/var-dumper": "For using the var_dump formatter" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/OfflineShipping" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^6" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony3": { + "require": { + "symfony/console": "^3.4", + "symfony/finder": "^3.4", + "symfony/var-dumper": "^3.4" + }, + "config": { + "platform": { + "php": "5.6.32" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "time": "2019-03-14T03:45:44+00:00" }, { - "name": "magento/module-page-cache", - "version": "0.74.0-beta2", + "name": "consolidation/robo", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/consolidation/Robo.git", + "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-page-cache-0.74.0-beta2.zip", - "reference": null, - "shasum": "9db7b9c8d035e0eb3f619d37c8ff439b9f225e8f" + "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345", + "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "consolidation/annotated-command": "^2.10.2", + "consolidation/config": "^1.2", + "consolidation/log": "~1", + "consolidation/output-formatters": "^3.1.13", + "consolidation/self-update": "^1", + "grasmash/yaml-expander": "^1.3", + "league/container": "^2.2", + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "g1a/composer-test-scenarios": "^3", + "goaop/framework": "~2.1.2", + "goaop/parser-reflection": "^1.1.0", + "natxet/cssmin": "3.0.4", + "nikic/php-parser": "^3.1.5", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.4", + "php-coveralls/php-coveralls": "^1", + "phpunit/php-code-coverage": "~2|~4", + "squizlabs/php_codesniffer": "^2.8" + }, + "suggest": { + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "natxet/CssMin": "For minifying CSS files in taskMinify", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." }, - "type": "magento2-module", + "bin": [ + "robo" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/PageCache" - ] - ] + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "remove": [ + "goaop/framework" + ], + "config": { + "platform": { + "php": "5.5.9" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Robo\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "Modern task runner", + "time": "2019-03-19T18:07:19+00:00" }, { - "name": "magento/module-payment", - "version": "0.74.0-beta2", + "name": "consolidation/self-update", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/self-update.git", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-payment-0.74.0-beta2.zip", - "reference": null, - "shasum": "9da0894c984887cf2e3c6c5a32f84616867495ae" + "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-centinel": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/filesystem": "^2.5|^3|^4" }, - "type": "magento2-module", + "bin": [ + "scripts/release" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Payment" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "SelfUpdate\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + }, + { + "name": "Alexander Menk", + "email": "menk@mestrona.net" + } + ], + "description": "Provides a self:update command for Symfony Console applications.", + "time": "2018-10-28T01:52:03+00:00" }, { - "name": "magento/module-persistent", - "version": "0.74.0-beta2", + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-persistent-0.74.0-beta2.zip", - "reference": null, - "shasum": "891f5f3f5c23dd19e2f815754f4c5e8b4da6af1c" + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-cron": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-page-cache": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.2" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Persistent" - ] - ] + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" }, { - "name": "magento/module-product-alert", - "version": "0.74.0-beta2", + "name": "doctrine/annotations", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "53120e0eb10355388d6ccbe462f1fea34ddadb24" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-product-alert-0.74.0-beta2.zip", - "reference": null, - "shasum": "43292b34d4078dddc73b7bb4bcdb889292b578a6" + "url": "https://api.github.com/repos/doctrine/annotations/zipball/53120e0eb10355388d6ccbe462f1fea34ddadb24", + "reference": "53120e0eb10355388d6ccbe462f1fea34ddadb24", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "doctrine/lexer": "1.*", + "php": "^7.1" }, - "type": "magento2-module", + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/ProductAlert" - ] - ] + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2019-03-25T19:12:02+00:00" }, { - "name": "magento/module-quote", - "version": "0.74.0-beta2", + "name": "doctrine/collections", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "d2ae4ef05e25197343b6a39bae1d3c427a2f6956" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-quote-0.74.0-beta2.zip", - "reference": null, - "shasum": "8c3033317c359e5fc20e9308ed796ae6760fa22f" + "url": "https://api.github.com/repos/doctrine/collections/zipball/d2ae4ef05e25197343b6a39bae1d3c427a2f6956", + "reference": "d2ae4ef05e25197343b6a39bae1d3c427a2f6956", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta2", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-catalog-rule": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-payment": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^7.1.3" }, - "type": "magento2-module", + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.2.2" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Quote" - ] - ] + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "time": "2019-03-25T19:03:48+00:00" }, { - "name": "magento/module-reports", - "version": "0.74.0-beta2", + "name": "doctrine/instantiator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "a2c590166b2133a4633738648b6b064edae0814a" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-reports-0.74.0-beta2.zip", - "reference": null, - "shasum": "38b1c0ddfbd756666cb0bc05e687d01ced515464" + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-downloadable": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-review": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-sales-rule": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^7.1" }, - "type": "magento2-module", + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Reports" - ] - ] + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-03-17T17:37:11+00:00" }, { - "name": "magento/module-require-js", - "version": "0.74.0-beta2", + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-require-js-0.74.0-beta2.zip", - "reference": null, - "shasum": "6e94b63070fd1c174ab55c109d384d5b3bb04131" + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.2" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/RequireJs" - ] - ] + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" }, { - "name": "magento/module-review", - "version": "0.74.0-beta2", + "name": "epfremme/swagger-php", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/epfremmer/swagger-php.git", + "reference": "eee28a442b7e6220391ec953d3c9b936354f23bc" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-review-0.74.0-beta2.zip", - "reference": null, - "shasum": "45385eac2767e9165bfd88bcbc6a69dccca29f38" + "url": "https://api.github.com/repos/epfremmer/swagger-php/zipball/eee28a442b7e6220391ec953d3c9b936354f23bc", + "reference": "eee28a442b7e6220391ec953d3c9b936354f23bc", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-newsletter": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "doctrine/annotations": "^1.2", + "doctrine/collections": "^1.3", + "jms/serializer": "^1.1", + "php": ">=5.5", + "phpoption/phpoption": "^1.1", + "symfony/yaml": "^2.7|^3.1" }, - "suggest": { - "magento/module-cookie": "0.74.0-beta2" + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "~4.8|~5.0", + "satooshi/php-coveralls": "^1.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Review" - ] - ] + "type": "package", + "autoload": { + "psr-4": { + "Epfremme\\Swagger\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Edward Pfremmer", + "email": "epfremme@nerdery.com" + } + ], + "description": "Library for parsing swagger documentation into PHP entities for use in testing and code generation", + "time": "2016-09-26T17:24:17+00:00" }, { - "name": "magento/module-rss", - "version": "0.74.0-beta2", + "name": "facebook/webdriver", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/facebook/php-webdriver.git", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-rss-0.74.0-beta2.zip", - "reference": null, - "shasum": "0706c2102a0003e2f214c35b77c1e628519b727a" + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" }, - "type": "magento2-module", + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "php-coveralls/php-coveralls": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Rss" - ] - ] + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "time": "2018-05-16T17:37:13+00:00" }, { - "name": "magento/module-rule", - "version": "0.74.0-beta2", + "name": "flow/jsonpath", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/FlowCommunications/JSONPath.git", + "reference": "f0222818d5c938e4ab668ab2e2c079bd51a27112" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-rule-0.74.0-beta2.zip", - "reference": null, - "shasum": "762edf4eabfe082b589b09bcf47a3ef2ac8a7f35" + "url": "https://api.github.com/repos/FlowCommunications/JSONPath/zipball/f0222818d5c938e4ab668ab2e2c079bd51a27112", + "reference": "f0222818d5c938e4ab668ab2e2c079bd51a27112", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.4.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Rule" - ] - ] + "require-dev": { + "peekmo/jsonpath": "dev-master", + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Flow\\JSONPath": "src/", + "Flow\\JSONPath\\Test": "tests/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Stephen Frank", + "email": "stephen@flowsa.com" + } + ], + "description": "JSONPath implementation for parsing, searching and flattening arrays", + "time": "2018-03-04T16:39:47+00:00" }, { - "name": "magento/module-sales", - "version": "0.74.0-beta2", + "name": "friendsofphp/php-cs-fixer", + "version": "v2.13.3", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "38d6f2e9be2aa80bf3c7365612af7f9eb9078719" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sales-0.74.0-beta2.zip", - "reference": null, - "shasum": "bf591f1f3033aa2fd3fe8bfb2732a6e7b81a499c" + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/38d6f2e9be2aa80bf3c7365612af7f9eb9078719", + "reference": "38d6f2e9be2aa80bf3c7365612af7f9eb9078719", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta2", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-email": "0.74.0-beta2", - "magento/module-gift-message": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-payment": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-reports": "0.74.0-beta2", - "magento/module-sales-rule": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "magento/module-wishlist": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || >=7.0 <7.3", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6", + "symfony/event-dispatcher": "^3.0 || ^4.0", + "symfony/filesystem": "^3.0 || ^4.0", + "symfony/finder": "^3.0 || ^4.0", + "symfony/options-resolver": "^3.0 || ^4.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0", + "symfony/stopwatch": "^3.0 || ^4.0" + }, + "conflict": { + "hhvm": "*" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Sales" - ] + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.0.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.0.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1", + "phpunitgoodpractices/traits": "^1.5.1", + "symfony/phpunit-bridge": "^4.0" + }, + "suggest": { + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/TestCase.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "time": "2019-01-04T18:24:28+00:00" }, { - "name": "magento/module-sales-rule", - "version": "0.74.0-beta2", + "name": "fzaninotto/faker", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sales-rule-0.74.0-beta2.zip", - "reference": null, - "shasum": "fdb556db9915f50b0bbbc3fd5f004c21fdf144ac" + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-rule": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-payment": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-reports": "0.74.0-beta2", - "magento/module-rule": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.3.3 || ^7.0" }, - "type": "magento2-module", + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^1.5" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/SalesRule" - ] - ] + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2018-07-12T10:23:15+00:00" }, { - "name": "magento/module-search", - "version": "0.74.0-beta2", + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-search-0.74.0-beta2.zip", - "reference": null, - "shasum": "a9605f79153be5e6206e269161ec6b0fe27b4b1a" + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog-search": "0.74.0-beta2", - "magento/module-reports": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" }, - "type": "magento2-module", + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Search" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" }, { - "name": "magento/module-sendfriend", - "version": "0.74.0-beta2", + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sendfriend-0.74.0-beta2.zip", - "reference": null, - "shasum": "3830393608a4c34ef05eb26de6543ffe3739e1f4" + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" }, - "type": "magento2-module", + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Sendfriend" - ] - ] + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" }, { - "name": "magento/module-shipping", - "version": "0.74.0-beta2", + "name": "jms/metadata", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "e5854ab1aa643623dc64adde718a8eec32b957a8" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-shipping-0.74.0-beta2.zip", - "reference": null, - "shasum": "0793baf12096494d141c3e6419f53a9c57aef0df" + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/e5854ab1aa643623dc64adde718a8eec32b957a8", + "reference": "e5854ab1aa643623dc64adde718a8eec32b957a8", + "shasum": "" }, "require": { - "ext-gd": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-contact": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-payment": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0" }, - "suggest": { - "magento/module-fedex": "0.74.0-beta2", - "magento/module-ups": "0.74.0-beta2" + "require-dev": { + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Shipping" - ] - ] + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2018-10-26T12:40:10+00:00" }, { - "name": "magento/module-sitemap", - "version": "0.74.0-beta2", + "name": "jms/parser-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-sitemap-0.74.0-beta2.zip", - "reference": null, - "shasum": "55e734ce8228a6e0b39eccb1829ae617845f9e53" + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-url-rewrite": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "phpoption/phpoption": ">=0.9,<2.0-dev" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Sitemap" - ] - ] + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache2" ], - "description": "N/A" + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" }, { - "name": "magento/module-store", - "version": "0.74.0-beta2", + "name": "jms/serializer", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "00863e1d55b411cc33ad3e1de09a4c8d3aae793c" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-store-0.74.0-beta2.zip", - "reference": null, - "shasum": "b53f0f39a5eceb85e0b28bcf32d5bb68314b3027" + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/00863e1d55b411cc33ad3e1de09a4c8d3aae793c", + "reference": "00863e1d55b411cc33ad3e1de09a4c8d3aae793c", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "^1.3", + "jms/parser-lib": "1.*", + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" }, - "type": "magento2-module", + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0" + }, + "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Store" - ] - ] + "branch-alias": { + "dev-1.x": "1.13-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2018-07-25T13:58:54+00:00" }, { - "name": "magento/module-tax", - "version": "0.74.0-beta2", + "name": "league/container", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-tax-0.74.0-beta2.zip", - "reference": null, - "shasum": "ed22d2db556957de4ab5406d4d0edce811855b9b" + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-reports": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" }, - "type": "magento2-module", + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Tax" - ] - ] + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Container\\": "src" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ], + "time": "2017-05-10T09:20:27+00:00" }, { - "name": "magento/module-tax-import-export", - "version": "0.74.0-beta2", + "name": "lusitanian/oauth", + "version": "v0.8.11", + "source": { + "type": "git", + "url": "https://github.com/Lusitanian/PHPoAuthLib.git", + "reference": "fc11a53db4b66da555a6a11fce294f574a8374f9" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-tax-import-export-0.74.0-beta2.zip", - "reference": null, - "shasum": "90716decbf4c0eb8fb29523530471fc2f8fbb426" + "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/fc11a53db4b66da555a6a11fce294f574a8374f9", + "reference": "fc11a53db4b66da555a6a11fce294f574a8374f9", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "3.7.*", + "predis/predis": "0.8.*@dev", + "squizlabs/php_codesniffer": "2.*", + "symfony/http-foundation": "~2.1" + }, + "suggest": { + "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", + "predis/predis": "Allows using the Redis storage backend.", + "symfony/http-foundation": "Allows using the Symfony Session storage backend." + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/TaxImportExport" - ] - ] + "branch-alias": { + "dev-master": "0.1-dev" + } + }, + "autoload": { + "psr-0": { + "OAuth": "src", + "OAuth\\Unit": "tests" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "David Desberg", + "email": "david@daviddesberg.com" + }, + { + "name": "Elliot Chance", + "email": "elliotchance@gmail.com" + }, + { + "name": "Pieter Hordijk", + "email": "info@pieterhordijk.com" + } + ], + "description": "PHP 5.3+ oAuth 1/2 Library", + "keywords": [ + "Authentication", + "authorization", + "oauth", + "security" + ], + "time": "2018-02-14T22:37:14+00:00" }, { - "name": "magento/module-theme", - "version": "0.74.0-beta2", + "name": "magento/magento2-functional-testing-framework", + "version": "2.3.14", + "source": { + "type": "git", + "url": "https://github.com/magento/magento2-functional-testing-framework.git", + "reference": "b4002b3fe53884895921b44cf519d42918e3c7c6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-theme-0.74.0-beta2.zip", - "reference": null, - "shasum": "4754e71f25664ca7d010351e63c8c017e3c649dd" + "url": "https://api.github.com/repos/magento/magento2-functional-testing-framework/zipball/b4002b3fe53884895921b44cf519d42918e3c7c6", + "reference": "b4002b3fe53884895921b44cf519d42918e3c7c6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-media-storage": "0.74.0-beta2", - "magento/module-require-js": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-widget": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "allure-framework/allure-codeception": "~1.3.0", + "codeception/codeception": "~2.3.4 || ~2.4.0 ", + "consolidation/robo": "^1.0.0", + "epfremme/swagger-php": "^2.0", + "ext-curl": "*", + "flow/jsonpath": ">0.2", + "fzaninotto/faker": "^1.6", + "monolog/monolog": "^1.0", + "mustache/mustache": "~2.5", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0|~7.2.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0", + "vlucas/phpdotenv": "^2.4" }, - "suggest": { - "magento/module-translation": "0.74.0-beta2" + "require-dev": { + "brainmaestro/composer-git-hooks": "^2.3", + "codacy/coverage": "^1.4", + "codeception/aspect-mock": "^3.0", + "doctrine/cache": "<1.7.0", + "goaop/framework": "2.2.0", + "php-coveralls/php-coveralls": "^1.0", + "phpmd/phpmd": "^2.6.0", + "phpunit/phpunit": "~6.5.0 || ~7.0.0", + "rregeer/phpunit-coverage-check": "^0.1.4", + "sebastian/phpcpd": "~3.0 || ~4.0", + "squizlabs/php_codesniffer": "~3.2", + "symfony/stopwatch": "~3.4.6" }, - "type": "magento2-module", + "bin": [ + "bin/mftf" + ], + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Theme" - ] - ] + "hooks": { + "pre-push": "bin/all-checks" + } + }, + "autoload": { + "files": [ + "src/Magento/FunctionalTestingFramework/_bootstrap.php" + ], + "psr-4": { + "Magento\\FunctionalTestingFramework\\": "src/Magento/FunctionalTestingFramework", + "MFTF\\": "dev/tests/functional/MFTF" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "AGPL-3.0" ], - "description": "N/A" + "description": "Magento2 Functional Testing Framework", + "keywords": [ + "automation", + "functional", + "magento", + "testing" + ], + "time": "2019-02-19T16:03:22+00:00" }, { - "name": "magento/module-translation", - "version": "0.74.0-beta2", + "name": "mikey179/vfsStream", + "version": "v1.6.6", + "source": { + "type": "git", + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-translation-0.74.0-beta2.zip", - "reference": null, - "shasum": "68e633ff0380bb3d9660c17149935a0cdeda4edb" + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/095238a0711c974ae5b4ebf4c4534a23f3f6c99d", + "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-developer": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "~4.5" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Translation" - ] - ] + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } + ], + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "time": "2019-04-08T13:54:32+00:00" }, { - "name": "magento/module-ui", - "version": "0.74.0-beta2", + "name": "moontoast/math", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/moontoast-math.git", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-ui-0.74.0-beta2.zip", - "reference": null, - "shasum": "6edb28f5c771ccb9e747ea71922ecbea80a32391" + "url": "https://api.github.com/repos/ramsey/moontoast-math/zipball/c2792a25df5cad4ff3d760dd37078fc5b6fccc79", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-bcmath": "*", + "php": ">=5.3.3" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Ui" - ] - ] + "require-dev": { + "jakub-onderka/php-parallel-lint": "^0.9.0", + "phpunit/phpunit": "^4.7|>=5.0 <5.4", + "satooshi/php-coveralls": "^0.6.1", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Moontoast\\Math\\": "src/Moontoast/Math/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache-2.0" ], - "description": "N/A" + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A mathematics library, providing functionality for large numbers", + "homepage": "https://github.com/ramsey/moontoast-math", + "keywords": [ + "bcmath", + "math" + ], + "time": "2017-02-16T16:54:46+00:00" }, { - "name": "magento/module-ups", - "version": "0.74.0-beta2", + "name": "mustache/mustache", + "version": "v2.12.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/mustache.php.git", + "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-ups-0.74.0-beta2.zip", - "reference": null, - "shasum": "70a8139468124067bfb07bf1c071638484136883" + "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/fe8fe72e9d580591854de404cc59a1b83ca4d19e", + "reference": "fe8fe72e9d580591854de404cc59a1b83ca4d19e", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.2.4" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Ups" - ] - ] + "require-dev": { + "friendsofphp/php-cs-fixer": "~1.11", + "phpunit/phpunit": "~3.7|~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Mustache": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "A Mustache implementation in PHP.", + "homepage": "https://github.com/bobthecow/mustache.php", + "keywords": [ + "mustache", + "templating" + ], + "time": "2017-07-11T12:54:05+00:00" }, { - "name": "magento/module-url-rewrite", - "version": "0.74.0-beta2", + "name": "myclabs/deep-copy", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-url-rewrite-0.74.0-beta2.zip", - "reference": null, - "shasum": "8e781525600ff9d43383816283807ebcff07a8bf" + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-url-rewrite": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-cms-url-rewrite": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^7.1" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/UrlRewrite" - ] + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2019-04-07T13:18:21+00:00" }, { - "name": "magento/module-user", - "version": "0.74.0-beta2", + "name": "pdepend/pdepend", + "version": "2.5.2", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-user-0.74.0-beta2.zip", - "reference": null, - "shasum": "023375251bc6104b31984e4509d01907f6661c6b" + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta2", - "magento/module-backend": "0.74.0-beta2", - "magento/module-integration": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4", + "symfony/dependency-injection": "^2.3.0|^3|^4", + "symfony/filesystem": "^2.3.0|^3|^4" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/User" - ] - ] + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "description": "Official version of pdepend to be handled with Composer", + "time": "2017-12-13T13:21:38+00:00" }, { - "name": "magento/module-usps", - "version": "0.74.0-beta2", + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-usps-0.74.0-beta2.zip", - "reference": null, - "shasum": "22eecac7075ca9c6ecaa08e482b59f5c29ba465c" + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" }, "require": { - "lib-libxml": "*", - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-config": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-shipping": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Usps" - ] + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" }, { - "name": "magento/module-variable", - "version": "0.74.0-beta2", + "name": "phar-io/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-variable-0.74.0-beta2.zip", - "reference": null, - "shasum": "73cb1fdc0ff84722f854736a4016e3f5fa331ec1" + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-email": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.4.11|~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Variable" - ] + "type": "library", + "autoload": { + "classmap": [ + "src/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" }, { - "name": "magento/module-version", - "version": "0.74.0-beta2", + "name": "php-cs-fixer/diff", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-version-0.74.0-beta2.zip", - "reference": null, - "shasum": "de77cb875f16d6eec9c785df117eddf469bec459" + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "php": "^5.6 || ^7.0" }, - "type": "magento2-module", - "extra": { - "map": [ - [ - "*", - "Magento/Version" - ] + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2018-02-15T16:58:55+00:00" }, { - "name": "magento/module-webapi", - "version": "0.74.0-beta2", + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-webapi-0.74.0-beta2.zip", - "reference": null, - "shasum": "c189f264c1bb186e052a2ed375b4b9e00295f3a6" + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-authorization": "0.74.0-beta2", - "magento/module-backend": "0.74.0-beta2", - "magento/module-integration": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "phpoption/phpoption": "1.*" }, - "suggest": { - "magento/module-user": "0.74.0-beta2" - }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Webapi" - ] - ] + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache2" ], - "description": "N/A" + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17T12:39:23+00:00" }, { - "name": "magento/module-weee", - "version": "0.74.0-beta2", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-weee-0.74.0-beta2.zip", - "reference": null, - "shasum": "cc524f7211673263beb1f4c6b96bf32ffa04527b" + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-directory": "0.74.0-beta2", - "magento/module-eav": "0.74.0-beta2", - "magento/module-quote": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-tax": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": ">=5.5" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Weee" + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" ] - ] + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" }, { - "name": "magento/module-widget", - "version": "0.74.0-beta2", + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-widget-0.74.0-beta2.zip", - "reference": null, - "shasum": "f23668007563d5b7f9122e3eb453359fab9d1249" + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-cms": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-variable": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" }, - "type": "magento2-module", + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Widget" + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" ] - ] + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" }, { - "name": "magento/module-wishlist", - "version": "0.74.0-beta2", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_module-wishlist-0.74.0-beta2.zip", - "reference": null, - "shasum": "fca56783501ad2b8f2c583350cb038f8191634e1" + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/module-backend": "0.74.0-beta2", - "magento/module-catalog": "0.74.0-beta2", - "magento/module-catalog-inventory": "0.74.0-beta2", - "magento/module-checkout": "0.74.0-beta2", - "magento/module-customer": "0.74.0-beta2", - "magento/module-grouped-product": "0.74.0-beta2", - "magento/module-rss": "0.74.0-beta2", - "magento/module-sales": "0.74.0-beta2", - "magento/module-store": "0.74.0-beta2", - "magento/module-theme": "0.74.0-beta2", - "magento/module-ui": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, - "suggest": { - "magento/module-bundle": "0.74.0-beta2", - "magento/module-configurable-product": "0.74.0-beta2", - "magento/module-cookie": "0.74.0-beta2", - "magento/module-downloadable": "0.74.0-beta2" + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, - "type": "magento2-module", + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/Wishlist" + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" ] - ] + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "description": "N/A" + "time": "2017-07-14T14:27:02+00:00" }, { - "name": "magento/product-community-edition", - "version": "0.74.0-beta2", + "name": "phpmd/phpmd", + "version": "2.6.0", "source": { "type": "git", - "url": "https://github.com/magento/magento2-community-edition.git", - "reference": "830bba759a180a97375275013b974c4606805466" + "url": "https://github.com/phpmd/phpmd.git", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/magento2-community-edition/zipball/830bba759a180a97375275013b974c4606805466", - "reference": "830bba759a180a97375275013b974c4606805466", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", "shasum": "" }, "require": { - "composer/composer": "1.0.0-alpha8", - "magento/framework": "self.version", - "magento/language-de_de": "self.version", - "magento/language-en_us": "self.version", - "magento/language-es_es": "self.version", - "magento/language-fr_fr": "self.version", - "magento/language-nl_nl": "self.version", - "magento/language-pt_br": "self.version", - "magento/language-zh_cn": "self.version", - "magento/magento-composer-installer": "*", - "magento/magento2-base": "self.version", - "magento/module-admin-notification": "self.version", - "magento/module-authorization": "self.version", - "magento/module-backend": "self.version", - "magento/module-backup": "self.version", - "magento/module-bundle": "self.version", - "magento/module-captcha": "self.version", - "magento/module-catalog": "self.version", - "magento/module-catalog-import-export": "self.version", - "magento/module-catalog-inventory": "self.version", - "magento/module-catalog-rule": "self.version", - "magento/module-catalog-search": "self.version", - "magento/module-catalog-url-rewrite": "self.version", - "magento/module-catalog-widget": "self.version", - "magento/module-centinel": "self.version", - "magento/module-checkout": "self.version", - "magento/module-checkout-agreements": "self.version", - "magento/module-cms": "self.version", - "magento/module-cms-url-rewrite": "self.version", - "magento/module-config": "self.version", - "magento/module-configurable-import-export": "self.version", - "magento/module-configurable-product": "self.version", - "magento/module-contact": "self.version", - "magento/module-cookie": "self.version", - "magento/module-cron": "self.version", - "magento/module-currency-symbol": "self.version", - "magento/module-customer": "self.version", - "magento/module-customer-import-export": "self.version", - "magento/module-developer": "self.version", - "magento/module-dhl": "self.version", - "magento/module-directory": "self.version", - "magento/module-downloadable": "self.version", - "magento/module-eav": "self.version", - "magento/module-email": "self.version", - "magento/module-fedex": "self.version", - "magento/module-gift-message": "self.version", - "magento/module-google-adwords": "self.version", - "magento/module-google-analytics": "self.version", - "magento/module-google-optimizer": "self.version", - "magento/module-google-shopping": "self.version", - "magento/module-grouped-import-export": "self.version", - "magento/module-grouped-product": "self.version", - "magento/module-import-export": "self.version", - "magento/module-indexer": "self.version", - "magento/module-integration": "self.version", - "magento/module-layered-navigation": "self.version", - "magento/module-media-storage": "self.version", - "magento/module-msrp": "self.version", - "magento/module-multishipping": "self.version", - "magento/module-newsletter": "self.version", - "magento/module-offline-payments": "self.version", - "magento/module-offline-shipping": "self.version", - "magento/module-page-cache": "self.version", - "magento/module-payment": "self.version", - "magento/module-persistent": "self.version", - "magento/module-product-alert": "self.version", - "magento/module-quote": "self.version", - "magento/module-reports": "self.version", - "magento/module-require-js": "self.version", - "magento/module-review": "self.version", - "magento/module-rss": "self.version", - "magento/module-rule": "self.version", - "magento/module-sales": "self.version", - "magento/module-sales-rule": "self.version", - "magento/module-search": "self.version", - "magento/module-sendfriend": "self.version", - "magento/module-shipping": "self.version", - "magento/module-sitemap": "self.version", - "magento/module-store": "self.version", - "magento/module-tax": "self.version", - "magento/module-tax-import-export": "self.version", - "magento/module-theme": "self.version", - "magento/module-translation": "self.version", - "magento/module-ui": "self.version", - "magento/module-ups": "self.version", - "magento/module-url-rewrite": "self.version", - "magento/module-user": "self.version", - "magento/module-usps": "self.version", - "magento/module-variable": "self.version", - "magento/module-version": "self.version", - "magento/module-webapi": "self.version", - "magento/module-weee": "self.version", - "magento/module-widget": "self.version", - "magento/module-wishlist": "self.version", - "magento/theme-adminhtml-backend": "self.version", - "magento/theme-frontend-blank": "self.version", - "magento/theme-frontend-luma": "self.version", - "magento/zendframework1": "1.12.10", - "monolog/monolog": "1.11.0", - "oyejorge/less.php": "1.7.0.3", - "php": "~5.5.0|~5.6.0|~7.0.0", - "tubalmartin/cssmin": "2.4.8-p4", - "zendframework/zend-code": "2.3.1", - "zendframework/zend-config": "2.3.1", - "zendframework/zend-console": "2.3.1", - "zendframework/zend-di": "2.3.1", - "zendframework/zend-eventmanager": "2.3.1", - "zendframework/zend-form": "2.3.1", - "zendframework/zend-http": "2.3.1", - "zendframework/zend-json": "2.3.1", - "zendframework/zend-log": "2.3.1", - "zendframework/zend-modulemanager": "2.3.1", - "zendframework/zend-mvc": "2.3.1", - "zendframework/zend-serializer": "2.3.1", - "zendframework/zend-server": "2.3.1", - "zendframework/zend-servicemanager": "2.3.1", - "zendframework/zend-soap": "2.3.1", - "zendframework/zend-stdlib": "2.3.1", - "zendframework/zend-text": "2.3.1", - "zendframework/zend-uri": "2.3.1", - "zendframework/zend-validator": "2.3.1", - "zendframework/zend-view": "2.3.1" + "ext-xml": "*", + "pdepend/pdepend": "^2.5", + "php": ">=5.3.9" }, "require-dev": { - "ext-ctype": "*", - "ext-curl": "*", - "ext-dom": "*", - "ext-gd": "*", - "ext-hash": "*", - "ext-iconv": "*", - "ext-intl": "*", - "ext-mcrypt": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "fabpot/php-cs-fixer": "~1.2", - "lib-libxml": "*", - "lusitanian/oauth": "~0.3", - "pdepend/pdepend": "2.0.6", - "phpmd/phpmd": "@stable", - "phpunit/phpunit": "4.1.0", - "sjparkinson/static-review": "~4.1", - "squizlabs/php_codesniffer": "1.5.3" + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" }, + "bin": [ + "src/bin/phpmd" + ], "type": "project", "autoload": { - "psr-4": { - "Magento\\Framework\\": "lib/internal/Magento/Framework/", - "Magento\\Setup\\": "setup/src/Magento/Setup/" + "psr-0": { + "PHPMD\\": "src/main/php" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } ], - "description": "eCommerce Platform for Growth (Community Edition)", - "time": "2015-03-27 15:47:02" + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "time": "2017-01-20T14:41:10+00:00" }, { - "name": "magento/sample-module-minimal", - "version": "1.0.0", + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_sample-module-minimal-1.0.0.zip", - "reference": null, - "shasum": "8c8bd3ee4907a6a91bffeac177628bd4f238d6e4" + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" }, "require": { - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "php": ">=5.3.0" }, - "type": "magento2-module", + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "Magento/SampleMinimal" - ] - ] + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" ], - "description": "A minimal skeleton Magento 2 module" + "time": "2015-07-25T16:39:46+00:00" }, { - "name": "magento/theme-adminhtml-backend", - "version": "0.74.0-beta2", + "name": "phpspec/prophecy", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_theme-adminhtml-backend-0.74.0-beta2.zip", - "reference": null, - "shasum": "d8bd8d6b70d65d6f38751f7e9f9cbbebf751c97c" + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, - "type": "magento2-theme", + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", "extra": { - "map": [ - [ - "*", - "adminhtml/Magento/backend" - ] - ] + "branch-alias": { + "dev-master": "1.8.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "MIT" ], - "description": "N/A" + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2018-08-05T17:53:17+00:00" }, { - "name": "magento/theme-frontend-blank", - "version": "0.74.0-beta2", + "name": "phpunit/php-code-coverage", + "version": "5.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + }, "dist": { "type": "zip", - "url": "https://repo.magento.com/_packages/magento_theme-frontend-blank-0.74.0-beta2.zip", - "reference": null, - "shasum": "e298ae05894e97ba3d94a87b77086dfe0c2d974a" + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "shasum": "" }, "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "php": "~5.5.0|~5.6.0" - }, - "type": "magento2-theme", - "extra": { - "map": [ - [ - "*", - "frontend/Magento/blank" - ] - ] + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], - "description": "N/A" - }, - { - "name": "magento/theme-frontend-luma", - "version": "0.74.0-beta2", - "dist": { - "type": "zip", - "url": "https://repo.magento.com/_packages/magento_theme-frontend-luma-0.74.0-beta2.zip", - "reference": null, - "shasum": "82e29e8fd8d928c33f064fb431d06f3968f37327" + "require-dev": { + "phpunit/phpunit": "^6.0" }, - "require": { - "magento/framework": "0.74.0-beta2", - "magento/magento-composer-installer": "*", - "magento/theme-frontend-blank": "0.74.0-beta2", - "php": "~5.5.0|~5.6.0" + "suggest": { + "ext-xdebug": "^2.5.5" }, - "type": "magento2-theme", + "type": "library", "extra": { - "map": [ - [ - "*", - "frontend/Magento/luma" - ] + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0", - "AFL-3.0" + "BSD-3-Clause" ], - "description": "N/A" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-04-06T15:36:58+00:00" }, { - "name": "magento/zendframework1", - "version": "1.12.10", + "name": "phpunit/php-file-iterator", + "version": "1.4.5", "source": { "type": "git", - "url": "https://github.com/magento/zf1.git", - "reference": "d1e5cd8c9f83229bcdd9bb485c3ce25259c77884" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/magento/zf1/zipball/d1e5cd8c9f83229bcdd9bb485c3ce25259c77884", - "reference": "d1e5cd8c9f83229bcdd9bb485c3ce25259c77884", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { - "php": ">=5.2.11" - }, - "require-dev": { - "phpunit/dbunit": "1.3.*", - "phpunit/phpunit": "3.7.*" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-0": { - "Zend_": "library/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "library/" - ], "license": [ "BSD-3-Clause" ], - "description": "Magento Zend Framework 1", - "homepage": "http://framework.zend.com/", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "ZF1", - "framework" + "filesystem", + "iterator" ], - "time": "2015-02-06 17:25:45" + "time": "2017-11-27T13:52:08+00:00" }, { - "name": "monolog/monolog", - "version": "1.11.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "ec3961874c43840e96da3a8a1ed20d8c73d7e5aa" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/ec3961874c43840e96da3a8a1ed20d8c73d7e5aa", - "reference": "ec3961874c43840e96da3a8a1ed20d8c73d7e5aa", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~3.7.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "videlalvaro/php-amqplib": "~2.4" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "log", - "logging", - "psr-3" + "template" ], - "time": "2014-09-30 13:30:58" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "oyejorge/less.php", - "version": "v1.7.0.3", + "name": "phpunit/php-timer", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/oyejorge/less.php.git", - "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/oyejorge/less.php/zipball/6e08ecb07e6f6d9170c23e8744c58fdd822ad0de", - "reference": "6e08ecb07e6f6d9170c23e8744c58fdd822ad0de", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, - "bin": [ - "bin/lessc" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "psr-0": { - "Less": "lib/" - }, "classmap": [ - "lessc.inc.php" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], "authors": [ { - "name": "Matt Agar", - "homepage": "https://github.com/agar" - }, - { - "name": "Martin Jantošovič", - "homepage": "https://github.com/Mordred" - }, - { - "name": "Josh Schmidt", - "homepage": "https://github.com/oyejorge" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "PHP port of the Javascript version of LESS http://lesscss.org", - "homepage": "http://lessphp.gpeasy.com", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "css", - "less", - "less.js", - "lesscss", - "php", - "stylesheet" + "timer" ], - "time": "2015-03-10 18:12:59" + "time": "2017-02-26T11:10:40+00:00" }, { - "name": "psr/log", - "version": "dev-master", + "name": "phpunit/php-token-stream", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "bf2c13de4300e227d7b2fd08027673a79c519987" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/bf2c13de4300e227d7b2fd08027673a79c519987", - "reference": "bf2c13de4300e227d7b2fd08027673a79c519987", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Common interface for logging libraries", + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "log", - "psr", - "psr-3" + "tokenizer" ], - "time": "2015-03-26 14:39:45" + "time": "2017-11-27T05:48:46+00:00" }, { - "name": "seld/jsonlint", - "version": "1.3.1", + "name": "phpunit/phpunit", + "version": "6.5.14", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4", - "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" }, "bin": [ - "bin/jsonlint" + "phpunit" ], "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "JSON Linter", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "json", - "linter", - "parser", - "validator" + "phpunit", + "testing", + "xunit" ], - "time": "2015-01-04 21:18:15" + "time": "2019-02-01T05:22:47+00:00" }, { - "name": "symfony/console", - "version": "2.8.x-dev", + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", "source": { "type": "git", - "url": "https://github.com/symfony/Console.git", - "reference": "7e857a2b52b5833ed27d78a6b1b846bd440ee8bd" + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/7e857a2b52b5833ed27d78a6b1b846bd440ee8bd", - "reference": "7e857a2b52b5833ed27d78a6b1b846bd440ee8bd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", "shasum": "" }, "require": { - "php": ">=5.3.9" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/phpunit-bridge": "~2.7|~3.0.0", - "symfony/process": "~2.1|~3.0.0" + "phpunit/phpunit": "^6.5.11" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" + "ext-soap": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-05-15 14:11:12" + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "abandoned": true, + "time": "2018-08-09T05:50:03+00:00" }, { - "name": "symfony/finder", - "version": "2.8.x-dev", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "fd26bdbb67bc8753884eff5767a4f1ee90e2284b" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/fd26bdbb67bc8753884eff5767a4f1ee90e2284b", - "reference": "fd26bdbb67bc8753884eff5767a4f1ee90e2284b", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^5.6 || ^7.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0.0" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2015-05-15 14:11:12" + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" }, { - "name": "symfony/process", - "version": "2.8.x-dev", + "name": "sebastian/comparator", + "version": "2.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "daf96f1491cf0b8d8de60e6d3b5fda8e502b3798" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/daf96f1491cf0b8d8de60e6d3b5fda8e502b3798", - "reference": "daf96f1491cf0b8d8de60e6d3b5fda8e502b3798", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0.0" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2015-05-15 14:11:12" + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-02-01T13:46:46+00:00" }, { - "name": "tubalmartin/cssmin", - "version": "v2.4.8-p4", + "name": "sebastian/diff", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", - "reference": "fe84d71e8420243544c0ce3bd0f5d7c1936b0f90" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/fe84d71e8420243544c0ce3bd0f5d7c1936b0f90", - "reference": "fe84d71e8420243544c0ce3bd0f5d7c1936b0f90", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": ">=5.0.0" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "classmap": [ - "cssmin.php" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4680,1405 +17824,1342 @@ ], "authors": [ { - "name": "Túbal Martín", - "homepage": "http://tubalmartin.me/" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A PHP port of the YUI CSS compressor", - "homepage": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "compress", - "compressor", - "css", - "minify", - "yui" + "diff" ], - "time": "2014-09-22 08:08:50" + "time": "2017-08-03T08:09:46+00:00" }, { - "name": "zendframework/zend-code", - "version": "2.3.1", + "name": "sebastian/environment", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "a64e90c9ee8c939335ee7e21e39e3342c0e54526" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/a64e90c9ee8c939335ee7e21e39e3342c0e54526", - "reference": "a64e90c9ee8c939335ee7e21e39e3342c0e54526", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version" + "php": "^7.0" }, "require-dev": { - "doctrine/common": ">=2.1", - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-stdlib": "self.version" - }, - "suggest": { - "doctrine/common": "Doctrine\\Common >=2.1 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" + "phpunit/phpunit": "^6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides facilities to generate arbitrary code using an object oriented interface", - "homepage": "https://github.com/zendframework/zend-code", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "code", - "zf2" + "Xdebug", + "environment", + "hhvm" ], - "time": "2014-04-15 14:47:18" + "time": "2017-07-01T08:51:00+00:00" }, { - "name": "zendframework/zend-config", - "version": "2.3.1", + "name": "sebastian/exporter", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-config.git", - "reference": "698c139707380b29fd09791ec1c21b837e9a3f15" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-config/zipball/698c139707380b29fd09791ec1c21b837e9a3f15", - "reference": "698c139707380b29fd09791ec1c21b837e9a3f15", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", - "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Config\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a nested object property based user interface for accessing this configuration data within application code", - "homepage": "https://github.com/zendframework/zend-config", + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "config", - "zf2" + "export", + "exporter" ], - "time": "2014-04-15 13:59:53" + "time": "2017-04-03T13:19:02+00:00" }, { - "name": "zendframework/zend-console", - "version": "2.3.1", + "name": "sebastian/finder-facade", + "version": "1.2.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-console.git", - "reference": "4253efd75a022d97ef326eac38a06c8eebb48a37" + "url": "https://github.com/sebastianbergmann/finder-facade.git", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-console/zipball/4253efd75a022d97ef326eac38a06c8eebb48a37", - "reference": "4253efd75a022d97ef326eac38a06c8eebb48a37", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" - }, - "suggest": { - "zendframework/zend-filter": "To support DefaultRouteMatcher usage", - "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + "symfony/finder": "~2.3|~3.0|~4.0", + "theseer/fdomdocument": "~1.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Console\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-console", - "keywords": [ - "console", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "time": "2014-04-14 19:50:30" + "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", + "homepage": "https://github.com/sebastianbergmann/finder-facade", + "time": "2017-11-18T17:31:49+00:00" }, { - "name": "zendframework/zend-di", - "version": "2.3.1", + "name": "sebastian/global-state", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-di.git", - "reference": "7502db10f8023bfd4e860ce83c9cdeda0db42c31" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-di/zipball/7502db10f8023bfd4e860ce83c9cdeda0db42c31", - "reference": "7502db10f8023bfd4e860ce83c9cdeda0db42c31", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" + "phpunit/phpunit": "^6.0" }, "suggest": { - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Zend\\Di\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-di", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "di", - "zf2" + "global state" ], - "time": "2014-04-14 19:50:30" + "time": "2017-04-27T15:39:26+00:00" }, { - "name": "zendframework/zend-escaper", - "version": "2.3.1", + "name": "sebastian/object-enumerator", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-escaper.git", - "reference": "2b2fcb6141cc2a2c6cc0c596e82771c72ef4ddc1" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/2b2fcb6141cc2a2c6cc0c596e82771c72ef4ddc1", - "reference": "2b2fcb6141cc2a2c6cc0c596e82771c72ef4ddc1", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Escaper\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-escaper", - "keywords": [ - "escaper", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "time": "2014-04-14 19:50:30" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" }, { - "name": "zendframework/zend-eventmanager", - "version": "2.3.1", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "ec158e89d0290f988a29ccd6bf179b561efbb702" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/ec158e89d0290f988a29ccd6bf179b561efbb702", - "reference": "ec158e89d0290f988a29ccd6bf179b561efbb702", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": "^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "psr-4": { - "Zend\\EventManager\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-event-manager", - "keywords": [ - "eventmanager", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "time": "2014-04-15 13:59:53" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" }, - { - "name": "zendframework/zend-filter", - "version": "2.3.1", + { + "name": "sebastian/phpcpd", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-filter.git", - "reference": "307fe694659e08ffd710c70e4db8bc60187bcc84" + "url": "https://github.com/sebastianbergmann/phpcpd.git", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/307fe694659e08ffd710c70e4db8bc60187bcc84", - "reference": "307fe694659e08ffd710c70e4db8bc60187bcc84", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-crypt": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-crypt": "Zend\\Crypt component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter" + "php": "^5.6|^7.0", + "phpunit/php-timer": "^1.0.6", + "sebastian/finder-facade": "^1.1", + "sebastian/version": "^1.0|^2.0", + "symfony/console": "^2.7|^3.0|^4.0" }, + "bin": [ + "phpcpd" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Zend\\Filter\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a set of commonly needed data filters", - "homepage": "https://github.com/zendframework/zend-filter", - "keywords": [ - "filter", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "time": "2014-04-14 19:50:30" + "description": "Copy/Paste Detector (CPD) for PHP code.", + "homepage": "https://github.com/sebastianbergmann/phpcpd", + "time": "2017-11-16T08:49:28+00:00" }, { - "name": "zendframework/zend-form", - "version": "2.3.1", + "name": "sebastian/recursion-context", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-form.git", - "reference": "d7a1f5bc4626b1df990391502a868b28c37ba65d" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-form/zipball/d7a1f5bc4626b1df990391502a868b28c37ba65d", - "reference": "d7a1f5bc4626b1df990391502a868b28c37ba65d", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-inputfilter": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-captcha": "self.version", - "zendframework/zend-code": "self.version", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-view": "self.version", - "zendframework/zendservice-recaptcha": "*" - }, - "suggest": { - "zendframework/zend-captcha": "Zend\\Captcha component", - "zendframework/zend-code": "Zend\\Code component", - "zendframework/zend-eventmanager": "Zend\\EventManager component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-view": "Zend\\View component", - "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Form\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-form", - "keywords": [ - "form", - "zf2" + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } ], - "time": "2014-04-15 14:36:41" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" }, { - "name": "zendframework/zend-http", - "version": "2.3.1", + "name": "sebastian/resource-operations", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-http.git", - "reference": "869ce7bdf60727e14d85c305d2948fbe831c3534" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/869ce7bdf60727e14d85c305d2948fbe831c3534", - "reference": "869ce7bdf60727e14d85c305d2948fbe831c3534", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-uri": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "php": ">=5.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\Http\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", - "homepage": "https://github.com/zendframework/zend-http", - "keywords": [ - "http", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "time": "2014-04-15 13:59:53" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" }, { - "name": "zendframework/zend-inputfilter", - "version": "2.3.1", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "abca740015a856d03542f5b6c535b8874f84b622" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/abca740015a856d03542f5b6c535b8874f84b622", - "reference": "abca740015a856d03542f5b6c535b8874f84b622", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-filter": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Zend\\InputFilter\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-input-filter", - "keywords": [ - "inputfilter", - "zf2" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], - "time": "2014-04-15 13:59:53" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "zendframework/zend-json", - "version": "2.3.1", + "name": "squizlabs/php_codesniffer", + "version": "3.3.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-json.git", - "reference": "5284687fc3aeab27961d2e17ada08973ae6daafe" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "628a481780561150481a9ec74709092b9759b3ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-json/zipball/5284687fc3aeab27961d2e17ada08973ae6daafe", - "reference": "5284687fc3aeab27961d2e17ada08973ae6daafe", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/628a481780561150481a9ec74709092b9759b3ec", + "reference": "628a481780561150481a9ec74709092b9759b3ec", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-http": "self.version", - "zendframework/zend-server": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-server": "Zend\\Server component", - "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Json\\": "src/" + "dev-master": "3.x-dev" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", - "homepage": "https://github.com/zendframework/zend-json", + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", "keywords": [ - "json", - "zf2" + "phpcs", + "standards" ], - "time": "2014-04-14 19:50:30" + "time": "2018-07-26T23:47:18+00:00" }, { - "name": "zendframework/zend-loader", - "version": "2.3.1", + "name": "symfony/browser-kit", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-loader.git", - "reference": "5e0bd7e28c644078685f525cf8ae03d9a01ae292" + "url": "https://github.com/symfony/browser-kit.git", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/5e0bd7e28c644078685f525cf8ae03d9a01ae292", - "reference": "5e0bd7e28c644078685f525cf8ae03d9a01ae292", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/61d85c5af2fc058014c7c89504c3944e73a086f0", + "reference": "61d85c5af2fc058014c7c89504c3944e73a086f0", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Zend\\Loader\\": "src/" - } + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-loader", - "keywords": [ - "loader", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-14 19:50:30" + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "zendframework/zend-log", - "version": "2.3.1", + "name": "symfony/config", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-log.git", - "reference": "217611433f5cb56d4420a1db8f164e5db85d815d" + "url": "https://github.com/symfony/config.git", + "reference": "0e745ead307d5dcd4e163e94a47ec04b1428943f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-log/zipball/217611433f5cb56d4420a1db8f164e5db85d815d", - "reference": "217611433f5cb56d4420a1db8f164e5db85d815d", + "url": "https://api.github.com/repos/symfony/config/zipball/0e745ead307d5dcd4e163e94a47ec04b1428943f", + "reference": "0e745ead307d5dcd4e163e94a47ec04b1428943f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-console": "self.version", - "zendframework/zend-db": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-mail": "self.version", - "zendframework/zend-validator": "self.version" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { - "ext-mongo": "*", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML formatter", - "zendframework/zend-mail": "Zend\\Mail component", - "zendframework/zend-validator": "Zend\\Validator component" + "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Zend\\Log\\": "src/" - } + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "component for general purpose logging", - "homepage": "https://github.com/zendframework/zend-log", - "keywords": [ - "log", - "logging", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-15 13:59:53" + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2019-04-01T14:03:25+00:00" }, { - "name": "zendframework/zend-math", - "version": "2.3.1", + "name": "symfony/contracts", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-math.git", - "reference": "63225fcebb196fc6e20094f5f01e9354779ec31e" + "url": "https://github.com/symfony/contracts.git", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-math/zipball/63225fcebb196fc6e20094f5f01e9354779ec31e", - "reference": "63225fcebb196fc6e20094f5f01e9354779ec31e", + "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": "^7.1.3" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "psr/cache": "^1.0", + "psr/container": "^1.0" }, "suggest": { - "ext-bcmath": "If using the bcmath functionality", - "ext-gmp": "If using the gmp functionality", - "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable", - "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality" + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.0-dev" } }, "autoload": { "psr-4": { - "Zend\\Math\\": "src/" - } + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-math", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", "keywords": [ - "math", - "zf2" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], - "time": "2014-04-14 19:50:30" + "time": "2018-12-05T08:06:11+00:00" }, { - "name": "zendframework/zend-modulemanager", - "version": "2.3.1", + "name": "symfony/dependency-injection", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-modulemanager.git", - "reference": "d4591b958e40b8f5ae8110d9b203331437aa19f2" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "1806e43ff6bff57398d33b326cd753a12d9f434f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/d4591b958e40b8f5ae8110d9b203331437aa19f2", - "reference": "d4591b958e40b8f5ae8110d9b203331437aa19f2", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1806e43ff6bff57398d33b326cd753a12d9f434f", + "reference": "1806e43ff6bff57398d33b326cd753a12d9f434f", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/contracts": "^1.0" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-contracts-implementation": "1.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-config": "self.version", - "zendframework/zend-console": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-mvc": "self.version", - "zendframework/zend-servicemanager": "self.version" + "symfony/config": "~4.2", + "symfony/expression-language": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-loader": "Zend\\Loader component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Zend\\ModuleManager\\": "src/" - } + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-module-manager", - "keywords": [ - "modulemanager", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-14 19:50:30" + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2019-03-30T15:58:42+00:00" }, { - "name": "zendframework/zend-mvc", - "version": "2.3.1", + "name": "symfony/dom-crawler", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-mvc.git", - "reference": "ee76ddd009ecb0c507bb8ab396fbe719aea8f1ff" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/ee76ddd009ecb0c507bb8ab396fbe719aea8f1ff", - "reference": "ee76ddd009ecb0c507bb8ab396fbe719aea8f1ff", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/53c97769814c80a84a8403efcf3ae7ae966d53bb", + "reference": "53c97769814c80a84a8403efcf3ae7ae966d53bb", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-form": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-authentication": "self.version", - "zendframework/zend-console": "self.version", - "zendframework/zend-di": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-form": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-inputfilter": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-log": "self.version", - "zendframework/zend-modulemanager": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-text": "self.version", - "zendframework/zend-uri": "self.version", - "zendframework/zend-validator": "self.version", - "zendframework/zend-version": "self.version", - "zendframework/zend-view": "self.version" + "symfony/css-selector": "~3.4|~4.0" }, "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", - "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", - "zendframework/zend-di": "Zend\\Di component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-form": "Zend\\Form component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", - "zendframework/zend-inputfilter": "Zend\\Inputfilter component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-log": "Zend\\Log component", - "zendframework/zend-modulemanager": "Zend\\ModuleManager component", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", - "zendframework/zend-stdlib": "Zend\\Stdlib component", - "zendframework/zend-text": "Zend\\Text component", - "zendframework/zend-uri": "Zend\\Uri component", - "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-version": "Zend\\Version component", - "zendframework/zend-view": "Zend\\View component" + "symfony/css-selector": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Zend\\Mvc\\": "src/" - } + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-mvc", - "keywords": [ - "mvc", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-14 19:50:30" + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2019-02-23T15:17:42+00:00" }, { - "name": "zendframework/zend-serializer", - "version": "2.3.1", + "name": "symfony/http-foundation", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-serializer.git", - "reference": "22f73b0d0ff1158216bd5bcacf6bd00f7be1a0f6" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/22f73b0d0ff1158216bd5bcacf6bd00f7be1a0f6", - "reference": "22f73b0d0ff1158216bd5bcacf6bd00f7be1a0f6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1", + "reference": "5b7ab6beaa5b053b8d3c9b13367ada9b292e12e1", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-json": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Zend\\Serializer\\": "src/" - } + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", - "homepage": "https://github.com/zendframework/zend-serializer", - "keywords": [ - "serializer", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-14 19:50:30" + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2019-03-30T15:58:42+00:00" }, { - "name": "zendframework/zend-server", - "version": "2.3.1", + "name": "symfony/polyfill-php70", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-server.git", - "reference": "bc5fb97f4ac48a5dc54bd18dded21a3e1eea552c" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "bc4858fb611bda58719124ca079baff854149c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-server/zipball/bc5fb97f4ac48a5dc54bd18dded21a3e1eea552c", - "reference": "bc5fb97f4ac48a5dc54bd18dded21a3e1eea552c", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", + "reference": "bc4858fb611bda58719124ca079baff854149c89", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-code": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.11-dev" } }, "autoload": { "psr-4": { - "Zend\\Server\\": "src/" - } + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "homepage": "https://github.com/zendframework/zend-server", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "server", - "zf2" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2014-04-14 19:50:30" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "zendframework/zend-servicemanager", - "version": "2.3.1", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "7a428b595a1fcd4c2a8026ee5d5f89a56036f682" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/7a428b595a1fcd4c2a8026ee5d5f89a56036f682", - "reference": "7a428b595a1fcd4c2a8026ee5d5f89a56036f682", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", "shasum": "" }, "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-di": "self.version" - }, - "suggest": { - "zendframework/zend-di": "Zend\\Di component" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.11-dev" } }, "autoload": { "psr-4": { - "Zend\\ServiceManager\\": "src/" - } + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "homepage": "https://github.com/zendframework/zend-service-manager", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "servicemanager", - "zf2" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2014-04-15 13:59:53" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "zendframework/zend-soap", - "version": "2.3.1", + "name": "symfony/stopwatch", + "version": "v4.2.5", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-soap.git", - "reference": "fab9f5309be04cacf01af54f694aed5102592c5c" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-soap/zipball/fab9f5309be04cacf01af54f694aed5102592c5c", - "reference": "fab9f5309be04cacf01af54f694aed5102592c5c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b1a5f646d56a3290230dbc8edf2a0d62cda23f67", + "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-server": "self.version", - "zendframework/zend-stdlib": "self.version", - "zendframework/zend-uri": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-http": "self.version" - }, - "suggest": { - "zendframework/zend-http": "Zend\\Http component" + "php": "^7.1.3", + "symfony/contracts": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "4.2-dev" } }, "autoload": { "psr-4": { - "Zend\\Soap\\": "src/" - } + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-soap", - "keywords": [ - "soap", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-14 19:50:30" + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T20:31:39+00:00" }, { - "name": "zendframework/zend-stdlib", - "version": "2.3.1", + "name": "symfony/yaml", + "version": "v3.4.24", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "6079302963d57f36a9ba92ed3f38b992997aa78d" + "url": "https://github.com/symfony/yaml.git", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/6079302963d57f36a9ba92ed3f38b992997aa78d", - "reference": "6079302963d57f36a9ba92ed3f38b992997aa78d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { - "php": ">=5.3.23" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" + "symfony/console": "~3.4|~4.0" }, "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Zend\\Stdlib\\": "src/" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "homepage": "https://github.com/zendframework/zend-stdlib", - "keywords": [ - "stdlib", - "zf2" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2014-04-15 13:59:53" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2019-03-25T07:48:46+00:00" }, { - "name": "zendframework/zend-text", - "version": "2.3.1", + "name": "theseer/fdomdocument", + "version": "1.6.6", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-text.git", - "reference": "e9b3fffcc6241f7cfdb33282ed10979cd8ba9b90" + "url": "https://github.com/theseer/fDOMDocument.git", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-text/zipball/e9b3fffcc6241f7cfdb33282ed10979cd8ba9b90", - "reference": "e9b3fffcc6241f7cfdb33282ed10979cd8ba9b90", + "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "ext-dom": "*", + "lib-libxml": "*", + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Text\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-text", - "keywords": [ - "text", - "zf2" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "lead" + } ], - "time": "2014-04-14 19:50:30" + "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-30T11:53:12+00:00" }, { - "name": "zendframework/zend-uri", - "version": "2.3.1", + "name": "theseer/tokenizer", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-uri.git", - "reference": "0de6ba8c166a235588783ff8e88a19b364630d89" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/0de6ba8c166a235588783ff8e88a19b364630d89", - "reference": "0de6ba8c166a235588783ff8e88a19b364630d89", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", + "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-validator": "self.version" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - }, "autoload": { - "psr-4": { - "Zend\\Uri\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", - "homepage": "https://github.com/zendframework/zend-uri", - "keywords": [ - "uri", - "zf2" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } ], - "time": "2014-04-14 19:50:30" + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-04-04T09:56:43+00:00" }, { - "name": "zendframework/zend-validator", - "version": "2.3.1", + "name": "vlucas/phpdotenv", + "version": "v2.6.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-validator.git", - "reference": "a5f97f6c3a27a27b1235f724ad0048715459f013" + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/a5f97f6c3a27a27b1235f724ad0048715459f013", - "reference": "a5f97f6c3a27a27b1235f724ad0048715459f013", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "self.version" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-db": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-math": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-session": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + "phpunit/phpunit": "^4.8.35 || ^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "2.6-dev" } }, "autoload": { "psr-4": { - "Zend\\Validator\\": "src/" + "Dotenv\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "provides a set of commonly needed validators", - "homepage": "https://github.com/zendframework/zend-validator", + "authors": [ + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "http://www.vancelucas.com" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", "keywords": [ - "validator", - "zf2" + "dotenv", + "env", + "environment" ], - "time": "2014-04-14 19:50:30" + "time": "2019-01-29T11:11:52+00:00" }, { - "name": "zendframework/zend-view", - "version": "2.3.1", + "name": "webmozart/assert", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-view.git", - "reference": "e308d498fa7851f26bd639bfe3ebbfba397c47bc" + "url": "https://github.com/webmozart/assert.git", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-view/zipball/e308d498fa7851f26bd639bfe3ebbfba397c47bc", - "reference": "e308d498fa7851f26bd639bfe3ebbfba397c47bc", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-loader": "self.version", - "zendframework/zend-stdlib": "self.version" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-authentication": "self.version", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-feed": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-i18n": "self.version", - "zendframework/zend-json": "self.version", - "zendframework/zend-mvc": "self.version", - "zendframework/zend-navigation": "self.version", - "zendframework/zend-paginator": "self.version", - "zendframework/zend-permissions-acl": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-uri": "self.version" - }, - "suggest": { - "zendframework/zend-authentication": "Zend\\Authentication component", - "zendframework/zend-escaper": "Zend\\Escaper component", - "zendframework/zend-feed": "Zend\\Feed component", - "zendframework/zend-filter": "Zend\\Filter component", - "zendframework/zend-http": "Zend\\Http component", - "zendframework/zend-i18n": "Zend\\I18n component", - "zendframework/zend-json": "Zend\\Json component", - "zendframework/zend-mvc": "Zend\\Mvc component", - "zendframework/zend-navigation": "Zend\\Navigation component", - "zendframework/zend-paginator": "Zend\\Paginator component", - "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component", - "zendframework/zend-uri": "Zend\\Uri component" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Zend\\View\\": "src/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "provides a system of helpers, output filters, and variable escaping", - "homepage": "https://github.com/zendframework/zend-view", + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "view", - "zf2" + "assert", + "check", + "validate" ], - "time": "2014-04-15 14:36:41" + "time": "2018-12-25T11:19:39+00:00" } ], - "packages-dev": [], "aliases": [], - "minimum-stability": "dev", - "stability-flags": [], + "minimum-stability": "stable", + "stability-flags": { + "phpmd/phpmd": 0 + }, "prefer-stable": false, "prefer-lowest": false, "platform": [], diff --git a/lib/internal/Magento/Framework/Composer/ComposerInformation.php b/lib/internal/Magento/Framework/Composer/ComposerInformation.php index 93fb9070cddf..5ed5b0892d5d 100755 --- a/lib/internal/Magento/Framework/Composer/ComposerInformation.php +++ b/lib/internal/Magento/Framework/Composer/ComposerInformation.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\Composer; use Composer\Package\Link; @@ -126,6 +127,7 @@ public function getRequiredPhpVersion() } if (!isset($requiredPhpVersion)) { + // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception('Cannot find php version requirement in \'composer.lock\' file'); } return $requiredPhpVersion; @@ -148,7 +150,6 @@ public function getRequiredExtensions() /** @var CompletePackageInterface $package */ foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) { $requires = array_keys($package->getRequires()); - $requires = array_merge($requires, array_keys($package->getDevRequires())); $allPlatformReqs = array_merge($allPlatformReqs, $requires); } } @@ -301,6 +302,8 @@ public function isPackageInComposerJson($packageName) } /** + * Retrieve magento packages types. + * * @return array */ public function getPackagesTypes() @@ -309,6 +312,8 @@ public function getPackagesTypes() } /** + * Retrieve magento packages requirements. + * * @param string $name * @param string $version * @return array From 01b8305e22add1bc5f9a0ff942e8d072f6dc4b31 Mon Sep 17 00:00:00 2001 From: Serhiy Yelahin <serhiy.yelahin@transoftgroup.com> Date: Tue, 18 Jun 2019 15:13:09 +0300 Subject: [PATCH 154/209] MC-17505: Customer address attribute Phone validation issue --- .../Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php index 6cda134c433c..785c386b439d 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/Data/TextTest.php @@ -9,6 +9,9 @@ use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Stdlib\StringUtils; +/** + * Eav text attribute model test + */ class TextTest extends \PHPUnit\Framework\TestCase { /** From 0104df69d3c7fec10990ddc7a9d93690562cefb9 Mon Sep 17 00:00:00 2001 From: Fanis <Fanis.Strezos@dotmailer.com> Date: Tue, 18 Jun 2019 14:04:52 +0100 Subject: [PATCH 155/209] Fix modulo with less than a 1 value --- lib/web/mage/validation.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index dfa35473176b..18bf5dd63a81 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -204,6 +204,21 @@ return empty === 0; } + /** + * + * @param {float} qty + * @param {float} qtyIncrements + * @returns {float} + */ + function resolveModulo(qty, qtyIncrements) { + while (qtyIncrements < 1) { + qty *= 10; + qtyIncrements *= 10; + } + + return qty % qtyIncrements; + } + /** * Collection of validation rules including rules from additional-methods.js * @type {Object} @@ -1610,7 +1625,7 @@ isMaxAllowedValid = typeof params.maxAllowed === 'undefined' || qty <= $.mage.parseNumber(params.maxAllowed), isQtyIncrementsValid = typeof params.qtyIncrements === 'undefined' || - qty % $.mage.parseNumber(params.qtyIncrements) === 0; + resolveModulo(qty, $.mage.parseNumber(params.qtyIncrements)) === 0.0; result = qty > 0; @@ -1639,7 +1654,7 @@ result = isQtyIncrementsValid; if (result === false) { - validator.itemQtyErrorMessage = $.mage.__('You can buy this product only in quantities of %1 at a time.').replace('%1', params.qtyIncrements);//eslint-disable-line max-len + validator.itemQtyErrorMessage = $.mage.__('You can buy this product only in quantities of fanis %1 at a time.').replace('%1', params.qtyIncrements);//eslint-disable-line max-len return result; } From e80947ec99e5ba6b0dc73dc49f41b3cbee149635 Mon Sep 17 00:00:00 2001 From: sertlab <Fanis.Strezos@dotmailer.com> Date: Tue, 18 Jun 2019 14:21:58 +0100 Subject: [PATCH 156/209] revert texes to normall --- lib/web/mage/validation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index 18bf5dd63a81..eb9613035fd9 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -1654,7 +1654,7 @@ result = isQtyIncrementsValid; if (result === false) { - validator.itemQtyErrorMessage = $.mage.__('You can buy this product only in quantities of fanis %1 at a time.').replace('%1', params.qtyIncrements);//eslint-disable-line max-len + validator.itemQtyErrorMessage = $.mage.__('You can buy this product only in quantities of %1 at a time.').replace('%1', params.qtyIncrements);//eslint-disable-line max-len return result; } From 8fe7c88bf68c7eec7eb761f7b7690d73a9bb2ec1 Mon Sep 17 00:00:00 2001 From: Alastair Mucklow <amucklow@strangerpixel.com> Date: Tue, 18 Jun 2019 15:09:12 +0100 Subject: [PATCH 157/209] magento/magento2#23074: Magento 2.3.1 - URL rewrite rules are not creating for product after update url key Loop through category store ids when regenerating product rewrite urls. --- .../Observer/UrlRewriteHandler.php | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php index 8f89c3a2fcd1..d29ace5bd942 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php @@ -138,19 +138,20 @@ public function generateProductUrlRewrites(Category $category): array $mergeDataProvider = clone $this->mergeDataProviderPrototype; $this->isSkippedProduct[$category->getEntityId()] = []; $saveRewriteHistory = (bool)$category->getData('save_rewrites_history'); - $storeId = (int)$category->getStoreId(); - if ($category->getChangedProductIds()) { - $this->generateChangedProductUrls($mergeDataProvider, $category, $storeId, $saveRewriteHistory); - } else { - $mergeDataProvider->merge( - $this->getCategoryProductsUrlRewrites( - $category, - $storeId, - $saveRewriteHistory, - $category->getEntityId() - ) - ); + foreach ($category->getStoreIds() as $storeId) { + if ($category->getChangedProductIds()) { + $this->generateChangedProductUrls($mergeDataProvider, $category, (int)$storeId, $saveRewriteHistory); + } else { + $mergeDataProvider->merge( + $this->getCategoryProductsUrlRewrites( + $category, + (int)$storeId, + $saveRewriteHistory, + $category->getEntityId() + ) + ); + } } foreach ($this->childrenCategoriesProvider->getChildren($category, true) as $childCategory) { From 60b577e3fa998ab9b4b85b0fb486cf542d626168 Mon Sep 17 00:00:00 2001 From: Alastair Mucklow <amucklow@strangerpixel.com> Date: Tue, 18 Jun 2019 15:21:24 +0100 Subject: [PATCH 158/209] Use getCategoryStoreIds method --- .../Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php index d29ace5bd942..e1378f8f6814 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php @@ -139,7 +139,7 @@ public function generateProductUrlRewrites(Category $category): array $this->isSkippedProduct[$category->getEntityId()] = []; $saveRewriteHistory = (bool)$category->getData('save_rewrites_history'); - foreach ($category->getStoreIds() as $storeId) { + foreach ($this->getCategoryStoreIds($category) as $storeId) { if ($category->getChangedProductIds()) { $this->generateChangedProductUrls($mergeDataProvider, $category, (int)$storeId, $saveRewriteHistory); } else { From 94a63f7d30cd8f5c4069834f9596748e1a64c1a6 Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Tue, 18 Jun 2019 17:34:09 +0300 Subject: [PATCH 159/209] MAGETWO-99591: Restricted admin cannot edit reviews from pending reviews grid --- app/code/Magento/Review/Block/Adminhtml/Edit.php | 2 +- .../Review/Controller/Adminhtml/Product.php | 13 +++++-------- .../Review/Controller/Adminhtml/Product/Delete.php | 7 +++---- .../Review/Controller/Adminhtml/Product/Edit.php | 4 ++-- .../Controller/Adminhtml/Product/MassDelete.php | 4 ++-- .../Adminhtml/Product/MassUpdateStatus.php | 14 +++++++------- .../Controller/Adminhtml/Product/Pending.php | 3 ++- .../Controller/Adminhtml/Product/ReviewGrid.php | 3 ++- .../Review/Controller/Adminhtml/Product/Save.php | 8 ++++---- .../Controller/Adminhtml/Product/EditTest.php | 4 ++-- .../Adminhtml/Product/MassUpdateTest.php | 2 +- 11 files changed, 31 insertions(+), 33 deletions(-) diff --git a/app/code/Magento/Review/Block/Adminhtml/Edit.php b/app/code/Magento/Review/Block/Adminhtml/Edit.php index 38e0d6c7e0d5..c85374edb8d9 100644 --- a/app/code/Magento/Review/Block/Adminhtml/Edit.php +++ b/app/code/Magento/Review/Block/Adminhtml/Edit.php @@ -186,7 +186,7 @@ protected function _construct() ) . '\', ' . '\'' . $this->getUrl( '*/*/delete', [$this->_objectId => $this->getRequest()->getParam($this->_objectId), 'ret' => 'pending'] - ) . '\'' . ')' + ) . '\', {data: {}})' ); $this->_coreRegistry->register('ret', 'pending'); } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product.php b/app/code/Magento/Review/Controller/Adminhtml/Product.php index 968c84359b5b..32e30b0906dd 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product.php @@ -16,6 +16,11 @@ */ abstract class Product extends Action { + /** + * Authorization resource + */ + public const ADMIN_RESOURCE = 'Magento_Review::reviews_all'; + /** * Array of actions which can be processed without secret key validation * @@ -61,12 +66,4 @@ public function __construct( $this->ratingFactory = $ratingFactory; parent::__construct($context); } - - /** - * @inheritdoc - */ - protected function _isAllowed() - { - return $this->_authorization->isAllowed('Magento_Review::reviews_all'); - } } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php index 3228ed78cab4..e2ebe694e52e 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php @@ -9,12 +9,11 @@ use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Controller\ResultFactory; use Magento\Review\Model\Review; -use Magento\Framework\App\Action\HttpGetActionInterface; /** * Delete action. */ -class Delete extends ProductController implements HttpGetActionInterface, HttpPostActionInterface +class Delete extends ProductController implements HttpPostActionInterface { /** * @var Review @@ -55,7 +54,7 @@ public function execute() */ protected function _isAllowed() { - if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + if (parent::_isAllowed()) { return true; } @@ -81,7 +80,7 @@ protected function _isAllowed() */ private function getModel(): Review { - if (!$this->model) { + if ($this->model === null) { $this->model = $this->reviewFactory->create() ->load($this->getRequest()->getParam('id', false)); } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php index c037c1a93bbe..bcf307944e0f 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php @@ -41,7 +41,7 @@ public function execute() */ protected function _isAllowed() { - if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + if (parent::_isAllowed()) { return true; } @@ -67,7 +67,7 @@ protected function _isAllowed() */ private function getModel(): Review { - if (!$this->review) { + if ($this->review === null) { $this->review = $this->reviewFactory->create() ->load($this->getRequest()->getParam('id', false)); } diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php index bbde9dc11aca..0aa93b929b28 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php @@ -85,7 +85,7 @@ public function execute() */ protected function _isAllowed() { - if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { + if (parent::_isAllowed()) { return true; } @@ -116,7 +116,7 @@ protected function _isAllowed() */ private function getCollection(): Collection { - if (!$this->collection) { + if ($this->collection === null) { $collection = $this->collectionFactory->create(); $collection->addFieldToFilter( 'main_table.' . $collection->getResource() diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php index 036a5284c59f..5e4dee524dad 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php @@ -89,20 +89,20 @@ public function execute() */ protected function _isAllowed() { - if (!$this->_authorization->isAllowed('Magento_Review::pending')) { - return false; + if (parent::_isAllowed()) { + return true; } - if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { - return true; + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; } foreach ($this->getCollection() as $model) { if ($model->getStatusId() != Review::STATUS_PENDING) { $this->messageManager->addErrorMessage( __( - 'Sorry, You have not permission to do this.' - . ' One or more of the reviews are not in Pending Status.' + 'Sorry, You have not permission to do this. ' + . 'One or more of the reviews are not in Pending Status.' ) ); @@ -120,7 +120,7 @@ protected function _isAllowed() */ private function getCollection(): Collection { - if (!$this->collection) { + if ($this->collection === null) { $collection = $this->collectionFactory->create(); $collection->addFieldToFilter( 'main_table.' . $collection->getResource() diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php index 51a55f26cb46..385b7e12bf32 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php @@ -8,11 +8,12 @@ use Magento\Review\Controller\Adminhtml\Product as ProductController; use Magento\Framework\Controller\ResultFactory; use Magento\Framework\App\Action\HttpGetActionInterface; +use Magento\Framework\App\Action\HttpPostActionInterface; /** * Pending reviews grid. */ -class Pending extends ProductController implements HttpGetActionInterface +class Pending extends ProductController implements HttpGetActionInterface, HttpPostActionInterface { /** * Execute action. diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php index f65e97333ed5..b4f4eedf8913 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php @@ -14,11 +14,12 @@ use Magento\Framework\Controller\ResultFactory; use Magento\Framework\App\Request\Http; use Magento\Framework\App\Action\HttpGetActionInterface; +use Magento\Framework\App\Action\HttpPostActionInterface; /** * Review grid. */ -class ReviewGrid extends ProductController implements HttpGetActionInterface +class ReviewGrid extends ProductController implements HttpGetActionInterface, HttpPostActionInterface { /** * @var \Magento\Framework\View\LayoutFactory diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php index 5af5a2077ec7..b7e7f921e092 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php @@ -105,12 +105,12 @@ public function execute() */ protected function _isAllowed() { - if (!$this->_authorization->isAllowed('Magento_Review::pending')) { - return false; + if (parent::_isAllowed()) { + return true; } - if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { - return true; + if (!$this->_authorization->isAllowed('Magento_Review::pending')) { + return false; } if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { diff --git a/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php index 4b2bc459c7e2..ad39928f9f33 100644 --- a/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/EditTest.php @@ -42,7 +42,7 @@ class EditTest extends AbstractBackendController private $collectionFactory; /** - * @inheritDoc + * @inheritdoc */ protected function setUp() { @@ -84,7 +84,7 @@ public function testAclNoAccess(): void { // Exclude resource from ACL. $this->resource = ['Magento_Review::reviews_all', 'Magento_Review::pending']; - $this->uri = 'backend/review/product/edit/id/' . 'doesnt matter'; + $this->uri = 'backend/review/product/edit/id/' . 'doesn\'t matter'; parent::testAclNoAccess(); } diff --git a/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php index 6242f1812c1c..d6664d1fbb7a 100644 --- a/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php +++ b/dev/tests/integration/testsuite/Magento/Review/Controller/Adminhtml/Product/MassUpdateTest.php @@ -43,7 +43,7 @@ class MassUpdateTest extends AbstractBackendController private $collectionFactory; /** - * @inheritDoc + * @inheritdoc */ protected function setUp() { From 32de2806b5ea38b8d0b424838a5424f8279a6276 Mon Sep 17 00:00:00 2001 From: Alastair Mucklow <amucklow@strangerpixel.com> Date: Tue, 18 Jun 2019 16:39:29 +0100 Subject: [PATCH 160/209] Only loop around getCategoryProductsUrlRewrites() --- .../Observer/UrlRewriteHandler.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php index e1378f8f6814..22b52f8600c4 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php @@ -138,15 +138,19 @@ public function generateProductUrlRewrites(Category $category): array $mergeDataProvider = clone $this->mergeDataProviderPrototype; $this->isSkippedProduct[$category->getEntityId()] = []; $saveRewriteHistory = (bool)$category->getData('save_rewrites_history'); + $storeId = (int)$category->getStoreId(); - foreach ($this->getCategoryStoreIds($category) as $storeId) { - if ($category->getChangedProductIds()) { - $this->generateChangedProductUrls($mergeDataProvider, $category, (int)$storeId, $saveRewriteHistory); - } else { + if ($category->getChangedProductIds()) { + $this->generateChangedProductUrls($mergeDataProvider, $category, $storeId, $saveRewriteHistory); + } else { + $categoryStoreIds = $this->getCategoryStoreIds($category); + + foreach ($categoryStoreIds as $categoryStoreId) { + $this->isSkippedProduct[$category->getEntityId()] = []; $mergeDataProvider->merge( $this->getCategoryProductsUrlRewrites( $category, - (int)$storeId, + $categoryStoreId, $saveRewriteHistory, $category->getEntityId() ) From 0da86ab8610b690d7ac149059f9b7c36e136f914 Mon Sep 17 00:00:00 2001 From: Alastair Mucklow <amucklow@strangerpixel.com> Date: Tue, 18 Jun 2019 16:39:56 +0100 Subject: [PATCH 161/209] Filter the product collection by the store id passed in --- .../Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php index 22b52f8600c4..0708ce6d7d71 100644 --- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php +++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php @@ -246,7 +246,7 @@ private function getCategoryProductsUrlRewrites( $productCollection = $this->productCollectionFactory->create(); $productCollection->addCategoriesFilter(['eq' => [$category->getEntityId()]]) - ->setStoreId($storeId) + ->addStoreFilter($storeId) ->addAttributeToSelect('name') ->addAttributeToSelect('visibility') ->addAttributeToSelect('url_key') From 2d9b41f13d8b085f0b1d6cd0c19bca8fe5ef30c2 Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Tue, 18 Jun 2019 19:47:42 +0300 Subject: [PATCH 162/209] MAGETWO-99591: Restricted admin cannot edit reviews from pending reviews grid --- .../Controller/Adminhtml/Product/ReviewGrid.php | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php index b4f4eedf8913..8925851e3342 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php @@ -63,18 +63,7 @@ public function execute() */ protected function _isAllowed() { - if ($this->_authorization->isAllowed('Magento_Review::reviews_all')) { - return true; - } - - if (!$this->_authorization->isAllowed('Magento_Review::pending')) { - return false; - } - - if ($this->getRequest() instanceof Http) { - return $this->getRequest()->getBeforeForwardInfo('action_name') == 'pending'; - } - - return false; + return $this->_authorization->isAllowed('Magento_Review::reviews_all') + || $this->_authorization->isAllowed('Magento_Review::pending'); } } From 1d8362f2659687f1b2f798a0ed1ae90c0b5e88cc Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Tue, 18 Jun 2019 17:46:01 -0500 Subject: [PATCH 163/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test --- .../static/testsuite/Magento/Test/Integrity/DependencyTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php index 1c50a3c43bf2..16ba295588b5 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/DependencyTest.php @@ -480,7 +480,7 @@ function (&$moduleName) { $moduleName = str_replace('_', '\\', $moduleName); } ); - $declaredDependencies = array_intersect($conditionalDependencies, $declared); + $declaredDependencies = array_intersect($conditionalDependencies, $declared); foreach ($declaredDependencies as $moduleName) { if ($this->_isFake($moduleName)) { From d254b9f1b8bd4ae557d0dc2308aa9f79af96289b Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <engcom-vendorworker-foxtrot@adobe.com> Date: Wed, 19 Jun 2019 13:34:24 +0300 Subject: [PATCH 164/209] magento/magento2#22650: Integration test fix. --- .../Magento/CatalogImportExport/Model/Import/ProductTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php index 41cd85e6ec2f..b04d1394e5c1 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php @@ -20,12 +20,12 @@ use Magento\Framework\App\Bootstrap; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; +use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Filesystem; use Magento\Framework\Registry; use Magento\ImportExport\Model\Import; use Magento\Store\Model\Store; use Psr\Log\LoggerInterface; -use Magento\Framework\Exception\NoSuchEntityException; /** * Class ProductTest @@ -95,6 +95,7 @@ protected function tearDown() try { $product = $productRepository->get($productSku, false, null, true); $productRepository->delete($product); + // phpcs:ignore Magento2.CodeAnalysis.EmptyBlock } catch (NoSuchEntityException $e) { // nothing to delete } @@ -1097,6 +1098,7 @@ public function testProductsWithMultipleStores() /** * Test url keys properly generated in multistores environment. * + * @magentoConfigFixture current_store catalog/seo/product_use_categories 1 * @magentoDataFixture Magento/Store/_files/core_fixturestore.php * @magentoDataFixture Magento/Catalog/_files/category_with_two_stores.php * @magentoDbIsolation enabled From ec4017f2f745d3be5c3c077b57e80db6b8b8a1eb Mon Sep 17 00:00:00 2001 From: Stas Puga <stas.puga@transoftgroup.com> Date: Wed, 19 Jun 2019 14:07:45 +0300 Subject: [PATCH 165/209] MC-11512: Remove custom options from product --- .../ActionGroup/CustomOptionsActionGroup.xml | 59 ++++++++++-- .../Catalog/Test/Mftf/Data/ProductData.xml | 6 ++ .../Test/Mftf/Data/ProductOptionData.xml | 6 ++ ...AdminProductCustomizableOptionsSection.xml | 9 ++ ...CustomizableOptionToProductWithSKUTest.xml | 2 - ...dminRemoveCustomOptionsFromProductTest.xml | 92 +++++++++++++++++++ 6 files changed, 163 insertions(+), 11 deletions(-) create mode 100644 app/code/Magento/Catalog/Test/Mftf/Test/AdminRemoveCustomOptionsFromProductTest.xml diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CustomOptionsActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CustomOptionsActionGroup.xml index 838ac7d288ea..7723f32d1409 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CustomOptionsActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/CustomOptionsActionGroup.xml @@ -47,26 +47,26 @@ <fillField selector="{{AdminProductCustomizableOptionsSection.lastOptionTitle}}" userInput="{{option.title}}" stepKey="fillTitle"/> <click selector="{{AdminProductCustomizableOptionsSection.lastOptionTypeParent}}" stepKey="openTypeSelect"/> <click selector="{{AdminProductCustomizableOptionsSection.optionType('File')}}" stepKey="selectTypeFile"/> - <waitForElementVisible selector="{{AdminProductCustomizableOptionsSection.optionPrice('0')}}" stepKey="waitForElements"/> - <fillField selector="{{AdminProductCustomizableOptionsSection.optionPrice('0')}}" userInput="{{option.price}}" stepKey="fillPrice"/> - <selectOption selector="{{AdminProductCustomizableOptionsSection.optionPriceType('0')}}" userInput="{{option.price_type}}" stepKey="selectPriceType"/> - <fillField selector="{{AdminProductCustomizableOptionsSection.optionFileExtensions('0')}}" userInput="{{option.file_extension}}" stepKey="fillCompatibleExtensions"/> + <waitForElementVisible selector="{{AdminProductCustomizableOptionsSection.optionPriceByTitle(option.title)}}" stepKey="waitForElements"/> + <fillField selector="{{AdminProductCustomizableOptionsSection.optionPriceByTitle(option.title)}}" userInput="{{option.price}}" stepKey="fillPrice"/> + <selectOption selector="{{AdminProductCustomizableOptionsSection.optionPriceTypeByTitle(option.title)}}" userInput="{{option.price_type}}" stepKey="selectPriceType"/> + <fillField selector="{{AdminProductCustomizableOptionsSection.optionFileExtensionByTitle(option.title)}}" userInput="{{option.file_extension}}" stepKey="fillCompatibleExtensions"/> </actionGroup> <actionGroup name="AddProductCustomOptionField"> <arguments> <argument name="option" defaultValue="ProductOptionField"/> - <argument name="optionIndex" type="string"/> </arguments> + <scrollTo selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="scrollToAddButtonOption"/> <conditionalClick selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" dependentSelector="{{AdminProductCustomizableOptionsSection.addOptionBtn}}" visible="false" stepKey="openCustomOptionSection"/> <click selector="{{AdminProductCustomizableOptionsSection.addOptionBtn}}" stepKey="clickAddOption"/> <waitForElementVisible selector="{{AdminProductCustomizableOptionsSection.lastOptionTitle}}" stepKey="waitForOption"/> <fillField selector="{{AdminProductCustomizableOptionsSection.lastOptionTitle}}" userInput="{{option.title}}" stepKey="fillTitle"/> <click selector="{{AdminProductCustomizableOptionsSection.lastOptionTypeParent}}" stepKey="openTypeSelect"/> <click selector="{{AdminProductCustomizableOptionsSection.optionType('Field')}}" stepKey="selectTypeFile"/> - <waitForElementVisible selector="{{AdminProductCustomizableOptionsSection.optionPrice(optionIndex)}}" stepKey="waitForElements"/> - <fillField selector="{{AdminProductCustomizableOptionsSection.optionPrice(optionIndex)}}" userInput="{{option.price}}" stepKey="fillPrice"/> - <selectOption selector="{{AdminProductCustomizableOptionsSection.optionPriceType(optionIndex)}}" userInput="{{option.price_type}}" stepKey="selectPriceType"/> - <fillField selector="{{AdminProductCustomizableOptionsSection.optionSku(optionIndex)}}" userInput="{{option.title}}" stepKey="fillSku"/> + <waitForElementVisible selector="{{AdminProductCustomizableOptionsSection.optionPriceByTitle(option.title)}}" stepKey="waitForElements"/> + <fillField selector="{{AdminProductCustomizableOptionsSection.optionPriceByTitle(option.title)}}" userInput="{{option.price}}" stepKey="fillPrice"/> + <selectOption selector="{{AdminProductCustomizableOptionsSection.optionPriceTypeByTitle(option.title)}}" userInput="{{option.price_type}}" stepKey="selectPriceType"/> + <fillField selector="{{AdminProductCustomizableOptionsSection.optionSkuByTitle(option.title)}}" userInput="{{option.title}}" stepKey="fillSku"/> </actionGroup> <actionGroup name="importProductCustomizableOptions"> <arguments> @@ -99,4 +99,45 @@ <assertEquals expected="{{option.price}}" expectedType="string" actual="$grabOptionPrice" stepKey="assertOptionPrice"/> <assertEquals expected="{{option.title}}" expectedType="string" actual="$grabOptionSku" stepKey="assertOptionSku"/> </actionGroup> + <!-- Assumes we are on product edit page --> + <actionGroup name="AdminDeleteAllProductCustomOptions"> + <conditionalClick selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" dependentSelector="{{AdminProductCustomizableOptionsSection.checkIfCustomizableOptionsTabOpen}}" visible="true" stepKey="expandContentTab"/> + <waitForPageLoad time="10" stepKey="waitCustomizableOptionsTabOpened"/> + <executeInSelenium function="function($webdriver) use ($I) { + $buttons = $webdriver->findElements(\Facebook\WebDriver\WebDriverBy::cssSelector('[data-index=\'options\'] [data-index=\'delete_button\']')); + while(!empty($buttons)) { + $button = reset($buttons); + $I->executeJS('arguments[0].scrollIntoView(false)', [$button]); + $button->click(); + $webdriver->wait()->until(\Facebook\WebDriver\WebDriverExpectedCondition::stalenessOf($button)); + $buttons = $webdriver->findElements(\Facebook\WebDriver\WebDriverBy::cssSelector('[data-index=\'options\'] [data-index=\'delete_button\']')); + } + }" stepKey="deleteCustomOptions"/> + <dontSeeElement selector="{{AdminProductCustomizableOptionsSection.customOptionButtonDelete}}" stepKey="assertNoCustomOptions"/> + </actionGroup> + <!-- Assumes we are on product edit page --> + <actionGroup name="AdminAssertProductHasNoCustomOptions"> + <conditionalClick selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" dependentSelector="{{AdminProductCustomizableOptionsSection.checkIfCustomizableOptionsTabOpen}}" visible="true" stepKey="expandContentTab"/> + <waitForPageLoad time="10" stepKey="waitCustomizableOptionsTabOpened"/> + <dontSeeElement selector="{{AdminProductCustomizableOptionsSection.customOption}}" stepKey="assertNoCustomOptions"/> + </actionGroup> + <!-- Assumes we are on product edit page --> + <actionGroup name="AdminAssertProductHasNoCustomOption" extends="AdminAssertProductCustomOptionVisible"> + <remove keyForRemoval="assertCustomOptionVisible"/> + <dontSeeElement selector="{{AdminProductCustomizableOptionsSection.fillOptionTitle(option.title)}}" after="waitCustomizableOptionsTabOpened" stepKey="assertNoCustomOption"/> + </actionGroup> + <!-- Assumes we are on product edit page --> + <actionGroup name="AdminAssertProductCustomOptionVisible"> + <arguments> + <argument name="option" defaultValue="ProductOptionField"/> + </arguments> + <conditionalClick selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" dependentSelector="{{AdminProductCustomizableOptionsSection.checkIfCustomizableOptionsTabOpen}}" visible="true" stepKey="expandContentTab"/> + <waitForPageLoad time="10" stepKey="waitCustomizableOptionsTabOpened"/> + <seeElement selector="{{AdminProductCustomizableOptionsSection.fillOptionTitle(option.title)}}" stepKey="assertCustomOptionVisible"/> + </actionGroup> + <!-- Assumes we are on product edit page --> + <actionGroup name="AdminDeleteProductCustomOption" extends="AdminAssertProductCustomOptionVisible"> + <remove keyForRemoval="assertCustomOptionVisible"/> + <click selector="{{AdminProductCustomizableOptionsSection.deleteCustomOptions(option.title)}}" after="waitCustomizableOptionsTabOpened" stepKey="clickDeleteCustomOption"/> + </actionGroup> </actionGroups> diff --git a/app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml b/app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml index 33dab7ee8fd7..0b6a1e7d0443 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml @@ -506,6 +506,12 @@ <requiredEntity type="product_option">ProductOptionField</requiredEntity> <requiredEntity type="product_option">ProductOptionArea</requiredEntity> </entity> + <entity name="ProductWithTextFieldAndAreaAndFileOptions" type="product"> + <var key="sku" entityType="product" entityKey="sku" /> + <requiredEntity type="product_option">ProductOptionField</requiredEntity> + <requiredEntity type="product_option">ProductOptionArea</requiredEntity> + <requiredEntity type="product_option">ProductOptionFile</requiredEntity> + </entity> <entity name="ApiVirtualProductWithDescription" type="product"> <data key="sku" unique="suffix">api-virtual-product</data> <data key="type_id">virtual</data> diff --git a/app/code/Magento/Catalog/Test/Mftf/Data/ProductOptionData.xml b/app/code/Magento/Catalog/Test/Mftf/Data/ProductOptionData.xml index d1b0e1e53aea..720087917aad 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Data/ProductOptionData.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Data/ProductOptionData.xml @@ -176,4 +176,10 @@ <data key="is_require">true</data> <requiredEntity type="product_option_value">ProductOptionPercentPriceValueDropdown</requiredEntity> </entity> + <entity name="ProductOptionFieldSecond" extends="ProductOptionField"> + <data key="title" unique="suffix">fifth option</data> + </entity> + <entity name="ProductOptionFileSecond" extends="ProductOptionFile"> + <data key="title" unique="suffix">fourth option</data> + </entity> </entities> diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductCustomizableOptionsSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductCustomizableOptionsSection.xml index e9f0de14da34..a7ab0c3d8e40 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductCustomizableOptionsSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductCustomizableOptionsSection.xml @@ -19,10 +19,14 @@ <element name="optionTypeOpenDropDown" type="button" selector=".admin__dynamic-rows[data-index='options'] .action-select" timeout="30"/> <element name="optionTypeTextField" type="button" selector=".admin__dynamic-rows[data-index='options'] .action-menu._active li li" timeout="30"/> <element name="maxCharactersInput" type="input" selector="input[name='product[options][0][max_characters]']"/> + <element name="deleteCustomOptions" type="button" selector="//div[contains(@class, 'fieldset-wrapper-title')]//span[contains(., '{{optionTitle}}')]/parent::div/parent::div//button[@class='action-delete']" parameterized="true" timeout="30"/> + <element name="customOption" type="block" selector="[data-index='options'] tbody tr.data-row"/> + <element name="customOptionButtonDelete" type="button" selector="[data-index='options'] [data-index='delete_button']"/> <element name="optionTypeDropDown" type="select" selector="//table[@data-index='options']//tr[{{index}}]//div[@data-index='type']//div[contains(@class, 'action-select-wrap')]" parameterized="true" /> <element name="optionTypeItem" type="select" selector="//table[@data-index='options']//tr[{{index}}]//div[@data-index='type']//*[contains(@class, 'action-menu-item')]//*[contains(., '{{optionValue}}')]" parameterized="true" /> <element name="checkSelect" type="select" selector="//span[text()='{{var1}}']/parent::div/parent::div/parent::div//span[text()='Option Type']/parent::label/parent::div/parent::div//div[@data-role='selected-option']" parameterized="true"/> + <element name="checkOptionType" type="select" selector="//span[text()='{{optionTitle}}']/parent::div/parent::div/parent::div//parent::label/parent::div/parent::div//li[@class='admin__action-multiselect-menu-inner-item']//label[text()='{{optionType}}']" parameterized="true"/> <element name="checkDropDown" type="select" selector="//span[text()='{{var1}}']/parent::div/parent::div/parent::div//parent::label/parent::div/parent::div//li[@class='admin__action-multiselect-menu-inner-item']//label[text()='Drop-down']" parameterized="true"/> <element name="clickAddValue" type="button" selector="//span[text()='{{var1}}']/parent::div/parent::div/parent::div//tfoot//button" parameterized="true"/> <element name="fillOptionValueTitle" type="input" selector="//span[text()='{{var1}}']/parent::div/parent::div/parent::div//tbody/tr[@data-repeat-index='{{var2}}']//span[text()='Title']/parent::label/parent::div/parent::div//div[@class='admin__field-control']/input" parameterized="true"/> @@ -32,8 +36,13 @@ <element name="checkboxUseDefaultOption" type="checkbox" selector="//table[@data-index='values']//tbody//tr[@data-repeat-index='{{var1}}']//div[@class='admin__field-control']//input[@type='checkbox']" parameterized="true"/> <element name="requiredCheckBox" type="checkbox" selector="input[name='product[options][{{index}}][is_require]']" parameterized="true" /> <element name="fillOptionValueSku" type="input" selector="//span[text()='{{var1}}']/parent::div/parent::div/parent::div//tbody/tr[@data-repeat-index='{{var2}}']//span[text()='SKU']/parent::label/parent::div/parent::div//div[@class='admin__field-control']/input" parameterized="true"/> + <element name="fillOptionCompatibleFileExtensions" type="input" selector="input[name='product[options][{{index}}][file_extension]']" parameterized="true"/> <!-- Elements that make it easier to select the most recently added element --> + <element name="optionPriceByTitle" type="input" selector="//*[@data-index='options']//*[@data-role='collapsible-title' and contains(., '{{optionTitle}}')]/ancestor::tr//*[@data-index='price']//input" parameterized="true"/> + <element name="optionPriceTypeByTitle" type="select" selector="//*[@data-index='options']//*[@data-role='collapsible-title' and contains(., '{{optionTitle}}')]/ancestor::tr//*[@data-index='price_type']//select" parameterized="true"/> + <element name="optionSkuByTitle" type="input" selector="//*[@data-index='options']//*[@data-role='collapsible-title' and contains(., '{{optionTitle}}')]/ancestor::tr//*[@data-index='sku']//input" parameterized="true"/> + <element name="optionFileExtensionByTitle" type="input" selector="//*[@data-index='options']//*[@data-role='collapsible-title' and contains(., '{{optionTitle}}')]/ancestor::tr//*[@data-index='file_extension']//input" parameterized="true"/> <element name="lastOptionTitle" type="input" selector="//*[@data-index='custom_options']//*[@data-index='options']/tbody/tr[last()]//*[contains(@class, '_required')]//input" /> <element name="lastOptionTypeParent" type="block" selector="//*[@data-index='custom_options']//*[@data-index='options']/tbody/tr[last()]//*[contains(@class, 'admin__action-multiselect-text')]" /> <element name="lastOptionPrice" type="input" selector="//*[@data-index='custom_options']//*[@data-index='options']/tbody/tr[last()]//*[contains(@name, '[price]')]"/> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminImportCustomizableOptionToProductWithSKUTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminImportCustomizableOptionToProductWithSKUTest.xml index 877c3ecab7ed..b1f00a2f51a9 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminImportCustomizableOptionToProductWithSKUTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminImportCustomizableOptionToProductWithSKUTest.xml @@ -52,11 +52,9 @@ <waitForPageLoad stepKey="waitForProductEditPageLoad"/> <actionGroup ref="AddProductCustomOptionField" stepKey="addCutomOption1"> <argument name="option" value="ProductOptionField"/> - <argument name="optionIndex" value="0"/> </actionGroup> <actionGroup ref="AddProductCustomOptionField" stepKey="addCutomOption2"> <argument name="option" value="ProductOptionField2"/> - <argument name="optionIndex" value="1"/> </actionGroup> <actionGroup ref="saveProductForm" stepKey="saveProduct"/> <!--Change second product sku to first product sku--> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminRemoveCustomOptionsFromProductTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRemoveCustomOptionsFromProductTest.xml new file mode 100644 index 000000000000..b5f212d1144b --- /dev/null +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminRemoveCustomOptionsFromProductTest.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminRemoveCustomOptionsFromProductTest"> + <annotations> + <features value="Catalog"/> + <stories value="Create product with custom options"/> + <title value="Remove custom options from product"/> + <description value="Remove custom options from product"/> + <severity value="MAJOR"/> + <testCaseId value="MC-11512"/> + <group value="catalog"/> + </annotations> + <before> + <createData entity="SimpleProduct2" stepKey="createProduct"/> + <updateData entity="ProductWithTextFieldAndAreaAndFileOptions" createDataKey="createProduct" stepKey="updateProductWithOptions"> + <requiredEntity createDataKey="createProduct"/> + </updateData> + </before> + <after> + <deleteData createDataKey="createProduct" stepKey="deleteProductWithOptions"/> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/> + <actionGroup ref="clearFiltersAdminDataGrid" stepKey="clearProductFilter"/> + <actionGroup ref="logout" stepKey="logout"/> + </after> + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/> + <!-- Edit Simple Product --> + <amOnPage url="{{AdminProductEditPage.url($$createProduct.id$$)}}" stepKey="goToProduct"/> + <!-- See 3 options are present --> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertCustomOptionsField"> + <argument name="option" value="ProductOptionField"/> + </actionGroup> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertCustomOptionsArea"> + <argument name="option" value="ProductOptionArea"/> + </actionGroup> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertCustomOptionsFile"> + <argument name="option" value="ProductOptionFile"/> + </actionGroup> + <!-- Click delete "Area" and "File" options --> + <actionGroup ref="AdminDeleteProductCustomOption" stepKey="deleteCustomOptionArea"> + <argument name="option" value="ProductOptionArea"/> + </actionGroup> + <actionGroup ref="AdminDeleteProductCustomOption" stepKey="deleteCustomOptionFile"> + <argument name="option" value="ProductOptionFile"/> + </actionGroup> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertVisibleCustomOptionField"> + <argument name="option" value="ProductOptionField"/> + </actionGroup> + <actionGroup ref="saveProductForm" stepKey="saveProduct"/> + <!-- See only "Field option" left Also we shouldn't see any other options --> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertVisibleSecondCustomOptionField"> + <argument name="option" value="ProductOptionField"/> + </actionGroup> + <actionGroup ref="AdminAssertProductHasNoCustomOption" stepKey="assertNoCustomOptionsFile"> + <argument name="option" value="ProductOptionFileSecond"/> + </actionGroup> + <actionGroup ref="AdminAssertProductHasNoCustomOption" stepKey="assertNoCustomOptionsField"> + <argument name="option" value="ProductOptionFieldSecond"/> + </actionGroup> + <!-- Click Add option "File" --> + <actionGroup ref="AddProductCustomOptionFile" stepKey="createAddOptionFile"> + <argument name="option" value="ProductOptionFileSecond"/> + </actionGroup> + <!-- Click Add option "Field" --> + <actionGroup ref="AddProductCustomOptionField" stepKey="createCustomOptionField"> + <argument name="option" value="ProductOptionFieldSecond"/> + </actionGroup> + <actionGroup ref="saveProductForm" stepKey="saveProductWithNewlyAddedOptions"/> + <!-- See 3 options are present --> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertPresentCustomOptionField"> + <argument name="option" value="ProductOptionField"/> + </actionGroup> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertPresenceOfFileOption"> + <argument name="option" value="ProductOptionFileSecond"/> + </actionGroup> + <actionGroup ref="AdminAssertProductCustomOptionVisible" stepKey="assertPresenceOfFieldOption"> + <argument name="option" value="ProductOptionFieldSecond"/> + </actionGroup> + <!-- Delete All options and See no more options present on the page --> + <actionGroup ref="AdminDeleteAllProductCustomOptions" stepKey="deleteAllCustomOptions"/> + <!-- Product successfully saved and it has no options --> + <actionGroup ref="saveProductForm" stepKey="saveProductWithoutCustomOptions"/> + <actionGroup ref="AdminAssertProductHasNoCustomOptions" stepKey="assertNoCustomOptions"/> + </test> +</tests> From ad6a8edff4c664352f51111d37b1021848c8ff51 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Wed, 19 Jun 2019 12:29:38 -0500 Subject: [PATCH 166/209] MC-17337: Braintree Error Code Mapping Not Working for CVV 200 - fix tests --- .../Validator/GeneralResponseValidatorTest.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php index 3a4e9d581dd0..d966e4e3f10e 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php @@ -64,11 +64,13 @@ public function testValidate(array $validationSubject, bool $isValid, $messages, $result = new Result($isValid, $messages); $this->resultInterfaceFactory->method('create') - ->with([ - 'isValid' => $isValid, - 'failsDescription' => $messages, - 'errorCodes' => $errorCodes - ]) + ->with( + [ + 'isValid' => $isValid, + 'failsDescription' => $messages, + 'errorCodes' => $errorCodes + ] + ) ->willReturn($result); $actual = $this->responseValidator->validate($validationSubject); From a810c78051c349b307cedf222efe85be37112786 Mon Sep 17 00:00:00 2001 From: Hwashiang Yu <hwyu@adobe.com> Date: Wed, 19 Jun 2019 13:55:34 -0500 Subject: [PATCH 167/209] MC-17546: Incorrect bundle and downloadable email template update - Updated correct typecasting - Updated template attributes --- .../creditmemo/create/items/renderer.phtml | 18 +++++++++--------- .../sales/creditmemo/view/items/renderer.phtml | 2 +- .../sales/invoice/create/items/renderer.phtml | 18 +++++++++--------- .../sales/invoice/view/items/renderer.phtml | 2 +- .../sales/order/view/items/renderer.phtml | 14 +++++++------- .../sales/shipment/create/items/renderer.phtml | 2 +- .../sales/shipment/view/items/renderer.phtml | 2 +- .../email/order/items/creditmemo/default.phtml | 2 +- .../email/order/items/invoice/default.phtml | 2 +- .../email/order/items/order/default.phtml | 2 +- .../email/order/items/shipment/default.phtml | 2 +- .../order/creditmemo/items/renderer.phtml | 18 +++++++++--------- .../sales/order/invoice/items/renderer.phtml | 14 +++++++------- .../templates/sales/order/items/renderer.phtml | 14 +++++++------- .../sales/order/shipment/items/renderer.phtml | 10 +++++----- .../templates/customer/products/list.phtml | 10 +++++----- .../order/items/creditmemo/downloadable.phtml | 2 +- .../order/items/invoice/downloadable.phtml | 2 +- .../email/order/items/order/downloadable.phtml | 2 +- .../items/renderer/downloadable.phtml | 14 +++++++------- .../invoice/items/renderer/downloadable.phtml | 2 +- .../order/items/renderer/downloadable.phtml | 18 +++++++++--------- 22 files changed, 86 insertions(+), 86 deletions(-) diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml index 04658a376118..c480d9b126da 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/create/items/renderer.phtml @@ -68,30 +68,30 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyOrdered() * 1 ?></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyInvoiced()) : ?> <tr> <th><?= $block->escapeHtml(__('Invoiced')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyInvoiced()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyInvoiced() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyShipped() && $block->isShipmentSeparately($_item)) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= (int)$_item->getOrderItem()->getQtyShipped()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyShipped() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyRefunded()) : ?> <tr> <th><?= $block->escapeHtml(__('Refunded')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyRefunded()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyRefunded() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyCanceled()) : ?> <tr> <th><?= $block->escapeHtml(__('Canceled')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyCanceled()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyCanceled() * 1 ?></td> </tr> <?php endif; ?> </table> @@ -99,12 +99,12 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyOrdered() * 1 ?></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyShipped()) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyShipped()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyShipped() * 1 ?></td> </tr> <?php endif; ?> </table> @@ -133,9 +133,9 @@ <input type="text" class="input-text admin__control-text qty-input" name="creditmemo[items][<?= $block->escapeHtmlAttr($_item->getOrderItemId()) ?>][qty]" - value="<?= (int)$_item->getQty()*1 ?>" /> + value="<?= (float)$_item->getQty() * 1 ?>" /> <?php else : ?> - <?= (int)$_item->getQty()*1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php endif; ?> <?php else : ?>   diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml index d52f41e27262..0d54e1528dfe 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/creditmemo/view/items/renderer.phtml @@ -63,7 +63,7 @@ </td> <td class="col-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= (int)$_item->getQty()*1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml index 5ed137a32d12..a7d49b4b3530 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/create/items/renderer.phtml @@ -78,30 +78,30 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><span><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></span></td> + <td><span><?= (float)$_item->getOrderItem()->getQtyOrdered() * 1 ?></span></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyInvoiced()) : ?> <tr> <th><?= $block->escapeHtml(__('Invoiced')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyInvoiced()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyInvoiced() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyShipped() && $block->isShipmentSeparately($_item)) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= (int)$_item->getOrderItem()->getQtyShipped()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyShipped() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyRefunded()) : ?> <tr> <th><?= $block->escapeHtml(__('Refunded')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyRefunded()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyRefunded() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getOrderItem()->getQtyCanceled()) : ?> <tr> <th><?= $block->escapeHtml(__('Canceled')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyCanceled()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyCanceled() * 1 ?></td> </tr> <?php endif; ?> </table> @@ -109,12 +109,12 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= (float)$_item->getOrderItem()->getQtyOrdered()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyOrdered() * 1 ?></td> </tr> <?php if ((float) $_item->getOrderItem()->getQtyShipped()) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= (int)$_item->getOrderItem()->getQtyShipped()*1 ?></td> + <td><?= (float)$_item->getOrderItem()->getQtyShipped() * 1 ?></td> </tr> <?php endif; ?> </table> @@ -128,9 +128,9 @@ <input type="text" class="input-text admin__control-text qty-input" name="invoice[items][<?= $block->escapeHtmlAttr($_item->getOrderItemId()) ?>]" - value="<?= (int)$_item->getQty()*1 ?>" /> + value="<?= (float)$_item->getQty() * 1 ?>" /> <?php else : ?> - <?= (int)$_item->getQty()*1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php endif; ?> <?php else : ?>   diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml index 212603021967..e29bb5dbc947 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/invoice/view/items/renderer.phtml @@ -64,7 +64,7 @@ </td> <td class="col-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= (int)$_item->getQty()*1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml index dba1fc5492b0..0a8b75944194 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/order/view/items/renderer.phtml @@ -87,30 +87,30 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= (int)$_item->getQtyOrdered()*1 ?></td> + <td><?= (float)$_item->getQtyOrdered() * 1 ?></td> </tr> <?php if ((float) $_item->getQtyInvoiced()) : ?> <tr> <th><?= $block->escapeHtml(__('Invoiced')) ?></th> - <td><?= (int)$_item->getQtyInvoiced()*1 ?></td> + <td><?= (float)$_item->getQtyInvoiced() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getQtyShipped() && $block->isShipmentSeparately($_item)) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= (int)$_item->getQtyShipped()*1 ?></td> + <td><?= (float)$_item->getQtyShipped() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getQtyRefunded()) : ?> <tr> <th><?= $block->escapeHtml(__('Refunded')) ?></th> - <td><?= (int)$_item->getQtyRefunded()*1 ?></td> + <td><?= (float)$_item->getQtyRefunded() * 1 ?></td> </tr> <?php endif; ?> <?php if ((float) $_item->getQtyCanceled()) : ?> <tr> <th><?= $block->escapeHtml(__('Canceled')) ?></th> - <td><?= (int)$_item->getQtyCanceled()*1 ?></td> + <td><?= (float)$_item->getQtyCanceled() * 1 ?></td> </tr> <?php endif; ?> </table> @@ -118,12 +118,12 @@ <table class="qty-table"> <tr> <th><?= $block->escapeHtml(__('Ordered')) ?></th> - <td><?= (int)$_item->getQtyOrdered()*1 ?></td> + <td><?= (float)$_item->getQtyOrdered() * 1 ?></td> </tr> <?php if ((float) $_item->getQtyShipped()) : ?> <tr> <th><?= $block->escapeHtml(__('Shipped')) ?></th> - <td><?= (int)$_item->getQtyShipped()*1 ?></td> + <td><?= (float)$_item->getQtyShipped() * 1 ?></td> </tr> <?php endif; ?> </table> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml index 3cb8473905fe..2e52ed906626 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/create/items/renderer.phtml @@ -58,7 +58,7 @@ <input type="text" class="input-text admin__control-text" name="shipment[items][<?= $block->escapeHtmlAttr($_item->getOrderItemId()) ?>]" - value="<?= (int)$_item->getQty()*1 ?>" /> + value="<?= (float)$_item->getQty() * 1 ?>" /> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml index bd9587024bcc..521669700e10 100644 --- a/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/adminhtml/templates/sales/shipment/view/items/renderer.phtml @@ -48,7 +48,7 @@ <td class="col-qty last"> <?php if (($block->isShipmentSeparately() && $_item->getParentItem()) || (!$block->isShipmentSeparately() && !$_item->getParentItem())) : ?> <?php if (isset($shipItems[$_item->getId()])) : ?> - <?= (int)$shipItems[$_item->getId()]->getQty()*1 ?> + <?= (float)$shipItems[$_item->getId()]->getQty() * 1 ?> <?php elseif ($_item->getIsVirtual()) : ?> <?= $block->escapeHtml(__('N/A')) ?> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml index b831522d402b..cbf7755ae991 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/creditmemo/default.phtml @@ -53,7 +53,7 @@ <?php endif; ?> <td class="item-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= (int)$_item->getQty() * 1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml index 2db335117b87..d24fa390fa04 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/invoice/default.phtml @@ -54,7 +54,7 @@ <?php endif; ?> <td class="item-qty"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= (int)$_item->getQty() * 1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml index cc2ffe12b135..94dc0917fcf8 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/order/default.phtml @@ -40,7 +40,7 @@ <p class="sku"><?= $block->escapeHtml(__('SKU')) ?>: <?= $block->escapeHtml($block->getSku($_item)) ?></p> </td> <td class="item-qty"> - <?= (int)$_item->getQtyOrdered() * 1 ?> + <?= (float)$_item->getQtyOrdered() * 1 ?> </td> <td class="item-price"> <?= /* @noEscape */ $block->getItemPrice($_item) ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml index 033172758fba..bf84ad33b926 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/email/order/items/shipment/default.phtml @@ -48,7 +48,7 @@ <td class="item-qty"> <?php if (($block->isShipmentSeparately() && $_item->getParentItem()) || (!$block->isShipmentSeparately() && !$_item->getParentItem())) : ?> <?php if (isset($shipItems[$_item->getId()])) : ?> - <?= (int)$shipItems[$_item->getId()]->getQty() * 1 ?> + <?= (float)$shipItems[$_item->getId()]->getQty() * 1 ?> <?php elseif ($_item->getIsVirtual()) : ?> <?= $block->escapeHtml(__('N/A')) ?> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml index 0ecf2250b0d6..64e6594b4f77 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml @@ -37,42 +37,42 @@ data-th="<?= $block->escapeHtmlAttr($attributes['option_label']) ?>" <?php endif; ?>> <?php if (!$_item->getOrderItem()->getParentItem()) : ?> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong> </td> <?php else : ?> - <td class="col value" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td> + <td class="col value" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td> <?php endif; ?> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= $block->escapeHtml($_item->getSku()) ?></td> - <td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')) ?>"><?= $block->escapeHtml($_item->getSku()) ?></td> + <td class="col price" data-th="<?= $block->escapeHtmlAttr(__('Price')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> <?= $block->getItemPriceHtml($_item) ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Quantity')) ?>"> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Quantity')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= (int)$_item->getQty()*1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> + <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> <?= $block->getItemRowTotalHtml($_item) ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col discount" data-th="<?= $block->escapeHtml(__('Discount Amount')) ?>"> + <td class="col discount" data-th="<?= $block->escapeHtmlAttr(__('Discount Amount')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> <?= $block->escapeHtml($block->getOrder()->formatPrice(-$_item->getDiscountAmount()), ['span']) ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col rowtotal" data-th="<?= $block->escapeHtml(__('Row Total')) ?>"> + <td class="col rowtotal" data-th="<?= $block->escapeHtmlAttr(__('Row Total')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> <?= $block->getItemRowTotalAfterDiscountHtml($_item) ?> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml index aeeec75d9448..b2025e53986c 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml @@ -40,28 +40,28 @@ data-th="<?= $block->escapeHtmlAttr($attributes['option_label']) ?>" <?php endif; ?>> <?php if (!$_item->getOrderItem()->getParentItem()) : ?> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong> </td> <?php else : ?> - <td class="col value" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td> + <td class="col value" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td> <?php endif; ?> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= $block->escapeHtml($_item->getSku()) ?></td> - <td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')) ?>"><?= $block->escapeHtml($_item->getSku()) ?></td> + <td class="col price" data-th="<?= $block->escapeHtmlAttr(__('Price')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> <?= $block->getItemPriceHtml($_item) ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty Invoiced')) ?>"> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Qty Invoiced')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> - <?= (int)$_item->getQty()*1 ?> + <?= (float)$_item->getQty() * 1 ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> + <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?php if ($block->canShowPriceInfo($_item)) : ?> <?= $block->getItemRowTotalHtml($_item) ?> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml index 14c7de8429fd..3507901dff86 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml @@ -38,28 +38,28 @@ $prevOptionId = ''; item-parent <?php endif; ?>" <?php if ($item->getParentItem()) : ?> - data-th="<?= $block->escapeHtml($attributes['option_label']); ?>" + data-th="<?= $block->escapeHtmlAttr($attributes['option_label']); ?>" <?php endif; ?>> <?php if (!$item->getParentItem()) : ?> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')); ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')); ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($item->getName()); ?></strong> </td> <?php else : ?> - <td class="col value" data-th="<?= $block->escapeHtml(__('Product Name')); ?>"> + <td class="col value" data-th="<?= $block->escapeHtmlAttr(__('Product Name')); ?>"> <?= $block->getValueHtml($item); ?> </td> <?php endif; ?> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')); ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')); ?>"> <?= /* @noEscape */ $block->prepareSku($item->getSku()); ?> </td> - <td class="col price" data-th="<?= $block->escapeHtml(__('Price')); ?>"> + <td class="col price" data-th="<?= $block->escapeHtmlAttr(__('Price')); ?>"> <?php if (!$item->getParentItem()) : ?> <?= /* @noEscape */ $block->getItemPriceHtml(); ?> <?php else : ?>   <?php endif; ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Quantity')); ?>"> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Quantity')); ?>"> <?php if (($item->getParentItem() && $block->isChildCalculated()) || (!$item->getParentItem() && !$block->isChildCalculated()) || ($item->getQtyShipped() > 0 && $item->getParentItem() && $block->isShipmentSeparately())) : ?> @@ -105,7 +105,7 @@ $prevOptionId = ''; </ul> <?php endif; ?> </td> - <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> + <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?php if (!$item->getParentItem()) : ?> <?= /* @noEscape */ $block->getItemRowTotalHtml(); ?> <?php else : ?> diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml index 0126a2372e2e..c2ed3b161f62 100644 --- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml +++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml @@ -33,17 +33,17 @@ <?php endif; ?> <tr id="order-item-row-<?= $block->escapeHtmlAttr($_item->getId()) ?>" class="<?php if ($_item->getParentItem()) : ?>item-options-container<?php else : ?>item-parent<?php endif; ?>"<?php if ($_item->getParentItem()) : ?> data-th="<?= $block->escapeHtmlAttr($attributes['option_label']) ?>"<?php endif; ?>> <?php if (!$_item->getParentItem()) : ?> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong> </td> <?php else : ?> - <td class="col value" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td> + <td class="col value" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td> <?php endif; ?> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= $block->escapeHtml($_item->getSku()) ?></td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty Shipped')) ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')) ?>"><?= $block->escapeHtml($_item->getSku()) ?></td> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Qty Shipped')) ?>"> <?php if (($block->isShipmentSeparately() && $_item->getParentItem()) || (!$block->isShipmentSeparately() && !$_item->getParentItem())) : ?> <?php if (isset($shipItems[$_item->getId()])) : ?> - <?= (int)$shipItems[$_item->getId()]->getQty()*1 ?> + <?= (float)$shipItems[$_item->getId()]->getQty() * 1 ?> <?php elseif ($_item->getIsVirtual()) : ?> <?= $block->escapeHtml(__('N/A')) ?> <?php else : ?> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/customer/products/list.phtml b/app/code/Magento/Downloadable/view/frontend/templates/customer/products/list.phtml index d040714aa9ae..eca72b350092 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/customer/products/list.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/customer/products/list.phtml @@ -26,21 +26,21 @@ <tbody> <?php foreach ($_items as $_item) : ?> <tr> - <td data-th="<?= $block->escapeHtml(__('Order #')) ?>" class="col id"> + <td data-th="<?= $block->escapeHtmlAttr(__('Order #')) ?>" class="col id"> <a href="<?= $block->escapeUrl($block->getOrderViewUrl($_item->getPurchased()->getOrderId())) ?>" title="<?= $block->escapeHtml(__('View Order')) ?>"> <?= $block->escapeHtml($_item->getPurchased()->getOrderIncrementId()) ?> </a> </td> - <td data-th="<?= $block->escapeHtml(__('Date')) ?>" class="col date"><?= $block->escapeHtml($block->formatDate($_item->getPurchased()->getCreatedAt())) ?></td> - <td data-th="<?= $block->escapeHtml(__('Title')) ?>" class="col title"> + <td data-th="<?= $block->escapeHtmlAttr(__('Date')) ?>" class="col date"><?= $block->escapeHtml($block->formatDate($_item->getPurchased()->getCreatedAt())) ?></td> + <td data-th="<?= $block->escapeHtmlAttr(__('Title')) ?>" class="col title"> <strong class="product-name"><?= $block->escapeHtml($_item->getPurchased()->getProductName()) ?></strong> <?php if ($_item->getStatus() == \Magento\Downloadable\Model\Link\Purchased\Item::LINK_STATUS_AVAILABLE) : ?> <a href="<?= $block->escapeUrl($block->getDownloadUrl($_item)) ?>" title="<?= $block->escapeHtmlAttr(__('Start Download')) ?>" class="action download" <?= /* @noEscape */ $block->getIsOpenInNewWindow() ? 'onclick="this.target=\'_blank\'"' : '' ?>><?= $block->escapeHtml($_item->getLinkTitle()) ?></a> <?php endif; ?> </td> - <td data-th="<?= $block->escapeHtml(__('Status')) ?>" class="col status"><?= $block->escapeHtml(__(ucfirst($_item->getStatus()))) ?></td> - <td data-th="<?= $block->escapeHtml(__('Remaining Downloads')) ?>" class="col remaining"><?= $block->escapeHtml($block->getRemainingDownloads($_item)) ?></td> + <td data-th="<?= $block->escapeHtmlAttr(__('Status')) ?>" class="col status"><?= $block->escapeHtml(__(ucfirst($_item->getStatus()))) ?></td> + <td data-th="<?= $block->escapeHtmlAttr(__('Remaining Downloads')) ?>" class="col remaining"><?= $block->escapeHtml($block->getRemainingDownloads($_item)) ?></td> </tr> <?php endforeach; ?> </tbody> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml index 31bc92cf47e1..25d2302e94b1 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/creditmemo/downloadable.phtml @@ -31,7 +31,7 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="item-qty"><?= (int)$_item->getQty() * 1 ?></td> + <td class="item-qty"><?= (float)$_item->getQty() * 1 ?></td> <td class="item-price"> <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml index aa4e3239d1a4..88f3b2cc6f9c 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/invoice/downloadable.phtml @@ -32,7 +32,7 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="item-qty"><?= (int)$_item->getQty() * 1 ?></td> + <td class="item-qty"><?= (float)$_item->getQty() * 1 ?></td> <td class="item-price"> <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml index da6ae3ca1248..8dc552933fd3 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/email/order/items/order/downloadable.phtml @@ -46,7 +46,7 @@ </table> <?php endif; ?> </td> - <td class="item-qty"><?= (int)$_item->getQtyOrdered() * 1 ?></td> + <td class="item-qty"><?= (float)$_item->getQtyOrdered() * 1 ?></td> <td class="item-price"> <?= /* @noEscape */ $block->getItemPrice($_item) ?> </td> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml index df5ddf6e1033..491d83ac0d5f 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/creditmemo/items/renderer/downloadable.phtml @@ -9,7 +9,7 @@ <?php $_item = $block->getItem() ?> <?php $_order = $block->getItem()->getOrderItem()->getOrder() ?> <tr class="border" id="order-item-row-<?= $block->escapeHtmlAttr($_item->getId()) ?>"> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong> <?php if ($_options = $block->getItemOptions()) : ?> <dl class="item-options links"> @@ -51,16 +51,16 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= /* @noEscape */ $block->prepareSku($block->getSku()) ?></td> - <td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')) ?>"><?= /* @noEscape */ $block->prepareSku($block->getSku()) ?></td> + <td class="col price" data-th="<?= $block->escapeHtmlAttr(__('Price')) ?>"> <?= $block->getItemPriceHtml() ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty')) ?>"><?= (int)$_item->getQty()*1 ?></td> - <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Qty')) ?>"><?= (float)$_item->getQty() * 1 ?></td> + <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?= $block->getItemRowTotalHtml() ?> </td> - <td class="col discount" data-th="<?= $block->escapeHtml(__('Discount Amount')) ?>"><?= /* @noEscape */ $_order->formatPrice(-$_item->getDiscountAmount()) ?></td> - <td class="col total" data-th="<?= $block->escapeHtml(__('Row Total')) ?>"> + <td class="col discount" data-th="<?= $block->escapeHtmlAttr(__('Discount Amount')) ?>"><?= /* @noEscape */ $_order->formatPrice(-$_item->getDiscountAmount()) ?></td> + <td class="col total" data-th="<?= $block->escapeHtmlAttr(__('Row Total')) ?>"> <?= $block->getItemRowTotalAfterDiscountHtml() ?> </td> </tr> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml index 85f083879019..7ea2de6e46ba 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/invoice/items/renderer/downloadable.phtml @@ -55,7 +55,7 @@ <?= $block->getItemPriceHtml() ?> </td> <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Qty Invoiced')) ?>"> - <span class="qty summary" data-label="<?= $block->escapeHtmlAttr(__('Qty Invoiced')) ?>"><?= (int)$_item->getQty()*1 ?></span> + <span class="qty summary" data-label="<?= $block->escapeHtmlAttr(__('Qty Invoiced')) ?>"><?= (float)$_item->getQty() * 1 ?></span> </td> <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?= $block->getItemRowTotalHtml() ?> diff --git a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml index b3795420f273..368f17449bb7 100644 --- a/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/frontend/templates/sales/order/items/renderer/downloadable.phtml @@ -8,7 +8,7 @@ ?> <?php $_item = $block->getItem() ?> <tr id="order-item-row-<?= $block->escapeHtmlAttr($_item->getId()) ?>"> - <td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"> + <td class="col name" data-th="<?= $block->escapeHtmlAttr(__('Product Name')) ?>"> <strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong> <?php if ($_options = $block->getItemOptions()) : ?> <dl class="item-options links"> @@ -51,39 +51,39 @@ <?php endif; ?> <?= $block->escapeHtml($_item->getDescription()) ?> </td> - <td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= /* @noEscape */ $block->prepareSku($block->getSku()) ?></td> - <td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>"> + <td class="col sku" data-th="<?= $block->escapeHtmlAttr(__('SKU')) ?>"><?= /* @noEscape */ $block->prepareSku($block->getSku()) ?></td> + <td class="col price" data-th="<?= $block->escapeHtmlAttr(__('Price')) ?>"> <?= $block->getItemPriceHtml() ?> </td> - <td class="col qty" data-th="<?= $block->escapeHtml(__('Qty')) ?>"> + <td class="col qty" data-th="<?= $block->escapeHtmlAttr(__('Qty')) ?>"> <ul class="items-qty"> <?php if ($block->getItem()->getQtyOrdered() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Ordered')) ?></span> - <span class="content"><?= (int)$block->getItem()->getQtyOrdered()*1 ?></span> + <span class="content"><?= (float)$block->getItem()->getQtyOrdered() * 1 ?></span> </li> <?php endif; ?> <?php if ($block->getItem()->getQtyShipped() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Shipped')) ?></span> - <span class="content"><?= (int)$block->getItem()->getQtyShipped()*1 ?></span> + <span class="content"><?= (float)$block->getItem()->getQtyShipped() * 1 ?></span> </li> <?php endif; ?> <?php if ($block->getItem()->getQtyCanceled() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Canceled')) ?></span> - <span class="content"><?= (int)$block->getItem()->getQtyCanceled()*1 ?></span> + <span class="content"><?= (float)$block->getItem()->getQtyCanceled() * 1 ?></span> </li> <?php endif; ?> <?php if ($block->getItem()->getQtyRefunded() > 0) : ?> <li class="item"> <span class="title"><?= $block->escapeHtml(__('Refunded')) ?></span> - <span class="content"><?= (int)$block->getItem()->getQtyRefunded()*1 ?></span> + <span class="content"><?= (float)$block->getItem()->getQtyRefunded() * 1 ?></span> </li> <?php endif; ?> </ul> </td> - <td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>"> + <td class="col subtotal" data-th="<?= $block->escapeHtmlAttr(__('Subtotal')) ?>"> <?= $block->getItemRowTotalHtml() ?> </td> </tr> From 7859a2fafe944d0001f663b8502143202dea0216 Mon Sep 17 00:00:00 2001 From: Douglas Radburn <douglas.radburn@pinpointdesigns.co.uk> Date: Tue, 18 Jun 2019 15:55:02 +0100 Subject: [PATCH 168/209] Added function to check against running/pending/successful cron tasks Added type missing for static call Updated static code tests again --- .../Observer/ProcessCronQueueObserver.php | 62 ++++++++++++++----- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php index 4bb5dc196f98..a8b43e396785 100644 --- a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php +++ b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php @@ -335,16 +335,21 @@ protected function _runJob($scheduledTime, $currentTime, $jobConfig, $schedule, $this->stopProfiling(); } - $schedule->setStatus(Schedule::STATUS_SUCCESS)->setFinishedAt(strftime( - '%Y-%m-%d %H:%M:%S', - $this->dateTime->gmtTimestamp() - )); - - $this->logger->info(sprintf( - 'Cron Job %s is successfully finished. Statistics: %s', - $jobCode, - $this->getProfilingStat() - )); + $schedule->setStatus( + Schedule::STATUS_SUCCESS)->setFinishedAt( + strftime( + '%Y-%m-%d %H:%M:%S', + $this->dateTime->gmtTimestamp() + ) + ); + + $this->logger->info( + sprintf( + 'Cron Job %s is successfully finished. Statistics: %s', + $jobCode, + $this->getProfilingStat() + ) + ); } /** @@ -395,6 +400,28 @@ private function getPendingSchedules($groupId) return $pendingJobs; } + /** + * Return job collection from database with status 'pending', 'running' or 'success' + * + * @param string $groupId + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection + */ + private function getNonExitedSchedules($groupId) + { + $jobs = $this->_config->getJobs(); + $pendingJobs = $this->_scheduleFactory->create()->getCollection(); + $pendingJobs->addFieldToFilter( + 'status', + [ + 'in' => [ + Schedule::STATUS_PENDING, Schedule::STATUS_RUNNING, Schedule::STATUS_SUCCESS + ] + ] + ); + $pendingJobs->addFieldToFilter('job_code', ['in' => array_keys($jobs[$groupId])]); + return $pendingJobs; + } + /** * Generate cron schedule * @@ -426,7 +453,7 @@ private function generateSchedules($groupId) null ); - $schedules = $this->getPendingSchedules($groupId); + $schedules = $this->getNonExitedSchedules($groupId); $exists = []; /** @var Schedule $schedule */ foreach ($schedules as $schedule) { @@ -669,11 +696,14 @@ private function cleanupScheduleMismatches() /** @var \Magento\Cron\Model\ResourceModel\Schedule $scheduleResource */ $scheduleResource = $this->_scheduleFactory->create()->getResource(); foreach ($this->invalid as $jobCode => $scheduledAtList) { - $scheduleResource->getConnection()->delete($scheduleResource->getMainTable(), [ - 'status = ?' => Schedule::STATUS_PENDING, - 'job_code = ?' => $jobCode, - 'scheduled_at in (?)' => $scheduledAtList, - ]); + $scheduleResource->getConnection()->delete( + $scheduleResource->getMainTable(), + [ + 'status = ?' => Schedule::STATUS_PENDING, + 'job_code = ?' => $jobCode, + 'scheduled_at in (?)' => $scheduledAtList, + ] + ); } return $this; } From 2d0fb70cb99fe7866eee251376a2de08dd2eab0c Mon Sep 17 00:00:00 2001 From: Alastair Mucklow <amucklow@strangerpixel.com> Date: Thu, 20 Jun 2019 09:52:33 +0100 Subject: [PATCH 169/209] Repair failing unit test --- .../Test/Unit/Observer/UrlRewriteHandlerTest.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php index b18597a42bf9..06a89a9dd5ec 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/UrlRewriteHandlerTest.php @@ -138,8 +138,14 @@ public function testGenerateProductUrlRewrites() ->willReturn(1); $category->expects($this->any()) ->method('getData') - ->with('save_rewrites_history') - ->willReturn(true); + ->withConsecutive( + [$this->equalTo('save_rewrites_history')], + [$this->equalTo('initial_setup_flag')] + ) + ->willReturnOnConsecutiveCalls( + true, + null + ); /* @var \Magento\Catalog\Model\Category|\PHPUnit_Framework_MockObject_MockObject $childCategory1 */ $childCategory1 = $this->getMockBuilder(\Magento\Catalog\Model\Category::class) @@ -175,6 +181,7 @@ public function testGenerateProductUrlRewrites() ->method('addIdFilter') ->willReturnSelf(); $productCollection->expects($this->any())->method('setStoreId')->willReturnSelf(); + $productCollection->expects($this->any())->method('addStoreFilter')->willReturnSelf(); $productCollection->expects($this->any())->method('addAttributeToSelect')->willReturnSelf(); $iterator = new \ArrayIterator([]); $productCollection->expects($this->any())->method('getIterator')->will($this->returnValue($iterator)); From 292fa21391f15055480542f22d3588641ba5f069 Mon Sep 17 00:00:00 2001 From: Alexey Arendarenko <alexeya@ven.com> Date: Thu, 20 Jun 2019 14:27:03 +0300 Subject: [PATCH 170/209] Fix issue with incorrect payment translation in sales emails add setStore method before generation email template variables --- .../Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php | 2 ++ .../Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php | 2 ++ .../Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php | 1 + .../Sales/Model/Order/Email/Sender/InvoiceCommentSender.php | 2 ++ .../Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php | 1 + .../Sales/Model/Order/Email/Sender/OrderCommentSender.php | 2 ++ .../Sales/Model/Order/Email/Sender/ShipmentCommentSender.php | 2 ++ .../Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php | 1 + .../Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php | 2 ++ .../Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php | 2 ++ 10 files changed, 17 insertions(+) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php index ecd5670a319e..9435c64a64cc 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php @@ -99,6 +99,8 @@ public function send( $creditmemo->setSendEmail(true); if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'creditmemo' => $creditmemo, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php index ce72f0fee778..09360d0685cf 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php @@ -63,6 +63,8 @@ public function __construct( public function send(Creditmemo $creditmemo, $notify = true, $comment = '') { $order = $creditmemo->getOrder(); + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'creditmemo' => $creditmemo, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php index 800448358311..2303958276f3 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php @@ -103,6 +103,7 @@ public function send(Creditmemo $creditmemo, $forceSyncMode = false) if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { $order = $creditmemo->getOrder(); + $this->identityContainer->setStore($order->getStore()); $transport = [ 'order' => $order, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php index 62d13eb8ce68..32855f78c157 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php @@ -63,6 +63,8 @@ public function __construct( public function send(Invoice $invoice, $notify = true, $comment = '') { $order = $invoice->getOrder(); + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'invoice' => $invoice, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php index 994fd79945cf..6a7c4186d3c7 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php @@ -103,6 +103,7 @@ public function send(Invoice $invoice, $forceSyncMode = false) if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { $order = $invoice->getOrder(); + $this->identityContainer->setStore($order->getStore()); $transport = [ 'order' => $order, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php index 98cb9304a494..e162e01bd755 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php @@ -61,6 +61,8 @@ public function __construct( */ public function send(Order $order, $notify = true, $comment = '') { + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'comment' => $comment, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php index 664f8ec9fc7e..b0b4907b96e7 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php @@ -63,6 +63,8 @@ public function __construct( public function send(Shipment $shipment, $notify = true, $comment = '') { $order = $shipment->getOrder(); + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'shipment' => $shipment, diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php index 6729c746f556..3c66cfae37c7 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php @@ -103,6 +103,7 @@ public function send(Shipment $shipment, $forceSyncMode = false) if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { $order = $shipment->getOrder(); + $this->identityContainer->setStore($order->getStore()); $transport = [ 'order' => $order, diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php b/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php index aa0687bee504..a67e1227d815 100644 --- a/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php +++ b/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php @@ -99,6 +99,8 @@ public function send( $invoice->setSendEmail(true); if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'invoice' => $invoice, diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php b/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php index 0a393548069f..4519e8439c5a 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php +++ b/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php @@ -99,6 +99,8 @@ public function send( $shipment->setSendEmail(true); if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { + $this->identityContainer->setStore($order->getStore()); + $transport = [ 'order' => $order, 'shipment' => $shipment, From 5b0e774d73b1b9368ff7d3254e617252368dda77 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Thu, 20 Jun 2019 18:09:26 +0400 Subject: [PATCH 171/209] MAGETWO-72172: [2.3] Disabled variation of configurable product added to shopping cart via admin - Updated automated test script --- .../Test/NoOptionAvailableToConfigureDisabledProductTest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml index 132c77be627a..cb0ea1c5de62 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml @@ -10,8 +10,8 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> <test name="NoOptionAvailableToConfigureDisabledProductTest"> <annotations> - <title value="No option available to configure disabled product"/> - <description value="No option available to configure disabled product"/> + <title value="Disabled variation of configurable product can't be added to shopping cart via admin"/> + <description value="Disabled variation of configurable product can't be added to shopping cart via admin"/> <severity value="AVERAGE"/> <testCaseId value="MC-17373"/> <useCaseId value="MAGETWO-72172"/> From 4357ea0cebbf584c4dbb75a145ff91ac293875bc Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan <sunnikri@adobe.com> Date: Thu, 20 Jun 2019 10:06:14 -0500 Subject: [PATCH 172/209] MQE-1601: Move MTF utils out from Magento codebase --- dev/tests/functional/.htaccess.sample | 11 ----- dev/tests/functional/utils/command.php | 37 --------------- .../utils/deleteMagentoGeneratedCode.php | 22 --------- dev/tests/functional/utils/export.php | 42 ----------------- dev/tests/functional/utils/locales.php | 35 -------------- dev/tests/functional/utils/log.php | 30 ------------ dev/tests/functional/utils/pathChecker.php | 30 ------------ dev/tests/functional/utils/website.php | 47 ------------------- 8 files changed, 254 deletions(-) delete mode 100644 dev/tests/functional/.htaccess.sample delete mode 100644 dev/tests/functional/utils/command.php delete mode 100644 dev/tests/functional/utils/deleteMagentoGeneratedCode.php delete mode 100644 dev/tests/functional/utils/export.php delete mode 100644 dev/tests/functional/utils/locales.php delete mode 100644 dev/tests/functional/utils/log.php delete mode 100644 dev/tests/functional/utils/pathChecker.php delete mode 100644 dev/tests/functional/utils/website.php diff --git a/dev/tests/functional/.htaccess.sample b/dev/tests/functional/.htaccess.sample deleted file mode 100644 index 67c2f3fe2d02..000000000000 --- a/dev/tests/functional/.htaccess.sample +++ /dev/null @@ -1,11 +0,0 @@ -############################################## -## Allow access to command.php, website.php, export.php, pathChecker.php, locales.php, deleteMagentoGeneratedCode.php and log.php - <FilesMatch "command.php|website.php|export.php|pathChecker.php|deleteMagentoGeneratedCode.php|log.php|locales.php"> - <IfVersion < 2.4> - order allow,deny - allow from all - </IfVersion> - <IfVersion >= 2.4> - Require all granted - </IfVersion> - </FilesMatch> diff --git a/dev/tests/functional/utils/command.php b/dev/tests/functional/utils/command.php deleted file mode 100644 index 9405f4ff7c4c..000000000000 --- a/dev/tests/functional/utils/command.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; -// phpcs:ignore Magento2.Security.IncludeFile -require_once __DIR__ . '/../../../../app/bootstrap.php'; - -use Symfony\Component\Console\Input\StringInput; -use Symfony\Component\Console\Output\NullOutput; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token']) && !empty($_POST['command'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - // phpcs:ignore Magento2.Security.Superglobal - $command = urldecode($_POST['command']); - // phpcs:ignore Magento2.Security.Superglobal - $magentoObjectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, $_SERVER); - // phpcs:ignore Magento2.Security.Superglobal - $magentoObjectManager = $magentoObjectManagerFactory->create($_SERVER); - $cli = $magentoObjectManager->create(\Magento\Framework\Console\Cli::class); - // phpcs:ignore Magento2.Functions.DiscouragedFunction - $input = new StringInput(escapeshellcmd($command)); - $input->setInteractive(false); - $output = new NullOutput(); - $cli->doRun($input, $output); - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' or 'command' parameter is not set."; -} diff --git a/dev/tests/functional/utils/deleteMagentoGeneratedCode.php b/dev/tests/functional/utils/deleteMagentoGeneratedCode.php deleted file mode 100644 index bd4ed828202e..000000000000 --- a/dev/tests/functional/utils/deleteMagentoGeneratedCode.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token']) && !empty($_POST['path'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - // phpcs:ignore Magento2.Security.InsecureFunction - exec('rm -rf ../../../../generated/*'); - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' parameter is not set."; -} diff --git a/dev/tests/functional/utils/export.php b/dev/tests/functional/utils/export.php deleted file mode 100644 index df97c8db4840..000000000000 --- a/dev/tests/functional/utils/export.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token']) && !empty($_POST['template'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - $varDir = '../../../../var/export/'; - // phpcs:ignore Magento2.Security.Superglobal - $template = urldecode($_POST['template']); - // phpcs:ignore Magento2.Functions.DiscouragedFunction - $fileList = scandir($varDir, SCANDIR_SORT_NONE); - $files = []; - - foreach ($fileList as $fileName) { - if (preg_match("`$template`", $fileName) === 1) { - $filePath = $varDir . $fileName; - $files[] = [ - // phpcs:ignore Magento2.Functions.DiscouragedFunction - 'content' => file_get_contents($filePath), - 'name' => $fileName, - // phpcs:ignore Magento2.Functions.DiscouragedFunction - 'date' => filectime($filePath), - ]; - } - } - - // phpcs:ignore Magento2.Security.LanguageConstruct, Magento2.Security.InsecureFunction - echo serialize($files); - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' or 'template' parameter is not set."; -} diff --git a/dev/tests/functional/utils/locales.php b/dev/tests/functional/utils/locales.php deleted file mode 100644 index 40781ba8b68e..000000000000 --- a/dev/tests/functional/utils/locales.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - // phpcs:ignore Magento2.Security.Superglobal - if ($_POST['type'] == 'deployed') { - // phpcs:ignore Magento2.Security.Superglobal - $themePath = isset($_POST['theme_path']) ? $_POST['theme_path'] : 'adminhtml/Magento/backend'; - $directory = __DIR__ . '/../../../../pub/static/' . $themePath; - // phpcs:ignore Magento2.Functions.DiscouragedFunction - $locales = array_diff(scandir($directory), ['..', '.']); - } else { - // phpcs:ignore Magento2.Security.IncludeFile - require_once __DIR__ . DIRECTORY_SEPARATOR . 'bootstrap.php'; - $localeConfig = $magentoObjectManager->create(\Magento\Framework\Locale\Config::class); - $locales = $localeConfig->getAllowedLocales(); - } - // phpcs:ignore Magento2.Security.LanguageConstruct - echo implode('|', $locales); - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' parameter is not set."; -} diff --git a/dev/tests/functional/utils/log.php b/dev/tests/functional/utils/log.php deleted file mode 100644 index c07f52575504..000000000000 --- a/dev/tests/functional/utils/log.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -declare(strict_types=1); -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token']) && !empty($_POST['name'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - // phpcs:ignore Magento2.Security.Superglobal - $name = urldecode($_POST['name']); - if (preg_match('/\.\.(\\\|\/)/', $name)) { - // phpcs:ignore Magento2.Exceptions.DirectThrow - throw new \InvalidArgumentException('Invalid log file name'); - } - - // phpcs:ignore Magento2.Security.InsecureFunction, Magento2.Functions.DiscouragedFunction, Magento2.Security.LanguageConstruct - echo serialize(file_get_contents('../../../../var/log' . '/' . $name)); - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' or 'name' parameter is not set."; -} diff --git a/dev/tests/functional/utils/pathChecker.php b/dev/tests/functional/utils/pathChecker.php deleted file mode 100644 index d4a59529fac4..000000000000 --- a/dev/tests/functional/utils/pathChecker.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token']) && !empty($_POST['path'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - // phpcs:ignore Magento2.Security.Superglobal - $path = urldecode($_POST['path']); - // phpcs:ignore Magento2.Functions.DiscouragedFunction - if (file_exists('../../../../' . $path)) { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo 'path exists: true'; - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo 'path exists: false'; - } - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' or 'path' parameter is not set."; -} diff --git a/dev/tests/functional/utils/website.php b/dev/tests/functional/utils/website.php deleted file mode 100644 index 859b60785e49..000000000000 --- a/dev/tests/functional/utils/website.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -// phpcs:ignore Magento2.Security.IncludeFile -include __DIR__ . '/authenticate.php'; - -// phpcs:ignore Magento2.Security.Superglobal -if (!empty($_POST['token']) && !empty($_POST['website_code'])) { - // phpcs:ignore Magento2.Security.Superglobal - if (authenticate(urldecode($_POST['token']))) { - // phpcs:ignore Magento2.Security.Superglobal - $websiteCode = urldecode($_POST['website_code']); - $rootDir = '../../../../'; - $websiteDir = $rootDir . 'websites/' . $websiteCode . '/'; - // phpcs:ignore Magento2.Functions.DiscouragedFunction - $contents = file_get_contents($rootDir . 'index.php'); - - $websiteParam = <<<EOD -\$params = \$_SERVER; -\$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = '$websiteCode'; -\$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website'; -EOD; - - $pattern = '`(try {.*?)(\/app\/bootstrap.*?}\n)(.*?)\$_SERVER`mis'; - $replacement = "$1/../..$2\n$websiteParam$3\$params"; - - $contents = preg_replace($pattern, $replacement, $contents); - - $old = umask(0); - // phpcs:ignore Magento2.Functions.DiscouragedFunction - mkdir($websiteDir, 0760, true); - umask($old); - - // phpcs:ignore Magento2.Functions.DiscouragedFunction - copy($rootDir . '.htaccess', $websiteDir . '.htaccess'); - // phpcs:ignore Magento2.Functions.DiscouragedFunction - file_put_contents($websiteDir . 'index.php', $contents); - } else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "Command not unauthorized."; - } -} else { - // phpcs:ignore Magento2.Security.LanguageConstruct - echo "'token' or 'website_code' parameter is not set."; -} From 8912d07781894338d52e76f40d3f9ddf5bc3c4fc Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Thu, 20 Jun 2019 20:05:58 +0300 Subject: [PATCH 173/209] MAGETWO-99591: Restricted admin cannot edit reviews from pending reviews grid --- app/code/Magento/Review/i18n/en_US.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Review/i18n/en_US.csv b/app/code/Magento/Review/i18n/en_US.csv index c597f0ae70f0..07b7e8c13bd1 100644 --- a/app/code/Magento/Review/i18n/en_US.csv +++ b/app/code/Magento/Review/i18n/en_US.csv @@ -135,5 +135,5 @@ Inactive,Inactive "Please select one of each of the ratings above.","Please select one of each of the ratings above." star,star stars,stars -"Sorry, You have not permission to do this. One or more of the reviews are not in Pending Status.","Sorry, You have not permission to do this. One or more of the reviews are not in Pending Status." -"Sorry, You have not permission to do this. The Review is not in Pending status.","Sorry, You have not permission to do this. The Review is not in Pending status." +"You don’t have permission to perform this operation. Selected reviews must be in Pending Status only.","You don’t have permission to perform this operation. Selected reviews must be in Pending Status only." +"You don’t have permission to perform this operation. The selected review must be in Pending Status.","You don’t have permission to perform this operation. The selected review must be in Pending Status." From 951ff659358cdbb4bfa28c256cc08050636fc762 Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Thu, 20 Jun 2019 20:16:13 +0300 Subject: [PATCH 174/209] MAGETWO-99591: Restricted admin cannot edit reviews from pending reviews grid --- .../Magento/Review/Controller/Adminhtml/Product/Delete.php | 5 ++++- .../Magento/Review/Controller/Adminhtml/Product/Edit.php | 5 ++++- .../Review/Controller/Adminhtml/Product/MassDelete.php | 4 ++-- .../Review/Controller/Adminhtml/Product/MassUpdateStatus.php | 4 ++-- .../Magento/Review/Controller/Adminhtml/Product/Save.php | 5 ++++- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php index e2ebe694e52e..ee74a2c569dc 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php @@ -64,7 +64,10 @@ protected function _isAllowed() if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { $this->messageManager->addErrorMessage( - __('Sorry, You have not permission to do this. The Review is not in Pending status.') + __( + 'You don’t have permission to perform this operation.' + . ' The selected review must be in Pending Status.' + ) ); return false; diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php index bcf307944e0f..91e9e5becc6c 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php @@ -51,7 +51,10 @@ protected function _isAllowed() if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { $this->messageManager->addErrorMessage( - __('Sorry, You have not permission to do this. The Review is not in Pending status.') + __( + 'You don’t have permission to perform this operation.' + . ' The selected review must be in Pending Status.' + ) ); return false; diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php index 0aa93b929b28..95f9ca3aa79d 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php @@ -97,8 +97,8 @@ protected function _isAllowed() if ($model->getStatusId() != Review::STATUS_PENDING) { $this->messageManager->addErrorMessage( __( - 'Sorry, You have not permission to do this.' - . ' One or more of the reviews are not in Pending Status.' + 'You don’t have permission to perform this operation.' + . ' Selected reviews must be in Pending Status only.' ) ); diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php index 5e4dee524dad..9e93fb8fce63 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php @@ -101,8 +101,8 @@ protected function _isAllowed() if ($model->getStatusId() != Review::STATUS_PENDING) { $this->messageManager->addErrorMessage( __( - 'Sorry, You have not permission to do this. ' - . 'One or more of the reviews are not in Pending Status.' + 'You don’t have permission to perform this operation. ' + . 'Selected reviews must be in Pending Status only.' ) ); diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php index b7e7f921e092..5b8ad106987e 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php @@ -115,7 +115,10 @@ protected function _isAllowed() if ($this->getModel()->getStatusId() != Review::STATUS_PENDING) { $this->messageManager->addErrorMessage( - __('Sorry, You have not permission to do this. The Review is not in Pending status.') + __( + 'You don’t have permission to perform this operation.' + . ' The selected review must be in Pending Status.' + ) ); return false; From 95d2cd75345de4b7c4d17088e6d44c2f736ffd8b Mon Sep 17 00:00:00 2001 From: Pieter Hoste <hoste.pieter@gmail.com> Date: Thu, 20 Jun 2019 20:23:03 +0200 Subject: [PATCH 175/209] Fixes incorrect file reference in a comment in a .htaccess file. --- pub/media/.htaccess | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pub/media/.htaccess b/pub/media/.htaccess index d8793a891430..d68d163d7a6b 100644 --- a/pub/media/.htaccess +++ b/pub/media/.htaccess @@ -31,7 +31,7 @@ SetHandler default-handler RewriteCond %{REQUEST_FILENAME} !-f ############################################ -## rewrite everything else to index.php +## rewrite everything else to get.php RewriteRule .* ../get.php [L] </IfModule> From 08a9de5332f1bfc6bc470e7413e7b4d238b72384 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan <sunnikri@adobe.com> Date: Thu, 20 Jun 2019 14:01:46 -0500 Subject: [PATCH 176/209] MQE-1601: Move MTF utils out from Magento codebase moved authenticate.php to infra --- dev/tests/functional/utils/authenticate.php | 34 --------------------- 1 file changed, 34 deletions(-) delete mode 100644 dev/tests/functional/utils/authenticate.php diff --git a/dev/tests/functional/utils/authenticate.php b/dev/tests/functional/utils/authenticate.php deleted file mode 100644 index 958b692cbd38..000000000000 --- a/dev/tests/functional/utils/authenticate.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/** - * Check if token passed in is a valid auth token. - * - * @param string $token - * @return bool - * - * phpcs:disable Squiz.Functions.GlobalFunction - */ -function authenticate($token) -{ - // phpcs:ignore Magento2.Security.IncludeFile - require_once __DIR__ . '/../../../../app/bootstrap.php'; - - // phpcs:ignore Magento2.Security.Superglobal - $magentoObjectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, $_SERVER); - // phpcs:ignore Magento2.Security.Superglobal - $magentoObjectManager = $magentoObjectManagerFactory->create($_SERVER); - $tokenModel = $magentoObjectManager->get(\Magento\Integration\Model\Oauth\Token::class); - - $tokenPassedIn = $token; - // Token returned will be null if the token we passed in is invalid - $tokenFromMagento = $tokenModel->loadByToken($tokenPassedIn)->getToken(); - if (!empty($tokenFromMagento) && ($tokenFromMagento == $tokenPassedIn)) { - return true; - } else { - return false; - } -} From 165b2cdb5edda0a8fbdd48ec366ff12e8fc01f2e Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Thu, 20 Jun 2019 18:28:24 -0500 Subject: [PATCH 177/209] MAGETWO-99736: Authorize.net - 3D Secure 2.0 Support for 2.3 - update composer hash --- composer.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.lock b/composer.lock index 2cdd7c80cf28..e4bf7ad1aafa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ddcaab80336d44c861e6763148e5f071", + "content-hash": "fd2f56861434bfe26aaa4811879b7b24", "packages": [ { "name": "braintree/braintree_php", From a16bcf7b2cdde788a428c2e4f32ee6cde3e378f6 Mon Sep 17 00:00:00 2001 From: Ravi Chandra <ravi.chandra@krishtechnolabs.com> Date: Fri, 21 Jun 2019 10:10:59 +0530 Subject: [PATCH 178/209] Correct spelling --- .../Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php index a768e2450bfe..91b015782fe1 100644 --- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php +++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php @@ -7,7 +7,7 @@ namespace Magento\Bundle\Block\Adminhtml\Catalog\Product\Edit\Tab\Attributes; /** - * Bundle Extended Attribures Block. + * Bundle Extended Attributes Block. * * @author Magento Core Team <core@magentocommerce.com> */ From ea6dd212ac8d6c3539e0bbcff22c189dd6335904 Mon Sep 17 00:00:00 2001 From: "rostyslav.hymon" <rostyslav.hymon@transoftgroup.com> Date: Fri, 21 Jun 2019 10:56:30 +0300 Subject: [PATCH 179/209] MC-17675: Dashboard displays incorrect currency codes if default base currency differs from default website currency --- app/code/Magento/Backend/Block/Dashboard/Bar.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Backend/Block/Dashboard/Bar.php b/app/code/Magento/Backend/Block/Dashboard/Bar.php index 7ccb2d51ccd1..57f13c740f78 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Bar.php +++ b/app/code/Magento/Backend/Block/Dashboard/Bar.php @@ -5,6 +5,8 @@ */ namespace Magento\Backend\Block\Dashboard; +use Magento\Store\Model\Store; + /** * Adminhtml dashboard bar block * @@ -23,6 +25,8 @@ class Bar extends \Magento\Backend\Block\Dashboard\AbstractDashboard protected $_currentCurrencyCode = null; /** + * Get totals + * * @return array */ public function getTotals() @@ -31,6 +35,8 @@ public function getTotals() } /** + * Add total + * * @param string $label * @param float $value * @param bool $isQuantity @@ -73,6 +79,7 @@ public function setCurrency($currency) * Retrieve currency model if not set then return currency model for current store * * @return \Magento\Directory\Model\Currency + * @SuppressWarnings(PHPMD.RequestAwareBlockMethod) */ public function getCurrency() { @@ -90,7 +97,8 @@ public function getCurrency() $this->getRequest()->getParam('group') )->getWebsite()->getBaseCurrency(); } else { - $this->_currentCurrencyCode = $this->_storeManager->getStore()->getBaseCurrency(); + $this->_currentCurrencyCode = $this->_storeManager->getStore(Store::DEFAULT_STORE_ID) + ->getBaseCurrency(); } } From 96be0d79b8258e0fbb77800a6cd0cecb807551fe Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Fri, 21 Jun 2019 11:58:14 +0300 Subject: [PATCH 180/209] MAGETWO-63599: [GitHub] catalog:images:resize = getimagesize(): Read error! in vendor/magento/module-catalog/Model/Product/Image.php on line 410 if an image is 0 bytes #8204 - Static test fixes --- lib/internal/Magento/Framework/Image/Adapter/Gd2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php index df6c7652758c..d52e70ef56a1 100644 --- a/lib/internal/Magento/Framework/Image/Adapter/Gd2.php +++ b/lib/internal/Magento/Framework/Image/Adapter/Gd2.php @@ -325,8 +325,8 @@ public function checkAlpha($fileName) * * @param resource $imageResource * @param int $fileType - * @param bool &$isAlpha - * @param bool &$isTrueColor + * @param bool $isAlpha + * @param bool $isTrueColor * * @return boolean * From 2f35a3bf269c36bbead7475f780e6033edf84fe3 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <engcom-vendorworker-foxtrot@adobe.com> Date: Fri, 21 Jun 2019 12:19:50 +0300 Subject: [PATCH 181/209] magento/magento2#22675: Static test fix. --- app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js b/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js index 414c98a06be8..845ed03725bf 100644 --- a/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js +++ b/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js @@ -299,6 +299,7 @@ define([ // validate parent form if (self.$selector.validate().errorList.length) { $('body').trigger('processStop'); + return false; } From 2a4706473ab52f079547339aa36f059e2a9e1c55 Mon Sep 17 00:00:00 2001 From: Oleg Onufer <linkedddd@gmail.com> Date: Fri, 21 Jun 2019 12:45:05 +0300 Subject: [PATCH 182/209] MC-6454: [2.3] Admin with access to one website can create product and assign only for this website --- .../ActionGroup/AdminProductActionGroup.xml | 26 ++++++++++++++++++ .../Mftf/Section/AdminProductFormSection.xml | 3 ++- .../AdminDeleteCreatedRoleActionGroup.xml | 24 ----------------- .../AdminDeleteUserRoleActionGroup.xml | 27 +++++++++++++++++++ 4 files changed, 55 insertions(+), 25 deletions(-) delete mode 100644 app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedRoleActionGroup.xml create mode 100644 app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserRoleActionGroup.xml diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml index 992d7fe644f2..b980b74bd9a9 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml @@ -33,6 +33,7 @@ <arguments> <argument name="product" defaultValue="_defaultProduct"/> </arguments> + <scrollToTopOfPage stepKey="scrollToTopOfPage"/> <fillField selector="{{AdminProductFormSection.productName}}" userInput="{{product.name}}" stepKey="fillProductName"/> <fillField selector="{{AdminProductFormSection.productSku}}" userInput="{{product.sku}}" stepKey="fillProductSku"/> <fillField selector="{{AdminProductFormSection.productPrice}}" userInput="{{product.price}}" stepKey="fillProductPrice"/> @@ -489,4 +490,29 @@ <conditionalClick selector="{{AdminProductFormSection.enableProductLabel}}" dependentSelector="{{AdminProductFormSection.productStatusValue('1')}}" visible="true" stepKey="disableProduct"/> <seeElement selector="{{AdminProductFormSection.productStatusValue('2')}}" stepKey="assertThatProductSetToDisabled"/> </actionGroup> + + <!-- You are on product Edit Page --> + <!-- Assert checkbox available for website in Product In Websites --> + <actionGroup name="AssertWebsiteIsAvailableInProductWebsites"> + <arguments> + <argument name="website" type="string"/> + </arguments> + <scrollTo selector="{{ProductInWebsitesSection.sectionHeader}}" stepKey="scrollToProductInWebsitesSection"/> + <conditionalClick selector="{{ProductInWebsitesSection.sectionHeader}}" dependentSelector="{{ProductInWebsitesSection.sectionHeaderOpened}}" visible="false" stepKey="expandProductWebsitesSection"/> + <seeElement selector="{{ProductInWebsitesSection.website(website)}}" stepKey="seeCheckboxForWebsite"/> + </actionGroup> + + <!-- You are on product Edit Page --> + <!-- Assert checkbox not available for website in Product In Websites --> + <actionGroup name="AssertWebsiteIsNotAvailableInProductWebsites" extends="AssertWebsiteIsAvailableInProductWebsites"> + <remove keyForRemoval="seeCheckboxForWebsite"/> + <dontSeeElement selector="{{ProductInWebsitesSection.website(website)}}" after="expandProductWebsitesSection" stepKey="dontSeeCheckboxForWebsite"/> + </actionGroup> + + <!-- You are on product Edit Page --> + <!-- Assert checkbox Is checked for website in Product In Websites --> + <actionGroup name="AssertProductIsAssignedToWebsite" extends="AssertWebsiteIsAvailableInProductWebsites"> + <remove keyForRemoval="seeCheckboxForWebsite"/> + <seeCheckboxIsChecked selector="{{ProductInWebsitesSection.website(website)}}" after="expandProductWebsitesSection" stepKey="seeCustomWebsiteIsChecked"/> + </actionGroup> </actionGroups> diff --git a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml index 7b1510b63033..04593e845786 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Section/AdminProductFormSection.xml @@ -76,6 +76,7 @@ </section> <section name="ProductInWebsitesSection"> <element name="sectionHeader" type="button" selector="div[data-index='websites']" timeout="30"/> + <element name="sectionHeaderOpened" type="button" selector="[data-index='websites']._show" timeout="30"/> <element name="website" type="checkbox" selector="//label[contains(text(), '{{var1}}')]/parent::div//input[@type='checkbox']" parameterized="true"/> </section> <section name="ProductDesignSection"> @@ -214,4 +215,4 @@ <element name="attributeGroupByName" type="button" selector="//div[@class='fieldset-wrapper-title']//span[text()='{{group}}']" parameterized="true"/> <element name="attributeByGroupAndName" type="text" selector="//div[@class='fieldset-wrapper-title']//span[text()='{{group}}']/../../following-sibling::div//span[contains(text(),'attribute')]" parameterized="true"/> </section> -</sections> \ No newline at end of file +</sections> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedRoleActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedRoleActionGroup.xml deleted file mode 100644 index 813e22df227c..000000000000 --- a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteCreatedRoleActionGroup.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> -<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> - <actionGroup name="AdminDeleteCreatedRoleActionGroup"> - <arguments> - <argument name="role" defaultValue=""/> - </arguments> - <amOnPage url="{{AdminRolesPage.url}}" stepKey="amOnAdminUsersPage"/> - <waitForPageLoad stepKey="waitForUserRolePageLoad"/> - <click stepKey="clickToAddNewRole" selector="{{AdminDeleteRoleSection.role(role.name)}}"/> - <fillField stepKey="TypeCurrentPassword" selector="{{AdminDeleteRoleSection.current_pass}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> - <click stepKey="clickToDeleteRole" selector="{{AdminDeleteRoleSection.delete}}"/> - <waitForElementVisible stepKey="wait" selector="{{AdminDeleteRoleSection.confirm}}" time="30"/> - <click stepKey="clickToConfirm" selector="{{AdminDeleteRoleSection.confirm}}"/> - <waitForPageLoad stepKey="waitForPageLoad"/> - <see stepKey="seeSuccessMessage" userInput="You deleted the role."/> - </actionGroup> -</actionGroups> diff --git a/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserRoleActionGroup.xml b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserRoleActionGroup.xml new file mode 100644 index 000000000000..d2c881b77197 --- /dev/null +++ b/app/code/Magento/User/Test/Mftf/ActionGroup/AdminDeleteUserRoleActionGroup.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminDeleteUserRoleActionGroup"> + <arguments> + <argument name="roleName" type="string"/> + </arguments> + <amOnPage url="{{AdminRolesPage.url}}" stepKey="navigateToUserRolesGrid" /> + <fillField selector="{{AdminRoleGridSection.roleNameFilterTextField}}" userInput="{{roleName}}" stepKey="enterRoleName" /> + <click selector="{{AdminDataGridHeaderSection.applyFilters}}" stepKey="clickSearch" /> + <see selector="{{AdminDataGridTableSection.row('1')}}" userInput="{{roleName}}" stepKey="seeUserRole" /> + <click selector="{{AdminDataGridTableSection.row('1')}}" stepKey="openRoleEditPage"/> + <waitForPageLoad stepKey="waitForRoleEditPageLoad"/> + <fillField selector="{{AdminEditRoleInfoSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="enterThePassword" /> + <click selector="{{AdminEditRoleInfoSection.deleteButton}}" stepKey="deleteUserRole"/> + <waitForElementVisible selector="{{AdminConfirmationModalSection.message}}" stepKey="waitForConfirmModal"/> + <click selector="{{AdminConfirmationModalSection.ok}}" stepKey="confirmDelete"/> + <waitForElementVisible selector="{{AdminMessagesSection.successMessage}}" stepKey="waitSuccessMessage"/> + <see selector="{{AdminMessagesSection.successMessage}}" userInput="You deleted the role." stepKey="seeUserRoleDeleteMessage"/> + </actionGroup> +</actionGroups> From 8ee5163c3e031522b3fc2091a6703d1bac581297 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <engcom-vendorworker-foxtrot@adobe.com> Date: Fri, 21 Jun 2019 12:54:39 +0300 Subject: [PATCH 183/209] magento/magento2#23312: Static test fix. --- .../Observer/ProcessCronQueueObserver.php | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php index a8b43e396785..5c8aa1dc78ab 100644 --- a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php +++ b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php @@ -3,16 +3,15 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ - /** * Handling cron jobs */ namespace Magento\Cron\Observer; +use Magento\Cron\Model\Schedule; use Magento\Framework\App\State; use Magento\Framework\Console\Cli; use Magento\Framework\Event\ObserverInterface; -use Magento\Cron\Model\Schedule; use Magento\Framework\Profiler\Driver\Standard\Stat; use Magento\Framework\Profiler\Driver\Standard\StatFactory; @@ -204,7 +203,6 @@ public function __construct( */ public function execute(\Magento\Framework\Event\Observer $observer) { - $currentTime = $this->dateTime->gmtTimestamp(); $jobGroupsRoot = $this->_config->getJobs(); // sort jobs groups to start from used in separated process @@ -258,7 +256,6 @@ function ($groupId) use ($currentTime, $jobsRoot) { */ private function lockGroup($groupId, callable $callback) { - if (!$this->lockManager->lock(self::LOCK_PREFIX . $groupId, self::LOCK_TIMEOUT)) { $this->logger->warning( sprintf( @@ -293,17 +290,20 @@ protected function _runJob($scheduledTime, $currentTime, $jobConfig, $schedule, $scheduleLifetime = $scheduleLifetime * self::SECONDS_IN_MINUTE; if ($scheduledTime < $currentTime - $scheduleLifetime) { $schedule->setStatus(Schedule::STATUS_MISSED); + // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception(sprintf('Cron Job %s is missed at %s', $jobCode, $schedule->getScheduledAt())); } if (!isset($jobConfig['instance'], $jobConfig['method'])) { $schedule->setStatus(Schedule::STATUS_ERROR); + // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception(sprintf('No callbacks found for cron job %s', $jobCode)); } $model = $this->_objectManager->create($jobConfig['instance']); $callback = [$model, $jobConfig['method']]; if (!is_callable($callback)) { $schedule->setStatus(Schedule::STATUS_ERROR); + // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception( sprintf('Invalid callback: %s::%s can\'t be called', $jobConfig['instance'], $jobConfig['method']) ); @@ -314,15 +314,18 @@ protected function _runJob($scheduledTime, $currentTime, $jobConfig, $schedule, $this->startProfiling(); try { $this->logger->info(sprintf('Cron Job %s is run', $jobCode)); + //phpcs:ignore Magento2.Functions.DiscouragedFunction call_user_func_array($callback, [$schedule]); } catch (\Throwable $e) { $schedule->setStatus(Schedule::STATUS_ERROR); - $this->logger->error(sprintf( - 'Cron Job %s has an error: %s. Statistics: %s', - $jobCode, - $e->getMessage(), - $this->getProfilingStat() - )); + $this->logger->error( + sprintf( + 'Cron Job %s has an error: %s. Statistics: %s', + $jobCode, + $e->getMessage(), + $this->getProfilingStat() + ) + ); if (!$e instanceof \Exception) { $e = new \RuntimeException( 'Error when running a cron job', @@ -336,7 +339,8 @@ protected function _runJob($scheduledTime, $currentTime, $jobConfig, $schedule, } $schedule->setStatus( - Schedule::STATUS_SUCCESS)->setFinishedAt( + Schedule::STATUS_SUCCESS + )->setFinishedAt( strftime( '%Y-%m-%d %H:%M:%S', $this->dateTime->gmtTimestamp() @@ -411,7 +415,7 @@ private function getNonExitedSchedules($groupId) $jobs = $this->_config->getJobs(); $pendingJobs = $this->_scheduleFactory->create()->getCollection(); $pendingJobs->addFieldToFilter( - 'status', + 'status', [ 'in' => [ Schedule::STATUS_PENDING, Schedule::STATUS_RUNNING, Schedule::STATUS_SUCCESS From 78af5b8a06033a5d969cb820de7b54006fc9bd38 Mon Sep 17 00:00:00 2001 From: Danilo Argentiero <danilo.argentiero@magespecialist.it> Date: Fri, 21 Jun 2019 11:57:24 +0200 Subject: [PATCH 184/209] Get review entity id by code instead hard-coded. --- app/code/Magento/Review/Controller/Adminhtml/Product/Post.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php index b62fcc7326ee..ae4babb05679 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php @@ -10,6 +10,7 @@ use Magento\Framework\Controller\ResultFactory; use Magento\Store\Model\Store; use Magento\Framework\Exception\LocalizedException; +use Magento\Review\Model\Review; class Post extends ProductController implements HttpPostActionInterface { @@ -33,7 +34,7 @@ public function execute() } $review = $this->reviewFactory->create()->setData($data); try { - $review->setEntityId(1) // product + $review->setEntityId($review->getEntityIdByCode(Review::ENTITY_PRODUCT_CODE)) ->setEntityPkValue($productId) ->setStoreId(Store::DEFAULT_STORE_ID) ->setStatusId($data['status_id']) From 296f4d843195337bf28aa9b32b2429cf22080a8d Mon Sep 17 00:00:00 2001 From: Mikalai Shostka <Mikalai_Shostka@epam.com> Date: Fri, 21 Jun 2019 13:02:24 +0300 Subject: [PATCH 185/209] MAGETWO-64923: Duplicate products not showing on the frontend - Update automated test script --- .../Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml index 8b1f1256d211..aa70ed1ff060 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml +++ b/app/code/Magento/ConfigurableProduct/Test/Mftf/ActionGroup/AdminConfigurableProductActionGroup.xml @@ -291,7 +291,7 @@ <argument name="label" type="string" defaultValue="option1"/> <argument name="quantity" type="string" defaultValue="10"/> </arguments> - <click selector="{{AdminCreateProductConfigurationsPanel.applyUniqueQuantityToEachSkus}}" dependentSelector="{{AdminCreateProductConfigurationsPanel.selectQuantity}}" visible="false" stepKey="clickOnApplyUniqueQuantitiesToEachSku"/> + <click selector="{{AdminCreateProductConfigurationsPanel.applyUniqueQuantityToEachSkus}}" stepKey="clickOnApplyUniqueQuantitiesToEachSku"/> <selectOption selector="{{AdminCreateProductConfigurationsPanel.selectQuantity}}" userInput="{{frontend_label}}" stepKey="selectOption"/> <fillField selector="{{AdminCreateProductConfigurationsPanel.applyUniqueQuantity(label)}}" userInput="{{quantity}}" stepKey="enterAttributeQuantity"/> </actionGroup> From 677019c303df0b5cd30f74843800555dc46923ca Mon Sep 17 00:00:00 2001 From: Mastiuhin Olexandr <mastiuhin.olexandr@transoftgroup.com> Date: Fri, 21 Jun 2019 14:13:38 +0300 Subject: [PATCH 186/209] MC-17609: Unnecessary symbols in "Store view" dropdown. --- .../Backend/view/adminhtml/templates/store/switcher.phtml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml index 8674a167d28e..da18bc183759 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml @@ -36,7 +36,6 @@ <?php if ($block->hasDefaultOption()) : ?> <li class="store-switcher-all <?php if (!($block->getDefaultSelectionName() != $block->getCurrentSelectionName())) : ?>disabled<?php endif; ?> <?php if (!$block->hasScopeSelected()) : ?>current<?php endif; ?>"> <?php if ($block->getDefaultSelectionName() != $block->getCurrentSelectionName()) : ?> - ?> <a data-role="store-view-id" data-value="" href="#"> <?= $block->escapeHtml($block->getDefaultSelectionName()) ?> </a> From cd940528e47c840fdd97b01f2c29c0eccf747549 Mon Sep 17 00:00:00 2001 From: Yuliya Labudova <Yuliya_Labudova@epam.com> Date: Fri, 21 Jun 2019 14:33:05 +0300 Subject: [PATCH 187/209] MAGETWO-60918: Fatal error on Import/Export page if deleted category ids exists in category path - Fix fixture for integration test. --- ...export_with_broken_categories_path_rollback.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php index d642fbf01c55..d03c95cbeb4b 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_broken_categories_path_rollback.php @@ -16,8 +16,18 @@ /** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ $productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); -$product = $productRepository->get('simple', false, null, true); -$productRepository->delete($product); +try { + $product = $productRepository->get('simple', false, null, true); + $productRepository->delete($product); +} catch (\Magento\Framework\Exception\NoSuchEntityException $exception) { + //Product already removed +} + +$productCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get(\Magento\Catalog\Model\ResourceModel\Product\Collection::class); +foreach ($productCollection as $product) { + $product->delete(); +} //Remove categories /** @var Magento\Catalog\Model\ResourceModel\Category\Collection $collection */ From da08b65c24b3df953b8da88e1bf91e9ee0db0224 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Fri, 21 Jun 2019 07:44:06 -0500 Subject: [PATCH 188/209] MC-17462: Empty Order creation with Braintree and multiple address checkout --- .../method-renderer/multishipping/cc-form.js | 9 +-- .../method-renderer/multishipping/paypal.js | 9 +-- .../set-payment-information-extended.js | 60 +++++++++++++++++++ .../web/js/action/set-payment-information.js | 49 ++------------- .../frontend/web/js/view/payment/iframe.js | 19 ++++-- 5 files changed, 87 insertions(+), 59 deletions(-) create mode 100644 app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information-extended.js diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/cc-form.js index dc816c035a23..868fe174ae48 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/cc-form.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/cc-form.js @@ -12,7 +12,7 @@ define([ 'Magento_Ui/js/model/messageList', 'mage/translate', 'Magento_Checkout/js/model/full-screen-loader', - 'Magento_Checkout/js/action/set-payment-information', + 'Magento_Checkout/js/action/set-payment-information-extended', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Braintree/js/view/payment/validator-handler' ], function ( @@ -22,7 +22,7 @@ define([ messageList, $t, fullScreenLoader, - setPaymentInformationAction, + setPaymentInformationExtended, additionalValidators, validatorManager ) { @@ -51,9 +51,10 @@ define([ if (additionalValidators.validate()) { fullScreenLoader.startLoader(); $.when( - setPaymentInformationAction( + setPaymentInformationExtended( this.messageContainer, - this.getData() + this.getData(), + true ) ).done(this.done.bind(this)) .fail(this.fail.bind(this)); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/paypal.js index 0a9ec4fb6c6e..b3837103148c 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/paypal.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/multishipping/paypal.js @@ -8,14 +8,14 @@ define([ 'jquery', 'underscore', 'Magento_Braintree/js/view/payment/method-renderer/paypal', - 'Magento_Checkout/js/action/set-payment-information', + 'Magento_Checkout/js/action/set-payment-information-extended', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Checkout/js/model/full-screen-loader' ], function ( $, _, Component, - setPaymentInformationAction, + setPaymentInformationExtended, additionalValidators, fullScreenLoader ) { @@ -131,9 +131,10 @@ define([ placeOrder: function () { fullScreenLoader.startLoader(); $.when( - setPaymentInformationAction( + setPaymentInformationExtended( this.messageContainer, - this.getData() + this.getData(), + true ) ).done(this.done.bind(this)) .fail(this.fail.bind(this)); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information-extended.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information-extended.js new file mode 100644 index 000000000000..4085da82f415 --- /dev/null +++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information-extended.js @@ -0,0 +1,60 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/** + * @api + */ +define([ + 'Magento_Checkout/js/model/quote', + 'Magento_Checkout/js/model/url-builder', + 'mage/storage', + 'Magento_Checkout/js/model/error-processor', + 'Magento_Customer/js/model/customer', + 'Magento_Checkout/js/action/get-totals', + 'Magento_Checkout/js/model/full-screen-loader' +], function (quote, urlBuilder, storage, errorProcessor, customer, getTotalsAction, fullScreenLoader) { + 'use strict'; + + return function (messageContainer, paymentData, skipBilling) { + var serviceUrl, + payload; + + skipBilling = skipBilling || false; + payload = { + cartId: quote.getQuoteId(), + paymentMethod: paymentData + }; + + /** + * Checkout for guest and registered customer. + */ + if (!customer.isLoggedIn()) { + serviceUrl = urlBuilder.createUrl('/guest-carts/:cartId/set-payment-information', { + cartId: quote.getQuoteId() + }); + payload.email = quote.guestEmail; + } else { + serviceUrl = urlBuilder.createUrl('/carts/mine/set-payment-information', {}); + } + + if (skipBilling === false) { + payload.billingAddress = quote.billingAddress(); + } + + fullScreenLoader.startLoader(); + + return storage.post( + serviceUrl, JSON.stringify(payload) + ).fail( + function (response) { + errorProcessor.process(response, messageContainer); + } + ).always( + function () { + fullScreenLoader.stopLoader(); + } + ); + }; +}); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js index 997b60503a2b..d5261c976a72 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js @@ -7,54 +7,13 @@ * @api */ define([ - 'Magento_Checkout/js/model/quote', - 'Magento_Checkout/js/model/url-builder', - 'mage/storage', - 'Magento_Checkout/js/model/error-processor', - 'Magento_Customer/js/model/customer', - 'Magento_Checkout/js/action/get-totals', - 'Magento_Checkout/js/model/full-screen-loader' -], function (quote, urlBuilder, storage, errorProcessor, customer, getTotalsAction, fullScreenLoader) { + 'Magento_Checkout/js/action/set-payment-information-extended' + +], function (setPaymentInformationExtended) { 'use strict'; return function (messageContainer, paymentData) { - var serviceUrl, - payload; - - /** - * Checkout for guest and registered customer. - */ - if (!customer.isLoggedIn()) { - serviceUrl = urlBuilder.createUrl('/guest-carts/:cartId/set-payment-information', { - cartId: quote.getQuoteId() - }); - payload = { - cartId: quote.getQuoteId(), - email: quote.guestEmail, - paymentMethod: paymentData, - billingAddress: quote.billingAddress() - }; - } else { - serviceUrl = urlBuilder.createUrl('/carts/mine/set-payment-information', {}); - payload = { - cartId: quote.getQuoteId(), - paymentMethod: paymentData, - billingAddress: quote.billingAddress() - }; - } - - fullScreenLoader.startLoader(); - return storage.post( - serviceUrl, JSON.stringify(payload) - ).fail( - function (response) { - errorProcessor.process(response, messageContainer); - } - ).always( - function () { - fullScreenLoader.stopLoader(); - } - ); + return setPaymentInformationExtended(messageContainer, paymentData, false); }; }); diff --git a/app/code/Magento/Payment/view/frontend/web/js/view/payment/iframe.js b/app/code/Magento/Payment/view/frontend/web/js/view/payment/iframe.js index 1e352e429713..089dabac00b0 100644 --- a/app/code/Magento/Payment/view/frontend/web/js/view/payment/iframe.js +++ b/app/code/Magento/Payment/view/frontend/web/js/view/payment/iframe.js @@ -125,12 +125,7 @@ define([ this.isPlaceOrderActionAllowed(false); $.when( - setPaymentInformationAction( - this.messageContainer, - { - method: this.getCode() - } - ) + this.setPaymentInformation() ).done( this.done.bind(this) ).fail( @@ -145,6 +140,18 @@ define([ } }, + /** + * {Function} + */ + setPaymentInformation: function () { + setPaymentInformationAction( + this.messageContainer, + { + method: this.getCode() + } + ); + }, + /** * {Function} */ From 138ef5b315c6aa9c39e0bc627e635433bdfce146 Mon Sep 17 00:00:00 2001 From: Lusine Papyan <Lusine_Papyan@epam.com> Date: Fri, 21 Jun 2019 18:09:04 +0400 Subject: [PATCH 189/209] MAGETWO-98635: Multiple wishlists not supporting with Recently view widget or etc - Updated automated test script. --- .../Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml index 416da97ff5bd..2c45b9e140c0 100644 --- a/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/ClearWidgetsFromCMSContentActionGroup.xml @@ -25,6 +25,7 @@ <amOnPage url="{{CmsPageEditPage.url('2')}}" stepKey="navigateToEditHomePagePage"/> <waitForPageLoad stepKey="waitForCmsPageEditPage"/> <conditionalClick selector="{{CmsNewPagePageActionsSection.contentSectionName}}" dependentSelector="{{CatalogWidgetSection.insertWidgetButton}}" visible="false" stepKey="clickShowHideEditorIfVisible"/> + <waitForElementVisible selector="{{CmsNewPagePageContentSection.content}}" stepKey="waitForContentField"/> <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="CMS homepage content goes here." stepKey="resetCMSPageToDefaultContent"/> <click selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="clickSave"/> <waitForPageLoad stepKey="waitForSettingsApply"/> From 525a1e9769c88c22ef47af80f235e2738935902a Mon Sep 17 00:00:00 2001 From: Lena Orobei <oorobei@magento.com> Date: Fri, 21 Jun 2019 11:20:21 -0500 Subject: [PATCH 190/209] magento/graphql-ce#463: Query category for disabled catalog with products returns the products count --- .../Category/CheckCategoryIsActive.php | 67 +++++++++++++++++++ .../Model/Resolver/CategoryTree.php | 18 ++++- .../Products/DataProvider/CategoryTree.php | 31 --------- 3 files changed, 83 insertions(+), 33 deletions(-) create mode 100644 app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php new file mode 100644 index 000000000000..bf8057c63de3 --- /dev/null +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php @@ -0,0 +1,67 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\CatalogGraphQl\Model\Resolver\Category; + +use Magento\Catalog\Api\Data\CategoryInterface; +use Magento\Catalog\Model\Category; +use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; +use Magento\Framework\EntityManager\MetadataPool; +use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory; + +/** + * Check if category is active. + */ +class CheckCategoryIsActive +{ + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * @var MetadataPool + */ + private $metadata; + + /** + * @param CollectionFactory $collectionFactory + * @param MetadataPool $metadata + */ + public function __construct( + CollectionFactory $collectionFactory, + MetadataPool $metadata + ) + { + $this->collectionFactory = $collectionFactory; + $this->metadata = $metadata; + } + + /** + * Check if category is active. + * + * @param int $rootCategoryId + * @throws GraphQlNoSuchEntityException + */ + public function execute(int $rootCategoryId): void + { + $collection = $this->collectionFactory->create(); + $collection->addAttributeToFilter(Category::KEY_IS_ACTIVE, ['eq' => 1]) + ->getSelect() + ->where( + $collection->getSelect() + ->getConnection() + ->quoteIdentifier( + 'e.' . + $this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField() + ) . ' = ?', + $rootCategoryId + ); + + if ($collection->count() === 0) { + throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); + } + } +} diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php index 1783a5cd9a7e..8d7aa5495b3f 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php @@ -7,6 +7,8 @@ namespace Magento\CatalogGraphQl\Model\Resolver; +use Magento\Catalog\Model\Category; +use Magento\CatalogGraphQl\Model\Resolver\Category\CheckCategoryIsActive; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\ExtractDataFromCategoryTree; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\Framework\GraphQl\Config\Element\Field; @@ -34,16 +36,25 @@ class CategoryTree implements ResolverInterface */ private $extractDataFromCategoryTree; + /** + * @var CheckCategoryIsActive + */ + private $checkCategoryIsActive; + /** * @param \Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree $categoryTree * @param ExtractDataFromCategoryTree $extractDataFromCategoryTree + * @param CheckCategoryIsActive $checkCategoryIsActive */ public function __construct( \Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree $categoryTree, - ExtractDataFromCategoryTree $extractDataFromCategoryTree - ) { + ExtractDataFromCategoryTree $extractDataFromCategoryTree, + CheckCategoryIsActive $checkCategoryIsActive + ) + { $this->categoryTree = $categoryTree; $this->extractDataFromCategoryTree = $extractDataFromCategoryTree; + $this->checkCategoryIsActive = $checkCategoryIsActive; } /** @@ -72,6 +83,9 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value } $rootCategoryId = $this->getCategoryId($args); + if ($rootCategoryId !== Category::TREE_ROOT_ID) { + $this->checkCategoryIsActive->execute($rootCategoryId); + } $categoriesTree = $this->categoryTree->getTree($info, $rootCategoryId); if (empty($categoriesTree) || ($categoriesTree->count() == 0)) { diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php index 2fd48938af3c..fc5a563c82b4 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php @@ -11,7 +11,6 @@ use Magento\CatalogGraphQl\Model\Category\DepthCalculator; use Magento\CatalogGraphQl\Model\Category\LevelCalculator; use Magento\Framework\EntityManager\MetadataPool; -use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\Catalog\Api\Data\CategoryInterface; use Magento\Catalog\Model\ResourceModel\Category\Collection; @@ -85,10 +84,6 @@ public function __construct( public function getTree(ResolveInfo $resolveInfo, int $rootCategoryId): \Iterator { $categoryQuery = $resolveInfo->fieldNodes[0]; - if ($this->isCategoryActive($rootCategoryId) === false) { - throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist')); - } - $collection = $this->collectionFactory->create(); $this->joinAttributesRecursively($collection, $categoryQuery); $depth = $this->depthCalculator->calculate($categoryQuery); @@ -149,30 +144,4 @@ private function joinAttributesRecursively(Collection $collection, FieldNode $fi $this->joinAttributesRecursively($collection, $node); } } - - /** - * Check if provided category active - * - * @param int $rootCategoryId - * @return bool - * @throws \Magento\Framework\Exception\LocalizedException - */ - private function isCategoryActive(int $rootCategoryId) : bool - { - if ($rootCategoryId == Category::TREE_ROOT_ID) { - return true; - } - $collection = $this->collectionFactory->create(); - $collection->addAttributeToFilter(Category::KEY_IS_ACTIVE, ['eq' => 1]) - ->getSelect() - ->where( - $collection->getSelect() - ->getConnection() - ->quoteIdentifier( - 'e.' . $this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField() - ) . ' = ?', - $rootCategoryId - ); - return (bool)$collection->count(); - } } From af968300a43925b865727d18b3e62a16cace8454 Mon Sep 17 00:00:00 2001 From: Lena Orobei <oorobei@magento.com> Date: Fri, 21 Jun 2019 11:38:39 -0500 Subject: [PATCH 191/209] magento/graphql-ce#463: Query category for disabled catalog with products returns the products count --- .../Model/Resolver/Category/CheckCategoryIsActive.php | 5 +++-- .../Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php index bf8057c63de3..5903695d7a5e 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\CatalogGraphQl\Model\Resolver\Category; use Magento\Catalog\Api\Data\CategoryInterface; @@ -33,8 +35,7 @@ class CheckCategoryIsActive public function __construct( CollectionFactory $collectionFactory, MetadataPool $metadata - ) - { + ) { $this->collectionFactory = $collectionFactory; $this->metadata = $metadata; } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php index 8d7aa5495b3f..89d3805383e1 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php @@ -50,8 +50,7 @@ public function __construct( \Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree $categoryTree, ExtractDataFromCategoryTree $extractDataFromCategoryTree, CheckCategoryIsActive $checkCategoryIsActive - ) - { + ) { $this->categoryTree = $categoryTree; $this->extractDataFromCategoryTree = $extractDataFromCategoryTree; $this->checkCategoryIsActive = $checkCategoryIsActive; From 2dded7cfb70b1df5245744dd38a5654c06c28515 Mon Sep 17 00:00:00 2001 From: Valerii Naida <vnayda@adobe.com> Date: Fri, 21 Jun 2019 12:57:12 -0500 Subject: [PATCH 192/209] magento/graphql-ce#732: Guest User can SendFriend products ignoring restrictions --- .../Model/Resolver/SendEmailToFriend.php | 26 ++++--------------- .../Magento/SendFriendGraphQl/composer.json | 3 --- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index 5d8df4283184..0a4fe1e3e561 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -7,12 +7,12 @@ namespace Magento\SendFriendGraphQl\Model\Resolver; -use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\GraphQl\Config\Element\Field; use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException; use Magento\Framework\GraphQl\Exception\GraphQlInputException; use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; +use Magento\GraphQl\Model\Query\ContextInterface; use Magento\SendFriend\Helper\Data as SendFriendHelper; use Magento\SendFriendGraphQl\Model\SendFriend\SendEmail; @@ -48,10 +48,10 @@ public function __construct( */ public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) { - $userId = $context->getUserId(); - $userType = $context->getUserType(); - - if (!$this->sendFriendHelper->isAllowForGuest() && $this->isUserGuest($userId, $userType)) { + /** @var ContextInterface $context */ + if (!$this->sendFriendHelper->isAllowForGuest() + && false === $context->getExtensionAttributes()->getIsCustomer() + ) { throw new GraphQlAuthorizationException(__('The current customer isn\'t authorized.')); } @@ -63,7 +63,6 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $senderData, $recipientsData ); - return array_merge($senderData, $recipientsData); } @@ -123,19 +122,4 @@ private function extractSenderData(array $args): array ], ]; } - - /** - * Checking if current customer is guest - * - * @param int|null $customerId - * @param int|null $customerType - * @return bool - */ - private function isUserGuest(?int $customerId, ?int $customerType): bool - { - if (null === $customerId || null === $customerType) { - return true; - } - return 0 === (int)$customerId || (int)$customerType === UserContextInterface::USER_TYPE_GUEST; - } } diff --git a/app/code/Magento/SendFriendGraphQl/composer.json b/app/code/Magento/SendFriendGraphQl/composer.json index 2da404359783..091c68487912 100644 --- a/app/code/Magento/SendFriendGraphQl/composer.json +++ b/app/code/Magento/SendFriendGraphQl/composer.json @@ -7,9 +7,6 @@ "magento/framework": "*", "magento/module-catalog": "*", "magento/module-send-friend": "*", - "magento/module-authorization": "*" - }, - "suggest": { "magento/module-graph-ql": "*" }, "license": [ From 0b2bdc665ccd5326bae336ba5904116341b40b11 Mon Sep 17 00:00:00 2001 From: Lena Orobei <oorobei@magento.com> Date: Fri, 21 Jun 2019 13:59:47 -0500 Subject: [PATCH 193/209] magento/graphql-ce#463: Query category for disabled catalog with products returns the products count --- .../Model/Resolver/Category/CheckCategoryIsActive.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php index 5903695d7a5e..16f816a96712 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/CheckCategoryIsActive.php @@ -8,7 +8,6 @@ namespace Magento\CatalogGraphQl\Model\Resolver\Category; use Magento\Catalog\Api\Data\CategoryInterface; -use Magento\Catalog\Model\Category; use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\EntityManager\MetadataPool; use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory; @@ -43,13 +42,13 @@ public function __construct( /** * Check if category is active. * - * @param int $rootCategoryId + * @param int $categoryId * @throws GraphQlNoSuchEntityException */ - public function execute(int $rootCategoryId): void + public function execute(int $categoryId): void { $collection = $this->collectionFactory->create(); - $collection->addAttributeToFilter(Category::KEY_IS_ACTIVE, ['eq' => 1]) + $collection->addAttributeToFilter(CategoryInterface::KEY_IS_ACTIVE, ['eq' => 1]) ->getSelect() ->where( $collection->getSelect() @@ -58,7 +57,7 @@ public function execute(int $rootCategoryId): void 'e.' . $this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField() ) . ' = ?', - $rootCategoryId + $categoryId ); if ($collection->count() === 0) { From e915796a0e75b67f9290d23352588a0d272e1629 Mon Sep 17 00:00:00 2001 From: shankar <konar.shankar2013@gmail.com> Date: Sat, 22 Jun 2019 18:51:07 +0530 Subject: [PATCH 194/209] Removed extra span button from the 'Test Connection' button --- .../view/adminhtml/templates/system/config/testconnection.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/AdvancedSearch/view/adminhtml/templates/system/config/testconnection.phtml b/app/code/Magento/AdvancedSearch/view/adminhtml/templates/system/config/testconnection.phtml index 71697d2fd0bc..1d962cc6b329 100644 --- a/app/code/Magento/AdvancedSearch/view/adminhtml/templates/system/config/testconnection.phtml +++ b/app/code/Magento/AdvancedSearch/view/adminhtml/templates/system/config/testconnection.phtml @@ -11,5 +11,5 @@ "successText": "<?= $block->escapeHtmlAttr(__('Successful! Test again?')) ?>", "failedText": "<?= $block->escapeHtmlAttr(__('Connection failed! Test again?')) ?>", "fieldMapping": "<?= /* @noEscape */ $block->getFieldMapping() ?>"}, "validation": {}}'> - <span><span><span id="<?= $block->getHtmlId() ?>_result"><?= $block->escapeHtml($block->getButtonLabel()) ?></span></span></span> + <span id="<?= $block->getHtmlId() ?>_result"><?= $block->escapeHtml($block->getButtonLabel()) ?></span> </button> From a1d87ba69b48c86812115b89fbf6441404292535 Mon Sep 17 00:00:00 2001 From: Roman <ozlz1995@gmail.com> Date: Sat, 22 Jun 2019 17:19:18 +0300 Subject: [PATCH 195/209] magento/graphql-ce:#678 Send email to friend --- .../Model/Resolver/ProductService.php | 65 +++++++++++++++++++ .../Model/Resolver/SendEmailToFriend.php | 47 ++++---------- .../GraphQl/SendFriend/SendFriendTest.php | 12 +--- 3 files changed, 79 insertions(+), 45 deletions(-) create mode 100644 app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php new file mode 100644 index 000000000000..4a37892a44f4 --- /dev/null +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php @@ -0,0 +1,65 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + + +namespace Magento\SendFriendGraphQl\Model\Resolver; + +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\Product\Visibility; +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; +use Magento\Framework\Exception\NoSuchEntityException; + +/** + * Class ProductService + */ +class ProductService +{ + /** @var ProductRepositoryInterface */ + private $productRepository; + + /** @var Visibility */ + private $visibility; + + /** + * @param ProductRepositoryInterface $productRepository + * @param Visibility $visibility + */ + public function __construct( + ProductRepositoryInterface $productRepository, + Visibility $visibility + ) { + $this->productRepository = $productRepository; + $this->visibility = $visibility; + } + + /** + * Get product + * + * @param int $productId + * @return ProductInterface + * @throws GraphQlNoSuchEntityException + */ + public function getProduct(int $productId): ProductInterface + { + try { + $product = $this->productRepository->getById($productId); + + if (!in_array( + $product->getVisibility(), + $this->visibility->getVisibleInCatalogIds() + )) { + throw new GraphQlNoSuchEntityException( + __("The product that was requested doesn't exist. Verify the product and try again.") + ); + } + } catch (NoSuchEntityException $e) { + throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); + } + return $product; + } +} diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index c0c01c71df76..a8cbab4b1030 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -7,18 +7,15 @@ namespace Magento\SendFriendGraphQl\Model\Resolver; -use Magento\Catalog\Api\Data\ProductInterface; -use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Framework\DataObjectFactory; use Magento\Framework\Event\ManagerInterface; -use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Config\Element\Field; use Magento\Framework\GraphQl\Exception\GraphQlInputException; -use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; +use Magento\SendFriendGraphQl\Model\Resolver\ProductService; /** * @inheritdoc @@ -30,11 +27,6 @@ class SendEmailToFriend implements ResolverInterface */ private $sendFriendFactory; - /** - * @var ProductRepositoryInterface - */ - private $productRepository; - /** * @var DataObjectFactory */ @@ -45,22 +37,27 @@ class SendEmailToFriend implements ResolverInterface */ private $eventManager; + /** + * @var ProductService + */ + private $productService; + /** * @param SendFriendFactory $sendFriendFactory - * @param ProductRepositoryInterface $productRepository * @param DataObjectFactory $dataObjectFactory * @param ManagerInterface $eventManager + * @param ProductService $productService */ public function __construct( SendFriendFactory $sendFriendFactory, - ProductRepositoryInterface $productRepository, DataObjectFactory $dataObjectFactory, - ManagerInterface $eventManager + ManagerInterface $eventManager, + ProductService $productService ) { $this->sendFriendFactory = $sendFriendFactory; - $this->productRepository = $productRepository; $this->dataObjectFactory = $dataObjectFactory; $this->eventManager = $eventManager; + $this->productService = $productService; } /** @@ -77,7 +74,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value ); } - $product = $this->getProduct($args['input']['product_id']); + $product = $this->productService->getProduct($args['input']['product_id']); $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); $sendFriend->setProduct($product); @@ -117,28 +114,6 @@ private function validateSendFriendModel(SendFriend $sendFriend, array $senderDa } } - /** - * Get product - * - * @param int $productId - * @return ProductInterface - * @throws GraphQlNoSuchEntityException - */ - private function getProduct(int $productId): ProductInterface - { - try { - $product = $this->productRepository->getById($productId); - if (!$product->isVisibleInCatalog()) { - throw new GraphQlNoSuchEntityException( - __("The product that was requested doesn't exist. Verify the product and try again.") - ); - } - } catch (NoSuchEntityException $e) { - throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); - } - return $product; - } - /** * Extract recipients data * diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php index e7401100b786..e67c1ff40ae6 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php @@ -11,6 +11,7 @@ use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\TestCase\GraphQl\ResponseContainsErrorsException; use Magento\TestFramework\TestCase\GraphQlAbstract; /** @@ -219,15 +220,8 @@ public function testSendProductWithoutVisibility() email:"recipient2@mail.com" }'; $query = $this->getQuery($productId, $recipients); - - $response = $this->graphQlMutation($query); - self::assertEquals('Name', $response['sendEmailToFriend']['sender']['name']); - self::assertEquals('e@mail.com', $response['sendEmailToFriend']['sender']['email']); - self::assertEquals('Lorem Ipsum', $response['sendEmailToFriend']['sender']['message']); - self::assertEquals('Recipient Name 1', $response['sendEmailToFriend']['recipients'][0]['name']); - self::assertEquals('recipient1@mail.com', $response['sendEmailToFriend']['recipients'][0]['email']); - self::assertEquals('Recipient Name 2', $response['sendEmailToFriend']['recipients'][1]['name']); - self::assertEquals('recipient2@mail.com', $response['sendEmailToFriend']['recipients'][1]['email']); + $this->expectException(ResponseContainsErrorsException::class); + $this->graphQlMutation($query); } /** From e8c102ae448e61a262203534215e84580dd56b57 Mon Sep 17 00:00:00 2001 From: Roman <ozlz1995@gmail.com> Date: Sat, 22 Jun 2019 18:08:22 +0300 Subject: [PATCH 196/209] magento/graphql-ce:#678 Send email to friend --- .../GetProduct.php} | 8 ++++---- .../Model/Resolver/SendEmailToFriend.php | 15 +++++++-------- 2 files changed, 11 insertions(+), 12 deletions(-) rename app/code/Magento/SendFriendGraphQl/Model/{Resolver/ProductService.php => Provider/GetProduct.php} (90%) diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php similarity index 90% rename from app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php rename to app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php index 4a37892a44f4..27ef64918dee 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php @@ -6,7 +6,7 @@ declare(strict_types=1); -namespace Magento\SendFriendGraphQl\Model\Resolver; +namespace Magento\SendFriendGraphQl\Model\Provider; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\Product\Visibility; @@ -15,9 +15,9 @@ use Magento\Framework\Exception\NoSuchEntityException; /** - * Class ProductService + * Class GetProduct */ -class ProductService +class GetProduct { /** @var ProductRepositoryInterface */ private $productRepository; @@ -44,7 +44,7 @@ public function __construct( * @return ProductInterface * @throws GraphQlNoSuchEntityException */ - public function getProduct(int $productId): ProductInterface + public function execute(int $productId): ProductInterface { try { $product = $this->productRepository->getById($productId); diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index a8cbab4b1030..320178dec559 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -15,8 +15,7 @@ use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; -use Magento\SendFriendGraphQl\Model\Resolver\ProductService; - +use Magento\SendFriendGraphQl\Model\Provider\GetProduct; /** * @inheritdoc */ @@ -38,26 +37,26 @@ class SendEmailToFriend implements ResolverInterface private $eventManager; /** - * @var ProductService + * @var GetProduct */ - private $productService; + private $getProductProvider; /** * @param SendFriendFactory $sendFriendFactory * @param DataObjectFactory $dataObjectFactory * @param ManagerInterface $eventManager - * @param ProductService $productService + * @param GetProduct $getProductProvider */ public function __construct( SendFriendFactory $sendFriendFactory, DataObjectFactory $dataObjectFactory, ManagerInterface $eventManager, - ProductService $productService + GetProduct $getProductProvider ) { $this->sendFriendFactory = $sendFriendFactory; $this->dataObjectFactory = $dataObjectFactory; $this->eventManager = $eventManager; - $this->productService = $productService; + $this->getProductProvider = $getProductProvider; } /** @@ -74,7 +73,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value ); } - $product = $this->productService->getProduct($args['input']['product_id']); + $product = $this->getProductProvider->execute($args['input']['product_id']); $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); $sendFriend->setProduct($product); From f5ca2db1ca002cfb983ea0240bfffba117369439 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Sat, 22 Jun 2019 17:58:17 -0500 Subject: [PATCH 197/209] MAGETWO-99736: Authorize.net - 3D Secure 2.0 Support for 2.3 - update composer hash --- composer.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.lock b/composer.lock index e6af6bcfa840..413e700c87b1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "457d0a686c8ece954ab4055da896aad2", + "content-hash": "ad16b0301a9bb01887ee4504b5f6a842", "packages": [ { "name": "braintree/braintree_php", @@ -2395,7 +2395,7 @@ }, { "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "email": "backendtea@gmail.com" } ], "description": "Symfony polyfill for ctype functions", From 84dba5cd4e4772318fd5e2b3fa7cb6253c2b54f2 Mon Sep 17 00:00:00 2001 From: Veronika Kurochkina <veronika_kurochkina@epam.com> Date: Mon, 24 Jun 2019 11:38:55 +0300 Subject: [PATCH 198/209] MAGETWO-93061: CMS page of second website with same URLkey as first website, show content of First website instead of second website content. --- app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php b/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php index b39a770a446e..0faf62607f5c 100644 --- a/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php +++ b/app/code/Magento/Cms/ViewModel/Page/Grid/UrlBuilder.php @@ -19,7 +19,7 @@ class UrlBuilder /** * @var \Magento\Framework\UrlInterface */ - protected $frontendUrlBuilder; + private $frontendUrlBuilder; /** * @var EncoderInterface From a3016bc9f7db98404c1d6d4b9429c02c77aff6dc Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <engcom-vendorworker-foxtrot@adobe.com> Date: Mon, 24 Jun 2019 16:10:50 +0300 Subject: [PATCH 199/209] magentomagento2#23353: Unit and static tests fix. --- .../Magento/Review/Controller/Adminhtml/Product/Post.php | 5 +++++ .../Test/Unit/Controller/Adminhtml/Product/PostTest.php | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php index ae4babb05679..b42dd3b3063f 100644 --- a/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php +++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php @@ -12,9 +12,14 @@ use Magento\Framework\Exception\LocalizedException; use Magento\Review\Model\Review; +/** + * Review admin controller for POST request. + */ class Post extends ProductController implements HttpPostActionInterface { /** + * Create a product review. + * * @return \Magento\Backend\Model\View\Result\Redirect */ public function execute() diff --git a/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php b/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php index 7d22524895ae..6592ff977a06 100644 --- a/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php +++ b/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php @@ -6,6 +6,7 @@ namespace Magento\Review\Test\Unit\Controller\Adminhtml\Product; use Magento\Framework\Controller\ResultFactory; +use Magento\Review\Model\Review; /** * @SuppressWarnings(PHPMD.TooManyFields) @@ -109,7 +110,7 @@ protected function _prepareMockObjects() $this->storeModelMock = $this->createPartialMock(\Magento\Store\Model\Store::class, ['__wakeup', 'getId']); $this->reviewMock = $this->createPartialMock( \Magento\Review\Model\Review::class, - ['__wakeup', 'create', 'save', 'getId', 'getResource', 'aggregate'] + ['__wakeup', 'create', 'save', 'getId', 'getResource', 'aggregate', 'getEntityIdByCode'] ); $this->reviewFactoryMock = $this->createPartialMock(\Magento\Review\Model\ReviewFactory::class, ['create']); $this->ratingMock = $this->createPartialMock( @@ -174,6 +175,10 @@ public function testPostAction() $this->reviewMock->expects($this->once()) ->method('aggregate') ->willReturn($this->reviewMock); + $this->reviewMock->expects($this->once()) + ->method('getEntityIdByCode') + ->with(Review::ENTITY_PRODUCT_CODE) + ->willReturn(1); $this->ratingMock->expects($this->once()) ->method('setRatingId') ->willReturnSelf(); From 07e081f8af7e8620d5d7c4857222e8418b6bbb2d Mon Sep 17 00:00:00 2001 From: Vladyslav Podorozhnyi <vpodorozh@gmail.com> Date: Mon, 24 Jun 2019 21:31:40 +0300 Subject: [PATCH 200/209] magento/graphql-ce:#678 Send email to friend --- .../SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index 320178dec559..fe13e074d98f 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -16,6 +16,7 @@ use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; use Magento\SendFriendGraphQl\Model\Provider\GetProduct; + /** * @inheritdoc */ From 7c85d616407d501971228b762a26fc62fe369bf9 Mon Sep 17 00:00:00 2001 From: Volodymyr Zaets <vzaets@magento.com> Date: Mon, 24 Jun 2019 15:03:27 -0500 Subject: [PATCH 201/209] Added filter nfinset in product search - Deprecate "finset" and "nfinset" fields. --- app/code/Magento/GraphQl/etc/schema.graphqls | 4 +-- .../GraphQl/Catalog/ProductViewTest.php | 24 ---------------- .../Framework/GraphQl/_files/schemaA.graphqls | 2 -- .../Framework/GraphQl/_files/schemaC.graphqls | 2 -- .../schema_response_sdl_description.php | 28 ------------------- .../_files/schema_with_description_sdl.php | 28 ------------------- .../Framework/DB/Adapter/Pdo/Mysql.php | 3 -- 7 files changed, 2 insertions(+), 89 deletions(-) diff --git a/app/code/Magento/GraphQl/etc/schema.graphqls b/app/code/Magento/GraphQl/etc/schema.graphqls index 0f99cf8c7a68..f2bb0784a229 100644 --- a/app/code/Magento/GraphQl/etc/schema.graphqls +++ b/app/code/Magento/GraphQl/etc/schema.graphqls @@ -9,8 +9,8 @@ type Mutation { input FilterTypeInput @doc(description: "FilterTypeInput specifies which action will be performed in a query ") { eq: String @doc(description: "Equals") - finset: [String] @doc(description: "Find in set. The value can contain a set of comma-separated values") - nfinset: [String] @doc(description: "Not find in set. The value can contain a set of comma-separated values") + finset: [String] @deprecated (reason: "The finset filter is deprecated. Magento doesn't recomend to store comma separated values, therefore finset filter is redundant.") + nfinset: [String] @deprecated (reason: "The finset filter is deprecated. Magento doesn't recomend to store comma separated values, therefore finset filter is redundant.") from: String @doc(description: "From. Must be used with 'to'") gt: String @doc(description: "Greater than") gteq: String @doc(description: "Greater than or equal to") diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php index 1c050672d4d8..e517b22ad09d 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ProductViewTest.php @@ -670,30 +670,6 @@ public function testProductPrices() $this->assertBaseFields($secondProduct, $response['products']['items'][1]); } - /** - * @magentoApiDataFixture Magento/Catalog/_files/products_for_search.php - */ - public function testProductFilterNfinset() - { - $productSku = 'search_product_1'; - - $query = <<<QUERY - { - products(filter: {sku: {nfinset: ["$productSku"]}}) - { - items { - id - name - sku - } - } - } -QUERY; - - $response = $this->graphQlQuery($query); - $this->assertNotContains($productSku, array_column($response['products']['items'], 'sku')); - } - /** * @param ProductInterface $product * @param array $actualResponse diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls index ba0d1469879c..0ebe4caa94a3 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaA.graphqls @@ -8,8 +8,6 @@ type Mutation { input FilterTypeInput @doc(description:"Comment for FilterTypeInput") { eq: String @doc(description:"Equal") - finset: [String] - nfinset: [String] from: String gt: String gteq: String diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls index 9eb52f11e8ac..3257bc41133e 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schemaC.graphqls @@ -19,8 +19,6 @@ type Attribute @doc(description: "Attribute contains the attribute_type of the s } input FilterTypeInput @doc(description:"Comment for FilterTypeInput") { eq: String @doc(description:"Equal") - finset: [String] - nfinset: [String] from: String gt: String gteq: String diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php index d889267973b5..03dbac447449 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_response_sdl_description.php @@ -505,34 +505,6 @@ ], 'defaultValue' => null ], - [ - 'name' => 'finset', - 'description' => '', - 'type' => [ - 'kind' => 'LIST', - 'name' => null, - 'ofType' => [ - 'kind' => 'SCALAR', - 'name' => 'String', - 'ofType' => null - ] - ], - 'defaultValue' => null - ], - [ - 'name' => 'nfinset', - 'description' => '', - 'type' => [ - 'kind' => 'LIST', - 'name' => null, - 'ofType' => [ - 'kind' => 'SCALAR', - 'name' => 'String', - 'ofType' => null - ] - ], - 'defaultValue' => null - ], [ 'name' => 'from', 'description' => '', diff --git a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php index c724eafa26ef..969c2cceb0a4 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php +++ b/dev/tests/integration/testsuite/Magento/Framework/GraphQl/_files/schema_with_description_sdl.php @@ -505,34 +505,6 @@ ], 'defaultValue' => null ], - [ - 'name' => 'finset', - 'description' => '', - 'type' => [ - 'kind' => 'LIST', - 'name' => null, - 'ofType' => [ - 'kind' => 'SCALAR', - 'name' => 'String', - 'ofType' => null - ] - ], - 'defaultValue' => null - ], - [ - 'name' => 'nfinset', - 'description' => '', - 'type' => [ - 'kind' => 'LIST', - 'name' => null, - 'ofType' => [ - 'kind' => 'SCALAR', - 'name' => 'String', - 'ofType' => null - ] - ], - 'defaultValue' => null - ], [ 'name' => 'from', 'description' => '', diff --git a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php index 9af4306ba459..edec7e135ae9 100644 --- a/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php +++ b/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php @@ -2976,9 +2976,6 @@ public function prepareSqlCondition($fieldName, $condition) if (($key == 'in' || $key == 'nin') && is_string($value)) { $value = explode(',', $value); } - if (($key == 'finset' || $key == 'nfinset') && is_array($value)) { - $value = implode(',', $value); - } $query = $this->_prepareQuotedSqlCondition($conditionKeyMap[$key], $value, $fieldName); } else { $queries = []; From 193d4d1f814ab7b41f6a2c2a07ec96c71136224a Mon Sep 17 00:00:00 2001 From: Lena Orobei <oorobei@magento.com> Date: Mon, 24 Jun 2019 15:08:03 -0500 Subject: [PATCH 202/209] magento/graphql-ce:#678 Send email to friend --- .../Model/Provider/GetVisibleProduct.php | 3 +- .../Model/SendFriend/SendEmail.php | 36 +++++++------------ .../GraphQl/SendFriend/SendFriendTest.php | 8 ++--- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/app/code/Magento/SendFriendGraphQl/Model/Provider/GetVisibleProduct.php b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetVisibleProduct.php index 9fa9bf2b35d2..9ff771afd57f 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Provider/GetVisibleProduct.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetVisibleProduct.php @@ -5,7 +5,6 @@ */ declare(strict_types=1); - namespace Magento\SendFriendGraphQl\Model\Provider; use Magento\Catalog\Api\ProductRepositoryInterface; @@ -15,7 +14,7 @@ use Magento\Framework\Exception\NoSuchEntityException; /** - * Class GetProduct + * Returns product if it is visible in catalog. */ class GetVisibleProduct { diff --git a/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php b/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php index 196086c7546c..70df366fa173 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php +++ b/app/code/Magento/SendFriendGraphQl/Model/SendFriend/SendEmail.php @@ -16,6 +16,7 @@ use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; +use Magento\SendFriendGraphQl\Model\Provider\GetVisibleProduct; /** * Send Product Email to Friend(s) @@ -43,21 +44,30 @@ class SendEmail private $eventManager; /** + * @var GetVisibleProduct + */ + private $visibleProductProvider; + + /** + * SendEmail constructor. * @param DataObjectFactory $dataObjectFactory * @param ProductRepositoryInterface $productRepository * @param SendFriendFactory $sendFriendFactory * @param ManagerInterface $eventManager + * @param GetVisibleProduct $visibleProductProvider */ public function __construct( DataObjectFactory $dataObjectFactory, ProductRepositoryInterface $productRepository, SendFriendFactory $sendFriendFactory, - ManagerInterface $eventManager + ManagerInterface $eventManager, + GetVisibleProduct $visibleProductProvider ) { $this->dataObjectFactory = $dataObjectFactory; $this->productRepository = $productRepository; $this->sendFriendFactory = $sendFriendFactory; $this->eventManager = $eventManager; + $this->visibleProductProvider = $visibleProductProvider; } /** @@ -81,7 +91,7 @@ public function execute(int $productId, array $senderData, array $recipientsData ); } - $product = $this->getProduct($productId); + $product = $this->visibleProductProvider->execute($productId); $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); @@ -117,26 +127,4 @@ private function validateSendFriendModel(SendFriend $sendFriend, array $senderDa throw new GraphQlInputException(__(implode($validationResult))); } } - - /** - * Get product - * - * @param int $productId - * @return ProductInterface - * @throws GraphQlNoSuchEntityException - */ - private function getProduct(int $productId): ProductInterface - { - try { - $product = $this->productRepository->getById($productId); - if (!$product->isVisibleInCatalog()) { - throw new GraphQlNoSuchEntityException( - __("The product that was requested doesn't exist. Verify the product and try again.") - ); - } - } catch (NoSuchEntityException $e) { - throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); - } - return $product; - } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php index e885c2b8fb56..200bae76e0ae 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php @@ -125,7 +125,6 @@ public function testSendWithoutExistProduct() }'; $query = $this->getQuery($productId, $recipients); - $this->expectException(\Exception::class); $this->expectExceptionMessage( 'The product that was requested doesn\'t exist. Verify the product and try again.' ); @@ -276,9 +275,10 @@ public function testSendProductWithoutVisibility() email:"recipient2@mail.com" }'; $query = $this->getQuery($productId, $recipients); - - $response = $this->graphQlMutation($query, [], '', $this->getHeaderMap()); - $this->assertResponse($response); + $this->expectExceptionMessage( + 'The product that was requested doesn\'t exist. Verify the product and try again.' + ); + $this->graphQlMutation($query, [], '', $this->getHeaderMap()); } /** From 65b83c9c438a39c6ec7bd4d6d7dfb6b93be312d2 Mon Sep 17 00:00:00 2001 From: Volodymyr Zaets <vzaets@magento.com> Date: Mon, 24 Jun 2019 15:14:18 -0500 Subject: [PATCH 203/209] Added filter nfinset in product search - Deprecate "finset" and "nfinset" fields. --- app/code/Magento/GraphQl/etc/schema.graphqls | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/GraphQl/etc/schema.graphqls b/app/code/Magento/GraphQl/etc/schema.graphqls index f2bb0784a229..0f3fe78f5777 100644 --- a/app/code/Magento/GraphQl/etc/schema.graphqls +++ b/app/code/Magento/GraphQl/etc/schema.graphqls @@ -10,7 +10,6 @@ type Mutation { input FilterTypeInput @doc(description: "FilterTypeInput specifies which action will be performed in a query ") { eq: String @doc(description: "Equals") finset: [String] @deprecated (reason: "The finset filter is deprecated. Magento doesn't recomend to store comma separated values, therefore finset filter is redundant.") - nfinset: [String] @deprecated (reason: "The finset filter is deprecated. Magento doesn't recomend to store comma separated values, therefore finset filter is redundant.") from: String @doc(description: "From. Must be used with 'to'") gt: String @doc(description: "Greater than") gteq: String @doc(description: "Greater than or equal to") From d3734f85853a8ed77f4d6255058f4c8f042f2126 Mon Sep 17 00:00:00 2001 From: Lena Orobei <oorobei@magento.com> Date: Mon, 24 Jun 2019 15:46:50 -0500 Subject: [PATCH 204/209] magento/graphql-ce#622: No possibility to update customizable_options in updateCartItems mutation - code style + minor fixes --- .../Model/Cart/AddSimpleProductToCart.php | 23 ------------------- .../Model/Cart/CreateBuyRequest.php | 14 ++++++----- .../Model/Cart/UpdateCartItem.php | 18 +++++---------- .../EditQuoteItemWithCustomOptionsTest.php | 1 - .../add_simple_product_with_options.php | 14 ++++++----- 5 files changed, 22 insertions(+), 48 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php b/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php index 0bf7968a50fa..3f6cc4261403 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/AddSimpleProductToCart.php @@ -114,27 +114,4 @@ private function extractQuantity(array $cartItemData): float } return $quantity; } - - /** - * Extract Customizable Options from cart item data - * - * @param array $cartItemData - * @return array - */ - private function extractCustomizableOptions(array $cartItemData): array - { - if (!isset($cartItemData['customizable_options']) || empty($cartItemData['customizable_options'])) { - return []; - } - - $customizableOptionsData = []; - foreach ($cartItemData['customizable_options'] as $customizableOption) { - if (isset($customizableOption['value_string'])) { - $customizableOptionsData[$customizableOption['id']] = $this->convertCustomOptionValue( - $customizableOption['value_string'] - ); - } - } - return $customizableOptionsData; - } } diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php b/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php index bcbfc43d567a..b95be8db2dcc 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/CreateBuyRequest.php @@ -47,12 +47,14 @@ public function execute(float $qty, array $customizableOptionsData): DataObject } } - return $this->dataObjectFactory->create([ - 'data' => [ - 'qty' => $qty, - 'options' => $customizableOptions, - ], - ]); + return $this->dataObjectFactory->create( + [ + 'data' => [ + 'qty' => $qty, + 'options' => $customizableOptions, + ], + ] + ); } /** diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php index 7d653788ab0a..b18c6ad66233 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/UpdateCartItem.php @@ -18,7 +18,6 @@ /** * Update cart item - * */ class UpdateCartItem { @@ -86,18 +85,13 @@ public function execute(Quote $cart, int $cartItemId, float $quantity, array $cu ); } - if (is_string($result)) { - throw new GraphQlInputException(__( - 'Could not update cart item: %message', - ['message' => $result] - )); - } - if ($result->getHasError()) { - throw new GraphQlInputException(__( - 'Could not update cart item: %message', - ['message' => $result->getMessage(true)] - )); + throw new GraphQlInputException( + __( + 'Could not update cart item: %message', + ['message' => $result->getMessage()] + ) + ); } $this->quoteRepository->save($cart); diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php index 8c46f66e70cf..62c1ae0dab3c 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/EditQuoteItemWithCustomOptionsTest.php @@ -240,7 +240,6 @@ private function getQuoteItemIdBySku(string $sku): int return (int)$quoteItem->getId(); } - /** * Generate an array with test values for customizable options * based on the option type diff --git a/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php b/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php index 68e2261ab02b..ecd1428a5d61 100644 --- a/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php +++ b/dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/add_simple_product_with_options.php @@ -38,12 +38,14 @@ $cartItemCustomOptions[$productOption->getId()] = 'initial value'; } -$request = $dataObjectFactory->create([ - 'data' => [ - 'qty' => 1.0, - 'options' => $cartItemCustomOptions, - ], -]); +$request = $dataObjectFactory->create( + [ + 'data' => [ + 'qty' => 1.0, + 'options' => $cartItemCustomOptions, + ], + ] +); $quote = $quoteFactory->create(); $quoteResource->load($quote, 'test_quote', 'reserved_order_id'); From eb28f14cc4a1d8b5c3d5ac5bff037a3b5661b833 Mon Sep 17 00:00:00 2001 From: Geeta <geeta@ranosys.com> Date: Tue, 25 Jun 2019 13:39:55 +0530 Subject: [PATCH 205/209] Fix(21974): Resolved functional issue --- .../Mftf/Section/AdminConfigAdvancedReportingSection.xml | 4 ++-- .../web/css/source/module/main/_collapsible-blocks.less | 5 +++++ lib/internal/Magento/Framework/Data/Form/Element/Time.php | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Analytics/Test/Mftf/Section/AdminConfigAdvancedReportingSection.xml b/app/code/Magento/Analytics/Test/Mftf/Section/AdminConfigAdvancedReportingSection.xml index 2e5f2b762a7b..36e4779a48d4 100644 --- a/app/code/Magento/Analytics/Test/Mftf/Section/AdminConfigAdvancedReportingSection.xml +++ b/app/code/Magento/Analytics/Test/Mftf/Section/AdminConfigAdvancedReportingSection.xml @@ -14,8 +14,8 @@ <element name="advancedReportingIndustry" type="select" selector="#analytics_general_vertical"/> <element name="advancedReportingIndustryLabel" type="text" selector=".config-vertical-label>label>span"/> <element name="advancedReportingHour" type="select" selector="#row_analytics_general_collection_time>td:nth-child(2)>select:nth-child(2)"/> - <element name="advancedReportingMinute" type="select" selector="#row_analytics_general_collection_time>td:nth-child(2)>select:nth-child(3)"/> - <element name="advancedReportingSeconds" type="select" selector="#row_analytics_general_collection_time>td:nth-child(2)>select:nth-child(4)"/> + <element name="advancedReportingMinute" type="select" selector="#row_analytics_general_collection_time>td:nth-child(2)>select:nth-child(4)"/> + <element name="advancedReportingSeconds" type="select" selector="#row_analytics_general_collection_time>td:nth-child(2)>select:nth-child(6)"/> <element name="advancedReportingBlankIndustryError" type="text" selector=".message-error>div"/> </section> </sections> diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less index a43f9acbaa09..bdc986e918c2 100644 --- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less +++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less @@ -511,6 +511,11 @@ right: 0; top: 0; } + + .time-separator { + font-size: 14px; + padding-left: 5px; + } .tooltip-content { background: @color-very-dark-gray-black2; diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Time.php b/lib/internal/Magento/Framework/Data/Form/Element/Time.php index 68f32823d7a2..3623bd9509e0 100644 --- a/lib/internal/Magento/Framework/Data/Form/Element/Time.php +++ b/lib/internal/Magento/Framework/Data/Form/Element/Time.php @@ -76,7 +76,7 @@ public function getElementHtml() } $html .= '</select>' . "\n"; - $html .= ': <select name="' . $this->getName() . '" style="width:80px" ' + $html .= '<span class="time-separator">: </span><select name="' . $this->getName() . '" style="width:80px" ' . $this->serialize($this->getHtmlAttributes()) . $this->_getUiId('minute') . '>' . "\n"; for ($i = 0; $i < 60; $i++) { @@ -86,7 +86,7 @@ public function getElementHtml() } $html .= '</select>' . "\n"; - $html .= ': <select name="' . $this->getName() . '" style="width:80px" ' + $html .= '<span class="time-separator">: </span><select name="' . $this->getName() . '" style="width:80px" ' . $this->serialize($this->getHtmlAttributes()) . $this->_getUiId('second') . '>' . "\n"; for ($i = 0; $i < 60; $i++) { From 3d6b783324abb7415206fe66402d0bdcb44f8fbd Mon Sep 17 00:00:00 2001 From: Geeta <geeta@ranosys.com> Date: Tue, 25 Jun 2019 16:07:26 +0530 Subject: [PATCH 206/209] Fixed issue #23377 --- .../Checkout/view/frontend/templates/cart/minicart.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml index 8928bbabcb71..28275e022393 100644 --- a/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml +++ b/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml @@ -12,7 +12,7 @@ data-bind="scope: 'minicart_content'"> <span class="text"><?= $block->escapeHtml(__('My Cart')) ?></span> <span class="counter qty empty" - data-bind="css: { empty: !!getCartParam('summary_count') == false }, blockLoader: isLoading"> + data-bind="css: { empty: !!getCartParam('summary_count') == false && !isLoading() }, blockLoader: isLoading"> <span class="counter-number"><!-- ko text: getCartParam('summary_count') --><!-- /ko --></span> <span class="counter-label"> <!-- ko if: getCartParam('summary_count') --> From 28ec19ce6bc10f104f8b70f948009175149ab990 Mon Sep 17 00:00:00 2001 From: Alastair Mucklow <amucklow@strangerpixel.com> Date: Tue, 25 Jun 2019 17:01:40 +0100 Subject: [PATCH 207/209] Remove rogue closing tag --- .../Backend/view/adminhtml/templates/store/switcher.phtml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml index 8674a167d28e..da18bc183759 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml @@ -36,7 +36,6 @@ <?php if ($block->hasDefaultOption()) : ?> <li class="store-switcher-all <?php if (!($block->getDefaultSelectionName() != $block->getCurrentSelectionName())) : ?>disabled<?php endif; ?> <?php if (!$block->hasScopeSelected()) : ?>current<?php endif; ?>"> <?php if ($block->getDefaultSelectionName() != $block->getCurrentSelectionName()) : ?> - ?> <a data-role="store-view-id" data-value="" href="#"> <?= $block->escapeHtml($block->getDefaultSelectionName()) ?> </a> From 1aadf9dd8c8e454f08a03b1cf811c4eea3fe586f Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <engcom-vendorworker-foxtrot@adobe.com> Date: Wed, 26 Jun 2019 15:05:55 +0300 Subject: [PATCH 208/209] magento/magento2#23393: Static test fix. --- .../Framework/Data/Form/Element/Time.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Time.php b/lib/internal/Magento/Framework/Data/Form/Element/Time.php index 3623bd9509e0..f56dbedb744a 100644 --- a/lib/internal/Magento/Framework/Data/Form/Element/Time.php +++ b/lib/internal/Magento/Framework/Data/Form/Element/Time.php @@ -4,15 +4,15 @@ * See COPYING.txt for license details. */ +namespace Magento\Framework\Data\Form\Element; + +use Magento\Framework\Escaper; + /** * Form time element * * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Framework\Data\Form\Element; - -use Magento\Framework\Escaper; - class Time extends AbstractElement { /** @@ -32,7 +32,7 @@ public function __construct( } /** - * @return mixed + * @inheritDoc */ public function getName() { @@ -44,7 +44,7 @@ public function getName() } /** - * @return string + * @inheritDoc * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ @@ -76,7 +76,8 @@ public function getElementHtml() } $html .= '</select>' . "\n"; - $html .= '<span class="time-separator">: </span><select name="' . $this->getName() . '" style="width:80px" ' + $html .= '<span class="time-separator">: </span><select name="' + . $this->getName() . '" style="width:80px" ' . $this->serialize($this->getHtmlAttributes()) . $this->_getUiId('minute') . '>' . "\n"; for ($i = 0; $i < 60; $i++) { @@ -86,7 +87,8 @@ public function getElementHtml() } $html .= '</select>' . "\n"; - $html .= '<span class="time-separator">: </span><select name="' . $this->getName() . '" style="width:80px" ' + $html .= '<span class="time-separator">: </span><select name="' + . $this->getName() . '" style="width:80px" ' . $this->serialize($this->getHtmlAttributes()) . $this->_getUiId('second') . '>' . "\n"; for ($i = 0; $i < 60; $i++) { From 5abbe7e260192f67789c913eccd4a91662bd3296 Mon Sep 17 00:00:00 2001 From: Max Lesechko <mlesechko@magento.com> Date: Thu, 27 Jun 2019 11:54:17 -0500 Subject: [PATCH 209/209] MC-5806: Detection of URL dependencies does not work for the Dependency static test -- fix merge conflict --- .../static/testsuite/Magento/Test/Legacy/LayoutTest.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php index 4efad02468a3..dd2229968375 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/LayoutTest.php @@ -3,16 +3,14 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); -/** - * Coverage of obsolete nodes in layout - */ namespace Magento\Test\Legacy; use Magento\Framework\Component\ComponentRegistrar; /** - * Layout test + * Coverage of obsolete nodes in layout */ class LayoutTest extends \PHPUnit\Framework\TestCase { @@ -370,8 +368,6 @@ public function getAllowedActionNodeMethods() 'unsetChildren', 'updateButton', 'setIsProductListingContext', - 'checkCompanyStatus', // MAGETWO-88965 - 'setRendererType', // MAGETWO-88965 ]; } }