src/Czech/EventListener/ContextListener.php line 29

Open in your IDE?
  1. <?php
  2. namespace Czech\EventListener;
  3. use App\Entity\Central\Client\Client;
  4. use App\Entity\Central\User\User;
  5. use App\Entity\Client\Store\Store;
  6. use App\Service\AppManager;
  7. use App\Utils\StringUtils;
  8. use Czech\Service\SimulateManager;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  12. class ContextListener
  13. {
  14.     private TokenStorageInterface $tokenStorage;
  15.     private AppManager $appManager;
  16.     private SimulateManager $simulateManager;
  17.     public function __construct(AppManager $appManagerTokenStorageInterface $tokenStorageSimulateManager $simulateManager)
  18.     {
  19.         $this->tokenStorage $tokenStorage;
  20.         $this->appManager $appManager;
  21.         $this->simulateManager $simulateManager;
  22.     }
  23.     public function rebuildMetadata(RequestEvent $event)
  24.     {
  25.         $token $this->tokenStorage->getToken();
  26.         if (!$token instanceof UsernamePasswordToken) {
  27.             return;
  28.         }
  29.         $user $token->getUser();
  30.         if (!$user instanceof User) {
  31.             return;
  32.         }
  33.         $storeID $this->simulateManager->getStoreId();
  34.         $client $user->getClient();
  35.         if (!$client instanceof Client) {
  36.             return;
  37.         }
  38.         $this->appManager->setClient($client);
  39.         if (!StringUtils::isNullOrEmpty($storeID)) {
  40.             $store $this->appManager->getRepository(Store::class)->find($storeID);
  41.         } else {
  42.             $store $this->appManager->getRepository(Store::class)->findOneBy([], ['name' => 'ASC']);
  43.         }
  44.         if ($store instanceof Store) {
  45.             $this->appManager->setStore($store);
  46.         }
  47.     }
  48. }