<?php
namespace App\Repository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\Persistence\ManagerRegistry;
use Evo\Infrastructure\MappingORM\User;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class UserRepository extends ServiceEntityRepository implements UserLoaderInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, User::class);
}
public function loadUserByUsername($emailOrPhoneNumber, bool $onlyActive = false): ?UserInterface
{
if (null === $emailOrPhoneNumber) {
return null;
}
try {
$query = $this->createQueryBuilder('u')
->where('u.email = :query OR u.phoneNumber = :query')
->setParameter('query', str_replace(' ', '', $emailOrPhoneNumber));
if ($onlyActive) {
$query->andWhere('u.isActive = true');
}
return $query->getQuery()
->getOneOrNullResult();
} catch (NonUniqueResultException $e) {
return null;
}
}
public function searchUsername($emailOrPhoneNumber)
{
if (null === $emailOrPhoneNumber) {
return null;
}
return $this->createQueryBuilder('u')
->where('u.email = :query OR u.phoneNumber = :query')
->setParameter('query', str_replace(' ', '', $emailOrPhoneNumber))
->getQuery()
->getFirstResult();
}
public function getUsersNotReset($maxResult = 50)
{
return $this->createQueryBuilder('u')
->where('u.resetToken IS NULL')
->andWhere('u.resetTokenSync <> 1')
// ->setMaxResults($maxResult)
->getQuery()
->getResult();
}
public function getOrganizationsList(int $userId)
{
$query = $this->createQueryBuilder('u')
->select('o.id')
->where('u.id = :user')
->join('u.organizations', 'o')
->setParameter('user', $userId);
return $query->getQuery()->getResult();
}
/**
* @return array<array>
*/
public function getOrganizationsByUser(string $email): array
{
$query = $this->createQueryBuilder('u')
->select('o.id')
->where('u.email = :email')
->join('u.organizations', 'o')
->setParameter('email', $email);
return $query->getQuery()->getArrayResult();
}
}