src/Controller/EspaceLeaderController.php line 278

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Candidature;
  4. use App\Entity\CandidatureActivity;
  5. use App\Entity\ExperienceProfessionelle;
  6. use App\Entity\Leader;
  7. use App\Entity\OffreEmploi;
  8. use App\Entity\User;
  9. use App\Form\CandidatureActivityFormType;
  10. use App\Form\ExperienceProfessionelleFormType;
  11. use App\Form\OffreEmploiFormType;
  12. use App\Repository\CandidatureActivityRepository;
  13. use App\Repository\CandidatureRepository;
  14. use App\Repository\CvSportifRepository;
  15. use App\Repository\LeaderRepository;
  16. use App\Repository\OffreEmploiRepository;
  17. use App\Repository\ServiceRepository;
  18. use App\Repository\StatutCARepository;
  19. use App\Repository\StatutOERepository;
  20. use App\Repository\UserRepository;
  21. use App\Security\UserAuthenticator;
  22. use Doctrine\DBAL\Types\TextType;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Component\Security\Core\Security;
  31. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  32. use Symfony\Component\Security\Http\Authenticator\FormLoginAuthenticator;
  33. class EspaceLeaderController extends AbstractController
  34. {
  35.     private EntityManagerInterface $entityManager;
  36.     private OffreEmploiRepository $offreEmploiRepository;
  37.     private CvSportifRepository $cvSportifRepository;
  38.     private UserRepository $userRepository;
  39.     private CandidatureRepository $candidatureRepository;
  40.     private CandidatureActivityRepository $candidatureActivityRepository;
  41.     private StatutCARepository $statutCARepository;
  42.     private ServiceRepository $serviceRepository;
  43.     private StatutOERepository $statutOERepository;
  44.     private LeaderRepository $leaderRepository;
  45.     /**
  46.      * @var Security
  47.      */
  48.     private $security;
  49.     public function __construct(EntityManagerInterface $entityManagerCvSportifRepository $cvSportifRepositoryServiceRepository $serviceRepository,
  50.                                 OffreEmploiRepository $offreEmploiRepositorySecurity $securityCandidatureActivityRepository $candidatureActivityRepository,
  51.                                 UserRepository $userRepositoryCandidatureRepository $candidatureRepository,
  52.                                 StatutCARepository $statutCARepository,
  53.                                 StatutOERepository $statutOERepositoryLeaderRepository $leaderRepository)
  54.     {
  55.         $this->entityManager $entityManager;
  56.         $this->offreEmploiRepository $offreEmploiRepository;
  57.         $this->security $security;
  58.         $this->cvSportifRepository $cvSportifRepository;
  59.         $this->userRepository $userRepository;
  60.         $this->candidatureRepository $candidatureRepository;
  61.         $this->candidatureActivityRepository $candidatureActivityRepository;
  62.         $this->statutCARepository $statutCARepository;
  63.         $this->serviceRepository $serviceRepository;
  64.         $this->statutOERepository $statutOERepository;
  65.         $this->leaderRepository $leaderRepository;
  66.     }
  67.     #[Route('/espace/leader'name'app_espace_leader')]
  68.     public function index(): Response
  69.     {
  70.         return $this->render('espace_leader/index.html.twig', [
  71.             'controller_name' => 'EspaceLeaderController',
  72.         ]);
  73.     }
  74.     #[Route('espace_leader'name'acces_espace_leader')]
  75.     public function accesEspaceLeader(Request $request): Response
  76.     {
  77.         $offresEmplois $this->offreEmploiRepository->findAll();
  78.         $userCurrent $this->security->getUser();
  79.         return $this->render('espace_leader.html.twig', [
  80.             'offres_emploi' => $offresEmplois,
  81.             'user_current' => $userCurrent,
  82.         ]);
  83.     }
  84.     #[Route('creer_emploi'name'create_emploi')]
  85.     public function creerOffreEmploi(Request $request): Response
  86.     {
  87.         $offreEmploi = new OffreEmploi();
  88.         $form $this->createForm(OffreEmploiFormType::class, $offreEmploi);
  89.         $form->handleRequest($request);
  90.         if ($form->isSubmitted() && $form->isValid()) {
  91.             // encode the plain password
  92.             $offreEmploi->setTitre($form->get('titre')->getData());
  93.             $offreEmploi->setContenu($form->get('contenu')->getData());
  94.             $offreEmploi->setService($form->get('service')->getData());
  95.             $offreEmploi->setUser($this->security->getUser());
  96.             $statutOE $this->statutOERepository->findOneBy([
  97.                 'libelle'=>'ouvert'
  98.             ]);
  99.             $offreEmploi->setStatutOE($statutOE);
  100.             $image $form->get('image')->getData();
  101.             if ($image) {
  102.                 $originalFilename pathinfo($image->getClientOriginalName(), PATHINFO_FILENAME);
  103.                 // this is needed to safely include the file name as part of the URL
  104.                 $safeFilename 'offre_emploi';
  105.                 $newFilename $safeFilename.'-'.uniqid().'.'.$image->guessExtension();
  106.                 // Move the file to the directory where brochures are stored
  107.                 try {
  108.                     $image->move(
  109.                         $this->getParameter('photos_candidats_directory'),
  110.                         $newFilename
  111.                     );
  112.                 } catch (FileException $e) {
  113.                     // ... handle exception if something happens during file upload
  114.                 }
  115.                 // updates the 'brochureFilename' property to store the PDF file name
  116.                 // instead of its contents
  117.                 $offreEmploi->setImage('uploads/photos_candidats/'.$newFilename);
  118.             }
  119.             $this->entityManager->persist($offreEmploi);
  120.             $this->entityManager->flush();
  121.             return $this->redirectToRoute('create_emploi');
  122.         }
  123.         $offresEmplois $this->offreEmploiRepository->findAll();
  124.         $services $this->serviceRepository->findAll();
  125.         $userCurrent $this->security->getUser();
  126.         return $this->render('creer_offre_emploi.html.twig', [
  127.             'offres_emploi' => $offresEmplois,
  128.             'user_current' => $userCurrent,
  129.             'form' => $form->createView(),
  130.         ]);
  131.     }
  132.     #[Route('cv_candidat/{id}'name'acces_cv_candidat')]
  133.     public function cvCandidat(Candidature $candidatureRequest $request): Response
  134.     {
  135.         $candidatureActivity = new CandidatureActivity();
  136.         $form $this->createForm(CandidatureActivityFormType::class, $candidatureActivity);
  137.         $form->handleRequest($request);
  138.         $offresEmplois $this->offreEmploiRepository->findAll();
  139.         $userCurrent $candidature->getUser();
  140.         $cvSportif $this->cvSportifRepository->find($userCurrent->getId());
  141.         $diplomes $cvSportif->getDiplomes();
  142.         $experiencesProfessionnelles $cvSportif->getExperienceProfessionelles();
  143.         $langues $cvSportif->getLangues();
  144.         $sports $cvSportif->getSports();
  145.         $hobbies $cvSportif->getHobbies();
  146.         $candidaturesActivity $this->candidatureActivityRepository->findBy([
  147.             'candidature' => $candidature->getId(),
  148.         ]);
  149.         if ($form->isSubmitted() && $form->isValid()) {
  150.             // encode the plain password
  151.             $candidatureActivity->setCommentaire($form->get('commentaire')->getData());
  152.             $user $this->security->getUser();
  153.             $candidatureActivity->setUser($user);
  154.             $candidatureActivity->setDate(new \DateTime());
  155.             $candidatureActivity->setCandidature($candidature);
  156.             $statutca $this->statutCARepository->findOneBy([
  157.                'libelle'=> 'commenté'
  158.             ]);
  159.             $candidatureActivity->setStatutCA($statutca);
  160.             $this->entityManager->persist($candidatureActivity);
  161.             $this->entityManager->flush();
  162.             // do anything else you need here, like send an email
  163.             return $this->redirectToRoute('acces_cv_candidat', ['id' => $candidature->getId()]);
  164.         }
  165.         return $this->render('cv_candidat.html.twig', [
  166.             'offres_emploi' => $offresEmplois,
  167.             'user_current' => $userCurrent,
  168.             'cv_sportif' => $cvSportif,
  169.             'diplomes' => $diplomes,
  170.             'experiences_prof' => $experiencesProfessionnelles,
  171.             'langues' => $langues,
  172.             'sports' => $sports,
  173.             'hobbies' =>$hobbies,
  174.             'candidatureActivities' => $candidaturesActivity,
  175.             'form' => $form->createView(),
  176.         ]);
  177.     }
  178.     #[Route('ajouter_candidature_activity'name'add_candidature')]
  179.     public function ajouterCandidatureActivity(Request $requestUserPasswordHasherInterface $userPasswordHasher,
  180.                                                     UserAuthenticatorInterface $userAuthenticator,
  181.                                                     UserAuthenticator $authenticator,
  182.                                                     EntityManagerInterface $entityManager): Response{
  183.         $candidatureActivity = new CandidatureActivity();
  184.         $form $this->createForm(CandidatureActivityFormType::class, $candidatureActivity);
  185.         $form->handleRequest($request);
  186.         $offresEmplois $this->offreEmploiRepository->findAll();
  187.         $userCurrent $this->security->getUser();
  188.         $cvSportif $this->cvSportifRepository->find($userCurrent->getId());
  189.         $diplomes $cvSportif->getDiplomes();
  190.         $experiencesProfessionnelles $cvSportif->getExperienceProfessionelles();
  191.         $langues $cvSportif->getLangues();
  192.         $sports $cvSportif->getSports();
  193.         return $this->renderForm('cv_candidat.html.twig', [
  194.             'form' => $form,
  195.             'user_current' => $userCurrent,
  196.             'cv_sportif' => $cvSportif,
  197.             'diplomes' => $diplomes,
  198.             'experiences_prof' => $experiencesProfessionnelles,
  199.             'langues' => $langues,
  200.             'sports' => $sports,
  201.         ]);
  202.     }
  203.     #[Route('loginleader'name'login_leader')]
  204.     public function connexionLeader(Request $requestUserPasswordHasherInterface $userPasswordHasher,
  205.                                                UserAuthenticatorInterface $userAuthenticator,
  206.                                                UserAuthenticator $formLoginAuthenticator,
  207.                                                EntityManagerInterface $entityManager): Response{
  208.         $code $request->query->get('code');
  209.         $state $request->query->get('state');
  210.         if($code != ""){
  211.             $curl curl_init();
  212.             curl_setopt_array($curl, array(
  213.                 CURLOPT_URL => "https://idpdecathlon.oxylane.com/as/token.oauth2",
  214.                 CURLOPT_RETURNTRANSFER => true,
  215.                 CURLOPT_ENCODING => "",
  216.                 CURLOPT_MAXREDIRS => 10,
  217.                 CURLOPT_TIMEOUT => 30,
  218.                 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  219.                 CURLOPT_CUSTOMREQUEST => "POST",
  220.                 CURLOPT_POSTFIELDS => "grant_type=authorization_code&client_id=Cb975cb74efdafb9f8baed6bf914c4102963d5252&code=".$code."&redirect_uri=https://recrut.sunudecath.com/loginleader&state=recrutement",
  221.                 CURLOPT_HTTPHEADER => array(
  222.                     "Authorization: Basic Q2I5NzVjYjc0ZWZkYWZiOWY4YmFlZDZiZjkxNGM0MTAyOTYzZDUyNTI6U2hXV0RyRWdOWnB0c2N5V01UQWpUSFM1MTRZQUh3MHl6SUcwdnQ5anZSS3pxY3VLZGtlSWdkM3Rtd0pQVXo4dg==",
  223.                     "Postman-Token: 1850f2a5-26fb-452e-b9cf-87d8e61b5c07",
  224.                     "cache-control: no-cache"
  225.                 ),
  226.             ));
  227.             $res curl_exec($curl);
  228.             $err curl_error($curl);
  229.             curl_close($curl);
  230.             if ($err) {
  231.                 $response json_encode(array('status'=>'0''message' => 'erreur lors du traitement'));
  232.                 return $this->json(json_decode($response), Response::HTTP_OK);
  233.                 //echo "cURL Error #:" . $err;
  234.             }else{
  235.                 $resp json_decode($restrue);
  236.                 $accessToken $resp['access_token'];
  237.                 //recupération des infos du collaborateur
  238.                 $curl2 curl_init();
  239.                 curl_setopt_array($curl2, array(
  240.                     CURLOPT_URL => "https://idpdecathlon.oxylane.com/idp/userinfo.openid",
  241.                     CURLOPT_RETURNTRANSFER => true,
  242.                     CURLOPT_ENCODING => "",
  243.                     CURLOPT_MAXREDIRS => 10,
  244.                     CURLOPT_TIMEOUT => 30,
  245.                     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  246.                     CURLOPT_CUSTOMREQUEST => "POST",
  247.                     CURLOPT_POSTFIELDS => "",
  248.                     CURLOPT_HTTPHEADER => array(
  249.                         "Authorization: Bearer ".$accessToken,
  250.                         "Postman-Token: 1850f2a5-26fb-452e-b9cf-87d8e61b5c07",
  251.                         "cache-control: no-cache"
  252.                     ),
  253.                 ));
  254.                 $res2 curl_exec($curl2);
  255.                 $err2 curl_error($curl2);
  256.                 curl_close($curl2);
  257.                 if ($err2) {
  258.                     $response json_encode(array('status'=>'0''message' => 'erreur lors du traitement'));
  259.                     return $this->json(json_decode($response), Response::HTTP_OK);
  260.                 }else{
  261.                     $response json_encode(array('status'=>'1''message' => 'Tout se passe bien''datas'=>json_decode($res2)));
  262.                     $datas json_decode($response)->datas;
  263.                     $leader $this->leaderRepository->findOneBy([
  264.                         'email' => $datas->mail
  265.                     ]);
  266.                     if ($leader == null){
  267.                         return $this->renderForm('connexion_leader.html.twig', [
  268.                         ]);
  269.                     }
  270.                     else{
  271.                         $user $this->userRepository->findOneBy([
  272.                             'email' => $datas->mail
  273.                         ]);
  274.                         if ($user == null){
  275.                             $userCon = new User();
  276.                             $userCon->setEmail($datas->mail);
  277.                             $userCon->setPassword($userPasswordHasher->hashPassword($userCon'password'));
  278.                             $userCon->setUid($datas->uid);
  279.                             $userCon->setVisibility(1);
  280.                             $userCon->setRoles(["ROLE_ADMIN"]);
  281.                             $userCon->setNom($datas->familyName);
  282.                             $userCon->setPrenom($datas->givenName);
  283.                             $this->entityManager->persist($userCon);
  284.                             $this->entityManager->flush();
  285.                             $userAuthenticator->authenticateUser($userCon$formLoginAuthenticator$request);
  286.                             $offresEmplois $this->offreEmploiRepository->findAll();
  287.                             $userCurrent $this->security->getUser();
  288.                             return $userAuthenticator->authenticateUser(
  289.                                 $userCon,
  290.                                 $formLoginAuthenticator,
  291.                                 $request);
  292.                         }
  293.                         else {
  294.                             $userCon = new User();
  295.                             $userCon->setEmail($datas->mail);
  296.                             $userCon->setPassword($userPasswordHasher->hashPassword($userCon'password'));
  297.                             $userAuthenticator->authenticateUser($userCon$formLoginAuthenticator$request);
  298.                             $offresEmplois $this->offreEmploiRepository->findAll();
  299.                             $userCurrent $this->security->getUser();
  300.                             return $userAuthenticator->authenticateUser(
  301.                                 $user,
  302.                                 $formLoginAuthenticator,
  303.                                 $request);
  304.                         }
  305.                     }
  306.                     return $this->json(json_decode($response), Response::HTTP_OK);
  307.                 }
  308.             }
  309.         }else{
  310.             $response json_encode(array('status'=>'0''message' => 'code manquant'));
  311.         }
  312.         return $this->renderForm('connexion_leader.html.twig', [
  313.         ]);
  314.     }
  315.     #[Route('fedredirect'name'redirect_fed')]
  316.     public function getRedirectionFed(Request $request): Response
  317.     {
  318.         return $this->renderForm('connexion_leader.html.twig', [
  319.         ]);
  320.     }
  321.     #[Route('ajouter_leader'name'add_leader')]
  322.     public function ajouterLeader(Request $request)
  323.     {
  324.         $email $request->request->get('email');
  325.         $leader = new Leader();
  326.         $leader->setEmail($email);
  327.         $this->entityManager->persist($leader);
  328.         $this->entityManager->flush();
  329.         return $this->redirectToRoute('acces_espace_leader');
  330.     }
  331. }