114 lines
3.3 KiB
PHP
114 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Repository;
|
|
|
|
use App\Entity\User;
|
|
use App\Repository\Traits\QueryHelperTrait;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Persistence\ManagerRegistry;
|
|
|
|
/**
|
|
* @extends ServiceEntityRepository<User>
|
|
*
|
|
* @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
|
|
{
|
|
use QueryHelperTrait;
|
|
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, User::class);
|
|
}
|
|
|
|
/**
|
|
* @return User[]
|
|
*/
|
|
public function getAdministrativeUsers(): array
|
|
{
|
|
$qb = $this->createQueryBuilder('u');
|
|
|
|
return $qb
|
|
->where("JSON_CONTAINS(u.roles, :role_admin) = 1")
|
|
->orWhere("JSON_CONTAINS(u.roles, :role_manager) = 1")
|
|
->orWhere("JSON_CONTAINS(u.roles, :role_house_manager) = 1")
|
|
->orderBy('u.lastName', 'ASC')
|
|
->setParameters([
|
|
'role_admin' => json_encode('ROLE_ADMIN'),
|
|
'role_manager' => json_encode('ROLE_MANAGER'),
|
|
'role_house_manager' => json_encode('ROLE_HOUSE_MANAGER'),
|
|
])
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
|
|
/**
|
|
* @param string $role
|
|
* @param string[]|string $hotelCode
|
|
* @return User[]
|
|
*/
|
|
public function getUsersByRoleAndHotelCode(string $role, mixed $hotelCode): array
|
|
{
|
|
$hotelCodes = (array) $hotelCode;
|
|
|
|
$hotelCodesBase = array_map(function ($code) {
|
|
return substr($code, 0, 3);
|
|
}, $hotelCodes);
|
|
|
|
$qb = $this->createQueryBuilder('user');
|
|
|
|
foreach ($hotelCodesBase as $index => $code) {
|
|
$qb
|
|
->orWhere('JSON_CONTAINS(user.hotelCodes, :hotelCode_'.$index.') = 1')
|
|
->setParameter('hotelCode_'.$index, json_encode($code))
|
|
;
|
|
}
|
|
|
|
return $qb
|
|
->andWhere('JSON_CONTAINS(user.roles, :role) = 1')
|
|
->setParameter('role', json_encode($role))
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
|
|
public function getAutocompletionData(string $search, string $role): array
|
|
{
|
|
$qb = $this->createQueryBuilder('user');
|
|
|
|
$users = $qb
|
|
->where($qb->expr()->orX(
|
|
$qb->expr()->like('user.lastName', ':search'),
|
|
$qb->expr()->like('user.firstName', ':search'),
|
|
))
|
|
->andWhere('JSON_CONTAINS(user.roles, :role) = 1')
|
|
->orderBy('user.lastName', 'ASC')
|
|
->addOrderBy('user.firstName', 'ASC')
|
|
->setParameter('search', '%'.$this->escapeLikeWildcards($search).'%')
|
|
->setParameter('role', json_encode($role))
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
|
|
$data = [
|
|
[
|
|
'value' => '',
|
|
'text' => '...',
|
|
],
|
|
];
|
|
|
|
foreach ($users as $user) {
|
|
$data[] = [
|
|
'value' => $user->getId(),
|
|
'text' => (string) $user,
|
|
];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
}
|