<?php
namespace App\Controller\Website;
use App\Form\Website\Type\Authentication\ConnectionType;
use App\Form\Website\Type\Authentication\ForgotPasswordType;
use App\Form\Website\Type\Authentication\ResetPasswordType;
use App\Form\Website\Type\Authentication\SubscriptionType;
use App\Helper\Security\SecurityHelper;
use Croisiland\CommonBundle\Provider\SuluUrlProvider;
use Sulu\Component\Content\Compat\StructureInterface;
class ConnectionScreenController extends BaseWebsiteController
{
private const FORM_TYPES = [
'connection' => ConnectionType::class,
'connection_commercial_proposition' => ConnectionType::class,
'forgot_password' => ForgotPasswordType::class,
'subscription' => SubscriptionType::class,
'reset_password' => ResetPasswordType::class,
];
public function __construct(private readonly SuluUrlProvider $suluUrlProvider,
private readonly SecurityHelper $securityHelper)
{
}
public function indexAction(StructureInterface $structure, $preview = false, $partial = false)
{
// Récupération de la requête via le container
$request = $this->container->get('request_stack')->getCurrentRequest();
// Récupération du type de formulaire sélectionné
$formType = null;
try {
$formType = $structure->getPropertyValue('formType');
} catch (\InvalidArgumentException $exception) {
$formType = 'connection'; // Valeur par défaut
}
// Vérification que le type de formulaire existe
if (!isset(self::FORM_TYPES[$formType])) {
$formType = 'connection'; // Fallback sur connection
}
// Création du formulaire correspondant
$formClass = self::FORM_TYPES[$formType];
$form = $this->createForm($formClass);
// Traitement de la soumission du formulaire
if ($request) {
$form->handleRequest($request);
}
// Si le formulaire est soumis et valide
if ($form->isSubmitted() && $form->isValid()) {
}
$emailParam = $request?->query->get('email');
$email = $emailParam !== null
? (str_contains($emailParam, '@') ? $emailParam : "Erreur : L'email est invalide")
: "Erreur : L'email est manquant";
$attributes = array_merge($this->getSharedLayoutFormViews(), [
'form' => $form->createView(),
'formType' => $formType,
'email' => $email,
]);
$response = $this->renderStructure(
$structure,
$attributes,
$preview,
$partial
);
if ($this->suluUrlProvider->generateUrl('customer_logout_confirmation') === $request?->getUri()) {
$this->securityHelper->removeCustomerToken($response);
}
return $response;
}
}