src/DcSiteBundle/Form/ServiceType.php line 24

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Form;
  3. use DcSiteBundle\Model\Form\ServiceForm;
  4. use DateTime;
  5. use Exception;
  6. use CoreBundle\Form\CoreFormsType;
  7. use DcSiteBundle\Form\Transformer\ServiceDataFormTransformer;
  8. use Symfony\Component\Form\CallbackTransformer;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use Symfony\Component\Form\Extension\Core\Type\DateType;
  11. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  12. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\Form\FormEvents;
  17. use Symfony\Component\Form\FormInterface;
  18. use Symfony\Component\Form\FormView;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class ServiceType extends CoreFormsType
  22. {
  23.     /**
  24.      * @param FormBuilderInterface $builder
  25.      * @param array $options
  26.      * @return int|void
  27.      * @throws Exception
  28.      */
  29.     public function buildForm(FormBuilderInterface $builder, array $options)
  30.     {
  31.         /** @var TranslatorInterface $Translator */
  32.         $Translator $options['translator'];
  33.         $defaultType $options['defaultType'];
  34.         parent::buildForm($builder$options);
  35.         $fullForm $options['fullForm'];
  36.         $communicationType $options['communication'];
  37.         $builder
  38.             ->add('dealer'HiddenType::class)
  39.             ->add('date_visit'TextType::class, [
  40.                 'label' => false,
  41.                 'mapped' => false,
  42.                 'attr' => [
  43.                     'placeholder' => $Translator->trans('form.visit_time', [],'dc_base'),
  44.                     'autocomplete' => "off",
  45.                     'class' => 'js-datepicker',
  46.                 ],
  47.             ])
  48.             ->add('mileage'IntegerType::class, [
  49.                 'label' => false,
  50.                 'mapped' => false,
  51.                 'required' => false,
  52.                 'attr' => [
  53.                     'placeholder' => $Translator->trans('form.mileage', [], 'dc_base'),
  54.                     'class' => 'mileage'
  55.                 ]
  56.             ])
  57.             ->add('reason'TextareaType::class, [
  58.                 'label' => false,
  59.                 'mapped' => false,
  60.                 'required' => false,
  61.                 'attr' => [
  62.                     'placeholder' => $Translator->trans('form.reason', [], 'dc_base')
  63.                 ]
  64.             ])
  65.             ->add('service_type'ChoiceType::class, [
  66.                 'label' => false,
  67.                 'required' => false,
  68.                 'mapped' => false,
  69.                 'data' => $defaultType,
  70.                 'placeholder' => $Translator->trans('form.service_type', [], 'dc_base'),
  71.                 'choices' => array_flip(ServiceForm::getTypeName($Translator->getLocale())),
  72.             ])
  73.             ->add('issue_year'DateType::class, [
  74.                 'required' => false,
  75.                 'mapped' => false,
  76.                 'placeholder' => $Translator->trans('form.issue_year', [], 'dc_base'),
  77.                 'widget' => 'single_text',
  78.                 'format' => 'yyyy',
  79.                 'label' => false,
  80.                 'html5' => false,
  81.                 'attr' => [
  82.                     'class' => 'js-datepicker-year',
  83.                 ],
  84.             ])
  85.         ;
  86.         if($communicationType) {
  87.             $builder
  88.                 ->add('communication'ChoiceType::class, [
  89.                         'label' => $Translator->trans('form.communication',[],'dc_base'),
  90.                         'required' => true,
  91.                         'mapped' => false,
  92.                         'data' => 'phone',
  93.                         'choices' => array_flip(['phone' => 'Телефон''email' => 'E-mail']),
  94.                         'expanded' => true,
  95.                         'multiple' => false,
  96.                         'attr' => [
  97.                             'class' => 'js-td-communication'
  98.                         ],
  99.                     ]
  100.                 );
  101.         }
  102.         if ($fullForm) {
  103.             $builder
  104.                 ->add('model'TextType::class, [
  105.                     'required' => false,
  106.                     'mapped' => false,
  107.                     'label' => false,
  108.                     'attr' => [
  109.                         'placeholder' => $Translator->trans('form.model_choose', [], 'dc_base'),
  110.                     ],
  111.                 ])
  112.                 ->add('commentary'TextareaType::class, [
  113.                     'required' => false,
  114.                     'mapped' => false,
  115.                     'label' => false,
  116.                     'attr' => [
  117.                         'placeholder' => $Translator->trans('form.comment', [], 'dc_base'),
  118.                         'rows' => 10
  119.                     ],
  120.                 ])
  121.                 ->add('vin_gos_nomer'TextType::class, [
  122.                     'required' => false,
  123.                     'mapped' => false,
  124.                     'label' => false,
  125.                     'attr' => [
  126.                         'placeholder' => $Translator->trans('form.vin_gos_nomer', [], 'dc_base'),
  127.                     ],
  128.                 ])
  129.             ;
  130.         }
  131.         $builder->get('date_visit')->addModelTransformer(new CallbackTransformer(
  132.            fn($dateAsObject) => (new DateTime($dateAsObject))->format('d.m.Y'),
  133.             function ($dateAsSting) {
  134.                 /** @var DateTime $dateAsObject */
  135.                 $dateAsSting str_replace('.''-'$dateAsSting);
  136.                return new DateTime($dateAsSting);
  137.             }
  138.         ));
  139.         $builder->addEventListener(FormEvents::SUBMIT, function ($event): void {
  140.             (new ServiceDataFormTransformer($event))->transform();
  141.         });
  142.     }
  143.     /**
  144.      * @param OptionsResolver $resolver
  145.      */
  146.     public function configureOptions(OptionsResolver $resolver)
  147.     {
  148.         parent::configureOptions($resolver);
  149.         $resolver->setDefault('captcha_type','service_form');
  150.         $resolver->setDefault('communication',false);
  151.         $resolver->setDefault('defaultType',false);
  152.         $resolver->setDefault('fullForm'false);
  153.     }
  154. }