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; $this->security = $security; } 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), new \DateTime('+2 months'), '/', $this->utils->getCookieDomain())); } public function updateVisitorCookie($response) { $response->headers->setCookie(Cookie::create($this->getCookieNameVisitor(), $this->cryptCookie($this->getVisitorCurrent()->getCookie()), new \DateTime('+2 months'), '/', $this->utils->getCookieDomain())); } public function getVisitor($cookie) { if (!isset($this->visitor[$cookie])) { $this->visitor[$cookie] = $this->visitorRepository->findOneBy(['cookie' => $cookie]); } return $this->visitor[$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, $newsletter, $subscribeNewsletter) { $currentMerchant = $this->merchantUtils->getMerchantCurrent(); $newsletters = $currentMerchant->getNewsletters(); foreach ($newsletters as $newsletterMerchant) { if ($newsletterMerchant->getId() == $newsletter->getId()) { if ($subscribeNewsletter) { $user->addNewsletter($newsletter); } else { $user->removeNewsletter($newsletter); } } } $this->em->persist($user); $this->em->flush(); } public function isSubscribedToNewsletter($user, $newsletter) { return $user->getNewsletters()->contains($newsletter); } }