<?php
namespace App\Controller;
use App\Entity\CvSportif;
use App\Entity\OffreEmploi;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Repository\CandidatureRepository;
use App\Repository\CvSportifRepository;
use App\Repository\OffreEmploiRepository;
use App\Security\UserAuthenticator;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
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 HomeController extends AbstractController
{
private EntityManagerInterface $entityManager;
private UserAuthenticatorInterface $userAuthenticator;
private UserAuthenticator $authenticator;
private UserPasswordHasherInterface $userPasswordHasher;
private OffreEmploiRepository $offreEmploiRepository;
private CvSportifRepository $cvSportifRepository;
private CandidatureRepository $candidatureRepository;
private $msgEmail = "";
/**
* @var Security
*/
private $security;
public function __construct(EntityManagerInterface $entityManager,
UserAuthenticatorInterface $userAuthenticator,
UserAuthenticator $authenticator,
UserPasswordHasherInterface $userPasswordHasher,
OffreEmploiRepository $offreEmploiRepository,
Security $security,
CvSportifRepository $cvSportifRepository,
CandidatureRepository $candidatureRepository)
{
$this->entityManager = $entityManager;
$this->userAuthenticator = $userAuthenticator;
$this->authenticator = $authenticator;
$this->userPasswordHasher = $userPasswordHasher;
$this->offreEmploiRepository = $offreEmploiRepository;
$this->security = $security;
$this->cvSportifRepository = $cvSportifRepository;
$this->candidatureRepository = $candidatureRepository;
}
#[Route('/', name: 'app_front_home')]
public function index(Request $request, AuthenticationUtils $authenticationUtils): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
$offresEmplois = $this->offreEmploiRepository->findAll();
if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$user->setPassword(
$this->userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setUid($form->get('prenom')->getData().$form->get('nom')->getData());
$cvSportif = new CvSportif();
$cvSportif->setUser($user);
$this->entityManager->persist($user);
$this->entityManager->persist($cvSportif);
$this->entityManager->flush();
// do anything else you need here, like send an email
return $this->userAuthenticator->authenticateUser(
$user,
$this->authenticator,
$request
);
}
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
$registration = $form->createView();
return $this->render('home.html.twig', [
'controller_name' => 'Site de Recrutement de Decathlon',
'error' => $error,
'registrationForm' => $registration,
'offres_emploi' => $offresEmplois,
'last_username' => $lastUsername,
]);
}
#[Route('offreoffline/{id}', name: 'acces_job_offline')]
public function offreEmploiOffline(OffreEmploi $offreEmploi): Response{
if (!$offreEmploi) {
throw $this->createNotFoundException('No Offre Emploi found');
}
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
if ($userCurrent!=null){
$role = count($userCurrent->getRoles());
$cvSportif = $this->cvSportifRepository->findOneBy([
'user' => $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(),
]);
$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,
'diplomes' => $diplomes,
'experiences_prof' => $experiencesProfessionnelles,
'langues' => $langues,
'sports' => $sports,
'hobbies' =>$hobbies,
'offreEmploi' => $offreEmploi,
'postuler' => $postuler,
'role' => $role,
'candidatures' => $candidatures,
]);
}
return $this->render('offre_emploi_offline.html.twig', [
'offres_emploi' => $offresEmplois,
'offreEmploi' => $offreEmploi,
]);
}
#[Route('offreemploi/{id}', name: 'acces_job_new')]
public function offreEmploiNew(OffreEmploi $offreEmploi): Response{
if (!$offreEmploi) {
throw $this->createNotFoundException('No Offre Emploi found');
}
$offresEmplois = $this->offreEmploiRepository->findAll();
$userCurrent = $this->security->getUser();
if ($userCurrent!=null){
$role = count($userCurrent->getRoles());
$cvSportif = $this->cvSportifRepository->findOneBy([
'user' => $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(),
]);
$candidatures = $this->candidatureRepository->findBy([
'offreEmploi' => $offreEmploi->getId(),
]);
$postuler = 'postule';
if ($candidature == NULL){
$postuler = 'nonpostule';
}
return $this->render('offreemploi.html.twig', [
'offres_emploi' => $offresEmplois,
'user_current' => $userCurrent,
'cv_sportif' => $cvSportif,
'diplomes' => $diplomes,
'experiences_prof' => $experiencesProfessionnelles,
'langues' => $langues,
'sports' => $sports,
'hobbies' =>$hobbies,
'offreEmploi' => $offreEmploi,
'postuler' => $postuler,
'role' => $role,
'candidatures' => $candidatures,
]);
}
return $this->render('offreemploi.html.twig', [
'offres_emploi' => $offresEmplois,
'offreEmploi' => $offreEmploi,
]);
}
#[Route('/test', name: 'app_front_test')]
public function test(): Response
{
return $this->render('front/test.html.twig', [
'controller_name' => 'HomeController',
]);
}
#[Route('/accueil', name: 'acces_accueil')]
public function allerAccueil(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'hero']);
}
#[Route('/apropos', name: 'acces_apropos')]
public function allerApropos(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'about']);
}
#[Route('/nosvaleurs', name: 'acces_nosvaleurs')]
public function allerNosValeurs(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'why-us']);
}
#[Route('/services', name: 'acces_services')]
public function allerServices(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'services']);
}
#[Route('/offresemploi', name: 'acces_offresemploi')]
public function allerOffresEmploi(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'offresemploi']);
}
#[Route('/equipe', name: 'acces_equipe')]
public function allerEquipe(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'team']);
}
#[Route('/contact', name: 'acces_contact')]
public function allerContact(): Response
{
return $this->redirectToRoute('app_front_home', ['_fragment' => 'contact']);
}
#[Route('/connexionform', name: 'acces_connexionform')]
public function allerConnexion(): Response
{
return $this->redirectToRoute('app_login_home');
}
}