<?php namespace Lc\CaracoleBundle\Builder\User; use Doctrine\ORM\EntityManagerInterface; use Lc\CaracoleBundle\Factory\User\VisitorFactory; use Lc\CaracoleBundle\Model\User\VisitorInterface; use Lc\SovBundle\Component\CookieComponent; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; class VisitorBuilder { protected CookieComponent $cookieComponent; protected ParameterBagInterface $parameterBag; protected EntityManagerInterface $entityManager; public function __construct( EntityManagerInterface $entityManager, CookieComponent $cookieComponent, ParameterBagInterface $parameterBag ) { $this->entityManager = $entityManager; $this->cookieComponent = $cookieComponent; $this->parameterBag = $parameterBag; } // addVisitor public function create(string $cookie, string $ip) { $visitorFactory = new VisitorFactory(); $visitor = $visitorFactory->create($cookie, $ip); $this->entityManager->create($visitor); $this->entityManager->flush(); } public function update(VisitorInterface $visitor) { $totalVisit = $visitor->getTotalVisit() + 1; $visitor->setTotalVisit($totalVisit); $visitor->setLastAccess(new \DateTime()); $this->entityManager->update($visitor); $this->entityManager->flush(); } // setCookieVisitor public function setCookie($response, $cookie): void { $response->headers->setCookie( Cookie::create( $this->parameterBag->get('app.cookie_name_visitor'), $this->cookieComponent->cryptCookie($cookie), new \DateTime('+2 months'), '/', $this->cookieComponent->getCookieDomain() ) ); } // updateVisitorCookie public function updateCookie($response): void { $response->headers->setCookie( Cookie::create( $this->parameterBag->get('app.cookie_name_visitor'), $this->cookieComponent->cryptCookie($this->getVisitorCurrent()->getCookie()), new \DateTime('+2 months'), '/', $this->cookieComponent->getCookieDomain() ) ); } }