<?php
declare(strict_types=1);
namespace BartCPreemiumArticle\PremiumArticle\Subscriber;
use BartCPreemiumArticle\PremiumArticle\Core\Content\Premium\PremiumEntity;
use BartCPreemiumArticle\PremiumArticle\Service\CartHelper;
use Shopware\Core\Checkout\Cart\Event\BeforeLineItemRemovedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class BeforeRemoveItemFormCart implements EventSubscriberInterface
{
private CartHelper $cartHelper;
public function __construct(CartHelper $cartHelper)
{
$this->cartHelper = $cartHelper;
}
public static function getSubscribedEvents(): array
{
return [
BeforeLineItemRemovedEvent::class => 'onBeforeLineItemRemovedEvent',
];
}
// todo czy ta klasa jest potrzebna? Nie robi tego Processor?
public function onBeforeLineItemRemovedEvent(BeforeLineItemRemovedEvent $event): void
{
$cart = $event->getCart();
$productItems = $cart->getLineItems()->filterType('product');
$regularProductInCart = false;
foreach ($productItems as $productItem) {
$premiumProductEntity = $productItem->getExtension('premiumProductEntity');
if (!($premiumProductEntity instanceof PremiumEntity)) {
$regularProductInCart = true;
break;
}
}
if (!$regularProductInCart) {
$this->cartHelper->removePremiumItems($cart, $event->getSalesChannelContext());
}
}
}