public function all()
{
$this->setCurrentPage($this->getOffset());
$qb = $this->createQueryBuilder('j');
$qb->select('count(j.id)')->where($qb->expr()->eq('j.status', ':status'))->setParameter('status', 3);
if (isset($this->getFilter()['subject'])) {
$subjects = $this->getFilter()['subject'];
foreach ($subjects as $key => $subject) {
$qb->join('j.subjects', 's_' . $key, 'WITH', 's_' . $key . '.slug=:subject_' . $key)->setParameter('subject_' . $key, $subject);
}
}
if (isset($this->getFilter()['publisher_type'])) {
$publishers = $this->getFilter()['publisher_type'];
foreach ($publishers as $key => $publisher) {
$qb->join('j.publisher', 'i_' . $key)->join('i_' . $key . '.publisherType', 'it_' . $key, 'WITH', 'it_' . $key . '.slug=:publisher_type_slug_' . $key)->setParameter('publisher_type_slug_' . $key, $publisher);
}
}
if ($this->getPublisher()) {
$qb->join('j.publisher', 'inst', 'WITH', 'inst.slug=:publisher')->setParameter('publisher', $this->getPublisher());
}
$this->setCount($qb->getQuery()->getSingleScalarResult());
$qb->select('j')->setFirstResult($this->getStart())->setMaxResults($this->getOffset());
return $qb->getQuery()->getResult();
}