diff --git a/src/Form/Activity/ActivityFilterForm.php b/src/Form/Activity/ActivityFilterForm.php index 1d8dc3c..2e421ae 100644 --- a/src/Form/Activity/ActivityFilterForm.php +++ b/src/Form/Activity/ActivityFilterForm.php @@ -1,7 +1,9 @@ getData(); - + // Create filter $criteria = new Criteria(); - + // Filter actors - if(!is_null($data['actor'])) { - $criteria->andWhere($criteria->expr()->eq('activity.actor', $data['actor'])); + if (!is_null($data['actor'])) { + $criteria->andWhere($criteria->expr() + ->eq('activity.actor', $data['actor'])); + } + if ($data['followed']) { + $criteria->andWhere($criteria->expr() + ->eq('actor.followed', true)); } + // Filter status + if (!is_null($data['status'])) { + $criteria->andWhere($criteria->expr()->eq('activity.status', $data['status'])); + } + if($data['active']) { + $criteria->andWhere($criteria->expr()->in('activity.status', StatusEnum::ACTIVE_STATUS)); + } + if($data['notClosed']) { + $criteria->andWhere($criteria->expr()->neq('activity.status', StatusEnum::CLOSED)); + } + // Create query $query = $activityRepository->createQueryBuilder('activity'); - $query->join(ActorEntity::class, 'actor', Join::WITH, 'activity.actor = actor'); + $query->join(ActorEntity::class, 'actor', Join::WITH, 'activity.actor = actor'); $query->addCriteria($criteria); - + return $query->getQuery()->execute([], Query::HYDRATE_OBJECT); } @@ -66,6 +86,7 @@ */ protected function addFields($formBuilder, $options): void { + // Actor filters $formBuilder->add('actor', EntityType::class, [ 'class' => ActorEntity::class, 'choices' => $this->actors, @@ -82,6 +103,26 @@ 'choice_label' => 'displayName', 'required' => false, ]) - ->add('submit', SubmitType::class); + ->add('followed', CheckboxType::class, [ + 'required' => false, + ]); + + // Status filters + $formBuilder->add('status', ChoiceType::class, [ + 'required' => false, + 'choices' => ActivityEntity::VALID_STATUS, + 'choice_label' => function ($choice, $key, $value) { + return StatusEnum::STATUS_NAME[$choice]; + }, + ]) + ->add('active', CheckboxType::class, [ + 'required' => false, + ]) + ->add('notClosed', CheckboxType::class, [ + 'required' => false, + ]); + + // Submit + $formBuilder->add('submit', SubmitType::class); } } \ No newline at end of file diff --git a/templates/_includes/html/form/activity/filter.html.twig b/templates/_includes/html/form/activity/filter.html.twig index 1a338f6..7141b35 100644 --- a/templates/_includes/html/form/activity/filter.html.twig +++ b/templates/_includes/html/form/activity/filter.html.twig @@ -1,11 +1,33 @@ {{ form_start(form)}}
-
+
{{ form_label(form.actor, 'Acteur', {label_attr: {class: 'input-text-label'}}) }} {{ form_widget(form.actor, {attr: {class: 'w-100'}}) }}
+ {{ form_widget(form.followed) }} + {{ form_label(form.followed, 'Acteurs suivis') }} +
+
+
+
+ {{ form_label(form.status, 'Status', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.status, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_widget(form.active) }} + {{ form_label(form.active, 'Actifs') }} +
+
+ {{ form_widget(form.notClosed) }} + {{ form_label(form.notClosed, 'Non clos') }} +
+
+
+
+
+
{{ form_widget(form.submit, {attr: {class: 'w-100'}, label: 'Filtrer'}) }}