src/Knitink/UniverseBundle/Listener/ControllerListener.php line 34

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the Knitink Project package.
  4.  *
  5.  * Created by Globunet Soluciones Tecnologicas, SL. on 20/04/21. <info@globunet.com>
  6.  * Copyright (c) 2016 Knitink Technologies, SL. All rights reserved.
  7.  */
  8. namespace Knitink\UniverseBundle\Listener;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Knitink\ManagementBundle\Domain\ClientManager;
  11. use Knitink\ManagementBundle\Entity\Client;
  12. use Knitink\ManagementBundle\Entity\LicenseUniverse;
  13. use Knitink\UniverseBundle\Controller\UniverseController;
  14. use Knitink\UniverseBundle\Entity\Team;
  15. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  18. use Symfony\Component\HttpKernel\KernelEvents;
  19. class ControllerListener implements EventSubscriberInterface
  20. {
  21.     private $em;
  22.     private $clientManager;
  23.     public function __construct(EntityManagerInterface $emClientManager $clientManager)
  24.     {
  25.         $this->em $em;
  26.         $this->clientManager $clientManager;
  27.     }
  28.     public function onKernelController(ControllerEvent $event)
  29.     {
  30.         $controller $event->getController();
  31.         //if()
  32.         // when a controller class defines multiple action methods, the controller
  33.         // is returned as [$controllerInstance, 'methodName']
  34.         if (is_array($controller)) {
  35.             $controller $controller[0];
  36.         }
  37.         if ($controller instanceof UniverseController) {
  38.             $request $event->getRequest();
  39.             $session $request->getSession();
  40.             $routes = [];
  41.             $route $request->attributes->get('_route');
  42.             $routes[] = "knk_univ_clients";
  43.             $routes[] = "knk_univ_group";
  44.             $routes[] = "knk_univ_group_edit";
  45.             $routes[] = "knk_univ_group_create";
  46.             // Rutas que no son necearias que tenga un base de datos asociada en sesion
  47.             if(!in_array($route$routes)){
  48.                 if($route == 'knk_univ_state_logging_chart'){
  49.                     $clientOid $request->query->get('client'null);
  50.                     $client $session->get('client');
  51.                     if($clientOid != null && ($client == null || $client->getOid() != $clientOid)){
  52.                         $clientNew $this->em->getRepository(Client::class)->findOneBy(["oid"=>$clientOid]);
  53.                         if($clientNew != null){
  54.                             $session->set('database'$clientNew->getDatabase());
  55.                         }
  56.                     }
  57.                 }elseif($route == 'knk_univ_season_logging_public_report' || $route == 'knk_univ_season_logging_public_report'){
  58.                     $token $request->query->get('token');
  59.                     $client $this->clientManager->searchOneBy(["token"=>$token]);
  60.                     $user null;
  61.                     if($client){
  62.                         $session->set('database'$client->getDatabase());
  63.                         $controller->login($client->getTokenUser(), $request);
  64.                     }
  65.                 }
  66.                 $em $controller->dinamicDatabase();
  67.             }
  68.             $routes[] = "knk_univ_user";
  69.             $routes[] = "knk_univ_user_edit";
  70.             $routes[] = "knk_univ_user_observable";
  71.             $routes[] = "knk_univ_user_permission";
  72.             //$routes[] = "knk_univ_group_user";
  73.             if($route != null && !in_array($route$routes))
  74.             {
  75.                 $teamId $request->attributes->get("teamId");
  76.                 if($teamId != null){
  77.                     $teamIdOld $session->get("teamId");
  78.                     if($teamId != $teamIdOld){
  79.                         $repository $em->getRepository(Team::class);
  80.                         $team $repository->find($teamId);
  81.                         if($team != null){
  82.                             $gateway $team->getGateway();
  83.                             $session->set("modelVersion"$gateway->getModelVersion());
  84.                             $session->set("teamId"$teamId);
  85.                             //$session->set("teamRemote", $teamId);
  86.                             // Comprobamos si está licenciado o no
  87.                             $licenseUniverse $this->em->getRepository(LicenseUniverse::class)->searchOneBy(["team.oid" => $team->getRemote()]);
  88.                             if($licenseUniverse != null){
  89.                                 $active $licenseUniverse->getActive();
  90.                                 $session->set("license"$active);
  91.                                 // Añadir tipo de licencia y backup date
  92.                                 if($active){
  93.                                     $session->set("licenseType"$licenseUniverse->getType());
  94.                                     $session->set("licenseBackupType"$licenseUniverse->getBackupType());
  95.                                     $session->set("licenseBackupYears"$licenseUniverse->getBackupYears());
  96.                                 }
  97.                             }
  98.                         }
  99.                     }
  100.                 }
  101.                 if ($route == "knk_univ_home" ) {
  102.                     $session->set("teamId"null);
  103.                 }
  104.                 // Comprobamos si tenemos licencia activa para poder acceder a los datos del Team
  105.                 $license $session->get("license"true);
  106.                 if ($route != "knk_univ_home" && !$license) {
  107.                     throw new AccessDeniedHttpException('This license has expired!');
  108.                 }
  109.             }
  110.         }
  111.     }
  112.     public static function getSubscribedEvents()
  113.     {
  114.         return [
  115.             KernelEvents::CONTROLLER => 'onKernelController',
  116.         ];
  117.     }
  118. }