<?php
namespace App\Controller\Front;
use App\Constant\JobApplicationStatus;
use App\Controller\AppController;
use App\Entity\JobApplication;
use App\Entity\JobOffer;
use App\Entity\Media;
use App\Entity\Page;
use App\Form\Front\ContactType;
use App\Form\Front\JobApplicationType;
use App\Repository\JobOfferRepository;
use App\Service\FileUploader;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("recrutement", name="front_company_jobs_")
*/
class JobsController extends AppController
{
/**
* @Route("", name="list")
*/
public function list(JobOfferRepository $jobOfferRepository){
$jobOffers = $jobOfferRepository->searchJobOffers(["active" => true], 1, 100);
$page = new Page();
$page->setMetaTitle("Recrutement - Citizens");
return $this->render('front/jobs/list.html.twig', [
'page' => $page,
'jobOffers' => $jobOffers,
]);
}
/**
* @Route("/offre-emploi/{id}", name="offer")
*/
public function offer(Request $request, JobOffer $jobOffer, FileUploader $fileUploader){
$jobApplication = new JobApplication();
$form = $this->createForm(JobApplicationType::class, $jobApplication);
$form->handleRequest($request);
//-----------------------------------------------
// Verify fields
if($form->isSubmitted()) {
$cvFile = $form->get('cv')->getData();
if(!$cvFile->isValid() || !$fileUploader->validTypes($cvFile, 'file')) {
$form->get('cv')->addError(new FormError('error.file_error'));
}
$motivationFile = $form->get('motivation')->getData();
if(!$motivationFile->isValid() || !$fileUploader->validTypes($motivationFile, 'file')) {
$form->get('motivation')->addError(new FormError('error.file_error'));
}
}
//-----------------------------------------------
// On submit
if ($form->isSubmitted() && $form->isValid()) {
$jobApplication->setStatus(JobApplicationStatus::SENT);
$jobApplication->setJobOffer($jobOffer);
$cvFile = $form->get('cv')->getData();
if($cvFile->isValid() && $fileUploader->validTypes($cvFile, 'file')) {
$attachment = new Media();
$uploadFolder = Media::uploadFolderPrivate();
$attachment->setPrivate(true);
$fileName = $fileUploader->upload($cvFile, $uploadFolder, true);
$attachment->setName($fileName);
$jobApplication->setCv($attachment);
}
$motivationFile = $form->get('motivation')->getData();
if($motivationFile->isValid() && $fileUploader->validTypes($motivationFile, 'file')) {
$attachment = new Media();
$uploadFolder = Media::uploadFolderPrivate();
$attachment->setPrivate(true);
$fileName = $fileUploader->upload($motivationFile, $uploadFolder, true);
$attachment->setName($fileName);
$jobApplication->setMotivation($attachment);
}
$this->em->persist($jobApplication);
$this->em->flush();
$success = true;
}
$page = new Page();
$page->setMetaTitle($jobOffer->getName() . " - Offre d'emploi - Citizens");
return $this->render('front/jobs/offer.html.twig', [
'jobOffer' => $jobOffer,
'page' => $page,
'form' => $form->createView(),
'success' => !empty($success),
]);
}
/**
* AJAX Spontaneous application form
* @Route("/candidature-spontanee", priority=10, name="spontaneous_application_modal", methods={"GET"})
*/
public function modalWaitingList(Request $request)
{
$jobApplication = new JobApplication();
$form = $this->createForm(JobApplicationType::class, $jobApplication);
$form->handleRequest($request);
return $this->json([
'content' => $this->render(
"front/modals/spontaneous-application.html.twig",
[
"form" => $form->createView(),
]
)->getContent(),
]);
}
/**
* AJAX Submit spontaneous application form
* @Route("/candidature-spontanee", priority=10, name="spontaneous_application_submit", methods={"post"})
*/
public function addToWaitingList(Request $request)
{
$jobApplication = new JobApplication();
$form = $this->createForm(JobApplicationType::class, $jobApplication);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$jobApplication->setStatus(JobApplicationStatus::SENT);
$this->em->persist($jobApplication);
$this->em->flush();
return $this->json([
'result' => true,
]);
}
return $this->json([
'result' => false,
'form' => $this->render('front/modals/spontaneous-application.html.twig', [
"form" => $form->createView()])->getContent(),
], 500);
}
}