src/Controller/DemandeController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Demande;
  4. use App\Entity\DemandeJustificationProtection;
  5. use App\Entity\DemandeNote;
  6. use App\Entity\FormUser;
  7. use App\Entity\Meeting;
  8. use App\Entity\User;
  9. use App\Form\DemandeNoteType;
  10. use App\Form\DemandeType;
  11. use App\Form\MeetingType;
  12. use App\Repository\MeetingRepository;
  13. use App\Repository\UserRepository;
  14. use App\Security\EmailVerifier;
  15. use App\Service\NotificationManager;
  16. use Knp\Snappy\Pdf;
  17. use Kricha\DoctrineAuditBundle\Reader\AuditReader;
  18. use Symfony\Component\Mime\Address;
  19. use App\Entity\DemandePhotoBatiment;
  20. use App\Entity\JustifiantApprobationSpontane;
  21. use App\Entity\JustifiantPropriete;
  22. use App\Repository\DemandeRepository;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Routing\Generator\UrlGenerator;
  29. use Symfony\Component\String\Slugger\SluggerInterface;
  30. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  31. #[Route('/demande')]
  32. class DemandeController extends BaseController
  33. {
  34.     private EmailVerifier $emailVerifier;
  35.     public function __construct(EmailVerifier $emailVerifier)
  36.     {
  37.         $this->emailVerifier $emailVerifier;
  38.     }
  39.     #[Route('/'name'app_demande_index'methods: ['GET'])]
  40.     public function index(DemandeRepository $demandeRepository): Response
  41.     {
  42.         $demandes = [];
  43.         $isAdmin false;
  44.         if ($this->isGranted('ROLE_ADMIN')) {
  45.             $demandes $demandeRepository->findBy([], ['id' => 'DESC']);
  46.             $isAdmin true;
  47.         } else if ($this->isGranted('ROLE_USER')) {
  48.             $demandes $this->getUser()->getDemandes();
  49.             $isAdmin false;
  50.         }
  51.         return $this->render('demande/index.html.twig', [
  52.             'demandes' => $demandes,
  53.             'isAdmin' => $isAdmin,
  54.             'status_array' => array_flip(FormUser::STATUS_ARRAY),
  55.         ]);
  56.     }
  57.     #[Route('/new'name'app_demande_new'methods: ['GET''POST'])]
  58.     public function new(
  59.         Request $request,
  60.         EntityManagerInterface $entityManager,
  61.         SluggerInterface $slugger,
  62.         NotificationManager $notificationManager,
  63.     ): Response
  64.     {
  65.         $demande = new Demande();
  66.         $form $this->createForm(DemandeType::class, $demande);
  67.         $form->handleRequest($request);
  68.         if ($form->isSubmitted()/*  && $form->isValid() */) {
  69.             //dd($form->get('JustificationApprobationSpontane')->getData());
  70.             if (!file_exists($this->getParameter('demande_directory'))) {
  71.                 mkdir($this->getParameter('demande_directory'), 777true);
  72.             }
  73.             $demande->setUser($this->getUser());
  74.             $demande->setTypeEtude(explode(',',$request->request->get('TypeEtudes')));
  75.             $JustificationApprobationSpontane $form->get('JustificationApprobationSpontane')->getData();
  76.             foreach ($JustificationApprobationSpontane as $file) {
  77.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  78.                 $sourceFileName $slugger->slug($originalFilename) . '-' uniqid() . '.' $file->guessExtension();
  79.                 try {
  80.                     copy($file$this->getParameter('demande_directory') . $sourceFileName);
  81.                     $JustifiantApprobationSpontane = new JustifiantApprobationSpontane();
  82.                     $JustifiantApprobationSpontane->setDemande($demande);
  83.                     $JustifiantApprobationSpontane->setSource($sourceFileName);
  84.                     $entityManager->persist($JustifiantApprobationSpontane);
  85.                 } catch (FileException $e) {
  86.                     dd($e);
  87.                 }
  88.             }
  89.             $JustificationDuPropriete $form->get('JustificationDuPropriete')->getData();
  90.             foreach ($JustificationDuPropriete as $file) {
  91.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  92.                 $sourceFileName $slugger->slug($originalFilename) . '-' uniqid() . '.' $file->guessExtension();
  93.                 try {
  94.                     copy($file$this->getParameter('demande_directory') . $sourceFileName);
  95.                     $JustifiantPropriete = new JustifiantPropriete();
  96.                     $JustifiantPropriete->setDemande($demande);
  97.                     $JustifiantPropriete->setSource($sourceFileName);
  98.                     $entityManager->persist($JustifiantPropriete);
  99.                 } catch (FileException $e) {
  100.                     dd($e);
  101.                 }
  102.             }
  103.             $PhotoBatiment $form->get('PhotoBatiment')->getData();
  104.             foreach ($PhotoBatiment as $file) {
  105.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  106.                 $sourceFileName $slugger->slug($originalFilename) . '-' uniqid() . '.' $file->guessExtension();
  107.                 try {
  108.                     copy($file$this->getParameter('demande_directory') . $sourceFileName);
  109.                     $DemandePhoto = new DemandePhotoBatiment();
  110.                     $DemandePhoto->setDemande($demande);
  111.                     $DemandePhoto->setSource($sourceFileName);
  112.                     $entityManager->persist($DemandePhoto);
  113.                 } catch (FileException $e) {
  114.                     dd($e);
  115.                 }
  116.             }
  117.             $JustificationTypeProtection $form->get('JustificationTypeProtection')->getData();
  118.             foreach ($JustificationTypeProtection as $file) {
  119.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  120.                 $sourceFileName $slugger->slug($originalFilename) . '-' uniqid() . '.' $file->guessExtension();
  121.                 try {
  122.                     copy($file$this->getParameter('demande_directory') . $sourceFileName);
  123.                     $JustificationProtection = new DemandeJustificationProtection();
  124.                     $JustificationProtection->setDemande($demande);
  125.                     $JustificationProtection->setSource($sourceFileName);
  126.                     $entityManager->persist($JustificationProtection);
  127.                 } catch (FileException $e) {
  128.                     dd($e);
  129.                 }
  130.             }
  131.             $demande->setDateCreation(new \DateTime());
  132.             $entityManager->persist($demande);
  133.             $entityManager->flush();
  134.             // Message informatif lors de la réception d’une nouvelle demande SuperAdmin
  135.             $edit_demande_url $this->generateUrl('app_redirect_email', array( 'id' => $demande->getId(), 'type' => 'demande' ), UrlGenerator::ABSOLUTE_URL );
  136.             $this->emailVerifier->sendEmailConfirmation(
  137.                 'app_verify_email',
  138.                 $demande->getUser(),
  139.                 (new TemplatedEmail())
  140.                     ->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
  141.                     ->to($this->getParameter('EmailNotification'))
  142.                     ->subject('Une nouvelle demande a été ajoutée !')
  143.                     ->htmlTemplate('email/email_nouvelle_demande.html.twig')
  144.                     ->context([
  145.                         'User' => $demande->getUser()->getEmail(),
  146.                         'demande_url' => $edit_demande_url,
  147.                         'demande_id' => $demande->getId(),
  148.                     ])
  149.             );
  150.             $admins $entityManager->getRepository(User::class)->findByRole('ROLE_ADMIN');
  151.             foreach ( $admins as $admin){
  152.                 $notification_message 'Une nouvelle demande a été ajoutée !' $demande->getId() . ' du formulaire de demande d’assistance technique de l’IGPPP';
  153.                 $notificationManager->pushMessage('Une nouvelle demande a été ajoutée !'$notification_message$admin$edit_demande_url);
  154.             }
  155.             // Confirmation de réception de la demande Demandeur
  156.             $show_demande_url $this->generateUrl('app_demande_show', array( 'id' => $demande->getId() ), UrlGenerator::ABSOLUTE_URL );
  157.             $this->emailVerifier->sendEmailConfirmation(
  158.                 'app_verify_email',
  159.                 $demande->getUser(),
  160.                 (new TemplatedEmail())
  161.                     ->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
  162.                     ->to($demande->getUser()->getEmail())
  163.                     ->subject('Confirmation de réception de la demande !')
  164.                     ->htmlTemplate('email/email_confirmation_creation_demande.html.twig')
  165.                     ->context([
  166.                         'User' => $demande->getUser()->getEmail(),
  167.                         'demande_url' => $show_demande_url,
  168.                         'demande_id' => $demande->getId(),
  169.                     ])
  170.             );
  171.             $notification_message 'Confirmation de réception de la demande !' $demande->getId() . ' du formulaire de demande d’assistance technique de l’IGPPP ';
  172.             $notificationManager->pushMessage('Confirmation de réception de la demande !'$notification_message$demande->getUser(), $show_demande_url);
  173.             return $this->redirectToRoute('app_demande_index', [], Response::HTTP_SEE_OTHER);
  174.         }
  175.         return $this->renderForm('demande/new.html.twig', [
  176.             'demande' => $demande,
  177.             'form' => $form,
  178.             'ModeModif' => false
  179.         ]);
  180.     }
  181.     #[Route('/{id}'name'app_demande_show'methods: ['GET'])]
  182.     public function show($idRequest $requestDemande $demandeUserRepository $UserRepositoryAuditReader $auditReaderMeetingRepository  $meetingRepository): Response
  183.     {
  184.         $note = new DemandeNote();
  185.         $meeting = new Meeting();
  186.         $typeProtection = [
  187.             => 'Classe',
  188.             => 'Protégé',
  189.             => 'Aucun type de protection',
  190.             => 'Autre type de protection'
  191.         ];
  192.         $TypeEtude = [
  193.             => 'Relévé géometre',
  194.             => 'Diagnostic',
  195.             => 'Etudes architecturales',
  196.             => 'Etudes techniques',
  197.             => 'Autre'
  198.         ];
  199.         $SecteurProjet = [
  200.             => 'Culturel',
  201.             => 'Touristique',
  202.             => 'Autre'
  203.         ];
  204.         $users $UserRepository->findByRole('ROLE_RD');
  205.         $formNote $this->createForm(DemandeNoteType::class, $note);
  206.         $formMeeting $this->createForm(MeetingType::class, $meeting);
  207.         $demande_audit $auditReader->getAudits('App\Entity\Demande'$demande->getId() );
  208.         if (  $request->query->get('meeting_id') ){
  209.             $meeting_demande $meetingRepository->find$request->query->get('meeting_id') );
  210.         }else{
  211.             $meeting_demande null;
  212.         }
  213.         return $this->render('demande/show.html.twig', [
  214.             'demande' => $demande,
  215.             'typeProtection' => $typeProtection,
  216.             'TypeEtude' => $TypeEtude,
  217.             'SecteurProjet' => $SecteurProjet,
  218.             'demande_audit' => $demande_audit,
  219.             'users' => $users,
  220.             'status_array' => array_flip(Demande::STATUS_ARRAY),
  221.             'formNote' => $formNote->createView(),
  222.             'formMeeting' => $formMeeting->createView(),
  223.             'meeting_demande' => $meeting_demande
  224.         ]);
  225.     }
  226.     #[Route('/{id}/edit'name'app_demande_edit'methods: ['GET''POST'])]
  227.     public function edit(Request $requestDemande $demandeDemandeRepository $demandeRepository): Response
  228.     {
  229.         return $this->redirectToRoute('app_demande_index');
  230.         $form $this->createForm(DemandeType::class, $demande);
  231.         $form->handleRequest($request);
  232.         if ($form->isSubmitted() && $form->isValid()) {
  233.             $demandeRepository->add($demande);
  234.             return $this->redirectToRoute('app_demande_index', [], Response::HTTP_SEE_OTHER);
  235.         }
  236.         return $this->renderForm('demande/edit.html.twig', [
  237.             'demande' => $demande,
  238.             'form' => $form,
  239.             'ModeModif' => true
  240.         ]);
  241.     }
  242.     #[Route('/{id}'name'app_demande_delete'methods: ['POST'])]
  243.     public function delete(Request $requestDemande $demandeDemandeRepository $demandeRepository): Response
  244.     {
  245.         return $this->redirectToRoute('app_demande_index');
  246.         if ($this->isCsrfTokenValid('delete' $demande->getId(), $request->request->get('_token'))) {
  247.             /*unlink($this->getParameter('demande_directory') . $demande->getJustificationApprobationSpontane());
  248.             unlink($this->getParameter('demande_directory') . $demande->getJustificationDuPropriete());
  249.             unlink($this->getParameter('demande_directory') . $demande->getPhotoBatiment());
  250.             unlink($this->getParameter('demande_directory') . $demande->getJustificationTypeProtection());
  251.             */
  252.             $demandeRepository->remove($demande);
  253.         }
  254.         return $this->redirectToRoute('app_demande_index', [], Response::HTTP_SEE_OTHER);
  255.     }
  256. }