src/Services/Context.php line 74

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Quentin CHATELAIN (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace App\Services;
  9. use App\Repository\UserContextRepository;
  10. use App\Repository\ContextRepository;
  11. use App\Entity\Context as ContextEntity;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. class Context
  15. {
  16.     /**
  17.      * @var ObjectSerialize
  18.      */
  19.     private ObjectSerialize $objectSerialize;
  20.     /**
  21.      * @var RequestStack
  22.      */
  23.     private RequestStack $requestStack;
  24.     /**
  25.      * @var ContextRepository
  26.      */
  27.     private ContextRepository $contextRepo;
  28.     /**
  29.      * @var TokenStorageInterface
  30.      */
  31.     private TokenStorageInterface $tokenStorage;
  32.     /**
  33.      * @var UserContextRepository
  34.      */
  35.     private UserContextRepository $userContextRepo;
  36.     /**
  37.      * @param ObjectSerialize $objectSerialize
  38.      * @param ContextRepository $contextRepo
  39.      * @param RequestStack $requestStack
  40.      * @param TokenStorageInterface $tokenStorage
  41.      * @param UserContextRepository $userContextRepo
  42.      */
  43.     public function __construct(
  44.         ObjectSerialize $objectSerialize,
  45.         ContextRepository $contextRepo,
  46.         RequestStack $requestStack,
  47.         TokenStorageInterface $tokenStorage,
  48.         UserContextRepository $userContextRepo
  49.     ) {
  50.         $this->objectSerialize $objectSerialize;
  51.         $this->contextRepo $contextRepo;
  52.         $this->requestStack $requestStack;
  53.         $this->tokenStorage $tokenStorage;
  54.         $this->userContextRepo $userContextRepo;
  55.     }
  56.     /**
  57.      * @return ContextEntity|null
  58.      */
  59.     public function getActual(): ?ContextEntity
  60.     {
  61.         $contextActual null;
  62.         if ($this->requestStack->getMainRequest()) {
  63.             $AppContextSerialized $this->requestStack->getSession()->get('_app_context');
  64.             if ($AppContextSerialized) {
  65.                 $context $this->objectSerialize->decode($AppContextSerialized);
  66.                 $contextActual $this->contextRepo->find($context->getId());
  67.             }
  68.         }
  69.         return $contextActual ?: null;
  70.     }
  71.     /**
  72.      * @return ContextEntity
  73.      */
  74.     public function getActualOrDefault(): ContextEntity
  75.     {
  76.         return $this->getActual() ?: $this->contextRepo->getDefault();
  77.     }
  78.     /**
  79.      * @return array
  80.      */
  81.     public function getUserContexts(): array
  82.     {
  83.         $userActive $this->tokenStorage->getToken()->getUser();
  84.         $userContexts $this->userContextRepo->findBy(['user' => $userActive]);
  85.         if ($userContexts) {
  86.             $contexts = [];
  87.             foreach ($userContexts as $userContext) {
  88.                 $contexts[] = $userContext->getContext();
  89.             }
  90.         } else {
  91.             $contexts $this->contextRepo->findAll();
  92.         }
  93.         return $contexts;
  94.     }
  95.     /**
  96.      * @param ContextEntity $context
  97.      * @return void
  98.      */
  99.     public function setActual(ContextEntity $context): void
  100.     {
  101.         if ($this->requestStack->getMainRequest()) {
  102.             $this->requestStack->getSession()->set('_app_context'$this->objectSerialize->add($context));
  103.         }
  104.     }
  105. }