src/EventListener/RoutingListener.php line 71

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Company;
  4. use App\Entity\LoginSessions;
  5. use App\Entity\Terminology;
  6. use App\Entity\UserProfile;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\DependencyInjection\ContainerInterface;
  9. use Symfony\Component\Security\Core\Security;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. //use App\Utils\TopNavbar;
  12. use App\Utils\LtsUtils;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use Symfony\Component\Routing\RouterInterface;
  15. use Symfony\Component\HttpFoundation\RedirectResponse;
  16. final class RoutingListener
  17. {
  18.     /**
  19.      * @var Container
  20.      */
  21.     private $container;
  22.     /**
  23.      * @var private $ltsUtils;
  24.      */
  25. //    private $topNavbar;
  26.     /**
  27.      * @var private $ltsUtils;
  28.      */
  29.     private $ltsUtils;
  30.     /**
  31.      * @var private $translator;
  32.      */
  33.     private $translator;
  34.     /**
  35.      * @var private $security;
  36.      */
  37.     private $security;
  38.     /**
  39.      * @var private $parameters;
  40.      */
  41.     private $parameters;
  42.     private $em;
  43.     /**
  44.      * Constructor
  45.      *
  46.      * @param Container $container
  47.      */
  48.     public function __construct(ContainerInterface $containerSecurity $securityEntityManagerInterface $entityManagerLtsUtils $ltsUtilsTranslatorInterface $translatorRouterInterface $router)
  49.     {
  50.         $this->container $container;
  51.         $this->security $security;
  52.         $this->em $entityManager;
  53. //        $this->topNavbar = $topNavBar;
  54.         $this->ltsUtils $ltsUtils;
  55.         $this->translator $translator;
  56.         $this->router $router;
  57.     }
  58.     /**
  59.      * Routing Listener event
  60.      * @param RequestEvent $event
  61.      */
  62.     public function onKernelRequest(RequestEvent $event)
  63.     {
  64.         $user $this->security->getUser();
  65.         // Set default data
  66.         $this->setDefaultParams();
  67.         // Set UTC timezone
  68.         $this->setTimeZone();
  69.         if ($user) {
  70.             $this->setUserData($user);
  71.             $this->translator->setLocale($this->parameters['lang']);           
  72.             // Set container variables
  73.             $this->container->set('contact'$this);
  74.         }
  75.     }
  76.     /**
  77.      * This function is to get contact data from contact object
  78.      * @param string $key
  79.      * @return string
  80.      */
  81.     public function get($key)
  82.     {
  83.         return $this->parameters[$key];
  84.     }
  85.     /**
  86.      * Method setDefaultParams
  87.      * This function is to set default contact data from contact object
  88.      * @return void
  89.      */
  90.     public function setDefaultParams()
  91.     {
  92.         $this->parameters['id'] = '';
  93.         $this->parameters['userId'] = '';
  94.         $this->parameters['email'] = '';
  95.         $this->parameters['firstName'] = '';
  96.         $this->parameters['surName'] = '';
  97.         $this->parameters['fullName'] = '';
  98.         $this->parameters['companyName'] = '';
  99.         $this->parameters['roles'] = '';
  100.         $this->parameters['isMainAdmin'] = '';
  101.         $this->parameters['profilePic'] = '';
  102.         $this->parameters['defaultDateFormat'] = 'd-m-Y h:i:a';
  103.         $this->parameters['defaultSystemLang'] = 'en-UK';
  104.         $this->parameters['planExpireDate'] = NULL;
  105.         $this->parameters['plan'] = '';
  106.         $this->parameters['account_status'] = 'active';
  107.     }
  108.     /**
  109.      * This function is to set contact details in contact object
  110.      * @param object $user
  111.      */
  112.     public function setUserData($user)
  113.     {
  114.         $userDetails $this->em->getRepository(UserProfile::class)->getUserFullData($user->getId());
  115.         if ($userDetails) {
  116.             $this->parameters['id'] = $userDetails['id'];
  117.             $this->parameters['userId'] = $userDetails['id'];
  118.             $this->parameters['firstName'] = $userDetails['firstName'];
  119.             $this->parameters['email'] = $userDetails['email'];
  120.             $this->parameters['surName'] = $userDetails['lastName'];
  121.             $this->parameters['userProfileImage'] = $userDetails['profileImage'];
  122.             $this->parameters['userProfileImageUrl'] = !empty($userDetails['profileImage']) ? $this->ltsUtils->getUploadPath('profile_pic'''$userDetails['profileImage']) : '';
  123.             $this->parameters['fullName'] = $userDetails['fullName'];
  124.             $this->parameters['lang'] = !empty($userDetails['systemLanguage']) && $userDetails['systemLanguage'] == 'en-US' $userDetails['systemLanguage'] : 'en-UK';
  125.             $this->parameters['ltsLogo'] = 'lts.png';
  126.         }
  127.     }
  128.     /**
  129.      * Set Time zone
  130.      */
  131.     public function setTimeZone()
  132.     {
  133.         date_default_timezone_set('UTC');
  134.     }
  135.     /**
  136.      * 
  137.      * @param type $event
  138.      * @param type $user
  139.      */
  140.     private function setTopNavLinks($event$user)
  141.     {
  142.         $request $event->getRequest();
  143.         $resArray $this->topNavbar->getData($request$user);
  144.         if ($resArray) {
  145.             $this->container->get('twig')->addGlobal('topnav_data'$resArray['topnavData']);
  146.             $this->container->get('twig')->addGlobal('pagetitle_data'$resArray['pageTitleBlock']);
  147.         }
  148.     }
  149.     /**
  150.      * 
  151.      */
  152.     private function setDemoTourData()
  153.     {
  154.         $this->container->get('twig')->addGlobal('demo_tour_data'$this->ltsUtils->getDemoTourArray());
  155.     }
  156.     /**
  157.      * This function is to set contact details in twig object
  158.      */
  159.     private function setTwigVariables()
  160.     {
  161.         $this->container->get('twig')->addGlobal('fr_contact'$this->parameters);
  162.         $this->container->get('twig')->addGlobal('ltApp'$this->parameters);
  163.     }
  164.     /**
  165.      * This function is to set contact details in twig object
  166.      */
  167.     private function setCompanyDetails()
  168.     {
  169.         $this->parameters['defaultDateFormat'] = 'd-m-Y h:i:a';
  170.         $this->parameters['defaultDate'] = 'd-m-Y';
  171.         $this->parameters['defaultTime'] = 'h:i:a';
  172.         $this->parameters['defaultSystemLang'] = 'en';
  173.         $this->parameters['defaultTimezone'] = 'UTC';
  174.         $companyDetails $this->em->getRepository(Terminology::class)->getCompanyDetails($this->companyId);
  175.         $companyDetails['timezone'] = !empty($companyDetails['timezone']) ? $companyDetails['timezone'] : '';
  176.         $this->parameters['lang'] = $companyDetails && !empty($companyDetails['systemLanguage']) ? $companyDetails['systemLanguage'] : 'en';
  177.         $this->parameters['timezone'] = isset($companyDetails['timezone']) ? $companyDetails['timezone'] :  '';
  178.         $this->parameters['userRefidPrefix'] = !empty($companyDetails['userRefidPrefix']) ? $companyDetails['userRefidPrefix'] : '';
  179.         $this->parameters['cardRefidPrefix'] = !empty($companyDetails['hasCardRefId']) && !empty($companyDetails['cardRefidPrefix']) ? $companyDetails['cardRefidPrefix'] : '';
  180.         $this->parameters['cardRefidStartsFrom'] = !empty($companyDetails['cardRefidStartsFrom']) ? $companyDetails['cardRefidStartsFrom'] : '1';
  181.         $this->parameters['dataTimeFormat'] = $this->ltsUtils->getDateTimeFormat(isset($companyDetails['datetimeFormat']) ? $companyDetails['datetimeFormat'] : null);
  182.         $this->parameters['dataFormat'] = $this->ltsUtils->getDateFormat(isset($companyDetails['dateFormat']) ? $companyDetails['dateFormat'] : null);
  183.         $this->parameters['timeFormat'] = $this->ltsUtils->getTimeFormat(isset($companyDetails['timeFormat']) ? $companyDetails['timeFormat'] : null);
  184.         $this->parameters['companyTerminology'] = $this->ltsUtils->getTerminologyDetails($this->companyId);
  185.         # company plans limit setting
  186.         $this->parameters['companySettings'] = $companyDetails;
  187.         //dateTime formats for twig pages
  188.         $companyDetails['allDateTimeFormat'] = $this->ltsUtils->getDateTimeFormat(isset($companyDetails['datetimeFormat']) ? $companyDetails['datetimeFormat'] : null);
  189.         $companyDetails['allDateFormat'] = $this->ltsUtils->getDateFormat(isset($companyDetails['dateFormat']) ? $companyDetails['dateFormat'] : null);
  190.         $companyDetails['allTimeFormat'] = $this->ltsUtils->getTimeFormat(isset($companyDetails['timeFormat']) ? $companyDetails['timeFormat'] : null);
  191.         # inviduvidal company limitation
  192.         $this->parameters['c1'] = $companyDetails && !empty($companyDetails['c1']) ? $companyDetails['c1'] : 0;
  193.         $this->container->get('twig')->addGlobal('company'$companyDetails);
  194.     }
  195.     /**
  196.      * This function is to save last active time for each login session.
  197.      */
  198.     private function saveLastActiveTime($event)
  199.     {
  200.         $request $event->getRequest();
  201.         $params['routeName'] = $request->get('_route');
  202.         $params['loginUserId'] = $this->get('userId');
  203.         $params['company_id'] = $this->get('companyId');
  204.         if (isset($params['loginUserId']) && $this->em->isOpen()) {
  205.             $this->em->getRepository(LoginSessions::class)->update($params);
  206.         }
  207.     }
  208.     /**
  209.      * 
  210.      * @param type $event
  211.      */
  212.     private function checkForPlanExpiry($event)
  213.     {
  214.         if (!empty($this->parameters['planExpireDate']) && !$this->parameters['isSuperAdmin']) {
  215.             if ($this->parameters['planExpireDate']->format('Y-m-d') <= date('Y-m-d') && $this->parameters['plan'] == 'free_trail') {
  216.                 $request $event->getRequest();
  217.                 $requestedUrl $request->getRequestUri();
  218.                 // If public demo accounts after expiring only this url will be allowed.
  219.                 $allowedURLs = ['/settings/accounts''/settings/get-account-settings-data''/settings/get-terminology-data''/settings/logo_upload''/settings/save-account-settings-data''/settings/save-terminology-data'];
  220.                 if (!in_array($requestedUrl$allowedURLs)) {
  221.                     $redirectUrl $this->router->generate('account-settings');
  222.                     $response = new RedirectResponse($redirectUrl);
  223.                     $event->setResponse($response);
  224.                 }
  225.                 $this->parameters['account_status'] = 'in-active';
  226.             }
  227.         }
  228.     }
  229. }