Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

28563: GraphQL product search does not consider Category Permissions configuration - Pass the context as argument #28757

Merged
merged 14 commits into from
Jul 15, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -73,18 +74,20 @@ public function __construct(
* @param string[] $attributes
* @param bool $isSearch
* @param bool $isChildSearch
* @param ContextInterface|null $context
* @return SearchResultsInterface
*/
public function getList(
SearchCriteriaInterface $searchCriteria,
array $attributes = [],
bool $isSearch = false,
bool $isChildSearch = false
bool $isChildSearch = false,
ContextInterface $context = null
): 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -34,12 +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
array $attributeNames,
ContextInterface $context = null
): Collection {
cpartica marked this conversation as resolved.
Show resolved Hide resolved
foreach ($attributeNames as $name) {
$this->addAttribute($collection, $name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -33,16 +34,20 @@ public function __construct(JoinProcessorInterface $joinProcessor)
}

/**
* 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
array $attributeNames,
ContextInterface $context = null
): Collection {
$this->joinProcessor->process($collection);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -35,12 +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
array $attributeNames,
ContextInterface $context = null
): Collection {
if (in_array('media_gallery_entries', $attributeNames)) {
$mediaAttributes = $this->mediaConfig->getMediaAttributeCodes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -19,12 +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
array $attributeNames,
ContextInterface $context = null
): Collection {
$collection->addAttributeToSelect('special_price');
$collection->addAttributeToSelect('special_price_from');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -33,12 +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
array $attributeNames,
ContextInterface $context = null
): Collection {
$this->searchCriteriaApplier->process($searchCriteria, $collection);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -41,12 +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
array $attributeNames,
ContextInterface $context = null
): Collection {
if (!$this->stockConfig->isShowOutOfStock()) {
$this->stockStatusResource->addIsInStockFilterToCollection($collection);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -19,12 +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
array $attributeNames,
ContextInterface $context = null
): Collection {
$collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
$collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -21,11 +22,13 @@ interface CollectionProcessorInterface
* @param Collection $collection
* @param SearchCriteriaInterface $searchCriteria
* @param array $attributeNames
* @param ContextInterface|null $context
* @return Collection
*/
public function process(
Collection $collection,
SearchCriteriaInterface $searchCriteria,
array $attributeNames
array $attributeNames,
ContextInterface $context = null
): Collection;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

use Magento\Catalog\Model\ResourceModel\Product\Collection;
use Magento\Framework\Api\SearchCriteriaInterface;
use Magento\GraphQl\Model\Query\ContextInterface;

/**
* {@inheritdoc}
Expand All @@ -29,15 +30,22 @@ 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,
SearchCriteriaInterface $searchCriteria,
array $attributeNames
array $attributeNames,
ContextInterface $context = null
): Collection {
foreach ($this->collectionProcessors as $collectionProcessor) {
$collection = $collectionProcessor->process($collection, $searchCriteria, $attributeNames);
$collection = $collectionProcessor->process($collection, $searchCriteria, $attributeNames, $context);
}

return $collection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -84,12 +85,14 @@ public function __construct(
* @param SearchCriteriaInterface $searchCriteria
* @param SearchResultInterface $searchResult
* @param array $attributes
* @param ContextInterface|null $context
* @return SearchResultsInterface
*/
public function getList(
SearchCriteriaInterface $searchCriteria,
SearchResultInterface $searchResult,
array $attributes = []
array $attributes = [],
ContextInterface $context = null
): SearchResultsInterface {
/** @var Collection $collection */
$collection = $this->collectionFactory->create();
Expand All @@ -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);

Expand Down
Loading