src/EventListener/RoutingListener.php line 72

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 $entityManagerTopNavbar $topNavBarLtsUtils $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.         $this->companyId $this->container->getParameter('default_company_id');
  58.     }
  59.     /**
  60.      * Routing Listener event
  61.      * @param RequestEvent $event
  62.      */
  63.     public function onKernelRequest(RequestEvent $event)
  64.     {
  65.         $user $this->security->getUser();
  66.         // Set default data
  67.         $this->setDefaultParams();
  68.         // Set UTC timezone
  69.         $this->setTimeZone();
  70.         if ($user) {
  71.             $this->setUserData($user);
  72.             $this->checkForPlanExpiry($event);
  73.             $this->setTwigVariables();
  74.             $this->setCompanyDetails();
  75.             // Set company details
  76.             $this->translator->setLocale($this->parameters['lang']);
  77.             // Set container variables
  78.             $this->container->set('contact'$this);
  79.             // Set Top navigation details
  80.             $this->setTopNavLinks($event$user);
  81.             // Set Demo tour details
  82.             $this->setDemoTourData();
  83.             // some logic to determine the $locale
  84.             // $request->setLocale('Asia/Kolkata');
  85.             $this->saveLastActiveTime($event);  # last activity time store
  86.         }
  87.     }
  88.     /**
  89.      * This function is to get contact data from contact object
  90.      * @param string $key
  91.      * @return string
  92.      */
  93.     public function get($key)
  94.     {
  95.         return $this->parameters[$key];
  96.     }
  97.     /**
  98.      * Method setDefaultParams
  99.      * This function is to set default contact data from contact object
  100.      * @return void
  101.      */
  102.     public function setDefaultParams()
  103.     {
  104.         $this->parameters['id'] = '';
  105.         $this->parameters['userId'] = '';
  106.         $this->parameters['email'] = '';
  107.         $this->parameters['firstName'] = '';
  108.         $this->parameters['surName'] = '';
  109.         $this->parameters['fullName'] = '';
  110.         $this->parameters['companyName'] = '';
  111.         $this->parameters['roles'] = '';
  112.         $this->parameters['isMainAdmin'] = '';
  113.         $this->parameters['profilePic'] = '';
  114.         $this->parameters['defaultDateFormat'] = 'd-m-Y h:i:a';
  115.         $this->parameters['defaultSystemLang'] = 'en';
  116.         $this->parameters['planExpireDate'] = NULL;
  117.         $this->parameters['plan'] = '';
  118.         $this->parameters['account_status'] = 'active';
  119.     }
  120.     /**
  121.      * This function is to set contact details in contact object
  122.      * @param object $user
  123.      */
  124.     public function setUserData($user)
  125.     {
  126.         $userDetails $this->em->getRepository(UserProfile::class)->getUserFullData($user->getId());
  127.         if ($userDetails) {
  128.             $this->parameters['id'] = $userDetails['id'];
  129.             $this->parameters['userId'] = $userDetails['id'];
  130.             $this->parameters['firstName'] = $userDetails['firstName'];
  131.             $this->parameters['email'] = $userDetails['email'];
  132.             $this->parameters['surName'] = $userDetails['lastName'];
  133.             $this->parameters['userProfileImage'] = $userDetails['userProfileImage'];
  134.             $this->parameters['userProfileImageUrl'] = !empty($userDetails['userProfileImage']) ? $this->ltsUtils->getUploadPath('profile_pic'''$userDetails['userProfileImage']) : '';
  135.             $this->parameters['fullName'] = $userDetails['fullName'];
  136.             $this->parameters['companyName'] = $userDetails['companyTitle'];
  137.             $this->parameters['roles'] = $user->getRoles();
  138.             $this->parameters['isMainAdmin'] = $user->isMainAdmin();
  139.             $this->parameters['isSuperAdmin'] = $user->isSuperAdmin();
  140.             $this->parameters['companyId'] = $this->companyId $userDetails['companyId'];
  141.             $this->parameters['encodeCompanyId'] = base64_encode($userDetails['companyId']);
  142.             $this->parameters['userPrivilegeRoles'] = $userDetails['userPrivilegeRoles'];
  143.             $this->parameters['userType'] = $userDetails['userType'];
  144.             $this->parameters['ltsLogo'] = 'lts.png';
  145.             $this->parameters['companyImageUrl'] = !empty($userDetails['companyImage']) ? $this->ltsUtils->getUploadPath('company_logo'$this->parameters['encodeCompanyId'], $userDetails['companyImage']) : '';
  146.             $this->parameters['defaultFormId'] = $userDetails['defaultFormId'];
  147.             $this->parameters['planExpireDate'] = $userDetails['planExpireDate'];
  148.             $this->parameters['plan'] = $userDetails['plan'];
  149.             $this->parameters['refId'] = $userDetails['refId'];
  150.             $this->parameters['hasDraftCards'] = $userDetails['hasDraftCards'];
  151.         }
  152.     }
  153.     /**
  154.      * Set Time zone
  155.      */
  156.     public function setTimeZone()
  157.     {
  158.         date_default_timezone_set('UTC');
  159.     }
  160.     /**
  161.      * 
  162.      * @param type $event
  163.      * @param type $user
  164.      */
  165.     private function setTopNavLinks($event$user)
  166.     {
  167.         $request $event->getRequest();
  168.         $resArray $this->topNavbar->getData($request$user);
  169.         if ($resArray) {
  170.             $this->container->get('twig')->addGlobal('topnav_data'$resArray['topnavData']);
  171.             $this->container->get('twig')->addGlobal('pagetitle_data'$resArray['pageTitleBlock']);
  172.         }
  173.     }
  174.     /**
  175.      * 
  176.      */
  177.     private function setDemoTourData()
  178.     {
  179.         $this->container->get('twig')->addGlobal('demo_tour_data'$this->ltsUtils->getDemoTourArray());
  180.     }
  181.     /**
  182.      * This function is to set contact details in twig object
  183.      */
  184.     private function setTwigVariables()
  185.     {
  186.         $this->container->get('twig')->addGlobal('fr_contact'$this->parameters);
  187.         $this->container->get('twig')->addGlobal('ltApp'$this->parameters);
  188.     }
  189.     /**
  190.      * This function is to set contact details in twig object
  191.      */
  192.     private function setCompanyDetails()
  193.     {
  194.         $this->parameters['defaultDateFormat'] = 'd-m-Y h:i:a';
  195.         $this->parameters['defaultDate'] = 'd-m-Y';
  196.         $this->parameters['defaultTime'] = 'h:i:a';
  197.         $this->parameters['defaultSystemLang'] = 'en';
  198.         $this->parameters['defaultTimezone'] = 'UTC';
  199.         $companyDetails $this->em->getRepository(Terminology::class)->getCompanyDetails($this->companyId);
  200.         $companyDetails['timezone'] = !empty($companyDetails['timezone']) ? $companyDetails['timezone'] : '';
  201.         $this->parameters['lang'] = $companyDetails && !empty($companyDetails['systemLanguage']) ? $companyDetails['systemLanguage'] : 'en';
  202.         $this->parameters['timezone'] = isset($companyDetails['timezone']) ? $companyDetails['timezone'] :  '';
  203.         $this->parameters['userRefidPrefix'] = !empty($companyDetails['userRefidPrefix']) ? $companyDetails['userRefidPrefix'] : '';
  204.         $this->parameters['cardRefidPrefix'] = !empty($companyDetails['hasCardRefId']) && !empty($companyDetails['cardRefidPrefix']) ? $companyDetails['cardRefidPrefix'] : '';
  205.         $this->parameters['cardRefidStartsFrom'] = !empty($companyDetails['cardRefidStartsFrom']) ? $companyDetails['cardRefidStartsFrom'] : '1';
  206.         $this->parameters['dataTimeFormat'] = $this->ltsUtils->getDateTimeFormat(isset($companyDetails['datetimeFormat']) ? $companyDetails['datetimeFormat'] : null);
  207.         $this->parameters['dataFormat'] = $this->ltsUtils->getDateFormat(isset($companyDetails['dateFormat']) ? $companyDetails['dateFormat'] : null);
  208.         $this->parameters['timeFormat'] = $this->ltsUtils->getTimeFormat(isset($companyDetails['timeFormat']) ? $companyDetails['timeFormat'] : null);
  209.         $this->parameters['companyTerminology'] = $this->ltsUtils->getTerminologyDetails($this->companyId);
  210.         # company plans limit setting
  211.         $this->parameters['noOfUsers'] = $companyDetails && !empty($companyDetails['noOfUsers']) ? $companyDetails['noOfUsers'] : '0';
  212.         $this->parameters['noOfUserTypes'] = $companyDetails && !empty($companyDetails['noOfUserTypes']) ? $companyDetails['noOfUserTypes'] : '0';
  213.         $this->parameters['noOfBoards'] = $companyDetails && !empty($companyDetails['noOfBoards']) ? $companyDetails['noOfBoards'] : '0';
  214.         $this->parameters['noOfColumns'] = $companyDetails && !empty($companyDetails['noOfColumns']) ? $companyDetails['noOfColumns'] : '0';
  215.         $this->parameters['noOfRows'] = $companyDetails && !empty($companyDetails['noOfRows']) ? $companyDetails['noOfRows'] : '0';
  216.         $this->parameters['noOfCardLayouts'] = $companyDetails && !empty($companyDetails['noOfCardLayouts']) ? $companyDetails['noOfCardLayouts'] : '0';
  217.         $this->parameters['noOfCardLayoutFields'] = $companyDetails && !empty($companyDetails['noOfCardLayoutFields']) ? $companyDetails['noOfCardLayoutFields'] : '0';
  218.         $this->parameters['hasExcelUpload'] = $companyDetails && !empty($companyDetails['hasExcelUpload']) ? $companyDetails['hasExcelUpload'] : false;
  219.         $this->parameters['hasMultipleLayouts'] = $companyDetails && !empty($companyDetails['hasMultipleLayouts']) ? $companyDetails['hasMultipleLayouts'] : false;
  220.         $this->parameters['plan'] = $companyDetails && !empty($companyDetails['plan']) ? $companyDetails['plan'] : '';
  221.         $this->parameters['hasCardTimer'] = isset($companyDetails['hasCardTimer']) ? $companyDetails['hasCardTimer'] : false;
  222.         $this->parameters['hasDraftCards'] = isset($companyDetails['hasDraftCards']) ? $companyDetails['hasDraftCards'] : false;
  223.         $this->parameters['hasCardRefId'] = isset($companyDetails['hasCardRefId']) ? $companyDetails['hasCardRefId'] : false;
  224.         $this->parameters['hasSkill'] = isset($companyDetails['hasSkill']) ? $companyDetails['hasSkill'] : false;
  225.         $this->parameters['hasAutoRefresh'] = isset($companyDetails['hasAutoRefresh']) ? $companyDetails['hasAutoRefresh'] : false;
  226.         $this->parameters['hasGenerateReport'] = isset($companyDetails['hasGenerateReport']) ? $companyDetails['hasGenerateReport'] : false;
  227.         $this->parameters['hasTcardLayout'] = isset($companyDetails['hasTcardLayout']) ? $companyDetails['hasTcardLayout'] : false;
  228.         $this->parameters['enableAssignUserToRow'] = isset($companyDetails['enableAssignUserToRow']) ? $companyDetails['enableAssignUserToRow'] : false;
  229.         $this->parameters['enableAssignUserToColumn'] = isset($companyDetails['enableAssignUserToColumn']) ? $companyDetails['enableAssignUserToColumn'] : false;
  230.         # inviduvidal company limitation
  231.         $this->parameters['c1'] = $companyDetails && !empty($companyDetails['c1']) ? $companyDetails['c1'] : 0;
  232.         $this->container->get('twig')->addGlobal('company'$companyDetails);
  233.     }
  234.     /**
  235.      * This function is to save last active time for each login session.
  236.      */
  237.     private function saveLastActiveTime($event)
  238.     {
  239.         $request $event->getRequest();
  240.         $params['routeName'] = $request->get('_route');
  241.         $params['loginUserId'] = $this->get('userId');
  242.         $params['company_id'] = $this->get('companyId');
  243.         if (isset($params['loginUserId']) && $this->em->isOpen()) {
  244.             $this->em->getRepository(LoginSessions::class)->update($params);
  245.         }
  246.     }
  247.     /**
  248.      * 
  249.      * @param type $event
  250.      */
  251.     private function checkForPlanExpiry($event)
  252.     {
  253.         if (!empty($this->parameters['planExpireDate']) && !$this->parameters['isSuperAdmin']) {
  254.             if ($this->parameters['planExpireDate']->format('Y-m-d') <= date('Y-m-d') && $this->parameters['plan'] == 'free_trail') {
  255.                 $request $event->getRequest();
  256.                 $requestedUrl $request->getRequestUri();
  257.                 // If public demo accounts after expiring only this url will be allowed.
  258.                 $allowedURLs = ['/settings/accounts''/settings/get-account-settings-data''/settings/get-terminology-data''/settings/logo_upload''/settings/save-account-settings-data''/settings/save-terminology-data'];
  259.                 if (!in_array($requestedUrl$allowedURLs)) {
  260.                     $redirectUrl $this->router->generate('account-settings');
  261.                     $response = new RedirectResponse($redirectUrl);
  262.                     $event->setResponse($response);
  263.                 }
  264.                 $this->parameters['account_status'] = 'in-active';
  265.             }
  266.         }
  267.     }
  268. }