src/Controller/HomeController.php line 286

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use App\Entity\User;
  5. use App\Entity\Offre;
  6. use App\Entity\Images;
  7. use App\Entity\Demande;
  8. use App\Form\OffreType;
  9. use App\Data\SearchData;
  10. use App\Entity\Comments;
  11. use App\Data\SearchOffre;
  12. use App\Entity\Candidature;
  13. use App\Form\CommentsType;
  14. use App\Entity\CommentOffre;
  15. use App\Form\SearchFormType;
  16. use App\Form\SearchOffreType;
  17. use App\Form\CommentOffreType;
  18. use App\Form\PublierDemandeType;
  19. use App\Form\PublierDemandeType2;
  20. use App\Repository\CandidatureRepository;
  21. use App\Repository\UserRepository;
  22. use App\Repository\OffreRepository;
  23. use App\Repository\DemandeRepository;
  24. use App\Repository\CommentsRepository;
  25. use App\Repository\CategorieRepository;
  26. use App\Repository\UserImageRepository;
  27. use App\Repository\SousCategorieRepository;
  28. use Doctrine\Persistence\ManagerRegistry;
  29. use Knp\Component\Pager\PaginatorInterface;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Symfony\Component\HttpFoundation\Response;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  34. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  35. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use Symfony\Component\Mailer\MailerInterface;
  38. use Symfony\Component\Mime\Address;
  39. class HomeController extends AbstractController
  40. {
  41.     /**
  42.      * @var MailerInterface
  43.      */
  44.     private $mailer;
  45.     public function __construct(MailerInterface $mailer)
  46.     {
  47.         $this->mailer $mailer;
  48.     }
  49.     /**
  50.      * @Route("/", name="home",methods={"GET", "POST"})
  51.      */
  52.     public function index(DemandeRepository $demandeRepositoryCategorieRepository $categorieRepositoryUserRepository $userRepositoryOffreRepository $offreRepositorySousCategorieRepository $sousCategorieRepository): Response
  53.     {
  54.         $user $this->getUser();
  55.         if ($user) {
  56.             $demandes $demandeRepository->findDemandeHome("DISPONIBLE");
  57.             $demandesall $demandeRepository->findAll();
  58.             $demandesIds $demandeRepository->findDemandeIds($user->getId());
  59.             $candidats $userRepository->findCandidat($user->getId(), $demandesIds);
  60.             return $this->render('base.html.twig', [
  61.                 'categories' => $categorieRepository->findAll(),
  62.                 'souscategories' => $sousCategorieRepository->findAll(),
  63.                 'candidats' => $candidats,
  64.                 'demandes' => $demandes,
  65.                 'demandesall' => $demandesall,
  66.                 'users' => $userRepository->findAll(),
  67.                 'controller_name' => 'Acceuil',
  68.             ]);
  69.         } else {
  70.             $demandesall $demandeRepository->findAll();
  71.             $demandes $demandeRepository->findDemandeHome("DISPONIBLE");
  72.             return $this->render('base.html.twig', [
  73.                 'categories' => $categorieRepository->findAll(),
  74.                 'souscategories' => $sousCategorieRepository->findAll(),
  75.                 'users' => $userRepository->findAll(),
  76.                 'demandes' => $demandes,
  77.                 'demandesall' => $demandesall,
  78.                 'controller_name' => 'Acceuil',
  79.             ]);
  80.         }
  81.     }
  82.     /**
  83.      * @Route("/{id}/verification", name="msgverif", methods={"GET","POST"})
  84.      */
  85.     public function msgverif(User $user): Response
  86.     {
  87.         return $this->render('home/msgverif.html.twig', [
  88.             'user' => $user,
  89.             'controller_name' => 'Vérification',
  90.         ]);
  91.     }
  92.     /**
  93.      * @IsGranted("ROLE_USER")
  94.      * @Route("/confirme_offre", name="msgconf")
  95.      */
  96.     public function msgconf(): Response
  97.     {
  98.         return $this->render('home/msgconf.html.twig', [
  99.             'controller_name' => 'Confirme demande'
  100.         ]);
  101.     }
  102.     /**
  103.      * @Route("/demande", name="demande")
  104.      */
  105.     public function demande(DemandeRepository $demandeRepositoryRequest $request,  PaginatorInterface $paginator): Response
  106.     {
  107.         $data = new SearchData();
  108.         $data->page $request->get('page'1);
  109.         $form $this->createForm(SearchFormType::class, $data);
  110.         $form->handleRequest($request);
  111.         $user $this->getUser();
  112.         if ($user) {
  113.             $demandes $demandeRepository->findSearch($data"DISPONIBLE");
  114.             $demandesDispo =  $demandeRepository->findSearch2($data"DISPONIBLE"$user->getId());
  115.             $demandesAttente =  $demandeRepository->findSearch2($data"EN_ATTENTE"$user->getId());
  116.             $demandesArchives =  $demandeRepository->findSearch2($data"HISTORIQUE"$user->getId());
  117.             $demandes $paginator->paginate(
  118.                 $demandes// Requête contenant les données à paginer (ici nos articles)
  119.                 $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  120.                 10 // Nombre de résultats par page
  121.             );
  122.             $demandesDispo $paginator->paginate(
  123.                 $demandesDispo// Requête contenant les données à paginer (ici nos articles)
  124.                 $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  125.                 10 // Nombre de résultats par page
  126.             );
  127.             $demandesAttente $paginator->paginate(
  128.                 $demandesAttente// Requête contenant les données à paginer (ici nos articles)
  129.                 $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  130.                 10 // Nombre de résultats par page
  131.             );
  132.             $demandesArchives $paginator->paginate(
  133.                 $demandesArchives// Requête contenant les données à paginer (ici nos articles)
  134.                 $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  135.                 10 // Nombre de résultats par page
  136.             );
  137.             if (!$demandesDispo || !$demandesAttente || !$demandesArchives || !$demandes) {
  138.                 $this->addFlash('warning''Opppss!! pas d offre pour le moment .');
  139.             }
  140.             return $this->render('demande/demande.html.twig', [
  141.                 'demandes' => $demandes,
  142.                 'demandesDispo' => $demandesDispo,
  143.                 'demandesAttente' => $demandesAttente,
  144.                 'demandesArchives' => $demandesArchives,
  145.                 'form' => $form->createView(),
  146.                 'controller_name' => 'Demandes'
  147.             ]);
  148.         } else {
  149.             $demandes $demandeRepository->findSearch($data"DISPONIBLE");
  150.             $demandes $paginator->paginate(
  151.                 $demandes// Requête contenant les données à paginer (ici nos articles)
  152.                 $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  153.                 10 // Nombre de résultats par page
  154.             );
  155.             if (!$demandes) {
  156.                 $this->addFlash('warning''Opppss!! pas d offre pour le moment');
  157.             }
  158.             return $this->render('demande/demande.html.twig', [
  159.                 'demandes' => $demandes,
  160.                 'form' => $form->createView(),
  161.                 'controller_name' => 'Demandes'
  162.             ]);
  163.         }
  164.     }
  165.     /**
  166.      * @Route("/demande/categorie/{id}", name="demande_par_categorie")
  167.      */
  168.     public function demandeParCategorie(DemandeRepository $demandeRepositorySousCategorieRepository $sousCategorieRepositoryRequest $request,  PaginatorInterface $paginator$id): Response
  169.     {
  170.         $data = new SearchData();
  171.         $data->page $request->get('page'1);
  172.         $form $this->createForm(SearchFormType::class, $data);
  173.         $form->handleRequest($request);
  174.         $categorie $sousCategorieRepository->find($id);
  175.         $donnees =  $demandeRepository->findSearchCat($data"DISPONIBLE"$categorie->getId());
  176.         $demandes $paginator->paginate(
  177.             $donnees// Requête contenant les données à paginer (ici nos articles)
  178.             $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  179.             10 // Nombre de résultats par page
  180.         );
  181.         if (!$donnees) {
  182.             $this->addFlash('warning''Opppss!! pas d offre pour le moment');
  183.         }
  184.         return $this->render('demande/demandeCat.html.twig', [
  185.             'demandes' => $demandes,
  186.             'categorie' => $categorie,
  187.             'form' => $form->createView(),
  188.             'controller_name' => 'Demandes Par Categorie '
  189.         ]);
  190.     }
  191.     /**
  192.      * @IsGranted("ROLE_EMPLOYEE")
  193.      * @Route("/demande/{id}/apply", name="job_apply" ,methods={"GET","POST"})
  194.      */
  195.     public function apply(UserRepository $userRepositoryDemande $job)
  196.     {
  197.         $user $this->getUser();
  198.         $candidature = new Candidature();
  199.         $candidature->setDemande($job);
  200.         $candidature->setUser($user);
  201.         $candidature->setEtat("EN_ATTENTE");
  202.         $job->addCandidature($candidature);
  203.         $em $this->getDoctrine()->getManager();
  204.         $em->persist($job);
  205.         $em->persist($candidature);
  206.         $em->flush();
  207.         $em "jobeasy987@gmail.com";
  208.         $email = (new TemplatedEmail())
  209.             ->from("easy.jobb2022@gmail.com")
  210.             ->to($user->getEmail())
  211.             ->subject('Nouvelle Candidature!')
  212.             // path of the Twig template to render
  213.             ->htmlTemplate('emails/apply.html.twig')
  214.             ->context([
  215.                 'job' => $job,
  216.             ]);
  217.         $emailRec = (new TemplatedEmail())
  218.             ->from("easy.jobb2022@gmail.com")
  219.             ->to($job->getUser()->getEmail())
  220.             ->subject('Nouvelle Candidature !')
  221.             ->htmlTemplate('emails/candidature.html.twig')
  222.             ->context([
  223.                 'candidat' => $user,
  224.                 'job' => $job
  225.             ]);
  226.         $this->mailer->send($email);
  227.         $this->mailer->send($emailRec);
  228.         $this->addFlash("success""Candidature envoyée avec success !");
  229.         return $this->redirectToRoute('demande');
  230.     }
  231.     /**
  232.      * @IsGranted("ROLE_EMPLOYEE")
  233.      * @Route("/demande/{id}/annuler", name="job_annuler" ,methods={"GET","POST"})
  234.      */
  235.     public function annuler(UserRepository $userRepositoryDemandeRepository $demandeRepositoryCandidatureRepository $candidatureRepository$id)
  236.     {
  237.         $user $this->getUser();
  238.         $candidature $candidatureRepository->find($id);
  239.         $demande $demandeRepository->find($id);
  240.         $em $this->getDoctrine()->getManager();
  241.         $em->remove($candidature);
  242.         $em->flush();
  243.         $this->addFlash("warning""Candidature annulée !");
  244.         return $this->redirectToRoute('mes_candidature_demande', ['id' => $user->getId()]);
  245.     }
  246.     /**
  247.      * @Route("/offres", name="offres")
  248.      */
  249.     public function offres(OffreRepository $OffreRepositoryRequest $request,  PaginatorInterface $paginator): Response
  250.     {
  251.         $data = new SearchOffre();
  252.         $data->page $request->get('page'1);
  253.         $form $this->createForm(SearchOffreType::class, $data);
  254.         $form->handleRequest($request);
  255.         $donnees =  $OffreRepository->findSearch($data"DISPONIBLE");
  256.         $offres $paginator->paginate(
  257.             $donnees// Requête contenant les données à paginer (ici nos articles)
  258.             $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  259.             10 // Nombre de résultats par page
  260.         );
  261.         if (!$donnees) {
  262.             $this->addFlash('warning''Opppss!! Recherche introuvable .');
  263.         }
  264.         return $this->render('offres/offres.html.twig', [
  265.             'controller_name' => 'Offres',
  266.             'offres' => $offres,
  267.             'form' => $form->createView(),
  268.         ]);
  269.     }
  270.     /**
  271.      * @IsGranted("ROLE_RECRUITER")
  272.      * @Route("/publier_demande", name="publier_demande")
  273.      */
  274.     public function PublierDeamnde(Request $request): Response
  275.     {
  276.         $demande = new Demande();
  277.         $form $this->createForm(PublierDemandeType::class, $demande);
  278.         $form->handleRequest($request);
  279.         if ($form->isSubmitted() && $form->isValid()) {
  280.             $demande->setUser($this->getUser());
  281.             $demande->setEtat("DISPONIBLE");
  282.             $demande->setEpingle(false);
  283.             $entityManager $this->getDoctrine()->getManager();
  284.             $entityManager->persist($demande);
  285.             $entityManager->flush();
  286.             return $this->redirectToRoute('demande');
  287.         }
  288.         return $this->render('home/publierDemande.html.twig', [
  289.             'form' => $form->createView(),
  290.             'controller_name' => 'Publier demande'
  291.         ]);
  292.     }
  293.     /**
  294.      * @IsGranted("ROLE_RECRUITER")
  295.      * @Route("/supprimer_demande/{id}", name="supprimer_demande", methods={"POST"})
  296.      */
  297.     public function supprimerDemande(DemandeRepository $demandeRepositoryRequest $request$id): Response
  298.     {
  299.         $demande $demandeRepository->find($id);
  300.         $entityManager $this->getDoctrine()->getManager();
  301.         $entityManager->remove($demande);
  302.         $entityManager->flush();
  303.         $this->addFlash('success''Demande a été supprimé avec succès');
  304.         return $this->redirectToRoute('demande');
  305.     }
  306.     /**
  307.      * @IsGranted("ROLE_USER")
  308.      * @Route("/{id}/detail_demande", name="detail_demande", methods={"GET","POST"})
  309.      */
  310.     public function Detail_demande(DemandeRepository $demandeRepositoryRequest $request$id): Response
  311.     {
  312.         $offre $demandeRepository->findDemandeDetails($id);
  313.         // dd($offre);
  314.         // $candidatures = $offre->getCandidatures();
  315.         // foreach ($candidatures as $candidature) {
  316.         //     $id_user = $candidature->getUser()->getId();
  317.         //     $array = array("$id_user");
  318.         // }
  319.         // return new JsonResponse($array);
  320.         // $user = $this->getUser();
  321.         // foreach ($candidatures as $candidature) {
  322.         //     $user_id = $candidature->getUser()->getId();
  323.         //     dd($user_id);
  324.         // }
  325.         $comment = new Comments();
  326.         $commentForm $this->createForm(CommentsType::class, $comment);
  327.         $commentForm->handleRequest($request);
  328.         //traintement de formulaire
  329.         if ($commentForm->isSubmitted() && $commentForm->isValid()) {
  330.             $comment->setCreatedAt(new DateTime());
  331.             $comment->setDemandes($offre);
  332.             $comment->setUser($this->getUser());
  333.             // on récupere le contenu de champs parantid
  334.             $parentid $commentForm->get('parentid')->getData();
  335.             //on va cherche le commentaire correspondant
  336.             $em $this->getDoctrine()->getManager();
  337.             if ($parentid != null) {
  338.                 $parent $em->getRepository(Comments::class)->find($parentid);
  339.             }
  340.             // on définit le parent
  341.             $comment->setParent($parent ?? null);
  342.             $em->persist($comment);
  343.             $em->flush();
  344.             $this->addFlash('message''votre commentaire a bien été envoyé');
  345.             return $this->redirectToRoute('detail_demande', ['id' => $offre->getId()]);
  346.         }
  347.         return $this->render('demande/detail_demande.html.twig', [
  348.             'demande' => $offre,
  349.             //'img'=>$img,
  350.             'commentForm' => $commentForm->createView(),
  351.             'controller_name' => 'Détail demande'
  352.         ]);
  353.     }
  354.     /**
  355.      * @IsGranted("ROLE_ADMIN")
  356.      * @Route("/confirme_demande", name="confirme_demande")
  357.      */
  358.     public function confirme_demande(): Response
  359.     {
  360.         return $this->render('home/confirme_demande.html.twig', [
  361.             'controller_name' => 'Confirme demande'
  362.         ]);
  363.     }
  364.     /**
  365.      * @IsGranted("ROLE_RECRUITER")
  366.      * @Route("/publier_offre", name="publier_offre")
  367.      */
  368.     public function PublierOffre(Request $request): Response
  369.     {
  370.         $offre = new Offre();
  371.         $form $this->createForm(OffreType::class, $offre);
  372.         $form->handleRequest($request);
  373.         if ($form->isSubmitted() && $form->isValid()) {
  374.             // On récupère les images transmises
  375.             $images $form->get('images')->getData();
  376.             // On boucle sur les images
  377.             foreach ($images as $image) {
  378.                 // On génère un nouveau nom de fichier
  379.                 $fichier md5(uniqid()) . '.' $image->guessExtension();
  380.                 // On copie le fichier dans le dossier uploads en service.yaml
  381.                 $image->move(
  382.                     $this->getParameter('images_directory'),
  383.                     $fichier
  384.                 );
  385.                 // On crée l'image dans la base de données
  386.                 $img = new Images();
  387.                 $img->setName($fichier);
  388.                 $offre->addImage($img);
  389.             }
  390.             $offre->setEtat("EN_ATTENTE");
  391.             $offre->setEpingle(false);
  392.             $offre->setUser($this->getUser());
  393.             $entityManager $this->getDoctrine()->getManager();
  394.             $entityManager->persist($offre);
  395.             $entityManager->flush();
  396.             $this->addFlash('message''votre offres a bien été envoyé ');
  397.             return $this->redirectToRoute('offres');
  398.         }
  399.         return $this->render('home/publieroffre.html.twig', [
  400.             'form' => $form->createView(),
  401.             'controller_name' => 'Publier offre'
  402.         ]);
  403.     }
  404.     /**
  405.      * @Route("/{id}/detail_offre", name="detail_offre", methods={"GET","POST"})
  406.      */
  407.     public function Detail_Offre(OffreRepository $offreRepositoryRequest $request$idUserImageRepository $userimg): Response
  408.     {
  409.         $offre $offreRepository->find($id);
  410.         //$user = $offre->getUser()->getId();
  411.         //$img = $userimg->findBy(['user'=>$user],['updatedAt'=>'DESC'], ['limit'=>1]);
  412.         //commentaires
  413.         $comment = new CommentOffre();
  414.         $commentForm $this->createForm(CommentOffreType::class, $comment);
  415.         $commentForm->handleRequest($request);
  416.         //traintement de formulaire
  417.         if ($commentForm->isSubmitted() && $commentForm->isValid()) {
  418.             $comment->setCreatedAt(new DateTime());
  419.             $comment->setOffres($offre);
  420.             $comment->setUser($this->getUser());
  421.             // on récupere le contenu de champs parantid
  422.             $parentid $commentForm->get('parentid')->getData();
  423.             //on va cherche le commentaire correspondant
  424.             $em $this->getDoctrine()->getManager();
  425.             if ($parentid != null) {
  426.                 $parent $em->getRepository(CommentOffre::class)->find($parentid);
  427.             }
  428.             // on définit le parent
  429.             $comment->setParent($parent ?? null);
  430.             $em->persist($comment);
  431.             $em->flush();
  432.             $this->addFlash('message''votre commentaire a bien été envoyé');
  433.             return $this->redirectToRoute('detail_offre', ['id' => $offre->getId()]);
  434.         }
  435.         return $this->render('offres/detail_offre.html.twig', [
  436.             'offre' => $offre,
  437.             //'img'=>$img,
  438.             'commentForm' => $commentForm->createView(),
  439.             'controller_name' => 'Détail offre'
  440.         ]);
  441.     }
  442.     /**
  443.      * @Route("/a-propos", name="apropos")
  444.      */
  445.     public function Apropos(UserRepository $userRepositoryOffreRepository $offreRepositoryDemandeRepository $demandeRepositoryCommentsRepository $commentsRepository): Response
  446.     {
  447.         return $this->render('home/apropos.html.twig', [
  448.             'controller_name' => 'A propos',
  449.             'users' => $userRepository->findAll(),
  450.             'offres' => $offreRepository->findAll(),
  451.             'comments' => $commentsRepository->findAll(),
  452.             'demandes' => $demandeRepository->findAll(),
  453.         ]);
  454.     }
  455.     /**
  456.      * @Route("/registerr", name="registerr")
  457.      */
  458.     public function registerr(Request $request)
  459.     {
  460.         return $this->render('registerr.html.twig');
  461.     }
  462. }