<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Form\Type;
use App\Form\DataTransformer\MessageTransformer;
use App\Form\Models\ContactezNous;
use App\Helper\TransProvider;
use App\Helper\Utils;
use App\Services\TelephoneInternational;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\ChoiceList\ChoiceList;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Validator\Constraints\Emoji;
class ContactezNousType extends AbstractType {
/**
* @var MessageTransformer
*/
private $messageTransformer;
/**
* @var TelephoneInternational
*/
private $telephoneInternational;
/**
* @var TransProvider
*/
private $transProvider;
public function __construct(TransProvider $transProvider, MessageTransformer $messageTransformer, TelephoneInternational $telephoneInternational) {
$this->transProvider = $transProvider;
$this->messageTransformer = $messageTransformer;
$this->telephoneInternational = $telephoneInternational;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
* @return void
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('type_contact', ChoiceType::class, [
'choices' => $this->transChoice(FormChoices::typeContact()),
'attr' => ['v-model' => 'type_contact', 'class' => 'form-control']
])
->add('civilite', ChoiceType::class, [
'choices' => $this->transChoice(['M' => 'masculin', 'Mme' => 'feminin']),
'expanded' => true,
'multiple' => false,
])
->add('nom', TextType::class)
->add('prenom', TextType::class)
->add('email', TextType::class)
->add('telephone', TextType::class)
->add('indicatif',
ChoiceType::class,
[
'choices' => $this->telephoneInternational->listIndicatifChoiceForm(),
'attr' => ['class' => 'form-control'],
'choice_attr' => function ($key, $val, $index) {
return ($key == "") ? ['disabled' => 'disabled'] : [];
},
'data' => Utils::firstValInArray($this->telephoneInternational->listIndicatifChoiceForm())
]
)
->add('contenu_question',
TextareaType::class,
[
"required" => false,
"constraints" => [
new Emoji()
],
"attr" => [
"autocomplete" => "off",
"rows" => 15
]
]
)
->addViewTransformer($this->messageTransformer, true);
$builder->add('recaptcha', EWZRecaptchaType::class,
['mapped' => false, 'language' => $this->transProvider->getLocale()]
);
$builder->add('website', TextType::class, [// "website" semble légitime
'label' => 'Site web', // Label qui paraît normal
'required' => false,
'mapped' => false,
'attr' => [
'autocomplete' => 'off',
'tabindex' => '-1',
'class' => 'hp-field' // Nom de classe discret
]
]);
$builder->add('company', TextType::class, [// "website" semble légitime
'label' => 'company', // Label qui paraît normal
'required' => false,
'mapped' => false,
'attr' => [
'autocomplete' => 'off',
'tabindex' => '-1',
'class' => 'hp-field' // Nom de classe discret
]
]);
}
/**
* @param $var
* @return mixed|string
*/
private function transChoice($var) {
if (is_string($var)) {
$var = $this->transProvider
->translate($var, "", "M");
}
if (is_array($var)) {
foreach ($var as $key => $item) {
unset($var[$key]);
$key = $this->transProvider
->translate($key, "", "M");
$var[$key] = $item;
}
}
return $var;
}
/**
* @param OptionsResolver $resolver
* @return void
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'data_class' => ContactezNous::class,
'csrf_protection' => true,
'csrf_field_name' => '_token',
'csrf_token_id' => 'contact_form',
'allow_extra_fields' => true,
]);
}
/**
* @return string
*/
public function getBlockPrefix() { // pour unifier avec les inputs definis dans html
return 'form';
}
}