src/Controller/Community/Noyau/DefaultController.php line 106

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Community\Noyau;
  3. use App\Controller\Gestiform\AbstractGestiformController;
  4. use App\Entity\Common\Document;
  5. use App\Entity\Gestiform\Admin\ModelsDocument\Template;
  6. use App\Entity\Gestiform\Formations\Dossier\Dossier;
  7. use App\Entity\Gestiform\MyCommunity\Section;
  8. use App\Entity\Gestiform\Users\User;
  9. use App\Enums\DirectoriesEnum;
  10. use App\Service\Admin\MasterlistelgService;
  11. use App\Service\Admin\TemplateService;
  12. use App\Service\Admin\Users\UserService;
  13. use App\Service\Formations\Dossier\DossierService;
  14. use App\Service\Misc\ModelDocumentService;
  15. use App\Service\Misc\PermissionCheckerService;
  16. use App\Service\MyCommunity\MenuService;
  17. use App\Service\MyCommunity\PageService;
  18. use App\Service\MyCommunity\SectionService;
  19. use App\Service\Uploads\FileUploader;
  20. use Doctrine\ORM\NonUniqueResultException;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Twig\Error\LoaderError;
  25. use Twig\Error\RuntimeError;
  26. use Twig\Error\SyntaxError;
  27. #[Route(path''name'community_'host'%community_domain%')]
  28. class DefaultController extends AbstractGestiformController
  29. {
  30.     public function __construct(
  31.         private readonly PermissionCheckerService $permissionCheckerService,
  32.         private readonly PageService              $pageService,
  33.         private readonly UserService              $userService,
  34.         private readonly MenuService              $menuService,
  35.         private readonly MasterlistelgService     $masterlistelgService,
  36.         private readonly DossierService           $dossierService,
  37.         private readonly ModelDocumentService     $modelDocumentService,
  38.         private readonly SectionService           $sectionService,
  39.         private readonly TemplateService          $templateService,
  40.         private readonly FileUploader             $fileUploader,
  41.     )
  42.     {
  43.     }
  44.     #[Route(path''name'homepage')]
  45.     #[Route(path'admincommunity/'name'_homepage'host'%gestiform_domain%')]
  46.     public function homepage(): Response
  47.     {
  48.         $user $this->userService->getRepository()->find($this->getConnectedUser()?->getId());
  49.         $type $this->userService->getTypeUser($user);
  50.         if ($type !== 'employe') {
  51.             return $this->redirectToRoute("community_view_page", ["pathPage" => "espace-" $type]);
  52.         }
  53.         return $this->redirectToRoute("community_auth_login");
  54.     }
  55.     /**
  56.      *
  57.      * @param User $user
  58.      * @return Response
  59.      * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
  60.      */
  61.     #[Route(path'/impersonate/{id}'name'impersonate')]
  62.     public function impersonate(User $user): Response
  63.     {
  64.         if (!$user) {
  65.             throw $this->createNotFoundException('User not found');
  66.         }
  67.         // Generate the impersonation link
  68.         $link $this->generateUrl('gestiform_formations_default', ['_switch_user' => $user->getEmail()]);
  69.         return $this->redirect($link);
  70.     }
  71.     #[Route(path'/{id}/signer-user'name'signer_user'methods: ['POST'])]
  72.     public function signerUser(User $userRequest $request): Response
  73.     {
  74.         $signatureFile $request->files->get('signature');
  75.         if ($signatureFile) {
  76.             $user->setSignatureFile($this->fileUploader->upload($signatureFileDirectoriesEnum::SIGNATURE));
  77.             $this->userService->flush();
  78.             return $this->json(['vueData' => ['signatureFile' => $user->getSignatureFile()?->getPath() ?? ""],
  79.             ]);
  80.         }
  81.         return $this->json(["error" => true], 500);
  82.     }
  83.     #[Route(path'/switch/{dossier}'name'switch')]
  84.     public function switchDossier(Dossier $dossier): Response
  85.     {
  86.         $user $this->userService->getRepository()->find($this->getConnectedUser()->getId());
  87.         $user->setDossierActif($dossier);
  88.         $this->dossierService->flush();
  89.         return $this->redirectToRoute("community_view_page", ["pathPage" => "espace-" $dossier->getTypeActif()->getCode()]);
  90.     }
  91.     #[Route(path'/{pathPage}/{value}'name'view_page')]
  92.     public function viewPage(string $pathPage$value null): Response
  93.     {
  94.         $user $this->userService->getRepository()->find($this->getConnectedUser()->getId());
  95.         $this->permissionCheckerService->checkmycommunityAccess();
  96.         $vars['pathPage'] = $pathPage;
  97.         $page $this->pageService->getRepository()->findOneBy(array('path' => $pathPage));
  98.         $vars['pages'] = $page;
  99.         $vars['pageSections'] = $page $this->sectionService->getPageSectionsOrdre($page) : "test";//$page->getPageSections()->toArray() : "test";
  100.         $vars['pageTile'] = $page $page->getPageSections()->first() : "test";
  101.         $vars['value'] = $value;
  102.         $type $this->userService->getTypeUser($user);
  103.         $vars $this->pageService->getDocumentsAndDossierForPage($type$user$vars);
  104.         $modeles $this->templateService->getModelsToSign($user$type,false);
  105.         $vars['user'] = $user;
  106.         $vars['type'] = $type;
  107.         $vars['modeles'] = $modeles;
  108.         return $this->render('community/noyau/menu/page.html.twig'$vars);
  109.     }
  110.     /**
  111.      * @throws NonUniqueResultException
  112.      */
  113.     #[Route(path'/menu'name'menu_page')]
  114.     public function menuContent(): Response
  115.     {
  116.         $user $this->userService->getRepository()->find($this->getConnectedUser()->getId());
  117.         $type $this->userService->getTypeUser($user);
  118.         $diffusion $this->masterlistelgService->
  119.         getRepository()->getOneByListeCode('CMS''DIFFUSIONS'$type);
  120.         $menu $this->menuService->getRepository()->findOneBy(["diffusion" => $diffusion]);
  121.         $liste $menu->getMenuPages()->toArray();
  122.         usort($liste, function ($a$b) {
  123.             return $a->getOrdre() <=> $b->getOrdre();
  124.         });
  125.         $vars['menuPages'] = $liste;
  126.         $vars['user'] = $user;
  127.         $vars['type'] = $type;
  128.         return $this->render('community/noyau/menu/menu.html.twig'$vars);
  129.     }
  130.     public function staticSection(Section $section): Response
  131.     {
  132.         $user $this->userService->getRepository()->find($this->getConnectedUser()->getId());
  133.         $type $this->userService->getTypeUser($user);
  134.         $content $section->getContent();
  135.         if ($type == "stagiaire" || $type == "candidat") {
  136.             $dossier $user->getDossierActif();
  137.             $data = ['dossier' => $dossier'societe' => $dossier->getSociete()];
  138.             $content $this->modelDocumentService->generateSection($section$data);
  139.         }
  140.         return $this->render("community/community_pages/static/section.html.twig", [
  141.             "content" => $content,
  142.             "section" => $section,
  143.         ]);
  144.     }
  145.     /**
  146.      * @throws SyntaxError
  147.      * @throws RuntimeError
  148.      * @throws LoaderError
  149.      */
  150.     public function documentSignierSection(array $modeles): Response
  151.     {
  152.         $user $this->userService->getRepository()->find($this->getConnectedUser()->getId());
  153.         $content "";
  154.         $firstTemplate reset($modeles);
  155.         if ($firstTemplate !== false) {
  156.             if (method_exists($user'getDossierActif') && $user->getDossierActif()) {
  157.                 $dossier $user->getDossierActif();
  158.                 $data = ["dossier" => $dossier"parcours" => $dossier->getParcours(), "personne" => $user
  159.                     'societe' => $firstTemplate->getSociete()];
  160.             } else {
  161.                 $data = ["formateur" => $user"personne" => $user'societe' => $firstTemplate->getSociete()];
  162.             }
  163.             $generatecontent $this->modelDocumentService->generate($firstTemplate$data);
  164.             
  165.         }
  166.         return $this->render("community/noyau/documents_a_signer/section.html.twig", [
  167.             'content' => $generatecontent['content'],
  168.             "vueData" => ["content" => $generatecontent['content']],
  169.             'template' => $firstTemplate,
  170.             'user' => $user
  171.         ]);
  172.     }
  173.     #[Route(path'/{id}/signer-document/{template}'name'signer_document'methods: ['POST'])]
  174.     public function signerDocument(User $userTemplate $templateRequest $request): Response
  175.     {
  176.         $signatureFile $request->files->get('signature');
  177.         if (!$signatureFile) {
  178.             return $this->json(["error" => true"message" => "No signature file provided"], 400);
  179.         }
  180.         $type $this->userService->getTypeUser($user);
  181.         $typeSignature $this->masterlistelgService->
  182.         getRepository()->getOneByListeCode('DOSSIER''DOCUMENT'"signature");
  183.         try {
  184.             $uploadedDocument $this->fileUploader->upload($signatureFileDirectoriesEnum::SIGNATURE);
  185.             $document = new Document();
  186.             $data=['dossier' =>$user->getDossierActif(), 'societe' => $template->getSociete(),'personne' => $user];
  187.             $document->setDocument($uploadedDocument)
  188.                 ->setTypeDocument($typeSignature)
  189.                 ->setTemplate($template);
  190.             if (method_exists($user'getDossierActif') && $user->getDossierActif()) {
  191.                 $document->setDossier($user->getDossierActif());
  192.                 $user->getDossierActif()->addDocument($document);
  193.             }
  194.             $user->addDocument($document);
  195.             $this->userService->persist($document);
  196.             $this->userService->flush();
  197.             $redirectUrl $this->generateUrl("community_view_page", ["pathPage" => "espace-" $type]);
  198.             return $this->json(["success" => true"redirectUrl" => $redirectUrl]);
  199.         } catch (\Exception $e) {
  200.             return $this->json(["error" => true"message" => $e->getMessage()], 500);
  201.         }
  202.     }
  203. }