src/App/Form/RecurrentJobsSearchParametersType.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Profile\JobseekerProfile;
  4. use App\Entity\RecurrentJob;
  5. use App\Entity\RecurrentJobsSearch\RecurrentJobsSearchParameters;
  6. use App\Service\LocationService;
  7. use App\Value\PossibleAvailabilitiesValue;
  8. use App\Value\ZipcodeRadiusesValue;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\Form\FormEvent;
  15. use Symfony\Component\Form\FormEvents;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. class RecurrentJobsSearchParametersType extends AbstractType
  18. {
  19. private LocationService $locationService;
  20. public function __construct(LocationService $locationService)
  21. {
  22. $this->locationService = $locationService;
  23. }
  24. public function buildForm(FormBuilderInterface $builder, array $options)
  25. {
  26. $builder->add(
  27. 'filterZipcodeRadius',
  28. ChoiceType::class,
  29. [
  30. 'choices' => array_flip(ZipcodeRadiusesValue::ALL_ASSOCIATIVE),
  31. 'choice_label' => function (int $number): string {
  32. return $number . 'km';
  33. },
  34. 'label' => '',
  35. 'data' => ZipcodeRadiusesValue::DEFAULT,
  36. ],
  37. );
  38. $builder->add(
  39. 'filterZipcode',
  40. TextType::class,
  41. [
  42. 'label' => 'recurrent_jobs_search.form_page.zipcode_label'
  43. ]
  44. );
  45. $builder->add(
  46. 'filterSearchterm',
  47. TextType::class,
  48. [
  49. 'label' => 'recurrent_jobs.new_page.occupational_field_searchterm_placeholder'
  50. ]
  51. );
  52. $builder->add(
  53. 'filterAlreadyContacted',
  54. CheckboxType::class,
  55. [
  56. 'label' => 'recurrent_jobs.new_page.already_contacted',
  57. 'required' => false,
  58. 'data' => true
  59. ]
  60. );
  61. $builder->add(
  62. 'filterRequiredCareerLevels',
  63. ChoiceType::class,
  64. [
  65. 'required' => false,
  66. 'expanded' => true,
  67. 'multiple' => true,
  68. 'choices' => RecurrentJob::POSSIBLE_CAREER_LEVEL_AVAILABLE_FOR_SELECTION_WITH_TRANSLATION_MAPPING,
  69. 'data' => RecurrentJob::POSSIBLE_CAREER_LEVEL_AVAILABLE_FOR_SELECTION_WITH_TRANSLATION_MAPPING
  70. ]
  71. );
  72. $builder->add(
  73. 'filterRequiredEmploymentTypes',
  74. ChoiceType::class,
  75. [
  76. 'required' => false,
  77. 'expanded' => true,
  78. 'multiple' => true,
  79. 'choices' => RecurrentJob::POSSIBLE_EMPLOYMENT_TYPE_AVAILABLE_FOR_SELECTION_WITH_TRANSLATION_MAPPING,
  80. 'data' => RecurrentJob::POSSIBLE_EMPLOYMENT_TYPE_AVAILABLE_FOR_SELECTION_WITH_TRANSLATION_MAPPING
  81. ]
  82. );
  83. $builder->add(
  84. 'filterRequiredExperience',
  85. ChoiceType::class,
  86. [
  87. 'label' => 'recurrent_jobs_search.form_page.experience_label',
  88. 'choices' => JobseekerProfile::POSSIBLE_EXPERIENCES_AVAILABLE_FOR_SELECTION_WITH_TRANSLATION_MAPPING,
  89. 'expanded' => true,
  90. 'multiple' => false
  91. ]
  92. );
  93. $builder->add(
  94. 'filterSuperiorSalary',
  95. CheckboxType::class,
  96. [
  97. 'label' => 'Bestbezahlte Jobs zuerst anzeigen',
  98. 'required' => false,
  99. 'data' => false
  100. ]
  101. );
  102. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  103. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  104. $builder->add(
  105. 'filterIsRequiredOn' . $weekday . $timeOfDay,
  106. CheckboxType::class,
  107. [
  108. 'required' => false,
  109. 'label' => false
  110. ]
  111. );
  112. }
  113. }
  114. $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']);
  115. }
  116. public function configureOptions(OptionsResolver $resolver)
  117. {
  118. $resolver->setDefaults([
  119. 'data_class' => RecurrentJobsSearchParameters::class,
  120. 'csrf_protection' => false,
  121. ]);
  122. }
  123. public function onPreSubmit(FormEvent $event)
  124. {
  125. $this->locationService->normalizeZipcode($event, 'filterZipcode');
  126. }
  127. }