<?php
/**
* This file is part of the Knitink Project package.
*
* Created by Globunet Soluciones Tecnologicas, SL. on 20/04/21. <info@globunet.com>
* Copyright (c) 2016 Knitink Technologies, SL. All rights reserved.
*/
namespace Knitink\UniverseBundle\Listener;
use Doctrine\ORM\EntityManagerInterface;
use Knitink\ManagementBundle\Domain\ClientManager;
use Knitink\ManagementBundle\Entity\Client;
use Knitink\ManagementBundle\Entity\LicenseUniverse;
use Knitink\UniverseBundle\Controller\UniverseController;
use Knitink\UniverseBundle\Entity\Team;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\KernelEvents;
class ControllerListener implements EventSubscriberInterface
{
private $em;
private $clientManager;
public function __construct(EntityManagerInterface $em, ClientManager $clientManager)
{
$this->em = $em;
$this->clientManager = $clientManager;
}
public function onKernelController(ControllerEvent $event)
{
$controller = $event->getController();
//if()
// when a controller class defines multiple action methods, the controller
// is returned as [$controllerInstance, 'methodName']
if (is_array($controller)) {
$controller = $controller[0];
}
if ($controller instanceof UniverseController) {
$request = $event->getRequest();
$session = $request->getSession();
$routes = [];
$route = $request->attributes->get('_route');
$routes[] = "knk_univ_clients";
$routes[] = "knk_univ_group";
$routes[] = "knk_univ_group_edit";
$routes[] = "knk_univ_group_create";
// Rutas que no son necearias que tenga un base de datos asociada en sesion
if(!in_array($route, $routes)){
if($route == 'knk_univ_state_logging_chart'){
$clientOid = $request->query->get('client', null);
$client = $session->get('client');
if($clientOid != null && ($client == null || $client->getOid() != $clientOid)){
$clientNew = $this->em->getRepository(Client::class)->findOneBy(["oid"=>$clientOid]);
if($clientNew != null){
$session->set('database', $clientNew->getDatabase());
}
}
}elseif($route == 'knk_univ_season_logging_public_report' || $route == 'knk_univ_season_logging_public_report'){
$token = $request->query->get('token');
$client = $this->clientManager->searchOneBy(["token"=>$token]);
$user = null;
if($client){
$session->set('database', $client->getDatabase());
$controller->login($client->getTokenUser(), $request);
}
}
$em = $controller->dinamicDatabase();
}
$routes[] = "knk_univ_user";
$routes[] = "knk_univ_user_edit";
$routes[] = "knk_univ_user_observable";
$routes[] = "knk_univ_user_permission";
//$routes[] = "knk_univ_group_user";
if($route != null && !in_array($route, $routes))
{
$teamId = $request->attributes->get("teamId");
if($teamId != null){
$teamIdOld = $session->get("teamId");
if($teamId != $teamIdOld){
$repository = $em->getRepository(Team::class);
$team = $repository->find($teamId);
if($team != null){
$gateway = $team->getGateway();
$session->set("modelVersion", $gateway->getModelVersion());
$session->set("teamId", $teamId);
//$session->set("teamRemote", $teamId);
// Comprobamos si está licenciado o no
$licenseUniverse = $this->em->getRepository(LicenseUniverse::class)->searchOneBy(["team.oid" => $team->getRemote()]);
if($licenseUniverse != null){
$active = $licenseUniverse->getActive();
$session->set("license", $active);
// Añadir tipo de licencia y backup date
if($active){
$session->set("licenseType", $licenseUniverse->getType());
$session->set("licenseBackupType", $licenseUniverse->getBackupType());
$session->set("licenseBackupYears", $licenseUniverse->getBackupYears());
}
}
}
}
}
if ($route == "knk_univ_home" ) {
$session->set("teamId", null);
}
// Comprobamos si tenemos licencia activa para poder acceder a los datos del Team
$license = $session->get("license", true);
if ($route != "knk_univ_home" && !$license) {
throw new AccessDeniedHttpException('This license has expired!');
}
}
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
}