<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Form\Type;
use App\Form\DataTransformer\MessageTransformer;
use App\Helper\TransProvider;
use App\Services\TelephoneInternational;
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints as Recaptcha;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\{
HiddenType,
TextareaType,
TextType,
ChoiceType
};
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Validator\Constraints\Nom;
use App\Validator\Constraints\Prenom;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\{
NotBlank,
Length
};
/**
* Description of ContactezDirectementMembreExpertsType
*
* @author mehrez
*/
class ContactezDirectementMembreExpertsType extends AbstractType {
/**
* @var MessageTransformer
*/
private $messageTransformer;
/**
* @var TelephoneInternational
*/
private $telephoneInternational;
/**
* @var TransProvider
*/
private $transProvider;
/**
* @param TransProvider $transProvider
* @param MessageTransformer $messageTransformer
* @param TelephoneInternational $telephoneInternational
*/
public function __construct(TransProvider $transProvider, MessageTransformer $messageTransformer, TelephoneInternational $telephoneInternational) {
$this->messageTransformer = $messageTransformer;
$this->telephoneInternational = $telephoneInternational;
$this->transProvider = $transProvider;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
* @return void
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('nom', TextType::class,
[
"constraints" => [
new NotBlank([
"message" => "le champ nom est obligatoire"
]),
new Nom()
],
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
],
]
)
->add('prenom', TextType::class,
[
"constraints" => [
new NotBlank([
"message" => "le champ prenom est obligatoire",
]),
new Prenom()
],
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
],
]
)
->add('mail', TextType::class,
[
"constraints" => [
new NotBlank(["message" => "le champ mail est obligatoire"]),
new Assert\Email(["message" => "l'adresse mail saisie est invalide"]),
],
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
],
]
)
->add('telephone', TextType::class, [
"constraints" => [
new NotBlank(["message" => "le champ telephone est obligatoire"])
]
])
->add('indicatif', ChoiceType::class, [
'choices' => $this->telephoneInternational->listIndicatifChoiceForm(),
'attr' => ['class' => 'form-control'],
'choice_attr' => function ($key, $val, $index) {
return ($key == "") ? ['disabled' => 'disabled'] : [];
},
'data' => array_values($this->telephoneInternational->listIndicatifChoiceForm())[0]
]
)
->add('message', TextareaType::class, [
"constraints" => [
new NotBlank(["message" => "le champ message est obligatoire"]),
new Assert\Length(['max' => 3000, 'maxMessage' => "le champ message renseigné est trop long"])
],
"attr" => [
"autocomplete" => "off", "rows" => 8,
"class" => "form-control"
]
])->addViewTransformer($this->messageTransformer, true)
->add('recaptcha', EWZRecaptchaType::class,
[
"constraints" => [
new Recaptcha\IsTrue(["message" => "captcha invalide"]),
],
'mapped' => false,
'language' => $this->transProvider->getLocale()
]
)
->add('id_service_prestataire', HiddenType::class)
->add('id_membre', HiddenType::class)
->add('lang', HiddenType::class)
;
}
/**
* @param OptionsResolver $resolver
* @return void
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'data_class' => null,
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
}
/**
* @return string
*/
public function getBlockPrefix() { // pour unifier avec les inputs definis dans html
return 'form';
}
}