src/Repository/UserRepository.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\User;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\ORM\QueryBuilder;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  8. use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. /**
  11.  * @method User|null find($id, $lockMode = null, $lockVersion = null)
  12.  * @method User|null findOneBy(array $criteria, array $orderBy = null)
  13.  * @method User[]    findAll()
  14.  * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  15.  */
  16. class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface
  17. {
  18.     public function __construct(ManagerRegistry $registry)
  19.     {
  20.         parent::__construct($registryUser::class);
  21.     }
  22.     /**
  23.      * Used to upgrade (rehash) the user's password automatically over time.
  24.      */
  25.     public function upgradePassword(UserInterface $userstring $newEncodedPassword): void
  26.     {
  27.         if (!$user instanceof User) {
  28.             throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
  29.         }
  30.         $user->setPassword($newEncodedPassword);
  31.         $this->_em->persist($user);
  32.         $this->_em->flush();
  33.     }
  34.     public function getDatatableiTotalRecords()
  35.     {
  36.         $iTotalRecordsQuery $this
  37.             ->createQueryBuilder('u')
  38.             ->select('COUNT(1)')
  39.             ->andWhere('u.deletedAt IS NULL')
  40.             ->getQuery()
  41.             ->getSingleScalarResult();
  42.         $iTotalRecords 0;
  43.         if($iTotalRecordsQuery){
  44.             $iTotalRecords $iTotalRecordsQuery;
  45.         }
  46.         return $iTotalRecords;
  47.     }
  48.     public function getDatatableiTotalRecordsDisplay(?string $search, array $filters)
  49.     {
  50.         $iTotalDisplayRecordsQuery $this
  51.             ->createQueryBuilder('u')
  52.             ->select('COUNT(1)')
  53.             ->andWhere('u.deletedAt IS NULL')
  54.         ;
  55.         $iTotalDisplayRecordsQuery $this->applyDatatableSearch($iTotalDisplayRecordsQuery$search);
  56.         $iTotalDisplayRecordsQuery $this->applyDatatableFilters($iTotalDisplayRecordsQuery$filters);
  57.         $iTotalDisplayRecordsQuery $iTotalDisplayRecordsQuery->getQuery()->getSingleScalarResult();
  58.         $iTotalDisplayRecords 0;
  59.         if($iTotalDisplayRecordsQuery){
  60.             $iTotalDisplayRecords $iTotalDisplayRecordsQuery;
  61.         }
  62.         return $iTotalDisplayRecords;
  63.     }
  64.     public function getDatatableResults(int $startint $length, ?string $search, array $filters, ?string $orderBy, ?string $orderDir){
  65.         $query $this
  66.             ->createQueryBuilder('u')
  67.             ->andWhere('u.deletedAt IS NULL')
  68.             ->setFirstResult($start)
  69.             ->setMaxResults($length);
  70.         $query $this->applyDatatableSearch($query$search);
  71.         $query $this->applyDatatableFilters($query$filters);
  72.         $query $this->applyDatatableOrder($query$orderBy$orderDir);
  73.         return $query->getQuery()->getResult();
  74.     }
  75.     private function applyDatatableSearch(QueryBuilder $query, ?string $search)
  76.     {
  77.         if($search){
  78.             $query
  79.                 ->andWhere("u.lastname LIKE :search OR u.firstname LIKE :search OR u.email LIKE :search")
  80.                 ->setParameter("search""%$search%");
  81.         }
  82.         return $query;
  83.     }
  84.     private function applyDatatableFilters(QueryBuilder $query, array $filters)
  85.     {
  86.         foreach ($filters as $filter => $value) {
  87.             if($filter == 'roles'){
  88.                 $query
  89.                     ->andWhere("u.$filter LIKE :$filter")
  90.                     ->setParameter("$filter""%$value%");
  91.             }
  92.             else{
  93.                 $query
  94.                     ->andWhere("u.$filter = :$filter")
  95.                     ->setParameter("$filter"$value);
  96.             }
  97.         }
  98.         return $query;
  99.     }
  100.     private function applyDatatableOrder(QueryBuilder $query, ?string $orderBy, ?string $orderDir)
  101.     {
  102.         if($orderBy && $orderDir){
  103.             $query->addOrderBy("u.$orderBy""$orderDir");
  104.         }
  105.         return $query;
  106.     }
  107.     public function findOneByToken(string $token): ?User
  108.     {
  109.         return $this
  110.             ->createQueryBuilder('u')
  111.             ->andWhere('u.token_reset_password = :token')
  112.             ->setParameter('token'$token)
  113.             ->getQuery()
  114.             ->getOneOrNullResult()
  115.         ;
  116.     }
  117.     /**
  118.      * @param string $role
  119.      *
  120.      * @return User[]
  121.      */
  122.     public function findByRole(string $role)
  123.     {
  124.         return $this
  125.             ->createQueryBuilder('u')
  126.             ->andWhere('u.deletedAt IS NULL')
  127.             ->andWhere('u.roles LIKE :role')
  128.             ->setParameter('role'"%$role%")
  129.             ->getQuery()
  130.             ->getResult();
  131.     }
  132. }