FEATURE [repository] method added to repository to alter query using filters - not done

This commit is contained in:
Julie Lenaerts 2023-02-15 18:39:22 +01:00
parent 1c80e0b5f5
commit 7fd823f1ee
2 changed files with 53 additions and 3 deletions

View File

@ -315,14 +315,14 @@ final class ActivityController extends AbstractController
$this->denyAccessUnlessGranted(ActivityVoter::SEE, $accompanyingPeriod);
$data = $form->getData();
$activities = $this->activityACLAwareRepository
->findByAccompanyingPeriod($accompanyingPeriod, ActivityVoter::SEE, 0, null, ['date' => 'DESC', 'id' => 'DESC']);
$view = 'ChillActivityBundle:Activity:listAccompanyingCourse.html.twig';
}
return $this->render(
$view,
[

View File

@ -12,10 +12,14 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Repository;
use Chill\ActivityBundle\Entity\Activity;
use Chill\ActivityBundle\Entity\ActivityType;
use Chill\MainBundle\Entity\UserJob;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\Person;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Security;
/**
* @method Activity|null find($id, $lockMode = null, $lockVersion = null)
@ -25,9 +29,12 @@ use Doctrine\Persistence\ManagerRegistry;
*/
class ActivityRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
private Security $security;
public function __construct(ManagerRegistry $registry, Security $security)
{
parent::__construct($registry, Activity::class);
$this->security = $security;
}
/**
@ -97,4 +104,47 @@ class ActivityRepository extends ServiceEntityRepository
return $qb->getQuery()->getResult();
}
/**
* @param QueryBuilder $qb
* @param array|UserJob $jobs
* @param array|ActivityType $types
* @param \DateTime $dateFrom
* @param \DateTime $dateTo
* @param bool $onlyMe
* @return QueryBuilder
*/
private function addQueryFilters(QueryBuilder $qb, array $jobs, array $types, \DateTime $dateFrom, \DateTime $dateTo, bool $onlyMe): QueryBuilder
{
if (0 < count($jobs)) {
$qb->join('a.user', 'u');
$qb->andWhere($qb->expr()->in('u.job', ':jobs'))
->setParameter('jobs', $jobs);
}
if (0 < count($types)) {
$qb->andWhere($qb->expr()->in('a.activityType', ':types'))
->setParameter('types', $types);
}
if (null !== $dateFrom && null !== $dateTo)
{
$qb->andWhere($qb->expr()->between(
'a.date',
':date_from',
':date_to'
))
->setParameter('date_from', $dateFrom)
->setParameter('date_to', $dateTo);
}
if (true === $onlyMe) {
$currentUser = $this->security->getUser();
$qb->andWhere($qb->expr()->eq('a.user', ':currentUser'))
->setParameter('currentUser', $currentUser);
}
return $qb;
}
}