src/Twig/TrackingExtension.php line 102

Open in your IDE?
  1. <?php
  2. namespace App\Twig;
  3. use App\Entity\Main\Tracking;
  4. use App\Entity\Main\TrackingHasABTest;
  5. use App\EventListener\Main\DebugListener;
  6. use App\Services\TrackingManager;
  7. use Twig\Extension\AbstractExtension;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Twig\TwigFunction;
  10. /**
  11.  * Class TrackingExtension
  12.  * @package App\Twig
  13.  */
  14. class TrackingExtension extends AbstractExtension
  15. {
  16.     protected $session;
  17.     /**
  18.      * @var RequestStack
  19.      */
  20.     protected $requestStack;
  21.     protected $trackingManager;
  22.     protected $trackingFactory;
  23.     protected $allowedDebugIp;
  24.     protected $environment;
  25.     /**
  26.      * TrackingExtension constructor.
  27.      * @param RequestStack $requestStack
  28.      * @param TrackingManager $trackingFactory
  29.      * @param array $allowedDebugIp
  30.      * @param string $environment
  31.      */
  32.     public function __construct(RequestStack $requestStackTrackingManager $trackingFactory$allowedDebugIp = [], $environment 'prod')
  33.     {
  34.         if ($requestStack->getCurrentRequest()) {
  35.             $this->session $requestStack->getCurrentRequest()->getSession();
  36.         }
  37.         $this->requestStack $requestStack;
  38.         $this->trackingFactory $trackingFactory;
  39.         $this->allowedDebugIp $allowedDebugIp;
  40.         $this->environment $environment;
  41.     }
  42.     
  43.     /**
  44.      * @return array
  45.      */
  46.     public function getFunctions(): array
  47.     {
  48.         return array(
  49.             new TwigFunction('getTrackingDebug', array($this'getTrackingDebug')),
  50.             new TwigFunction('getTrackingComment', array($this'getTrackingComment')),
  51.         );
  52.     }
  53.     /**
  54.      * Used to display tracking to the autorised Ips
  55.      * @return string
  56.      */
  57.     public function getTrackingDebug(Tracking $tracking null$class null)
  58.     {
  59.         if (!$this->isAllowedToSeeDebug()) {
  60.             return;
  61.         }
  62.         $debug $this->getTrackingString($tracking);
  63.         return "<div class=\"topnav {$class}\" style='background-color: darkgrey;overflow: hidden; position: fixed; left: 0; bottom: 40px'>debug : {$debug}</div>";
  64.     }
  65.     /**
  66.      * Used to inject tracking data in the html
  67.      * @return string
  68.      */
  69.     public function getTrackingComment(Tracking $tracking null)
  70.     {
  71.         if (!$this->isAllowedToSeeDebug()) {
  72.             return;
  73.         }
  74.         $comment $this->getTrackingString($tracking);
  75.         return "<!-- {$comment} -->";
  76.     }
  77.     /**
  78.      * @return bool|string
  79.      */
  80.     private function getTrackingString(Tracking $tracking)
  81.     {
  82.         // put the debug in there :)
  83.         $debug "Aff : " $this->trackingFactory->resolveAffiliate($tracking)->getAffiliateId();
  84.         $debug .= ", trid : " $tracking->getTrackingId();
  85.         $debug .= ", Device : " $tracking->getDevice();
  86.         $debug .= ", dcode: " $this->session->get('dcode');
  87.         if (count($tracking->getAbTests())) {
  88.             $debug .= ", AB Tests = ";
  89.             /** @var TrackingHasABTest $trackingHasAbtest */
  90.             foreach ($tracking->getAbTests() as $trackingHasAbtest) {
  91.                 $debug .= $trackingHasAbtest->getVersion() . " - ";
  92.             }
  93.         }
  94.         $forcedABTests $this->session->get(DebugListener::DEBUG_DATA_SESSION)[DebugListener::DEBUG_FORCED_ABTESTS] ?? [];
  95.         if (count($forcedABTests)) {
  96.             $debug .= ", Forced AB Tests = ";
  97.             /** @var TrackingHasABTest $trackingHasAbtest */
  98.             foreach ($forcedABTests as $forcedABTest) {
  99.                 $debug .= $forcedABTest " - ";
  100.             }
  101.         }
  102.         // check for 3ds.
  103.         if ($this->session->get('force_3ds')) {
  104.             $debug .= ", Forced 3DS = true";
  105.         } else {
  106.             $debug .= ", Forced 3DS = false";
  107.         }
  108.         return $debug;
  109.     }
  110.     /**
  111.      * @return bool
  112.      */
  113.     private function isAllowedToSeeDebug()
  114.     {
  115.         $debugAllowed false;
  116.         if (in_array($this->requestStack->getCurrentRequest()->getClientIp(), $this->allowedDebugIp) || in_array($this->environment, ['test''dev'])) {
  117.             $debugAllowed true;
  118.         }
  119.         return $debugAllowed;
  120.     }
  121.     public function getName()
  122.     {
  123.         return 'tracking_extension';
  124.     }
  125. }