You are here

class CommerceEventsSubscriber in Commerce Google Tag Manager 8.2

Same name and namespace in other branches
  1. 8 src/EventSubscriber/CommerceEventsSubscriber.php \Drupal\commerce_google_tag_manager\EventSubscriber\CommerceEventsSubscriber

Event handler for commerce related events.

Hierarchy

  • class \Drupal\commerce_google_tag_manager\EventSubscriber\CommerceEventsSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface

Expanded class hierarchy of CommerceEventsSubscriber

2 files declare their use of CommerceEventsSubscriber
CartEventTest.php in tests/src/Kernel/EventSubscriber/CartEventTest.php
OrderEventTest.php in tests/src/Kernel/EventSubscriber/OrderEventTest.php
1 string reference to 'CommerceEventsSubscriber'
commerce_google_tag_manager.services.yml in ./commerce_google_tag_manager.services.yml
commerce_google_tag_manager.services.yml
1 service uses CommerceEventsSubscriber
commerce_google_tag_manager.commerce_events_subscriber in ./commerce_google_tag_manager.services.yml
Drupal\commerce_google_tag_manager\EventSubscriber\CommerceEventsSubscriber

File

src/EventSubscriber/CommerceEventsSubscriber.php, line 18

Namespace

Drupal\commerce_google_tag_manager\EventSubscriber
View source
class CommerceEventsSubscriber implements EventSubscriberInterface {

  /**
   * The Commerce GTM event tracker.
   *
   * @var \Drupal\commerce_google_tag_manager\EventTrackerService
   */
  private $eventTracker;

  /**
   * The current route match.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  protected $routeMatch;

  /**
   * Constructs the CommerceEventsSubscriber object.
   *
   * @param \Drupal\commerce_google_tag_manager\EventTrackerService $event_tracker
   *   The Commerce GTM event tracker.
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   *   The route match, for context.
   */
  public function __construct(EventTrackerService $event_tracker, RouteMatchInterface $route_match) {
    $this->eventTracker = $event_tracker;
    $this->routeMatch = $route_match;
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      CartEvents::CART_ENTITY_ADD => 'trackCartAdd',
      CartEvents::CART_ORDER_ITEM_REMOVE => 'trackCartRemove',
      'commerce_order.place.post_transition' => 'trackPurchase',
      // trackProductView should run before Dynamic Page Cache, which has
      // priority 27.
      // @see \Drupal\dynamic_page_cache\EventSubscriber\DynamicPageCacheSubscriber.
      KernelEvents::REQUEST => [
        'trackProductView',
        28,
      ],
    ];
  }

  /**
   * Track the "addToCart" event.
   *
   * @param \Drupal\commerce_cart\Event\CartEntityAddEvent $event
   *   The add to cart event.
   */
  public function trackCartAdd(CartEntityAddEvent $event) {
    $this->eventTracker
      ->addToCart($event
      ->getOrderItem(), (int) $event
      ->getQuantity());
  }

  /**
   * Track the "productView" event.
   *
   * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
   *   The event to view the product.
   */
  public function trackProductView(GetResponseEvent $event) {
    $product = $this->routeMatch
      ->getParameter('commerce_product');
    if ($event
      ->getRequest()
      ->getMethod() === 'GET' && !empty($product) && $this->routeMatch
      ->getRouteName() === 'entity.commerce_product.canonical') {
      $default_variation = $product
        ->getDefaultVariation();
      if ($default_variation) {
        $this->eventTracker
          ->productDetailViews([
          $default_variation,
        ]);
      }
    }
  }

  /**
   * Track the "cartRemove" event.
   *
   * @param \Drupal\commerce_cart\Event\CartOrderItemRemoveEvent $event
   *   The cart event.
   */
  public function trackCartRemove(CartOrderItemRemoveEvent $event) {
    $this->eventTracker
      ->removeFromCart($event
      ->getOrderItem(), 1);
  }

  /**
   * Track the "purchase" event.
   *
   * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
   *   The workflow transition event.
   */
  public function trackPurchase(WorkflowTransitionEvent $event) {

    /** @var \Drupal\commerce_order\Entity\OrderInterface $order */
    $order = $event
      ->getEntity();
    $this->eventTracker
      ->purchase($order);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CommerceEventsSubscriber::$eventTracker private property The Commerce GTM event tracker.
CommerceEventsSubscriber::$routeMatch protected property The current route match.
CommerceEventsSubscriber::getSubscribedEvents public static function Returns an array of event names this subscriber wants to listen to.
CommerceEventsSubscriber::trackCartAdd public function Track the "addToCart" event.
CommerceEventsSubscriber::trackCartRemove public function Track the "cartRemove" event.
CommerceEventsSubscriber::trackProductView public function Track the "productView" event.
CommerceEventsSubscriber::trackPurchase public function Track the "purchase" event.
CommerceEventsSubscriber::__construct public function Constructs the CommerceEventsSubscriber object.