src/Service/Visits/VisitsManager.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Service\Visits;
  3. use App\Entity\Click;
  4. use App\Entity\Visit;
  5. use App\Repository\ClickRepository;
  6. use App\Repository\VisitRepository;
  7. use Symfony\Component\HttpFoundation\Request;
  8. class VisitsManager
  9. {
  10.     public function __construct(private VisitRepository $visitRepository, private ClickRepository $clickRepository)
  11.     {
  12.     }
  13.     /**
  14.      * @return mixed
  15.      */
  16.     public function getUserIP(): mixed
  17.     {
  18.         // Get real visitor IP behind CloudFlare network
  19.         if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
  20.             $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
  21.             $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
  22.         }
  23.         $client  = @$_SERVER['HTTP_CLIENT_IP'];
  24.         $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
  25.         $remote  $_SERVER['REMOTE_ADDR'];
  26.         if(filter_var($clientFILTER_VALIDATE_IP))
  27.         {
  28.             $ip $client;
  29.         }
  30.         elseif(filter_var($forwardFILTER_VALIDATE_IP))
  31.         {
  32.             $ip $forward;
  33.         }
  34.         else
  35.         {
  36.             $ip $remote;
  37.         }
  38.         return $ip;
  39.     }
  40.     public function getReferrer(): ?string
  41.     {
  42.         $referer $_SERVER['HTTP_REFERER'] ?? null;
  43.         if($referer) {
  44.             $request Request::create($referer);
  45.             $referer $request->getHost();
  46.         }
  47.         return $referer;
  48.     }
  49.     /**
  50.      *
  51.      */
  52.     public function addVisit()
  53.     {
  54.         $visit = new Visit();
  55.         $visit->setIp($this->getUserIP());
  56.         $visit->setReferer($this->getReferrer());
  57.         $this->visitRepository->save($visittrue);
  58.     }
  59.     /**
  60.      * @param string $context
  61.      */
  62.     public function addClick(string $context)
  63.     {
  64.         $click = new Click();
  65.         $click->setContext($context);
  66.         $this->clickRepository->save($clicktrue);
  67.     }
  68.     public function cleanVisitHistory()
  69.     {
  70.     }
  71. }