custom/plugins/ProcWegmannTheme/src/Subscriber/CartSubscriber.php line 25

Open in your IDE?
  1. <?php 
  2. namespace Proclane\WegmannTheme\Subscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  5. use Shopware\Core\Checkout\Cart\Exception\LineItemNotFoundException;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  8. use Shopware\Core\Content\Product\Cart\ProductNotFoundError;
  9. class CartSubscriber implements EventSubscriberInterface {
  10.     public function __construct(private readonly EntityRepository $productRepository) {
  11.     }
  12.     public static function getSubscribedEvents(): array
  13.     {
  14.         return [
  15.             BeforeLineItemAddedEvent::class => 'onBeforeLineItemAdded'
  16.         ];
  17.     }
  18.     public function onBeforeLineItemAdded(BeforeLineItemAddedEvent $event): void
  19.     {
  20.         $customFields $event->getSalesChannelContext()?->getCustomer()?->getCustomFields();
  21.         $lineItemId $event->getLineItem()->getId();
  22.         $context $event->getContext();
  23.         $cart $event->getCart();
  24.         
  25.         $criteria = new Criteria([$lineItemId]);
  26.         $products $this->productRepository->search($criteria$context)->getEntities()->first();
  27.         $lineItemProductNumber $products->getProductNumber();
  28.         $allowedProducts $customFields['custom_product_listing_numbers'] ?? null;
  29.         if ($allowedProducts) {
  30.             $allowedProducts explode("," $allowedProducts);
  31.             if(!in_array($lineItemProductNumber$allowedProducts)) {
  32.                // throw new LineItemNotFoundException($lineItemProductNumber);
  33.                 $cart->remove($lineItemId);
  34.                 $event->getCart()->getErrors()->add(new ProductNotFoundError($lineItemId));
  35.             }
  36.         }
  37.     }
  38. }