src/EventListener/PopUpMessageListener.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. date_default_timezone_set('UTC');
  4. use App\Entity\PopUpMessage;
  5. use App\Entity\User;
  6. use DateTime;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Psr\Log\LoggerInterface;
  9. use Scheb\TwoFactorBundle\Security\Authentication\Token\TwoFactorToken;
  10. use Symfony\Component\HttpFoundation\Session\Session;
  11. use Symfony\Component\HttpKernel\Event\RequestEvent;
  12. use Symfony\Component\Routing\RouterInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
  15. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  16. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  17. //use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter;
  18. class PopUpMessageListener
  19. {
  20.     /**
  21.      * @var Session
  22.      */
  23.     private $session;
  24.     /**
  25.      * @var TokenStorageInterface
  26.      */
  27.     private $tokenStorage;
  28.     /**
  29.      * @var RouterInterface
  30.      */
  31.     private $router;
  32.     /**
  33.      * @var AuthorizationCheckerInterface
  34.      */
  35.     private $checker;
  36.     /**
  37.      * @var LoggerInterface
  38.      */
  39.     private $logger;
  40.     /**
  41.      * @var EntityManagerInterface
  42.      */
  43.     private $em;
  44.     /**
  45.      * @var EntityManagerInterface
  46.      */
  47.     private $defaultTimeZone;
  48.     /**
  49.      * SessionIdleHandler constructor.
  50.      * @param Session $session
  51.      * @param TokenStorageInterface $tokenStorage
  52.      * @param RouterInterface $router
  53.      * @param AuthorizationCheckerInterface $checker
  54.      * @param LoggerInterface $logger
  55.      * @param EntityManagerInterface $em
  56.      * @param String $defaultTimeZone
  57.      */
  58.     public function __construct(Session $sessionTokenStorageInterface $tokenStorageRouterInterface $routerAuthorizationCheckerInterface $checkerLoggerInterface $loggerEntityManagerInterface $emString $defaultTimeZone)
  59.     {
  60.         $this->session $session;
  61.         $this->router $router;
  62.         $this->checker $checker;
  63.         $this->tokenStorage $tokenStorage;
  64.         $this->logger $logger;
  65.         $this->em $em;
  66.         $this->defaultTimeZone $defaultTimeZone;
  67.     }
  68.     /**
  69.      * @param RequestEvent $event
  70.      */
  71.     public function onKernelRequest(RequestEvent $event): void
  72.     {
  73.         $nextMessagenull;
  74. //        $this->logger->error("max_idle_time: ".$this->maxIdleTime);
  75. //        $this->logger->error("master: ".$event->isMasterRequest());
  76. //        $this->logger->error("anonymous: ".$this->isAuthenticatedAnonymously());
  77.         if (!$event->isMainRequest()
  78.             || $this->isAuthenticatedAnonymously()) {
  79. //            $this->logger->error("return");
  80.             return;
  81.         }
  82. //        $this->logger->error("now: " . $event->getRequest()->get("_route"));
  83.         //if current page is the target page (show popup) than return - if no return than loop!!!!!!!
  84.         if (
  85.             $event->getRequest()->get("_route") == "popupmessage_user_show"
  86.             ||
  87.             $event->getRequest()->get("_route") == "popupmessage_user_save"
  88.             ||
  89.             $event->getRequest()->get("_route") == "popupmessage_user_detail"
  90.             ||
  91.             $event->getRequest()->get("_route") == "popupmessage_user_detail_skip"
  92.         ) {
  93.             return;
  94.         }
  95.         /** @var User $user */
  96.         $user $this->tokenStorage->getToken()->getUser();
  97.         if ($this->checker->isGranted('ROLE_BACKEND_USER')) {
  98.             return;
  99.         }
  100.         // set time zone
  101.         if (!defined('_USER_TIMEZONE_')) {
  102.             if ($user->getTimezone()) {
  103.                 define('_USER_TIMEZONE_'$user->getTimezone());
  104.             } else {
  105.                 define('_USER_TIMEZONE_'$this->defaultTimeZone);
  106.             }
  107.         }
  108.         date_default_timezone_set(_USER_TIMEZONE_);
  109. //        $this->logger->error("USER : " . $user->getId());
  110. //        $this->logger->error("TIME : " .$date->format("Y-m-d H:i:s"));
  111. //        return;
  112.         //check nextMessage exists
  113.         //if not exists return!!!
  114.         $nextMessage $this->em->getRepository(PopUpMessage::class)->getNext($user);
  115.         if ($nextMessage == null || empty($nextMessage)) {
  116.             if (
  117.                 $user->getLoginCounter() == &&
  118.                 $event->getRequest()->get("_route") != "frontend_plan_change" &&
  119.                 isset($_COOKIE['plan_register'])
  120.             ) {
  121.                 $planId $_COOKIE['plan_register'];
  122.                 unset($_COOKIE['plan_register']);
  123.                 setcookie('plan_register'''time() - 3600'/');
  124.                 $event->setResponse(new RedirectResponse($this->router->generate('frontend_plan_change', ['id' => $planId])));
  125.             }
  126. //            //user logged in more then 3 times
  127. //            $skipUserDetail = $this->session->get('skipUserDetail');
  128. //            if (
  129. //                (is_null($skipUserDetail) || $skipUserDetail == false)
  130. //            &&
  131. //                $user->getLoginCounter() >= 3
  132. //            ) {
  133. //                if (
  134. //                    (
  135. //                        is_null($user->getCustomerDetail())
  136. //                    )
  137. //                    ||
  138. //                    (
  139. //                        (is_null($user->getCustomerDetail()->getCompanyName()) || strlen($user->getCustomerDetail()->getCompanyName()) == 0) ||
  140. //                        (is_null($user->getCustomerDetail()->getVatNumber()) || strlen($user->getCustomerDetail()->getVatNumber()) == 0) ||
  141. //                        (is_null($user->getCustomerDetail()->getStreet()) || strlen($user->getCustomerDetail()->getStreet()) == 0) ||
  142. //                        (is_null($user->getCustomerDetail()->getCity()) || strlen($user->getCustomerDetail()->getCity()) == 0) ||
  143. //                        (is_null($user->getCustomerDetail()->getCountry()) || strlen($user->getCustomerDetail()->getCountry()) == 0) ||
  144. //                        (is_null($user->getCustomerDetail()->getState()) || strlen($user->getCustomerDetail()->getState()) == 0) ||
  145. //                        (is_null($user->getCustomerDetail()->getZipCode()) || strlen($user->getCustomerDetail()->getZipCode()) == 0)
  146. //                    )
  147. //                ) {
  148. //                    $event->setResponse(new RedirectResponse($this->router->generate('popupmessage_user_detail')));
  149. //                }
  150. //            }
  151.             return;
  152.         }
  153.         //nextMessage exists - redirect to show!
  154.         $event->setResponse(new RedirectResponse($this->router->generate('popupmessage_user_show')));
  155.     }
  156.     /**
  157.      * @return bool
  158.      */
  159.     private function isAuthenticatedAnonymously(): bool
  160.     {
  161. //        dump($this->tokenStorage->getToken());
  162. //        die;
  163. //        $this->logger->error(serialize($this->tokenStorage->getToken()));
  164. //        $this->logger->error(is_a($this->tokenStorage->getToken(), AnonymousToken::class));
  165.         return !$this->tokenStorage->getToken()
  166.             ||
  167.             is_a($this->tokenStorage->getToken(), AnonymousToken::class)
  168.             ||
  169.             is_a($this->tokenStorage->getToken(), TwoFactorToken::class)
  170.             //!$this->checker->isGranted(AuthenticatedVoter::IS_AUTHENTICATED_FULLY)
  171.             ;
  172.     }
  173. }