public function findUsersLastNameInRange($letters, $countOnly, $offset, $limit, $firstName = false)
{
$qb = $this->getEntityManager()->createQueryBuilder();
if ($countOnly) {
$qb->select('COUNT(u.id)');
} else {
$qb->select('u');
}
$qb->from('Newscoop\\Entity\\User', 'u');
$qb->where($qb->expr()->eq("u.status", User::STATUS_ACTIVE));
$qb->andWhere($qb->expr()->eq("u.is_public", true));
$letterIndex = $qb->expr()->orx();
for ($i = 0; $i < count($letters); $i++) {
$letterIndex->add($qb->expr()->like("LOWER(u.last_name)", "'{$letters[$i]}%'"));
if ($firstName) {
$letterIndex->add($qb->expr()->like("LOWER(u.first_name)", "'{$letters[$i]}%'"));
}
}
$qb->andWhere($letterIndex);
if ($countOnly === false) {
$qb->orderBy('u.username', 'ASC');
$qb->addOrderBy('u.id', 'ASC');
$qb->setFirstResult($offset);
$qb->setMaxResults($limit);
return $qb->getQuery()->getResult();
} else {
return $qb->getQuery()->getOneOrNullResult();
}
}