src/Controller/DefaultController.php line 149

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AvatarDTO;
  4. use App\Entity\User;
  5. use App\Entity\School;
  6. use App\Repository\UserRepository;
  7. use App\Repository\CityRepository;
  8. use App\Repository\RegionRepository;
  9. use App\Repository\PrefectureRepository;
  10. use App\Repository\SchoolRepository;
  11. use App\Form\AvatarType;
  12. use App\Services\FileUploader;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\RedirectResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Security\Core\Security;
  23. use Symfony\Component\Security\Core\User\UserInterface;
  24. use Symfony\Component\HttpKernel\KernelInterface;
  25. use Symfony\Contracts\Translation\TranslatorInterface;
  26. class DefaultController extends AbstractController {
  27.     private PrefectureRepository $prefectureRepository;
  28.     private UserRepository $userRepository;
  29.     private CityRepository $cityRepository;
  30.     private RegionRepository $regionRepository;
  31.     private SchoolRepository $schoolRepository;
  32.     private TranslatorInterface $translator;
  33.     public function __construct(
  34.         PrefectureRepository    $prefectureRepository,
  35.         UserRepository         $userRepository,
  36.         CityRepository          $cityRepository,
  37.         RegionRepository        $regionRepository,
  38.         SchoolRepository        $schoolRepository,
  39.         TranslatorInterface     $translator
  40.     ) {
  41.         $this->prefectureRepository $prefectureRepository;
  42.         $this->userRepository $userRepository;
  43.         $this->cityRepository $cityRepository;
  44.         $this->regionRepository $regionRepository;
  45.         $this->schoolRepository $schoolRepository;
  46.         $this->translator $translator;
  47.     }
  48.     #[Route(path'/'name'homepage'methods: ['GET'])]
  49.     public function indexAction(Request $request): RedirectResponse {
  50.         return $this->redirectToRoute('dashboard_index');
  51.     }
  52.     #[Route(path'/rgpd_informations'name'rgpd_informations'methods: ['GET'])]
  53.     public function showRgpdInformationsAction(Request $request): Response {
  54.         try {
  55.             return $this->render('information_rgpd_' $request->getLocale() . '.html.twig');
  56.         } catch (\Exception $e) {
  57.             return $this->render('information_rgpd.html.twig');
  58.         }
  59.     }
  60.     #[Route(path'/change_profile'name'change_profile'methods: ['GET''POST'])]
  61.     #[IsGranted('ROLE_USER')]
  62.     public function newAction(
  63.         Request $request,
  64.         Security $security,
  65.         EntityManagerInterface $em,
  66.         FileUploader $fileUploader
  67.     ): RedirectResponse|Response {
  68.         $avatar = new AvatarDTO();
  69.         $form $this->createForm(AvatarType::class, $avatar);
  70.         $form->handleRequest($request);
  71.         /** @var User $user */
  72.         $user $security->getUser();
  73.         if ($form->isSubmitted() && $form->isValid()) {
  74.             $avatarDescription $form->get('file')->getData();
  75.             if ($avatarDescription) {
  76.                 $avatarDescriptionFileName $fileUploader->uploadAvatar($avatarDescription$user->getImageName());
  77.                 $user->setImageName($avatarDescriptionFileName);
  78.             }
  79.             $em->persist($user);
  80.             $em->flush();
  81.         }
  82.         return $this->render('user/avatar.html.twig', [
  83.             'avatar' => $avatar,
  84.             'form' => $form->createView(),
  85.             'username' => $user->getUserIdentifier(),
  86.         ]);
  87.     }
  88.     #[Route(path'/get_js_translation'name'get_js_translation'methods: ['GET'])]
  89.     public function getJsTranslation(Request $request): JsonResponse {
  90.         // Read xml file
  91.         $xmlFile $this->getParameter('kernel.project_dir') . DIRECTORY_SEPARATOR 'translations' DIRECTORY_SEPARATOR 'messages.' $request->getLocale() . '.xlf';
  92.         $content simplexml_load_file($xmlFile);
  93.         $result = array();
  94.         foreach ($content as $files) {
  95.             foreach ($files as $file)
  96.                 foreach ($file as $body)
  97.                     if ((strpos($body->source"js.") > -1) ||
  98.                         (strpos($body->source"time.") > -1) ||
  99.                         (strpos($body->source"country.") > -1) ||
  100.                         (strpos($body->source"sectors.") > -1) ||
  101.                         (strpos($body->source"sub_sectors.") > -1) ||
  102.                         (strpos($body->source"legal_status.") > -1) ||
  103.                         (strpos($body->source"raisons_no_job.") > -1) ||
  104.                         (strpos($body->source"diplomas.") > -1)
  105.                     ) {
  106.                         $src = (string)$body->source;
  107.                         $target str_replace("'""\""$body->target);
  108.                         if (strlen($target) == 0) {
  109.                             $target $src;
  110.                         }
  111.                         $result[$src] = $target;
  112.                     }
  113.         }
  114.         return new JsonResponse($result);
  115.     }
  116.     #[Route(path'/getRegionsByCountry'name'get_regions_by_country'methods: ['GET'])]
  117.     public function getRegionsByCountry(Request $request): JsonResponse|Response {
  118.         $idCountry $request->query->get("countryId");
  119.         $regions = [];
  120.         $cities = [];
  121.         $regionsRepos $this->regionRepository->findByCountry($idCountry);
  122.         foreach ($regionsRepos as $region) {
  123.             $repos $this->cityRepository->findByRegion($region->getId());
  124.             foreach ($repos as $city) {
  125.                 $cities[$city->getId()] = $city->getName();
  126.             }
  127.             $regions[$region->getId()] = $this->translator->trans($region->getName());
  128.         }
  129.         return new JsonResponse(["regions"=>$regions"cities"=>$cities]);
  130.     }
  131.     #[Route(path'/getPrefecturesByRegion'name'get_prefectures_by_region'methods: ['GET'])]
  132.     public function getPrefecturesByRegion(Request $request): JsonResponse|Response {
  133.         $idRegion $request->query->get("regionId");
  134.         $prefectures[] = [];
  135.         $cities[] = [];
  136.         $prefecturesRepos $this->prefectureRepository->findByRegion($idRegion);
  137.         $citiesRepos $this->cityRepository->findByRegion($idRegion);
  138.         foreach ($citiesRepos as $city) {
  139.             $cities[$city->getId()] = $city->getName();
  140.         }
  141.         foreach ($prefecturesRepos as $prefecture) {
  142.             $prefectures[$prefecture->getId()] = $prefecture->getName();
  143.         }
  144.         return new JsonResponse(["prefectures"=>$prefectures"cities"=>$cities]);
  145.     }
  146.     #[Route(path'/getCitiesByPrefecture'name'get_cities_by_prefecture'methods: ['GET'])]
  147.     public function getCitiesByPrefecture(Request $request ): JsonResponse|Response {
  148.         $idPrefecture $request->query->get("prefectureId");
  149.         $cities[] = [];
  150.         $repos $this->cityRepository->findByPrefecture($idPrefecture);
  151.         foreach ($repos as $city) {
  152.             $cities[$city->getId()] = $city->getName();
  153.         }
  154.         return new JsonResponse(["cities"=>$cities]);
  155.     }
  156.     #[Route(path'/getCitiesByCountry'name'get_cities_by_country'methods: ['GET'])]
  157.     public function getCitiesByCountry(Request $request ): JsonResponse|Response {
  158.         $idCountry $request->query->get("countryId");
  159.         $regionsRepos $this->regionRepository->findByCountry($idCountry);
  160.         $citiesRepos = [];
  161.         foreach ($regionsRepos as $region) {
  162.             $citiesRepos array_merge($citiesRepos$this->cityRepository->findByRegion($region->getId()));
  163.         }
  164.         $cities[] = [];
  165.         foreach ($citiesRepos as $city) {
  166.             $cities[$city->getId()] = $city->getName() . '-' $this->translator->trans($city->getRegion()->getName());
  167.         }
  168.         return new JsonResponse($cities);
  169.     }
  170.     #[Route(path'/getCitiesByRegion'name'get_cities_by_region'methods: ['GET'])]
  171.     public function getCitiesByRegion(Request $request ): JsonResponse|Response {
  172.         $idRegion $request->query->get("regionId");
  173.         $citiesRepos $this->cityRepository->findByRegion($idRegion);
  174.         $cities[] = [];
  175.         foreach ($citiesRepos as $city) {
  176.             $cities[$city->getId()] = $city->getName() . '-' $this->translator->trans($city->getRegion()->getName());
  177.         }
  178.         return new JsonResponse($cities);
  179.     }
  180.     #[Route(path'/getRegionAndPrefectureByCity'name'get_region_and_prefecture_by_city'methods: ['GET'])]
  181.     public function getRegionAndPrefecturesByCity(Request $request): JsonResponse|Response {
  182.         $idCity $request->query->get("cityId");
  183.         $city $this->cityRepository->find($idCity);
  184.         $prefectureId null;
  185.         $prefectureName null;
  186.         $city->getPrefecture() ? $prefectureId $city->getPrefecture()->getId() : null;
  187.         $city->getPrefecture() ? $prefectureName $city->getPrefecture()->getName() : null;
  188.         return new JsonResponse(["regionId"=>$city->getRegion()->getId(),
  189.             "regionName"=>$city->getRegion()->getName(),
  190.             "prefectureId"=>$prefectureId,
  191.             "prefectureName"=>$prefectureName
  192.             ]);
  193.     }
  194.     #[Route(path'/getSchoolsByCountry'name'get_schools_by_country'methods: ['GET'])]
  195.     public function getSchoolsByCountry(Request $request): JsonResponse|Response {
  196.         $idCountry $request->query->get("countryId");
  197.         $schoolsRepos $this->schoolRepository->findByCountry($idCountry);
  198.         $schools = [];
  199.         foreach ($schoolsRepos as $school) {
  200.             // $schools[] = ["id"=>$school->getId(), "name"=>($school->getName(). " (" . $school->getCity()->getName()). ")"];
  201.             $schools[$school->getId()] = $school->getName(). " (" $school->getCity()->getName(). ")";
  202.         }
  203.         return new JsonResponse($schools);
  204.     }
  205.     #[Route(path'/getSchoolsByRegion'name'get_schools_by_region'methods: ['GET'])]
  206.     public function getSchoolsByRegion(Request $request): JsonResponse|Response {
  207.         $idRegion $request->query->get("regionId");
  208.         // var_dump($idRegion);die();
  209.         $schoolsRepos $this->schoolRepository->findByRegion($idRegion);
  210.         $schools = [];
  211.         foreach ($schoolsRepos as $school) {
  212.             // $schools[] = ["id"=>$school->getId(), "name"=>($school->getName(). " (" . $school->getCity()->getName()). ")"];
  213.             $schools[$school->getId()] = $school->getName(). " (" $school->getCity()->getName(). ")";
  214.         }
  215.         return new JsonResponse($schools);
  216.     }
  217.     #[Route(path'/getSchoolsByPrefecture'name'get_schools_by_prefecture'methods: ['GET'])]
  218.     public function getSchoolsByPrefecture(Request $request): JsonResponse|Response {
  219.         $idPrefecture $request->query->get("prefectureId");
  220.         $cities $this->cityRepository->findByPrefecture($idPrefecture);
  221.         $schoolsRepos = [];
  222.         foreach ($cities as $city) {
  223.             $schoolsRepos array_merge($schoolsRepos$this->schoolRepository->findBycity($city));
  224.         }
  225.         $schools = [];
  226.         foreach ($schoolsRepos as $school) {
  227.             // if (!array_key_exists('id', $schools)) {
  228.             //     $schools[] = ["id"=>$school->getId(), "name"=>($school->getName(). " (" . $school->getCity()->getName()). ")"];
  229.                 $schools[$school->getId()] = $school->getName(). " (" $school->getCity()->getName(). ")";
  230.             // }
  231.         }
  232.         return new JsonResponse($schools);
  233.     }
  234.     #[Route(path'/getSchoolsByCity'name'get_schools_by_city'methods: ['GET'])]
  235.     public function getSchoolsBycity(Request $request): JsonResponse|Response {
  236.         $idCity $request->query->get("cityId");
  237.         $schoolsRepos $this->schoolRepository->findBycity($idCity);
  238.         $schools = [];
  239.         foreach ($schoolsRepos as $school) {
  240.             // $schools[] = ["id"=>$school->getId(), "name"=>($school->getName(). " (" . $school->getCity()->getName()). ")"];
  241.             $schools[$school->getId()] = $school->getName(). " (" $school->getCity()->getName(). ")";
  242.         }
  243.         return new JsonResponse($schools);
  244.     }
  245.     /**
  246.      * check in phoneNumber, pseudo or email already used in user
  247.      * @param Request $request
  248.      * @return JsonResponse|Response
  249.      */
  250.     #[Route(path'/getExistUser'name'get_exist_user'methods: ['GET'])]
  251.     public function getExistUser(Request $request): JsonResponse|Response {
  252.         $userId null;
  253.         $dbUserPhone $request->query->get("dbUserPhone");
  254.         $userPhone $request->query->get("userPhone");
  255.         $userPseudo $request->query->get("userPseudo");
  256.         $userEmail $request->query->get("userEmail");
  257.         $result = [];
  258.         if($dbUserPhone) {
  259.             $users $this->userRepository->findByPhone($dbUserPhone);
  260.             if($users) {
  261.                 $userId $users[0]->getId();
  262.             }
  263.         }
  264.         $users $this->userRepository->findByPhone($userPhone);
  265.         if($users) {
  266.             if($userId != $users[0]->getId()) {
  267.                 $result["phone"] = $this->translator->trans("js.error_phone_number_already_used");
  268.                 $userId $users[0]->getId();
  269.             }
  270.         }
  271.         if(!$result) {
  272.             $users $this->userRepository->findByUsername($userPseudo);
  273.             if ($users) {
  274.                 if ($userId != $users[0]->getId()) {
  275.                     if ($users[0]->getId() != $userId) {
  276.                         $result["pseudo"] = $this->translator->trans("js.error_pseudo_already_used");
  277.                     }
  278.                 }
  279.             }
  280.         }
  281.         if(!$result) {
  282.             $users $this->userRepository->findByEmail($userEmail);
  283.             if ($users) {
  284.                 if ($userId != $users[0]->getId()) {
  285.                     if ($users[0]->getId() != $userId) {
  286.                         $result["email"] = $this->translator->trans("js.error_email_already_used");
  287.                     }
  288.                 }
  289.             }
  290.         }
  291.         return new JsonResponse($result);
  292.     }
  293. }