From f762f35386a96ddaf138165ba4e851217baf3986 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Wed, 15 Feb 2023 18:39:22 +0100 Subject: [PATCH] FEATURE [repository] method added to repository to alter query using filters - not done --- .../Controller/ActivityController.php | 4 +- .../Repository/ActivityRepository.php | 52 ++++++++++++++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/Bundle/ChillActivityBundle/Controller/ActivityController.php b/src/Bundle/ChillActivityBundle/Controller/ActivityController.php index e6bcdf836..46796c5e7 100644 --- a/src/Bundle/ChillActivityBundle/Controller/ActivityController.php +++ b/src/Bundle/ChillActivityBundle/Controller/ActivityController.php @@ -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, [ diff --git a/src/Bundle/ChillActivityBundle/Repository/ActivityRepository.php b/src/Bundle/ChillActivityBundle/Repository/ActivityRepository.php index 5a6e16cd5..3519cf6fd 100644 --- a/src/Bundle/ChillActivityBundle/Repository/ActivityRepository.php +++ b/src/Bundle/ChillActivityBundle/Repository/ActivityRepository.php @@ -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; + } }