diff --git a/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php b/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php
index aaa6afa24..1d01a827c 100644
--- a/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php
+++ b/src/Bundle/ChillMainBundle/Form/Type/Listing/FilterOrderType.php
@@ -13,6 +13,8 @@ namespace Chill\MainBundle\Form\Type\Listing;
use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
+use Chill\PersonBundle\Form\Type\PickPersonDynamicType;
+use Chill\PersonBundle\Form\Type\PickPersonType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
@@ -97,6 +99,30 @@ final class FilterOrderType extends \Symfony\Component\Form\AbstractType
$builder->add($dateRangesBuilder);
}
+ if (0 < count($helper->getPersonPickers())) {
+ $personPickersBuilder = $builder->create('personPicker', null, ['compound' => true]);
+
+ foreach ($helper->getPersonPickers() as $name => $opts) {
+ $personPicker = $personPickersBuilder->create($name, null, [
+ 'compound' => true,
+ 'label' => null === $opts['label'] ? false : $opts['label'] ?? $name,
+ ]);
+
+ $personPicker->add(
+ 'person',
+ PickPersonDynamicType::class,
+ [
+ 'multiple' => false,
+ ]
+ );
+
+
+ $personPickersBuilder->add($personPicker);
+ }
+
+ $builder->add($personPickersBuilder);
+ }
+
foreach ($this->requestStack->getCurrentRequest()->query->getIterator() as $key => $value) {
switch ($key) {
case 'q':
diff --git a/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig b/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig
index 1f1e54c72..115d90d27 100644
--- a/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig
+++ b/src/Bundle/ChillMainBundle/Resources/views/FilterOrder/base.html.twig
@@ -34,6 +34,35 @@
{% endfor %}
{% endif %}
{% endif %}
+
+ {% if form.personPicker is defined %}
+ {% if form.personPicker|length > 0 %}
+ {% for personPickerName, options in form.personPicker %}
+
+ {% if form.personPicker[personPickerName].vars.label is not same as(false) %}
+
+ {{ form_label(form.personPicker[personPickerName])}}
+
+ {% endif %}
+
+ {{ form_widget(form.personPicker[personPickerName]) }}
+
+
+ {% if form.checkboxes is not defined %}
+
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endif %}
+
{% if form.checkboxes is defined %}
{% if form.checkboxes|length > 0 %}
{% for checkbox_name, options in form.checkboxes %}
@@ -61,5 +90,6 @@
{% endfor %}
{% endif %}
{% endif %}
+
{{ form_end(form) }}
diff --git a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php
index 367cc0861..6dd5f37cd 100644
--- a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php
+++ b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelper.php
@@ -26,6 +26,8 @@ class FilterOrderHelper
private array $dateRanges = [];
+ private array $personPickers = [];
+
private FormFactoryInterface $formFactory;
private ?string $formName = 'f';
@@ -70,6 +72,13 @@ class FilterOrderHelper
return $this;
}
+ public function addPersonPickers(string $name, ?string $label = null): self
+ {
+ $this->personPickers[$name] = ['label' => $label];
+
+ return $this;
+ }
+
public function buildForm(): FormInterface
{
return $this->formFactory
@@ -91,6 +100,16 @@ class FilterOrderHelper
return $this->checkboxes;
}
+ public function getPersonPickers(): array
+ {
+ return $this->personPickers;
+ }
+
+ public function getPersonPickerData(string $name): array
+ {
+ return $this->getFormData()['personPickers'][$name];
+ }
+
/**
* @return array<'to': DateTimeImmutable, 'from': DateTimeImmutable>
*/
@@ -133,6 +152,10 @@ class FilterOrderHelper
$r['checkboxes'][$name] = $c['default'];
}
+ foreach ($this->personPickers as $name => $defaults) {
+ $r['personPickers'][$name]['label'] = $defaults['label'];
+ }
+
foreach ($this->dateRanges as $name => $defaults) {
$r['dateRanges'][$name]['from'] = $defaults['from'];
$r['dateRanges'][$name]['to'] = $defaults['to'];
diff --git a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php
index d68c8c37a..18d04715e 100644
--- a/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php
+++ b/src/Bundle/ChillMainBundle/Templating/Listing/FilterOrderHelperBuilder.php
@@ -21,6 +21,8 @@ class FilterOrderHelperBuilder
private array $dateRanges = [];
+ private array $personPickers = [];
+
private FormFactoryInterface $formFactory;
private RequestStack $requestStack;
@@ -56,6 +58,13 @@ class FilterOrderHelperBuilder
return $this;
}
+ public function addPersonPicker(string $name, ?string $label = null): self
+ {
+ $this->personPickers[$name] = ['label' => $label];
+
+ return $this;
+ }
+
public function build(): FilterOrderHelper
{
$helper = new FilterOrderHelper(
@@ -85,6 +94,14 @@ class FilterOrderHelperBuilder
$helper->addDateRange($name, $label, $from, $to);
}
+ foreach (
+ $this->personPickers as $name => [
+ 'label' => $label,
+ ]
+ ) {
+ $helper->addPersonPickers($name, $label);
+ }
+
return $helper;
}
}
diff --git a/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php b/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php
index 2ba9488b6..4e68c338b 100644
--- a/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php
+++ b/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php
@@ -303,6 +303,7 @@ final class SingleTaskController extends AbstractController
$filterOrder->getCheckboxData('status'),
array_map(static fn ($i) => 'state_' . $i, $filterOrder->getCheckboxData('states'))
);
+
$nb = $this->singleTaskAclAwareRepository->countByAllViewable(
$filterOrder->getQueryString(),
$flags
@@ -678,6 +679,7 @@ final class SingleTaskController extends AbstractController
return $this->filterOrderHelperFactory
->create(self::class)
->addSearchBox()
+ ->addPersonPicker('personPicker')
->addCheckbox('status', $statuses, $statuses, $statusTrans)
->addCheckbox('states', $states, ['new', 'in_progress'])
->build();
diff --git a/src/Bundle/ChillTaskBundle/Resources/views/SingleTask/List/index.html.twig b/src/Bundle/ChillTaskBundle/Resources/views/SingleTask/List/index.html.twig
index 8fe45959e..b479eb948 100644
--- a/src/Bundle/ChillTaskBundle/Resources/views/SingleTask/List/index.html.twig
+++ b/src/Bundle/ChillTaskBundle/Resources/views/SingleTask/List/index.html.twig
@@ -27,8 +27,10 @@
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('page_task_list') }}
+ {{ encore_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('page_task_list') }}
+ {{ encore_entry_script_tags('mod_pickentity_type') }}
{% endblock %}
diff --git a/src/Bundle/ChillTaskBundle/translations/messages.fr.yml b/src/Bundle/ChillTaskBundle/translations/messages.fr.yml
index d437baac2..a3f5bc0df 100644
--- a/src/Bundle/ChillTaskBundle/translations/messages.fr.yml
+++ b/src/Bundle/ChillTaskBundle/translations/messages.fr.yml
@@ -119,3 +119,5 @@ CHILL_TASK_TASK_UPDATE: Modifier une tâche
CHILL_TASK_TASK_CREATE_FOR_COURSE: Créer une tâche pour un parcours
CHILL_TASK_TASK_CREATE_FOR_PERSON: Créer une tâche pour un usager
+filter:
+ Filter on user: Filtrer par utilisateur/ utilisatrice