mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
FEATURE [task filter][person] filter tasks on the basis of a person
This commit is contained in:
parent
37e92ca58d
commit
ed96017c49
@ -13,6 +13,8 @@ namespace Chill\MainBundle\Form\Type\Listing;
|
|||||||
|
|
||||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||||
use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
|
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\ChoiceType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
|
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\SearchType;
|
use Symfony\Component\Form\Extension\Core\Type\SearchType;
|
||||||
@ -97,6 +99,30 @@ final class FilterOrderType extends \Symfony\Component\Form\AbstractType
|
|||||||
$builder->add($dateRangesBuilder);
|
$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) {
|
foreach ($this->requestStack->getCurrentRequest()->query->getIterator() as $key => $value) {
|
||||||
switch ($key) {
|
switch ($key) {
|
||||||
case 'q':
|
case 'q':
|
||||||
|
@ -34,6 +34,35 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if form.personPicker is defined %}
|
||||||
|
{% if form.personPicker|length > 0 %}
|
||||||
|
{% for personPickerName, options in form.personPicker %}
|
||||||
|
<div class="row gx-0">
|
||||||
|
{% if form.personPicker[personPickerName].vars.label is not same as(false) %}
|
||||||
|
<div class="col-md-2">
|
||||||
|
{{ form_label(form.personPicker[personPickerName])}}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="col-md-9">
|
||||||
|
{{ form_widget(form.personPicker[personPickerName]) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if form.checkboxes is not defined %}
|
||||||
|
<div class="row gx-0">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<button type="submit" class="btn btn-misc"><i class="fa fa-filter"></i></button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if form.checkboxes is defined %}
|
{% if form.checkboxes is defined %}
|
||||||
{% if form.checkboxes|length > 0 %}
|
{% if form.checkboxes|length > 0 %}
|
||||||
{% for checkbox_name, options in form.checkboxes %}
|
{% for checkbox_name, options in form.checkboxes %}
|
||||||
@ -61,5 +90,6 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
|
@ -26,6 +26,8 @@ class FilterOrderHelper
|
|||||||
|
|
||||||
private array $dateRanges = [];
|
private array $dateRanges = [];
|
||||||
|
|
||||||
|
private array $personPickers = [];
|
||||||
|
|
||||||
private FormFactoryInterface $formFactory;
|
private FormFactoryInterface $formFactory;
|
||||||
|
|
||||||
private ?string $formName = 'f';
|
private ?string $formName = 'f';
|
||||||
@ -70,6 +72,13 @@ class FilterOrderHelper
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addPersonPickers(string $name, ?string $label = null): self
|
||||||
|
{
|
||||||
|
$this->personPickers[$name] = ['label' => $label];
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function buildForm(): FormInterface
|
public function buildForm(): FormInterface
|
||||||
{
|
{
|
||||||
return $this->formFactory
|
return $this->formFactory
|
||||||
@ -91,6 +100,16 @@ class FilterOrderHelper
|
|||||||
return $this->checkboxes;
|
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>
|
* @return array<'to': DateTimeImmutable, 'from': DateTimeImmutable>
|
||||||
*/
|
*/
|
||||||
@ -133,6 +152,10 @@ class FilterOrderHelper
|
|||||||
$r['checkboxes'][$name] = $c['default'];
|
$r['checkboxes'][$name] = $c['default'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($this->personPickers as $name => $defaults) {
|
||||||
|
$r['personPickers'][$name]['label'] = $defaults['label'];
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($this->dateRanges as $name => $defaults) {
|
foreach ($this->dateRanges as $name => $defaults) {
|
||||||
$r['dateRanges'][$name]['from'] = $defaults['from'];
|
$r['dateRanges'][$name]['from'] = $defaults['from'];
|
||||||
$r['dateRanges'][$name]['to'] = $defaults['to'];
|
$r['dateRanges'][$name]['to'] = $defaults['to'];
|
||||||
|
@ -21,6 +21,8 @@ class FilterOrderHelperBuilder
|
|||||||
|
|
||||||
private array $dateRanges = [];
|
private array $dateRanges = [];
|
||||||
|
|
||||||
|
private array $personPickers = [];
|
||||||
|
|
||||||
private FormFactoryInterface $formFactory;
|
private FormFactoryInterface $formFactory;
|
||||||
|
|
||||||
private RequestStack $requestStack;
|
private RequestStack $requestStack;
|
||||||
@ -56,6 +58,13 @@ class FilterOrderHelperBuilder
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addPersonPicker(string $name, ?string $label = null): self
|
||||||
|
{
|
||||||
|
$this->personPickers[$name] = ['label' => $label];
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function build(): FilterOrderHelper
|
public function build(): FilterOrderHelper
|
||||||
{
|
{
|
||||||
$helper = new FilterOrderHelper(
|
$helper = new FilterOrderHelper(
|
||||||
@ -85,6 +94,14 @@ class FilterOrderHelperBuilder
|
|||||||
$helper->addDateRange($name, $label, $from, $to);
|
$helper->addDateRange($name, $label, $from, $to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (
|
||||||
|
$this->personPickers as $name => [
|
||||||
|
'label' => $label,
|
||||||
|
]
|
||||||
|
) {
|
||||||
|
$helper->addPersonPickers($name, $label);
|
||||||
|
}
|
||||||
|
|
||||||
return $helper;
|
return $helper;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -303,6 +303,7 @@ final class SingleTaskController extends AbstractController
|
|||||||
$filterOrder->getCheckboxData('status'),
|
$filterOrder->getCheckboxData('status'),
|
||||||
array_map(static fn ($i) => 'state_' . $i, $filterOrder->getCheckboxData('states'))
|
array_map(static fn ($i) => 'state_' . $i, $filterOrder->getCheckboxData('states'))
|
||||||
);
|
);
|
||||||
|
|
||||||
$nb = $this->singleTaskAclAwareRepository->countByAllViewable(
|
$nb = $this->singleTaskAclAwareRepository->countByAllViewable(
|
||||||
$filterOrder->getQueryString(),
|
$filterOrder->getQueryString(),
|
||||||
$flags
|
$flags
|
||||||
@ -678,6 +679,7 @@ final class SingleTaskController extends AbstractController
|
|||||||
return $this->filterOrderHelperFactory
|
return $this->filterOrderHelperFactory
|
||||||
->create(self::class)
|
->create(self::class)
|
||||||
->addSearchBox()
|
->addSearchBox()
|
||||||
|
->addPersonPicker('personPicker')
|
||||||
->addCheckbox('status', $statuses, $statuses, $statusTrans)
|
->addCheckbox('status', $statuses, $statuses, $statusTrans)
|
||||||
->addCheckbox('states', $states, ['new', 'in_progress'])
|
->addCheckbox('states', $states, ['new', 'in_progress'])
|
||||||
->build();
|
->build();
|
||||||
|
@ -27,8 +27,10 @@
|
|||||||
{% block css %}
|
{% block css %}
|
||||||
{{ parent() }}
|
{{ parent() }}
|
||||||
{{ encore_entry_link_tags('page_task_list') }}
|
{{ encore_entry_link_tags('page_task_list') }}
|
||||||
|
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block js %}
|
{% block js %}
|
||||||
{{ parent() }}
|
{{ parent() }}
|
||||||
{{ encore_entry_script_tags('page_task_list') }}
|
{{ encore_entry_script_tags('page_task_list') }}
|
||||||
|
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -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_COURSE: Créer une tâche pour un parcours
|
||||||
CHILL_TASK_TASK_CREATE_FOR_PERSON: Créer une tâche pour un usager
|
CHILL_TASK_TASK_CREATE_FOR_PERSON: Créer une tâche pour un usager
|
||||||
|
|
||||||
|
filter:
|
||||||
|
Filter on user: Filtrer par utilisateur/ utilisatrice
|
||||||
|
Loading…
x
Reference in New Issue
Block a user