vendor/setono/google-analytics-server-side-tracking-bundle/src/Factory/HitBuilderFactory.php line 40

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Setono\GoogleAnalyticsServerSideTrackingBundle\Factory;
  4. use Setono\ClientId\Provider\ClientIdProviderInterface;
  5. use Setono\GoogleAnalyticsMeasurementProtocol\Hit\HitBuilder;
  6. use Setono\GoogleAnalyticsMeasurementProtocol\Hit\HitBuilderInterface;
  7. use Setono\GoogleAnalyticsMeasurementProtocol\Hit\HitBuilderStackInterface;
  8. use Setono\GoogleAnalyticsMeasurementProtocol\Request\Adapter\SymfonyRequestAdapter;
  9. use Setono\GoogleAnalyticsMeasurementProtocol\Request\LanguageResolverInterface;
  10. use Setono\MainRequestTrait\MainRequestTrait;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. final class HitBuilderFactory implements HitBuilderFactoryInterface
  13. {
  14.     use MainRequestTrait;
  15.     private RequestStack $requestStack;
  16.     private ClientIdProviderInterface $clientIdProvider;
  17.     private HitBuilderStackInterface $hitBuilderStack;
  18.     private LanguageResolverInterface $languageResolver;
  19.     public function __construct(
  20.         RequestStack $requestStack,
  21.         ClientIdProviderInterface $clientIdProvider,
  22.         HitBuilderStackInterface $hitBuilderStack,
  23.         LanguageResolverInterface $languageResolver
  24.     ) {
  25.         $this->requestStack = $requestStack;
  26.         $this->clientIdProvider = $clientIdProvider;
  27.         $this->hitBuilderStack = $hitBuilderStack;
  28.         $this->languageResolver = $languageResolver;
  29.     }
  30.     public function createPageViewHitBuilder(): HitBuilderInterface
  31.     {
  32.         return $this->populateAndReturn(new HitBuilder(HitBuilderInterface::HIT_TYPE_PAGEVIEW));
  33.     }
  34.     public function createEventHitBuilder(): HitBuilderInterface
  35.     {
  36.         return $this->populateAndReturn(new HitBuilder(HitBuilderInterface::HIT_TYPE_EVENT));
  37.     }
  38.     private function populateAndReturn(HitBuilderInterface $hitBuilder): HitBuilderInterface
  39.     {
  40.         $this->hitBuilderStack->push($hitBuilder);
  41.         $request = $this->getMainRequestFromRequestStack($this->requestStack);
  42.         if (null !== $request) {
  43.             $hitBuilder->populateFromRequest(new SymfonyRequestAdapter($request, $this->languageResolver));
  44.         }
  45.         $hitBuilder->setClientId($this->clientIdProvider->getClientId()->toString());
  46.         return $hitBuilder;
  47.     }
  48. }