<?php
namespace Czech\EventListener;
use App\Entity\Central\User\User;
use App\Entity\Client\Store\Store;
use App\Service\AppManager;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
class StoreListener
{
private TokenStorageInterface $tokenStorage;
private AppManager $appManager;
public function __construct(AppManager $appManager, TokenStorageInterface $tokenStorage, RouterInterface $router)
{
$this->router = $router;
$this->tokenStorage = $tokenStorage;
$this->appManager = $appManager;
}
public function redirect(RequestEvent $event)
{
$token = $this->tokenStorage->getToken();
if (!$token instanceof UsernamePasswordToken) {
return;
};
$user = $token->getUser();
if (!$user instanceof User) {
return;
};
$stores = $this->appManager->getRepository(Store::class)->findAll();
$route = 'store_create';
if (count($stores) === 0 && $route != $event->getRequest()->get('_route')) {
$url = $this->router->generate($route);
$response = new RedirectResponse($url);
$event->setResponse($response);
};
}
}