<?php
namespace App\EventSubscriber;
use App\Repository\AffiliateRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class AffiliateRequestSubscriber implements EventSubscriberInterface
{
private AffiliateRepository $affiliateRepository;
public function __construct(AffiliateRepository $affiliateRepository)
{
$this->affiliateRepository = $affiliateRepository;
}
public static function getSubscribedEvents(): array
{
return [
FormEvents::SUBMIT => 'onSubmit',
];
}
public function onSubmit(FormEvent $event): void
{
$form = $event->getForm();
$affiliate = $form->get('affiliate')->getData();
$code = $form->get('code')->getData();
$date = $form->get('date')->getData();
if (empty($affiliate) && empty($code)) {
$form->get('affiliate')->addError(new FormError('Vous devez choisir un affilié ou remplir le code affilié.'));
$form->get('code')->addError(new FormError('Vous devez choisir un affilié ou remplir le code affilié.'));
}
if (empty($date)) {
$form->get('date')->addError(new FormError('La date ne doit pas être vide.'));
}
if (!empty($code)) {
$existingAffiliate = $this->affiliateRepository->findOneBy(['code' => $code]);
if (!$existingAffiliate) {
$form->get('code')->addError(new FormError('Le code fourni ne correspond à aucun affilié.'));
}
}
}
}