diff --git a/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php new file mode 100644 index 000000000000..73a22471584e --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php @@ -0,0 +1,45 @@ +itemDataProcessors = $itemDataProcessors; + } + + /** + * Process cart item data + * + * @param array $cartItemData + * @param ContextInterface $context + * @return array + */ + public function process(array $cartItemData, ContextInterface $context): array + { + foreach ($this->itemDataProcessors as $itemDataProcessor) { + $cartItemData = $itemDataProcessor->process($cartItemData, $context); + } + + return $cartItemData; + } +} diff --git a/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php new file mode 100644 index 000000000000..33f40bd28c1d --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php @@ -0,0 +1,25 @@ +getCartForUser = $getCartForUser; $this->addProductsToCartService = $addProductsToCart; + $this->itemDataProcessor = $itemDataProcessor; } /** @@ -68,6 +78,9 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $cartItems = []; foreach ($cartItemsData as $cartItemData) { + if (!$this->itemIsAllowedToCart($cartItemData, $context)) { + continue; + } $cartItems[] = (new CartItemFactory())->create($cartItemData); } @@ -90,4 +103,21 @@ function (Error $error) { ) ]; } + + /** + * Check if the item can be added to cart + * + * @param array $cartItemData + * @param ContextInterface $context + * @return bool + */ + private function itemIsAllowedToCart(array $cartItemData, ContextInterface $context): bool + { + $cartItemData = $this->itemDataProcessor->process($cartItemData, $context); + if (isset($cartItemData['grant_checkout']) && $cartItemData['grant_checkout'] === false) { + return false; + } + + return true; + } } diff --git a/app/code/Magento/QuoteGraphQl/etc/di.xml b/app/code/Magento/QuoteGraphQl/etc/di.xml index d230df253221..35b52dd495c5 100644 --- a/app/code/Magento/QuoteGraphQl/etc/di.xml +++ b/app/code/Magento/QuoteGraphQl/etc/di.xml @@ -7,6 +7,7 @@ --> +