<?php declare(strict_types=1);
namespace BartCPreemiumArticle\PremiumArticle\Subscriber;
use BartCPreemiumArticle\PremiumArticle\Service\ProductHelper;
use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
use Shopware\Core\Checkout\Cart\SalesChannel\CartService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class AddToCart implements EventSubscriberInterface
{
private ProductHelper $productHelper;
private CartService $cartService;
private RequestStack $requestStack;
public function __construct(
RequestStack $requestStack,
ProductHelper $productHelper,
CartService $cartService
) {
$this->requestStack = $requestStack;
$this->productHelper = $productHelper;
$this->cartService = $cartService;
}
public static function getSubscribedEvents(): array
{
return [
BeforeLineItemAddedEvent::class => 'whenLineItemAddToCart',
];
}
public function whenLineItemAddToCart(BeforeLineItemAddedEvent $event): void
{
$request = $this->requestStack->getCurrentRequest();
if (!$request) {
return;
}
$uri = $request->getUri();
if (strpos($uri, '/cart/add/id') === false && strpos($uri, '/account/login') === false) {
$lineItemId = $event->getLineItem()->getReferencedId();
if ($lineItemId) {
$cart = $event->getCart();
$sellAvailable = $this->productHelper->checkIfSellAvailable($lineItemId);
if (!$sellAvailable) {
$this->cartService->remove(
$cart,
$event->getLineItem()->getId(),
$event->getSalesChannelContext()
);
}
}
}
}
}