mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-03 18:58:24 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			v2.x
			...
			add_user_f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 714d0ed991 | |||
| ed96017c49 | 
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20230607-194040.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20230607-194040.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: Add the possibility to filter tasks on the basis of the person involved. Expansion
 | 
			
		||||
  of FilterOrderHelper.
 | 
			
		||||
time: 2023-06-07T19:40:40.506964817+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: ""
 | 
			
		||||
@@ -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':
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,35 @@
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
            {% 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|length > 0 %}
 | 
			
		||||
                {% for checkbox_name, options in form.checkboxes %}
 | 
			
		||||
@@ -61,5 +90,6 @@
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
        {% endif %}
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
{{ form_end(form) }}
 | 
			
		||||
 
 | 
			
		||||
@@ -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'];
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
 
 | 
			
		||||
@@ -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 %}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user