<?php
namespace ClientBundle\Form;
use ClientBundle\DataTransformer\NumberIdTransformer;
use ClientBundle\Entity\Devis;
use Doctrine\Common\Persistence\ObjectManager;
use libphonenumber\PhoneNumberFormat;
use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
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\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrue as RecaptchaTrue;
use Symfony\Component\Validator\Constraints\NotBlank;
class DevisType extends AbstractType
{
private $options;
protected $em;
public function __construct(ObjectManager $em) {
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->options = $options;
$builder
->add('LastName', TextType::class, array("label" => "Nom", "constraints" => array( new NotBlank())))
->add('FirstName', TextType::class, array("label" => "Prénom", "constraints" => array( new NotBlank())))
->add('Mail', EmailType::class, array("label" => "Adresse mail", "error_bubbling" => false))
->add('Phone', PhoneNumberType::class, array("label" => "Votre numéro de mobile", "constraints" => array( new NotBlank()), 'format' => PhoneNumberFormat::INTERNATIONAL))
->add('PostalCode', TextType::class, array("label" => "Code postal", "constraints" => array( new NotBlank())))
->add('City', ChoiceType::class, array("label" => "Ville de l'événement", "auto_initialize" => false))
->add('type', EntityType::class, array(
'placeholder' => 'Choisissez ici votre type d\'événement',
'label' => "Type d'évènement",
'mapped' => true,
'required' => true,
'class' => 'AdminBundle\Entity\EventsType',
'choice_label' => 'name',
'choice_value' => 'id',
'expanded' => false,
'multiple' => false,
))
->add('Date', DateType::class, array('label' => "Date de l'évènement", 'widget' => 'single_text', 'format' => 'dd/MM/yyyy', "constraints" => array( new NotBlank())))
->add('Comment', TextareaType::class, array('label' => "Précisez-nous svp de quel type d’événement il s’agit, et du type de lieu si possible", 'required' => false))
->add('acceptRgpd', CheckboxType::class, [
'label' => "J'accepte de recevoir le sms et le devis par mail",
'required' => true,
])
->add('recaptcha', EWZRecaptchaType::class, array('label' => " ",
'attr' => array(
'options' => array(
'theme' => 'light',
'type' => 'image',
'size' => 'normal',
)
),
'mapped' => false,
'constraints' => array(
new RecaptchaTrue()
)
))
;;
$builder->get('City')
->addModelTransformer(new NumberIdTransformer($this->em, 'APIBundle:City'));
$ff = $builder->getFormFactory();
$func = function (FormEvent $e) use ($ff) {
$data = $e->getData();
$form = $e->getForm();
$choices = array();
if (!empty($data['City'])) {
$em = $this->options['entity_manager'];
$city = $em->getRepository("APIBundle:City")->findOneBy(array("id" => $data['City'], "cp" => $data['PostalCode']));
if ($city)
{
$choices = array($city->getName() => $city->getId());
}
}
$form->add($ff->createNamed('City', ChoiceType::class, null, array("auto_initialize" => false, "choices" => $choices
)));
};
$builder->addEventListener(FormEvents::PRE_SUBMIT, $func);
// $builder->addEventListener(FormEvents::PRE_SET_DATA, $func);
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$product = $event->getData();
$form = $event->getForm();
if ( $this->options['user']->isGranted('ROLE_ADMIN')) {
$form->add('shadow', CheckboxType::class, array(
'label' => "Envoyer le devis avec ma signature",
'mapped' => true,
'required' => false,
));
$form->add('full', CheckboxType::class, array(
'label' => "Afficher tous les groupes",
'mapped' => true,
'required' => false,
));
$form->add('SendSms', CheckboxType::class, array(
'label' => "Envoyer le SMS",
'mapped' => true,
'required' => false,
));
}
});
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired('entity_manager');
$resolver->setDefaults(array(
'data_class' => Devis::class,
'user' => null
));
}
}