src/Repository/UserRepository.php line 15

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\Query\Expr\Orx;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. class UserRepository extends ServiceEntityRepository
  8. {
  9.     public function __construct(ManagerRegistry $registry)
  10.     {
  11.         parent::__construct($registryUser::class);
  12.     }
  13.     public function findManyUsers($ids)
  14.     {
  15.         $qb $this->createQueryBuilder('U');
  16.         $qb->where($qb->expr()->in('U.id'$ids));
  17.         return $qb->getQuery()->getResult();
  18.     }
  19.     /**
  20.      * Find all users with roles and company
  21.      * @param $company
  22.      * @param $role
  23.      * @return array
  24.      */
  25.     public function findByRoleAndCompany($role$company)
  26.     {
  27.         return $this->createQueryBuilder('U')
  28.             ->leftJoin('U.roles''R')
  29.             ->addSelect('R')
  30.             ->where('U.company = :value')->setParameter('value'$company)
  31.             ->Where('R.name = :value')->setParameter('value'$role)
  32.             ->getQuery()
  33.             ->getResult();
  34.     }
  35.     /**
  36.      * Get all users for datatable query
  37.      */
  38.     public function getQueryUsers($roles$company$isContact null)
  39.     {
  40.         $queryBuilder $this->createQueryBuilder('u');
  41.         $query $queryBuilder
  42.             ->select('u.id')
  43.             ->addSelect('u.lastname')
  44.             ->addSelect('u.firstname')
  45.             ->addSelect('u.email')
  46.             ->addSelect('u.updatedAt')
  47.             ->addSelect('u.lastLoginAt')
  48.             ->addSelect('u.isContact as contact')
  49.             ->addSelect('r.name as role')
  50. //            ->orderBy('u.lastLoginAt','DESC')
  51.             ->leftJoin('u.roles''r')
  52.             ->where('r.name IN (:roles)')->setParameter('roles'$roles)
  53.             ->andWhere('u.company = :company')->setParameter('company'$company);
  54.         if ($isContact != null) {
  55.             $query->andWhere('u.isContact = :contact')->setParameter('contact'$isContact);
  56.         }
  57.         return $query;
  58.     }
  59.     /**
  60.      * Get all users for datatable query
  61.      */
  62.     public function getQueryUsersWithStat($roles$company$type)
  63.     {
  64.         $qb $this->createQueryBuilder('u');
  65.         $query  =
  66.             $qb->select('u.id')
  67.             ->addSelect('u.lastname')
  68.             ->addSelect('u.firstname')
  69.             ->leftJoin('u.roles''r')
  70.             ->where('r.name IN (:roles)')->setParameter('roles'$roles)
  71.             ->andWhere('u.company = :company')->setParameter('company'$company)
  72.             ->leftJoin('u.userActivities''ua')
  73.             ->leftJoin('ua.activity''a')
  74.             ->leftJoin('a.category''cat')
  75. //            ->addSelect('COUNT(cat.id) AS nb_question')
  76.             ->andWhere('cat.profile_type = :type')->setParameter('type'$type)
  77. //            ->addSelect($qb->expr()->countDistinct('a.id') . ' AS completion')
  78.             ->groupBy('u.id');
  79.         return $query;
  80.     }
  81.     /**
  82.      * Get all users for one company
  83.      */
  84.     public function getUsersForOneCompany($company$roles null)
  85.     {
  86.         if ($roles === null) {
  87.             $roles User::getStandardRoleNames();
  88.         }
  89.         $queryBuilder $this->createQueryBuilder('u');
  90.         $query $queryBuilder
  91.             //            ->select('u.id')
  92.             //            ->addSelect('u.lastname')
  93.             //            ->addSelect('u.firstname')
  94.             //            ->addSelect('u.email')
  95.             //            ->addSelect('u.updatedAt')
  96.             ->leftJoin('u.roles''r')
  97.             ->where('r.name IN (:roles)')->setParameter('roles'$roles)
  98.             ->andWhere('u.company = :company')->setParameter('company'$company);
  99.         return $query->getQuery()->getResult();
  100.     }
  101.     public function findRHORContactEmailForCompany($company,$isContact=true){
  102.         $queryBuilder $this->createQueryBuilder('U');
  103.         $q $queryBuilder
  104.             ->select('U')
  105.             ->leftJoin('U.roles''R')
  106.             ->where('U.company = :value')->setParameter('value'$company);
  107.             if($isContact){
  108.                 $q->andWhere(
  109.                     new Orx([
  110.                         "U.isContact = 1",
  111.                         "R.name = 'ROLE_RH' ",
  112.                     ])
  113.                 );
  114.             }
  115.             else{
  116.                 $q->andWhere("R.name = 'ROLE_RH'");
  117.             }
  118.             return $q->getQuery()->getResult();
  119.     }
  120.     public function getWithRoleAndJob($user){
  121.         $queryBuilder $this->createQueryBuilder('u');
  122.         $q $queryBuilder
  123.             ->select('u.id')
  124.             ->addSelect('u.lastname')
  125.             ->addSelect('u.firstname')
  126.             ->addSelect('u.email')
  127.             ->addSelect('u.lastLoginAt')
  128.             ->addSelect('r.name as role')
  129.             ->leftJoin('u.roles''r')
  130.             ->where('u = :user')->setParameter('user'$user);
  131.         return $q->getQuery()->getResult();
  132.     }
  133.     public function findUsersNoYetRegisteredFromDate($startDate,$endDate)
  134.     {
  135.         $queryBuilder $this->createQueryBuilder('u');
  136.         $result $queryBuilder
  137.             ->select('u')
  138.             ->andWhere('u.createdAt > :start')
  139.             ->setParameter('start'$startDate)
  140.             ->andWhere('u.createdAt < :end')
  141.             ->setParameter('end'$endDate)
  142.             ->andWhere('u.password is null')
  143.             ->getQuery()
  144.             ->getResult()
  145.         ;
  146.         return $result;
  147.     }
  148.     public function findUsersRegistered($company)
  149.     {
  150.         $queryBuilder $this->createQueryBuilder('u');
  151.         $result $queryBuilder
  152.             ->select('u')
  153.             ->andWhere('u.company = :company')->setParameter('company'$company)
  154.             ->andWhere('u.password is not null')
  155.             ->getQuery()
  156.             ->getResult()
  157.         ;
  158.         return $result;
  159.     }
  160.     /**
  161.      * @return User[]
  162.      */
  163.     public function findBySearchQuery(string $rawQuery,$company): array
  164.     {
  165.         $query $this->sanitizeSearchQuery($rawQuery);
  166.         $searchTerms $this->extractSearchTerms($query);
  167.         if (=== count($searchTerms)) {
  168.             return [];
  169.         }
  170.         $queryBuilder $this->createQueryBuilder('u');
  171.         $queryBuilder
  172.             ->select('u.id')
  173.             ->addSelect('u.lastname')
  174.             ->addSelect('u.firstname');
  175.         foreach ($searchTerms as $key => $term) {
  176.             $queryBuilder
  177.                 ->orWhere('u.lastname LIKE :t_' $key)
  178.                 ->orWhere('u.firstname LIKE :t_' $key)
  179.                 ->setParameter('t_' $key'%' $term '%');
  180.         }
  181.         return $queryBuilder
  182.             ->andWhere('u.company = :company')->setParameter('company'$company)
  183.             ->orderBy('u.lastname''DESC')
  184.             ->getQuery()
  185.             ->getResult();
  186.     }
  187.     /**
  188.      * Removes all non-alphanumeric characters except whitespaces.
  189.      */
  190.     private function sanitizeSearchQuery(string $query): string
  191.     {
  192.         return trim(preg_replace('/[[:space:]]+/'' '$query));
  193.     }
  194.     /**
  195.      * Splits the search query into terms and removes the ones which are irrelevant.
  196.      */
  197.     private function extractSearchTerms(string $searchQuery): array
  198.     {
  199.         $terms array_unique(explode(' '$searchQuery));
  200.         return array_filter($terms, function ($term) {
  201.             return <= mb_strlen($term);
  202.         });
  203.     }
  204. }