<?php
namespace Czech\EventListener;
use App\Entity\Central\Client\Client;
use App\Entity\Central\User\User;
use App\Entity\Client\Store\Store;
use App\Service\AppManager;
use App\Utils\StringUtils;
use Czech\Service\SimulateManager;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
class ContextListener
{
private TokenStorageInterface $tokenStorage;
private AppManager $appManager;
private SimulateManager $simulateManager;
public function __construct(AppManager $appManager, TokenStorageInterface $tokenStorage, SimulateManager $simulateManager)
{
$this->tokenStorage = $tokenStorage;
$this->appManager = $appManager;
$this->simulateManager = $simulateManager;
}
public function rebuildMetadata(RequestEvent $event)
{
$token = $this->tokenStorage->getToken();
if (!$token instanceof UsernamePasswordToken) {
return;
}
$user = $token->getUser();
if (!$user instanceof User) {
return;
}
$storeID = $this->simulateManager->getStoreId();
$client = $user->getClient();
if (!$client instanceof Client) {
return;
}
$this->appManager->setClient($client);
if (!StringUtils::isNullOrEmpty($storeID)) {
$store = $this->appManager->getRepository(Store::class)->find($storeID);
} else {
$store = $this->appManager->getRepository(Store::class)->findOneBy([], ['name' => 'ASC']);
}
if ($store instanceof Store) {
$this->appManager->setStore($store);
}
}
}