<?php
namespace App\Controller\Client;
use App\Entity\Actuv2Journal;
use App\Entity\Page;
use App\Entity\SeoPage;
use App\Entity\SeoPageClient;
use App\Entity\Actualiters;
use App\Entity\Actualitecabinet;
use App\Entity\Actuv2Bienetre;
use App\Entity\Announcement;
use App\Entity\ApplyRequest;
use App\Entity\ContactParticipationPlaceExpert;
use App\Entity\PodcastEpisode;
use App\Entity\PodcastHost;
use App\Entity\TypeSeoPage;
use App\Entity\WebsiteNews;
use App\Form\AnnouncementApplyType;
use App\Repository\AccountingFirmRepository;
use App\Repository\Actuv2HelpRepository;
use App\Repository\Actuv2JournalRepository;
use App\Repository\EbookRepository;
use App\Repository\ActualitersRepository;
use App\Repository\ActualitecabinetRepository;
use App\Repository\Actuv2BienetreRepository;
use App\Repository\Actuv2TransformationdigitaleRepository;
use App\Services\QueriesV2Manager;
use App\Repository\UsefulLinkRepository;
use App\Repository\WebsiteNewsRepository;
use App\Repository\AnnouncementRepository;
use App\Repository\PodcastEpisodeRepository;
use App\Repository\SurveyRepository;
use App\Repository\EventRepository;
use App\Repository\SatisfactionClientSurveyRepository;
use App\Services\SimulateurManager;
use App\Services\WebSite;
use App\Services\WidgetMailing;
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use GuzzleHttp\Client;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Mime\Email;
/**
* Class ClientWidgetController
* @package App\Controller\Client
*/
class ClientWidgetController extends AbstractClientController
{
#[Route(path: '/actualite-du-mois.php', name: 'widget_old')]
#[Route(path: '/preview/{host}/actualite-du-mois.php', name: 'previewwidget_old')]
public function widgetOld(Request $request, string $prefix = null): Response
{
if ($redirect = $this->redirectRouteV2($request, $prefix)) {
return $this->redirect($redirect);
}
$url = $this->generateUrl('client_widget_news_index');
return $this->redirect($prefix . $url);
}
#[Route(path: '/actualite-du-mois', name: 'client_widget_news_index')]
#[Route(path: '/preview/{host}/actualite-du-mois', name: 'previewclient_widget_news_index')]
public function widgetNewsIndex(Request $request, string $prefix = null): Response
{
if ($redirect = $this->redirectRouteV2($request, $prefix)) {
return $this->redirect($redirect);
}
if ($this->accountingFirm->isActuv2OnlyPodcast()) {
return $this->redirectToRoute("client_widget_podcast_detail");
}
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 12]);
if ($seopage) {
$seopage->setTitle("L'actualité du mois | Actualité " . $this->accountingFirm->getName());
$seopage->setDescription("Retrouvez toute l'actualité de votre cabinet " . $this->accountingFirm->getName());
}
return $this->render('widget_actualite/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/widget-actu/{token}', name: 'widget_actu')]
#[Route(path: '/preview/{host}/widget-actu/{token}', name: 'previewwidget_actu')]
public function widgetHome(Request $request, QueriesV2Manager $qm, AccountingFirmRepository $repository, string $token)
{
$theHost = str_replace('www.', '', $request->getHost());
$host = $request->get('host') ?: $theHost;
//$host = 'cabinet-za.de';
$accountingFirm = $repository->findOneBy(['actuv2Token' => $token]);
if (!$accountingFirm || $accountingFirm->getHost() !== $host) {
throw new NotFoundHttpException();
}
$date = $request->query->get('date', false);
$this->templateBase = '/';
$sondage = $qm->getSondage($date);
$quizrh = $qm->getQuizRh($date);
$quizrhVote = $qm->getQuizRhVote($date);
$seopage = new SeoPageClient();
$seopage->setTitle("L'actualité du mois | Actualité " . $accountingFirm->getName());
$seopage->setDescription("Retrouvez toute l'actualité de votre cabinet " . $accountingFirm->getName());
return $this->render('widget_actu_juridique_v2/home.html.twig', [
'seopage' => $seopage,
'actus' => $qm->getActualites($date),
'transformationDigitale' => $qm->getTransformationDigitale($date),
'infographie' => $qm->getInfographie($date),
'chiffreDuMois' => $qm->getChiffreDuMois($date),
'citation' => $qm->getCitation($date),
'bienEtre' => $qm->getBienEtre($date),
'podcast' => $qm->getPodcast($date),
'podcasts' => $qm->getPodcasts($date),
'sondage' => [
'details' => $sondage,
'results' => $sondage ? $qm->getSondageResult($sondage['id']) : null,
],
'nextEvent' => $qm->getNextEvent(),
'previousPerdiods' => $qm->getPreviousPeriods(),
'quizrh' => $quizrh,
'quizrhVote' => $quizrhVote,
]);
}
#[Route(path: '/widget-dates', name: 'widget_dates')]
#[Route(path: '/preview/{host}/widget-dates', name: 'previewwidget_dates')]
public function dates(QueriesV2Manager $qm)
{
$tabData = $qm->getDates();
$tabDates = [];
foreach ($tabData as $lignes) {
foreach ($lignes as $ligne) {
$key = array_search($ligne['date'], array_column($tabDates, 'date'));
if ($key === false) { // cas date jamais ajoutée
$tabDates[] = ['date' => $ligne['date'], 'lien' => 'calendrier-fiscal.php?id=' . $ligne['id']];
} else { // cas date déjà ajoutée, donc plusieurs articles à la même date
$tabDates[$key] = ['date' => $ligne['date'], 'lien' => 'actualites-calendrier-fiscal.php?date=' . $ligne['date']];
}
}
}
return $this->json($tabDates);
}
#[Route(path: '/widget-footer/{token}', name: 'widget_footer')]
#[Route(path: '/preview/{host}/widget-footer/{token}', name: 'previewwidget_footer')]
public function footer(Request $request, AccountingFirmRepository $repository, QueriesV2Manager $qm, WebSite $site, string $token): Response
{
$theHost = str_replace('www.', '', $request->getHost());
$host = $request->get('host') ?: $theHost;
// $host = 'cabinet-za.de';
$accountingFirm = $repository->findOneBy(['actuv2Token' => $token]);
if (!$accountingFirm || $accountingFirm->getHost() !== $host) {
throw new NotFoundHttpException();
}
$this->templateBase = '/';
return $this->render('widget_actu_juridique_v2/widget-footer.html.twig', [
'footer' => $qm->getFooterData(),
'serverActuUrl' => $site->getServerActuUrl()
]);
}
#[Route(path: '/actualite-du-mois/mois-{month}', name: 'client_widget_news_index_past')]
#[Route(path: '/preview/{host}/actualite-du-mois/mois-{month}', name: 'previewclient_widget_news_index_past')]
public function widgetNewsIndexPast(Request $request): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 33]);
$month = $request->get('month');
if ($seopage) {
$seopage->setTitle("L'actualité du mois - mois " . $month . " | Actualité " . $this->accountingFirm->getName());
$seopage->setDescription("Retrouvez l'actualité de votre cabinet " . $this->accountingFirm->getName() . " pour le mois " . $month);
}
return $this->render('widget_actualite/index.html.twig', [
'month' => $month,
'seopage' => $seopage
]);
}
#[Route(path: '/actualite-du-mois/actucabinet/{id}-{slug}', name: 'client_widget_news_cabinet_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/actucabinet/{id}-{slug}', name: 'previewclient_widget_news_cabinet_show')]
public function widgetNewsCabinetShow(Request $request, QueriesV2Manager $qm): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 16]);
$id = $request->get('id');
$data = $qm->getActualiteCabinetDetails($id);
if ($seopage) {
$title = ($data != null) ? $data['titre'] : "Actualité";
$seopage->setTitle($title . " | Actualité cabinet " . $this->accountingFirm->getName());
if ($data != null) {
$seopage->setDescription(substr(strip_tags($data['descriptifTexte']), 0, 160));
} else {
$seopage->setDescription("Retrouvez l'actualité de votre cabinet " . $this->accountingFirm->getName());
}
}
return $this->render('widget_actualite/actu_cabinet.html.twig', [
'id' => $id,
'seopage' => $seopage
]);
}
#[Route(path: '/actualite-du-mois/fiscal/liste/{date}', name: 'client_widget_news_fisc_list_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/fiscal/liste/{date}', name: 'previewclient_widget_news_fisc_list_show')]
public function widgetNewsFiscListShow(Request $request): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 14]);
$date = $request->get('date');
if ($seopage) {
$seopage->setTitle("Actualité fiscale - liste " . $date . " | Actualité fiscale " . $this->accountingFirm->getName());
$seopage->setDescription("Consultez les actualités fiscales de votre cabinet " . $this->accountingFirm->getName() . " pour la date du " . $date);
}
return $this->render('widget_actualite/actu_fiscal_list.html.twig', [
'date' => $date,
'seopage' => $seopage
]);
}
#[Route(path: '/actualite-du-mois/fiscal/{id}', name: 'client_widget_news_fisc_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/fiscal/{id}', name: 'previewclient_widget_news_fisc_show')]
public function widgetNewsFiscShow(Request $request, QueriesV2Manager $qm): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 15]);
$id = $request->get('id');
$data = $qm->getCalendrierDetails($id);
if ($seopage) {
$title = ($data != null) ? $data->getTitre() : "Calendrier fiscal";
$seopage->setTitle($title . " | Actualité fiscale " . $this->accountingFirm->getName());
if ($data != null) {
$seopage->setDescription(substr(strip_tags($data->getDescriptiftexte()), 0, 160));
} else {
$seopage->setDescription("Retrouvez le calendrier fiscal de votre cabinet " . $this->accountingFirm->getName());
}
}
return $this->render('widget_actualite/actu_fiscal_article.html.twig', [
'id' => $id,
'seopage' => $seopage
]);
}
#[Route(path: '/actualite-du-mois/juridique/{id}-{slug}', name: 'client_widget_news_juri_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/juridique/{id}-{slug}', name: 'previewclient_widget_news_juri_show')]
public function widgetNewsJuriShow(Request $request, QueriesV2Manager $qm, string $prefix = null): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 16]);
$id = $request->get('id');
$data = $qm->getActualitesDetails($id);
if ($seopage) {
$title = ($data != null) ? $data['titre'] : "Actualité juridique";
$seopage->setTitle($title . " | Actualité juridique " . $this->accountingFirm->getName());
if ($data != null) {
$seopage->setDescription(substr(strip_tags($data['descriptifTexte']), 0, 160));
} else {
$seopage->setDescription("Retrouvez l'actualité juridique de votre cabinet " . $this->accountingFirm->getName());
}
}
$histo = null;
$histo = $qm->getHistoActualites();
return $this->render('widget_actualite/actu_juridique.html.twig', [
'id' => $id,
'seopage' => $seopage,
'histo' => $histo,
]);
}
#[Route(path: '/actualite-du-mois/bien-etre', name: 'client_widget_bien_etre_noid')]
#[Route(path: '/actualite-du-mois/bien-etre/{id}-{slug}', name: 'client_widget_bien_etre_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/bien-etre/{id}-{slug}', name: 'previewclient_widget_bien_etre_show')]
public function widgetNewsBienEtreShow(Request $request, QueriesV2Manager $qm, Actuv2BienetreRepository $actuv2BienetreRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 13]);
$id = $request->get('id');
if (isset($id)) {
$data = $qm->getBienEtreDetails($id);
} else {
$bienEtre = $qm->getBienEtre();
$data = $actuv2BienetreRepository->findOneBy(['id' => $bienEtre['id']]);
$id = $data ? $data->getId() : null;
}
if ($seopage) {
$title = ($data != null) ? $data->getTitre() : "Bien-être";
$seopage->setTitle($title . " | Bien-être " . $this->accountingFirm->getName());
if ($data != null) {
$seopage->setDescription(substr(strip_tags($data->getDescriptiftexte()), 0, 160));
} else {
$seopage->setDescription("Découvrez nos conseils bien-être avec votre cabinet " . $this->accountingFirm->getName());
}
}
$histo = null;
$histo = $qm->getHistoBienEtre();
return $this->render('widget_actualite/actu_bien_etre.html.twig', [
'id' => $id,
'seopage' => $seopage,
'histo' => $histo
]);
}
#[Route(path: '/actualite-du-mois/participation-place-a-l-expert', name: 'client_widget_participation_pal')]
#[Route(path: '/preview/{host}/actualite-du-mois/participation-place-a-l-expert', name: 'previewclient_widget_participation_pal')]
public function widgetParticipationPal(Request $request, QueriesV2Manager $qm): Response
{
$footer = $qm->getFooterData();
$seopage = new SeoPageClient();
$seopage->setTitle("Participation place à l'expert | Place à l'expert " . $this->accountingFirm->getName());
$seopage->setDescription("Participez à l'émission place à l'expert avec votre cabinet " . $this->accountingFirm->getName());
return $this->render('widget_actualite/actu_participation_pal.html.twig', [
'seopage' => $seopage,
'footer' => $footer,
'interne' => true
]);
}
#[Route('/actualite-du-mois/participation-place-a-l-expert/sendParticipation', name: 'client_widget_actu_send_form')]
#[Route(path: '/preview/{host}/actualite-du-mois/participation-place-a-l-expert/sendParticipation', name: 'previewclient_widget_actu_send_form')]
public function sendParticipation(Request $request, EntityManagerInterface $em, AccountingFirmRepository $accountingFirmRepository, WidgetMailing $mailing)
{
$email = $request->get('email');
$tel = $request->get('tel');
$firstname = $request->get('firstname');
$linkedin = $request->get('linkedin');
$expertise = $request->get('expertise');
$idCabinet = $request->get('cabinet');
$cabinet = $accountingFirmRepository->findById($idCabinet);
$bannedEmails = [
'pazapz@mailbox.in.ua',
// ajoute d'autres emails ici si besoin
];
if (in_array(strtolower($email), $bannedEmails)) {
// On fait croire que tout s’est bien passé
return new JsonResponse('success');
}
if (!empty($email) && !empty($firstname) && !empty($tel) && !empty($cabinet) && !empty($linkedin) && !empty($expertise)) {
$participationContact = new ContactParticipationPlaceExpert;
$participationContact->setEmail($email);
$participationContact->setPhone($tel);
$participationContact->setFirstname($firstname);
$participationContact->setLinkLinkedin($linkedin);
$participationContact->setExpertise($expertise);
$participationContact->setRgpd(true);
$participationContact->setAccountingFirm($cabinet);
$participationContact->setCreatedAt(new DateTimeImmutable());
$em->persist($participationContact);
$em->flush();
//send mail
$mailing->sendParticipationPalToAgenceExpert($cabinet, [ //Envoie à lagence.expert
'name' => $firstname,
'email' => $email,
'tel' => $tel,
'linkedin' => $linkedin,
'expertise' => $expertise,
]);
$mailing->sendParticipationPalToClient($cabinet, [ //Envoie au client
'name' => $firstname,
'email' => $email,
]);
return new JsonResponse('success');
}
return new JsonResponse('error');
}
#[Route(path: '/actualite-du-mois/podcast/{id}', defaults: ['id' => null], name: 'client_widget_podcast_detail')]
#[Route(path: '/preview/{host}/actualite-du-mois/podcast/{id}', defaults: ['id' => null], name: 'previewclient_widget_podcast_detail')]
public function widgetActuPodcastDetail(Request $request, PodcastEpisodeRepository $podcastEpisodeRepository, QueriesV2Manager $qm)
{
$footer = $qm->getFooterData();
$seopage = new SeoPageClient();
$seopage->setTitle("Podcast place à l'expert | Podcast " . $this->accountingFirm->getName());
$seopage->setDescription("Écoutez les podcasts de votre cabinet " . $this->accountingFirm->getName());
$id = $request->get('id');
return $this->render('widget_actualite/actu_podcast.html.twig', [
'seopage' => $seopage,
'footer' => $footer,
'podcast_id' => $id
]);
}
#[Route(path: '/actualite-du-mois/infographie-rse', name: 'client_widget_infographie_rse_detail_noid')]
#[Route(path: '/actualite-du-mois/infographie-rse/{id}', name: 'client_widget_infographie_rse_detail')]
#[Route(path: '/preview/{host}/actualite-du-mois/infographie-rse/{id}', name: 'previewclient_widget_infographie_rse_detail')]
public function widgetActuInfographieRseDetail(Request $request, QueriesV2Manager $qm)
{
$footer = $qm->getFooterData();
if (!$request->get('id')) {
$latestRSE = $qm->getInfographie();
if ($latestRSE['id']) {
return $this->redirectToRoute('client_widget_infographie_rse_detail', ['id' => $latestRSE['id']]);
} else {
return $this->redirectToRoute('client_widget_news_index');
}
}
$seopage = new SeoPageClient();
$seopage->setTitle("Infographie RSE du mois | Infographie RSE " . $this->accountingFirm->getName());
$seopage->setDescription("Découvrez l'infographie RSE du mois de votre cabinet " . $this->accountingFirm->getName());
return $this->render('widget_actualite/actu_infographie_rse.html.twig', [
'seopage' => $seopage,
'footer' => $footer,
'infographie_rse_id' => $request->get('id')
]);
}
#[Route(path: '/actualite-du-mois/transformation-digitale', name: 'client_widget_transformation_digitale_noid')]
#[Route(path: '/actualite-du-mois/transformation-digitale/{id}-{slug}', name: 'client_widget_transformation_digitale_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/transformation-digitale/{id}-{slug}', name: 'previewclient_widget_transformation_digitale_show')]
public function widgetNewsTransformationDigitaleShow(Request $request, QueriesV2Manager $qm, Actuv2TransformationdigitaleRepository $actuv2TransformationdigitaleRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 17]);
$id = $request->get('id');
if (isset($id)) {
$data = $qm->getTransformationDigitaleDetails($id);
} else {
$Transformationdigitale = $qm->getTransformationDigitale();
$data = $actuv2TransformationdigitaleRepository->findOneBy(['id' => $Transformationdigitale['id']]);
$id = $data ? $data->getId() : null;
}
if ($seopage) {
$title = ($data != null) ? $data->getTitre() : "Transformation digitale";
$seopage->setTitle($title . " | Transformation digitale " . $this->accountingFirm->getName());
if ($data != null) {
$seopage->setDescription(substr(strip_tags($data->getDescriptiftexte()), 0, 160));
} else {
$seopage->setDescription("Suivez la transformation digitale avec votre cabinet " . $this->accountingFirm->getName());
}
}
$histo = null;
$histo = $qm->getHistoTransfo();
return $this->render('widget_actualite/actu_transformation_digitale.html.twig', [
'id' => $id,
'seopage' => $seopage,
'histo' => $histo
]);
}
#[Route(path: '/actualite-du-mois/recherche', name: 'client_widget_recherche')]
#[Route(path: '/preview/{host}/actualite-du-mois/recherche', name: 'previewclient_widget_recherche')]
public function widgetNewsSearch(Request $request, string $prefix = null): Response
{
$entityManager = $this->getDoctrine()->getManager();
$seopageclient = new SeoPageClient();
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 18]);
$query = $request->get('q');
if ($seopage) {
$seopage->setTitle("Recherche : " . $query . " | Recherche " . $this->accountingFirm->getName());
$seopage->setDescription("Résultats de recherche pour " . $query . " sur le site de votre cabinet " . $this->accountingFirm->getName());
}
return $this->render('widget_actualite/recherche.html.twig', [
'query' => $query,
'seopage' => $seopage,
'prefix' => $prefix,
]);
}
#[Route(path: '/api/vote/', name: 'widget_vote', methods: ['POST'])]
#[Route(path: '/preview/{host}/api/vote/', name: 'previewwidget_vote', methods: ['POST'])]
public function widgetVote(Request $request, QueriesV2Manager $qm): Response
{
$id = $request->get('id');
$value = $request->get('value');
$ip = $request->getClientIp();
$req = $qm->setSondageVote($id, $value, $ip);
return new Response($req);
}
#[Route(path: '/voter', name: 'widget_voter', methods: ['GET'])]
#[Route(path: '/preview/{host}/voter', name: 'previewwidget_voter', methods: ['GET'])]
public function widgetVoter(Request $request, QueriesV2Manager $qm)
{
$fromNewsletter = $request->get('from', false) === 'newsletter';
try {
$id = (int)$request->get('id', true);
$reponse = (int)$request->get('reponse', true);
$retour = $qm->setSondageVote($id, $reponse, $request->getClientIp());
$tabResult = $qm->getSondageResult($id);
} catch (\Exception $e) {
if (!$fromNewsletter) {
throw new \Exception($e->getMessage(), $e->getCode());
}
$retour = false;
}
// Dans le cas où l'on vote par la newsletter, on affiche un message
if ($fromNewsletter) {
$this->templateBase = '/';
return $this->render('widget_actu_juridique_v2/voter.html.twig', [
'retour' => $retour
]);
}
return $this->json([
"results" => $tabResult,
"erreur" => 0
]);
}
#[Route(path: '/simulateur', name: 'simulateur_index')]
#[Route(path: '/preview/{host}/simulateur', name: 'previewsimulateur_index')]
#[IsGranted('WEBSITE_SIMULATEUR', statusCode: 404)]
public function SimulateurIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
if ($redirect = $this->redirectRouteV2($request, $prefix)) {
return $this->redirect($redirect);
}
$entityManager = $this->getDoctrine()->getManager();
$page = $request->query->get('p');
$parameters = $this->accountingFirm->getParameters();
$seopage = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => 37]);
if ($seopage) {
$seopage->setTitle("Simulateurs | Simulateur " . $this->accountingFirm->getName());
$seopage->setDescription("Utilisez nos simulateurs pour vos calculs financiers avec votre cabinet " . $this->accountingFirm->getName());
}
// if ($page) {
// $type = $entityManager->getRepository(TypeSeoPage::class)->findOneBy(['urlParameter' => $page]);
// $currentSeopage = $type ? $entityManager->getRepository(SeoPage::class)->findOneBy(['type' => $type]) : null;
// $seopageType = $entityManager->getRepository(SeoPageClient::class)->findOneBy(['parameter_id' => $parameters->getId(), 'seopage_id' => $currentSeopage->getId()]);
// if ($seopageType) {
// $seopage = $simulateurManager->metadataByPage($this->accountingFirm, $seopageType, $page);
// }
// }
return $this->render('simulateur/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/appelle-ton-expert-comptable', name: 'call_your_ec_index')]
#[Route(path: '/preview/{host}/appelle-ton-expert-comptable', name: 'preview_call_your_ec_index')]
public function callYourEcIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Appelle ton expert-comptable | Appelle ton expert-comptable " . $this->accountingFirm->getName());
$seopage->setDescription("Prenez rendez-vous avec votre expert-comptable " . $this->accountingFirm->getName());
return $this->render('widgets/call_your_ec/index.html.twig', ['seopage' => $seopage, 'cabinet' => $this->accountingFirm]);
}
#[Route(path: '/ce', name: 'ce_index')]
#[Route(path: '/preview/{host}/ce', name: 'preview_ce_index')]
public function ceIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Comité d'Entreprise | CE " . $this->accountingFirm->getName());
$seopage->setDescription("Informations sur le Comité d'Entreprise par votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/ce/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/cir', name: 'cir_index')]
#[Route(path: '/preview/{host}/cir', name: 'preview_cir_index')]
public function cirIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Crédit d'Impôt Recherche | CIR " . $this->accountingFirm->getName());
$seopage->setDescription("Informations sur le Crédit d'Impôt Recherche par votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/cir/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/customer_satisfaction', name: 'customer_satisfaction_index')]
#[Route(path: '/preview/{host}/customer_satisfaction', name: 'preview_customer_satisfaction_index')]
public function customerSatisfactionIndex(Request $request, SimulateurManager $simulateurManager, SatisfactionClientSurveyRepository $satisfactionRepo, string $prefix = null): Response
{
$surveyTitle = '';
$surveyId = $request->query->get('surveyId');
if ($surveyId) {
$survey = $satisfactionRepo->find((int) $surveyId);
if ($survey) {
$surveyTitle = $survey->getTitle();
}
}
$seopage = new SeoPageClient();
$title = $surveyTitle ? "Enquête de satisfaction - " . $surveyTitle . " | " . $this->accountingFirm->getName() : "Enquête de satisfaction | " . $this->accountingFirm->getName();
$seopage->setTitle($title);
$seopage->setDescription("Donnez votre avis sur les services de votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/customer_satisfaction/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/facture-electronique', name: 'electronic_invoice_index')]
#[Route(path: '/preview/{host}/facture-electronique', name: 'preview_electronic_invoice_index')]
public function electronicInvoiceIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Facture électronique | " . $this->accountingFirm->getName());
$seopage->setDescription("Tout savoir sur la facture électronique avec votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/electronic_invoicing/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/evenement', name: 'event_index')]
#[Route(path: '/preview/{host}/evenement', name: 'preview_event_index')]
public function eventIndex(Request $request, SimulateurManager $simulateurManager, EventRepository $eventRepository, string $prefix = null): Response
{
$eventTitle = '';
$slugEvent = $request->query->get('slugEvent');
if ($slugEvent) {
$event = $eventRepository->findOneBy(['slug' => $slugEvent, 'accountingFirm' => $this->accountingFirm]);
if ($event) {
$eventTitle = $event->getTitle();
}
}
$seopage = new SeoPageClient();
$title = $eventTitle ? "Événements - " . $eventTitle . " | " . $this->accountingFirm->getName() : "Événements | " . $this->accountingFirm->getName();
$seopage->setTitle($title);
$seopage->setDescription("Découvrez les prochains événements organisés par votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/events/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/aides-aux-entreprises', name: 'helpers_firms_index')]
#[Route(path: '/preview/{host}/aides-aux-entreprises', name: 'preview_helpers_firms_index')]
public function helpersFirmsIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Aides aux entreprises | " . $this->accountingFirm->getName());
$seopage->setDescription("Trouvez les aides pour votre entreprise avec votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/helpers_firms/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/tous-en-ligne', name: 'online_index')]
#[Route(path: '/preview/{host}/tous-en-ligne', name: 'preview_online_index')]
public function onlineIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Tous en ligne | " . $this->accountingFirm->getName());
$seopage->setDescription("Découvrez nos services en ligne avec votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/online/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/recommandation', name: 'recommendation_index')]
#[Route(path: '/preview/{host}/recommandation', name: 'preview_recommendation_index')]
public function recommendationIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Recommandation | " . $this->accountingFirm->getName());
$seopage->setDescription("Recommandez votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/recommendation/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/rgpd', name: 'rgpd_index')]
#[Route(path: '/preview/{host}/rgpd', name: 'preview_rgpd_index')]
public function rgpdIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("RGPD | " . $this->accountingFirm->getName());
$seopage->setDescription("Informations sur la protection de vos données par votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/rgpd/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/parrainage', name: 'sponsorship_index')]
#[Route(path: '/preview/{host}/parrainage', name: 'preview_sponsorship_index')]
public function sponsorshipIndex(Request $request, SimulateurManager $simulateurManager, string $prefix = null): Response
{
$seopage = new SeoPageClient();
$seopage->setTitle("Parrainage | " . $this->accountingFirm->getName());
$seopage->setDescription("Parrainez un proche et profitez des avantages de votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/sponsorship/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/sondage', name: 'survey_index')]
#[Route(path: '/preview/{host}/sondage', name: 'preview_survey_index')]
public function surveyIndex(Request $request, SimulateurManager $simulateurManager, SurveyRepository $surveyRepository, string $prefix = null): Response
{
$surveyTitle = '';
$surveyId = $request->query->get('surveyId');
if ($surveyId) {
$survey = $surveyRepository->find((int) $surveyId);
if ($survey) {
$surveyTitle = $survey->getTitle();
}
}
$seopage = new SeoPageClient();
$title = $surveyTitle ? "Sondage - " . $surveyTitle . " | " . $this->accountingFirm->getName() : "Sondage | " . $this->accountingFirm->getName();
$seopage->setTitle($title);
$seopage->setDescription("Participez à nos sondages avec votre cabinet " . $this->accountingFirm->getName());
return $this->render('widgets/survey/index.html.twig', ['seopage' => $seopage]);
}
#[Route(path: '/check-simulateur', name: 'check_simulteur')]
#[Route(path: '/preview/{host}/check-simulateur', name: 'previewcheck_simulteur')]
#[IsGranted('WEBSITE_SIMULATEUR', statusCode: 404)]
public function checkSimuateur(Request $request, AccountingFirmRepository $repository, string $prefix = null): JsonResponse
{
$token = $request->query->get('token');
$theHost = str_replace('www.', '', $request->getHost());
$host = $request->get('host') ?: $theHost;
// $host = 'cabinet-za.de';
if ($token) {
$accountingFirm = $repository->findOneBy(['simulateurToken' => $token]);
$isAuthorized = false;
if ($accountingFirm && in_array($host, $accountingFirm->getListAuthorizedDomains())) {
$isAuthorized = true;
}
$url = $isAuthorized ? $accountingFirm->getSimulateurWidgetUrl() : null;
} else {
$accountingFirm = $repository->findOneBy(['host' => $host]);
$url = $accountingFirm ? $prefix . $this->generateUrl('widget_simulteur') : null;
}
return $this->json($url);
}
#[Route(path: '/widget-simulateur', name: 'widget_simulteur', methods: ['GET', 'POST'])]
public function widgetSimulateur(Request $request, AccountingFirmRepository $repository)
{
$theHost = str_replace('www.', '', $request->getHost());
$host = $request->get('host') ?: $theHost;
// $host = 'cabinet-za.de';
$accountingFirm = $repository->findOneBy(['host' => $host]);
$this->templateBase = '/';
if (!$accountingFirm || $accountingFirm->getHost() !== $host) {
throw new NotFoundHttpException();
}
return $this->render('widget_simulateur_v2/content.html.twig', [
'cabinet' => $accountingFirm,
]);
}
#[Route(path: '/voterrh', name: 'widget_voterrh', methods: ['GET'])]
#[Route(path: '/preview/{host}/voterrh', name: 'previewwidget_voterrh', methods: ['GET'])]
public function widgetVoterrh(Request $request, QueriesV2Manager $qm)
{
$id = $request->get('id');
$reponse = $request->get('reponse');
$ip = $request->getClientIp();
$req = $qm->setQuizVote($id, $reponse, $ip);
return new Response($req);
}
#[Route(path: '/actualite-du-mois/journal', name: 'client_widget_journal_noid')]
#[Route(path: '/actualite-du-mois/journal/{id}', name: 'client_widget_journal_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/journal/{id}', name: 'previewclient_widget_journal_show')]
public function widgetNewsJournalShow(Request $request, QueriesV2Manager $qm, Actuv2JournalRepository $journalRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$parameters = $this->accountingFirm->getParameters();
$id = $request->get('id');
$seopage = new SeoPageClient();
$seopage->setTitle("Journal du mois | Journal " . $this->accountingFirm->getName());
$seopage->setDescription("Consultez le journal du mois de votre cabinet " . $this->accountingFirm->getName());
if (isset($id)) {
$data = $qm->getJournalDetails($id);
} else {
$journalLast = $qm->getJournal();
$id = $journalLast['id'];
}
return $this->render('widget_actualite/actu_journal.html.twig', [
'id' => $id,
'seopage' => $seopage
]);
}
#[Route(path: '/actualite-du-mois/aide', name: 'client_widget_aide_noid')]
#[Route(path: '/actualite-du-mois/aide/{id}', name: 'client_widget_aide_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/aide/{id}', name: 'previewclient_widget_aide_show')]
public function widgetNewsAideShow(Request $request, QueriesV2Manager $qm, Actuv2HelpRepository $helpRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$parameters = $this->accountingFirm->getParameters();
$id = $request->get('id');
$seopage = new SeoPageClient();
$seopage->setTitle("L'aide du mois | Aide " . $this->accountingFirm->getName());
$seopage->setDescription("Découvrez les aides du mois avec votre cabinet " . $this->accountingFirm->getName());
if (isset($id)) {
$data = $qm->getHelpById($id);
} else {
$data = $qm->getHelpWithId();
$id = $data['id'];
}
return $this->render('widget_actualite/actu_help.html.twig', [
'id' => $id,
'seopage' => $seopage
]);
}
#[Route(path: '/actualite-du-mois/calendrier', name: 'client_widget_calendrier_show')]
#[Route(path: '/preview/{host}/actualite-du-mois/calendrier', name: 'previewclient_widget_calendrier_show')]
public function widgetNewsCalendrierShow(Request $request, QueriesV2Manager $qm, Actuv2HelpRepository $helpRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$parameters = $this->accountingFirm->getParameters();
$id = $request->get('id');
$seopage = new SeoPageClient();
$seopage->setTitle("Le calendrier juridique | Calendrier " . $this->accountingFirm->getName());
$seopage->setDescription("Consultez le calendrier juridique de votre cabinet " . $this->accountingFirm->getName());
return $this->render('widget_actualite/actu_calendrier.html.twig', [
'seopage' => $seopage
]);
}
}