custom/plugins/TanmarNgGoogleAdsTracking/src/Storefront/Page/Checkout/CheckoutPageSubscriber.php line 54

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Tanmar\GoogleAdsTracking\Storefront\Page\Checkout;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  6. use Shopware\Storefront\Page\Checkout\Cart\CheckoutCartPageLoadedEvent;
  7. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  8. use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent;
  9. use Shopware\Storefront\Page\Checkout\Offcanvas\OffcanvasCartPageLoadedEvent;
  10. use Tanmar\GoogleAdsTracking\Storefront\BaseSubscriber;
  11. use Tanmar\GoogleAdsTracking\Components\Helper\LoggerHelper;
  12. use Tanmar\GoogleAdsTracking\Service\ConfigService;
  13. use Tanmar\GoogleAdsTracking\Service\Article\ArticleIdentifierService;
  14. use Tanmar\GoogleAdsTracking\Service\RemarketingEvent\RemarketingEventService;
  15. class CheckoutPageSubscriber extends BaseSubscriber implements EventSubscriberInterface {
  16.     protected $remarketingEventService;
  17.     public function __construct(ConfigService $configServiceLoggerHelper $loggerHelperArticleIdentifierService $articleIdentifierServiceRemarketingEventService $remarketingEventService) {
  18.         parent::__construct($configService$loggerHelper$articleIdentifierService);
  19.         $this->remarketingEventService $remarketingEventService;
  20.     }
  21.     public static function getSubscribedEvents(): array {
  22.         return [
  23.             OffcanvasCartPageLoadedEvent::class => 'onOffcanvasCartPageLoaded',
  24.             CheckoutCartPageLoadedEvent::class => 'onCheckoutCartPageLoaded',
  25.             CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirmPageLoaded',
  26.             CheckoutFinishPageLoadedEvent::class => 'onCheckoutFinishPageLoaded'
  27.         ];
  28.     }
  29.     public function onOffcanvasCartPageLoaded(OffcanvasCartPageLoadedEvent $event): void {
  30.         try {
  31.             $googleAdsData $this->getExtension($event);
  32.             if (!is_null($googleAdsData) && $this->getConfig()->isRetargetingActive()) {
  33.                 $eventData $this->remarketingEventService->getEventData($event->getPage()->getCart()->getLineItems()->filterType(LineItem::PRODUCT_LINE_ITEM_TYPE)->getElements(), $event->getPage()->getCart()->getPrice()->getNetPrice(), true);
  34.                 $googleAdsData->assign([
  35.                     'eventName' => RemarketingEventService::GOOGLE_ADS_EVENT_NAME_CART,
  36.                     'eventData' => (count($eventData) > 0) ? $eventData false
  37.                 ]);
  38.             }
  39.             $this->addExtension($event$googleAdsData);
  40.         } catch (\Throwable $e) {
  41.             $this->loggerHelper->logThrowable($e);
  42.         }
  43.     }
  44.     public function onCheckoutCartPageLoaded(CheckoutCartPageLoadedEvent $event): void {
  45.         try {
  46.             $googleAdsData $this->getExtension($event);
  47.             if (!is_null($googleAdsData) && $this->getConfig()->isRetargetingActive()) {
  48.                 $eventData $this->remarketingEventService->getEventData($event->getPage()->getCart()->getLineItems()->filterType(LineItem::PRODUCT_LINE_ITEM_TYPE)->getElements(), $event->getPage()->getCart()->getPrice()->getNetPrice(), true);
  49.                 $googleAdsData->assign([
  50.                     'eventName' => RemarketingEventService::GOOGLE_ADS_EVENT_NAME_CART,
  51.                     'eventData' => (count($eventData) > 0) ? $eventData false
  52.                 ]);
  53.             }
  54.             $this->addExtension($event$googleAdsData);
  55.         } catch (\Throwable $e) {
  56.             $this->loggerHelper->logThrowable($e);
  57.         }
  58.     }
  59.     public function onCheckoutConfirmPageLoaded(CheckoutConfirmPageLoadedEvent $event): void {
  60.         try {
  61.             $googleAdsData $this->getExtension($event);
  62.             if (!is_null($googleAdsData) && $this->getConfig()->isRetargetingActive()) {
  63.                 $eventData $this->remarketingEventService->getEventData($event->getPage()->getCart()->getLineItems()->filterType(LineItem::PRODUCT_LINE_ITEM_TYPE)->getElements(), $event->getPage()->getCart()->getPrice()->getNetPrice(), true);
  64.                 $googleAdsData->assign([
  65.                     'eventName' => RemarketingEventService::GOOGLE_ADS_EVENT_NAME_CART,
  66.                     'eventData' => (count($eventData) > 0) ? $eventData false
  67.                 ]);
  68.             }
  69.             $this->addExtension($event$googleAdsData);
  70.         } catch (\Throwable $e) {
  71.             $this->loggerHelper->logThrowable($e);
  72.         }
  73.     }
  74.     public function onCheckoutFinishPageLoaded(CheckoutFinishPageLoadedEvent $event): void {
  75.         try {
  76.             $googleAdsData $this->getExtension($event);
  77.             if (!is_null($googleAdsData)) {
  78.                 $eventData $this->remarketingEventService->getEventData($event->getPage()->getOrder()->getLineItems()->filterByType(LineItem::PRODUCT_LINE_ITEM_TYPE)->getElements(), $event->getPage()->getOrder()->getAmountNet(), true);
  79.                 $googleAdsData->assign([
  80.                     'eventName' => RemarketingEventService::GOOGLE_ADS_EVENT_NAME_FINISH,
  81.                     'eventData' => (count($eventData) > 0) ? $eventData false
  82.                 ]);
  83.             }
  84.             $this->addExtension($event$googleAdsData);
  85.         } catch (\Throwable $e) {
  86.             $this->loggerHelper->logThrowable($e);
  87.         }
  88.     }
  89.     /**
  90.      * 
  91.      * @param array $products
  92.      * @return array
  93.      */
  94.     private function getElements(array $products): array {
  95.         $elements = array();
  96.         try {
  97.             foreach ($products as $product) {
  98.                 if ($product->getType() == "product") {
  99.                     $elements[] = $product;
  100.                 }
  101.             }
  102.         } catch (\Throwable $e) {
  103.             $this->loggerHelper->logThrowable($e);
  104.         }
  105.         return $elements;
  106.     }
  107. }