src/Controller/PortfolioController.php line 64

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ProfilUser;
  4. use App\Entity\TemplateTextEntBatimentFR;
  5. use App\Entity\TemplateTextEntBatimentProject1;
  6. use App\Entity\TemplateTextEntBatimentProject10;
  7. use App\Entity\TemplateTextEntBatimentProject11;
  8. use App\Entity\TemplateTextEntBatimentProject12;
  9. use App\Entity\TemplateTextEntBatimentProject2;
  10. use App\Entity\TemplateTextEntBatimentProject3;
  11. use App\Entity\TemplateTextEntBatimentProject4;
  12. use App\Entity\TemplateTextEntBatimentProject5;
  13. use App\Entity\TemplateTextEntBatimentProject6;
  14. use App\Entity\TemplateTextEntBatimentProject7;
  15. use App\Entity\TemplateTextEntBatimentProject8;
  16. use App\Entity\TemplateTextEntBatimentProject9;
  17. use App\Entity\TemplateTextEntBatimentService1;
  18. use App\Entity\TemplateTextEntBatimentService2;
  19. use App\Entity\TemplateTextEntBatimentService3;
  20. use App\Entity\TemplateTextEntBatimentService4;
  21. use App\Entity\TemplateTextEntBatimentService5;
  22. use App\Entity\TemplateTextEntBatimentService6;
  23. use App\Entity\User;
  24. use App\Form\ProfilUserType;
  25. use App\Repository\ProfilUserRepository;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. use Symfony\Contracts\HttpClient\HttpClientInterface;
  34. use Symfony\Component\HttpFoundation\JsonResponse;
  35. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  36. class PortfolioController extends AbstractController
  37. {
  38.     private HttpClientInterface $client;
  39.     private $cloudflareApiKey;
  40.     private $params;
  41.     private EntityManagerInterface $entityManager;
  42.     public function __construct(HttpClientInterface $clientEntityManagerInterface $entityManagerParameterBagInterface $params)
  43.     {
  44.         $this->client $client;
  45.         $this->entityManager $entityManager;
  46.         $this->params $params;
  47.         $this->cloudflareApiKey $params->get('cloudflare_api_key');
  48.     }
  49.     #[Route('/portfolio'name'app_portfolio' host'surmurthag.com')]
  50.     #[Route('/portfolio'name'app_portfolio_www'host'www.surmurthag.com')]
  51.     public function portfolio(): Response
  52.     {
  53.         return $this->render('portfolio/index.html.twig', [
  54.             'controller_name' => 'portfolioController',
  55.         ]);
  56.     }
  57.     #[Route('/portfolio/show/profilUser/'name'app_portfolio_show_profil'host'surmurthag.com')]
  58.     #[Route('/portfolio/show/profilUser/'name'app_portfolio_show_profil_www'host'www.surmurthag.com')]
  59.     public function profilUserShow(Request $requestEntityManagerInterface $entityManagerProfilUserRepository $profilUserRepository): Response {
  60.         // Récupérer l'utilisateur actuel (assurez-vous que la méthode `getUser` renvoie l'entité User)
  61.         /** @var \App\Entity\User $user */
  62.         $user $this->getUser();
  63.         // Récupérer le dernier profil utilisateur créé par l'utilisateur actuel
  64.         $profilUser $profilUserRepository->findOneBy(
  65.             ['userUuid' => $user->getUuid()],
  66.             ['id' => 'DESC'// Tri par l'identifiant en ordre décroissant
  67.         );
  68.         // Passer le formulaire à la vue
  69.         return $this->render('portfolio/templates/profilUserShow/index.html.twig', [
  70.             'profilUser' => $profilUser
  71.         ]);
  72.     }
  73.     #[Route('/portfolio/profilUser/'name'app_portfolio_profil' host'surmurthag.com')]
  74.     #[Route('/portfolio/profilUser/'name'app_portfolio_profil_www'host'www.surmurthag.com')]
  75.     public function profilUser(Request $requestEntityManagerInterface $entityManagerProfilUserRepository $profilUserRepository): Response
  76.     {
  77.         // Récupérer l'utilisateur actuel (assurez-vous que la méthode `getUser` renvoie l'entité User)
  78.         /** @var \App\Entity\User $user */
  79.         $user $this->getUser();
  80.         // Récupérer le dernier profil utilisateur créé par l'utilisateur actuel
  81.         $profilUser $profilUserRepository->findOneBy(
  82.             ['userUuid' => $user->getUuid()],
  83.             ['id' => 'DESC'// Tri par l'identifiant en ordre décroissant
  84.         );
  85. // Si aucun profil n'est trouvé (ce qui signifie que l'utilisateur n'a pas encore de profil), créez une nouvelle instance
  86.         if (!$profilUser) {
  87.             $profilUser = new ProfilUser();
  88.         }
  89.         $form $this->createForm(ProfilUserType::class, $profilUser);
  90.         $form->handleRequest($request);
  91.         if ($form->isSubmitted() && $form->isValid()) {
  92.             // Enregistrer les données en base de données
  93.             $entityManager->persist($profilUser);
  94.             $entityManager->flush();
  95.             // Ajoutez ici toute logique supplémentaire après l'enregistrement, comme une redirection ou un message flash
  96.             return $this->redirectToRoute('app_portfolio_profil'); // Rediriger vers une autre page
  97.         }
  98.         return $this->render('portfolio/templates/profilUser/index.html.twig', [
  99.             'controller_name' => 'portfolioController',
  100.             'form' => $form->createView(),
  101.             'profilUser' => $profilUser
  102.         ]);
  103.     }
  104.     #[Route('/post-response-IA'name'get_response_IA'host'surmurthag.com'methods: ['POST'])]
  105.     #[Route('/post-response-IA'name'get_response_IA_www'host'www.surmurthag.com'methods: ['POST'])]
  106.     public function getResponseIAFromWorker(Request $requestHttpClientInterface $client): Response {
  107.         // Authentification
  108.        /* $headersProfil = $request->headers->get('Authorization');
  109.         if (!$this->isAuthorized($headersProfil)) {
  110.             error_log("Authentification échouée");
  111.             return new Response('Unauthorized', Response::HTTP_UNAUTHORIZED);
  112.         }*/
  113.         $data json_decode($request->getContent(), true);
  114.         error_log("Données reçues: " print_r($datatrue));
  115.         if (isset($data['nextField']) && $data['nextField'] === 'endChat') {
  116.             // Affiche les données reçues dans les logs
  117.             error_log("Données reçues avant saveResponseToDatabase: " print_r($datatrue));
  118.             // Logique d'enregistrement
  119.             $this->saveResponseToDatabase($data);
  120.             return new JsonResponse(['message' => 'Profil enregistré avec succès.']);
  121.         }
  122.         // Envoi de la requête au Worker Cloudflare
  123.         try {
  124.             $responseFromWorker $client->request('POST''https://worker-fragrant-haze-22a6.surmurthag.workers.dev/', [
  125.                 'headers' => [
  126.                     'Authorization' => 'Bearer ' $this->cloudflareApiKey,
  127.                 ],
  128.                 'body' => $request->getContent()
  129.             ]);
  130.             error_log("Réponse reçue du Worker: " $responseFromWorker->getContent());
  131.             if ($responseFromWorker->getStatusCode() !== 200) {
  132.                 error_log("Erreur reçue du Worker: " $responseFromWorker->getStatusCode());
  133.                 return new Response('Error from Worker'$responseFromWorker->getStatusCode());
  134.             }
  135.             $responseText $responseFromWorker->getContent();
  136.             return new Response($responseTextResponse::HTTP_OK, ['Content-Type' => 'application/json']);
  137.         } catch (\Exception $e) {
  138.             error_log("Exception capturée: " $e->getMessage());
  139.             return new Response('Erreur inattendue'Response::HTTP_INTERNAL_SERVER_ERROR);
  140.         }
  141.     }
  142.     #[Route('/post-response-profil'name'get_response'host'surmurthag.com'methods: ['POST'])]
  143.     #[Route('/post-response-profil'name'get_response_www'host'www.surmurthag.com'methods: ['POST'])]
  144.     public function getResponseFromWorker(Request $requestHttpClientInterface $client): Response {
  145.         // Authentification
  146.       /*  $headersProfil = $request->headers->get('Authorization');
  147.         if (!$this->isAuthorized($headersProfil)) {
  148.             return new Response('Unauthorized', Response::HTTP_UNAUTHORIZED);
  149.         }*/
  150.         $data json_decode($request->getContent(), true);
  151.         error_log("Données reçues: " print_r($datatrue));
  152.         if (isset($data['nextField']) && $data['nextField'] === 'endChat') {
  153.             // Affiche les données reçues dans les logs
  154.             error_log("Données reçues avant saveResponseToDatabase: " print_r($datatrue));
  155.             // Logique d'enregistrement
  156.             $this->saveResponseToDatabase($data);
  157.             return new JsonResponse(['message' => 'Profil enregistré avec succès.']);
  158.         }
  159.         // Envoi de la requête au Worker Cloudflare
  160.         try {
  161.             $headers = [
  162.                 'Authorization' => 'Bearer ' $this->cloudflareApiKey,
  163.             ];
  164.             // Log des en-têtes pour le débogage
  165.             error_log("En-têtes envoyés à Cloudflare: " json_encode($headers));
  166.             $responseFromWorker $client->request('POST''https://worker-generat-profil.surmurthag.workers.dev/', [
  167.                 'headers' => $headers,
  168.                 'body' => $request->getContent()
  169.             ]);
  170.             if ($responseFromWorker->getStatusCode() !== 200) {
  171.                 return new Response('Error from Worker'$responseFromWorker->getStatusCode());
  172.             }
  173.             // Obtenez la réponse du Worker
  174.             $responseText $responseFromWorker->getContent();
  175.             // Retournez la réponse du Worker
  176.             return new Response($responseTextResponse::HTTP_OK, [
  177.                 'Content-Type' => 'application/json'
  178.             ]);
  179.         } catch (\Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface $e) {
  180.             error_log("Erreur de transport HTTP: " $e->getMessage());
  181.             return new Response('Erreur de transport HTTP'Response::HTTP_INTERNAL_SERVER_ERROR);
  182.         } catch (\Exception $e) {
  183.             error_log("Erreur inattendue: " $e->getMessage());
  184.             return new Response('Erreur inattendue'Response::HTTP_INTERNAL_SERVER_ERROR);
  185.         }
  186.     }
  187.     #[Route('/path-to-reset-endpoint'name'get_reset'host'surmurthag.com'methods: ['POST'])]
  188.     #[Route('/path-to-reset-endpoint'name'get_reset_www'host'www.surmurthag.com'methods: ['POST'])]
  189.     public function getResetEndpoint(Request $requestHttpClientInterface $client): Response {
  190.         // Authentification
  191.       /*  $headersReset = $request->headers->get('Authorization');
  192.         if (!$this->isAuthorized($headersReset)) {
  193.             return new Response('Unauthorized', Response::HTTP_UNAUTHORIZED);
  194.         }*/
  195.         $data json_decode($request->getContent(), true);
  196.         error_log("Données reçues: " print_r($datatrue));
  197.         // Envoi de la requête au Worker Cloudflare
  198.         try {
  199.             $responseFromWorker $client->request('POST''https://worker-generat-profil.surmurthag.workers.dev/', [
  200.                 'headers' => [
  201.                     'Authorization' => 'Bearer ' $this->cloudflareApiKey,
  202.                 ],
  203.                 'body' => $request->getContent()
  204.             ]);
  205.             if ($responseFromWorker->getStatusCode() !== 200) {
  206.                 return new Response('Error from Worker'$responseFromWorker->getStatusCode());
  207.             }
  208.             // Obtenez la réponse du Worker
  209.             $responseText $responseFromWorker->getContent();
  210.             // Retournez la réponse du Worker
  211.             return new Response($responseTextResponse::HTTP_OK, [
  212.                 'Content-Type' => 'application/json'
  213.             ]);
  214.         } catch (\Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface $e) {
  215.             return new Response('Erreur de transport HTTP'Response::HTTP_INTERNAL_SERVER_ERROR);
  216.         } catch (\Exception $e) {
  217.             return new Response('Erreur inattendue'Response::HTTP_INTERNAL_SERVER_ERROR);
  218.         }
  219.     }
  220.     #[Route('/path-to-save-data'name'save_data'host'surmurthag.com'methods: ['POST'])]
  221.     #[Route('/path-to-save-data'name'save_data_www'host'www.surmurthag.com'methods: ['POST'])]
  222.     public function handleSaveData(Request $request): JsonResponse {
  223.         $data json_decode($request->getContent(), true);
  224.         $this->saveResponseToDatabase($data);
  225.         return new JsonResponse(['message' => 'Profil enregistré avec succès.']);
  226.     }
  227.     private function saveResponseToDatabase(array $data): void {
  228.         error_log("Début de la fonction saveResponseToDatabase");
  229.         // Obtenez l'utilisateur actuel
  230.         /** @var User $user */
  231.         $user $this->getUser();
  232.         // Assurez-vous que l'utilisateur est chargé, valide, et est une instance de la classe User
  233.         if (!$user || !$user instanceof User) {
  234.             throw new \LogicException('Utilisateur non trouvé ou non connecté.');
  235.         }
  236.         $entityManager $this->entityManager;
  237.         $profilUser = new ProfilUser(); // Créez une nouvelle instance de ProfilUser
  238.         // Associez l'utilisateur au profil
  239.         $user $this->getUser(); // Assurez-vous que cette méthode renvoie une entité User valide
  240.         $profilUser->setUserUuid($user->getUuid());
  241.         // Définir d'autres propriétés...
  242.         $entityManager->persist($profilUser);
  243.         $entityManager->flush();
  244.         error_log("Traitement des champs de réponse");
  245.         // Assigne chaque champ de la réponse à l'entité
  246.         foreach ($data as $key => $value) {
  247.             error_log("Traitement du champ: " $key " avec la valeur: " $value);
  248.             switch ($key) {
  249.                 case 'firstname':
  250.                     $profilUser->setName($value);
  251.                     break;
  252.                 case 'lastname':
  253.                     $profilUser->setSurname($value);
  254.                     break;
  255.                 case 'email':
  256.                     $profilUser->setMail($value);
  257.                     break;
  258.                 case 'phoneNumber':
  259.                     $profilUser->setPhoneNumber($value);
  260.                     break;
  261.                 case 'country':
  262.                     $profilUser->setCountry($value);
  263.                     break;
  264.                 case 'city':
  265.                     $profilUser->setCity($value);
  266.                     break;
  267.                 case 'street':
  268.                     $profilUser->setStreet($value);
  269.                     break;
  270.                 case 'zipCode':
  271.                     $profilUser->setZipCode($value);
  272.                     break;
  273.                 case 'age':
  274.                     $profilUser->setAge($value);
  275.                     break;
  276.                 case 'profession':
  277.                     $profilUser->setProfession($value);
  278.                     break;
  279.                 case 'sex':
  280.                     $profilUser->setSex($value);
  281.                     break;
  282.                 // Ajoutez d'autres champs si nécessaire
  283.             }
  284.         }
  285.         error_log("Persistance de l'entité ProfilUser");
  286.         $entityManager->persist($profilUser);
  287.         $entityManager->flush();
  288.         error_log("Entité ProfilUser enregistrée avec succès");
  289.     }
  290.     #[Route('/portfolio/solarSystem/'name'app_portfolio_solarSystem' host'surmurthag.com')]
  291.     #[Route('/portfolio/SolarSystem/'name'app_portfolio_solarSystem_www'host'www.surmurthag.com')]
  292.     public function solarSystem(): Response
  293.     {
  294.         return $this->render('portfolio/templates/solarSystem/index.html.twig', [
  295.             'controller_name' => 'portfolioController',
  296.         ]);
  297.     }
  298.     #[Route('/portfolio/download/'name'app_download'host'surmurthag.com')]
  299.     #[Route('/portfolio/download/'name'app_download_www'host'www.surmurthag.com')]
  300.     public function download(): Response
  301.     {
  302.         $file $this->getParameter('kernel.project_dir') . '/' $_SERVER('DOWNLOAD_DIRECTORY') . '/stable.pdf';
  303.         // Assurez-vous que le fichier existe et que le chemin est correct
  304.         if (!file_exists($file)) {
  305.             return $this->redirectToRoute('app_portfolio');
  306.         }
  307.         return $this->file($file);
  308.     }
  309.     /*#[Route('/portfolio/verify-download-code', name: 'verify_download_code', methods: ['POST'])]*/
  310.     #[Route('/portfolio/verify-download-code'name'verify_download_code_domain'host'surmurthag.com'methods: ['POST'])]
  311.     #[Route('/portfolio/verify-download-code'name'verify_download_code_www'host'www.surmurthag.com'methods: ['POST'])]
  312.     public function verifyDownloadCode(Request $request): Response
  313.     {
  314.         $userCode $request->request->get('download-verification_code');
  315.         if ($userCode === '1984') {
  316.             // Code correct, rediriger vers la route de téléchargement
  317.             return $this->redirectToRoute('app_download');
  318.         } else {
  319.             // Code incorrect, afficher le message flash sur la même page
  320.             $this->addFlash('error''Le code de vérification est incorrect !.');
  321.             // Retourner la même vue avec les données nécessaires
  322.             return $this->render('portfolio/index.html.twig', [
  323.                 'controller_name' => 'portfolioController',
  324.             ]);
  325.         }
  326.     }
  327.     #[Route('/portfolio/verify-register-code'name'verify_register_code'host'surmurthag.com'methods: ['POST'])]
  328.     #[Route('/portfolio/verify-register-code'name'verify_register_code_www'host'www.surmurthag.com'methods: ['POST'])]
  329.     public function verifyRegisterCode(Request $request): Response
  330.     {
  331.         $registerCode $request->request->get('register-verification_code');
  332.         if ($registerCode === '1984') {
  333.             // Code correct, rediriger vers la route de téléchargement
  334.             return $this->redirectToRoute('app_register');
  335.         } else {
  336.             // Code incorrect, afficher le message flash sur la même page
  337.             $this->addFlash('error''Le code de vérification est incorrect.');
  338.             // Retourner la même vue avec les données nécessaires
  339.             return $this->render('security/login.html.twig', [
  340.                 'controller_name' => 'portfolioController',
  341.             ]);
  342.         }
  343.     }
  344.     #[Route('/portfolio/EntBatiment/{lang}'name'app_portfolio_templates_entreprise_du_batiment'host'surmurthag.com')]
  345.     #[Route('/portfolio/EntBatiment/{lang}'name'app_portfolio_templates_entreprise_du_batiment_www'host'www.surmurthag.com')]
  346.     public function indexEntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  347.     {
  348.         $languageToIdMap = [
  349.             'fr' => 1,
  350.             'en' => 387,
  351.             'es' => 3// Espagnol
  352.             'de' => 4// Allemand
  353.             // autres langues...
  354.         ];
  355.         // Langues disponibles
  356.         $availableLanguages array_keys($languageToIdMap);
  357.         // Déterminer la langue
  358.         if ($lang === null) {
  359.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  360.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  361.         }
  362.         $id $languageToIdMap[$lang] ?? 387// Par défaut à anglais si la langue n'est pas trouvée
  363.         // Récupérer l'entité avec id = 1
  364.         $entity $entityManager->getRepository(TemplateTextEntBatimentFR::class)->find($id);
  365.         return $this->render('portfolio/templates/entBatiment/EntBatiment.html.twig', [
  366.             'controller_name' => 'portfolioTemplatesController',
  367.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  368.             'baseUrl' => '/portfolio/EntBatiment/',
  369.             'entity' => $entity,
  370.             'currentLang' => $lang,
  371.         ]);
  372.     }
  373.     #[Route('/portfolio/EntBatiment/project/1/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_1'host'surmurthag.com')]
  374.     #[Route('/portfolio/EntBatiment/project/1/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_1_www'host'www.surmurthag.com')]
  375.     public function Project_1_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  376.     {
  377.         $languageToIdMap = [
  378.             'fr' => 1,
  379.             'en' => 22,
  380.             'es' => 3// Espagnol
  381.             'de' => 4// Allemand
  382.             // autres langues...
  383.         ];
  384.         // Langues disponibles
  385.         $availableLanguages array_keys($languageToIdMap);
  386.         // Déterminer la langue
  387.         if ($lang === null) {
  388.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  389.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  390.         }
  391.         $id $languageToIdMap[$lang] ?? 22// Par défaut à anglais si la langue n'est pas trouvée
  392.         // Récupérer l'entité avec id = 1
  393.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject1::class)->find($id);
  394.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-1.html.twig', [
  395.             'controller_name' => 'portfolioTemplatesController',
  396.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  397.             'baseUrl' => '/portfolio/templates/EntBatiment/project/1/',
  398.             'entity' => $entity,
  399.             'currentLang' => $lang,
  400.         ]);
  401.     }
  402.     #[Route('/portfolio/EntBatiment/project/2/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_2'host'surmurthag.com')]
  403.     #[Route('/portfolio/EntBatiment/project/2/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_2_www'host'www.surmurthag.com')]
  404.     public function Project_2_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  405.     {
  406.         $languageToIdMap = [
  407.             'fr' => 1,
  408.             'en' => 2,
  409.             'es' => 3// Espagnol
  410.             'de' => 4// Allemand
  411.             // autres langues...
  412.         ];
  413.         // Langues disponibles
  414.         $availableLanguages array_keys($languageToIdMap);
  415.         // Déterminer la langue
  416.         if ($lang === null) {
  417.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  418.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  419.         }
  420.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  421.         // Récupérer l'entité avec id = 1
  422.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject2::class)->find($id);
  423.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-2.html.twig', [
  424.             'controller_name' => 'portfolioTemplatesController',
  425.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  426.             'baseUrl' => '/portfolio/EntBatiment/project/2/',
  427.             'entity' => $entity,
  428.             'currentLang' => $lang,
  429.         ]);
  430.     }
  431.     #[Route('/portfolio/EntBatiment/project/3/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_3'host'surmurthag.com')]
  432.     #[Route('/portfolio/EntBatiment/project/3/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_3_www'host'www.surmurthag.com')]
  433.     public function Project_3_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  434.     {
  435.         $languageToIdMap = [
  436.             'fr' => 1,
  437.             'en' => 2,
  438.             'es' => 3// Espagnol
  439.             'de' => 4// Allemand
  440.             // autres langues...
  441.         ];
  442.         // Langues disponibles
  443.         $availableLanguages array_keys($languageToIdMap);
  444.         // Déterminer la langue
  445.         if ($lang === null) {
  446.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  447.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  448.         }
  449.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  450.         // Récupérer l'entité avec id = 1
  451.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject3::class)->find($id);
  452.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-3.html.twig', [
  453.             'controller_name' => 'portfolioTemplatesController',
  454.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  455.             'baseUrl' => '/portfolio/EntBatiment/project/3/',
  456.             'entity' => $entity,
  457.             'currentLang' => $lang,
  458.         ]);
  459.     }
  460.     #[Route('/portfolio/EntBatiment/project/4/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_4'host'surmurthag.com')]
  461.     #[Route('/portfolio/EntBatiment/project/4/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_4_www'host'www.surmurthag.com')]
  462.     public function Project_4_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  463.     {
  464.         $languageToIdMap = [
  465.             'fr' => 1,
  466.             'en' => 2,
  467.             'es' => 3// Espagnol
  468.             'de' => 4// Allemand
  469.             // autres langues...
  470.         ];
  471.         // Langues disponibles
  472.         $availableLanguages array_keys($languageToIdMap);
  473.         // Déterminer la langue
  474.         if ($lang === null) {
  475.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  476.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  477.         }
  478.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  479.         // Récupérer l'entité avec id = 1
  480.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject4::class)->find($id);
  481.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-4.html.twig', [
  482.             'controller_name' => 'portfolioTemplatesController',
  483.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  484.             'baseUrl' => '/portfolio/EntBatiment/project/4/',
  485.             'entity' => $entity,
  486.             'currentLang' => $lang,
  487.         ]);
  488.     }
  489.     #[Route('/portfolio/EntBatiment/project/5/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_5'host'surmurthag.com')]
  490.     #[Route('/portfolio/EntBatiment/project/5/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_5_www'host'www.surmurthag.com')]
  491.     public function Project_5_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  492.     {
  493.         $languageToIdMap = [
  494.             'fr' => 1,
  495.             'en' => 2,
  496.             'es' => 3// Espagnol
  497.             'de' => 4// Allemand
  498.             // autres langues...
  499.         ];
  500.         // Langues disponibles
  501.         $availableLanguages array_keys($languageToIdMap);
  502.         // Déterminer la langue
  503.         if ($lang === null) {
  504.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  505.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  506.         }
  507.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  508.         // Récupérer l'entité avec id = 1
  509.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject5::class)->find($id);
  510.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-5.html.twig', [
  511.             'controller_name' => 'portfolioTemplatesController',
  512.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  513.             'baseUrl' => '/portfoli/templates/EntBatiment/project/5/',
  514.             'entity' => $entity,
  515.             'currentLang' => $lang,
  516.         ]);
  517.     }
  518.     #[Route('/portfolio/EntBatiment/project/6/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_6'host'surmurthag.com')]
  519.     #[Route('/portfolio/EntBatiment/project/6/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_6_www'host'www.surmurthag.com')]
  520.     public function Project_6_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  521.     {
  522.         $languageToIdMap = [
  523.             'fr' => 1,
  524.             'en' => 2,
  525.             'es' => 3// Espagnol
  526.             'de' => 4// Allemand
  527.             // autres langues...
  528.         ];
  529.         // Langues disponibles
  530.         $availableLanguages array_keys($languageToIdMap);
  531.         // Déterminer la langue
  532.         if ($lang === null) {
  533.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  534.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  535.         }
  536.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  537.         // Récupérer l'entité avec id = 1
  538.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject6::class)->find($id);
  539.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-6.html.twig', [
  540.             'controller_name' => 'portfolioTemplatesController',
  541.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  542.             'baseUrl' => '/portfoli/templates/EntBatiment/project/6/',
  543.             'entity' => $entity,
  544.             'currentLang' => $lang,
  545.         ]);
  546.     }
  547.     #[Route('/portfolio/EntBatiment/project/7/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_7'host'surmurthag.com')]
  548.     #[Route('/portfolio/EntBatiment/project/7/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_7_www'host'www.surmurthag.com')]
  549.     public function Project_7_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  550.     {
  551.         $languageToIdMap = [
  552.             'fr' => 1,
  553.             'en' => 2,
  554.             'es' => 3// Espagnol
  555.             'de' => 4// Allemand
  556.             // autres langues...
  557.         ];
  558.         // Langues disponibles
  559.         $availableLanguages array_keys($languageToIdMap);
  560.         // Déterminer la langue
  561.         if ($lang === null) {
  562.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  563.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  564.         }
  565.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  566.         // Récupérer l'entité avec id = 1
  567.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject7::class)->find($id);
  568.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-7.html.twig', [
  569.             'controller_name' => 'portfolioTemplatesController',
  570.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  571.             'baseUrl' => '/portfolio/EntBatiment/project/7/',
  572.             'entity' => $entity,
  573.             'currentLang' => $lang,
  574.         ]);
  575.     }
  576.     #[Route('/portfolio/EntBatiment/project/8/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_8'host'surmurthag.com')]
  577.     #[Route('/portfolio/EntBatiment/project/8/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_8_www'host'www.surmurthag.com')]
  578.     public function Project_8_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  579.     {
  580.         $languageToIdMap = [
  581.             'fr' => 1,
  582.             'en' => 2,
  583.             'es' => 3// Espagnol
  584.             'de' => 4// Allemand
  585.             // autres langues...
  586.         ];
  587.         // Langues disponibles
  588.         $availableLanguages array_keys($languageToIdMap);
  589.         // Déterminer la langue
  590.         if ($lang === null) {
  591.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  592.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  593.         }
  594.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  595.         // Récupérer l'entité avec id = 1
  596.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject8::class)->find($id);
  597.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-8.html.twig', [
  598.             'controller_name' => 'portfolioTemplatesController',
  599.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  600.             'baseUrl' => '/portfolio/EntBatiment/project/8/',
  601.             'entity' => $entity,
  602.             'currentLang' => $lang,
  603.         ]);
  604.     }
  605.     #[Route('/portfolio/EntBatiment/project/9/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_9'host'surmurthag.com')]
  606.     #[Route('/portfolio/EntBatiment/project/9/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_9_www'host'www.surmurthag.com')]
  607.     public function Project_9_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  608.     {
  609.         $languageToIdMap = [
  610.             'fr' => 1,
  611.             'en' => 2,
  612.             'es' => 3// Espagnol
  613.             'de' => 4// Allemand
  614.             // autres langues...
  615.         ];
  616.         // Langues disponibles
  617.         $availableLanguages array_keys($languageToIdMap);
  618.         // Déterminer la langue
  619.         if ($lang === null) {
  620.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  621.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  622.         }
  623.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  624.         // Récupérer l'entité avec id = 1
  625.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject9::class)->find($id);
  626.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-9.html.twig', [
  627.             'controller_name' => 'portfolioTemplatesController',
  628.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  629.             'baseUrl' => '/portfoli/templates/EntBatiment/project/9/',
  630.             'entity' => $entity,
  631.             'currentLang' => $lang,
  632.         ]);
  633.     }
  634.     #[Route('/portfolio/EntBatiment/project/10/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_10'host'surmurthag.com')]
  635.     #[Route('/portfolio/EntBatiment/project/10/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_10_www'host'www.surmurthag.com')]
  636.     public function Project_10_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  637.     {
  638.         $languageToIdMap = [
  639.             'fr' => 1,
  640.             'en' => 2,
  641.             'es' => 3// Espagnol
  642.             'de' => 4// Allemand
  643.             // autres langues...
  644.         ];
  645.         // Langues disponibles
  646.         $availableLanguages array_keys($languageToIdMap);
  647.         // Déterminer la langue
  648.         if ($lang === null) {
  649.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  650.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  651.         }
  652.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  653.         // Récupérer l'entité avec id = 1
  654.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject10::class)->find($id);
  655.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-10.html.twig', [
  656.             'controller_name' => 'portfolioTemplatesController',
  657.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  658.             'baseUrl' => '/portfolio/EntBatiment/project/10/',
  659.             'entity' => $entity,
  660.             'currentLang' => $lang,
  661.         ]);
  662.     }
  663.     #[Route('/portfolio/EntBatiment/project/11/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_11'host'surmurthag.com')]
  664.     #[Route('/portfolio/EntBatiment/project/11/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_11_www'host'www.surmurthag.com')]
  665.     public function Project_11_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  666.     {
  667.         $languageToIdMap = [
  668.             'fr' => 1,
  669.             'en' => 2,
  670.             'es' => 3// Espagnol
  671.             'de' => 4// Allemand
  672.             // autres langues...
  673.         ];
  674.         // Langues disponibles
  675.         $availableLanguages array_keys($languageToIdMap);
  676.         // Déterminer la langue
  677.         if ($lang === null) {
  678.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  679.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  680.         }
  681.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  682.         // Récupérer l'entité avec id = 1
  683.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject11::class)->find($id);
  684.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-11.html.twig', [
  685.             'controller_name' => 'portfolioTemplatesController',
  686.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  687.             'baseUrl' => '/portfolio/EntBatiment/project/11/',
  688.             'entity' => $entity,
  689.             'currentLang' => $lang,
  690.         ]);
  691.     }
  692.     #[Route('/portfolio/EntBatiment/project/12/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_12'host'surmurthag.com')]
  693.     #[Route('/portfolio/EntBatiment/project/12/{lang}'name'app_portfolio_templates_entreprise_du_batiment_project_12_www'host'www.surmurthag.com')]
  694.     public function Project_12_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  695.     {
  696.         $languageToIdMap = [
  697.             'fr' => 1,
  698.             'en' => 2,
  699.             'es' => 3// Espagnol
  700.             'de' => 4// Allemand
  701.             // autres langues...
  702.         ];
  703.         // Langues disponibles
  704.         $availableLanguages array_keys($languageToIdMap);
  705.         // Déterminer la langue
  706.         if ($lang === null) {
  707.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  708.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  709.         }
  710.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  711.         // Récupérer l'entité avec id = 1
  712.         $entity $entityManager->getRepository(TemplateTextEntBatimentProject12::class)->find($id);
  713.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ProjectDetails-12.html.twig', [
  714.             'controller_name' => 'portfolioTemplatesController',
  715.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  716.             'baseUrl' => '/portfolio/EntBatiment/project/12/',
  717.             'entity' => $entity,
  718.             'currentLang' => $lang,
  719.         ]);
  720.     }
  721.     #[Route('/portfolio/EntBatiment/service/1/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_1'host'surmurthag.com')]
  722.     #[Route('/portfolio/EntBatiment/service/1/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_1_www'host'www.surmurthag.com')]
  723.     public function Service_1_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  724.     {
  725.         $languageToIdMap = [
  726.             'fr' => 1,
  727.             'en' => 2,
  728.             'es' => 3// Espagnol
  729.             'de' => 4// Allemand
  730.             // autres langues...
  731.         ];
  732.         // Langues disponibles
  733.         $availableLanguages array_keys($languageToIdMap);
  734.         // Déterminer la langue
  735.         if ($lang === null) {
  736.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  737.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  738.         }
  739.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  740.         // Récupérer l'entité avec id = 1
  741.         $entity $entityManager->getRepository(TemplateTextEntBatimentService1::class)->find($id);
  742.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ServiceDetails-1.html.twig', [
  743.             'controller_name' => 'portfolioTemplatesController',
  744.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  745.             'baseUrl' => '/portfolio/EntBatiment/service/1/',
  746.             'entity' => $entity,
  747.             'currentLang' => $lang,
  748.         ]);
  749.     }
  750.     #[Route('/portfolio/EntBatiment/service/2/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_2'host'surmurthag.com')]
  751.     #[Route('/portfolio/EntBatiment/service/2/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_2_www'host'www.surmurthag.com')]
  752.     public function Service_2_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  753.     {
  754.         $languageToIdMap = [
  755.             'fr' => 1,
  756.             'en' => 2,
  757.             'es' => 3// Espagnol
  758.             'de' => 4// Allemand
  759.             // autres langues...
  760.         ];
  761.         // Langues disponibles
  762.         $availableLanguages array_keys($languageToIdMap);
  763.         // Déterminer la langue
  764.         if ($lang === null) {
  765.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  766.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  767.         }
  768.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  769.         // Récupérer l'entité avec id = 1
  770.         $entity $entityManager->getRepository(TemplateTextEntBatimentService2::class)->find($id);
  771.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ServiceDetails-2.html.twig', [
  772.             'controller_name' => 'portfolioTemplatesController',
  773.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  774.             'baseUrl' => '/portfolio/EntBatiment/service/2/',
  775.             'entity' => $entity,
  776.             'currentLang' => $lang,
  777.         ]);
  778.     }
  779.     #[Route('/portfolio/EntBatiment/service/3/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_3'host'surmurthag.com')]
  780.     #[Route('/portfolio/EntBatiment/service/3/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_3_www'host'www.surmurthag.com')]
  781.     public function Service_3_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  782.     {
  783.         $languageToIdMap = [
  784.             'fr' => 1,
  785.             'en' => 2,
  786.             'es' => 3// Espagnol
  787.             'de' => 4// Allemand
  788.             // autres langues...
  789.         ];
  790.         // Langues disponibles
  791.         $availableLanguages array_keys($languageToIdMap);
  792.         // Déterminer la langue
  793.         if ($lang === null) {
  794.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  795.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  796.         }
  797.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  798.         // Récupérer l'entité avec id = 1
  799.         $entity $entityManager->getRepository(TemplateTextEntBatimentService3::class)->find($id);
  800.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ServiceDetails-3.html.twig', [
  801.             'controller_name' => 'portfolioTemplatesController',
  802.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  803.             'baseUrl' => '/portfolio/EntBatiment/service/3/',
  804.             'entity' => $entity,
  805.             'currentLang' => $lang,
  806.         ]);
  807.     }
  808.     #[Route('/portfolio/EntBatiment/service/4/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_4'host'surmurthag.com')]
  809.     #[Route('/portfolio/EntBatiment/service/4/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_4_www'host'www.surmurthag.com')]
  810.     public function Service_4_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  811.     {
  812.         $languageToIdMap = [
  813.             'fr' => 1,
  814.             'en' => 2,
  815.             'es' => 3// Espagnol
  816.             'de' => 4// Allemand
  817.             // autres langues...
  818.         ];
  819.         // Langues disponibles
  820.         $availableLanguages array_keys($languageToIdMap);
  821.         // Déterminer la langue
  822.         if ($lang === null) {
  823.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  824.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  825.         }
  826.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  827.         // Récupérer l'entité avec id = 1
  828.         $entity $entityManager->getRepository(TemplateTextEntBatimentService4::class)->find($id);
  829.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ServiceDetails-4.html.twig', [
  830.             'controller_name' => 'portfolioTemplatesController',
  831.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  832.             'baseUrl' => '/portfolio/EntBatiment/service/4/',
  833.             'entity' => $entity,
  834.             'currentLang' => $lang,
  835.         ]);
  836.     }
  837.     #[Route('/portfolio/EntBatiment/service/5/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_5'host'surmurthag.com')]
  838.     #[Route('/portfolio/EntBatiment/service/5/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_5_www'host'www.surmurthag.com')]
  839.     public function Service_5_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  840.     {
  841.         $languageToIdMap = [
  842.             'fr' => 1,
  843.             'en' => 2,
  844.             'es' => 3// Espagnol
  845.             'de' => 4// Allemand
  846.             // autres langues...
  847.         ];
  848.         // Langues disponibles
  849.         $availableLanguages array_keys($languageToIdMap);
  850.         // Déterminer la langue
  851.         if ($lang === null) {
  852.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  853.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  854.         }
  855.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  856.         // Récupérer l'entité avec id = 1
  857.         $entity $entityManager->getRepository(TemplateTextEntBatimentService5::class)->find($id);
  858.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ServiceDetails-5.html.twig', [
  859.             'controller_name' => 'portfolioTemplatesController',
  860.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  861.             'baseUrl' => '/portfolio/EntBatiment/service/5/',
  862.             'entity' => $entity,
  863.             'currentLang' => $lang,
  864.         ]);
  865.     }
  866.     #[Route('/portfolio/EntBatiment/service/6/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_6'host'surmurthag.com')]
  867.     #[Route('/portfolio/EntBatiment/service/6/{lang}'name'app_portfolio_templates_entreprise_du_batiment_service_6_www'host'www.surmurthag.com')]
  868.     public function Service_6_EntBatiment(EntityManagerInterface $entityManagerRequest $request$lang null): Response
  869.     {
  870.         $languageToIdMap = [
  871.             'fr' => 1,
  872.             'en' => 2,
  873.             'es' => 3// Espagnol
  874.             'de' => 4// Allemand
  875.             // autres langues...
  876.         ];
  877.         // Langues disponibles
  878.         $availableLanguages array_keys($languageToIdMap);
  879.         // Déterminer la langue
  880.         if ($lang === null) {
  881.             $preferredLang $request->getPreferredLanguage($availableLanguages);
  882.             $lang in_array($preferredLang$availableLanguages) ? $preferredLang 'en';
  883.         }
  884.         $id $languageToIdMap[$lang] ?? 2// Par défaut à anglais si la langue n'est pas trouvée
  885.         // Récupérer l'entité avec id = 1
  886.         $entity $entityManager->getRepository(TemplateTextEntBatimentService6::class)->find($id);
  887.         return $this->render('portfolio/templates/entBatiment/EntBatimentPages/ServiceDetails-6.html.twig', [
  888.             'controller_name' => 'portfolioTemplatesController',
  889.             'availableLanguages' => ['fr' => 'Français''en' => 'Anglais''es' => 'Espagnol''de' => 'Allemand'],
  890.             'baseUrl' => '/portfolio/EntBatiment/service/6/',
  891.             'entity' => $entity,
  892.             'currentLang' => $lang,
  893.         ]);
  894.     }
  895.     #[Route('/portfolio/episol/'name'Episol_portfolio'host'surmurthag.com')]
  896.     #[Route('/portfolio/episol/'name'Episol_portfolio_www'host'www.surmurthag.com')]
  897.     public function home(): Response
  898.     {
  899.         return $this->render('/portfolio/templates/episol/episol.html.twig', [
  900.             /*'content' => $content,*/
  901.         ]);
  902.     }
  903.     #[Route('/portfolio/uneTerreEnSoi'name'uneTerreEnSoi_portfolio'host'surmurthag.com')]
  904.     #[Route('/portfolio/uneTerreEnSoi'name'uneTerreEnSoi_portfolio_www'host'www.surmurthag.com')]
  905.     public function hello(): Response
  906.     {
  907.         return $this->render('portfolio/templates/uneTerreEnSoi/une-terre-en-soi.html.twig', [
  908.             /*'content' => $content,*/
  909.         ]);
  910.     }
  911.     #[Route('/portfolio/ecotherapie'name'Ecotherapie_portfolio'host'surmurthag.com')]
  912.     #[Route('/portfolio/ecotherapie'name'Ecotherapie_portfolio_www'host'www.surmurthag.com')]
  913.     public function ecotherapieportfolio(): Response
  914.     {
  915.         return $this->render('portfolio/templates/uneTerreEnSoi/ecotherapie.html.twig', [
  916.             /*'content' => $content,*/
  917.         ]);
  918.     }
  919.     #[Route('/portfolio/contact'name'Contact_portfolio'host'surmurthag.com')]
  920.     #[Route('/portfolio/contact'name'Contact_portfolio_www'host'www.surmurthag.com')]
  921.     public function contactportfolio(): Response
  922.     {
  923.         return $this->render('/portfolio/templates/uneTerreEnSoi/contact.html.twig', [
  924.             /*'content' => $content,*/
  925.         ]);
  926.     }
  927.     #[Route('/portfolio/ArtTherapie'name'ArtTherapie_portfolio'host'surmurthag.com')]
  928.     #[Route('/portfolio/ArtTherapie'name'ArtTherapie_portfolio_www'host'www.surmurthag.com')]
  929.     public function artTherapieportfolio(): Response
  930.     {
  931.         return $this->render('portfolio/templates/uneTerreEnSoi/artTherapie.html.twig', [
  932.             /*'content' => $content,*/
  933.         ]);
  934.     }
  935.     #[Route('/portfolio/quiSuisJe'name'QuiSuisJe_portfolio'host'surmurthag.com')]
  936.     #[Route('/portfolio/quiSuisJe'name'QuiSuisJe_portfolio_www'host'www.surmurthag.com')]
  937.     public function quiSuisJeportfolio(): Response
  938.     {
  939.         return $this->render('portfolio/templates/uneTerreEnSoi/quiSuisJe.html.twig', [
  940.             /*'content' => $content,*/
  941.         ]);
  942.     }
  943.     #[Route('/portfolio/AtelierEnLigne'name'AtelierEnLigne_portfolio'host'surmurthag.com')]
  944.     #[Route('/portfolio/AtelierEnLigne'name'AtelierEnLigne_portfolio_www'host'www.surmurthag.com')]
  945.     public function AtelierEnLingeportfolio(): Response
  946.     {
  947.         return $this->render('portfolio/templates/uneTerreEnSoi/AtelierEnLigne.html.twig', [
  948.             /*'content' => $content,*/
  949.         ]);
  950.     }
  951.     #[Route('/portfolio/agenda'name'Agenda_portfolio'host'surmurthag.com')]
  952.     #[Route('/portfolio/agenda'name'Agenda_portfolio_www'host'www.surmurthag.com')]
  953.     public function agendaportfolio(): Response
  954.     {
  955.         $events = [
  956.             [
  957.                 'titlecard' => 'Atelier d\'art-thérapie',
  958.                 'photo' => 'https://th.bing.com/th/id/R.bb002981d0c40c2399baa5b659bd38de?rik=uqdAuaDlg%2b7t8g&pid=ImgRaw&r=0',
  959.                 'title' => 'Saepissime igitur mihi de amicitia cogitanti maxime illud
  960.                         considerandum videri solet, utrum propter imbecillitatem
  961.                         atque inopiam desiderata sit amicitia, ut dandis
  962.                         recipiendisque meritis quod quisque minus per se ipse posset,
  963.                         id acciperet ab alio vicissimque redderet, an esset hoc quidem
  964.                         proprium amicitiae, sed antiquior et pulchrior et magis a
  965.                         natura ipsa profecta alia causa.',
  966.                 'description' => 'Découvrez les bienfaits de l\'art-thérapie dans cet atelier convivial.',
  967.                 'date' => 'du 2023-10-10 au 2323-10-20'
  968.             ],
  969.             [
  970.                 'titlecard' => 'Session d\'éco-thérapie en forêt',
  971.                 'photo' => 'https://th.bing.com/th/id/R.21e1adde7219a4850b77800e0d42c834?rik=CKpeLnLTPvTb0w&pid=ImgRaw&r=0',
  972.                 'title' => 'Saepissime igitur mihi de amicitia cogitanti maxime illud
  973.                         considerandum videri solet, utrum propter imbecillitatem
  974.                         atque inopiam desiderata sit amicitia, ut dandis
  975.                         recipiendisque meritis quod quisque minus per se ipse posset,
  976.                         id acciperet ab alio vicissimque redderet, an esset hoc quidem
  977.                         proprium amicitiae, sed antiquior et pulchrior et magis a
  978.                         natura ipsa profecta alia causa.',
  979.                 'description' => 'Reconnectez-vous à la nature lors de cette session d\'éco-thérapie en plein air.',
  980.                 'date' => 'du 2023-11-10 au 2023-11-11'
  981.             ],
  982.             [
  983.                 'titlecard' => 'Méditation guidée en milieu naturel',
  984.                 'photo' => 'https://th.bing.com/th/id/R.633586d26d1d8dbf2d758d1ef03a85ae?rik=T3P%2bP07lbfGiFg&pid=ImgRaw&r=0',
  985.                 'title' => 'Saepissime igitur mihi de amicitia cogitanti maxime illud
  986.                         considerandum videri solet, utrum propter imbecillitatem
  987.                         atque inopiam desiderata sit amicitia, ut dandis
  988.                         recipiendisque meritis quod quisque minus per se ipse posset,
  989.                         id acciperet ab alio vicissimque redderet, an esset hoc quidem
  990.                         proprium amicitiae, sed antiquior et pulchrior et magis a
  991.                         natura ipsa profecta alia causa.',
  992.                 'description' => 'Vivez une expérience de méditation en plein cœur de la nature .',
  993.                 'date' => 'du 2023-11-15 au 2023-11-19'
  994.             ],
  995.             [
  996.                 'titlecard' => 'Initiation à la peinture thérapeutique',
  997.                 'photo' => 'https://th.bing.com/th/id/R.44b6cc5078763700af8fb6876c937d94?rik=%2bQwWfmXCzESZwg&pid=ImgRaw&r=0',
  998.                 'title' => 'Saepissime igitur mihi de amicitia cogitanti maxime illud
  999.                         considerandum videri solet, utrum propter imbecillitatem
  1000.                         atque inopiam desiderata sit amicitia, ut dandis
  1001.                         recipiendisque meritis quod quisque minus per se ipse posset,
  1002.                         id acciperet ab alio vicissimque redderet, an esset hoc quidem
  1003.                         proprium amicitiae, sed antiquior et pulchrior et magis a
  1004.                         natura ipsa profecta alia causa.',
  1005.                 'description' => 'Apprenez les bases de la peinture thérapeutique et libérez votre créativité.',
  1006.                 'date' => 'du 2023-10-15 au 2023-10-25'
  1007.             ],
  1008.         ];
  1009.         return $this->render('portfolio/templates/uneTerreEnSoi/agenda.html.twig', [
  1010.             'events' => $events
  1011.         ]);
  1012.     }
  1013. }