src/Controller/Client/ClientWidgetController.php line 95

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Client;
  3. use App\Entity\Actuv2Journal;
  4. use App\Entity\Page;
  5. use App\Entity\SeoPage;
  6. use App\Entity\SeoPageClient;
  7. use App\Entity\Actualiters;
  8. use App\Entity\Actualitecabinet;
  9. use App\Entity\Actuv2Bienetre;
  10. use App\Entity\Announcement;
  11. use App\Entity\ApplyRequest;
  12. use App\Entity\ContactParticipationPlaceExpert;
  13. use App\Entity\PodcastEpisode;
  14. use App\Entity\PodcastHost;
  15. use App\Entity\TypeSeoPage;
  16. use App\Entity\WebsiteNews;
  17. use App\Form\AnnouncementApplyType;
  18. use App\Repository\AccountingFirmRepository;
  19. use App\Repository\Actuv2HelpRepository;
  20. use App\Repository\Actuv2JournalRepository;
  21. use App\Repository\EbookRepository;
  22. use App\Repository\ActualitersRepository;
  23. use App\Repository\ActualitecabinetRepository;
  24. use App\Repository\Actuv2BienetreRepository;
  25. use App\Repository\Actuv2TransformationdigitaleRepository;
  26. use App\Services\QueriesV2Manager;
  27. use App\Repository\UsefulLinkRepository;
  28. use App\Repository\WebsiteNewsRepository;
  29. use App\Repository\AnnouncementRepository;
  30. use App\Repository\PodcastEpisodeRepository;
  31. use App\Repository\SurveyRepository;
  32. use App\Repository\EventRepository;
  33. use App\Repository\SatisfactionClientSurveyRepository;
  34. use App\Services\SimulateurManager;
  35. use App\Services\WebSite;
  36. use App\Services\WidgetMailing;
  37. use DateTimeImmutable;
  38. use Doctrine\ORM\EntityManagerInterface;
  39. use GuzzleHttp\Client;
  40. use Symfony\Component\HttpFoundation\JsonResponse;
  41. use Symfony\Component\HttpFoundation\Request;
  42. use Symfony\Component\HttpFoundation\Response;
  43. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  44. use Symfony\Component\Routing\Annotation\Route;
  45. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  46. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  47. use Symfony\Component\Filesystem\Filesystem;
  48. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  49. use Symfony\Component\HttpFoundation\RedirectResponse;
  50. use Symfony\Component\Mime\Email;
  51. /**
  52.  * Class ClientWidgetController
  53.  * @package App\Controller\Client
  54.  */
  55. class ClientWidgetController extends AbstractClientController
  56. {
  57.     #[Route(path'/actualite-du-mois.php'name'widget_old')]
  58.     #[Route(path'/preview/{host}/actualite-du-mois.php'name'previewwidget_old')]
  59.     public function widgetOld(Request $requeststring $prefix null): Response
  60.     {
  61.         if ($redirect $this->redirectRouteV2($request$prefix)) {
  62.             return $this->redirect($redirect);
  63.         }
  64.         $url $this->generateUrl('client_widget_news_index');
  65.         return $this->redirect($prefix $url);
  66.     }
  67.     #[Route(path'/actualite-du-mois'name'client_widget_news_index')]
  68.     #[Route(path'/preview/{host}/actualite-du-mois'name'previewclient_widget_news_index')]
  69.     public function widgetNewsIndex(Request $requeststring $prefix null): Response
  70.     {
  71.         if ($redirect $this->redirectRouteV2($request$prefix)) {
  72.             return $this->redirect($redirect);
  73.         }
  74.         if ($this->accountingFirm->isActuv2OnlyPodcast()) {
  75.             return $this->redirectToRoute("client_widget_podcast_detail");
  76.         }
  77.         $entityManager $this->getDoctrine()->getManager();
  78.         $seopageclient = new SeoPageClient();
  79.         $parameters $this->accountingFirm->getParameters();
  80.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 12]);
  81.         if ($seopage) {
  82.             $seopage->setTitle("L'actualité du mois | Actualité " $this->accountingFirm->getName());
  83.             $seopage->setDescription("Retrouvez toute l'actualité de votre cabinet " $this->accountingFirm->getName());
  84.         }
  85.         return $this->render('widget_actualite/index.html.twig', ['seopage' => $seopage]);
  86.     }
  87.     #[Route(path'/widget-actu/{token}'name'widget_actu')]
  88.     #[Route(path'/preview/{host}/widget-actu/{token}'name'previewwidget_actu')]
  89.     public function widgetHome(Request $requestQueriesV2Manager $qmAccountingFirmRepository $repositorystring $token)
  90.     {
  91.         $theHost str_replace('www.'''$request->getHost());
  92.         $host $request->get('host') ?: $theHost;
  93.         //$host = 'cabinet-za.de';
  94.         $accountingFirm $repository->findOneBy(['actuv2Token' => $token]);
  95.         if (!$accountingFirm || $accountingFirm->getHost() !== $host) {
  96.             throw new NotFoundHttpException();
  97.         }
  98.         $date $request->query->get('date'false);
  99.         $this->templateBase '/';
  100.         $sondage $qm->getSondage($date);
  101.         $quizrh $qm->getQuizRh($date);
  102.         $quizrhVote $qm->getQuizRhVote($date);
  103.         $seopage = new SeoPageClient();
  104.         $seopage->setTitle("L'actualité du mois | Actualité " $accountingFirm->getName());
  105.         $seopage->setDescription("Retrouvez toute l'actualité de votre cabinet " $accountingFirm->getName());
  106.         return $this->render('widget_actu_juridique_v2/home.html.twig', [
  107.             'seopage' => $seopage,
  108.             'actus' => $qm->getActualites($date),
  109.             'transformationDigitale' => $qm->getTransformationDigitale($date),
  110.             'infographie' => $qm->getInfographie($date),
  111.             'chiffreDuMois' => $qm->getChiffreDuMois($date),
  112.             'citation' => $qm->getCitation($date),
  113.             'bienEtre' => $qm->getBienEtre($date),
  114.             'podcast' => $qm->getPodcast($date),
  115.             'podcasts' => $qm->getPodcasts($date),
  116.             'sondage' => [
  117.                 'details' => $sondage,
  118.                 'results' => $sondage $qm->getSondageResult($sondage['id']) : null,
  119.             ],
  120.             'nextEvent' => $qm->getNextEvent(),
  121.             'previousPerdiods' => $qm->getPreviousPeriods(),
  122.             'quizrh' => $quizrh,
  123.             'quizrhVote' => $quizrhVote,
  124.         ]);
  125.     }
  126.     #[Route(path'/widget-dates'name'widget_dates')]
  127.     #[Route(path'/preview/{host}/widget-dates'name'previewwidget_dates')]
  128.     public function dates(QueriesV2Manager $qm)
  129.     {
  130.         $tabData $qm->getDates();
  131.         $tabDates = [];
  132.         foreach ($tabData as $lignes) {
  133.             foreach ($lignes as $ligne) {
  134.                 $key array_search($ligne['date'], array_column($tabDates'date'));
  135.                 if ($key === false) { // cas date jamais ajoutée
  136.                     $tabDates[] = ['date' => $ligne['date'], 'lien' => 'calendrier-fiscal.php?id=' $ligne['id']];
  137.                 } else { // cas date déjà ajoutée, donc plusieurs articles à la même date
  138.                     $tabDates[$key] = ['date' => $ligne['date'], 'lien' => 'actualites-calendrier-fiscal.php?date=' $ligne['date']];
  139.                 }
  140.             }
  141.         }
  142.         return $this->json($tabDates);
  143.     }
  144.     #[Route(path'/widget-footer/{token}'name'widget_footer')]
  145.     #[Route(path'/preview/{host}/widget-footer/{token}'name'previewwidget_footer')]
  146.     public function footer(Request $requestAccountingFirmRepository $repositoryQueriesV2Manager $qmWebSite $sitestring $token): Response
  147.     {
  148.         $theHost str_replace('www.'''$request->getHost());
  149.         $host $request->get('host') ?: $theHost;
  150.         // $host = 'cabinet-za.de';
  151.         $accountingFirm $repository->findOneBy(['actuv2Token' => $token]);
  152.         if (!$accountingFirm || $accountingFirm->getHost() !== $host) {
  153.             throw new NotFoundHttpException();
  154.         }
  155.         $this->templateBase '/';
  156.         return $this->render('widget_actu_juridique_v2/widget-footer.html.twig', [
  157.             'footer' => $qm->getFooterData(),
  158.             'serverActuUrl' => $site->getServerActuUrl()
  159.         ]);
  160.     }
  161.     #[Route(path'/actualite-du-mois/mois-{month}'name'client_widget_news_index_past')]
  162.     #[Route(path'/preview/{host}/actualite-du-mois/mois-{month}'name'previewclient_widget_news_index_past')]
  163.     public function widgetNewsIndexPast(Request $request): Response
  164.     {
  165.         $entityManager $this->getDoctrine()->getManager();
  166.         $seopageclient = new SeoPageClient();
  167.         $parameters $this->accountingFirm->getParameters();
  168.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 33]);
  169.         $month $request->get('month');
  170.         if ($seopage) {
  171.             $seopage->setTitle("L'actualité du mois - mois " $month " | Actualité " $this->accountingFirm->getName());
  172.             $seopage->setDescription("Retrouvez l'actualité de votre cabinet " $this->accountingFirm->getName() . " pour le mois " $month);
  173.         }
  174.         return $this->render('widget_actualite/index.html.twig', [
  175.             'month' => $month,
  176.             'seopage' => $seopage
  177.         ]);
  178.     }
  179.     #[Route(path'/actualite-du-mois/actucabinet/{id}-{slug}'name'client_widget_news_cabinet_show')]
  180.     #[Route(path'/preview/{host}/actualite-du-mois/actucabinet/{id}-{slug}'name'previewclient_widget_news_cabinet_show')]
  181.     public function widgetNewsCabinetShow(Request $requestQueriesV2Manager $qm): Response
  182.     {
  183.         $entityManager $this->getDoctrine()->getManager();
  184.         $seopageclient = new SeoPageClient();
  185.         $parameters $this->accountingFirm->getParameters();
  186.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 16]);
  187.         $id $request->get('id');
  188.         $data $qm->getActualiteCabinetDetails($id);
  189.         if ($seopage) {
  190.             $title = ($data != null) ? $data['titre'] : "Actualité";
  191.             $seopage->setTitle($title " | Actualité cabinet " $this->accountingFirm->getName());
  192.             if ($data != null) {
  193.                 $seopage->setDescription(substr(strip_tags($data['descriptifTexte']), 0160));
  194.             } else {
  195.                 $seopage->setDescription("Retrouvez l'actualité de votre cabinet " $this->accountingFirm->getName());
  196.             }
  197.         }
  198.         return $this->render('widget_actualite/actu_cabinet.html.twig', [
  199.             'id' => $id,
  200.             'seopage' => $seopage
  201.         ]);
  202.     }
  203.     #[Route(path'/actualite-du-mois/fiscal/liste/{date}'name'client_widget_news_fisc_list_show')]
  204.     #[Route(path'/preview/{host}/actualite-du-mois/fiscal/liste/{date}'name'previewclient_widget_news_fisc_list_show')]
  205.     public function widgetNewsFiscListShow(Request $request): Response
  206.     {
  207.         $entityManager $this->getDoctrine()->getManager();
  208.         $seopageclient = new SeoPageClient();
  209.         $parameters $this->accountingFirm->getParameters();
  210.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 14]);
  211.         $date $request->get('date');
  212.         if ($seopage) {
  213.             $seopage->setTitle("Actualité fiscale - liste " $date " | Actualité fiscale " $this->accountingFirm->getName());
  214.             $seopage->setDescription("Consultez les actualités fiscales de votre cabinet " $this->accountingFirm->getName() . " pour la date du " $date);
  215.         }
  216.         return $this->render('widget_actualite/actu_fiscal_list.html.twig', [
  217.             'date' => $date,
  218.             'seopage' => $seopage
  219.         ]);
  220.     }
  221.     #[Route(path'/actualite-du-mois/fiscal/{id}'name'client_widget_news_fisc_show')]
  222.     #[Route(path'/preview/{host}/actualite-du-mois/fiscal/{id}'name'previewclient_widget_news_fisc_show')]
  223.     public function widgetNewsFiscShow(Request $requestQueriesV2Manager $qm): Response
  224.     {
  225.         $entityManager $this->getDoctrine()->getManager();
  226.         $seopageclient = new SeoPageClient();
  227.         $parameters $this->accountingFirm->getParameters();
  228.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 15]);
  229.         $id $request->get('id');
  230.         $data $qm->getCalendrierDetails($id);
  231.         if ($seopage) {
  232.             $title = ($data != null) ? $data->getTitre() : "Calendrier fiscal";
  233.             $seopage->setTitle($title " | Actualité fiscale " $this->accountingFirm->getName());
  234.             if ($data != null) {
  235.                 $seopage->setDescription(substr(strip_tags($data->getDescriptiftexte()), 0160));
  236.             } else {
  237.                 $seopage->setDescription("Retrouvez le calendrier fiscal de votre cabinet " $this->accountingFirm->getName());
  238.             }
  239.         }
  240.         return $this->render('widget_actualite/actu_fiscal_article.html.twig', [
  241.             'id' => $id,
  242.             'seopage' => $seopage
  243.         ]);
  244.     }
  245.     #[Route(path'/actualite-du-mois/juridique/{id}-{slug}'name'client_widget_news_juri_show')]
  246.     #[Route(path'/preview/{host}/actualite-du-mois/juridique/{id}-{slug}'name'previewclient_widget_news_juri_show')]
  247.     public function widgetNewsJuriShow(Request $requestQueriesV2Manager $qmstring $prefix null): Response
  248.     {
  249.         $entityManager $this->getDoctrine()->getManager();
  250.         $seopageclient = new SeoPageClient();
  251.         $parameters $this->accountingFirm->getParameters();
  252.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 16]);
  253.         $id $request->get('id');
  254.         $data $qm->getActualitesDetails($id);
  255.         if ($seopage) {
  256.             $title = ($data != null) ? $data['titre'] : "Actualité juridique";
  257.             $seopage->setTitle($title " | Actualité juridique " $this->accountingFirm->getName());
  258.             if ($data != null) {
  259.                 $seopage->setDescription(substr(strip_tags($data['descriptifTexte']), 0160));
  260.             } else {
  261.                 $seopage->setDescription("Retrouvez l'actualité juridique de votre cabinet " $this->accountingFirm->getName());
  262.             }
  263.         }
  264.         $histo null;
  265.         $histo $qm->getHistoActualites();
  266.         return $this->render('widget_actualite/actu_juridique.html.twig', [
  267.             'id' => $id,
  268.             'seopage' => $seopage,
  269.             'histo' => $histo,
  270.         ]);
  271.     }
  272.     #[Route(path'/actualite-du-mois/bien-etre'name'client_widget_bien_etre_noid')]
  273.     #[Route(path'/actualite-du-mois/bien-etre/{id}-{slug}'name'client_widget_bien_etre_show')]
  274.     #[Route(path'/preview/{host}/actualite-du-mois/bien-etre/{id}-{slug}'name'previewclient_widget_bien_etre_show')]
  275.     public function widgetNewsBienEtreShow(Request $requestQueriesV2Manager $qmActuv2BienetreRepository $actuv2BienetreRepository): Response
  276.     {
  277.         $entityManager $this->getDoctrine()->getManager();
  278.         $seopageclient = new SeoPageClient();
  279.         $parameters $this->accountingFirm->getParameters();
  280.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 13]);
  281.         $id $request->get('id');
  282.         if (isset($id)) {
  283.             $data $qm->getBienEtreDetails($id);
  284.         } else {
  285.             $bienEtre $qm->getBienEtre();
  286.             $data $actuv2BienetreRepository->findOneBy(['id' => $bienEtre['id']]);
  287.             $id $data $data->getId() : null;
  288.         }
  289.         if ($seopage) {
  290.             $title = ($data != null) ? $data->getTitre() : "Bien-être";
  291.             $seopage->setTitle($title " | Bien-être " $this->accountingFirm->getName());
  292.             if ($data != null) {
  293.                 $seopage->setDescription(substr(strip_tags($data->getDescriptiftexte()), 0160));
  294.             } else {
  295.                 $seopage->setDescription("Découvrez nos conseils bien-être avec votre cabinet " $this->accountingFirm->getName());
  296.             }
  297.         }
  298.         $histo null;
  299.         $histo $qm->getHistoBienEtre();
  300.         return $this->render('widget_actualite/actu_bien_etre.html.twig', [
  301.             'id' => $id,
  302.             'seopage' => $seopage,
  303.             'histo' => $histo
  304.         ]);
  305.     }
  306.     #[Route(path'/actualite-du-mois/participation-place-a-l-expert'name'client_widget_participation_pal')]
  307.     #[Route(path'/preview/{host}/actualite-du-mois/participation-place-a-l-expert'name'previewclient_widget_participation_pal')]
  308.     public function widgetParticipationPal(Request $requestQueriesV2Manager $qm): Response
  309.     {
  310.         $footer $qm->getFooterData();
  311.         $seopage = new SeoPageClient();
  312.         $seopage->setTitle("Participation place à l'expert | Place à l'expert " $this->accountingFirm->getName());
  313.         $seopage->setDescription("Participez à l'émission place à l'expert avec votre cabinet " $this->accountingFirm->getName());
  314.         return $this->render('widget_actualite/actu_participation_pal.html.twig', [
  315.             'seopage' => $seopage,
  316.             'footer' => $footer,
  317.             'interne' => true
  318.         ]);
  319.     }
  320.     #[Route('/actualite-du-mois/participation-place-a-l-expert/sendParticipation'name'client_widget_actu_send_form')]
  321.     #[Route(path'/preview/{host}/actualite-du-mois/participation-place-a-l-expert/sendParticipation'name'previewclient_widget_actu_send_form')]
  322.     public function sendParticipation(Request $requestEntityManagerInterface $emAccountingFirmRepository $accountingFirmRepositoryWidgetMailing $mailing)
  323.     {
  324.         $email $request->get('email');
  325.         $tel $request->get('tel');
  326.         $firstname $request->get('firstname');
  327.         $linkedin $request->get('linkedin');
  328.         $expertise $request->get('expertise');
  329.         $idCabinet $request->get('cabinet');
  330.         $cabinet $accountingFirmRepository->findById($idCabinet);
  331.         $bannedEmails = [
  332.             'pazapz@mailbox.in.ua',
  333.             // ajoute d'autres emails ici si besoin
  334.         ];
  335.         if (in_array(strtolower($email), $bannedEmails)) {
  336.             // On fait croire que tout s’est bien passé
  337.             return new JsonResponse('success');
  338.         }
  339.         if (!empty($email) && !empty($firstname) && !empty($tel) && !empty($cabinet) && !empty($linkedin) && !empty($expertise)) {
  340.             $participationContact = new ContactParticipationPlaceExpert;
  341.             $participationContact->setEmail($email);
  342.             $participationContact->setPhone($tel);
  343.             $participationContact->setFirstname($firstname);
  344.             $participationContact->setLinkLinkedin($linkedin);
  345.             $participationContact->setExpertise($expertise);
  346.             $participationContact->setRgpd(true);
  347.             $participationContact->setAccountingFirm($cabinet);
  348.             $participationContact->setCreatedAt(new DateTimeImmutable());
  349.             $em->persist($participationContact);
  350.             $em->flush();
  351.             //send mail
  352.             $mailing->sendParticipationPalToAgenceExpert($cabinet, [ //Envoie à lagence.expert
  353.                 'name' => $firstname,
  354.                 'email' => $email,
  355.                 'tel' => $tel,
  356.                 'linkedin' => $linkedin,
  357.                 'expertise' => $expertise,
  358.             ]);
  359.             $mailing->sendParticipationPalToClient($cabinet, [ //Envoie au client
  360.                 'name' => $firstname,
  361.                 'email' => $email,
  362.             ]);
  363.             return new JsonResponse('success');
  364.         }
  365.         return new JsonResponse('error');
  366.     }
  367.     #[Route(path'/actualite-du-mois/podcast/{id}'defaults: ['id' => null], name'client_widget_podcast_detail')]
  368.     #[Route(path'/preview/{host}/actualite-du-mois/podcast/{id}'defaults: ['id' => null], name'previewclient_widget_podcast_detail')]
  369.     public function widgetActuPodcastDetail(Request $requestPodcastEpisodeRepository $podcastEpisodeRepositoryQueriesV2Manager $qm)
  370.     {
  371.         $footer $qm->getFooterData();
  372.         $seopage = new SeoPageClient();
  373.         $seopage->setTitle("Podcast place à l'expert | Podcast " $this->accountingFirm->getName());
  374.         $seopage->setDescription("Écoutez les podcasts de votre cabinet " $this->accountingFirm->getName());
  375.         $id $request->get('id');
  376.         return $this->render('widget_actualite/actu_podcast.html.twig', [
  377.             'seopage' => $seopage,
  378.             'footer' => $footer,
  379.             'podcast_id' =>  $id
  380.         ]);
  381.     }
  382.     #[Route(path'/actualite-du-mois/infographie-rse'name'client_widget_infographie_rse_detail_noid')]
  383.     #[Route(path'/actualite-du-mois/infographie-rse/{id}'name'client_widget_infographie_rse_detail')]
  384.     #[Route(path'/preview/{host}/actualite-du-mois/infographie-rse/{id}'name'previewclient_widget_infographie_rse_detail')]
  385.     public function widgetActuInfographieRseDetail(Request $requestQueriesV2Manager $qm)
  386.     {
  387.         $footer $qm->getFooterData();
  388.         if (!$request->get('id')) {
  389.             $latestRSE $qm->getInfographie();
  390.             if ($latestRSE['id']) {
  391.                 return $this->redirectToRoute('client_widget_infographie_rse_detail', ['id' => $latestRSE['id']]);
  392.             } else {
  393.                 return $this->redirectToRoute('client_widget_news_index');
  394.             }
  395.         }
  396.         $seopage = new SeoPageClient();
  397.         $seopage->setTitle("Infographie RSE du mois | Infographie RSE " $this->accountingFirm->getName());
  398.         $seopage->setDescription("Découvrez l'infographie RSE du mois de votre cabinet " $this->accountingFirm->getName());
  399.         return $this->render('widget_actualite/actu_infographie_rse.html.twig', [
  400.             'seopage' => $seopage,
  401.             'footer' => $footer,
  402.             'infographie_rse_id' =>  $request->get('id')
  403.         ]);
  404.     }
  405.     #[Route(path'/actualite-du-mois/transformation-digitale'name'client_widget_transformation_digitale_noid')]
  406.     #[Route(path'/actualite-du-mois/transformation-digitale/{id}-{slug}'name'client_widget_transformation_digitale_show')]
  407.     #[Route(path'/preview/{host}/actualite-du-mois/transformation-digitale/{id}-{slug}'name'previewclient_widget_transformation_digitale_show')]
  408.     public function widgetNewsTransformationDigitaleShow(Request $requestQueriesV2Manager $qmActuv2TransformationdigitaleRepository $actuv2TransformationdigitaleRepository): Response
  409.     {
  410.         $entityManager $this->getDoctrine()->getManager();
  411.         $seopageclient = new SeoPageClient();
  412.         $parameters $this->accountingFirm->getParameters();
  413.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 17]);
  414.         $id $request->get('id');
  415.         if (isset($id)) {
  416.             $data $qm->getTransformationDigitaleDetails($id);
  417.         } else {
  418.             $Transformationdigitale $qm->getTransformationDigitale();
  419.             $data $actuv2TransformationdigitaleRepository->findOneBy(['id' => $Transformationdigitale['id']]);
  420.             $id $data $data->getId() : null;
  421.         }
  422.         if ($seopage) {
  423.             $title = ($data != null) ? $data->getTitre() : "Transformation digitale";
  424.             $seopage->setTitle($title " | Transformation digitale " $this->accountingFirm->getName());
  425.             if ($data != null) {
  426.                 $seopage->setDescription(substr(strip_tags($data->getDescriptiftexte()), 0160));
  427.             } else {
  428.                 $seopage->setDescription("Suivez la transformation digitale avec votre cabinet " $this->accountingFirm->getName());
  429.             }
  430.         }
  431.         $histo null;
  432.         $histo $qm->getHistoTransfo();
  433.         return $this->render('widget_actualite/actu_transformation_digitale.html.twig', [
  434.             'id' => $id,
  435.             'seopage' => $seopage,
  436.             'histo' => $histo
  437.         ]);
  438.     }
  439.     #[Route(path'/actualite-du-mois/recherche'name'client_widget_recherche')]
  440.     #[Route(path'/preview/{host}/actualite-du-mois/recherche'name'previewclient_widget_recherche')]
  441.     public function widgetNewsSearch(Request $requeststring $prefix null): Response
  442.     {
  443.         $entityManager $this->getDoctrine()->getManager();
  444.         $seopageclient = new SeoPageClient();
  445.         $parameters $this->accountingFirm->getParameters();
  446.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 18]);
  447.         $query $request->get('q');
  448.         if ($seopage) {
  449.             $seopage->setTitle("Recherche : " $query " | Recherche " $this->accountingFirm->getName());
  450.             $seopage->setDescription("Résultats de recherche pour " $query " sur le site de votre cabinet " $this->accountingFirm->getName());
  451.         }
  452.         return $this->render('widget_actualite/recherche.html.twig', [
  453.             'query' => $query,
  454.             'seopage' => $seopage,
  455.             'prefix' => $prefix,
  456.         ]);
  457.     }
  458.     #[Route(path'/api/vote/'name'widget_vote'methods: ['POST'])]
  459.     #[Route(path'/preview/{host}/api/vote/'name'previewwidget_vote'methods: ['POST'])]
  460.     public function widgetVote(Request $requestQueriesV2Manager $qm): Response
  461.     {
  462.         $id $request->get('id');
  463.         $value $request->get('value');
  464.         $ip $request->getClientIp();
  465.         $req $qm->setSondageVote($id$value$ip);
  466.         return new Response($req);
  467.     }
  468.     #[Route(path'/voter'name'widget_voter'methods: ['GET'])]
  469.     #[Route(path'/preview/{host}/voter'name'previewwidget_voter'methods: ['GET'])]
  470.     public function widgetVoter(Request $requestQueriesV2Manager $qm)
  471.     {
  472.         $fromNewsletter $request->get('from'false) === 'newsletter';
  473.         try {
  474.             $id = (int)$request->get('id'true);
  475.             $reponse = (int)$request->get('reponse'true);
  476.             $retour $qm->setSondageVote($id$reponse$request->getClientIp());
  477.             $tabResult $qm->getSondageResult($id);
  478.         } catch (\Exception $e) {
  479.             if (!$fromNewsletter) {
  480.                 throw new \Exception($e->getMessage(), $e->getCode());
  481.             }
  482.             $retour false;
  483.         }
  484.         // Dans le cas où l'on vote par la newsletter, on affiche un message
  485.         if ($fromNewsletter) {
  486.             $this->templateBase '/';
  487.             return $this->render('widget_actu_juridique_v2/voter.html.twig', [
  488.                 'retour' => $retour
  489.             ]);
  490.         }
  491.         return $this->json([
  492.             "results" => $tabResult,
  493.             "erreur" => 0
  494.         ]);
  495.     }
  496.     #[Route(path'/simulateur'name'simulateur_index')]
  497.     #[Route(path'/preview/{host}/simulateur'name'previewsimulateur_index')]
  498.     #[IsGranted('WEBSITE_SIMULATEUR'statusCode404)]
  499.     public function SimulateurIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  500.     {
  501.         if ($redirect $this->redirectRouteV2($request$prefix)) {
  502.             return $this->redirect($redirect);
  503.         }
  504.         $entityManager $this->getDoctrine()->getManager();
  505.         $page $request->query->get('p');
  506.         $parameters $this->accountingFirm->getParameters();
  507.         $seopage $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 37]);
  508.         if ($seopage) {
  509.             $seopage->setTitle("Simulateurs | Simulateur " $this->accountingFirm->getName());
  510.             $seopage->setDescription("Utilisez nos simulateurs pour vos calculs financiers avec votre cabinet " $this->accountingFirm->getName());
  511.         }
  512.         // if ($page) {
  513.         //     $type = $entityManager->getRepository(TypeSeoPage::class)->findOneBy(['urlParameter' => $page]);
  514.         //     $currentSeopage = $type ? $entityManager->getRepository(SeoPage::class)->findOneBy(['type' => $type]) : null;
  515.         //     $seopageType = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => $currentSeopage->getId()]);
  516.         //     if ($seopageType) {
  517.         //         $seopage = $simulateurManager->metadataByPage($this->accountingFirm, $seopageType, $page);
  518.         //     }
  519.         // }
  520.         return $this->render('simulateur/index.html.twig', ['seopage' => $seopage]);
  521.     }
  522.     #[Route(path'/appelle-ton-expert-comptable'name'call_your_ec_index')]
  523.     #[Route(path'/preview/{host}/appelle-ton-expert-comptable'name'preview_call_your_ec_index')]
  524.     public function callYourEcIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  525.     {
  526.         $seopage = new SeoPageClient();
  527.         $seopage->setTitle("Appelle ton expert-comptable | Appelle ton expert-comptable " $this->accountingFirm->getName());
  528.         $seopage->setDescription("Prenez rendez-vous avec votre expert-comptable " $this->accountingFirm->getName());
  529.         return $this->render('widgets/call_your_ec/index.html.twig', ['seopage' => $seopage'cabinet' => $this->accountingFirm]);
  530.     }
  531.     #[Route(path'/ce'name'ce_index')]
  532.     #[Route(path'/preview/{host}/ce'name'preview_ce_index')]
  533.     public function ceIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  534.     {
  535.         $seopage = new SeoPageClient();
  536.         $seopage->setTitle("Comité d'Entreprise | CE " $this->accountingFirm->getName());
  537.         $seopage->setDescription("Informations sur le Comité d'Entreprise par votre cabinet " $this->accountingFirm->getName());
  538.         return $this->render('widgets/ce/index.html.twig', ['seopage' => $seopage]);
  539.     }
  540.     #[Route(path'/cir'name'cir_index')]
  541.     #[Route(path'/preview/{host}/cir'name'preview_cir_index')]
  542.     public function cirIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  543.     {
  544.         $seopage = new SeoPageClient();
  545.         $seopage->setTitle("Crédit d'Impôt Recherche | CIR " $this->accountingFirm->getName());
  546.         $seopage->setDescription("Informations sur le Crédit d'Impôt Recherche par votre cabinet " $this->accountingFirm->getName());
  547.         return $this->render('widgets/cir/index.html.twig', ['seopage' => $seopage]);
  548.     }
  549.     #[Route(path'/customer_satisfaction'name'customer_satisfaction_index')]
  550.     #[Route(path'/preview/{host}/customer_satisfaction'name'preview_customer_satisfaction_index')]
  551.     public function customerSatisfactionIndex(Request $requestSimulateurManager $simulateurManagerSatisfactionClientSurveyRepository $satisfactionRepostring $prefix null): Response
  552.     {
  553.         $surveyTitle '';
  554.         $surveyId $request->query->get('surveyId');
  555.         if ($surveyId) {
  556.             $survey $satisfactionRepo->find((int) $surveyId);
  557.             if ($survey) {
  558.                 $surveyTitle $survey->getTitle();
  559.             }
  560.         }
  561.         $seopage = new SeoPageClient();
  562.         $title $surveyTitle "Enquête de satisfaction - " $surveyTitle " | " $this->accountingFirm->getName() : "Enquête de satisfaction | " $this->accountingFirm->getName();
  563.         $seopage->setTitle($title);
  564.         $seopage->setDescription("Donnez votre avis sur les services de votre cabinet " $this->accountingFirm->getName());
  565.         return $this->render('widgets/customer_satisfaction/index.html.twig', ['seopage' => $seopage]);
  566.     }
  567.     #[Route(path'/facture-electronique'name'electronic_invoice_index')]
  568.     #[Route(path'/preview/{host}/facture-electronique'name'preview_electronic_invoice_index')]
  569.     public function electronicInvoiceIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  570.     {
  571.         $seopage = new SeoPageClient();
  572.         $seopage->setTitle("Facture électronique | " $this->accountingFirm->getName());
  573.         $seopage->setDescription("Tout savoir sur la facture électronique avec votre cabinet " $this->accountingFirm->getName());
  574.         return $this->render('widgets/electronic_invoicing/index.html.twig', ['seopage' => $seopage]);
  575.     }
  576.     #[Route(path'/evenement'name'event_index')]
  577.     #[Route(path'/preview/{host}/evenement'name'preview_event_index')]
  578.     public function eventIndex(Request $requestSimulateurManager $simulateurManagerEventRepository $eventRepositorystring $prefix null): Response
  579.     {
  580.         $eventTitle '';
  581.         $slugEvent $request->query->get('slugEvent');
  582.         if ($slugEvent) {
  583.             $event $eventRepository->findOneBy(['slug' => $slugEvent'accountingFirm' => $this->accountingFirm]);
  584.             if ($event) {
  585.                 $eventTitle $event->getTitle();
  586.             }
  587.         }
  588.         $seopage = new SeoPageClient();
  589.         $title $eventTitle "Événements - " $eventTitle " | " $this->accountingFirm->getName() : "Événements | " $this->accountingFirm->getName();
  590.         $seopage->setTitle($title);
  591.         $seopage->setDescription("Découvrez les prochains événements organisés par votre cabinet " $this->accountingFirm->getName());
  592.         return $this->render('widgets/events/index.html.twig', ['seopage' => $seopage]);
  593.     }
  594.     #[Route(path'/aides-aux-entreprises'name'helpers_firms_index')]
  595.     #[Route(path'/preview/{host}/aides-aux-entreprises'name'preview_helpers_firms_index')]
  596.     public function helpersFirmsIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  597.     {
  598.         $seopage = new SeoPageClient();
  599.         $seopage->setTitle("Aides aux entreprises | " $this->accountingFirm->getName());
  600.         $seopage->setDescription("Trouvez les aides pour votre entreprise avec votre cabinet " $this->accountingFirm->getName());
  601.         return $this->render('widgets/helpers_firms/index.html.twig', ['seopage' => $seopage]);
  602.     }
  603.     #[Route(path'/tous-en-ligne'name'online_index')]
  604.     #[Route(path'/preview/{host}/tous-en-ligne'name'preview_online_index')]
  605.     public function onlineIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  606.     {
  607.         $seopage = new SeoPageClient();
  608.         $seopage->setTitle("Tous en ligne | " $this->accountingFirm->getName());
  609.         $seopage->setDescription("Découvrez nos services en ligne avec votre cabinet " $this->accountingFirm->getName());
  610.         return $this->render('widgets/online/index.html.twig', ['seopage' => $seopage]);
  611.     }
  612.     #[Route(path'/recommandation'name'recommendation_index')]
  613.     #[Route(path'/preview/{host}/recommandation'name'preview_recommendation_index')]
  614.     public function recommendationIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  615.     {
  616.         $seopage = new SeoPageClient();
  617.         $seopage->setTitle("Recommandation | " $this->accountingFirm->getName());
  618.         $seopage->setDescription("Recommandez votre cabinet " $this->accountingFirm->getName());
  619.         return $this->render('widgets/recommendation/index.html.twig', ['seopage' => $seopage]);
  620.     }
  621.     #[Route(path'/rgpd'name'rgpd_index')]
  622.     #[Route(path'/preview/{host}/rgpd'name'preview_rgpd_index')]
  623.     public function rgpdIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  624.     {
  625.         $seopage = new SeoPageClient();
  626.         $seopage->setTitle("RGPD | " $this->accountingFirm->getName());
  627.         $seopage->setDescription("Informations sur la protection de vos données par votre cabinet " $this->accountingFirm->getName());
  628.         return $this->render('widgets/rgpd/index.html.twig', ['seopage' => $seopage]);
  629.     }
  630.     #[Route(path'/parrainage'name'sponsorship_index')]
  631.     #[Route(path'/preview/{host}/parrainage'name'preview_sponsorship_index')]
  632.     public function sponsorshipIndex(Request $requestSimulateurManager $simulateurManagerstring $prefix null): Response
  633.     {
  634.         $seopage = new SeoPageClient();
  635.         $seopage->setTitle("Parrainage | " $this->accountingFirm->getName());
  636.         $seopage->setDescription("Parrainez un proche et profitez des avantages de votre cabinet " $this->accountingFirm->getName());
  637.         return $this->render('widgets/sponsorship/index.html.twig', ['seopage' => $seopage]);
  638.     }
  639.     #[Route(path'/sondage'name'survey_index')]
  640.     #[Route(path'/preview/{host}/sondage'name'preview_survey_index')]
  641.     public function surveyIndex(Request $requestSimulateurManager $simulateurManagerSurveyRepository $surveyRepositorystring $prefix null): Response
  642.     {
  643.         $surveyTitle '';
  644.         $surveyId $request->query->get('surveyId');
  645.         if ($surveyId) {
  646.             $survey $surveyRepository->find((int) $surveyId);
  647.             if ($survey) {
  648.                 $surveyTitle $survey->getTitle();
  649.             }
  650.         }
  651.         $seopage = new SeoPageClient();
  652.         $title $surveyTitle "Sondage - " $surveyTitle " | " $this->accountingFirm->getName() : "Sondage | " $this->accountingFirm->getName();
  653.         $seopage->setTitle($title);
  654.         $seopage->setDescription("Participez à nos sondages avec votre cabinet " $this->accountingFirm->getName());
  655.         return $this->render('widgets/survey/index.html.twig', ['seopage' => $seopage]);
  656.     }
  657.     #[Route(path'/check-simulateur'name'check_simulteur')]
  658.     #[Route(path'/preview/{host}/check-simulateur'name'previewcheck_simulteur')]
  659.     #[IsGranted('WEBSITE_SIMULATEUR'statusCode404)]
  660.     public function checkSimuateur(Request $requestAccountingFirmRepository $repositorystring $prefix null): JsonResponse
  661.     {
  662.         $token $request->query->get('token');
  663.         $theHost str_replace('www.'''$request->getHost());
  664.         $host $request->get('host') ?: $theHost;
  665.         // $host = 'cabinet-za.de';
  666.         if ($token) {
  667.             $accountingFirm $repository->findOneBy(['simulateurToken' => $token]);
  668.             $isAuthorized false;
  669.             if ($accountingFirm && in_array($host$accountingFirm->getListAuthorizedDomains())) {
  670.                 $isAuthorized true;
  671.             }
  672.             $url $isAuthorized $accountingFirm->getSimulateurWidgetUrl() : null;
  673.         } else {
  674.             $accountingFirm $repository->findOneBy(['host' => $host]);
  675.             $url $accountingFirm $prefix $this->generateUrl('widget_simulteur') : null;
  676.         }
  677.         return $this->json($url);
  678.     }
  679.     #[Route(path'/widget-simulateur'name'widget_simulteur'methods: ['GET''POST'])]
  680.     public function widgetSimulateur(Request $requestAccountingFirmRepository $repository)
  681.     {
  682.         $theHost str_replace('www.'''$request->getHost());
  683.         $host $request->get('host') ?: $theHost;
  684.         // $host = 'cabinet-za.de';
  685.         $accountingFirm $repository->findOneBy(['host' => $host]);
  686.         $this->templateBase '/';
  687.         if (!$accountingFirm || $accountingFirm->getHost() !== $host) {
  688.             throw new NotFoundHttpException();
  689.         }
  690.         return $this->render('widget_simulateur_v2/content.html.twig', [
  691.             'cabinet' => $accountingFirm,
  692.         ]);
  693.     }
  694.     #[Route(path'/voterrh'name'widget_voterrh'methods: ['GET'])]
  695.     #[Route(path'/preview/{host}/voterrh'name'previewwidget_voterrh'methods: ['GET'])]
  696.     public function widgetVoterrh(Request $requestQueriesV2Manager $qm)
  697.     {
  698.         $id $request->get('id');
  699.         $reponse $request->get('reponse');
  700.         $ip $request->getClientIp();
  701.         $req $qm->setQuizVote($id$reponse$ip);
  702.         return new Response($req);
  703.     }
  704.     #[Route(path'/actualite-du-mois/journal'name'client_widget_journal_noid')]
  705.     #[Route(path'/actualite-du-mois/journal/{id}'name'client_widget_journal_show')]
  706.     #[Route(path'/preview/{host}/actualite-du-mois/journal/{id}'name'previewclient_widget_journal_show')]
  707.     public function widgetNewsJournalShow(Request $requestQueriesV2Manager $qmActuv2JournalRepository $journalRepository): Response
  708.     {
  709.         $entityManager $this->getDoctrine()->getManager();
  710.         $parameters $this->accountingFirm->getParameters();
  711.         $id $request->get('id');
  712.         $seopage = new SeoPageClient();
  713.         $seopage->setTitle("Journal du mois | Journal " $this->accountingFirm->getName());
  714.         $seopage->setDescription("Consultez le journal du mois de votre cabinet " $this->accountingFirm->getName());
  715.         if (isset($id)) {
  716.             $data $qm->getJournalDetails($id);
  717.         } else {
  718.             $journalLast $qm->getJournal();
  719.             $id $journalLast['id'];
  720.         }
  721.         return $this->render('widget_actualite/actu_journal.html.twig', [
  722.             'id' => $id,
  723.             'seopage' => $seopage
  724.         ]);
  725.     }
  726.     #[Route(path'/actualite-du-mois/aide'name'client_widget_aide_noid')]
  727.     #[Route(path'/actualite-du-mois/aide/{id}'name'client_widget_aide_show')]
  728.     #[Route(path'/preview/{host}/actualite-du-mois/aide/{id}'name'previewclient_widget_aide_show')]
  729.     public function widgetNewsAideShow(Request $requestQueriesV2Manager $qmActuv2HelpRepository $helpRepository): Response
  730.     {
  731.         $entityManager $this->getDoctrine()->getManager();
  732.         $parameters $this->accountingFirm->getParameters();
  733.         $id $request->get('id');
  734.         $seopage = new SeoPageClient();
  735.         $seopage->setTitle("L'aide du mois | Aide " $this->accountingFirm->getName());
  736.         $seopage->setDescription("Découvrez les aides du mois avec votre cabinet " $this->accountingFirm->getName());
  737.         if (isset($id)) {
  738.             $data $qm->getHelpById($id);
  739.         } else {
  740.             $data $qm->getHelpWithId();
  741.             $id $data['id'];
  742.         }
  743.         return $this->render('widget_actualite/actu_help.html.twig', [
  744.             'id' => $id,
  745.             'seopage' => $seopage
  746.         ]);
  747.     }
  748.     #[Route(path'/actualite-du-mois/calendrier'name'client_widget_calendrier_show')]
  749.     #[Route(path'/preview/{host}/actualite-du-mois/calendrier'name'previewclient_widget_calendrier_show')]
  750.     public function widgetNewsCalendrierShow(Request $requestQueriesV2Manager $qmActuv2HelpRepository $helpRepository): Response
  751.     {
  752.         $entityManager $this->getDoctrine()->getManager();
  753.         $parameters $this->accountingFirm->getParameters();
  754.         $id $request->get('id');
  755.         $seopage = new SeoPageClient();
  756.         $seopage->setTitle("Le calendrier juridique | Calendrier " $this->accountingFirm->getName());
  757.         $seopage->setDescription("Consultez le calendrier juridique de votre cabinet " $this->accountingFirm->getName());
  758.         return $this->render('widget_actualite/actu_calendrier.html.twig', [
  759.             'seopage' => $seopage
  760.         ]);
  761.     }
  762. }