mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-10-29 08:24:51 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			v4.4.2
			...
			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