src/Repository/UsuarioRepository.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Usuario;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\ORM\Query\Expr;
  6. use Doctrine\ORM\QueryBuilder;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. /**
  9.  * @method Usuario|null find($id, $lockMode = null, $lockVersion = null)
  10.  * @method Usuario|null findOneBy(array $criteria, array $orderBy = null)
  11.  * @method Usuario[]    findAll()
  12.  * @method Usuario[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  13.  */
  14. class UsuarioRepository extends ServiceEntityRepository
  15. {
  16.     public function __construct(ManagerRegistry $registry)
  17.     {
  18.         parent::__construct($registryUsuario::class);
  19.     }
  20.     /**
  21.      * Constrói uma consulta complexa utilizando os parâmetros informados. Capacidade semelhante a findBy()
  22.      * @param array $criteria
  23.      * @param Expr\OrderBy|array $orderBy
  24.      * @param int $limit
  25.      * @param int $offset
  26.      * @param QueryBuilder $qb
  27.      * @return QueryBuilder
  28.      */
  29.     public function findBuilder(array $criteria, array $orderBy null$limit null$offset null$qb=null) {
  30.         if (!$qb) {
  31.             $qb $this->createQueryBuilder('p');
  32.         }
  33.         $paramNo 0;
  34.         foreach ($criteria as $field => $value) {
  35.             if ($value instanceof Expr) {
  36.                 $qb->andWhere($value);
  37.             }
  38.             else {
  39.                 $paramNo++;
  40.                 if (is_array($value)) {
  41.                     $qb->andWhere("{$field} IN (:param$paramNo)");
  42.                 }
  43.                 else {
  44.                     $qb->andWhere("{$field} = :param$paramNo");
  45.                 }
  46.                 $qb->setParameter("param$paramNo"$value);
  47.             }
  48.         }
  49.         if (!empty($orderBy)) {
  50.             if ($orderBy instanceof Expr\OrderBy) {
  51.                 $qb->orderBy($orderBy);
  52.             }
  53.             elseif (is_array($orderBy)) {
  54.                 foreach($orderBy as $field => $sort) {
  55.                     if ($sort instanceof Expr\OrderBy) {
  56.                         $qb->addOrderBy($sort);
  57.                     }
  58.                     else {
  59.                         $qb->addOrderBy($field$sort);
  60.                     }
  61.                 }
  62.             }
  63.             else {
  64.                 $qb->orderBy(strval($orderBy), 'ASC');
  65.             }
  66.         }
  67.         if ($limit !== null) {
  68.             $qb->setMaxResults($limit);
  69.         }
  70.         if ($offset !== null) {
  71.             $qb->setFirstResult($offset);
  72.         }
  73.         return $qb;
  74.     }
  75.     /**
  76.      * Retorna todos os professores no banco de dados que tem o papel de Professor ativo
  77.      * @param array $criteria
  78.      * @param Expr\OrderBy|array|null $orderBy
  79.      * @param int|null $limit
  80.      * @param int|null $offset
  81.      * @return Usuario[]
  82.      */
  83.     public function findProfessores(array $criteria, array $orderBy null$limit null$offset null) {
  84.         $qb $this->createQueryBuilder('p');
  85.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  86.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_PROFESSOR\"%\''));
  87.         return $qb->getQuery()->getResult();
  88.     }
  89.     /**
  90.      * Retorna todos os professores no banco de dados que tem o papel de Professor inativo
  91.      * @param array $criteria
  92.      * @param Expr\OrderBy|array|null $orderBy
  93.      * @param int|null $limit
  94.      * @param int|null $offset
  95.      * @return Usuario[]
  96.      */
  97.     public function findProfessoresInativos(array $criteria, array $orderBy null$limit null$offset null) {
  98.         $qb $this->createQueryBuilder('p');
  99.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  100.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_PROFESSOR_INATIVO\"%\''));
  101.         return $qb->getQuery()->getResult();
  102.     }
  103.     /**
  104.      * Retorna todos os funcionários no banco de dados que tem o papel de Funcionário ativo
  105.      * @param array $criteria
  106.      * @param Expr\OrderBy|array|null $orderBy
  107.      * @param int|null $limit
  108.      * @param int|null $offset
  109.      * @return Usuario[]
  110.      */
  111.     public function findFuncionarios(array $criteria, array $orderBy null$limit null$offset null) {
  112.         $qb $this->createQueryBuilder('p');
  113.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  114.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_FUNCIONARIO\"%\''));
  115.         return $qb->getQuery()->getResult();
  116.     }
  117.     /**
  118.      * Retorna todos os funcionários no banco de dados que tem o papel de Funcionário inativo
  119.      * @param array $criteria
  120.      * @param Expr\OrderBy|array|null $orderBy
  121.      * @param int|null $limit
  122.      * @param int|null $offset
  123.      * @return Usuario[]
  124.      */
  125.     public function findFuncionariosInativos(array $criteria, array $orderBy null$limit null$offset null) {
  126.         $qb $this->createQueryBuilder('p');
  127.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  128.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_FUNCIONARIO_INATIVO\"%\''));
  129.         return $qb->getQuery()->getResult();
  130.     }
  131.     /**
  132.      * Retorna todos os administradores no banco de dados que tem o papel de Administrador ativo
  133.      * @param array $criteria
  134.      * @param Expr\OrderBy|array|null $orderBy
  135.      * @param int|null $limit
  136.      * @param int|null $offset
  137.      * @return Usuario[]
  138.      */
  139.     public function findAdministradores(array $criteria, array $orderBy null$limit null$offset null) {
  140.         $qb $this->createQueryBuilder('p');
  141.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  142.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_ADMIN\"%\''));
  143.         return $qb->getQuery()->getResult();
  144.     }
  145.     /**
  146.      * Retorna todos os candidatos no banco de dados que tem o papel de Candidato ativo
  147.      * @param array $criteria
  148.      * @param Expr\OrderBy|array|null $orderBy
  149.      * @param int|null $limit
  150.      * @param int|null $offset
  151.      * @return Usuario[]
  152.      */
  153.     public function findCandidatos(array $criteria, array $orderBy null$limit null$offset null) {
  154.         $qb $this->createQueryBuilder('p');
  155.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  156.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_CANDIDATO\"%\''));
  157.         return $qb->getQuery()->getResult();
  158.     }
  159.     /**
  160.      * Retorna todos os candidatos no banco de dados que tem o papel de Candidato inativo
  161.      * @param array $criteria
  162.      * @param Expr\OrderBy|array|null $orderBy
  163.      * @param int|null $limit
  164.      * @param int|null $offset
  165.      * @return Usuario[]
  166.      */
  167.     public function findCandidatosBloqueados(array $criteria, array $orderBy null$limit null$offset null) {
  168.         $qb $this->createQueryBuilder('p');
  169.         $this->findBuilder($criteria$orderBy$limit$offset$qb);
  170.         $qb->andWhere($qb->expr()->like('p.roles''\'%\"ROLE_CANDIDATO_BLOQUEADO\"%\''));
  171.         $qb->orWhere('p.ativo = false');
  172.         return $qb->getQuery()->getResult();
  173.     }
  174.     /**
  175.      * Prepara um construtor de queries focado em Professores
  176.      * @param string $alias
  177.      * @return QueryBuilder
  178.      */
  179.     public function queryProfessores($alias) {
  180.         $qb $this->createQueryBuilder($alias);
  181.         $qb->andWhere($qb->expr()->like("$alias.roles"'\'%\"ROLE_PROFESSOR\"%\''));
  182.         return $qb;
  183.     }
  184.     /**
  185.      * Prepara um construtor de queries focado em Funcionarios
  186.      * @param string $alias
  187.      * @return QueryBuilder
  188.      */
  189.     public function queryFuncionarios($alias) {
  190.         $qb $this->createQueryBuilder($alias);
  191.         $qb->andWhere($qb->expr()->like("$alias.roles"'\'%\"ROLE_FUNCIONARIO\"%\''));
  192.         return $qb;
  193.     }
  194.     /**
  195.      * Prepara um construtor de queries focado em Administradores
  196.      * @param string $alias
  197.      * @return QueryBuilder
  198.      */
  199.     public function queryAdministradores($alias) {
  200.         $qb $this->createQueryBuilder($alias);
  201.         $qb->andWhere($qb->expr()->like("$alias.roles"'\'%\"ROLE_ADMIN\"%\''));
  202.         return $qb;
  203.     }
  204.     /**
  205.      * Prepara um construtor de queries focado em Candidatos
  206.      * @param string $alias
  207.      * @return QueryBuilder
  208.      */
  209.     public function queryCandidatos($alias) {
  210.         $qb $this->createQueryBuilder($alias);
  211.         $qb->andWhere($qb->expr()->like("$alias.roles"'\'%\"ROLE_CANDIDATO\"%\''));
  212.         return $qb;
  213.     }
  214. }