src/Controller/PersonDegreeController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\PersonDegree;
  4. use App\Entity\School;
  5. use App\Form\PersonDegreeType;
  6. use App\Repository\PersonDegreeRepository;
  7. use App\Repository\UserRepository;
  8. use App\Repository\CountryRepository;
  9. use App\Repository\RegionRepository;
  10. use App\Services\ActivityService;
  11. use App\Services\PersonDegreeService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  17. use Symfony\Component\HttpFoundation\RedirectResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. #[Route(path'/persondegree')]
  23. #[Security("is_granted('ROLE_ADMIN') or 
  24.             is_granted('ROLE_LEGISLATEUR') or 
  25.             is_granted('ROLE_DIRECTEUR') or 
  26.             is_granted('ROLE_ADMIN_REGIONS') or 
  27.             is_granted('ROLE_ADMIN_PAYS') or 
  28.             is_granted('ROLE_ADMIN_VILLES') or 
  29.             is_granted('ROLE_PRINCIPAL')")]
  30. class PersonDegreeController extends AbstractController {
  31.     private EntityManagerInterface $em;
  32.     private PersonDegreeRepository $personDegreeRepository;
  33.     private ActivityService $activityService;
  34.     private UserRepository $userRepository;
  35.     private CountryRepository $countryRepository;
  36.     private RegionRepository $regionRepository;
  37.     private PersonDegreeService $personDegreeService;
  38.     private TranslatorInterface $translator;
  39.     public function __construct(
  40.         EntityManagerInterface $em,
  41.         PersonDegreeRepository $personDegreeRepository,
  42.         ActivityService        $activityService,
  43.         UserRepository         $userRepository,
  44.         PersonDegreeService    $personDegreeService,
  45.         CountryRepository      $countryRepository,
  46.         RegionRepository      $regionRepository,
  47.         TranslatorInterface $translator
  48.     ) {
  49.         $this->em $em;
  50.         $this->personDegreeRepository $personDegreeRepository;
  51.         $this->activityService $activityService;
  52.         $this->userRepository $userRepository;
  53.         $this->personDegreeService $personDegreeService;
  54.         $this->countryRepository $countryRepository;
  55.         $this->regionRepository $regionRepository;
  56.         $this->translator $translator;
  57.     }
  58.     #[Route(path'/'name'persondegree_index'methods: ['GET'])]
  59.     public function indexAction(): Response {
  60.         $userCountry $this->getUser()->getCountry();
  61.         $countryId $userCountry $userCountry->getId() : null;
  62.         // adaptation for multi administrators
  63.         $userRegions = [];
  64.         $userCities = [];
  65.         if ($this->getUser()->hasRole('ROLE_ADMIN_PAYS')) {
  66.             $userCountry $this->getUser()->getCountry();
  67.             $userRegions =  $this->regionRepository->findByCountry($userCountry->getId());
  68.         } else if ($this->getUser()->hasRole('ROLE_ADMIN_REGIONS')) {
  69.             $userRegions =  $this->getUser()->getAdminRegions();
  70.         } else if ($this->getUser()->hasRole('ROLE_ADMIN_VILLES')) {
  71.             $userCities =  $this->getUser()->getAdminCities();
  72.         }
  73.         // For RegionsAdministrators
  74.         if(count($userRegions) >0) {
  75.             $personDegrees = [];
  76.             foreach ($userRegions as $region) {
  77.                 $personDegrees array_merge($personDegrees$this->personDegreeRepository->getAllCityRegionPersonDegree(null$region->getId()));
  78.             }
  79.             // dump($personDegrees); die();
  80.         // For CountriesAdministrators
  81.         } else if(count($userCities) >0) {
  82.             $personDegrees = [];
  83.             foreach ($userCities as $city) {
  84.                 $personDegrees array_merge($personDegrees$this->personDegreeRepository->getAllCityRegionPersonDegree($city->getId(), null));
  85.             }
  86.         // For All administrators
  87.         } else {
  88.             $personDegrees $this->personDegreeRepository->getAllPersonDegree(null,$countryId);
  89.             // adaptation dbta for diaspora
  90.             if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  91.                 $userRegion $this->getUser()->getRegion();
  92.                 $regionId $userRegion $userRegion->getId() : null;
  93.                 $personDegrees $this->personDegreeRepository->getAllCityRegionPersonDegree(null,$regionId);
  94.             }
  95.         }
  96.         //For Principal Role
  97.         if($this->getUser()->getPrincipalSchool()) {
  98.             $personDegrees $this->personDegreeRepository->getAllPersonDegree(null,null$this->getUser()->getPrincipalSchool());
  99.         }
  100.         return $this->render('persondegree/index.html.twig', [
  101.             'personDegrees' => $personDegrees
  102.         ]);
  103.     }
  104.     #[Route(path'/new_asup'name'persondegree_new'methods: ['GET''POST'])]
  105.     public function newAction(Request $request): RedirectResponse|Response {
  106.         $personDegree = new Persondegree();
  107.         $user $this->getUser();
  108.         $personDegree->setPhoneMobile1($user->getPhone());
  109.         // $personDegree->setCountry($user->getCountry());
  110.         $personDegree->setLocationMode(true);
  111.         $residenceCountryPhoneCode null;
  112.         $selectedCountry $personDegree->getCountry();
  113.         if($this->getUser()->getResidenceCountry()) {
  114.             $residenceCountryPhoneCode $this->getUser()->getResidenceCountry()->getPhoneCode();
  115.         }
  116.         $personDegree->setDiaspora($user->isDiaspora());
  117.         $personDegree->setResidenceCountry($user->getResidenceCountry());
  118.         //adaptation dbta
  119.         $selectedRegion null;
  120.         if ($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  121.             if($user->getCountry()?->getId() != $user->getRegion()->getCountry()?->getId()) {
  122.                 $user->setCountry($user->getRegion()->getCountry());
  123.                 $this->em->persist($user);
  124.                 $this->em->flush();
  125.             }
  126.             $personDegree->setRegion($user->getRegion());
  127.             // $personDegree->setCountry($user->getRegion()->getCountry());
  128.             $selectedRegion $personDegree->getRegion();
  129.         }
  130.         $form $this->createForm(PersonDegreeType::class, $personDegree, [
  131.             'selectedCountry' => $selectedCountry->getId()
  132.         ]);
  133.         $form->handleRequest($request);
  134.         $otherCountries $this->countryRepository->getNameAndIndicatif($selectedCountry->getId());
  135.         if ($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  136.             $otherCountries $this->regionRepository->getNameAndIndicatif($selectedCountry->getId());
  137.         }
  138.         if ($form->isSubmitted() && $form->isValid()) {
  139.             $agreeRgpd $form->get('agreeRgpd')->getData();
  140.             if ($agreeRgpd) {
  141.                 $user->setEmail($personDegree->getEmail());
  142.                 $user->setDiaspora($personDegree->isDiaspora());
  143.                 $user->setResidenceCountry($personDegree->getResidenceCountry());
  144.                 $personDegree->setUser($user);
  145.                 $personDegree->setCreatedDate(new \DateTime());
  146.                 $personDegree->setUpdatedDate(new \DateTime());
  147.                 $personDegree->setPhoneMobile1($user->getPhone());
  148.                 $personDegree->setUnlocked(false);
  149.                 $dnsServer $this->getParameter('dnsServer');
  150.                 if ((php_uname('n') != $dnsServer) && (php_uname('n') != null))
  151.                     $personDegree->setClientUpdateDate(new \DateTime());
  152.                 $this->em->persist($user);
  153.                 $this->em->persist($personDegree);
  154.                 $this->em->flush();
  155.                 return $this->redirectToRoute('persondegree_show', ['id' => $personDegree->getId()]);
  156.             }
  157.         }
  158.         return $this->render('persondegree/new.html.twig', [
  159.             'personDegree' => $personDegree,
  160.             'form' => $form->createView(),
  161.             'allActivities' => $this->activityService->getAllActivities(),
  162.             'selectedCountry' => $selectedCountry,
  163.             'selectedRegion' => $selectedRegion,
  164.             'residenceCountryPhoneCode' => $residenceCountryPhoneCode,
  165.             'otherCountries' => $otherCountries,
  166.         ]);
  167.     }
  168.     #[Route(path'/{id}'name'persondegree_show'methods: ['GET'])]
  169.     public function showAction(PersonDegree $personDegree): Response {
  170.         return $this->render('persondegree/show.html.twig', [
  171.             'personDegree' => $personDegree
  172.         ]);
  173.     }
  174.     #[Security("is_granted('ROLE_ADMIN') or 
  175.                 is_granted('ROLE_ADMIN_PAYS') or
  176.                 is_granted('ROLE_ADMIN_REGIONS') or
  177.                 is_granted('ROLE_ADMIN_VILLES')")]
  178.     #[Route(path'/{id}/edit'name'persondegree_edit'methods: ['GET''POST'])]
  179.     public function editAction(Request $requestPersonDegree $personDegree): RedirectResponse|Response {
  180.         $createdDate $personDegree->getCreatedDate();
  181.         $currentUser $personDegree->getUser();
  182.         $selectedCountry $currentUser->getCountry();
  183.         if (!$selectedCountry) {
  184.             $selectedCountry $personDegree->getCountry();
  185.         }
  186.         $otherCountries $this->countryRepository->getNameAndIndicatif($selectedCountry->getId());
  187.         $residenceCountryPhoneCode null;
  188.         if ($currentUser->getResidenceCountry()) {
  189.             $residenceCountryPhoneCode $currentUser->getResidenceCountry()->getPhoneCode();
  190.         }
  191.         //adaptation for DBTA
  192.         $selectedRegion null;
  193.         if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  194.             $otherCountries $this->regionRepository->getNameAndIndicatif($selectedCountry->getId());
  195.             $residenceCountryPhoneCode $currentUser->getResidenceRegion()?->getPhoneCode();
  196.             $selectedRegion $currentUser->getRegion();
  197.         }
  198.         $editForm $this->createForm(PersonDegreeType::class, $personDegree, ['selectedCountry' => $selectedCountry->getId()]);
  199.         $editForm->handleRequest($request);
  200.         if ($editForm->isSubmitted() && $editForm->isValid()) {
  201.             $currentUser->setDiaspora($personDegree->isDiaspora());
  202.             $currentUser->setResidenceCountry($personDegree->getResidenceCountry());
  203.             $currentUser->setResidenceRegion($personDegree->getResidenceRegion());
  204.             $this->em->persist($currentUser);
  205.             // Patch if no createdDate found
  206.             $personDegree->setCreatedDate($createdDate);
  207.             if ($personDegree->getCreatedDate() == null) {
  208.                 if ($personDegree->getUpdatedDate()) {
  209.                     $personDegree->setCreatedDate($personDegree->getUpdatedDate());
  210.                 } else {
  211.                     $personDegree->setCreatedDate(new \DateTime());
  212.                 }
  213.             }// end patch
  214.             $personDegree->setUpdatedDate(new \DateTime());
  215.             $dnsServer $this->getParameter('dnsServer');
  216.             if ((php_uname('n') != $dnsServer)&&(php_uname('n') != null))
  217.                 $personDegree->setClientUpdateDate(new \DateTime());
  218.             $personDegree->setUser($currentUser);
  219.             $this->em->persist($currentUser);
  220.             $this->em->persist($personDegree);
  221.             $this->em->flush();
  222.             return $this->redirectToRoute('persondegree_show', ['id' => $personDegree->getId()]);
  223.         }
  224.         $personDegree->setDiaspora($currentUser->isDiaspora());
  225.         $personDegree->setResidenceCountry($currentUser->getResidenceCountry());
  226.         $residenceCountryPhoneCode $personDegree->getUser()->getResidenceCountry()?->getPhoneCode();
  227.         if($_ENV['STRUCT_PROVINCE_COUNTRY_CITY'] == 'true') {
  228.             $residenceCountryPhoneCode $personDegree->getUser()->getResidenceRegion()?->getPhoneCode();
  229.         }
  230.         return $this->render('persondegree/edit.html.twig', [
  231.             'personDegree' => $personDegree,
  232.             'edit_form' => $editForm->createView(),
  233.             'allActivities' => $this->activityService->getAllActivities(),
  234.             'selectedCountry' => $selectedCountry,
  235.             'selectedRegion' => $selectedRegion,
  236.             'residenceCountryPhoneCode' => $residenceCountryPhoneCode,
  237.             'otherCountries' => $otherCountries
  238.         ]);
  239.     }
  240.     #[Route(path'/delete/{id}'name'persondegree_delete'methods: ['GET'])]
  241.     public function deleteElementAction(Request $request, ?PersonDegree $personDegree): RedirectResponse {
  242.         if (array_key_exists('HTTP_REFERER'$request->server->all())) {
  243.             if($personDegree) {
  244.                 $user $personDegree->getUser();
  245.                 if ($user) {
  246.                     $this->personDegreeService->removeRelations($user);
  247.                     $this->em->remove($user);
  248.                     $this->em->flush();
  249.                     $this->addFlash('success'$this->translator->trans('flashbag.the_deletion_of_the_user_is_done_with_success'));
  250.                 } else {
  251.                     $this->addFlash('warning'$this->translator->trans('flashbag.unable_to_delete_user'));
  252.                     return $this->redirect($request->server->all()['HTTP_REFERER']);
  253.                 }
  254.             } else {
  255.                 $this->addFlash('warning'$this->translator->trans('flashbag.unable_to_delete_graduate'));
  256.                 return $this->redirect($request->server->all()['HTTP_REFERER']);
  257.             }
  258.         }
  259.         return $this->redirectToRoute('persondegree_index');
  260.     }
  261.     #[Route(path'/filters/{id}/school'name'persondegree_filters_school'methods: ['GET'])]
  262.     public function getFiltersBySchoolAction(School $school): JsonResponse {
  263.         $listDegree = [];
  264.         /** @var Degree $degree */
  265.         foreach ($school->getDegrees() as $degree) {
  266.             $listDegree[] = [
  267.                 'id' => $degree->getId(),
  268.                 'name' => $degree->getName()
  269.             ];
  270.         }
  271.         $listSectorArea = [];
  272.         $listSectorArea[] = ['id' => $school->getSectorArea1()->getId(), 'name' => $school->getSectorArea1()->getName()];
  273.         if ($school->getSectorArea2())
  274.             $listSectorArea[] = ['id' => $school->getSectorArea2()->getId(), 'name' => $school->getSectorArea2()->getName()];
  275.         if ($school->getSectorArea3())
  276.             $listSectorArea[] = ['id' => $school->getSectorArea3()->getId(), 'name' => $school->getSectorArea3()->getName()];
  277.         if ($school->getSectorArea4())
  278.             $listSectorArea[] = ['id' => $school->getSectorArea4()->getId(), 'name' => $school->getSectorArea4()->getName()];
  279.         $listActivity = [];
  280.         /** @var Activity $activity */
  281.         foreach ($school->getActivities1() as $activity) {
  282.             $listActivity[] = ['id' => $activity->getId(), 'name' => $activity->getName()];
  283.         }
  284.         if ($school->getActivities2()) {
  285.             /** @var Activity $activity */
  286.             foreach ($school->getActivities2() as $activity) {
  287.                 $listActivity[] = ['id' => $activity->getId(), 'name' => $activity->getName()];
  288.             }
  289.         }
  290.         if ($school->getActivities3()) {
  291.             /** @var Activity $activity */
  292.             foreach ($school->getActivities3() as $activity) {
  293.                 $listActivities[] = ['id' => $activity->getId(), 'name' => $activity->getName()];
  294.             }
  295.         }
  296.         if ($school->getActivities4()) {
  297.             /** @var Activity $activity */
  298.             foreach ($school->getActivities4() as $activity) {
  299.                 $listActivity[] = ['id' => $activity->getId(), 'name' => $activity->getName()];
  300.             }
  301.         }
  302.         return new JsonResponse([$listDegree$listSectorArea$listActivity]);
  303.     }
  304. }