|
@@ -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
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+}
|