<?php
namespace App\Controller;
use App\Entity\Candidature;
use App\Entity\Langue;
use App\Entity\OffreEmploi;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Repository\CandidatureRepository;
use App\Repository\CvSportifRepository;
use App\Repository\LangueRepository;
use App\Repository\OffreEmploiRepository;
use App\Repository\UserRepository;
use App\Security\UserAuthenticator;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
class EspaceCandidatController extends AbstractController
{
private EntityManagerInterface $entityManager;
private OffreEmploiRepository $offreEmploiRepository;
private CvSportifRepository $cvSportifRepository;
private UserRepository $userRepository;
private CandidatureRepository $candidatureRepository;
/**
* @var Security
*/
private $security;
public function __construct(EntityManagerInterface $entityManager, CvSportifRepository $cvSportifRepository,
OffreEmploiRepository $offreEmploiRepository, Security $security,
UserRepository $userRepository, CandidatureRepository $candidatureRepository)
{
$this->entityManager = $entityManager;
$this->offreEmploiRepository = $offreEmploiRepository;
$this->security = $security;
$this->cvSportifRepository = $cvSportifRepository;
$this->userRepository = $userRepository;
$this->candidatureRepository = $candidatureRepository;
}
#[Route('inscriptioncandi', name: 'app_inscription')]
public function inscription(Request $request): Response
{
return $this->render('inscription.html.twig', [
]);
}
#[Route('espace_candidat', name: 'acces_espace_candidat')]
public function accesEspaceCandidat(Request $request): Response
{
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
return $this->render('espace_candidat.html.twig', [
'offres_emploi' => $offresEmplois,
'user_current' => $userCurrent,
]);
}
#[Route('menu_candidat', name: 'acces_menu_candidat')]
public function menuCandidat(): Response
{
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
return $this->render('menu_candidat.html.twig', [
'offres_emploi' => $offresEmplois,
'user_current' => $userCurrent,
]);
}
#[Route('cv_sportif_candidat', name: 'acces_cv_sportif_candidat')]
public function cvSportifCandidat(): Response
{
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
$cvSportif = $this->cvSportifRepository->findOneBy([
'user' =>$userCurrent->getId()
]);
$diplomes = $cvSportif->getDiplomes();
$experiencesProfessionnelles = $cvSportif->getExperienceProfessionelles();
$langues = $cvSportif->getLangues();
$sports = $cvSportif->getSports();
$hobbies = $cvSportif->getHobbies();
return $this->render('cv_sportif.html.twig', [
'offres_emploi' => $offresEmplois,
'user_current' => $userCurrent,
'cv_sportif' => $cvSportif,
'diplomes' => $diplomes,
'experiences_prof' => $experiencesProfessionnelles,
'langues' => $langues,
'sports' => $sports,
'hobbies' =>$hobbies,
]);
}
#[Route('offre/{id}', name: 'acces_job')]
public function offreEmploi(OffreEmploi $offreEmploi): Response{
if (!$offreEmploi) {
throw $this->createNotFoundException('No Offre Emploi found');
}
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
$role = count($userCurrent->getRoles());
$cvSportif = $this->cvSportifRepository->findOneBy([
'user' => $userCurrent->getId()
]);
$candidature = $this->candidatureRepository->findOneBy([
'user' => $userCurrent->getId(),
'offreEmploi' => $offreEmploi->getId(),
]);
$candidatures = $this->candidatureRepository->findBy([
'offreEmploi' => $offreEmploi->getId(),
]);
$postuler = 'postule';
if ($candidature == NULL){
$postuler = 'nonpostule';
}
return $this->render('offre_emploi.html.twig', [
'offres_emploi' => $offresEmplois,
'user_current' => $userCurrent,
'cv_sportif' => $cvSportif,
'offreEmploi' => $offreEmploi,
'postuler' => $postuler,
'role' => $role,
'candidatures' => $candidatures,
]);
}
#[Route('postuler/{id}', name: 'acces_postuler')]
public function postuler(OffreEmploi $offreEmploi, EntityManagerInterface $entityManager,
UserAuthenticatorInterface $userAuthenticator,
UserAuthenticator $authenticator,
UserPasswordHasherInterface $userPasswordHasher,
OffreEmploiRepository $offreEmploiRepository,
Security $security,
CvSportifRepository $cvSportifRepository,
CandidatureRepository $candidatureRepository,Request $request, AuthenticationUtils $authenticationUtils): Response{
if (!$offreEmploi) {
throw $this->createNotFoundException('No Offre Emploi found');
}
if ($this->security->getUser() == null){
return $this->redirectToRoute('app_front_home', ['_fragment' => 'testimonials']);
}
$userCurrent = $this->security->getUser();
$role = count($userCurrent->getRoles());
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
$cvSportif = $this->cvSportifRepository->find($userCurrent->getId());
$diplomes = $cvSportif->getDiplomes();
$experiencesProfessionnelles = $cvSportif->getExperienceProfessionelles();
$langues = $cvSportif->getLangues();
$sports = $cvSportif->getSports();
$hobbies = $cvSportif->getHobbies();
$candidature = $this->candidatureRepository->findOneBy([
'user' => $userCurrent->getId(),
'offreEmploi' => $offreEmploi->getId(),
]);
$postuler = 'postule';
if ($candidature == NULL){
$postuler = 'nonpostule';
}
if ($postuler == 'nonpostule'){
$user = $this->userRepository->find($userCurrent->getId());
$candidature = new Candidature();
$candidature->setUser($user);
$candidature->setOffreEmploi($offreEmploi);
$candidature->setDate(new \DateTime());
$this->entityManager->persist($candidature);
$this->entityManager->flush();
return $this->redirectToRoute('acces_job');
}
return $this->redirectToRoute('acces_job');
}
#[Route('mescandidatures', name: 'acces_candidatures')]
public function mesCandidatures(): Response{
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
$cvSportif = $this->cvSportifRepository->findOneBy([
'user' => $userCurrent->getId()
]);
$diplomes = $cvSportif->getDiplomes();
$experiencesProfessionnelles = $cvSportif->getExperienceProfessionelles();
$langues = $cvSportif->getLangues();
$sports = $cvSportif->getSports();
$hobbies = $cvSportif->getHobbies();
$mescandidatures = $this->candidatureRepository->findBy([
'user' => $userCurrent->getId()
]);
return $this->render('mes_candidatures.html.twig', [
'offres_emploi' => $offresEmplois,
'user_current' => $userCurrent,
'cv_sportif' => $cvSportif,
'diplomes' => $diplomes,
'experiences_prof' => $experiencesProfessionnelles,
'langues' => $langues,
'sports' => $sports,
'hobbies' => $hobbies,
'candidatures' => $mescandidatures,
]);
}
}