src/Overrides/PopulateHitBuildersSubscriberOverride.php line 40

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Overrides;
  4. use Setono\GoogleAnalyticsMeasurementProtocol\Hit\HitBuilderInterface;
  5. use Setono\GoogleAnalyticsMeasurementProtocol\Hit\HitBuilderStackInterface;
  6. use Setono\GoogleAnalyticsServerSideTrackingBundle\Persister\HitPersisterInterface;
  7. use Setono\MainRequestTrait\MainRequestTrait;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  12. use App\Entity\Search; 
  13. final class PopulateHitBuildersSubscriberOverride implements EventSubscriberInterface
  14. {
  15.     use MainRequestTrait;
  16.     private HitBuilderStackInterface $hitBuilderStack;
  17.     private HitPersisterInterface $hitPersister;
  18.     public function __construct(HitBuilderStackInterface $hitBuilderStack, HitPersisterInterface $hitPersister)
  19.     {
  20.         $this->hitBuilderStack = $hitBuilderStack;
  21.         $this->hitPersister = $hitPersister;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             KernelEvents::RESPONSE => ['persist', -1000],
  27.         ];
  28.     }
  29.     public function persist(ResponseEvent $event): void
  30.     {
  31.         if (!$this->isMainRequest($event)) {
  32.             return;
  33.         }
  34.         foreach ($this->hitBuilderStack->all(static fn (HitBuilderInterface $hitBuilder) => $hitBuilder->getHitType() !== HitBuilderInterface::HIT_TYPE_PAGEVIEW) as $hitBuilder) {
  35.             $this->hitPersister->persistBuilder($hitBuilder);
  36.         }
  37.         /**
  38.          * Here we try to mimic how the client side Google Analytics implementation would track page views
  39.          * We track them on 2xx, 4xx, and 5xx HTTP status codes
  40.          */
  41.         $statusCode = $event->getResponse()->getStatusCode();
  42.         $significantStatusCode = (int) ($statusCode / 100);
  43.         // if (!in_array($significantStatusCode, [2, 4, 5], true)) {
  44.         if (!in_array($significantStatusCode, [2], true)) {
  45.             return;
  46.         }
  47.         $pathInfo = $event->getRequest()->getPathInfo();
  48.         if (strpos($pathInfo, '/admin') !== false) {
  49.             return;
  50.         }
  51.         if (strpos($pathInfo, '/js/routing') !== false) {
  52.             return;
  53.         }
  54.         if (strpos($pathInfo, '/media/cache') !== false) {
  55.             return;
  56.         }
  57.         if (strpos($pathInfo, '/favicon.ico') !== false) {
  58.             return;
  59.         }
  60.         if (strpos($pathInfo, '/i/ws') !== false) {
  61.             return;
  62.         }
  63.         if (strpos($pathInfo, '/estates') !== false) {
  64.             return;
  65.         }
  66.         //filtre acheter et commerce
  67.         if( $event->getRequest()->isXmlHttpRequest() && $event->getRequest()->request->has('estate_filter') ){
  68.             return ;
  69.         }
  70.         // $router = $event->get('router');
  71.         // $routes = $router->getRouteCollection();
  72.         // $matcher = new ExistUrlMatcher($routes, $router->getMatcher()->getContext());
  73.         // $is_route_exist = $matcher->isRouteExist($pathInfo);
  74.         // dump($is_route_exist);die;
  75.         // if(!$is_route_exist){
  76.         //     return;
  77.         // }
  78.         $_route  = $event->getRequest()->attributes->get('_route');
  79.         $available_routes = [
  80.             'homepage',
  81.             'acheter',
  82.             // 'acheter_estate',
  83.             'vendre',
  84.             'estimation',
  85.             'commerces',
  86.             // 'commerces_estate',
  87.             'agents',
  88.             'show_agent',
  89.             // 'show_agent_estate',
  90.             'devenir_conseiller',
  91.             'mentions_legales',
  92.             'politique_de_confidentialite',
  93.             'contact',
  94.             'mon_compte',
  95.             'save_user',
  96.             'delete_user',
  97.             'save_search',
  98.             'manage_search',
  99.             'toggle_favorite',
  100.             'auth',
  101.             'app_login',
  102.             // 'hit_estate'
  103.         ];
  104.         if(!in_array($_route, $available_routes)){
  105.             // dump($_route);
  106.             return;
  107.         }
  108.         foreach ($this->hitBuilderStack->pageviews() as $hitBuilder) {
  109.             $this->hitPersister->persistBuilder($hitBuilder);
  110.         }
  111.     }
  112. }