<?php
namespace Crea\SecurityBundle\Repository;
use DateTime;
use Doctrine\ORM\QueryBuilder;
use Crea\SecurityBundle\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method User|null find($id, $lockMode = null, $lockVersion = null)
* @method User|null findOneBy(array $criteria, array $orderBy = null)
* @method User[] findAll()
* @method User[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class UserRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry, string $entityClass = User::class)
{
parent::__construct($registry, $entityClass);
}
public function getUserQb(QueryBuilder $query, bool $enabled = true) : QueryBuilder
{
if ($enabled) {
return $query
->andWhere("u.enabled = :enabled")
->setParameter("enabled", $enabled)
->andWhere("u.enabledUntil >= :enabledDate OR u.enabledUntil IS NULL")
->setParameter("enabledDate", (new DateTime())->format('Y-m-d'))
->andWhere("u.profile IS NOT NULL");
}
return $query
->orWhere("u.enabled = :enabled")
->setParameter("enabled", $enabled)
->orWhere("u.enabledUntil < :enabledDate")
->setParameter("enabledDate", (new DateTime())->format('Y-m-d'))
->orWhere("u.profile IS NULL");
}
public function disableExpiredUsers()
{
$this->createQueryBuilder('u')
->update()
->where('u.enabledUntil < :now')
->set('u.isEnabled',':disable')
->set('u.enabledUntil',':empty')
->setParameter('now', new DateTime('now'))
->setParameter('disable', false)
->setParameter('empty', null)
->getQuery()
->execute();
}
/**
* @param string $userGroupCode
* @param bool|null $enabled
* @param bool|null $orderedByName
* @return User[]
*/
public function getUsersFromGroup(string $userGroupCode, ?bool $enabled = true, ?bool $orderedByName = true): array
{
$qb = $this->createQueryBuilder('u');
$qb->leftjoin('u.userGroups', 'ug')
->andWhere($qb->expr()->eq('ug.code', ':userGroupCode'))
->setParameter('userGroupCode', $userGroupCode);
if ($enabled !== null) {
$qb->andWhere($qb->expr()->eq('u.enabled', ':enabled'))
->setParameter('enabled', $enabled);
}
$qb->groupBy('u.id');
if ($orderedByName === true) {
$qb->addOrderBy('u.firstName', 'ASC')
->addOrderBy('u.lastName', 'ASC');
}
return $qb
->getQuery()
->getResult();
}
}