<?php
namespace App\Controller;
use App\Entity\Event;
use App\Entity\Formulaire;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="app_default")
*/
public function index(): Response
{
return $this->render('default/index.html.twig');
}
/**
* @Route("/formulaire", name="formulaire")
*/
public function step1(): Response
{
return $this->render('default/formulaire.html.twig');
}
/**
* @Route("/formulaire/submit", name="form.submit", methods={"POST"})
*/
public function submit(Request $request, EntityManagerInterface $em): Response
{
$email = $request->get('email');
// Vérification de l'email déjà utilisé
$existing = $em->getRepository(Formulaire::class)->findOneBy(['email' => $email]);
if ($existing) {
$this->addFlash('email_error', 'Cette adresse email est déjà utilisée.');
return $this->redirectToRoute('formulaire'); // Adapte le nom de la route si nécessaire
}
$form = new Formulaire();
$event = $em->getRepository(Event::class)->findOneBy(['id' =>1]);
$form->setEvent($event);
// Infos générales
$form->setLastEvent($request->get('last_event'));
$form->setCivility($request->get('civility'));
$form->setName($request->get('name'));
$form->setLastName($request->get('firstname'));
$form->setAdress($request->get('adress'));
$form->setCity($request->get('city'));
$form->setZip($request->get('zip'));
$form->setCountry($request->get('country'));
$form->setPhone($request->get('phone'));
$form->setMobile($request->get('mobile'));
$form->setEmail($request->get('email'));
$form->setConfirmationEmail($request->get('confirm_email'));
$form->setAge($request->get('age'));
$form->setBirthday($request->get('birthday'));
$form->setFamilySituation($request->get('family'));
$form->setNumberChildren($request->get('children'));
$form->setNationality($request->get('nationality'));
$form->setWeight($request->get('weight'));
$form->setSize($request->get('size'));
$form->setJob($request->get('job'));
// Personnalité
$form->setSport($request->get('sport'));
$form->setQuality($request->get('quality'));
$form->setFault($request->get('fault'));
$form->setYourselfInOneWord($request->get('oneword'));
$form->setPersonality($request->get('personality'));
$form->setExplainPersonality($request->get('why_personality'));
$form->setSwing($request->get('swing'));
// Réseaux sociaux
$form->setInstagram($request->get('instagram'));
$form->setInstagramFollows($request->get('instagram_followers'));
$form->setTiktok($request->get('tiktok'));
$form->setTiktokFollowers($request->get('tiktok_followers'));
$form->setFacebook($request->get('facebook'));
$form->setOtherSocial($request->get('othersocial'));
// Contact
$form->setBestTimeCall($request->get('best_time'));
// Motivations
//$form->setMotivation($request->get('motivation'));
$form->setAboutIt($request->get('about'));
$form->setCreatedAt(new \DateTime());
$form->setStatutCandidat(0); // 0 = en attente
// ==========================
// GESTION UPLOAD PHOTO / VIDÉO
// ==========================
$uploadDir = $this->getParameter('kernel.project_dir') . '/public/uploads';
$maxImageSize = 8 * 1024 * 1024; // 8 Mo
$maxVideoSize = 100 * 1024 * 1024; // 100 Mo
$allowedImageExtensions = ['jpg', 'jpeg', 'png'];
$allowedVideoExtensions = ['mp4', 'mov', 'avi', 'mkv'];
// Traitement photo 1
$photo = $request->files->get('photo_portrait');
if ($photo) {
if ($photo->getSize() > $maxImageSize) {
throw new \Exception('Image trop volumineuse. Max : 8 Mo');
}
$ext = $photo->guessExtension();
if (!in_array($ext, $allowedImageExtensions)) {
throw new \Exception('Format image non autorisé.');
}
$photoFilename = uniqid('photo_') . '.' . $ext;
$photo->move($this->getParameter('upload_directory'), $photoFilename);
$form->setPhoto($photoFilename);
}
// Traitement photo 2
$photo2 = $request->files->get('photo_silhouette');
if ($photo2) {
if ($photo2->getSize() > $maxImageSize) {
throw new \Exception('Image 2 trop volumineuse. Max : 8 Mo');
}
$ext = $photo2->guessExtension();
if (!in_array($ext, $allowedImageExtensions)) {
throw new \Exception('Format image non autorisé.');
}
$photo2Filename = uniqid('photo2_') . '.' . $ext;
$photo2->move($this->getParameter('upload_directory'), $photo2Filename);
$form->setPhoto2($photo2Filename);
}
// Traitement photo 3
$photo3 = $request->files->get('photo_personality');
if ($photo3) {
if ($photo3->getSize() > $maxImageSize) {
throw new \Exception('Image 3 trop volumineuse. Max : 8 Mo');
}
$ext = $photo3->guessExtension();
if (!in_array($ext, $allowedImageExtensions)) {
throw new \Exception('Format image non autorisé.');
}
$photo3Filename = uniqid('photo3_') . '.' . $ext;
$photo3->move($this->getParameter('upload_directory'), $photo3Filename);
$form->setPhoto3($photo3Filename);
}
// Traitement vidéo
/// dd($request->files->get('video_motivation'));
$video = $request->files->get('video_motivation');
// dd($video);
if ($video && $video->isValid()) {
if ($video->getSize() > $maxVideoSize) {
throw new \Exception('Vidéo trop volumineuse. Max : 100 Mo');
}
$ext = $video->guessExtension();
if (!in_array($ext, $allowedVideoExtensions)) {
throw new \Exception('Format vidéo non autorisé.');
}
$videoFilename = uniqid('video_') . '.' . $ext;
$video->move($this->getParameter('upload_directory'), $videoFilename);
$form->setMotivation($videoFilename);
}
$em->persist($form);
$em->flush();
return $this->redirectToRoute('kalina_success');
}
/**
* @Route("/formulaire/merci", name="kalina_success")
*/
public function success(): Response
{
return $this->render('default/success.html.twig');
}
/**
* @Route("/manager/formulaire/inscription", name="kalina.inscription")
*/
public function inscription(EntityManagerInterface $em)
{
$inscription = $em->getRepository(Formulaire::class)->findBy(['event'=>1],['id'=>'ASC']);
return $this->render('default/inscription.html.twig',
['inscription'=>$inscription]);
}
/**
* @Route("/manager/formulaire/inscription/{id}", name="kalina.inscription.view")
*/
public function show(EntityManagerInterface $em,$id)
{
$formulaireRepo = $em->getRepository(Formulaire::class);
$formulaire = $em->getRepository(Formulaire::class)->findOneBy(['id'=>$id]);
if (!$formulaire) {
throw $this->createNotFoundException('Formulaire non trouvé');
}
// Chercher l’inscription précédente (ID plus petit)
$prev = $formulaireRepo->createQueryBuilder('f')
->where('f.id < :currentId')
->setParameter('currentId', $id)
->orderBy('f.id', 'DESC')
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();
// Chercher l’inscription suivante (ID plus grand)
$next = $formulaireRepo->createQueryBuilder('f')
->where('f.id > :currentId')
->setParameter('currentId', $id)
->orderBy('f.id', 'ASC')
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();
return $this->render('default/inscription_show.html.twig', [
'formulaire' => $formulaire,
'prev' => $prev,
'next' => $next,
]);
}
/**
* @Route("/manager/formulaire/inscription/{id}/status/{status}", name="kalina.inscription.update_status", methods={"POST"})
*/
public function updateStatus(int $status, EntityManagerInterface $em,$id): Response
{
$formulaire = $em->getRepository(Formulaire::class)->findOneBy(['id'=>$id]);
$formulaire->setStatutCandidat($status);
$em->flush();
$this->addFlash('success', 'Statut mis à jour !');
return $this->redirectToRoute('kalina.inscription.view', ['id' => $formulaire->getId()]);
}
}