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

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.     {
  42.         $this->cartEventProducer = $cartEventProducer;
  43.         $this->cartProcessorService = $cartProcessorService;
  44.         $this->configService = $configService;
  45.     }
  46.     /**
  47.      * @return array
  48.      */
  49.     public static function getSubscribedEvents(): array
  50.     {
  51.         $events = [];
  52.         $events[CartConvertedEvent::class] = 'onCartConvertedEvent';
  53.         if (class_exists('\Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent')) {
  54.             // for newer shopware versions
  55.             $events[BeforeLineItemAddedEvent::class] = 'onCartUpdatedEvent';
  56.             $events[BeforeLineItemQuantityChangedEvent::class] = 'onCartUpdatedEvent';
  57.             $events[BeforeLineItemRemovedEvent::class] = 'onCartUpdatedEvent';
  58.         } else if (class_exists('\Shopware\Core\Checkout\Cart\Event\LineItemAddedEvent')) {
  59.             // for older shopware versions
  60.             $events[LineItemAddedEvent::class] = 'onCartUpdatedEvent';
  61.             $events[LineItemQuantityChangedEvent::class] = 'onCartUpdatedEvent';
  62.             $events[LineItemRemovedEvent::class] = 'onCartUpdatedEvent';
  63.         }
  64.         return $events;
  65.     }
  66.     /**
  67.      * @param CartConvertedEvent $event
  68.      */
  69.     public function onCartConvertedEvent(CartConvertedEvent $event): void
  70.     {
  71.         $this->configService->setSalesChannelId($event->getSalesChannelContext()->getSalesChannelId());
  72.         if ($this->configService->isAbandonedCartTrackingEnabled()) {
  73.             $this->cartEventProducer->processOrder(
  74.                 $event->getOriginalConvertedCart(),
  75.                 $event->getCart(),
  76.                 $event->getSalesChannelContext()
  77.             );
  78.         }
  79.     }
  80.     /**
  81.      * @param $event
  82.      */
  83.     public function onCartUpdatedEvent($event): void
  84.     {
  85.         if (method_exists($event, 'getSalesChannelContext') && $event->getSalesChannelContext() instanceof SalesChannelContext) {
  86.             $salesChannelId = $event->getSalesChannelContext()->getSalesChannelId();
  87.         } else if (method_exists($event, 'getContext') && $event->getContext() instanceof SalesChannelContext) {
  88.             $salesChannelId = $event->getContext()->getSalesChannelId();
  89.         } else {
  90.             return;
  91.         }
  92.         $this->configService->setSalesChannelId($salesChannelId);
  93.         if ($this->configService->isAbandonedCartTrackingEnabled()) {
  94.             $this->cartProcessorService->setShouldCollectData(true);
  95.         }
  96.     }
  97. }