custom/plugins/NewsletterSendinblue/src/Subscriber/AbandonedCartSubscriber.php line 92

Open in your IDE?
  1. <?php
  2. namespace NewsletterSendinblue\Subscriber;
  3. use NewsletterSendinblue\Service\Cart\CartEventProducer;
  4. use NewsletterSendinblue\Service\ConfigService;
  5. use NewsletterSendinblue\Service\Cart\SendinblueCartProcessorService;
  6. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  7. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemQuantityChangedEvent;
  8. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemRemovedEvent;
  9. use Shopware\Core\Checkout\Cart\Event\LineItemAddedEVent;
  10. use Shopware\Core\Checkout\Cart\Event\LineItemQuantityChangedEvent;
  11. use Shopware\Core\Checkout\Cart\Event\LineItemRemovedEvent;
  12. use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
  13. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. class AbandonedCartSubscriber implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var CartEventProducer
  19.      */
  20.     private $cartEventProducer;
  21.     /**
  22.      * @var SendinblueCartProcessorService
  23.      */
  24.     private $cartProcessorService;
  25.     /**
  26.      * @var ConfigService
  27.      */
  28.     private $configService;
  29.     /**
  30.      * AbandonedCartSubscriber constructor.
  31.      *
  32.      * @param CartEventProducer $cartEventProducer
  33.      * @param SendinblueCartProcessorService $cartProcessorService
  34.      * @param ConfigService $configService
  35.      */
  36.     public function __construct(
  37.         CartEventProducer $cartEventProducer,
  38.         SendinblueCartProcessorService $cartProcessorService,
  39.         ConfigService $configService
  40.     ) {
  41.         $this->cartEventProducer $cartEventProducer;
  42.         $this->cartProcessorService $cartProcessorService;
  43.         $this->configService $configService;
  44.     }
  45.     /**
  46.      * @return array
  47.      */
  48.     public static function getSubscribedEvents(): array
  49.     {
  50.         $events = [];
  51.         $events[CartConvertedEvent::class] = 'onCartConvertedEvent';
  52.         if (class_exists('\Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent')) {
  53.             // for newer shopware versions
  54.             $events[BeforeLineItemAddedEvent::class] = 'onCartUpdatedEvent';
  55.             $events[BeforeLineItemQuantityChangedEvent::class] = 'onCartUpdatedEvent';
  56.             $events[BeforeLineItemRemovedEvent::class] = 'onCartUpdatedEvent';
  57.         } else if (class_exists('\Shopware\Core\Checkout\Cart\Event\LineItemAddedEvent')) {
  58.             // for older shopware versions
  59.             $events[LineItemAddedEvent::class] = 'onCartUpdatedEvent';
  60.             $events[LineItemQuantityChangedEvent::class] = 'onCartUpdatedEvent';
  61.             $events[LineItemRemovedEvent::class] = 'onCartUpdatedEvent';
  62.         }
  63.         return $events;
  64.     }
  65.     /**
  66.      * @param CartConvertedEvent $event
  67.      */
  68.     public function onCartConvertedEvent(CartConvertedEvent $event): void
  69.     {
  70.         $this->configService->setSalesChannelId($event->getSalesChannelContext()->getSalesChannelId());
  71.         if ($this->configService->isAbandonedCartTrackingEnabled()) {
  72.             $this->cartEventProducer->processOrder(
  73.                 $event->getOriginalConvertedCart(),
  74.                 $event->getCart(),
  75.                 $event->getSalesChannelContext()
  76.             );
  77.         }
  78.     }
  79.     /**
  80.      * @param $event
  81.      */
  82.     public function onCartUpdatedEvent($event): void
  83.     {
  84.         if (method_exists($event'getSalesChannelContext') && $event->getSalesChannelContext() instanceof SalesChannelContext) {
  85.             $salesChannelId $event->getSalesChannelContext()->getSalesChannelId();
  86.         } else if (method_exists($event'getContext') && $event->getContext() instanceof SalesChannelContext) {
  87.             $salesChannelId $event->getContext()->getSalesChannelId();
  88.         } else {
  89.             return;
  90.         }
  91.         $this->configService->setSalesChannelId($salesChannelId);
  92.         if ($this->configService->isAbandonedCartTrackingEnabled()) {
  93.             $this->cartProcessorService->setShouldCollectData(true);
  94.         }
  95.     }
  96. }