<?php namespace Lc\ShopBundle\Services ; use ConnectHolland\CookieConsentBundle\Cookie\CookieChecker; use Doctrine\ORM\EntityManagerInterface; use Lc\ShopBundle\Context\MerchantUtilsInterface; use Symfony\Component\HttpFoundation\Cookie ; use Lc\ShopBundle\Context\VisitorInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\RequestStack; class UserUtils { protected $parameterBag ; protected $em ; protected $utils ; protected $requestStack ; protected $visitorRepository ; protected $merchantUtils ; protected $cookieChecker ; public function __construct(ParameterBagInterface $parameterBag, EntityManagerInterface $em, Utils $utils, RequestStack $requestStack, MerchantUtilsInterface $merchantUtils, CookieChecker $cookieChecker) { $this->em = $em ; $this->parameterBag = $parameterBag ; $this->utils = $utils ; $this->requestStack = $requestStack ; $this->visitorRepository = $this->em->getRepository($this->em->getClassMetadata(VisitorInterface::class)->getName()) ; $this->merchantUtils = $merchantUtils ; $this->cookieChecker = $cookieChecker ; } public function getCookieNameVisitor() { return $this->parameterBag->get('app.cookie_name_visitor') ; } public function cryptCookie($data) { return base64_encode($data); } public function decryptCookie($data) { return base64_decode($data); } public function setCookieVisitor($response, $cookie) { $response->headers->setCookie(Cookie::create($this->getCookieNameVisitor(), $this->cryptCookie($cookie), 0, '/', $this->utils->getCookieDomain())); } public function getVisitor($cookie) { return $this->visitorRepository->findOneBy(['cookie' => $cookie]) ; } public function getVisitorCurrent() { $cookie = $this->requestStack->getCurrentRequest()->cookies->get($this->getCookieNameVisitor()) ; return $this->getVisitor($cookie) ; } public function addVisitor($cookie, $ip) { $classVisitor = $this->em->getClassMetadata(VisitorInterface::class)->getName() ; $visitor = new $classVisitor ; $visitor->setCookie($cookie) ; $visitor->setIp($ip) ; $visitor->setTotalVisit(1) ; $visitor->setLastAccess(new \DateTime()) ; $this->em->persist($visitor); $this->em->flush() ; } public function updateVisitor($visitor) { $totalVisit = $visitor->getTotalVisit() + 1 ; $visitor->setTotalVisit($totalVisit) ; $visitor->setLastAccess(new \DateTime()) ; $this->em->persist($visitor); $this->em->flush() ; } public function setNewsletter($user, $subscribeNewsletter) { $currentMerchant = $this->merchantUtils->getMerchantCurrent() ; $newsletters = $currentMerchant->getNewsletters() ; if(isset($newsletters[0]) && $newsletters[0]) { if($subscribeNewsletter) { $user->addNewsletter($newsletters[0]) ; } else { $user->removeNewsletter($newsletters[0]) ; } } $this->em->persist($user) ; $this->em->flush() ; } }