diff --git a/src/Controller/AnnouncementController.php b/src/Controller/AnnouncementController.php index 707e1fc..31c6513 100644 --- a/src/Controller/AnnouncementController.php +++ b/src/Controller/AnnouncementController.php @@ -5,6 +5,7 @@ namespace App\Controller; use App\Entity\Announcement; use App\Form\AnnouncementType; use App\Repository\AnnouncementRepository; +use App\Repository\InternApplicationRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -14,8 +15,13 @@ use Symfony\Component\Routing\Attribute\Route; #[Route('/announcement')] final class AnnouncementController extends AbstractController { + + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly AnnouncementRepository $announcementRepository, + ){} #[Route('/', name: 'app_announcement_index')] - public function list(Request $request, AnnouncementRepository $announcementRepository): Response + public function list(Request $request,): Response { $user = $this->getUser(); $announcements = []; @@ -28,9 +34,9 @@ final class AnnouncementController extends AbstractController $showNonValidated = $request->query->get('show_non_validated'); if ($showNonValidated) { - $announcements = $announcementRepository->findBy(['status' => 'notVerified']); + $announcements = $this->announcementRepository->findBy(['status' => 'notVerified']); } else { - $announcements = $announcementRepository->findAll(); + $announcements = $this->announcementRepository->findAll(); } } @@ -38,16 +44,16 @@ final class AnnouncementController extends AbstractController $company = $user->getCompany(); if ($company) { - $announcements = $announcementRepository->findBy(['company' => $company]); + $announcements = $this->announcementRepository->findBy(['company' => $company]); } } if (in_array('ROLE_INTERN', $user->getRoles())) { - $announcements = $announcementRepository->findBy(['status' => 'Verified']); + $announcements = $this->announcementRepository->findBy(['status' => 'Verified']); } if ($companyName || $location || $category) { - $announcements = $announcementRepository->searchAnnouncements($companyName, $location, $category); + $announcements = $this->announcementRepository->searchAnnouncements($companyName, $location, $category); } $favorites = []; @@ -68,7 +74,7 @@ final class AnnouncementController extends AbstractController #[Route('/new', name: 'app_announcement_new', methods: ['GET', 'POST'])] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request,): Response { /*$user = $this->getUser(); @@ -89,8 +95,8 @@ final class AnnouncementController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $announcement->setCreationDate(new \DateTime()); $announcement->setStatus('notVerified'); - $entityManager->persist($announcement); - $entityManager->flush(); + $this->entityManager->persist($announcement); + $this->entityManager->flush(); return $this->redirectToRoute('app_announcement_index', [], Response::HTTP_SEE_OTHER); } @@ -110,13 +116,13 @@ final class AnnouncementController extends AbstractController } #[Route('/{id}/edit', name: 'app_announcement_edit', methods: ['GET', 'POST'])] - public function edit(Request $request, Announcement $announcement, EntityManagerInterface $entityManager): Response + public function edit(Request $request, Announcement $announcement,): Response { $form = $this->createForm(AnnouncementType::class, $announcement); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_announcement_index', [], Response::HTTP_SEE_OTHER); } @@ -128,23 +134,23 @@ final class AnnouncementController extends AbstractController } #[Route('/{id}', name: 'app_announcement_delete', methods: ['POST'])] - public function delete(Request $request, Announcement $announcement, EntityManagerInterface $entityManager): Response + public function delete(Request $request, Announcement $announcement,): Response { if ($this->isCsrfTokenValid('delete'.$announcement->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($announcement); - $entityManager->flush(); + $this->entityManager->remove($announcement); + $this->entityManager->flush(); } return $this->redirectToRoute('app_announcement_index', [], Response::HTTP_SEE_OTHER); } #[Route('/{id}/validate', name: 'app_announcement_validate', methods: ['POST'])] - public function validate(Request $request, Announcement $announcement, EntityManagerInterface $entityManager): Response + public function validate(Request $request, Announcement $announcement,): Response { if ($announcement->getStatus() !== 'Verified') { $announcement->setStatus('Verified'); - $entityManager->flush(); + $this->entityManager->flush(); } return $this->redirectToRoute('app_announcement_show', ['id' => $announcement->getId()], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/CompanyController.php b/src/Controller/CompanyController.php index 55cfd87..b729d8a 100644 --- a/src/Controller/CompanyController.php +++ b/src/Controller/CompanyController.php @@ -4,7 +4,9 @@ namespace App\Controller; use App\Entity\Company; use App\Form\CompanyType; +use App\Repository\AnnouncementRepository; use App\Repository\CompanyRepository; +use App\Repository\InternApplicationRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -15,25 +17,29 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route('/company')] final class CompanyController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly CompanyRepository $companyRepository, + ){} #[Route(name: 'app_company_index', methods: ['GET'])] - public function index(CompanyRepository $companyRepository): Response + public function index(): Response { return $this->render('company/index.html.twig', [ - 'companies' => $companyRepository->findAll(), + 'companies' => $this->companyRepository->findAll(), ]); } #[Route('/new', name: 'app_company_new', methods: ['GET', 'POST'])] #[IsGranted('ROLE_ADMIN')] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request,): Response { $company = new Company(); $form = $this->createForm(CompanyType::class, $company); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->persist($company); - $entityManager->flush(); + $this->entityManager->persist($company); + $this->entityManager->flush(); return $this->redirectToRoute('app_company_index', [], Response::HTTP_SEE_OTHER); } @@ -54,13 +60,13 @@ final class CompanyController extends AbstractController #[Route('/{id}/edit', name: 'app_company_edit', methods: ['GET', 'POST'])] #[IsGranted('ROLE_ADMIN')] - public function edit(Request $request, Company $company, EntityManagerInterface $entityManager): Response + public function edit(Request $request, Company $company,): Response { $form = $this->createForm(CompanyType::class, $company); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_company_index', [], Response::HTTP_SEE_OTHER); } @@ -72,11 +78,11 @@ final class CompanyController extends AbstractController } #[Route('/{id}', name: 'app_company_delete', methods: ['POST'])] - public function delete(Request $request, Company $company, EntityManagerInterface $entityManager): Response + public function delete(Request $request, Company $company,): Response { if ($this->isCsrfTokenValid('delete'.$company->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($company); - $entityManager->flush(); + $this->entityManager->remove($company); + $this->entityManager->flush(); } return $this->redirectToRoute('app_company_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/DegreeController.php b/src/Controller/DegreeController.php index d4e2469..8b855b0 100644 --- a/src/Controller/DegreeController.php +++ b/src/Controller/DegreeController.php @@ -5,7 +5,9 @@ namespace App\Controller; use App\Entity\Degree; use App\Entity\InternDegree; use App\Form\DegreeType; +use App\Repository\AnnouncementRepository; use App\Repository\DegreeRepository; +use App\Repository\InternApplicationRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -15,24 +17,28 @@ use Symfony\Component\Routing\Attribute\Route; #[Route('/degree')] final class DegreeController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly DegreeRepository $degreeRepository, + ){} #[Route(name: 'app_degree_index', methods: ['GET'])] - public function index(DegreeRepository $degreeRepository): Response + public function index(): Response { return $this->render('degree/index.html.twig', [ - 'degrees' => $degreeRepository->findAll(), + 'degrees' => $this->degreeRepository->findAll(), ]); } #[Route('/new', name: 'app_degree_new', methods: ['GET', 'POST'])] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request,): Response { $degree = new Degree(); $form = $this->createForm(DegreeType::class, $degree); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->persist($degree); - $entityManager->flush(); + $this->entityManager->persist($degree); + $this->entityManager->flush(); return $this->redirectToRoute('app_degree_index', [], Response::HTTP_SEE_OTHER); } @@ -52,13 +58,13 @@ final class DegreeController extends AbstractController } #[Route('/{id}/edit', name: 'app_degree_edit', methods: ['GET', 'POST'])] - public function edit(Request $request, Degree $degree, EntityManagerInterface $entityManager): Response + public function edit(Request $request, Degree $degree,): Response { $form = $this->createForm(DegreeType::class, $degree); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_degree_index', [], Response::HTTP_SEE_OTHER); } @@ -70,11 +76,11 @@ final class DegreeController extends AbstractController } #[Route('/{id}', name: 'app_degree_delete', methods: ['POST'])] - public function delete(Request $request, Degree $degree, EntityManagerInterface $entityManager): Response + public function delete(Request $request, Degree $degree,): Response { if ($this->isCsrfTokenValid('delete'.$degree->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($degree); - $entityManager->flush(); + $this->entityManager->remove($degree); + $this->entityManager->flush(); } return $this->redirectToRoute('app_degree_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/FAQController.php b/src/Controller/FAQController.php index d8db205..15ba076 100644 --- a/src/Controller/FAQController.php +++ b/src/Controller/FAQController.php @@ -4,7 +4,9 @@ namespace App\Controller; use App\Entity\FAQ; use App\Form\FAQType; +use App\Repository\AnnouncementRepository; use App\Repository\FAQRepository; +use App\Repository\InternApplicationRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -15,17 +17,21 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route('/faq')] final class FAQController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly FaqRepository $faqRepository, + ){} #[Route(name: 'app_faq_index', methods: ['GET'])] - public function index(FAQRepository $fAQRepository): Response + public function index(): Response { return $this->render('faq/index.html.twig', [ - 'faqs' => $fAQRepository->findAll(), + 'faqs' => $this->faqRepository->findAll(), ]); } #[Route('/new', name: 'app_faq_new', methods: ['GET', 'POST'])] #[IsGranted('ROLE_ADMIN')] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request,): Response { $fAQ = new FAQ(); $form = $this->createForm(FAQType::class, $fAQ); @@ -33,8 +39,8 @@ final class FAQController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $fAQ->setUpdateDate(new \DateTime()); - $entityManager->persist($fAQ); - $entityManager->flush(); + $this->entityManager->persist($fAQ); + $this->entityManager->flush(); return $this->redirectToRoute('app_faq_index', [], Response::HTTP_SEE_OTHER); } @@ -55,14 +61,14 @@ final class FAQController extends AbstractController #[Route('/{id}/edit', name: 'app_faq_edit', methods: ['GET', 'POST'])] #[IsGranted('ROLE_ADMIN')] - public function edit(Request $request, FAQ $fAQ, EntityManagerInterface $entityManager): Response + public function edit(Request $request, FAQ $fAQ,): Response { $form = $this->createForm(FAQType::class, $fAQ); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $fAQ->setUpdateDate(new \DateTime()); - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_faq_index', [], Response::HTTP_SEE_OTHER); } @@ -75,11 +81,11 @@ final class FAQController extends AbstractController #[Route('/{id}', name: 'app_faq_delete', methods: ['POST'])] #[IsGranted('ROLE_ADMIN')] - public function delete(Request $request, FAQ $fAQ, EntityManagerInterface $entityManager): Response + public function delete(Request $request, FAQ $fAQ,): Response { if ($this->isCsrfTokenValid('delete'.$fAQ->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($fAQ); - $entityManager->flush(); + $this->entityManager->remove($fAQ); + $this->entityManager->flush(); } return $this->redirectToRoute('app_faq_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/IndexController.php b/src/Controller/IndexController.php index 5cce937..4e6491e 100644 --- a/src/Controller/IndexController.php +++ b/src/Controller/IndexController.php @@ -3,7 +3,9 @@ namespace App\Controller; use App\Entity\UserApp; +use App\Repository\AnnouncementRepository; use App\Repository\CompanyRepository; +use App\Repository\InternApplicationRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Controller/InternController.php b/src/Controller/InternController.php index 7e08ded..1d1db45 100644 --- a/src/Controller/InternController.php +++ b/src/Controller/InternController.php @@ -10,7 +10,13 @@ use App\Entity\InternDegree; use App\Entity\InternSkill; use App\Entity\Skill; use App\Form\InternType; +use App\Repository\AnnouncementRepository; +use App\Repository\DegreeRepository; +use App\Repository\InternApplicationRepository; +use App\Repository\InternDegreeRepository; use App\Repository\InternRepository; +use App\Repository\InternSkillRepository; +use App\Repository\SkillRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -20,11 +26,21 @@ use Symfony\Component\Routing\Attribute\Route; #[Route('/intern')] final class InternController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly AnnouncementRepository $announcementRepository, + private readonly InternRepository $internRepository, + private readonly InternApplicationRepository $internApplicationRepository, + private readonly InternDegreeRepository $internDegreeRepository, + private readonly InternSkillRepository $internSkillRepository, + private readonly DegreeRepository $degreeRepository, + private readonly SkillRepository $skillRepository, + ){} #[Route(name: 'app_intern_index', methods: ['GET'])] - public function index(InternRepository $internRepository): Response + public function index(): Response { return $this->render('intern/index.html.twig', [ - 'interns' => $internRepository->findAll(), + 'interns' => $this->internRepository->findAll(), ]); } @@ -37,13 +53,13 @@ final class InternController extends AbstractController } #[Route('/{id}/edit', name: 'app_intern_edit', methods: ['GET', 'POST'])] - public function edit(Request $request, Intern $intern, EntityManagerInterface $entityManager): Response + public function edit(Request $request, Intern $intern,): Response { $form = $this->createForm(InternType::class, $intern); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_intern_index', [], Response::HTTP_SEE_OTHER); } @@ -55,18 +71,18 @@ final class InternController extends AbstractController } #[Route('/{id}', name: 'app_intern_delete', methods: ['POST'])] - public function delete(Request $request, Intern $intern, EntityManagerInterface $entityManager): Response + public function delete(Request $request, Intern $intern,): Response { if ($this->isCsrfTokenValid('delete'.$intern->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($intern); - $entityManager->flush(); + $this->entityManager->remove($intern); + $this->entityManager->flush(); } return $this->redirectToRoute('app_intern_index', [], Response::HTTP_SEE_OTHER); } #[Route('/degrees/add', name:'app_intern_add_degrees', methods:['POST'])] - public function addDegrees(Request $request, EntityManagerInterface $entityManager): Response + public function addDegrees(Request $request): Response { $intern = $this->getUser(); @@ -81,17 +97,14 @@ final class InternController extends AbstractController return $this->redirectToRoute('app_degree_index'); } - $degreeRepository = $entityManager->getRepository(Degree::class); - $internDegreeRepository = $entityManager->getRepository(InternDegree::class); - foreach ($selectedDegreeIds as $degreeId) { - $degree = $degreeRepository->find($degreeId); + $degree = $this->degreeRepository->find($degreeId); if (!$degree) { continue; } - $existingInternDegree = $internDegreeRepository->findOneBy([ + $existingInternDegree = $this->internDegreeRepository->findOneBy([ 'intern' => $intern, 'degree' => $degree ]); @@ -102,11 +115,11 @@ final class InternController extends AbstractController $internDegree->setDegree($degree); $internDegree->setGraduationDate(new \DateTime()); - $entityManager->persist($internDegree); + $this->entityManager->persist($internDegree); } } - $entityManager->flush(); + $this->entityManager->flush(); $this->addFlash('success', 'Les diplômes ont été ajoutés avec succès.'); @@ -114,20 +127,17 @@ final class InternController extends AbstractController } #[Route('/application/send', name:'app_intern_send_application', methods:['POST'])] - public function sendApplication(Request $request, EntityManagerInterface $entityManager): Response + public function sendApplication(Request $request,): Response { $intern = $this->getUser(); if (!$intern instanceof Intern) { throw $this->createAccessDeniedException("Seuls les stagiaires peuvent envoyer des candidatures."); } - $announcementRepository = $entityManager->getRepository(Announcement::class); - $internApplicationRepository = $entityManager->getRepository(InternApplication::class); - $announcementId = $request->request->get('announcement_id'); - $announcement = $announcementRepository->find($announcementId); + $announcement = $this->announcementRepository->find($announcementId); - $existingInternApplication = $internApplicationRepository->findOneBy([ + $existingInternApplication = $this->internApplicationRepository->findOneBy([ 'intern' => $intern, 'application' => $announcement ]); @@ -139,9 +149,9 @@ final class InternController extends AbstractController $internApplication->setApplicationDate(new \DateTime()); $internApplication->setStatus("En Attente"); - $entityManager->persist($internApplication); + $this->entityManager->persist($internApplication); } - $entityManager->flush(); + $this->entityManager->flush(); $this->addFlash('success', 'La candidature à bien été envoyée.'); @@ -150,7 +160,7 @@ final class InternController extends AbstractController } #[Route('/skills/add', name:'app_intern_add_skills', methods:['POST'])] - public function addSkills(Request $request, EntityManagerInterface $entityManager): Response + public function addSkills(Request $request,): Response { $intern = $this->getUser(); @@ -165,15 +175,12 @@ final class InternController extends AbstractController return $this->redirectToRoute('app_skill_index'); } - $skillRepository = $entityManager->getRepository(Skill::class); - $internSkillRepository = $entityManager->getRepository(InternSkill::class); - foreach ($selectedSkillIds as $skillId) { - $skill = $skillRepository->find($skillId); + $skill = $this->skillRepository->find($skillId); if (!$skill) continue; - $existingInternSkill = $internSkillRepository->findOneBy([ + $existingInternSkill = $this->internSkillRepository->findOneBy([ 'intern' => $intern, 'skill' => $skill ]); @@ -183,11 +190,11 @@ final class InternController extends AbstractController $internSkill->setIntern($intern); $internSkill->setSkill($skill); - $entityManager->persist($internSkill); + $this->entityManager->persist($internSkill); } } - $entityManager->flush(); + $this->entityManager->flush(); $this->addFlash('success', 'Les compétences ont été ajoutées avec succès.'); diff --git a/src/Controller/InternFavoriteController.php b/src/Controller/InternFavoriteController.php index 1a04b22..c4d95f1 100644 --- a/src/Controller/InternFavoriteController.php +++ b/src/Controller/InternFavoriteController.php @@ -5,7 +5,9 @@ namespace App\Controller; use App\Entity\Announcement; use App\Entity\Intern; use App\Entity\InternFavorite; +use App\Repository\AnnouncementRepository; use App\Repository\InternFavoriteRepository; +use App\Repository\InternRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; @@ -17,69 +19,69 @@ use Symfony\Component\HttpFoundation\Response; class InternFavoriteController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly InternFavoriteRepository $internFavoriteRepository, + ){} #[Route('/favorite/toggle/{id}', name: 'toggle_favorite')] - public function toggleFavorite( - Announcement $announcement, - EntityManagerInterface $em, - InternFavoriteRepository $repo - ): RedirectResponse { - $intern = $this->getUser()->getIntern(); + public function toggleFavorite(Announcement $announcement): RedirectResponse { + $intern = $this->getUser(); - $existing = $repo->findOneBy([ + $existing = $this->internFavoriteRepository->findOneBy([ 'intern' => $intern, 'announcement' => $announcement ]); if ($existing) { - $em->remove($existing); + $this->entityManager->remove($existing); } else { $favorite = new InternFavorite(); $favorite->setIntern($intern); $favorite->setAnnouncement($announcement); - $em->persist($favorite); + $this->entityManager->persist($favorite); } - $em->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_announcement_index'); } #[Route('/announcement/{id}/favorite/toggle', name: 'app_favorite_toggle', methods: ['POST'])] - public function toggle(Announcement $announcement, EntityManagerInterface $em, Security $security): RedirectResponse + public function toggle(Announcement $announcement,Security $security): RedirectResponse { - $user = $security->getUser(); + $user = $this->getUser(); if (!$user instanceof Intern) { throw new AccessDeniedHttpException('Seuls les stagiaires peuvent ajouter aux favoris.'); } - $favorite = $em->getRepository(InternFavorite::class)->findOneBy([ + $favorite = $this->entityManager->getRepository(InternFavorite::class)->findOneBy([ 'intern' => $user, 'announcement' => $announcement ]); if ($favorite) { - $em->remove($favorite); + $this->entityManager->remove($favorite); } else { $favorite = new InternFavorite(); $favorite->setIntern($user); $favorite->setAnnouncement($announcement); - $em->persist($favorite); + $this->entityManager->persist($favorite); } - $em->flush(); + $this->entityManager->flush(); return new RedirectResponse($_SERVER['HTTP_REFERER'] ?? '/'); } #[Route('/announcement/{id}', name: 'app_announcement_show')] - public function show(Announcement $announcement, InternFavoriteRepository $internFavoriteRepository): Response + public function show(Announcement $announcement,): Response { $user = $this->getUser(); $isFavorite = false; if (in_array('ROLE_INTERN', $user->getRoles())) { - $favorite = $internFavoriteRepository->findOneBy([ + $favorite = $this->internFavoriteRepository->findOneBy([ 'announcement' => $announcement, 'intern' => $user, ]); @@ -94,12 +96,12 @@ class InternFavoriteController extends AbstractController } #[Route('/favorite/add/{id}', name: 'app_favorite_add')] - public function addFavorite(Announcement $announcement, EntityManagerInterface $entityManager): Response + public function addFavorite(Announcement $announcement,): Response { $user = $this->getUser(); // Vérifier si l'intern a déjà ce favori - $existingFavorite = $entityManager->getRepository(InternFavorite::class)->findOneBy([ + $existingFavorite = $this->entityManager->getRepository(InternFavorite::class)->findOneBy([ 'announcement' => $announcement, 'intern' => $user, ]); @@ -109,26 +111,26 @@ class InternFavoriteController extends AbstractController $favorite->setAnnouncement($announcement); $favorite->setIntern($user); - $entityManager->persist($favorite); - $entityManager->flush(); + $this->entityManager->persist($favorite); + $this->entityManager->flush(); } return $this->redirectToRoute('app_announcement_show', ['id' => $announcement->getId()]); } #[Route('/favorite/remove/{id}', name: 'app_favorite_remove')] - public function removeFavorite(Announcement $announcement, EntityManagerInterface $entityManager): Response + public function removeFavorite(Announcement $announcement,): Response { $user = $this->getUser(); - $favorite = $entityManager->getRepository(InternFavorite::class)->findOneBy([ + $favorite = $this->entityManager->getRepository(InternFavorite::class)->findOneBy([ 'announcement' => $announcement, 'intern' => $user, ]); if ($favorite) { - $entityManager->remove($favorite); - $entityManager->flush(); + $this->entityManager->remove($favorite); + $this->entityManager->flush(); } return $this->redirectToRoute('app_announcement_show', ['id' => $announcement->getId()]); diff --git a/src/Controller/MessageController.php b/src/Controller/MessageController.php index cca62c2..13db7b5 100644 --- a/src/Controller/MessageController.php +++ b/src/Controller/MessageController.php @@ -5,22 +5,33 @@ namespace App\Controller; use App\Entity\Message; use App\Entity\UserApp; use App\Form\MessageType; +use App\Repository\AnnouncementRepository; +use App\Repository\InternSkillRepository; use App\Repository\MessageRepository; use App\Repository\UserRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\Routing\Attribute\Route; #[Route('/message')] final class MessageController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly MessageRepository $messageRepository, + private readonly UserRepository $userRepository, + ){} #[Route(name: 'app_message_index', methods: ['GET'])] - public function index(MessageRepository $messageRepository): Response + public function index(): Response { $user = $this->getUser(); - $messages = $messageRepository->findLatestMessagesByUser($user); + if (!$user instanceof UserApp) { + throw new AccessDeniedHttpException("erreur"); + } + $messages = $this->messageRepository->findLatestMessagesByUser($user); return $this->render('message/index.html.twig', [ 'messages' => $messages, @@ -28,12 +39,12 @@ final class MessageController extends AbstractController } #[Route('/conversation/{id}', name: 'app_message_conversation', methods: ['GET'])] - public function conversation(Message $message, MessageRepository $messageRepository): Response + public function conversation(Message $message,): Response { $user = $this->getUser(); $otherUser = $message->getSender() === $user ? $message->getReceiver() : $message->getSender(); - $conversation = $messageRepository->findByConversation($user, $otherUser); + $conversation = $this->messageRepository->findByConversation($user, $otherUser); return $this->render('message/conversation.html.twig', [ 'conversation' => $conversation, @@ -44,12 +55,12 @@ final class MessageController extends AbstractController #[Route('/new/{receiverId}', name: 'app_message_new', methods: ['GET', 'POST'])] - public function new(Request $request, EntityManagerInterface $entityManager, ?int $receiverId = null, UserRepository $userRepository): Response + public function new(Request $request, ?int $receiverId = null,): Response { $message = new Message(); if ($receiverId) { - $receiver = $userRepository->find($receiverId); + $receiver = $this->userRepository->find($receiverId); if ($receiver) { $message->setReceiver($receiver); } @@ -62,8 +73,8 @@ final class MessageController extends AbstractController $message->setSendingDate(new \DateTime()); $message->setSender($this->getUser()); - $entityManager->persist($message); - $entityManager->flush(); + $this->entityManager->persist($message); + $this->entityManager->flush(); return $this->redirectToRoute('app_message_index'); } @@ -82,14 +93,14 @@ final class MessageController extends AbstractController } #[Route('/{id}/edit', name: 'app_message_edit', methods: ['GET', 'POST'])] - public function edit(Request $request, Message $message, EntityManagerInterface $entityManager): Response + public function edit(Request $request, Message $message,): Response { $form = $this->createForm(MessageType::class, $message); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $message->setSendingDate(new \DateTime()); - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_message_index', [], Response::HTTP_SEE_OTHER); } @@ -101,11 +112,11 @@ final class MessageController extends AbstractController } #[Route('/{id}', name: 'app_message_delete', methods: ['POST'])] - public function delete(Request $request, Message $message, EntityManagerInterface $entityManager): Response + public function delete(Request $request, Message $message,): Response { if ($this->isCsrfTokenValid('delete'.$message->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($message); - $entityManager->flush(); + $this->entityManager->remove($message); + $this->entityManager->flush(); } return $this->redirectToRoute('app_message_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/ProfileController.php b/src/Controller/ProfileController.php index 9462052..3a14faa 100644 --- a/src/Controller/ProfileController.php +++ b/src/Controller/ProfileController.php @@ -7,6 +7,7 @@ use App\Entity\Intern; use App\Entity\InternApplication; use App\Entity\UserApp; use App\Form\UserAppType; +use App\Repository\InternApplicationRepository; use App\Repository\SkillRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -16,8 +17,12 @@ use Symfony\Component\Routing\Attribute\Route; class ProfileController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly InternApplicationRepository $internApplicationRepository, + ){} #[Route('/profile', name: 'app_profile')] - public function profile(EntityManagerInterface $entityManager): Response + public function profile(): Response { $user = $this->getUser(); @@ -27,9 +32,8 @@ class ProfileController extends AbstractController if ($user instanceof Intern) { - $internApplicationRepository = $entityManager->getRepository(InternApplication::class); - $internApplications = $internApplicationRepository->findBy([ + $internApplications = $this->internApplicationRepository->findBy([ 'intern' => $user, ]); @@ -46,13 +50,13 @@ class ProfileController extends AbstractController } #[Route('profile/{id}/edit', name: 'app_profile_edit', methods: ['GET', 'POST'])] - public function edit(Request $request, UserApp $userApp, EntityManagerInterface $entityManager): Response + public function edit(Request $request, UserApp $userApp,): Response { $form = $this->createForm(UserAppType::class, $userApp); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_profile', [], Response::HTTP_SEE_OTHER); } @@ -64,9 +68,9 @@ class ProfileController extends AbstractController } #[Route('/profile/visit/{id}', name: 'app_profile_visit')] - public function visitProfile(EntityManagerInterface $entityManager, int $id): Response + public function visitProfile(int $id): Response { - $candidat = $entityManager->getRepository(Intern::class)->find($id); + $candidat = $this->entityManager->getRepository(Intern::class)->find($id); if (!$candidat) { throw $this->createNotFoundException('Utilisateur non trouvé.'); diff --git a/src/Controller/RegistrationController.php b/src/Controller/RegistrationController.php index ebc0fcd..d4f5141 100644 --- a/src/Controller/RegistrationController.php +++ b/src/Controller/RegistrationController.php @@ -6,19 +6,25 @@ use App\Entity\Employee; use App\Entity\Intern; use App\Entity\UserApp; use App\Form\RegistrationFormType; +use App\Repository\InternApplicationRepository; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; use Symfony\Component\Routing\Attribute\Route; +use App\Entity\Company; #[Route('/register', name: 'app_register')] class RegistrationController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + ){} #[Route('/', name: '_intern')] - public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, Security $security, EntityManagerInterface $entityManager): Response + public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, Security $security): Response { $user = new Intern(); $form = $this->createForm(RegistrationFormType::class, $user); @@ -32,44 +38,52 @@ class RegistrationController extends AbstractController // encode the plain password $user->setPassword($userPasswordHasher->hashPassword($user, $plainPassword)); - $entityManager->persist($user); - $entityManager->flush(); - - // do anything else you need here, like send an email + $this->entityManager->persist($user); + $this->entityManager->flush(); return $security->login($user, 'form_login', 'main'); } return $this->render('registration/register.html.twig', [ 'registrationForm' => $form, + 'employee' => False, ]); } #[Route('/employee', name: '_employee')] - public function registerEmployee(Request $request, UserPasswordHasherInterface $userPasswordHasher, Security $security, EntityManagerInterface $entityManager): Response + public function registerEmployee(Request $request, UserPasswordHasherInterface $userPasswordHasher, Security $security): Response { $user = new Employee(); - $form = $this->createForm(RegistrationFormType::class, $user); + $form = $this->createForm(RegistrationFormType::class, $user) + ->add('company', EntityType::class, [ + 'class' => Company::class, + 'choice_label' => 'name', + 'placeholder' => 'Sélectionnez une entreprise', + 'label' => 'Entreprise', + ]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { /** @var string $plainPassword */ $plainPassword = $form->get('plainPassword')->getData(); + $company = $form->get('company')->getData(); + $user->setCompany($company); + $user->setRoles(['ROLE_EMPLOYEE']); - // encode the plain password + // Encoder le mot de passe $user->setPassword($userPasswordHasher->hashPassword($user, $plainPassword)); - $entityManager->persist($user); - $entityManager->flush(); - - // do anything else you need here, like send an email + $this->entityManager->persist($user); + $this->entityManager->flush(); return $security->login($user, 'form_login', 'main'); } return $this->render('registration/register.html.twig', [ 'registrationForm' => $form, + 'employee' => True, ]); } + } diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index 76bf5c4..ac0642b 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -2,7 +2,9 @@ namespace App\Controller; +use App\Repository\InternApplicationRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; diff --git a/src/Controller/SkillController.php b/src/Controller/SkillController.php index 914e64c..9cab9e8 100644 --- a/src/Controller/SkillController.php +++ b/src/Controller/SkillController.php @@ -4,6 +4,8 @@ namespace App\Controller; use App\Entity\Skill; use App\Form\SkillType; +use App\Repository\AnnouncementRepository; +use App\Repository\InternApplicationRepository; use App\Repository\SkillRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -15,25 +17,29 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route('/skill')] final class SkillController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly AnnouncementRepository $skillRepository, + ){} #[Route(name: 'app_skill_index', methods: ['GET'])] - public function index(SkillRepository $skillRepository): Response + public function index(): Response { return $this->render('skill/index.html.twig', [ - 'skills' => $skillRepository->findAll(), + 'skills' => $this->skillRepository->findAll(), ]); } #[Route('/new', name: 'app_skill_new', methods: ['GET', 'POST'])] #[IsGranted('ROLE_ADMIN')] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request,): Response { $skill = new Skill(); $form = $this->createForm(SkillType::class, $skill); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->persist($skill); - $entityManager->flush(); + $this->entityManager->persist($skill); + $this->entityManager->flush(); return $this->redirectToRoute('app_skill_index', [], Response::HTTP_SEE_OTHER); } @@ -54,13 +60,13 @@ final class SkillController extends AbstractController #[Route('/{id}/edit', name: 'app_skill_edit', methods: ['GET', 'POST'])] #[IsGranted('ROLE_ADMIN')] - public function edit(Request $request, Skill $skill, EntityManagerInterface $entityManager): Response + public function edit(Request $request, Skill $skill,): Response { $form = $this->createForm(SkillType::class, $skill); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_skill_index', [], Response::HTTP_SEE_OTHER); } @@ -73,11 +79,11 @@ final class SkillController extends AbstractController #[Route('/{id}', name: 'app_skill_delete', methods: ['POST'])] #[IsGranted('ROLE_ADMIN')] - public function delete(Request $request, Skill $skill, EntityManagerInterface $entityManager): Response + public function delete(Request $request, Skill $skill,): Response { if ($this->isCsrfTokenValid('delete'.$skill->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($skill); - $entityManager->flush(); + $this->entityManager->remove($skill); + $this->entityManager->flush(); } return $this->redirectToRoute('app_skill_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/UserAppController.php b/src/Controller/UserAppController.php index ad55bd2..8121327 100644 --- a/src/Controller/UserAppController.php +++ b/src/Controller/UserAppController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\Entity\UserApp; use App\Form\UserAppType; +use App\Repository\AnnouncementRepository; use App\Repository\UserRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -14,11 +15,15 @@ use Symfony\Component\Routing\Attribute\Route; #[Route('/user')] final class UserAppController extends AbstractController { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly UserRepository $userRepository, + ){} #[Route(name: 'app_user_index', methods: ['GET'])] - public function index(UserRepository $userRepository): Response + public function index(): Response { return $this->render('user_app/index.html.twig', [ - 'user_apps' => $userRepository->findAll(), + 'user_apps' => $this->userRepository->findAll(), ]); } @@ -31,13 +36,13 @@ final class UserAppController extends AbstractController } #[Route('/{id}/edit', name: 'app_user_edit', methods: ['GET', 'POST'])] - public function edit(Request $request, UserApp $userApp, EntityManagerInterface $entityManager): Response + public function edit(Request $request, UserApp $userApp,): Response { $form = $this->createForm(UserAppType::class, $userApp); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->flush(); + $this->entityManager->flush(); return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER); } @@ -49,11 +54,11 @@ final class UserAppController extends AbstractController } #[Route('/{id}', name: 'app_user_delete', methods: ['POST'])] - public function delete(Request $request, UserApp $userApp, EntityManagerInterface $entityManager): Response + public function delete(Request $request, UserApp $userApp,): Response { if ($this->isCsrfTokenValid('delete'.$userApp->getId(), $request->getPayload()->getString('_token'))) { - $entityManager->remove($userApp); - $entityManager->flush(); + $this->entityManager->remove($userApp); + $this->entityManager->flush(); } return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Entity/Company.php b/src/Entity/Company.php index ae8ccaa..1451791 100644 --- a/src/Entity/Company.php +++ b/src/Entity/Company.php @@ -7,6 +7,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; + #[ORM\Entity(repositoryClass: CompanyRepository::class)] class Company { diff --git a/src/Entity/Intern.php b/src/Entity/Intern.php index daaf428..ef9d347 100644 --- a/src/Entity/Intern.php +++ b/src/Entity/Intern.php @@ -7,6 +7,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; +use App\Entity\Company; #[ORM\Entity(repositoryClass: InternRepository::class)] class Intern extends UserApp @@ -191,6 +192,22 @@ class Intern extends UserApp } } + return $this; + } + #[ORM\ManyToOne(targetEntity: Company::class)] + #[ORM\JoinColumn(nullable: false)] + private ?Company $company = null; + + // Getter et setter pour la société + public function getCompany(): ?Company + { + return $this->company; + } + + public function setCompany(?Company $company): self + { + $this->company = $company; + return $this; } } diff --git a/src/Entity/UserApp.php b/src/Entity/UserApp.php index 0ccf691..4e0fb7e 100644 --- a/src/Entity/UserApp.php +++ b/src/Entity/UserApp.php @@ -186,6 +186,7 @@ class UserApp implements UserInterface, PasswordAuthenticatedUserInterface return $this; } + } diff --git a/src/Form/RegistrationFormType.php b/src/Form/RegistrationFormType.php index 6aa8031..500a27e 100644 --- a/src/Form/RegistrationFormType.php +++ b/src/Form/RegistrationFormType.php @@ -15,12 +15,19 @@ use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Validator\Constraints\IsTrue; use Symfony\Component\Validator\Constraints\Length; use Symfony\Component\Validator\Constraints\NotBlank; +use App\Entity\Company; +use App\Entity\Intern; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; +use Doctrine\ORM\EntityRepository; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; + class RegistrationFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder + ->add('nickname', TextType::class, [ 'label' => 'Utilisateur : ', ]) @@ -45,10 +52,7 @@ class RegistrationFormType extends AbstractType new NotBlank(), ] ]) -// ->add('plainPassword', PasswordType::class, [ - // instead of being set onto the object directly, - // this is read and encoded in the controller 'mapped' => false, 'attr' => ['autocomplete' => 'new-password'], 'constraints' => [ @@ -58,12 +62,10 @@ class RegistrationFormType extends AbstractType new Length([ 'min' => 6, 'minMessage' => 'Votre mot de passe doit avoir au moins {{ limit }} caractères', - // max length allowed by Symfony for security reasons 'max' => 4096, ]), ], - ]) - ; + ]); } public function configureOptions(OptionsResolver $resolver): void diff --git a/templates/registration/register.html.twig b/templates/registration/register.html.twig index edf72e9..10eaade 100644 --- a/templates/registration/register.html.twig +++ b/templates/registration/register.html.twig @@ -36,6 +36,15 @@ {{ form_errors(registrationForm.mail) }} + {% if employee %} +