diff --git a/.changes/unreleased/UX-20251119-153706.yaml b/.changes/unreleased/UX-20251119-153706.yaml new file mode 100644 index 000000000..e2d32d425 --- /dev/null +++ b/.changes/unreleased/UX-20251119-153706.yaml @@ -0,0 +1,6 @@ +kind: UX +body: Alphabetically order userJobs and mainLocations within user creation form +time: 2025-11-19T15:37:06.393470745+01:00 +custom: + Issue: "470" + SchemaChange: No schema change diff --git a/src/Bundle/ChillMainBundle/Form/UserType.php b/src/Bundle/ChillMainBundle/Form/UserType.php index 019839961..576f64d74 100644 --- a/src/Bundle/ChillMainBundle/Form/UserType.php +++ b/src/Bundle/ChillMainBundle/Form/UserType.php @@ -18,6 +18,7 @@ use Chill\MainBundle\Entity\UserJob; use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillPhoneNumberType; use Chill\MainBundle\Form\Type\PickCivilityType; +use Chill\MainBundle\Repository\UserJobRepository; use Chill\MainBundle\Templating\TranslatableStringHelper; use Doctrine\ORM\EntityRepository; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -36,7 +37,7 @@ use Symfony\Component\Validator\Constraints\Regex; class UserType extends AbstractType { - public function __construct(private readonly TranslatableStringHelper $translatableStringHelper, protected ParameterBagInterface $parameterBag) {} + public function __construct(private readonly TranslatableStringHelper $translatableStringHelper, protected ParameterBagInterface $parameterBag, private readonly UserJobRepository $userJobRepository) {} public function buildForm(FormBuilderInterface $builder, array $options) { @@ -80,12 +81,7 @@ class UserType extends AbstractType 'placeholder' => 'choose a job', 'class' => UserJob::class, 'choice_label' => fn (UserJob $c) => $this->translatableStringHelper->localize($c->getLabel()), - 'query_builder' => static function (EntityRepository $er) { - $qb = $er->createQueryBuilder('uj'); - $qb->where('uj.active = TRUE'); - - return $qb; - }, + 'choices' => $this->loadAndSortUserJobs(), ]) ->add('mainLocation', EntityType::class, [ 'label' => 'Main location', @@ -96,6 +92,7 @@ class UserType extends AbstractType 'query_builder' => static function (EntityRepository $er) { $qb = $er->createQueryBuilder('l'); $qb->orderBy('l.locationType'); + $qb->orderBy('l.name', 'ASC'); $qb->where('l.availableForUsers = TRUE'); return $qb; @@ -155,6 +152,20 @@ class UserType extends AbstractType } } + private function loadAndSortUserJobs(): array + { + $items = $this->userJobRepository->findBy(['active' => true]); + + usort( + $items, + fn ($a, $b) => mb_strtolower($this->translatableStringHelper->localize($a->getLabel())) + <=> + mb_strtolower($this->translatableStringHelper->localize($b->getLabel())) + ); + + return $items; + } + /** * @param OptionsResolverInterface $resolver */