src/Controller/BuildingReportingController.php line 31

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Building;
  4. use App\Entity\BuildingReportingHistory;
  5. use App\Form\BuildingReportingFormType;
  6. use App\Services\Mails\Mails;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Psr\Log\LoggerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. class BuildingReportingController extends AbstractController
  15. {
  16.     private UrlGeneratorInterface $urlGenerator;
  17.     public function __construct(UrlGeneratorInterface $urlGenerator)
  18.     {
  19.         $this->urlGenerator $urlGenerator;
  20.     }
  21.     #[Route(path: [
  22.         "fr" => "/building/reporting/{id}",
  23.         "en" => "/en/building/reporting/{id}",
  24.     ], name'building_reporting')]
  25.     public function add(Building $buildingRequest $requestEntityManagerInterface $entityManagerMails $mailsLoggerInterface $logger): Response {
  26.         $buildingReporting = new BuildingReportingHistory();
  27.         $form $this->createForm(BuildingReportingFormType::class, $buildingReporting);
  28.         $form->handleRequest($request);
  29.         if ($form->isSubmitted() && $form->isValid()) {
  30.             
  31.             try {
  32.                 $buildingReporting->setBuilding($building);
  33.                 $buildingReporting->setUser($this->getUser());
  34.                 $buildingReporting->setCity($building->getCityEntity());
  35.                 $buildingReporting->setCountry($building->getCityEntity()->getCountry());
  36.                 $buildingReporting->setNumberId($building->getNumberId());
  37.                 $buildingReporting->setPostalCode($building->getPostalCode());
  38.                 $buildingReporting->setStreet($building->getStreet());
  39.                 $buildingReporting->setNumberStreet($building->getStreetNumber());
  40.                 $buildingReporting->setCreatedAt(new \DateTimeImmutable('now', new \DateTimeZone('Europe/Paris')));
  41.                 $entityManager->persist($buildingReporting);
  42.                 $entityManager->flush();
  43.                 
  44.                 $formData $form->getData();
  45.                 $urlBuilding $this->urlGenerator->generate('detail_building',['id' => $buildingReporting->getBuilding()->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  46.                 $image = !empty($docs) ? end($docs)->getImageFile() : null;
  47.                 $email $mails->createEmail('mails/building_report/signal.html.twig', [
  48.                     'type' => $formData->getType(),
  49.                     'number' => $formData->getNumber(),
  50.                     'details' => $formData->getDetail(),
  51.                     'urlBuilding' => $urlBuilding,
  52.                     'imageUrl' => $image,
  53.                 ])
  54.                 ->to('geraldlegoff@appyness.fr')
  55.                 ->cc('contact@roomlers.com''julie@roomlers.com')
  56.                 ->subject('Un bien a été signalé !');
  57.                 $mails->send($email);
  58.                 $this->addFlash('success''Votre signalement a été envoyé avec succès.');
  59.                 
  60.             } catch (\Exception $e) {
  61.                 $this->addFlash('error''Erreur lors de l\'envoi: ' $e->getMessage());
  62.                 
  63.             }
  64.             return $this->redirectToRoute('detail_building', ['id' => $building->getId()]);
  65.         }
  66.         $currentUser $this->getUser();
  67.         return $this->render('building_reporting/index.html.twig', [
  68.             'form' => $form->createView(),
  69.             'building' => $building,
  70.             'user' => $currentUser,
  71.         ]);
  72.     }
  73. }