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, $subscribeNewsletter) { $currentMerchant = $this->merchantUtils->getMerchantCurrent(); $newsletters = $currentMerchant->getNewsletters(); if($newsletters && count($newsletters) > 0) { if ($subscribeNewsletter) { $user->addNewsletter($newsletters[0]); } else { $user->removeNewsletter($newsletters[0]); } } $this->em->persist($user); $this->em->flush(); } /*public function setNewsletter($user, $newsletter, $subscribeNewsletter) { $currentMerchant = $this->merchantUtils->getMerchantCurrent() ; $newsletters = $currentMerchant->getNewsletters() ; foreach($newsletters as $newsletterMerchant) { if($newsletterMerchant == $newsletter) { 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); } }