src/Controller/OffreController.php line 63

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Offre;
  4. use App\Form\PostulerType;
  5. use Symfony\Component\Mime\Email;
  6. use App\Repository\LabelRepository;
  7. use App\Repository\OffreRepository;
  8. use Symfony\Component\Mime\Address;
  9. use App\Repository\OfficeRepository;
  10. use App\Repository\SettingRepository;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Mailer\MailerInterface;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. class OffreController extends AbstractController
  17. {
  18.     /**
  19.      * @Route("/offres", name="app_offres")
  20.      */
  21.     public function index(
  22.         SettingRepository $settingRepository,
  23.         LabelRepository $labelRepository,
  24.         OfficeRepository $officeRepository,
  25.         OffreRepository $offreRepository
  26.     ): Response
  27.     {
  28.         return $this->render('offre/index.html.twig', [
  29.             'settings' => $settingRepository->findAll(),
  30.             'labels' => $labelRepository->findAll(),
  31.             'offices' => $officeRepository->findBy([], ['titre' => 'ASC']),
  32.             'offres' => $offreRepository->findBy(['isEnabled' => true], ['createdAt' => 'DESC']),
  33.             'pageTitle' => 'offres'
  34.         ]);
  35.     }
  36.     /**
  37.      * @Route("/offres/{slug}/{id}", name="app_offre_show")
  38.      */
  39.     public function show(
  40.         Offre $offre,
  41.         SettingRepository $settingRepository,
  42.         LabelRepository $labelRepository,
  43.         OfficeRepository $officeRepository,
  44.         OffreRepository $offreRepository
  45.     ): Response {
  46.         return $this->render('offre/show.html.twig', [
  47.             'offre' => $offre,
  48.             'settings' => $settingRepository->findAll(),
  49.             'labels' => $labelRepository->findAll(),
  50.             'offices' => $officeRepository->findBy([], ['titre' => 'ASC']),
  51.             'offres' => $offreRepository->findBy(['isEnabled' => true], ['createdAt' => 'DESC']),
  52.             'pageTitle' => $offre->getTitle()
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/offres/postuler/{slug}/{id}", name="app_offre_postuler")
  57.      */
  58.     public function postuler(
  59.         Offre $offre,
  60.         SettingRepository $settingRepository,
  61.         LabelRepository $labelRepository,
  62.         OfficeRepository $officeRepository,
  63.         OffreRepository $offreRepository,
  64.         Request $request,
  65.         MailerInterface $mailer
  66.     ): Response {
  67.         $form $this->createForm(PostulerType::class);
  68.         $form->handleRequest($request);
  69.         // On recherche l'email et le nom du site dans Setting
  70.         // pour injecter dans le mail
  71.         $dataMail $settingRepository->findAll();
  72.         $siteEmail $dataMail[0]->getSiteEmail();
  73.         $siteName $dataMail[0]->getSiteName();
  74.         if ($form->isSubmitted() && $form->isValid()) {
  75.             $contactFormData $form->getData();
  76.             $email = (new Email())
  77.             ->from($contactFormData['email'])
  78.             ->to(new Address($siteEmail$siteName))
  79.             ->subject('Candidature de ' $contactFormData['prenom'] . ' ' $contactFormData['nom'] . ' pour l\'offre : ' $offre)
  80.             ->html(
  81.                 '<h4 style="color: #0b3a62; font-weight: bold;">Candidature pour l\'offre : ' $offre '</h4>' .
  82.                 // '<span style="color: #bbd57e; font-weight: bold;">Type de candidature :</span> ' . $offre . '<br>' .
  83.                 '<span style="color: #2dafe6; font-weight: bold;">De :</span> ' $contactFormData['prenom'] . ' ' $contactFormData['nom'] . '<br>' .
  84.                 '<span style="color: #2dafe6; font-weight: bold;">E-mail :</span> ' $contactFormData['email'] . '<br><br>' .
  85.                 '<span style="color: #2dafe6; font-weight: bold;">Message</span> : <br>' trim(nl2br($contactFormData['message'])) . '<br>',
  86.                 'text/plain'
  87.             );
  88.             // Attacher les fichiers joints CV et Autre doc
  89.             $email->attachFromPath($contactFormData['cv'], 'Curriculum-Vitae.pdf''application/pdf');
  90.             if ($contactFormData['autredoc'] != null) {
  91.                 $email->attachFromPath($contactFormData['autredoc'], 'autre-document.pdf''application/pdf');
  92.             }
  93.             // Envoi du mail
  94.             $mailer->send($email);
  95.             //Message flash de succès d'envoi du mail
  96.             $this->addFlash('success''Votre candidature a bien été envoyée.');
  97.             return $this->redirect($this->generateUrl('app_offre_postuler', ['slug' => $offre->getSlug(), 'id' => $offre->getId()]) . '#message-success');
  98.         }
  99.         return $this->render('offre/postuler.html.twig', [
  100.             'offre' => $offre,
  101.             'settings' => $settingRepository->findAll(),
  102.             'labels' => $labelRepository->findAll(),
  103.             'offices' => $officeRepository->findBy([], ['titre' => 'ASC']),
  104.             'offres' => $offreRepository->findBy(['isEnabled' => true], ['createdAt' => 'DESC']),
  105.             'form' => $form->createView()
  106.         ]);
  107.     }
  108.     /**
  109.      * @Route("/postuler/candidature-spontanee", name="app_offre_postuler_spontanee")
  110.      */
  111.     public function postulerSpontanee(
  112.         // Offre $offre,
  113.         SettingRepository $settingRepository,
  114.         LabelRepository $labelRepository,
  115.         OfficeRepository $officeRepository,
  116.         // OffreRepository $offreRepository,
  117.         Request $request,
  118.         MailerInterface $mailer
  119.     )
  120.     {
  121.         $form $this->createForm(PostulerType::class);
  122.         $form->handleRequest($request);
  123.         // On recherche l'email et le nom du site dans Setting
  124.         // pour injecter dans le mail
  125.         $dataMail $settingRepository->findAll();
  126.         $siteEmail $dataMail[0]->getSiteEmail();
  127.         $siteName $dataMail[0]->getSiteName();
  128.         if ($form->isSubmitted() && $form->isValid()) {
  129.             $contactFormData $form->getData();
  130.             $email = (new Email())
  131.             ->from($contactFormData['email'])
  132.             ->to(new Address($siteEmail$siteName))
  133.             ->subject('Candidature spontanée de ' $contactFormData['prenom'] . ' ' $contactFormData['nom'])
  134.             ->html(
  135.                 '<h4 style="color: #0b3a62; font-weight: bold;">Candidature spontanée</h4>' .
  136.                 '<span style="color: #2dafe6; font-weight: bold;">De :</span> ' $contactFormData['prenom'] . ' ' $contactFormData['nom'] . '<br>' .
  137.                 '<span style="color: #2dafe6; font-weight: bold;">E-mail :</span> ' $contactFormData['email'] . '<br><br>' .
  138.                 '<span style="color: #2dafe6; font-weight: bold;">Message</span> : <br>' trim(nl2br($contactFormData['message'])) . '<br>',
  139.                 'text/plain'
  140.             );
  141.             // Attacher les fichiers joints CV et Autre doc
  142.             $email->attachFromPath($contactFormData['cv'], 'Curriculum-Vitae.pdf''application/pdf');
  143.             if ($contactFormData['autredoc'] != null) {
  144.                 $email->attachFromPath($contactFormData['autredoc'], 'autre-document.pdf''application/pdf');
  145.             }
  146.             // Envoi du mail
  147.             $mailer->send($email);
  148.             //Message flash de succès d'envoi du mail
  149.             $this->addFlash('success''Votre candidature spontanée a bien été envoyée.');
  150.             //return $this->redirect($this->generateUrl('app_offre_postuler', ['slug' => $offre->getSlug(), 'id' => $offre->getId()]) . '#message-success');
  151.             return $this->redirectToRoute('app_offres');
  152.         }
  153.         return $this->render('offre/postuler-spontanee.html.twig', [
  154.             // 'offre' => $offre,
  155.             'settings' => $settingRepository->findAll(),
  156.             'labels' => $labelRepository->findAll(),
  157.             'offices' => $officeRepository->findBy([], ['titre' => 'ASC']),
  158.             // 'offres' => $offreRepository->findBy(['isEnabled' => true], ['createdAt' => 'DESC']),
  159.             'form' => $form->createView()
  160.         ]);
  161.     }
  162. }