<?php
namespace App\Form;
use App\Model\AskRegistration;
use App\Service\User\FunctionsHelper;
use Oz\ApiNvl\Provider\UserProvider;
use Oz\Toolboxe\Form\Type\RecaptchaType;
use Psr\Cache\InvalidArgumentException;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Contracts\Cache\ItemInterface;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
/**
*
*/
class AskRegistrationType extends AbstractType
{
/**
* @var UserProvider
*/
private $userProvider;
/**
* @var FilesystemAdapter
*/
private $cache;
/**
* @param UserProvider $userProvider
*/
public function __construct(UserProvider $userProvider)
{
$this->userProvider = $userProvider;
$this->cache = new FilesystemAdapter();
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*
* @return void
* @throws ClientExceptionInterface
* @throws DecodingExceptionInterface
* @throws RedirectionExceptionInterface
* @throws ServerExceptionInterface
* @throws TransportExceptionInterface
*/
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email', TextType::class, [
'label' => 'Email',
'required' => false,
'attr' => [
'placeholder' => 'louis.durand@monsite.fr',
],
])
->add('civility', ChoiceType::class, [
'label' => 'Civilité',
'required' => true,
'choices' => [
'Monsieur' => 1,
'Madame' => 0,
],
])
->add('lastname', TextType::class, [
'label' => 'Nom',
'required' => false,
'attr' => [
'placeholder' => 'Durand',
],
])
->add('firstname', TextType::class, [
'label' => 'Prénom',
'required' => false,
'attr' => [
'placeholder' => 'Louis',
],
])
->add('phone', TextType::class, [
'label' => 'Téléphone',
'required' => false,
'attr' => [
'placeholder' => '0545234589',
],
])
// ->add('fonction', TextType::class, [
// 'label' => 'Fonction',
// 'required' => false,
// 'attr' => [
// 'placeholder' => 'Responsable des ventes',
// ],
// ])
->add('fonction', ChoiceType::class, [
'label' => 'Fonction',
'required' => false,
'placeholder' => 'Choisir une fonction',
'choices' => $this->getFunctions(),
])
->add('company', TextType::class, [
'label' => 'Société',
'required' => false,
'attr' => [
'placeholder' => 'Toyota',
],
])
// ->add('adresse', TextareaType::class, [
// 'label' => 'Adresse',
// 'required' => false,
// 'attr' => [
// 'placeholder' => "17 rue du champ de foire\nSaint germain",
// ],
// ])
->add('siret', TextType::class, [
'label' => 'N° Siret',
'required' => false,
'attr' => [
'placeholder' => '230457856',
],
])
->add('recatpchaValue', RecaptchaType::class);
}
/**
* @return array
* @throws InvalidArgumentException
*/
private function getFunctions(): array
{
return $this->cache->get('user_functions', function (ItemInterface $item) {
$item->expiresAfter(3600);
$choices = [];
$response = $this->userProvider->getFonctions();
if (200 !== $response->getStatusCode()) {
return $choices;
}
foreach ($response->toArray() as $rawFunction) {
$choices[$rawFunction['caption']] = $rawFunction['caption'];
}
asort($choices);
return $choices;
});
}
/**
* @param OptionsResolver $resolver
*
* @return void
*/
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => AskRegistration::class,
]);
}
}