* * @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; } }