src/Controller/JobsController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Jobs;
  4. use App\Entity\JobsApplications;
  5. use App\Features\Core\Paginator;
  6. use App\Features\JobApplication\JobApplicationFilter;
  7. use App\Features\Jobs\IJobsException;
  8. use App\Features\Jobs\JobFilter;
  9. use App\Features\Jobs\JobsManager;
  10. use App\Form\CertificateType;
  11. use App\Form\ReCaptchaType\ReCaptchaType;
  12. use App\Repository\JobsApplicationsRepository;
  13. use App\Repository\JobsRepository;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. class JobsController extends AbstractController
  20. {
  21.     #[Route("/compte/candidatures"name:"job-application")]
  22.     #[IsGranted("ROLE_APPLICANT")]
  23.     public function applications(Request $requestJobsApplicationsRepository $repository): Response
  24.     {
  25.         $query $repository->filter(new JobApplicationFilter(applicant$this->getUser()));
  26.         $paginator = new Paginator($query$request->query->getInt('limit'30), $request->query->getInt('page'1));
  27.         return $this->render('JobsApplications/_application_list.html.twig', [
  28.             'applications' => $paginator,
  29.             "title" => "Mes candidatures"
  30.         ]);
  31.     }
  32.     #[Route("/offre/{uuid}/detail"name:"job-detail")]
  33.     public function jobDetail(Jobs $jobJobsRepository $repository): Response
  34.     {
  35.         //get this job list having the same sector
  36.         $sectorsJobsQb $repository->filter(new JobFilter(sectors$job->getSectors()->getValues(), applicantNotExist$this->getUser()));
  37.         $paginator = new Paginator($sectorsJobsQb51);
  38.         return $this->render('Jobs/_job_detail.html.twig', [
  39.             'job' => $job,
  40.             'title' => $job->getTitle(),
  41.             'sectorsJobs' => $paginator,
  42.         ]);
  43.     }
  44.     #[Route("/offre/{uuid}/candidature"name:"job-apply")]
  45.     #[IsGranted("ROLE_APPLICANT")]
  46.     public function applyToJob(Request $requestJobs $jobJobsManager $jobsManager): Response
  47.     {
  48.         $form $this->createFormBuilder([], ["attr"=>["id"=>"candidature"]])
  49.             ->add('coverLetter'CertificateType::class, [
  50.                 "required" => true,
  51.             ])
  52.             ->add('recaptcha'ReCaptchaType::class, [
  53.                 "required" => true,
  54.             ])
  55.             ->getForm();
  56.         $form->handleRequest($request);
  57.         if($form->isSubmitted() && $form->isValid()){
  58.             $certificate $form->get("coverLetter")->getData();
  59.             try {
  60.                 $application$jobsManager->applyToJob($job$this->getUser(), $certificate);
  61.                 return $this->redirectToRoute('job-application-confirmation', [
  62.                     'application'=> $application->getId()
  63.                 ]);
  64.             } catch (IJobsException $e) {
  65.                 $this->addFlash('error'$e->getMessage());
  66.             }
  67.         }
  68.         return $this->render('Jobs/_job_application.html.twig', [
  69.             'job' => $job,
  70.             'cv' => $this->getUser()?->getCv(),
  71.             'title' => $job->getTitle(),
  72.             'form' => $form->createView(),
  73.         ]);
  74.     }
  75.     #[Route("/candidature/{application}/modifier"name:"job-application-edit")]
  76.     #[IsGranted("ROLE_APPLICANT")]
  77.     public function editApplication(Request $requestJobsApplications $applicationJobsManager $jobsManager): Response
  78.     {
  79.         $job$application->getJob();
  80.         $form $this->createFormBuilder(["coverLetter"=> $application->getCoverLetter()], ["attr"=>["id"=>"candidature"]])
  81.             ->add('coverLetter'CertificateType::class, [
  82.                 "required" => true,
  83.             ])
  84.             ->add('recaptcha'ReCaptchaType::class, [
  85.                 "required" => true,
  86.             ])
  87.             ->getForm();
  88.         $form->handleRequest($request);
  89.         if($form->isSubmitted() && $form->isValid()){
  90.             $certificate $form->get("coverLetter")->getData();
  91.             $application$jobsManager->editApplication($application$certificate);
  92.             return $this->redirectToRoute('job-application-confirmation', [
  93.                 'application'=> $application->getId()
  94.             ]);
  95.         }
  96.         return $this->render('Jobs/_job_application.html.twig', [
  97.             'application' => $application,
  98.             'job' => $job,
  99.             'cv' => $this->getUser()?->getCv(),
  100.             'title' => $job?->getTitle(),
  101.             'form' => $form->createView(),
  102.         ]);
  103.     }
  104.     #[Route("/candidature/{application}/confirmation"name:"job-application-confirmation")]
  105.     #[IsGranted("ROLE_APPLICANT")]
  106.     public function applicationConfirm(Request $requestJobsApplications $applicationJobsManager $jobsManager): Response
  107.     {
  108.         $job$application->getJob();
  109.         if($request->get("confirmer")){
  110.             $jobsManager->confirmApplication($application);
  111.             return $this->redirectToRoute('job-application');
  112.         }
  113.         return $this->render('Jobs/_job_application_confirmation.html.twig', [
  114.             'job' => $job,
  115.             'application' => $application,
  116.             'cv' => $this->getUser()?->getCv(),
  117.             'title' => "Confirmation de ma candidature",
  118.         ]);
  119.     }
  120. }