|  | @@ -0,0 +1,84 @@
 | 
											
												
													
														|  | 
 |  | +<?php
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +namespace App\Controller;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\HttpFoundation\Request;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\HttpFoundation\Response;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\Routing\Requirement\Requirement;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\Routing\Attribute\Route;
 | 
											
												
													
														|  | 
 |  | +use Doctrine\ORM\EntityManagerInterface;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Bridge\Twig\Mime\TemplatedEmail;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\Mime\Address;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\Mailer\MailerInterface;
 | 
											
												
													
														|  | 
 |  | +use Symfony\Component\Mime\Email;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +use App\Entity\PartyRequest;
 | 
											
												
													
														|  | 
 |  | +use App\Entity\Gamemaster;
 | 
											
												
													
														|  | 
 |  | +use App\Entity\Game;
 | 
											
												
													
														|  | 
 |  | +use App\Entity\Event;
 | 
											
												
													
														|  | 
 |  | +use App\Repository\GamemasterRepository;
 | 
											
												
													
														|  | 
 |  | +use App\Repository\GameRepository;
 | 
											
												
													
														|  | 
 |  | +use App\Form\PartyRequestType;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +final class PartyRequestController extends AbstractController
 | 
											
												
													
														|  | 
 |  | +{
 | 
											
												
													
														|  | 
 |  | +    #[Route('/party/request/{id}', name: 'app_party_request', requirements: ['id' => Requirement::UUID_V7], methods: ['GET', 'POST'])]
 | 
											
												
													
														|  | 
 |  | +    public function request(?Event $event, Request $request, GamemasterRepository $gamemasterRepository, GameRepository $gameRepository, EntityManagerInterface $manager, MailerInterface $mailer): Response
 | 
											
												
													
														|  | 
 |  | +    {
 | 
											
												
													
														|  | 
 |  | +        // Pas d'événement trouvé ?
 | 
											
												
													
														|  | 
 |  | +        if (!$event) {
 | 
											
												
													
														|  | 
 |  | +            $this->addFlash('danger', 'Aucun événement avec cet ID !');
 | 
											
												
													
														|  | 
 |  | +            $this->redirectToRoute('app_main');
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        // L'événement n'autorise pas les demandes ?
 | 
											
												
													
														|  | 
 |  | +        if (!$event->isEveryoneCanAskForGame()) {
 | 
											
												
													
														|  | 
 |  | +            $this->addFlash('danger', 'Cet événement n\'autorise pas les demandes.');
 | 
											
												
													
														|  | 
 |  | +            $this->redirectToRoute('app_main_booking', ['id' => $event->getId()]);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        // Pas d'utilisateur connecté ?
 | 
											
												
													
														|  | 
 |  | +        $user = $this->getUser();
 | 
											
												
													
														|  | 
 |  | +        if (!$user) {
 | 
											
												
													
														|  | 
 |  | +            $this->addFlash('danger', 'Les demandes nécessitent d\'être connecté(e).');
 | 
											
												
													
														|  | 
 |  | +            $this->redirectToRoute('app_main_booking', ['id' => $event->getId()]);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        // On génère un formulaire
 | 
											
												
													
														|  | 
 |  | +        $partyRequest = new PartyRequest();
 | 
											
												
													
														|  | 
 |  | +        $partyRequest->setEvent($event);
 | 
											
												
													
														|  | 
 |  | +        $partyRequest->setRequester($user);
 | 
											
												
													
														|  | 
 |  | +        $partyRequest->setDateRequest(new \Datetime('now'));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        $form = $this->createForm(PartyRequestForm::class, $partyRequest);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        // Traitement du formulaire
 | 
											
												
													
														|  | 
 |  | +        $form->handleRequest($request);
 | 
											
												
													
														|  | 
 |  | +        if ($form->isSubmitted() && $form->isValid()) {
 | 
											
												
													
														|  | 
 |  | +            $manager->persist($partyRequest);
 | 
											
												
													
														|  | 
 |  | +            $manager->flush();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            // Envoyer un mail
 | 
											
												
													
														|  | 
 |  | +            // Maintenant uniquement pour avoir l'ID
 | 
											
												
													
														|  | 
 |  | +            $email = (new TemplatedEmail())
 | 
											
												
													
														|  | 
 |  | +                ->from(new Address($_ENV['CONTACT_EMAIL'], $_ENV['CONTACT_NAME']))
 | 
											
												
													
														|  | 
 |  | +                ->to((string) $user->getEmail())
 | 
											
												
													
														|  | 
 |  | +                ->subject('Votre demande pour '.$event->getName())
 | 
											
												
													
														|  | 
 |  | +                ->htmlTemplate('party_request/request.email.html.twig')
 | 
											
												
													
														|  | 
 |  | +                ->textTemplate('party_request/request.email.txt.twig')
 | 
											
												
													
														|  | 
 |  | +                ->context([
 | 
											
												
													
														|  | 
 |  | +                    'partyRequest' => $partyRequest
 | 
											
												
													
														|  | 
 |  | +                ]);
 | 
											
												
													
														|  | 
 |  | +            $mailer->send($email);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            $this->addFlash('danger', 'Demande enregistrée, les gestionnaires y répondront prochainement.');
 | 
											
												
													
														|  | 
 |  | +            $this->redirectToRoute('app_main_booking', ['id' => $event.getId()]);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        return $this->render('party_request/_modal.request.html.twig', [
 | 
											
												
													
														|  | 
 |  | +            'form' => $form,
 | 
											
												
													
														|  | 
 |  | +            'partyRequest' => $partyRequest
 | 
											
												
													
														|  | 
 |  | +        ]);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +}
 |