src/EventSubscriber/ControllerListenerSubscriber.php line 38
<?php
namespace App\EventSubscriber;
use App\Controller\App\AppController;
use App\Controller\App\BuyController;
use App\Controller\App\CompanyController;
use App\Controller\App\OrderController;
use Twig\Environment;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class ControllerListenerSubscriber implements EventSubscriberInterface
{
/**
* @var \Twig\Environment
*/
private $twig;
/**
* @var \Doctrine\ORM\EntityManager
*/
private $manager;
private $tokenStorage;
public function __construct(Environment $twig, EntityManagerInterface $manager, TokenStorageInterface $tokenStorage)
{
$this->twig = $twig;
$this->manager = $manager;
$this->tokenStorage = $tokenStorage;
}
public function onKernelController(ControllerEvent $event)
{
if (!$event->isMainRequest())
return;
if (!$token = $this->tokenStorage->getToken())
return;
// if (!$token->isAuthenticated()) return;
if (!$user = $token->getUser())
return;
/** @var $user App\Entity\User */
$user = $token->getUser();
$company = $user->getCompany();
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
if (!$company) {
if (!$this->isCompanyController($controller)) {
$event->setController(
function () {
return new RedirectResponse('/app/company/new/company', Response::HTTP_PERMANENTLY_REDIRECT);
}
);
}
} else {
if (!$company->isTrial() && !$company->hasActivePlan()) {
if (!$this->isAllowedController($controller)) {
$event->setController(
function () {
return new RedirectResponse('/app/buy/current/license', Response::HTTP_PERMANENTLY_REDIRECT);
}
);
}
}
}
// $cockie = $this->manager->getRepository(Cockie::class)->findAll()[0];
$this->twig->addGlobal('company', $company);
// $this->twig->addGlobal( 'cockie', $cockie );
}
public static function getSubscribedEvents()
{
return [
'kernel.controller' => 'onKernelController',
];
}
private function isCompanyController(array $controller)
{
return $controller[0] instanceof CompanyController ? true : false;
}
private function isAllowedController(array $controller)
{
return ($controller[0] instanceof OrderController ||
$controller[0] instanceof BuyController ||
$controller[0] instanceof AppController ||
$controller[0] instanceof CompanyController) ? true : false;
}
}