From 308ef0e7932653cfedfdc1cc3176da3b8b8faaec Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Wed, 10 Jun 2020 14:39:50 +0200 Subject: [PATCH 01/11] Make Customer Group Id available to Context --- .../Model/Context/AddUserInfoToContext.php | 26 +++++++++++++++++-- .../etc/extension_attributes.xml | 3 ++- .../Magento/CustomerGraphQl/etc/module.xml | 3 +++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php index 0f0b91967e473..247ad1fa23656 100644 --- a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php +++ b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php @@ -10,6 +10,8 @@ use Magento\Authorization\Model\UserContextInterface; use Magento\GraphQl\Model\Query\ContextParametersInterface; use Magento\GraphQl\Model\Query\ContextParametersProcessorInterface; +use Magento\Customer\Api\CustomerRepositoryInterface; +use Magento\Customer\Api\Data\GroupInterface; /** * @inheritdoc @@ -21,13 +23,21 @@ class AddUserInfoToContext implements ContextParametersProcessorInterface */ private $userContext; + /** + * @var CustomerRepositoryInterface + */ + private $customerRepository; + /** * @param UserContextInterface $userContext + * @param CustomerRepositoryInterface $customerRepository */ public function __construct( - UserContextInterface $userContext + UserContextInterface $userContext, + CustomerRepositoryInterface $customerRepository ) { $this->userContext = $userContext; + $this->customerRepository = $customerRepository; } /** @@ -47,7 +57,19 @@ public function execute(ContextParametersInterface $contextParameters): ContextP } $contextParameters->setUserType($currentUserType); - $contextParameters->addExtensionAttribute('is_customer', $this->isCustomer($currentUserId, $currentUserType)); + if ($isCustomer = $this->isCustomer($currentUserId, $currentUserType)) { + + $contextParameters->addExtensionAttribute('is_customer', $isCustomer); + + try { + $customerGroupId = $this->customerRepository->getById($currentUserId)->getGroupId(); + } catch (\Exception $e) { + $customerGroupId = GroupInterface::NOT_LOGGED_IN_ID; + } + + $contextParameters->addExtensionAttribute('customer_group_id', $customerGroupId); + } + return $contextParameters; } diff --git a/app/code/Magento/CustomerGraphQl/etc/extension_attributes.xml b/app/code/Magento/CustomerGraphQl/etc/extension_attributes.xml index 26840551eaeb8..b8bdb5a46ca81 100644 --- a/app/code/Magento/CustomerGraphQl/etc/extension_attributes.xml +++ b/app/code/Magento/CustomerGraphQl/etc/extension_attributes.xml @@ -8,5 +8,6 @@ + - \ No newline at end of file + diff --git a/app/code/Magento/CustomerGraphQl/etc/module.xml b/app/code/Magento/CustomerGraphQl/etc/module.xml index eeed4862bbbfd..ab21c6411bef6 100644 --- a/app/code/Magento/CustomerGraphQl/etc/module.xml +++ b/app/code/Magento/CustomerGraphQl/etc/module.xml @@ -7,4 +7,7 @@ --> + + + From 332369d81ca99be42514df19f0aaaa84c8ee96c4 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Wed, 17 Jun 2020 13:57:42 +0200 Subject: [PATCH 02/11] magento/magento2#28563: Pass the context to get product search results based on catalog permissions --- .../Model/Resolver/Category/ProductsCount.php | 2 +- .../CatalogGraphQl/Model/Resolver/Product.php | 4 ++-- .../CatalogGraphQl/Model/Resolver/Products.php | 2 +- .../Products/DataProvider/Deferred/Product.php | 12 ++++++++---- .../Model/Resolver/Products/DataProvider/Product.php | 7 +++++-- .../CollectionProcessor/AttributeProcessor.php | 4 +++- .../ExtensibleEntityProcessor.php | 10 ++++------ .../CollectionProcessor/MediaGalleryProcessor.php | 4 +++- .../CollectionProcessor/RequiredColumnsProcessor.php | 4 +++- .../CollectionProcessor/SearchCriteriaProcessor.php | 4 +++- .../Product/CollectionProcessor/StockProcessor.php | 4 +++- .../VisibilityStatusProcessor.php | 4 +++- .../Product/CollectionProcessorInterface.php | 5 ++++- .../Product/CompositeCollectionProcessor.php | 6 ++++-- .../Resolver/Products/DataProvider/ProductSearch.php | 7 +++++-- .../Model/Resolver/Products/Query/Filter.php | 7 +++++-- .../Products/Query/ProductQueryInterface.php | 4 +++- .../Model/Resolver/Products/Query/Search.php | 8 +++++--- .../Model/Resolver/Batch/AbstractLikedProducts.php | 7 ++++--- 19 files changed, 69 insertions(+), 36 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php index 397fd12b7e714..744501e04878f 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php @@ -63,7 +63,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $category = $value['model']; $productsCollection = $category->getProductCollection(); $productsCollection->setVisibility($this->catalogProductVisibility->getVisibleInSiteIds()); - $productsCollection = $this->stockProcessor->process($productsCollection, $this->searchCriteria, []); + $productsCollection = $this->stockProcessor->process($productsCollection, $this->searchCriteria, [], $context); return $productsCollection->getSize(); } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php index 889735a5f4d88..df725c02eb5bd 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php @@ -63,8 +63,8 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $fields = $this->productFieldsSelector->getProductFieldsFromInfo($info); $this->productDataProvider->addEavAttributes($fields); - $result = function () use ($value) { - $data = $value['product'] ?? $this->productDataProvider->getProductBySku($value['sku']); + $result = function () use ($value, $context) { + $data = $value['product'] ?? $this->productDataProvider->getProductBySku($value['sku'], $context); if (empty($data)) { return null; } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products.php index e3d9ba2a9b3c6..1a244b8a10546 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products.php @@ -69,7 +69,7 @@ public function resolve( ); } - $searchResult = $this->searchQuery->getResult($args, $info); + $searchResult = $this->searchQuery->getResult($args, $info, $context); if ($searchResult->getCurrentPage() > $searchResult->getTotalPages() && $searchResult->getTotalCount() > 0) { throw new GraphQlInputException( diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php index 86616cc14fe50..ff4141cc0dca4 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php @@ -10,6 +10,7 @@ use Magento\Catalog\Api\Data\ProductInterface; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product as ProductDataProvider; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Deferred resolver for product data. @@ -102,11 +103,12 @@ public function addEavAttributes(array $attributeCodes) : void * Get product from result set. * * @param string $sku + * @param ContextInterface $context * @return array */ - public function getProductBySku(string $sku) : array + public function getProductBySku(string $sku, ContextInterface $context) : array { - $products = $this->fetch(); + $products = $this->fetch($context); if (!isset($products[$sku])) { return []; @@ -118,9 +120,10 @@ public function getProductBySku(string $sku) : array /** * Fetch product data and return in array format. Keys for products will be their skus. * + * @param ContextInterface $context * @return array */ - private function fetch() : array + private function fetch(ContextInterface $context) : array { if (empty($this->productSkus) || !empty($this->productList)) { return $this->productList; @@ -131,7 +134,8 @@ private function fetch() : array $this->searchCriteriaBuilder->create(), $this->attributeCodes, false, - true + true, + $context ); /** @var \Magento\Catalog\Model\Product $product */ diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php index 2076ec6726988..e17b938fa15e1 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php @@ -14,6 +14,7 @@ use Magento\Catalog\Api\Data\ProductSearchResultsInterfaceFactory; use Magento\Framework\Api\SearchResultsInterface; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Product field data provider, used for GraphQL resolver processing. @@ -73,18 +74,20 @@ public function __construct( * @param string[] $attributes * @param bool $isSearch * @param bool $isChildSearch + * @param ContextInterface $context * @return SearchResultsInterface */ public function getList( SearchCriteriaInterface $searchCriteria, array $attributes = [], bool $isSearch = false, - bool $isChildSearch = false + bool $isChildSearch = false, + ContextInterface $context ): SearchResultsInterface { /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ $collection = $this->collectionFactory->create(); - $this->collectionPreProcessor->process($collection, $searchCriteria, $attributes); + $this->collectionPreProcessor->process($collection, $searchCriteria, $attributes, $context); if (!$isChildSearch) { $visibilityIds = $isSearch diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php index fef224b12acfc..ba769bd8fce3d 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php @@ -10,6 +10,7 @@ use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Adds passed in attributes to product collection results @@ -39,7 +40,8 @@ public function __construct($fieldToAttributeMap = []) public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { foreach ($attributeNames as $name) { $this->addAttribute($collection, $name); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php index 5fff991c0d6cd..e348fe1dfdf04 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php @@ -11,6 +11,7 @@ use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Add necessary joins for extensible entities. @@ -33,16 +34,13 @@ public function __construct(JoinProcessorInterface $joinProcessor) } /** - * @param Collection $collection - * @param SearchCriteriaInterface $searchCriteria - * @param array $attributeNames - * @return Collection - * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @inheritdoc */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { $this->joinProcessor->process($collection); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php index be300e11f12ec..5f5b7f14d3f61 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php @@ -11,6 +11,7 @@ use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Catalog\Model\Product\Media\Config as MediaConfig; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Add attributes required for every GraphQL product resolution process. @@ -40,7 +41,8 @@ public function __construct(MediaConfig $mediaConfig) public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { if (in_array('media_gallery_entries', $attributeNames)) { $mediaAttributes = $this->mediaConfig->getMediaAttributeCodes(); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php index 4c5b657874713..7d8ccf43f892f 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php @@ -10,6 +10,7 @@ use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Add attributes required for every GraphQL product resolution process. @@ -24,7 +25,8 @@ class RequiredColumnsProcessor implements CollectionProcessorInterface public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { $collection->addAttributeToSelect('special_price'); $collection->addAttributeToSelect('special_price_from'); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php index e4c338f599577..bbb5b11135d27 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php @@ -11,6 +11,7 @@ use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface as SearchCriteriaApplier; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Apply search criteria data to passed in collection. @@ -38,7 +39,8 @@ public function __construct(SearchCriteriaApplier $searchCriteriaApplier) public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { $this->searchCriteriaApplier->process($searchCriteria, $collection); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php index e68136f64e5cf..66473f74fab6b 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php @@ -12,6 +12,7 @@ use Magento\Framework\Api\SearchCriteriaInterface; use Magento\CatalogInventory\Api\StockConfigurationInterface; use Magento\CatalogInventory\Model\ResourceModel\Stock\Status as StockStatusResource; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Add stock filtering if configuration requires it. @@ -46,7 +47,8 @@ public function __construct(StockConfigurationInterface $stockConfig, StockStatu public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { if (!$this->stockConfig->isShowOutOfStock()) { $this->stockStatusResource->addIsInStockFilterToCollection($collection); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php index 30174a94aaba0..019b4cccc8946 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php @@ -10,6 +10,7 @@ use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Join visibility and status tables to product collection @@ -24,7 +25,8 @@ class VisibilityStatusProcessor implements CollectionProcessorInterface public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner'); $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner'); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php index 62501a1a2382b..312aea552bd06 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php @@ -9,6 +9,7 @@ use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Add additional joins, attributes, and clauses to a product collection. @@ -21,11 +22,13 @@ interface CollectionProcessorInterface * @param Collection $collection * @param SearchCriteriaInterface $searchCriteria * @param array $attributeNames + * @param ContextInterface $context * @return Collection */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection; } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php index 687899c1e60ac..c2f7565403cb2 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php @@ -9,6 +9,7 @@ use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * {@inheritdoc} @@ -34,10 +35,11 @@ public function __construct(array $collectionProcessors = []) public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, - array $attributeNames + array $attributeNames, + ContextInterface $context ): Collection { foreach ($this->collectionProcessors as $collectionProcessor) { - $collection = $collectionProcessor->process($collection, $searchCriteria, $attributeNames); + $collection = $collectionProcessor->process($collection, $searchCriteria, $attributeNames, $context); } return $collection; diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php index 4c83afb89cc46..bb963cb9b5e01 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php @@ -18,6 +18,7 @@ use Magento\Framework\Api\Search\SearchResultInterface; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Api\SearchResultsInterface; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Product field data provider for product search, used for GraphQL resolver processing. @@ -84,12 +85,14 @@ public function __construct( * @param SearchCriteriaInterface $searchCriteria * @param SearchResultInterface $searchResult * @param array $attributes + * @param ContextInterface $context * @return SearchResultsInterface */ public function getList( SearchCriteriaInterface $searchCriteria, SearchResultInterface $searchResult, - array $attributes = [] + array $attributes = [], + ContextInterface $context ): SearchResultsInterface { /** @var Collection $collection */ $collection = $this->collectionFactory->create(); @@ -103,7 +106,7 @@ public function getList( $this->getSortOrderArray($searchCriteriaForCollection) )->apply(); - $this->collectionPreProcessor->process($collection, $searchCriteriaForCollection, $attributes); + $this->collectionPreProcessor->process($collection, $searchCriteriaForCollection, $attributes, $context); $collection->load(); $this->collectionPostProcessor->process($collection, $attributes); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php index 670eee9c4583e..5016e17e8b8e8 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php @@ -16,6 +16,7 @@ use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product as ProductProvider; use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResult; use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResultFactory; +use Magento\GraphQl\Model\Query\ContextInterface; use Magento\Search\Model\Query; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Store\Model\ScopeInterface; @@ -84,16 +85,18 @@ public function __construct( * * @param array $args * @param ResolveInfo $info + * @param ContextInterface $context * @return SearchResult */ public function getResult( array $args, - ResolveInfo $info + ResolveInfo $info, + ContextInterface $context ): SearchResult { $fields = $this->fieldSelection->getProductsFieldSelection($info); try { $searchCriteria = $this->buildSearchCriteria($args, $info); - $searchResults = $this->productDataProvider->getList($searchCriteria, $fields); + $searchResults = $this->productDataProvider->getList($searchCriteria, $fields, false, false, $context); } catch (InputException $e) { return $this->createEmptyResult($args); } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/ProductQueryInterface.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/ProductQueryInterface.php index 580af5d87be26..fca6f3d4f7770 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/ProductQueryInterface.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/ProductQueryInterface.php @@ -8,6 +8,7 @@ use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResult; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; +use Magento\GraphQl\Model\Query\ContextInterface; /** * Search for products by criteria @@ -19,7 +20,8 @@ interface ProductQueryInterface * * @param array $args * @param ResolveInfo $info + * @param ContextInterface $context * @return SearchResult */ - public function getResult(array $args, ResolveInfo $info): SearchResult; + public function getResult(array $args, ResolveInfo $info, ContextInterface $context): SearchResult; } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Search.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Search.php index fbb0e42f2afeb..29c3ce279e6a1 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Search.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Search.php @@ -13,6 +13,7 @@ use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResultFactory; use Magento\Framework\Api\Search\SearchCriteriaInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; +use Magento\GraphQl\Model\Query\ContextInterface; use Magento\Search\Api\SearchInterface; use Magento\Search\Model\Search\PageSizeProvider; @@ -80,12 +81,13 @@ public function __construct( * * @param array $args * @param ResolveInfo $info + * @param ContextInterface $context * @return SearchResult - * @throws \Exception */ public function getResult( array $args, - ResolveInfo $info + ResolveInfo $info, + ContextInterface $context ): SearchResult { $queryFields = $this->fieldSelection->getProductsFieldSelection($info); $searchCriteria = $this->buildSearchCriteria($args, $info); @@ -101,7 +103,7 @@ public function getResult( //Address limitations of sort and pagination on search API apply original pagination from GQL query $searchCriteria->setPageSize($realPageSize); $searchCriteria->setCurrentPage($realCurrentPage); - $searchResults = $this->productsProvider->getList($searchCriteria, $itemsResults, $queryFields); + $searchResults = $this->productsProvider->getList($searchCriteria, $itemsResults, $queryFields, $context); $totalPages = $realPageSize ? ((int)ceil($searchResults->getTotalCount() / $realPageSize)) : 0; diff --git a/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php b/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php index 7ad2e5dde2985..bcd3074b7be0a 100644 --- a/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php +++ b/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php @@ -82,7 +82,7 @@ abstract protected function getLinkType(): int; * @param int $linkType * @return \Magento\Catalog\Api\Data\ProductInterface[][] */ - private function findRelations(array $products, array $loadAttributes, int $linkType): array + private function findRelations(array $products, array $loadAttributes, int $linkType, ContextInterface $context): array { //Loading relations $relations = $this->relatedProductDataProvider->getRelations($products, $linkType); @@ -97,7 +97,8 @@ private function findRelations(array $products, array $loadAttributes, int $link $this->searchCriteriaBuilder->create(), $loadAttributes, false, - true + true, + $context ); //Filling related products map. /** @var \Magento\Catalog\Api\Data\ProductInterface[] $relatedProducts */ @@ -141,7 +142,7 @@ public function resolve(ContextInterface $context, Field $field, array $requests $fields = array_unique(array_merge(...$fields)); //Finding relations. - $related = $this->findRelations($products, $fields, $this->getLinkType()); + $related = $this->findRelations($products, $fields, $this->getLinkType(), $context); //Matching requests with responses. $response = new BatchResponse(); From 191b758e017b57d46ddb700cee48b5eaeaf37990 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Thu, 18 Jun 2020 13:05:05 +0200 Subject: [PATCH 03/11] magento/magento2#28563: Make the pass of the context optional argument --- .../Model/Resolver/Category/ProductsCount.php | 2 +- .../Magento/CatalogGraphQl/Model/Resolver/Product.php | 4 ++-- .../Products/DataProvider/Deferred/Product.php | 11 ++++------- .../Model/Resolver/Products/DataProvider/Product.php | 4 ++-- .../CollectionProcessor/AttributeProcessor.php | 11 +++++++++-- .../CollectionProcessor/ExtensibleEntityProcessor.php | 11 +++++++++-- .../CollectionProcessor/MediaGalleryProcessor.php | 11 +++++++++-- .../CollectionProcessor/RequiredColumnsProcessor.php | 11 +++++++++-- .../CollectionProcessor/SearchCriteriaProcessor.php | 11 +++++++++-- .../Product/CollectionProcessor/StockProcessor.php | 11 +++++++++-- .../CollectionProcessor/VisibilityStatusProcessor.php | 11 +++++++++-- .../Product/CollectionProcessorInterface.php | 4 ++-- .../Product/CompositeCollectionProcessor.php | 2 +- .../Resolver/Products/DataProvider/ProductSearch.php | 4 ++-- .../Model/Resolver/Batch/AbstractLikedProducts.php | 7 +++---- 15 files changed, 80 insertions(+), 35 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php index 744501e04878f..397fd12b7e714 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/ProductsCount.php @@ -63,7 +63,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $category = $value['model']; $productsCollection = $category->getProductCollection(); $productsCollection->setVisibility($this->catalogProductVisibility->getVisibleInSiteIds()); - $productsCollection = $this->stockProcessor->process($productsCollection, $this->searchCriteria, [], $context); + $productsCollection = $this->stockProcessor->process($productsCollection, $this->searchCriteria, []); return $productsCollection->getSize(); } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php index df725c02eb5bd..889735a5f4d88 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php @@ -63,8 +63,8 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $fields = $this->productFieldsSelector->getProductFieldsFromInfo($info); $this->productDataProvider->addEavAttributes($fields); - $result = function () use ($value, $context) { - $data = $value['product'] ?? $this->productDataProvider->getProductBySku($value['sku'], $context); + $result = function () use ($value) { + $data = $value['product'] ?? $this->productDataProvider->getProductBySku($value['sku']); if (empty($data)) { return null; } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php index ff4141cc0dca4..22bbc991a78e2 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Deferred/Product.php @@ -103,12 +103,11 @@ public function addEavAttributes(array $attributeCodes) : void * Get product from result set. * * @param string $sku - * @param ContextInterface $context * @return array */ - public function getProductBySku(string $sku, ContextInterface $context) : array + public function getProductBySku(string $sku) : array { - $products = $this->fetch($context); + $products = $this->fetch(); if (!isset($products[$sku])) { return []; @@ -120,10 +119,9 @@ public function getProductBySku(string $sku, ContextInterface $context) : array /** * Fetch product data and return in array format. Keys for products will be their skus. * - * @param ContextInterface $context * @return array */ - private function fetch(ContextInterface $context) : array + private function fetch() : array { if (empty($this->productSkus) || !empty($this->productList)) { return $this->productList; @@ -134,8 +132,7 @@ private function fetch(ContextInterface $context) : array $this->searchCriteriaBuilder->create(), $this->attributeCodes, false, - true, - $context + true ); /** @var \Magento\Catalog\Model\Product $product */ diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php index e17b938fa15e1..3e955ae303453 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php @@ -74,7 +74,7 @@ public function __construct( * @param string[] $attributes * @param bool $isSearch * @param bool $isChildSearch - * @param ContextInterface $context + * @param ContextInterface|null $context * @return SearchResultsInterface */ public function getList( @@ -82,7 +82,7 @@ public function getList( array $attributes = [], bool $isSearch = false, bool $isChildSearch = false, - ContextInterface $context + ContextInterface $context = null ): SearchResultsInterface { /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ $collection = $this->collectionFactory->create(); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php index ba769bd8fce3d..abed0ed2a897d 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/AttributeProcessor.php @@ -35,13 +35,20 @@ public function __construct($fieldToAttributeMap = []) } /** - * @inheritdoc + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { foreach ($attributeNames as $name) { $this->addAttribute($collection, $name); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php index e348fe1dfdf04..3c19965c5f7b5 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/ExtensibleEntityProcessor.php @@ -34,13 +34,20 @@ public function __construct(JoinProcessorInterface $joinProcessor) } /** - * @inheritdoc + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { $this->joinProcessor->process($collection); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php index 5f5b7f14d3f61..b636bcb001a3b 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/MediaGalleryProcessor.php @@ -36,13 +36,20 @@ public function __construct(MediaConfig $mediaConfig) } /** - * @inheritdoc + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { if (in_array('media_gallery_entries', $attributeNames)) { $mediaAttributes = $this->mediaConfig->getMediaAttributeCodes(); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php index 7d8ccf43f892f..b545047d01541 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/RequiredColumnsProcessor.php @@ -20,13 +20,20 @@ class RequiredColumnsProcessor implements CollectionProcessorInterface { /** - * {@inheritdoc} + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { $collection->addAttributeToSelect('special_price'); $collection->addAttributeToSelect('special_price_from'); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php index bbb5b11135d27..45df0d3343c11 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/SearchCriteriaProcessor.php @@ -34,13 +34,20 @@ public function __construct(SearchCriteriaApplier $searchCriteriaApplier) } /** - * {@inheritdoc} + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { $this->searchCriteriaApplier->process($searchCriteria, $collection); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php index 66473f74fab6b..61085c10a7335 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/StockProcessor.php @@ -42,13 +42,20 @@ public function __construct(StockConfigurationInterface $stockConfig, StockStatu } /** - * {@inheritdoc} + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { if (!$this->stockConfig->isShowOutOfStock()) { $this->stockStatusResource->addIsInStockFilterToCollection($collection); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php index 019b4cccc8946..964edc9d5a0ad 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessor/VisibilityStatusProcessor.php @@ -20,13 +20,20 @@ class VisibilityStatusProcessor implements CollectionProcessorInterface { /** - * {@inheritdoc} + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner'); $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner'); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php index 312aea552bd06..18e249ff23ac7 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CollectionProcessorInterface.php @@ -22,13 +22,13 @@ interface CollectionProcessorInterface * @param Collection $collection * @param SearchCriteriaInterface $searchCriteria * @param array $attributeNames - * @param ContextInterface $context + * @param ContextInterface|null $context * @return Collection */ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection; } diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php index c2f7565403cb2..be0ff02ffefb9 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php @@ -36,7 +36,7 @@ public function process( Collection $collection, SearchCriteriaInterface $searchCriteria, array $attributeNames, - ContextInterface $context + ContextInterface $context = null ): Collection { foreach ($this->collectionProcessors as $collectionProcessor) { $collection = $collectionProcessor->process($collection, $searchCriteria, $attributeNames, $context); diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php index bb963cb9b5e01..c35caa07b4785 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/ProductSearch.php @@ -85,14 +85,14 @@ public function __construct( * @param SearchCriteriaInterface $searchCriteria * @param SearchResultInterface $searchResult * @param array $attributes - * @param ContextInterface $context + * @param ContextInterface|null $context * @return SearchResultsInterface */ public function getList( SearchCriteriaInterface $searchCriteria, SearchResultInterface $searchResult, array $attributes = [], - ContextInterface $context + ContextInterface $context = null ): SearchResultsInterface { /** @var Collection $collection */ $collection = $this->collectionFactory->create(); diff --git a/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php b/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php index bcd3074b7be0a..7ad2e5dde2985 100644 --- a/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php +++ b/app/code/Magento/RelatedProductGraphQl/Model/Resolver/Batch/AbstractLikedProducts.php @@ -82,7 +82,7 @@ abstract protected function getLinkType(): int; * @param int $linkType * @return \Magento\Catalog\Api\Data\ProductInterface[][] */ - private function findRelations(array $products, array $loadAttributes, int $linkType, ContextInterface $context): array + private function findRelations(array $products, array $loadAttributes, int $linkType): array { //Loading relations $relations = $this->relatedProductDataProvider->getRelations($products, $linkType); @@ -97,8 +97,7 @@ private function findRelations(array $products, array $loadAttributes, int $link $this->searchCriteriaBuilder->create(), $loadAttributes, false, - true, - $context + true ); //Filling related products map. /** @var \Magento\Catalog\Api\Data\ProductInterface[] $relatedProducts */ @@ -142,7 +141,7 @@ public function resolve(ContextInterface $context, Field $field, array $requests $fields = array_unique(array_merge(...$fields)); //Finding relations. - $related = $this->findRelations($products, $fields, $this->getLinkType(), $context); + $related = $this->findRelations($products, $fields, $this->getLinkType()); //Matching requests with responses. $response = new BatchResponse(); From a5e978e0cca31600bcce04a785620f58d800c4a0 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Thu, 18 Jun 2020 16:55:21 +0200 Subject: [PATCH 04/11] magento/magento2#28563: Edits addressing static tests --- .../Product/CompositeCollectionProcessor.php | 8 +++++++- .../Model/Resolver/Products/Query/Filter.php | 9 --------- app/code/Magento/CatalogGraphQl/composer.json | 3 ++- .../Model/Context/AddUserInfoToContext.php | 5 ++--- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php index be0ff02ffefb9..415dbf565a0b7 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product/CompositeCollectionProcessor.php @@ -30,7 +30,13 @@ public function __construct(array $collectionProcessors = []) } /** - * {@inheritdoc} + * Process collection to add additional joins, attributes, and clauses to a product collection. + * + * @param Collection $collection + * @param SearchCriteriaInterface $searchCriteria + * @param array $attributeNames + * @param ContextInterface|null $context + * @return Collection */ public function process( Collection $collection, diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php index 5016e17e8b8e8..d70a3aa7e63c3 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Products/Query/Filter.php @@ -7,7 +7,6 @@ namespace Magento\CatalogGraphQl\Model\Resolver\Products\Query; -use Magento\Catalog\Model\Layer\Resolver as LayerResolver; use Magento\Catalog\Model\Product; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Exception\InputException; @@ -36,11 +35,6 @@ class Filter implements ProductQueryInterface */ private $productDataProvider; - /** - * @var LayerResolver - */ - private $layerResolver; - /** * FieldSelection */ @@ -59,7 +53,6 @@ class Filter implements ProductQueryInterface /** * @param SearchResultFactory $searchResultFactory * @param ProductProvider $productDataProvider - * @param LayerResolver $layerResolver * @param FieldSelection $fieldSelection * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param ScopeConfigInterface $scopeConfig @@ -67,14 +60,12 @@ class Filter implements ProductQueryInterface public function __construct( SearchResultFactory $searchResultFactory, ProductProvider $productDataProvider, - LayerResolver $layerResolver, FieldSelection $fieldSelection, SearchCriteriaBuilder $searchCriteriaBuilder, ScopeConfigInterface $scopeConfig ) { $this->searchResultFactory = $searchResultFactory; $this->productDataProvider = $productDataProvider; - $this->layerResolver = $layerResolver; $this->fieldSelection = $fieldSelection; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->scopeConfig = $scopeConfig; diff --git a/app/code/Magento/CatalogGraphQl/composer.json b/app/code/Magento/CatalogGraphQl/composer.json index d6e9bfa3c0505..de0e4908ff979 100644 --- a/app/code/Magento/CatalogGraphQl/composer.json +++ b/app/code/Magento/CatalogGraphQl/composer.json @@ -11,7 +11,8 @@ "magento/module-store": "*", "magento/module-eav-graph-ql": "*", "magento/module-catalog-search": "*", - "magento/framework": "*" + "magento/framework": "*", + "magento/module-graph-ql": "*" }, "suggest": { "magento/module-graph-ql": "*", diff --git a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php index 247ad1fa23656..603a86c1e6f39 100644 --- a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php +++ b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php @@ -57,10 +57,9 @@ public function execute(ContextParametersInterface $contextParameters): ContextP } $contextParameters->setUserType($currentUserType); - if ($isCustomer = $this->isCustomer($currentUserId, $currentUserType)) { - - $contextParameters->addExtensionAttribute('is_customer', $isCustomer); + $contextParameters->addExtensionAttribute('is_customer', $this->isCustomer($currentUserId, $currentUserType)); + if ($this->isCustomer($currentUserId, $currentUserType)) { try { $customerGroupId = $this->customerRepository->getById($currentUserId)->getGroupId(); } catch (\Exception $e) { From c53526484b93d75349cfe815fd214f95c255f171 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Thu, 18 Jun 2020 23:12:22 +0200 Subject: [PATCH 05/11] magento/magento2#28563: Edits session 1 - addressing WebApi tests failures --- .../Magento/CatalogGraphQl/Model/Resolver/Category/Products.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/Products.php b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/Products.php index 85b86f313de4d..b966fce43f56d 100644 --- a/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/Products.php +++ b/app/code/Magento/CatalogGraphQl/Model/Resolver/Category/Products.php @@ -63,7 +63,7 @@ public function resolve( 'eq' => $value['id'] ] ]; - $searchResult = $this->searchQuery->getResult($args, $info); + $searchResult = $this->searchQuery->getResult($args, $info, $context); //possible division by 0 if ($searchResult->getPageSize()) { From ea0ea52ae770656486ab5636ad678f7c72646dc0 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Fri, 19 Jun 2020 10:05:01 +0200 Subject: [PATCH 06/11] magento/magento2#28563: Edits session 2 - addressing Static tests failures --- app/code/Magento/CustomerGraphQl/etc/module.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/CustomerGraphQl/etc/module.xml b/app/code/Magento/CustomerGraphQl/etc/module.xml index ab21c6411bef6..b15df7fc0be6b 100644 --- a/app/code/Magento/CustomerGraphQl/etc/module.xml +++ b/app/code/Magento/CustomerGraphQl/etc/module.xml @@ -6,8 +6,9 @@ */ --> - + + From 4ed80e3fdfd8280e2c13d7a86f348e21cf2fd3bd Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Sun, 21 Jun 2020 10:06:51 +0200 Subject: [PATCH 07/11] magento/magento2#28563: Edit session 3: addressing static tests failures --- app/code/Magento/CatalogGraphQl/composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/CatalogGraphQl/composer.json b/app/code/Magento/CatalogGraphQl/composer.json index de0e4908ff979..46d7454a6d7e2 100644 --- a/app/code/Magento/CatalogGraphQl/composer.json +++ b/app/code/Magento/CatalogGraphQl/composer.json @@ -15,7 +15,6 @@ "magento/module-graph-ql": "*" }, "suggest": { - "magento/module-graph-ql": "*", "magento/module-graph-ql-cache": "*", "magento/module-store-graph-ql": "*" }, From a675e30bef1d7eca234531b4bfcca611a3979229 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Tue, 23 Jun 2020 21:30:57 +0200 Subject: [PATCH 08/11] magento/magento2#28563: Add customerGroupId to Context without explicit 'this is customer' check --- .../Model/Context/AddUserInfoToContext.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php index 603a86c1e6f39..478b2be2a3505 100644 --- a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php +++ b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php @@ -59,16 +59,14 @@ public function execute(ContextParametersInterface $contextParameters): ContextP $contextParameters->addExtensionAttribute('is_customer', $this->isCustomer($currentUserId, $currentUserType)); - if ($this->isCustomer($currentUserId, $currentUserType)) { - try { - $customerGroupId = $this->customerRepository->getById($currentUserId)->getGroupId(); - } catch (\Exception $e) { - $customerGroupId = GroupInterface::NOT_LOGGED_IN_ID; - } - - $contextParameters->addExtensionAttribute('customer_group_id', $customerGroupId); + try { + $customerGroupId = $this->customerRepository->getById($currentUserId)->getGroupId(); + } catch (\Exception $e) { + $customerGroupId = GroupInterface::NOT_LOGGED_IN_ID; } + $contextParameters->addExtensionAttribute('customer_group_id', $customerGroupId); + return $contextParameters; } From c689798c58e6be2232164be9035d08c79e1f15e3 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Wed, 8 Jul 2020 15:32:24 +0200 Subject: [PATCH 09/11] magento/magento2#28563: GraphQL product search does not consider Category Permissions configuration - Pass the context as argument Reveert AddUsserInfoToContext --- .../Model/Context/AddUserInfoToContext.php | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php index 478b2be2a3505..0f0b91967e473 100644 --- a/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php +++ b/app/code/Magento/CustomerGraphQl/Model/Context/AddUserInfoToContext.php @@ -10,8 +10,6 @@ use Magento\Authorization\Model\UserContextInterface; use Magento\GraphQl\Model\Query\ContextParametersInterface; use Magento\GraphQl\Model\Query\ContextParametersProcessorInterface; -use Magento\Customer\Api\CustomerRepositoryInterface; -use Magento\Customer\Api\Data\GroupInterface; /** * @inheritdoc @@ -23,21 +21,13 @@ class AddUserInfoToContext implements ContextParametersProcessorInterface */ private $userContext; - /** - * @var CustomerRepositoryInterface - */ - private $customerRepository; - /** * @param UserContextInterface $userContext - * @param CustomerRepositoryInterface $customerRepository */ public function __construct( - UserContextInterface $userContext, - CustomerRepositoryInterface $customerRepository + UserContextInterface $userContext ) { $this->userContext = $userContext; - $this->customerRepository = $customerRepository; } /** @@ -58,15 +48,6 @@ public function execute(ContextParametersInterface $contextParameters): ContextP $contextParameters->setUserType($currentUserType); $contextParameters->addExtensionAttribute('is_customer', $this->isCustomer($currentUserId, $currentUserType)); - - try { - $customerGroupId = $this->customerRepository->getById($currentUserId)->getGroupId(); - } catch (\Exception $e) { - $customerGroupId = GroupInterface::NOT_LOGGED_IN_ID; - } - - $contextParameters->addExtensionAttribute('customer_group_id', $customerGroupId); - return $contextParameters; } From d127628de669799f24e6f72bf5dff285fc3879a4 Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Thu, 9 Jul 2020 14:22:31 +0200 Subject: [PATCH 10/11] magento/magento2#28563: GraphQL product search does not consider Category Permissions configuration - Pass the context as argument Pass context to configurable variant collection --- .../Model/Resolver/ConfigurableVariant.php | 4 ++-- .../Model/Variant/Collection.php | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/ConfigurableProductGraphQl/Model/Resolver/ConfigurableVariant.php b/app/code/Magento/ConfigurableProductGraphQl/Model/Resolver/ConfigurableVariant.php index f28bf97adf930..0cb0eddf8a246 100644 --- a/app/code/Magento/ConfigurableProductGraphQl/Model/Resolver/ConfigurableVariant.php +++ b/app/code/Magento/ConfigurableProductGraphQl/Model/Resolver/ConfigurableVariant.php @@ -97,8 +97,8 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $this->variantCollection->addEavAttributes($fields); $this->optionCollection->addProductId((int)$value[$linkField]); - $result = function () use ($value, $linkField) { - $children = $this->variantCollection->getChildProductsByParentId((int)$value[$linkField]); + $result = function () use ($value, $linkField, $context) { + $children = $this->variantCollection->getChildProductsByParentId((int)$value[$linkField], $context); $options = $this->optionCollection->getAttributesByProductId((int)$value[$linkField]); $variants = []; /** @var Product $child */ diff --git a/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php b/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php index 6c4371b23927e..d9c68a9b25791 100644 --- a/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php +++ b/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php @@ -13,6 +13,7 @@ use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory; use Magento\Framework\EntityManager\MetadataPool; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\GraphQl\Model\Query\ContextInterface; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface; use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionPostProcessor; @@ -118,11 +119,12 @@ public function addEavAttributes(array $attributeCodes) : void * Retrieve child products from for passed in parent id. * * @param int $id + * @param ContextInterface $context|null * @return array */ - public function getChildProductsByParentId(int $id) : array + public function getChildProductsByParentId(int $id, ContextInterface $context = null) : array { - $childrenMap = $this->fetch(); + $childrenMap = $this->fetch($context); if (!isset($childrenMap[$id])) { return []; @@ -134,9 +136,10 @@ public function getChildProductsByParentId(int $id) : array /** * Fetch all children products from parent id's. * + * @param ContextInterface $context|null * @return array */ - private function fetch() : array + private function fetch(ContextInterface $context = null) : array { if (empty($this->parentProducts) || !empty($this->childrenMap)) { return $this->childrenMap; @@ -150,7 +153,8 @@ private function fetch() : array $this->collectionProcessor->process( $childCollection, $this->searchCriteriaBuilder->create(), - $attributeData + $attributeData, + $context ); $childCollection->load(); $this->collectionPostProcessor->process($childCollection, $attributeData); From a87a88dfb508f31fb655c93af0b88a110a86b52a Mon Sep 17 00:00:00 2001 From: Marjan Petkovski Date: Thu, 9 Jul 2020 16:38:57 +0200 Subject: [PATCH 11/11] magento/magento2#28563: GraphQL product search does not consider Category Permissions configuration - Pass the context as argument Address static tests --- .../ConfigurableProductGraphQl/Model/Variant/Collection.php | 4 ++-- app/code/Magento/ConfigurableProductGraphQl/composer.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php b/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php index d9c68a9b25791..b60a660251f4d 100644 --- a/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php +++ b/app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php @@ -119,7 +119,7 @@ public function addEavAttributes(array $attributeCodes) : void * Retrieve child products from for passed in parent id. * * @param int $id - * @param ContextInterface $context|null + * @param ContextInterface|null $context * @return array */ public function getChildProductsByParentId(int $id, ContextInterface $context = null) : array @@ -136,7 +136,7 @@ public function getChildProductsByParentId(int $id, ContextInterface $context = /** * Fetch all children products from parent id's. * - * @param ContextInterface $context|null + * @param ContextInterface|null $context * @return array */ private function fetch(ContextInterface $context = null) : array diff --git a/app/code/Magento/ConfigurableProductGraphQl/composer.json b/app/code/Magento/ConfigurableProductGraphQl/composer.json index 76ec4ad3153e2..295efb65b1978 100644 --- a/app/code/Magento/ConfigurableProductGraphQl/composer.json +++ b/app/code/Magento/ConfigurableProductGraphQl/composer.json @@ -6,6 +6,7 @@ "php": "~7.3.0||~7.4.0", "magento/module-catalog": "*", "magento/module-configurable-product": "*", + "magento/module-graph-ql": "*", "magento/module-catalog-graph-ql": "*", "magento/module-quote": "*", "magento/module-quote-graph-ql": "*",