src/Repository/UserRepository.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\User;
  4. use App\Model\UserFilter;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\ORM\Query\Expr;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  9. use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
  10. use Symfony\Component\Security\Core\User\UserInterface;
  11. /**
  12.  * @method User|null find($id, $lockMode = null, $lockVersion = null)
  13.  * @method User|null findOneBy(array $criteria, array $orderBy = null)
  14.  * @method User[]    findAll()
  15.  * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  16.  *
  17.  * @extends ServiceEntityRepository<User>
  18.  */
  19. class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface
  20. {
  21.     public function __construct(ManagerRegistry $registry)
  22.     {
  23.         parent::__construct($registryUser::class);
  24.     }
  25.     /**
  26.      * Used to upgrade (rehash) the user's password automatically over time.
  27.      */
  28.     public function upgradePassword(UserInterface $userstring $newEncodedPassword): void
  29.     {
  30.         if (!$user instanceof User) {
  31.             throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.'\get_class($user)));
  32.         }
  33.         $user->setPassword($newEncodedPassword);
  34.         $this->_em->persist($user);
  35.         $this->_em->flush();
  36.     }
  37.     /**
  38.      * @return array<User>|null
  39.      */
  40.     public function findByFilter(UserFilter $filter): ?array
  41.     {
  42.         $queryBuilder $this->createQueryBuilder('user');
  43.         if (null !== $filter->getShift()) {
  44.             $queryBuilder->andWhere('user.shift = :shift')->setParameter(':shift'$filter->getShift());
  45.         }
  46.         if (null !== $filter->getDepartment()) {
  47.             $queryBuilder->andWhere('user.department = :department')->setParameter(':department'$filter->getDepartment());
  48.         }
  49.         if (count($filter->getCountries()) > 0) {
  50.             $queryBuilder->innerJoin('user.countries''countries'Expr\Join::WITH)
  51.                 ->andWhere('countries in (:c)')
  52.             ->setParameter(':c'$filter->getCountries());
  53.         }
  54.         $roles $filter->getRoles();
  55.         if (count($roles) > 0) {
  56.             foreach ($roles as $role) {
  57.                 $queryBuilder->andWhere("JSONB_CONTAINS(user.roles, '[\"$role\"]') = true");
  58.             }
  59.         }
  60.         return $queryBuilder->getQuery()->getResult();
  61.     }
  62. }