src/Form/Survey/SurveyResultFormType.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Form\Survey;
  3. use App\Entity\Survey\Survey;
  4. use App\Entity\Survey\SurveyResult;
  5. use App\Entity\User\User;
  6. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  7. use Symfony\Component\Form\AbstractType;
  8. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  9. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  10. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  11. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  12. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\Form\Extension\Core\Type\TimeType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Validator\Constraints\NotBlank;
  18. class SurveyResultFormType extends AbstractType
  19. {
  20.     public function buildForm(FormBuilderInterface $builder, array $options): void
  21.     {
  22.         $labelAttr = [
  23.             'class' => 'text-gray-700 dark:text-gray-400'
  24.         ];
  25.         $inputAttrCollection = [
  26.             'text' => [
  27.                 'class' => 'block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray'
  28.             ],
  29.             'choice' => [
  30.                 'class' => 'block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray'
  31.             ],
  32.             'dateTime' => [
  33.                 'class' => 'w-full pl-8 pr-2 text-sm text-gray-700 placeholder-gray-600 bg-gray-100 border-0 rounded-md dark:placeholder-gray-500 dark:focus:shadow-outline-gray dark:focus:placeholder-gray-600 dark:bg-gray-700 dark:text-gray-200 focus:placeholder-gray-500 focus:bg-white focus:border-purple-300 focus:outline-none focus:shadow-outline-purple form-input'
  34.             ],
  35.             'button' => [
  36.                 'delete' => [
  37.                     'class' => 'buttonDelete block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-red-600 border border-transparent rounded-lg active:bg-red-600 hover:bg-red-700 focus:outline-none focus:shadow-outline-red'
  38.                 ],
  39.                 'back' => [
  40.                     'class' => 'buttonBack block w-full py-3 font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple'
  41.                 ]
  42.             ]
  43.         ];
  44.         $disabled $options['formStatus'] === 'view' true false;
  45.         $builder
  46.             ->add('id'IntegerType::class, [
  47.                 'label' => 'form.surveyResult.id.label',
  48.                 'label_attr' => $labelAttr,
  49.                 'disabled' => $disabled,
  50.                 'attr' => $inputAttrCollection['text']
  51.             ])
  52.             ->add('survey'EntityType::class, [
  53.                 'label' => 'form.surveyResult.survey.label',
  54.                 'label_attr' => $labelAttr,
  55.                 'class' => Survey::class,
  56.                 'choice_label' => function(?Survey $survey) {
  57.                     return sprintf('[%d] %s'$survey->getId(), $survey->getTitle());
  58.                 },
  59.                 'disabled' => $disabled,
  60.                 'attr' => $inputAttrCollection['choice']
  61.             ])
  62.             ->add('userIp'TextType::class, [
  63.                 'label' => 'form.surveyResult.userIp.label',
  64.                 'label_attr' => $labelAttr,
  65.                 'attr' => $inputAttrCollection['text'],
  66.                 'disabled' => $disabled
  67.             ])
  68.             ->add('userAgent'TextType::class, [
  69.                 'label' => 'form.surveyResult.userAgent.label',
  70.                 'label_attr' => $labelAttr,
  71.                 'attr' => $inputAttrCollection['text'],
  72.                 'disabled' => $disabled
  73.             ])
  74.             ->add('user'EntityType::class, [
  75.                 'label' => 'form.surveyResult.user.label',
  76.                 'label_attr' => $labelAttr,
  77.                 'required' => false,
  78.                 'class' => User::class,
  79.                 'choice_label' => function(?User $user) {
  80.                     return sprintf('[%d] %s %s (%s)'$user->getId(), $user->getLastname(), $user->getFirstname(), $user->getEmail());
  81.                 },
  82.                 'disabled' => $disabled,
  83.                 'attr' => $inputAttrCollection['choice']
  84.             ])
  85.             ->add('email'EmailType::class, [
  86.                 'label' => 'form.surveyResult.email.label',
  87.                 'label_attr' => $labelAttr,
  88.                 'attr' => $inputAttrCollection['text'],
  89.                 'disabled' => $disabled
  90.             ])
  91.             ->add('travelTime'TimeType::class, [
  92.                 'label' => 'form.surveyResult.travelTime.label',
  93.                 'label_attr' => $labelAttr,
  94.                 'input'  => 'timestamp',
  95.                 'with_seconds' => true,
  96.                 'disabled' => $disabled,
  97.                 'model_timezone' => 'UTC'
  98.             ])
  99.             ->add('progress'NumberType::class, [
  100.                 'label' => 'form.surveyResult.progress.label',
  101.                 'label_attr' => $labelAttr,
  102.                 'attr' => $inputAttrCollection['text'],
  103.                 'disabled' => $disabled
  104.             ])
  105.             ->add('surveyResultData'CollectionType::class, [
  106.                 'label' => 'form.surveyResult.surveyResultData.label',
  107.                 'label_attr' => $labelAttr,
  108.                 'entry_type' => SurveyResultDataFormType::class
  109.             ])
  110.             ->add('delete'ButtonType::class, [
  111.                 'attr' => $inputAttrCollection['button']['delete'],
  112.                 'label' => 'form.surveyResult.button.delete.label'
  113.             ])
  114.             ->add('back'ButtonType::class, [
  115.                 'attr' => $inputAttrCollection['button']['back'],
  116.                 'label' => 'form.surveyResult.button.back.label'
  117.             ])
  118.         ;
  119.     }
  120.     public function configureOptions(OptionsResolver $resolver)
  121.     {
  122.         $resolver->setDefaults([
  123.             'data_class' => SurveyResult::class,
  124.             'formStatus' => null
  125.         ]);
  126.     }
  127. }