src/Service/UserSeasonService.php line 61

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Company\Season;
  4. use App\Entity\Company\UserBrandRole;
  5. use App\Entity\User;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8. class UserSeasonService
  9. {
  10.     private $tokenStorage;
  11.     private $em;
  12.     public function __construct(
  13.         TokenStorageInterface $token,
  14.         EntityManagerInterface $em
  15.     ){
  16.         $this->tokenStorage $token;
  17.         $this->em           $em;
  18.     }
  19.     private function setUserRole(User $user, ?Season $season null)
  20.     {
  21.         $changed false;
  22.         if ($season) {
  23.             $changed true;
  24.             $user->setCurrentSeason($season);
  25.         } else {
  26.             $season $user->getCurrentSeason();
  27.         }
  28.         $brand $season->getBrand();
  29.         $userBrandRoles $this->em->getRepository(UserBrandRole::class)->findBy(['user' => $user'brand' => $brand]);
  30.         $roles = [];
  31.         $roles[] = 'ROLE_USER';
  32.         foreach ($userBrandRoles as $userBrandRole) {
  33.             foreach ($userBrandRole->getRoles() as $role) {
  34.                 $roles[] = $role;
  35.             }
  36.         }
  37.         if ($user->getRoles() !== $roles) {
  38.             $changed true;
  39.             $user->setRoles($roles);
  40.         }
  41.         if ($changed) {
  42.             $this->em->persist($user);
  43.             $this->em->flush();
  44.         }
  45.     }
  46.     public function getBrand(?User $user null)
  47.     {
  48.         $season $this->getCurrentDefaultSeason($user);
  49.         return $season->getBrand();
  50.     }
  51.     public function getCurrentDefaultSeason($user null): ?Season
  52.     {
  53.         $season null;
  54.         $seasonRepo $this->em->getRepository(Season::class);
  55.         $defaultSeason $seasonRepo->getDefaultSeason();
  56.         if (null !== $user  && !is_string($user)) {
  57.             $userSeason $user->getCurrentSeason();
  58.             if ($userSeason === null || $userSeason === $defaultSeason) {
  59.                 $season $seasonRepo->getCurrentDefaultSeasonByUser($userfalse);
  60.                 if (null !== $season) {
  61.                     $this->setUserRole($user$season);
  62.                 }
  63.             } else {
  64.                 $season $user->getCurrentSeason();
  65.             }
  66.         }
  67.         if (null === $season){
  68.             $season $defaultSeason;
  69.         }
  70.         return $season;
  71.     }
  72.     public function setCurrentSeason()
  73.     {
  74.         if (!empty($this->tokenStorage->getToken()) &&
  75.             !empty($this->tokenStorage->getToken()->getUser()) &&
  76.             !is_string($this->tokenStorage->getToken()->getUser()) &&
  77.             $this->tokenStorage->getToken()->getUser() instanceof User
  78.         ){
  79.             $user $this->tokenStorage->getToken()->getUser();
  80.             if (null === $user->getCurrentSeason()) {
  81.                 $season $this->getCurrentDefaultSeason($user);
  82.                 $user->setCurrentSeason($season);
  83.                 $this->em->persist($user);
  84.                 $this->em->flush();
  85.             }
  86.             $this->setUserRole($user);
  87.         }
  88.     }
  89.     public function getAllSeasonByUser($user null$superAdmin null)
  90.     {
  91.         if (null === $user || is_string($user)) {
  92.             return null;
  93.         }
  94.         if ($superAdmin) {
  95.             return $this->em->getRepository(Season::class)->findAll();
  96.         }
  97.         return $this->em->getRepository(Season::class)->getSeasonsByUser($userfalse);
  98.     }
  99.     public function setSeasonByUser(User $userSeason $season)
  100.     {
  101.         $this->setUserRole($user$season);
  102.     }
  103. }