CommerceEventsSubscriber.php in Commerce Google Tag Manager 8
File
src/EventSubscriber/CommerceEventsSubscriber.php
View source
<?php
namespace Drupal\commerce_google_tag_manager\EventSubscriber;
use Drupal\commerce_cart\Event\CartEntityAddEvent;
use Drupal\commerce_cart\Event\CartEvents;
use Drupal\commerce_cart\Event\CartOrderItemRemoveEvent;
use Drupal\commerce_google_tag_manager\EventTrackerService;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class CommerceEventsSubscriber implements EventSubscriberInterface {
private $eventTracker;
protected $routeMatch;
public function __construct(EventTrackerService $event_tracker, RouteMatchInterface $route_match) {
$this->eventTracker = $event_tracker;
$this->routeMatch = $route_match;
}
public static function getSubscribedEvents() {
return [
CartEvents::CART_ENTITY_ADD => 'trackCartAdd',
CartEvents::CART_ORDER_ITEM_REMOVE => 'trackCartRemove',
'commerce_order.place.post_transition' => 'trackPurchase',
KernelEvents::REQUEST => [
'trackProductView',
28,
],
];
}
public function trackCartAdd(CartEntityAddEvent $event) {
$this->eventTracker
->addToCart($event
->getOrderItem(), (int) $event
->getQuantity());
}
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,
]);
}
}
}
public function trackCartRemove(CartOrderItemRemoveEvent $event) {
$this->eventTracker
->removeFromCart($event
->getOrderItem(), 1);
}
public function trackPurchase(WorkflowTransitionEvent $event) {
$order = $event
->getEntity();
$this->eventTracker
->purchase($order);
}
}