src/Controller/Front/FrontSchoolController.php line 122

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\PersonDegree;
  4. use App\Entity\Company;
  5. use App\Entity\Region;
  6. use App\Entity\Role;
  7. use App\Entity\SatisfactionSchool;
  8. use App\Entity\Country;
  9. use App\Entity\School;
  10. use App\Form\SchoolType;
  11. use App\Form\SatisfactionSchoolType;
  12. use App\Repository\CompanyRepository;
  13. use App\Repository\SchoolRepository;
  14. use App\Repository\PersonDegreeRepository;
  15. use App\Repository\SatisfactionSalaryRepository;
  16. use App\Repository\UserRepository;
  17. use App\Repository\RoleRepository;
  18. use App\Repository\CountryRepository;
  19. use App\Repository\RegionRepository;
  20. use App\Repository\CityRepository;
  21. use App\Repository\DegreeRepository;
  22. use App\Repository\LegalStatusRepository;
  23. use App\Repository\SectorAreaRepository;
  24. use App\Repository\ActivityRepository;
  25. use App\Services\ActivityService;
  26. use App\Services\EmailService;
  27. use App\Services\SchoolService;
  28. use App\Services\PersonDegreeService;
  29. use DateTime;
  30. use Doctrine\ORM\EntityManagerInterface;
  31. use ReflectionClass;
  32. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  33. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  34. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  35. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use Symfony\Component\HttpFoundation\RedirectResponse;
  38. use Symfony\Component\HttpFoundation\Request;
  39. use Symfony\Component\HttpFoundation\Response;
  40. use Symfony\Component\Routing\Annotation\Route;
  41. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  42. use App\Entity\User;
  43. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  44. use Symfony\Contracts\Translation\TranslatorInterface;
  45. #[Route(path'front/school')]
  46. #[Security("is_granted('ROLE_ETABLISSEMENT') or 
  47.             is_granted('ROLE_PRINCIPAL')")]
  48. class FrontSchoolController extends AbstractController {
  49.     private EntityManagerInterface $em;
  50.     private ActivityService $activityService;
  51.     private SchoolService $schoolService;
  52.     private PersonDegreeService $degreeService;
  53.     private CompanyRepository $companyRepository;
  54.     private SatisfactionSalaryRepository $satisfactionSalaryRepository;
  55.     private PersonDegreeRepository $personDegreeRepository;
  56.     private UserRepository $userRepository;
  57.     private RoleRepository $roleRepository;
  58.     private RegionRepository $regionRepository;
  59.     private CountryRepository $countryRepository;
  60.     private CityRepository $cityRepository;
  61.     private DegreeRepository $degreeRepository;
  62.     private LegalStatusRepository $legalStatusRepository;
  63.     private SectorAreaRepository $sectorAreaRepository;
  64.     private ActivityRepository $activityRepository;
  65.     private UserPasswordHasherInterface $hasher;
  66.     private EmailService $emailService;
  67.     private SchoolRepository $schoolRepository;
  68.     private TokenStorageInterface $tokenStorage;
  69.     private TranslatorInterface $translator;
  70.     public function __construct(
  71.         EntityManagerInterface       $em,
  72.         ActivityService              $activityService,
  73.         SchoolService                $schoolService,
  74.         PersonDegreeService          $degreeService,
  75.         CompanyRepository            $companyRepository,
  76.         UserPasswordHasherInterface  $hasher,
  77.         SatisfactionSalaryRepository $satisfactionSalaryRepository,
  78.         PersonDegreeRepository       $personDegreeRepository,
  79.         UserRepository        $userRepository,
  80.         RoleRepository        $roleRepository,
  81.         RegionRepository      $regionRepository,
  82.         CountryRepository     $countryRepository,
  83.         CityRepository        $cityRepository,
  84.         DegreeRepository      $degreeRepository,
  85.         LegalStatusRepository $legalStatusRepository,
  86.         SectorAreaRepository  $sectorAreaRepository,
  87.         ActivityRepository    $activityRepository,
  88.         EmailService          $emailService,
  89.         SchoolRepository      $schoolRepository,
  90.         TokenStorageInterface $tokenStorage,
  91.         TranslatorInterface $translator
  92.     ) {
  93.         $this->em $em;
  94.         $this->activityService $activityService;
  95.         $this->schoolService $schoolService;
  96.         $this->degreeService $degreeService;
  97.         $this->companyRepository $companyRepository;
  98.         $this->hasher $hasher;
  99.         $this->satisfactionSalaryRepository $satisfactionSalaryRepository;
  100.         $this->personDegreeRepository $personDegreeRepository;
  101.         $this->userRepository $userRepository;
  102.         $this->roleRepository $roleRepository;
  103.         $this->regionRepository $regionRepository;
  104.         $this->countryRepository $countryRepository;
  105.         $this->cityRepository $cityRepository;
  106.         $this->degreeRepository $degreeRepository;
  107.         $this->legalStatusRepository $legalStatusRepository;
  108.         $this->sectorAreaRepository $sectorAreaRepository;
  109.         $this->activityRepository $activityRepository;
  110.         $this->emailService $emailService;
  111.         $this->schoolRepository $schoolRepository;
  112.         $this->tokenStorage $tokenStorage;
  113.         $this->translator $translator;
  114.     }
  115.     #[IsGranted('ROLE_ETABLISSEMENT')]
  116.     #[Route(path'/new'name'front_school_new'methods: ['GET''POST'])]
  117.     public function newAction(Request $request): RedirectResponse|Response {
  118.         $school = new School();
  119.         /** @var User $user */
  120.         $user $this->getUser();
  121.         $school->setEmail($user->getEmail());
  122.         $school->setPhoneStandard($user->getPhone());
  123.         $school->setCountry($user->getCountry());
  124.         $school->setLocationMode(true);
  125.         $form $this->createForm(SchoolType::class, $school);
  126.         $form->handleRequest($request);
  127.         $selectedCountry $this->getUser()->getCountry();
  128.         //adaptation for DBTA
  129.         $selectedRegion null;
  130.         if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  131.             $selectedRegion $this->getUser()->getRegion();
  132.             $school->setRegion($selectedRegion);
  133.         }
  134.         if ($form->isSubmitted() && $form->isValid()) {
  135.             $agreeRgpd $form->get('agreeRgpd')->getData();
  136.             if ($agreeRgpd) {
  137.                 $school->setCreatedDate(new DateTime());
  138.                 $school->setUpdatedDate(new DateTime());
  139.                 $school->setUser($user);
  140.                 $school->setPhoneStandard($user->getPhone());
  141.                 $this->em->persist($school);
  142.                 $this->em->flush();
  143.                 return $this->redirectToRoute('front_school_show');
  144.             }
  145.         }
  146.         return $this->render('school/new.html.twig', [
  147.             'school' => $school,
  148.             'form' => $form->createView(),
  149.             'allActivities' => $this->activityService->getAllActivities(),
  150.             'selectedCountry' => $selectedCountry,
  151.             'selectedRegion' => $selectedRegion
  152.         ]);
  153.     }
  154.     #[Route(path'/'name'front_school_show'methods: ['GET'])]
  155.     public function showAction(): Response {
  156.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  157.             $school $this->schoolService->getSchool();
  158.             if(!$school) {
  159.                 if($this->getUser()->getPrincipalSchool()) {
  160.                     $school $this->schoolRepository->find($this->getUser()->getPrincipalSchool());
  161.                 }
  162.             }
  163.             if (!$school) {
  164.                 return $this->redirectToRoute('front_school_new');
  165.             }
  166.             return $this->render('school/show.html.twig', ['school' => $school]);
  167.         });
  168.     }
  169.     #[IsGranted('ROLE_ETABLISSEMENT')]
  170.     #[Route(path'/edit'name'front_school_edit'methods: ['GET''POST'])]
  171.     public function editAction(Request $request): RedirectResponse|Response {
  172.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request) {
  173.             $school $this->schoolService->getSchool();
  174.             if (!$school) {
  175.                 return $this->redirectToRoute('front_school_new');
  176.             }
  177.             $createdDate $school->getCreatedDate();
  178.             $editForm $this->createForm(SchoolType::class, $school);
  179.             $editForm->handleRequest($request);
  180.             $selectedCountry $this->getUser()->getCountry();
  181.             //adaptation for DBTA
  182.             $selectedRegion null;
  183.             if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  184.                 $selectedRegion $this->getUser()->getRegion();
  185.             }
  186.             if ($editForm->isSubmitted() && $editForm->isValid()) {
  187.                 $agreeRgpd $editForm->get('agreeRgpd')->getData();
  188.                 if ($agreeRgpd) {
  189.                     $school->setCreatedDate($createdDate);
  190.                     if ($school->getCreatedDate() == null) {
  191.                         if ($school->getUpdatedDate()) {
  192.                             $school->setCreatedDate($school->getUpdatedDate());
  193.                         } else {
  194.                             $school->setCreatedDate(new DateTime());
  195.                         }
  196.                     }
  197.                     $school->setUpdatedDate(new DateTime());
  198.                     $school->setUser($this->getUser());
  199.                     if (!$this->getUser()->getApiToken()) {
  200.                         $this->getUser()->setApiToken(bin2hex(random_bytes(32)));
  201.                     }
  202.                     $this->em->flush();
  203.                     return $this->redirectToRoute('front_school_show');
  204.                 } else if (count($school->getPersonDegrees()) == 0) {
  205.                     return $this->redirectToRoute('front_school_user_delete_school', array('id' => $school->getId()));
  206.                 }
  207.             }
  208.             return $this->render('school/edit.html.twig', [
  209.                 'school' => $school,
  210.                 'edit_form' => $editForm->createView(),
  211.                 'allActivities' => $this->activityService->getAllActivities(),
  212.                 'selectedCountry' => $selectedCountry,
  213.                 'selectedRegion' => $selectedRegion
  214.             ]);
  215.         });
  216.     }
  217.     #[IsGranted('ROLE_ETABLISSEMENT')]
  218.     #[Route(path'/companies'name'front_school_company_index'methods: ['GET'])]
  219.     public function companiesIndexAction(): Response {
  220.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  221.             $companies $this
  222.                 ->companyRepository
  223.                 ->getBySchool($this->schoolService->getSchool());
  224.             return $this->render('company/index.html.twig', [
  225.                 'companies' => $companies
  226.             ]);
  227.         });
  228.     }
  229.     #[IsGranted('ROLE_ETABLISSEMENT')]
  230.     #[Route(path'/all_companies'name'front_school_all_company_index'methods: ['GET'])]
  231.     public function allCompaniesIndexAction(): Response {
  232.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  233.             $school $this->schoolService->getSchool();
  234.             $allCompanies $this->companyRepository->findByCountry($school->getCountry());
  235.             $selectedCompanies $this->companyRepository->getBySchool($school);
  236.             return $this->render('company/index.html.twig', [
  237.                 'companies' => $allCompanies,
  238.                 'selectedCompanies' => $selectedCompanies,
  239.             ]);
  240.         });
  241.     }
  242.     #[IsGranted('ROLE_ETABLISSEMENT')]
  243.     #[Route(path'/persondegrees_companies'name'front_school_persondegrees_company_index'methods: ['GET'])]
  244.     public function persondegreesCompaniesIndexAction(): Response {
  245.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  246.             $school $this->schoolService->getSchool();
  247.             $allCompanies $this->companyRepository->findByCountry($school->getCountry());
  248.             $satisfactionSalaries $this->satisfactionSalaryRepository->getByCountryAndPersonDegreeSchool($school->getCountry(), $school);
  249.             // creation des entreprises trouvées dans les satisfactions
  250.             $employers = [];
  251.             foreach ($satisfactionSalaries as $satisfactionSalary) {
  252.                 $newEmployer = array();
  253.                 $newEmployer["name"] = $satisfactionSalary->getCompanyName();
  254.                 $newEmployer["city"] = $satisfactionSalary->getCompanyCity();
  255.                 $newEmployer["phone"] = $satisfactionSalary->getCompanyPhone();
  256.                 $newEmployer["NbPersonDegrees"] = 1;
  257.                 // compte les employés de l'entreprise
  258.                 $employerExist false;
  259.                 for ($i 0$i count($employers); $i++) {
  260.                     if (($employers[$i]["name"] == $satisfactionSalary->getCompanyName()) &&
  261.                         ($employers[$i]["city"] == $satisfactionSalary->getCompanyCity()) &&
  262.                         ($employers[$i]["phone"] == $satisfactionSalary->getCompanyPhone())) {
  263.                         $employers[$i]["NbPersonDegrees"]++;
  264.                         $employerExist true;
  265.                     }
  266.                 }
  267.                 if (!$employerExist) {
  268.                     $employers[] = $newEmployer;
  269.                 }
  270.             }
  271.             return $this->render('school/employers.html.twig', [
  272.                 'companies' => $allCompanies,
  273.                 'employers' => $employers,
  274.             ]);
  275.         });
  276.     }
  277.     #[IsGranted('ROLE_ETABLISSEMENT')]
  278.     #[Route(path'/persondegrees'name'front_school_persondegree_index'methods: ['GET'])]
  279.     public function personDegreesIndexAction(): Response {
  280.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  281.             $school $this->schoolService->getSchool();
  282.             $schoolId $school $school->getId() : null;
  283.             $personDegrees $this->personDegreeRepository->getAllPersonDegree(null,null$schoolId);
  284.             $types $this->degreeService->getTypes();
  285.             return $this->render('persondegree/index.html.twig', [
  286.                 'personDegrees' => $personDegrees,
  287.                 'types' => $types
  288.             ]);
  289.         });
  290.     }
  291.     #[IsGranted('ROLE_ETABLISSEMENT')]
  292.     #[Route(path'/persondegreesEnroll'name'front_school_persondegrees_enroll'methods: ['GET'])]
  293.     public function personDegreesEnrollAction(): Response {
  294.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  295.             $school $this->schoolService->getSchool();
  296.             $selectedCountry $this->getUser()->getCountry();
  297.             $regions $this->regionRepository->findByCountry($selectedCountry);
  298.             $personDegrees $this->personDegreeRepository->getBySchoolAndByUnlocked($schooltrue);
  299.             return $this->render('school/personDegreesEnroll.html.twig', [
  300.                 'personDegrees' => $personDegrees,
  301.                 'regions' =>$regions,
  302.             ]);
  303.         });
  304.     }
  305.     #[IsGranted('ROLE_ETABLISSEMENT')]
  306.     #[Route(path'/companiesEnroll'name'front_school_companies_enroll'methods: ['GET'])]
  307.     public function companiesEnrollAction(): Response {
  308.         return $this->schoolService->checkUnCompletedAccountBefore(function () {
  309.             $school $this->schoolService->getSchool();
  310.             $selectedCountry $this->getUser()->getCountry();
  311.             $regions $this->regionRepository->findByCountry($selectedCountry);
  312.             $legalStatus $this->legalStatusRepository->findAll();
  313.             $sectorAreas $this->sectorAreaRepository->findAll();
  314.             $companies $this->companyRepository->getBySchool($school);
  315.             $companiesUnlocked = [];
  316.             foreach ($companies as $company)
  317.                 if ($company->isUnlocked()) {
  318.                     $companiesUnlocked[] = $company;
  319.                 }
  320.             return $this->render('school/companiesEnroll.html.twig', [
  321.                 'companies' => $companiesUnlocked,
  322.                 'selectedCountry' => $selectedCountry,
  323.                 'regions' =>$regions,
  324.                 'sectorAreas' =>$sectorAreas,
  325.                 'legalStatus' =>$legalStatus,
  326.             ]);
  327.         });
  328.     }
  329.     #[IsGranted('ROLE_ETABLISSEMENT')]
  330.     #[Route(path'/user_delete/{id}'name'front_school_user_delete_school'methods: ['GET''POST'])]
  331.     public function deleteUserAction(School $school): RedirectResponse {
  332.         $user $school->getUser();
  333.         // delete Principals users
  334.         $principals $this->userRepository->findByPrincipalSchool($school->getId());
  335.         foreach ($principals as $principal) {
  336.             $this->em->remove($principal);
  337.         }
  338.         if ($user) {
  339.             $this->schoolService->removeRelations($user);
  340.             $this->tokenStorage->setToken(null);
  341.             $this->em->remove($user);
  342.             $this->em->flush();
  343.             $this->addFlash('success'$this->translator->trans('flashbag.the_deletion_is_done_successfully'));
  344.             return $this->redirectToRoute('logout');
  345.         } else {
  346.             $this->addFlash('warning'$this->translator->trans('flashbag.unable_to_delete_account'));
  347.             return $this->redirectToRoute('front_school_new');
  348.         }
  349.     }
  350.     #[IsGranted('ROLE_ETABLISSEMENT')]
  351.     #[Route(path'/persondegrees/{id}/checkPersonDegree'name'front_school_persondegree_check'methods: ['GET'])]
  352.     public function personDegreesCheckAction(PersonDegree $personDegreeRequest $request): JsonResponse {
  353.         // récupération de la variable en get (si en post, utiliser : $request->request->get('checkSchool');)
  354.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($personDegree$request) {
  355.             $checkSchool boolval($request->query->get('checkSchool'));
  356.             $personDegree->setCheckSchool($checkSchool);
  357.             $this->em->persist($personDegree);
  358.             $this->em->flush();
  359.             // renvoi de la réponse
  360.             $responsePersonDegree = [
  361.                 'id' => $personDegree->getId(),
  362.                 'name' => $personDegree->getName(),
  363.                 'check' => $personDegree->isCheckSchool(),
  364.                 'checkSchool' => $checkSchool
  365.             ];
  366.             return new JsonResponse([$responsePersonDegree]);
  367.         });
  368.     }
  369.     #[IsGranted('ROLE_ETABLISSEMENT')]
  370.     #[Route(path'/{id}/personDegreeDelete/'name'front_school_person_degree_delete'methods: ['GET'])]
  371.     public function personDegreeDeleteAction(Request $request,int $id): JsonResponse {
  372.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request$id) {
  373.             $res = [];
  374.             $err = [];
  375.             $personDegree $this->personDegreeRepository->find($id);
  376.             if(!$personDegree)
  377.                 $err[] = 'Diplômé inexistant en Base ';
  378.             else {
  379.                 $user $personDegree->getUser();
  380.                 if($user->getPersonDegree()) {
  381.                     foreach ($user->getPersonDegree() as $diplome) {
  382.                         $this->em->remove($diplome);
  383.                     }
  384.                 }
  385.                 $this->em->remove($user);
  386.                 $this->em->flush();
  387.             }
  388.             return new JsonResponse([$res$err]);
  389.         });
  390.     }
  391.     #[IsGranted('ROLE_ETABLISSEMENT')]
  392.     #[Route(path'/{id}/companyDelete/'name'front_school_company_delete'methods: ['GET'])]
  393.     public function companyDeleteAction(Request $request,int $id): JsonResponse {
  394.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request$id){
  395.             $res = [];
  396.             $err = [];
  397.             $company $this->companyRepository->find($id);
  398.             if(!$company)
  399.                 $err[] = "Entreprise inexistante en Base ";
  400.             else {
  401.                 $user $company->getUser();
  402.                 if($user->getPersonDegree()) {
  403.                     foreach ($user->getCompany() as $entreprise) {
  404.                         $this->em->remove($entreprise);
  405.                     }
  406.                 }
  407.                 $this->em->remove($user);
  408.                 $this->em->flush();
  409.             }
  410.             return new JsonResponse([$res$err]);
  411.         });
  412.     }
  413.     #[IsGranted('ROLE_ETABLISSEMENT')]
  414.     #[Route(path'/companies/{id}/updateCompany'name'front_school_update_company'methods: ['GET'])]
  415.     public function updateCompanyAction(Company $companyRequest $request): JsonResponse {
  416.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($company$request) {
  417.             // récupération de la variable en get (si en post, utiliser : $request->request->get('isCompany');)
  418.             $isCompany boolval($request->query->get('isCompany'));
  419.             $school $this->schoolService->getSchool();
  420.             if ($isCompany) {
  421.                 $school->addCompany($company);
  422.                 $this->em->persist($school);
  423.                 $this->em->flush();
  424.             } else {
  425.                 $school->removeCompany($company);
  426.                 $this->em->persist($school);
  427.                 $this->em->flush();
  428.             }
  429.             // renvoi de la réponse
  430.             $responseSchool = [
  431.                 'id' => $company->getId(),
  432.                 'name' => $company->getName(),
  433.                 'isCompany' => $isCompany
  434.             ];
  435.             return new JsonResponse([$responseSchool]);
  436.         });
  437.     }
  438.     #[IsGranted('ROLE_ETABLISSEMENT')]
  439.     #[Route(path'/check_logout'name'check_logout_school'methods: ['GET''POST'])]
  440.     public function check_logout(TokenStorageInterface $tokenStorage): RedirectResponse {
  441.         $school $this->schoolService->getSchool();
  442.         $user $this->getUser();
  443.         // suppression du compte si le profil school n'existe pas
  444.         if (!$school) {
  445.             if ($user) {
  446.                 $tokenStorage->setToken(null);
  447.                 $this->schoolService->removeRelations($user);
  448.                 $this->em->remove($user);
  449.                 $this->em->flush();
  450.             } else {
  451.                 $this->addFlash('warning'$this->translator->trans('flashbag.unable_to_delete_account'));
  452.                 return $this->redirectToRoute('front_school_show');
  453.             }
  454.             // update du numéro de téléphone du compte si différente du profil (Attention change de Login)
  455.         } else if ($user->getPhone() != $school->getPhoneStandard()) {
  456.             // verification de la non existance du user par ce numéro de téléphone
  457.             $usrexist $this->userRepository->findByPhone($school->getPhoneStandard());
  458.             if ($usrexist) {
  459.                 $this->addFlash('danger'$this->translator->trans('flashbag.the_login_phone_is_already_used_by_another_account'));
  460.                 return $this->redirectToRoute('front_school_edit');
  461.             }
  462.             // modification du numéro de telephone et sortie
  463.             $this->addFlash('warning'$this->translator->trans('flashbag.the_login_phone_for_your_account_will_be_changed') . '|' $user->getUsername() . '|' $school->getPhoneStandard());
  464.             $user->setUsername($school->getPhoneStandard());
  465.             $user->setPhone($school->getPhoneStandard());
  466.             $this->em->persist($user);
  467.             $this->em->flush();
  468.             //envoi du mail des paramètres de connexion
  469.             if ($user->getEmail()) {
  470.                 if ($this->emailService->sendMailConfirmRegistration($user->getEmail(), $school->getName(),
  471.                     "Paramètres de votre compte InserJeune""Etablissement"$user->getPhone())) {
  472.                     $this->addFlash('success'$this->translator->trans('flashbag.your_connection_parameters_are_sent_by_email'));
  473.                 } else {
  474.                     $this->addFlash('danger'$this->translator->trans('flashbag.error_sending_email'));
  475.                 }
  476.             }
  477.             // update de l'adrese email du compte si différente du profil
  478.         } else if ($user->getEmail() != $school->getEmail()) {
  479.             // verification de la non existance du user par cet email
  480.             $usrexist $this->userRepository->findByEmail($school->getEmail());
  481.             if ($usrexist) {
  482.                 $this->addFlash('danger'$this->translator->trans('flashbag.the_email_address_is_already_used_in_another_account', ['{email}' => $school->getEmail()]));
  483.                 return $this->redirectToRoute('front_school_edit');
  484.             }
  485.             // modification e l'email et sortie
  486.             $user->setEmail($school->getEmail());
  487.             $this->em->persist($user);
  488.             $this->em->flush();
  489.             // envoi du mail des paramètres de connexion
  490.             if ($user->getEmail()) {
  491.                 if ($this->emailService->sendMailConfirmRegistration($user->getEmail(), $school->getName(),
  492.                     "Paramètres de votre compte InserJeune""Etablissement"$user->getPhone())) {
  493.                     $this->addFlash('success'$this->translator->trans('flashbag.your_connection_parameters_are_sent_by_email'));
  494.                 } else {
  495.                     $this->addFlash('danger'$this->translator->trans('flashbag.error_sending_email'));
  496.                 }
  497.             }
  498.         }
  499.         return $this->redirectToRoute('logout');
  500.     }
  501.     #[IsGranted('ROLE_ETABLISSEMENT')]
  502.     #[Route(path'/{id}/enrollPersonDegreeUpdate/'name'front_school_enroll_person_degree_update'methods: ['GET''POST'])]
  503.     public function enrollPersonDegreeUpdateAction(Request $requestint $id): JsonResponse|Response {
  504.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request$id) {
  505.             $school $this->schoolService->getSchool();
  506.             $datas $request->query->all();
  507.             $phoneNumber "";
  508.             $res = [];
  509.             $err = [];
  510.             $personDegree $this->personDegreeRepository->find($id);
  511.             if (!$personDegree) {
  512.                 $personDegree = new PersonDegree();
  513.             }
  514.             $actorClass = new ReflectionClass($personDegree);
  515.             //verification de l'indicatif pays
  516.             $selectedCountry null;
  517.             $selectedRegion null;
  518.             if ($datas["selectedCountry"]) {
  519.                 $selectedCountry $this->countryRepository->find($datas["selectedCountry"]);
  520.                 if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY']=="true") {
  521.                     if($datas["selectedRegion"]) {
  522.                         $selectedRegion $this->regionRepository->find($datas["selectedRegion"]);
  523.                         $personDegree->setRegion($selectedRegion);
  524.                         // if($selectedRegion) {
  525.                         //     $selectedCountry = $selectedRegion->getCountry();
  526.                         //     if($personDegree->getUser())
  527.                         //         $personDegree->getUser()->setRegion($selectedRegion);
  528.                         // }
  529.                     }
  530.                 }
  531.                 $personDegree->setCountry($selectedCountry);
  532.             }
  533.             if (!$selectedCountry)
  534.                 return new JsonResponse (["", ["erreur serveur de country"]]);
  535.             if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY']=="true") {
  536.                 if (!$selectedRegion)
  537.                     return new JsonResponse(["", ["erreur serveur de region (country DBTA)"]]);
  538.             }
  539.             foreach ($datas as $key => $value) {
  540.                 $setProp "set" ucfirst($key);
  541.                 if (($setProp == "setPhoneMobile1") || ($setProp == "setPhoneMobile2")) {
  542.                     // number phone syntax control
  543.                     $phoneSyntax $this->checkPhoneSyntax($value$selectedCountry$selectedRegion);
  544.                     if (($setProp == "setPhoneMobile2") && ($value == ""))
  545.                         $phoneSyntax "ok";
  546.                     if ($phoneSyntax == "ok") {
  547.                         $personDegree->$setProp($value);
  548.                         $this->em->persist($personDegree);
  549.                         $res[$key] = $value;
  550.                         if ($setProp == "setPhoneMobile1") {
  551.                             $phoneNumber $value;
  552.                         }
  553.                     } else {
  554.                         // $err[] = "Mauvaise syntaxe numéro " . $this->getLitteralPhoneNameForPersonDegree($key) . " : " . $phoneSyntax;
  555.                         $err[] = $this->getLitteralPhoneNameForPersonDegree($key) . " : " $phoneSyntax;
  556.                     }
  557.                 } else if ($setProp == "setBirthDate") {
  558.                     $res[$key] = $value;
  559.                     $birthDate = new DateTime($value);
  560.                     if ($birthDate) {
  561.                         $personDegree->$setProp($birthDate->format('m/d/Y'));
  562.                         $this->em->persist($personDegree);
  563.                     } else {
  564.                         $err[] = "No BirthDate found for Id:" $value;
  565.                     }
  566.                 } else if ($setProp == "setRegion") {
  567.                     $res[$key] = $value;
  568.                     $region $this->regionRepository->find(intval($value));
  569.                     if ($region) {
  570.                         $personDegree->$setProp($region);
  571.                         $this->em->persist($personDegree);
  572.                     } else {
  573.                         $err[] = "No Region found for Id:" $value;
  574.                     }
  575.                 } else if ($setProp == "setAddressCity") {
  576.                     $res[$key] = $value;
  577.                     $city $this->cityRepository->find($value);
  578.                     if ($city) {
  579.                         $personDegree->$setProp($city);
  580.                         $this->em->persist($personDegree);
  581.                     } else {
  582.                         $err[] = "No City found for Id:" $value;
  583.                     }
  584.                 } else if ($setProp == "setDegree") {
  585.                     $res[$key] = $value;
  586.                     $degree $this->degreeRepository->find($value);
  587.                     if ($degree) {
  588.                         $personDegree->$setProp($degree);
  589.                         $this->em->persist($personDegree);
  590.                     } else {
  591.                         $err[] = 'No Degree found for Id:' $value;
  592.                     }
  593.                 } else if ($setProp == "setSectorArea") {
  594.                     $res[$key] = $value;
  595.                     $sectorArea $this->sectorAreaRepository->find($value);
  596.                     if ($sectorArea) {
  597.                         $personDegree->$setProp($sectorArea);
  598.                         $this->em->persist($personDegree);
  599.                     } else {
  600.                         $err[] = 'No SectorArea found for Id:' $value;
  601.                     }
  602.                 } else if ($setProp == "setActivity") {
  603.                     $res[$key] = $value;
  604.                     $activity $this->activityRepository->find($value);
  605.                     if ($activity) {
  606.                         $personDegree->$setProp($activity);
  607.                         $this->em->persist($personDegree);
  608.                     } else {
  609.                         $err[] = 'No Activity found for Id:' $value;
  610.                     }
  611.                 } else if ($setProp == "setSelectedCountry") {
  612.                 } else if ($setProp == "setSelectedRegion") {
  613.                 } else if ($setProp == "setId") {
  614.                 } else {
  615.                     if ($actorClass->hasMethod($setProp)) {
  616.                         $personDegree->$setProp($value);
  617.                         $this->em->persist($personDegree);
  618.                         $res[$key] = $value;
  619.                     } else {
  620.                         $err[] = 'Bad property:' $setProp;
  621.                     }
  622.                 }
  623.             }
  624.             if (count($err) == 0) {
  625.                 /* verification si le user existe */
  626.                 /* ------------------------------ */
  627.                 $user $personDegree->getUser();
  628.                 if (!$user) {
  629.                     $resRegister $this->actorRegister("personDegree"$phoneNumber$selectedCountry$selectedRegion);
  630.                     if (count($resRegister[2]) > 0)
  631.                         $err[] = 'Erreur User: ' $resRegister[2][0];
  632.                     if ($resRegister[1] != "") {
  633.                         $personDegree->setCreatedDate(new DateTime());
  634.                         $personDegree->setUpdatedDate(new DateTime());
  635.                         $personDegree->setType("TYPE_TRAINING");
  636.                         $personDegree->setSchool($school);
  637.                         $personDegree->setCountry($school->getCountry());
  638.                         $personDegree->setUser($resRegister[0]);
  639.                         $personDegree->setTemporaryPasswd($resRegister[1]);
  640.                         $res = ["id" => $personDegree->getId(), "userId" => $resRegister[0]->getId(), "pwd" => $resRegister[1], "err" => $resRegister[2]];
  641.                     } else {
  642.                         $err[] = 'phoneNumber:' $resRegister[1];
  643.                     }
  644.                 }
  645.                 if (count($err) == 0) {
  646.                     $this->em->flush();
  647.                     // Notify student
  648.                     // $this->emailService->sendNotificationEnrollmentDegree($personDegree, $school);
  649.                     $res = [
  650.                         "id" => $personDegree->getId(),
  651.                         "userId" => $personDegree->getUser()->getId(),
  652.                         "pwd" => $personDegree->getTemporaryPasswd()
  653.                     ];
  654.                 }
  655.             }
  656.             return new JsonResponse([$res$err]);
  657.         });
  658.     }
  659.     private function getLitteralPhoneNameForPersonDegree($name) {
  660.         return match ($name) {
  661.             "phoneMobile1" => $this->translator->trans('menu.cell_phone'),
  662.             "phoneMobile2" => $this->translator->trans('menu.parent_cell_phone'),
  663.             default => $name,
  664.         };
  665.     }
  666.     #[IsGranted('ROLE_ETABLISSEMENT')]
  667.     #[Route(path'/{id}/enrollCompanyUpdate/'name'front_school_enroll_company_update'methods: ['GET'])]
  668.     public function enrollCompanyUpdateAction(Request $requestint $id): JsonResponse|Response {
  669.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request$id) {
  670.             $school $this->schoolService->getSchool();
  671.             $datas $request->query->all();
  672.             $phoneNumber "";
  673.             $res = [];
  674.             $err = [];
  675.             $company $this->companyRepository->find($id);
  676.             if (!$company)
  677.                 $company = new Company();
  678.             $actorClass = new ReflectionClass($company);
  679.             //verification de l'indicatif pays
  680.             $selectedCountry null;
  681.             $selectedRegion null;
  682.             if ($datas["selectedCountry"]) {
  683.                 $selectedCountry $this->countryRepository->find($datas["selectedCountry"]);
  684.                 if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY']=="true") {
  685.                     $selectedRegion $this->regionRepository->find($datas["Region"]);
  686.                     // if($selectedRegion) {
  687.                     //     $selectedCountry = $selectedRegion->getCountry();
  688.                     //     if($company->getUser()) {
  689.                     //         $company->getUser()->setRegion($selectedRegion);
  690.                     //     }
  691.                     // }
  692.                 }
  693.                 $company->setCountry($selectedCountry);
  694.             }
  695.             if (!$selectedCountry)
  696.                 return (["", ["erreur serveur de country"]]);
  697.             if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY']=="true") {
  698.                 if (!$selectedRegion)
  699.                     return (["", ["erreur serveur de region (country DBTA)"]]);
  700.             }
  701.             foreach ($datas as $key => $value) {
  702.                 $setProp "set" ucfirst($key);
  703.                 if ($setProp == "setPhoneStandard") {
  704.                     // number phone syntax control
  705.                     $phoneSyntax $this->checkPhoneSyntax($value$selectedCountry$selectedRegion);
  706.                     if ($phoneSyntax == "ok") {
  707.                         $company->$setProp($value);
  708.                         $this->em->persist($company);
  709.                         $res[$key] = $value;
  710.                         $phoneNumber $value;
  711.                     } else {
  712.                         $err[] = "bad_syntax" .  $key " : "  $phoneSyntax;
  713.                     }
  714.                 } else if ($setProp == "setRegion") {
  715.                     $res[$key] = $value;
  716.                     $region $this->regionRepository->find($value);
  717.                     if ($region) {
  718.                         $company->$setProp($region);
  719.                         $this->em->persist($company);
  720.                     } else {
  721.                         $err[] = "No Region found for Id:" $value;
  722.                     }
  723.                 } else if ($setProp == "setCity") {
  724.                     $res[$key] = $value;
  725.                     $city $this->cityRepository->find($value);
  726.                     if ($city) {
  727.                         $company->$setProp($city);
  728.                         $this->em->persist($company);
  729.                     } else {
  730.                         $err[] = "No City found for Id:" $value;
  731.                     }
  732.                 } else if ($setProp == "setSectorArea") {
  733.                     $res[$key] = $value;
  734.                     $sectorArea $this->sectorAreaRepository->find($value);
  735.                     if ($sectorArea) {
  736.                         $company->$setProp($sectorArea);
  737.                         $this->em->persist($company);
  738.                     } else {
  739.                         $err[] = "No SectorArea found for Id:" $value;
  740.                     }
  741.                 } else if ($setProp == "setLegalStatus") {
  742.                     $res[$key] = $value;
  743.                     $legalStatus $this->legalStatusRepository->find($value);
  744.                     if ($legalStatus) {
  745.                         $company->$setProp($legalStatus);
  746.                         $this->em->persist($company);
  747.                     } else {
  748.                         $err[] = "No LegalStatus found for Id:" $value;
  749.                     }
  750.                 } else if ($setProp == "setSelectedCountry") {
  751.                 } else if ($setProp == "setId") {
  752.                 } else {
  753.                     if ($actorClass->hasMethod($setProp)) {
  754.                         $company->$setProp($value);
  755.                         $this->em->persist($company);
  756.                         $res[$key] = $value;
  757.                     } else {
  758.                         $err[] = "Bad property:" $setProp;
  759.                     }
  760.                 }
  761.             }
  762.             if (count($err) == 0) {
  763.                 /* verification si le user existe */
  764.                 /* ------------------------------ */
  765.                 $user $company->getUser();
  766.                 if (!$user) {
  767.                     $resRegister $this->actorRegister("company"$phoneNumber$selectedCountry$selectedRegion);
  768.                     if (count($resRegister[2]) > 0)
  769.                         $err[] = "Erreur User: " $resRegister[2][0];
  770.                     if ($resRegister[1] != "") {
  771.                         $company->setCreatedDate(new DateTime());
  772.                         $company->setUpdatedDate(new DateTime());
  773.                         $company->setUser($resRegister[0]);
  774.                         $company->setTemporaryPasswd($resRegister[1]);
  775.                         $school->addCompany($company);
  776.                         $res = ["id" => $company->getId(), "userId" => $resRegister[0]->getId(), "pwd" => $resRegister[1], "err" => $resRegister[2]];
  777.                     } else {
  778.                         $err[] = "phoneNumber:" $resRegister[1];
  779.                     }
  780.                 }
  781.                 if (count($err) == 0) {
  782.                     $this->em->flush();
  783.                     $res = ["id" => $company->getId(), "userId" => $company->getUser()->getId(), "pwd" => $company->getTemporaryPasswd()];
  784.                 }
  785.             }
  786.             return new JsonResponse([$res$err]);
  787.         });
  788.     }
  789.     #[IsGranted('ROLE_ETABLISSEMENT')]
  790.     #[Route(path'/sendNotificationEnrollmentDegree'name'front_school_send_email_enroll_persondegree'methods: ['POST'])]
  791.     public function sendNotificationEnrollmentDegreeAction(Request $requestTranslatorInterface $trans): JsonResponse|Response {
  792.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request$trans) {
  793.             $personDegreeIds $request->get('persondegree_ids');
  794.             $school $this->schoolService->getSchool();
  795.             if (count($personDegreeIds)) {
  796.                 $personDegrees $this->personDegreeRepository->getPersonDegreeWithIds($personDegreeIds);
  797.                 foreach ($personDegrees as $personDegree) {
  798.                     // var_dump($personDegree);
  799.                     $this->emailService->sendNotificationEnrollmentDegree($personDegree$school);
  800.                 }
  801.                 return new JsonResponse([
  802.                     'status' => 'ok',
  803.                     'message' => $trans->trans('js.emails_sent_successfully')
  804.                 ]);
  805.             }
  806.             return new JsonResponse([
  807.                 'status' => 'nok',
  808.                 'message' => $trans->trans('js.error_while_sending_emails')
  809.             ]);
  810.         });
  811.     }
  812.     #[IsGranted('ROLE_ETABLISSEMENT')]
  813.     #[Route(path'/sendNotificationEnrollmentCompanies'name'front_school_send_email_enroll_companies'methods: ['POST'])]
  814.     public function sendNotificationEnrollmentCompaniesAction(Request $requestTranslatorInterface $trans): JsonResponse|Response {
  815.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($request$trans) {
  816.             $companyIds $request->get('company_ids');
  817.             $school $this->schoolService->getSchool();
  818.             if (count($companyIds)) {
  819.                 $companies $this->companyRepository->getCompaniesWithIds($companyIds);
  820.                 foreach ($companies as $personDegree) {
  821.                     $this->emailService->sendNotificationEnrollmentCompany($personDegree$school);
  822.                 }
  823.                 return new JsonResponse([
  824.                     'status' => 'ok',
  825.                     'message' => $trans->trans('js.emails_sent_successfully')
  826.                 ]);
  827.             }
  828.             return new JsonResponse([
  829.                 'status' => 'nok',
  830.                 'message' => $trans->trans('js.error_while_sending_emails')
  831.             ]);
  832.         });
  833.     }
  834.     #[IsGranted('ROLE_ETABLISSEMENT')]
  835.     #[Route(path'/getSchoolsByCoordinates'name'get_schools_by_coordinates'methods: ['GET'])]
  836.     public function getSchoolsByCoordinates(Request $request): JsonResponse|Response {
  837.         $currentLatitude floatval($request->get('latitude'));
  838.         $currentLongitude floatval($request->get('longitude'));
  839.         $gap floatval($request->get('gap'));
  840.         $currentSchool $this->schoolService->getSchool();
  841.         $currentId $currentSchool->getId();
  842.         $newLatitude null;
  843.         $newLongitude null;
  844.         // recherche en base les coordonnées des établissements de la ville
  845.         $coordinates $this->schoolRepository->getSchoolsByCityForCoordinates($currentSchool->getCity());
  846.         foreach ($coordinates as $coordinate) {
  847.             $schoolId intval($coordinate['id']);
  848.             $schoolLatitude floatval($coordinate['latitude']);
  849.             $schoolLongitude floatval($coordinate['longitude']);
  850.             if($schoolId != $currentId) {
  851.                 // echo (strval($currentId) . " CUR(" .
  852.                 //     strval($currentLatitude) . "," . strval($currentLongitude) ."  ) ".
  853.                 //     strval($schoolId) . " -> MAX(" .
  854.                 //     strval($currentLatitude + $gap * 10) . "," . strval($currentLongitude + $gap * 10) . ") -> SCH(" .
  855.                 //     strval($schoolLatitude) . "," . strval($schoolLongitude) .')<br>');
  856.                 // Recherche de l'établissement le plus éloigné dans la zone $gap*10
  857.                 if((($schoolLatitude >= $currentLatitude ) && ($schoolLatitude <= $currentLatitude $gap 10)) &&
  858.                    (($schoolLongitude >= $currentLongitude ) && ($schoolLongitude <= $currentLongitude $gap 10))) {
  859.                     // echo('--->OK<br>');
  860.                     if($newLatitude $schoolLatitude$newLatitude $schoolLatitude;
  861.                     if($newLongitude $schoolLongitude$newLongitude $schoolLongitude;
  862.                 }
  863.             }
  864.         }
  865.         // echo ("NEW-->" . strval($newLatitude) . "," . strval($newLongitude) .' --> ');
  866.         // echo (strval($newLatitude+$gap) . "," . strval($newLongitude) .'<br>');
  867.         // die();
  868.         if(($newLatitude == null) || ($newLongitude == null)) {
  869.             $newCoordinates = ['latitude'=>$currentLatitude'longitude'=>$currentLongitude];
  870.         } else {
  871.             $newLongitude += $gap;
  872.             $newCoordinates = ['latitude' => $newLatitude'longitude' => $newLongitude];
  873.         }
  874.         $result = ['school_id'=> $currentId'coordinates' => $newCoordinates];
  875.         return new JsonResponse($result);
  876.     }
  877.     #[Route(path'/{id}/cityByRegion/'name'front_school_city_by_region'methods: ['GET'])]
  878.     public function cityByRegionAction(int $id): JsonResponse|Response {
  879.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($id) {
  880.             $cities $this->cityRepository->getByRegionId($id);
  881.             return new JsonResponse($cities);
  882.         });
  883.     }
  884.     #[Route(path'/{id}/activityBySchoolSectorArea/'name'front_school_activity_by_school_sector_area'methods: ['GET'])]
  885.     public function activityBySchoolSectorArea(int $id): JsonResponse|Response {
  886.         return $this->schoolService->checkUnCompletedAccountBefore(function () use ($id) {
  887.             $school $this->schoolService->getSchool();
  888.             // find which school sectorarea (1 to 6) used by $id
  889.             $sectorAreaNumber 0;
  890.             for ($i 1$i <= 6$i++) {
  891.                 $getSectorArea "getSectorArea" . (string)$i;
  892.                 if ($school->$getSectorArea()) {
  893.                     if ($school->$getSectorArea()->getId() == $id) {
  894.                         $sectorAreaNumber $i;
  895.                         $i 7//end of loop
  896.                     }
  897.                 }
  898.             }
  899.             // Find Activities used by School
  900.             $getActivities "getActivities" $sectorAreaNumber;
  901.             $activities $school->$getActivities();
  902.             $res = [];
  903.             foreach ($activities as $activity) {
  904.                 $data = array('name' => $activity->getName(), 'id' => $activity->getId());
  905.                 $res[] = $data;
  906.             }
  907.             //dump($res);
  908.             return new JsonResponse($res);
  909.         });
  910.     }
  911.      public function checkPhoneSyntax(string $phoneNumberCountry $country, ?Region $region): string {
  912.          $res "ok";
  913.          //verification de l'indicatif pays
  914.          $phoneCode '+' $country->getPhoneCode();
  915.          //Adaptation DBTA
  916.          if($region) {
  917.              $phoneCode '+' $region->getPhoneCode();
  918.          }
  919.          $nationalPhone "";
  920.          $isValidPhone false;
  921.          //verification du nombre de digits téléphonique du pays
  922.          $phoneDigit '+' $country->getPhoneDigit();
  923.          if($region) {
  924.              $phoneDigit '+' $region->getPhoneDigit();
  925.          }
  926.          if (strncmp($phoneCode$phoneNumberstrlen($phoneCode)) === 0) {
  927.              $nationalPhone substr($phoneNumberstrlen($phoneCode));
  928.              $isValidPhone true;
  929.          } else {
  930.              // $res = "Le numéro doit commencer par " . $phoneCode . "\n";
  931.              $res $this->translator->trans("menu.number_must_begin_by") . " " $phoneCode "(" $phoneNumber ")""\n";
  932.          }
  933.          if ($isValidPhone == true && strlen($nationalPhone) > 0) {
  934.              // suppression du 0 pour le national
  935.              if ($nationalPhone[0] == '0') {
  936.                  $nationalPhone substr($nationalPhone1);
  937.              }
  938.              // reconstruit le numéro de téléphone sans le 0 national
  939.              $validPhone $phoneCode $nationalPhone;
  940.              if ($validPhone !== $phoneNumber) {
  941.                  $res $this->translator->trans("menu.suggestion_for_the_number") . " " $validPhone;
  942.              }
  943.          }
  944.          // vérification de la conformité du numéro de téléphone
  945.          if ($isValidPhone == true) {
  946.              if (strlen($nationalPhone) != $phoneDigit) {
  947.                  $isValidPhone false;
  948.                  $res $this->translator->trans("menu.the_number_without_the_country_code_must_have") . " " . (int)$phoneDigit " chiffres";
  949.              }
  950.              if (!ctype_digit($nationalPhone)) {
  951.                  $res $this->translator->trans("menu.wrong_phone_number_syntax");
  952.              }
  953.          }
  954.          return ($res);
  955.      }
  956.     public function actorRegister(string $typePersonstring $phoneNumberCountry $countryRegion $region): array {
  957.         $existUser $this->userRepository->findOneByPhone($phoneNumber);
  958.         $user = new User();
  959.         $err = [];
  960.         //Création du mot de passe temporaire
  961.         $comb 'abcdefghijklmnopqrstuvwxyz1234567890';
  962.         $password "";
  963.         $combLen strlen($comb) - 1;
  964.         for ($i 0$i 6$i++) {
  965.             $n rand(0$combLen);
  966.             $password .= $comb[$n];
  967.         }
  968.          // Mise a jour du Role
  969.          if (!$existUser) {
  970.              switch ($typePerson) {
  971.                  case "company":
  972.                      {
  973.                          $role $this->roleRepository->findOneBy(["role" => "ROLE_ENTREPRISE"]);
  974.                          $user->addProfil($role);
  975.                      }
  976.                      break;
  977.                  case "personDegree":
  978.                      {
  979.                          $role $this->roleRepository->findOneBy(["role" => "ROLE_DIPLOME"]);
  980.                          $user->addProfil($role);
  981.                      }
  982.                      break;
  983.                  default:
  984.                      throw new NotFoundHttpException($this->translator->trans('flashbag.unable_to_create_an_account'));
  985.              }
  986.              // Supprime les espaces du numéro de téléphone
  987.              $user->setPhone(preg_replace('/\s/'''$phoneNumber));
  988.              // Encode le password
  989.              $user->setPassword($this->hasher->hashPassword($user$password));
  990.              // synchronise le username avec le phone
  991.              $user->setUsername($phoneNumber);
  992.              // créé l'adresse mail fictive
  993.              $user->setEmail($phoneNumber "@domaine.extension");
  994.              $user->setCountry($country);
  995.              //adaptation DBTA
  996.              if($region){
  997.                  $user->setRegion($region);
  998.              }
  999.              // Persistance en base
  1000.              $this->em->persist($user);
  1001.          } else {
  1002.              $err[] = $this->translator->trans('flashbag.this_phone_number_is_already_in_use');
  1003.          }
  1004.          return ([$user$password$err]);
  1005.     }
  1006.     #[Route(path'/changePersonDegreePhoneMobile1'name'change_person_degree_phonemobile1'methods: ['GET'])]
  1007.     public function changePersonDegreePhoneMobile1(Request$request): JsonResponse|Response {
  1008.         $personDegreeId $request->query->get('id');
  1009.         $newPhoneMobile1 $request->query->get('phoneMobile1');
  1010.         $result "";
  1011.         if((!$this->userRepository->findByPhone($newPhoneMobile1))&&
  1012.             (!$this->personDegreeRepository->findByPhoneMobile1($newPhoneMobile1))) {
  1013.             $personDegree $this->personDegreeRepository->find($personDegreeId);
  1014.             if($personDegree) {
  1015.                 $user $this->userRepository->find($personDegree->getUser()->getId());
  1016.                 $user->setPhone($newPhoneMobile1);
  1017.                 $user->setUsername($newPhoneMobile1);
  1018.                 $user->setUsernameCanonical($newPhoneMobile1);
  1019.                 $this->em->persist($user);
  1020.                 $personDegree->setPhoneMobile1($newPhoneMobile1);
  1021.                 $this->em->persist($personDegree);
  1022.                 $this->em->flush();
  1023.                 $result 'OK';
  1024.             }
  1025.         } else {
  1026.             $result 'N° de téléphone déjà utilisé';
  1027.         }
  1028.         return new JsonResponse($result);
  1029.     }
  1030.     #[Route(path'/changePersonDegreeEmail'name'change_person_degree_email'methods: ['GET'])]
  1031.     public function changePersonDegreeEmail(Request$request): JsonResponse|Response {
  1032.         $personDegreeId $request->query->get('id');
  1033.         $newEmail $request->query->get('email');
  1034.         $result "";
  1035.         if((!$this->userRepository->findByEmail($newEmail))&&
  1036.            (!$this->personDegreeRepository->findByEmail($newEmail))) {
  1037.                $personDegree $this->personDegreeRepository->find($personDegreeId);
  1038.                if($personDegree) {
  1039.                    $user $this->userRepository->find($personDegree->getUser()->getId());
  1040.                    $user->setEmail($newEmail);
  1041.                    $this->em->persist($user);
  1042.                    $personDegree->setEmail($newEmail);
  1043.                    $this->em->persist($personDegree);
  1044.                    $this->em->flush();
  1045.                    $result 'OK';
  1046.                }
  1047.         } else {
  1048.             $result 'Email déjà utilisé';
  1049.         }
  1050.         return new JsonResponse($result);
  1051.     }
  1052.     #[Route(path'/changePersonDegreeType'name'change_person_degree_type'methods: ['GET'])]
  1053.     public function changePersonDegreeType(Request$request): JsonResponse|Response {
  1054.         $personDegreeId $request->query->get('id');
  1055.         $newType $request->query->get('type');
  1056.         $month $request->query->get('month');
  1057.         $year $request->query->get('year');
  1058.         $result "";
  1059.         $personDegree $this->personDegreeRepository->find($personDegreeId);
  1060.         if($personDegree) {
  1061.             $personDegree->setType($newType);
  1062.             if($month$personDegree->setLastDegreeMonth(intval($month));
  1063.             if($year$personDegree->setLastDegreeYear(intval($year));
  1064.             $this->em->persist($personDegree);
  1065.             $this->em->flush();
  1066.             $result 'OK';
  1067.         } else {
  1068.             $result 'js.unknown_error_server';
  1069.         }
  1070.         return new JsonResponse($result);
  1071.     }
  1072. }