<?php
namespace App\Form;
use App\Entity\WidgetRequest;
use App\Form\Transform\DomainsTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class WidgetForm extends AbstractType
{
const WIDGETS_FILTER_BY_SUBNETWORKS = [
'HORAIRE_INTEGRE',
'HORAIRE_REDIRECTION_SIM',
'HORAIRE_REDIRECTION_SITE_SITE',
'HORAIRE_REDIRECTION_PAGE_PAGE',
'TRAFIC_INTEGRE',
'FULL'
];
public function buildForm(FormBuilderInterface $builder, array $options)
{
$subNetworks = $options['subNetworks'];
$builder
->add('name', TextType::class, ['label' => 'form.brandName', 'required' => true])
->add('email', EmailType::class, ['label' => 'form.email', 'required' => true])
->add('widgetType', ChoiceType::class, [
'required' => true,
'label' => 'form.widgetType',
'placeholder' => 'form.select_option',
'choices' => [
'widget.journey.integrated' => 'ITINERAIRE_INTEGRE',
'widget.journey.redirect_sim' => 'ITINERAIRE_REDIRECTION_SIM',
'widget.journey.redirect_internal' => 'ITINERAIRE_REDIRECTION_PAGE_PAGE',
'widget.schedule.integrated' => 'HORAIRE_INTEGRE',
'widget.schedule.redirect_sim' => 'HORAIRE_REDIRECTION_SIM',
'widget.schedule.redirect_internal' => 'HORAIRE_REDIRECTION_PAGE_PAGE',
'widget.traffic.integrated' => 'TRAFIC_INTEGRE',
'widget.products.full' => 'FULL',
'widget.products.full_except_traffic' => 'FULL_EXCEPT_TRAFFIC',
'widget.products.full_except_traffic_redirection_external' => 'FULL_EXCEPT_TRAFFIC_REDIRECTION_SIM'
],
'choice_attr' => function ($choice) {
if (in_array($choice, self::WIDGETS_FILTER_BY_SUBNETWORKS)) {
return ['class' => 'is-Show-SubNetwork'];
}
return [];
}
])
->add('subNetworks', ChoiceType::class, [
'required' => false,
'label' => 'form.subNetworks',
'choices' => $subNetworks,
'expanded' => false,
'multiple' => true
])
->add('domain', TextareaType::class, [
'label' => 'form.domain',
'required' => true
])
->add('start', TextType::class, [
'label' => 'journey.departure',
'required' => false,
'attr' => [
'placeholder' => 'journey.departure_placeholder'
]
])
->add('startId', HiddenType::class)
->add('end', TextType::class, [
'label' => 'journey.arrival',
'required' => false,
'attr' => [
'placeholder' => 'journey.arrival_placeholder'
]
])
->add('endId', HiddenType::class)
->add('prefilled', ChoiceType::class, [
'required' => true,
'label' => 'widget.prefilled',
'choices' => [
'widget.no' => 'NO',
'widget.departure' => 'DEPARTURE',
'widget.arrival' => 'ARRIVAL',
],
])
->add('customizeMap', CheckboxType::class, [
'required' => false,
'mapped' => false,
'label' => 'widget.customize_map',
'attr' => [
'checked' => false,
],
])
->add('latitude', NumberType::class, [
'required' => false,
'label' => 'widget.latitude',
'attr' => [
'data-is-map-param' => 'lat',
],
])
->add('longitude', NumberType::class, [
'required' => false,
'label' => 'widget.longitude',
'attr' => [
'data-is-map-param' => 'lng',
],
])
->add('zoom', NumberType::class, [
'required' => false,
'label' => 'widget.zoom',
'attr' => [
'data-is-map-param' => 'zoom',
],
]);
// Adding a transformer to remove trailing slashes from domains
$builder->get('domain')->addModelTransformer(new DomainsTransformer);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired([
'subNetworks'
]);
$resolver->setDefaults(
[
'data_class' => WidgetRequest::class
]
);
}
}