<?php
namespace App\Repository;
use App\Entity\Usuario;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Usuario|null find($id, $lockMode = null, $lockVersion = null)
* @method Usuario|null findOneBy(array $criteria, array $orderBy = null)
* @method Usuario[] findAll()
* @method Usuario[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class UsuarioRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Usuario::class);
}
/**
* Constrói uma consulta complexa utilizando os parâmetros informados. Capacidade semelhante a findBy()
* @param array $criteria
* @param Expr\OrderBy|array $orderBy
* @param int $limit
* @param int $offset
* @param QueryBuilder $qb
* @return QueryBuilder
*/
public function findBuilder(array $criteria, array $orderBy = null, $limit = null, $offset = null, $qb=null) {
if (!$qb) {
$qb = $this->createQueryBuilder('p');
}
$paramNo = 0;
foreach ($criteria as $field => $value) {
if ($value instanceof Expr) {
$qb->andWhere($value);
}
else {
$paramNo++;
if (is_array($value)) {
$qb->andWhere("{$field} IN (:param$paramNo)");
}
else {
$qb->andWhere("{$field} = :param$paramNo");
}
$qb->setParameter("param$paramNo", $value);
}
}
if (!empty($orderBy)) {
if ($orderBy instanceof Expr\OrderBy) {
$qb->orderBy($orderBy);
}
elseif (is_array($orderBy)) {
foreach($orderBy as $field => $sort) {
if ($sort instanceof Expr\OrderBy) {
$qb->addOrderBy($sort);
}
else {
$qb->addOrderBy($field, $sort);
}
}
}
else {
$qb->orderBy(strval($orderBy), 'ASC');
}
}
if ($limit !== null) {
$qb->setMaxResults($limit);
}
if ($offset !== null) {
$qb->setFirstResult($offset);
}
return $qb;
}
/**
* Retorna todos os professores no banco de dados que tem o papel de Professor ativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findProfessores(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_PROFESSOR\"%\''));
return $qb->getQuery()->getResult();
}
/**
* Retorna todos os professores no banco de dados que tem o papel de Professor inativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findProfessoresInativos(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_PROFESSOR_INATIVO\"%\''));
return $qb->getQuery()->getResult();
}
/**
* Retorna todos os funcionários no banco de dados que tem o papel de Funcionário ativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findFuncionarios(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_FUNCIONARIO\"%\''));
return $qb->getQuery()->getResult();
}
/**
* Retorna todos os funcionários no banco de dados que tem o papel de Funcionário inativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findFuncionariosInativos(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_FUNCIONARIO_INATIVO\"%\''));
return $qb->getQuery()->getResult();
}
/**
* Retorna todos os administradores no banco de dados que tem o papel de Administrador ativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findAdministradores(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_ADMIN\"%\''));
return $qb->getQuery()->getResult();
}
/**
* Retorna todos os candidatos no banco de dados que tem o papel de Candidato ativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findCandidatos(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_CANDIDATO\"%\''));
return $qb->getQuery()->getResult();
}
/**
* Retorna todos os candidatos no banco de dados que tem o papel de Candidato inativo
* @param array $criteria
* @param Expr\OrderBy|array|null $orderBy
* @param int|null $limit
* @param int|null $offset
* @return Usuario[]
*/
public function findCandidatosBloqueados(array $criteria, array $orderBy = null, $limit = null, $offset = null) {
$qb = $this->createQueryBuilder('p');
$this->findBuilder($criteria, $orderBy, $limit, $offset, $qb);
$qb->andWhere($qb->expr()->like('p.roles', '\'%\"ROLE_CANDIDATO_BLOQUEADO\"%\''));
$qb->orWhere('p.ativo = false');
return $qb->getQuery()->getResult();
}
/**
* Prepara um construtor de queries focado em Professores
* @param string $alias
* @return QueryBuilder
*/
public function queryProfessores($alias) {
$qb = $this->createQueryBuilder($alias);
$qb->andWhere($qb->expr()->like("$alias.roles", '\'%\"ROLE_PROFESSOR\"%\''));
return $qb;
}
/**
* Prepara um construtor de queries focado em Funcionarios
* @param string $alias
* @return QueryBuilder
*/
public function queryFuncionarios($alias) {
$qb = $this->createQueryBuilder($alias);
$qb->andWhere($qb->expr()->like("$alias.roles", '\'%\"ROLE_FUNCIONARIO\"%\''));
return $qb;
}
/**
* Prepara um construtor de queries focado em Administradores
* @param string $alias
* @return QueryBuilder
*/
public function queryAdministradores($alias) {
$qb = $this->createQueryBuilder($alias);
$qb->andWhere($qb->expr()->like("$alias.roles", '\'%\"ROLE_ADMIN\"%\''));
return $qb;
}
/**
* Prepara um construtor de queries focado em Candidatos
* @param string $alias
* @return QueryBuilder
*/
public function queryCandidatos($alias) {
$qb = $this->createQueryBuilder($alias);
$qb->andWhere($qb->expr()->like("$alias.roles", '\'%\"ROLE_CANDIDATO\"%\''));
return $qb;
}
}