<?php
namespace App\Controller;
use App\Repository\AccountingFirmRepository;
use App\Repository\AuthorizedDomainRepository;
use App\Services\HelpersFirmsService;
use App\Services\WidgetMailing;
use Doctrine\ORM\EntityManagerInterface;
use Qferrer\Mjml\Twig\MjmlExtension;
use Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
class WidgetHelpersFirmsController extends AbstractController
{
protected MjmlExtension $mjmlRenderer;
protected Environment $twig;
public function __construct(MailerInterface $mailer, MjmlExtension $mjmlRenderer, Environment $twig)
{
$this->mjmlRenderer = $mjmlRenderer;
$this->twig = $twig;
}
#[Route('/check-helpers-firms', name: 'w_helpers_firms_check')]
public function ctrl_checkName(Request $request, AccountingFirmRepository $repository, string $prefix = null): JsonResponse
{
$token = $request->query->get('token');
$host = $request->get('host');
if ($token && $host) {
$accountingFirm = $repository->findOneBy(['helpersFirmsToken' => $token]);
$isAuthorized = false;
if ($accountingFirm && in_array($host, $accountingFirm->getListAuthorizedDomains())) {
$isAuthorized = true;
}
$url = $isAuthorized ? $accountingFirm->getHelpersFirmsWidgetUrl() : null;
} else {
$accountingFirm = $repository->findOneBy(['host' => $host]);
$url = $accountingFirm ? $prefix . $this->generateUrl('w_helpers_firms_get') : null;
}
return $this->json($url);
}
#[Route('/widget-helpers-firms', name: 'w_helpers_firms_get')]
public function ctrl_widgetHelpersFirms(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains, HelpersFirmsService $helpersFirmsService)
{
$token = $request->query->get('token');
$host = $request->get('host');
$helperId = $request->get('id');
// dd($helpersFirmsService->getStartDatas());
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getHelpersFirmsToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
$numberHelpers = $helpersFirmsService->getNumberHelpers();
if ($helperId) {
$helper = $helpersFirmsService->getHelperById($helperId);
$territoires = $helpersFirmsService->getTerritoiresFromContactsHelper($helper['cache_indexation']['contacts']);
return $this->render('widget_helpers_firms/show.html.twig', [
'cabinet' => $accountingFirm,
'territoires' => $territoires,
'helper' => $helper,
'numberHelpers' => $numberHelpers,
]);
}
return $this->render('widget_helpers_firms/content.html.twig', [
'cabinet' => $accountingFirm,
'startDatas' => $helpersFirmsService->getStartDatas(),
'numberHelpers' => $numberHelpers,
]);
}
#[Route('/get-territoires-helpers-firms', name: 'w_helpers_firms_get_territoires')]
public function getTerritoires_widgetHelpersFirms(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains, HelpersFirmsService $helpersFirmsService)
{
$token = $request->query->get('token');
$host = $request->get('host');
$jsonFilters = $request->getContent();
$filtersData = json_decode($jsonFilters, true);
$valueSearchJson = $request->getContent();
$valueSearch = json_decode($valueSearchJson, true);
// dd($helpersFirmsService->getStartDatas());
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getHelpersFirmsToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
$territoires = $helpersFirmsService->searchTerritoiresFromString($valueSearch);
return $this->json($territoires);
}
#[Route('/result-helpers-firms', name: 'w_helpers_firms_results')]
public function results_widgetHelpersFirms(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains, HelpersFirmsService $helpersFirmsService)
{
$token = $request->query->get('token');
$host = $request->get('host');
$jsonFilters = $request->getContent();
$filtersData = json_decode($jsonFilters, true);
// Paramètres de pagination
$page = $request->query->getInt('page', 1); // Par défaut page 1
$limit = $request->query->getInt('limit', 20); // Par défaut 10 résultats par page
// dd($helpersFirmsService->getStartDatas());
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getHelpersFirmsToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
$helpers = $helpersFirmsService->searchHelpersFromFilters($filtersData, $page, $limit);
return $this->json($helpers);
}
#[Route('/embed', name: 'w_helpers_firms_embed')]
public function embed()
{
$root = $this->getParameter('kernel.project_dir');
$path = $root . '/public/widgets/widget_helpers_firms/widget_helpers_firms.js';
return new BinaryFileResponse($path);
}
#[Route('/{filename}.{format}', name: 'w_helpers_firms_files')]
public function helpers_firms_files(string $filename, string $format)
{
$allowed = array('png', 'jpg', 'jpeg', 'gif', 'js', 'svg', 'eot', 'ttf', 'woff');
if (in_array($format, $allowed)) {
$root = $this->getParameter('kernel.project_dir');
$path = $root . '/public/widget_helpers_firms/' . $filename . '.' . $format;
// si fichier n'existe pas check dans le dossier de build du widget (pour les img import dans scss ou js)
if (!file_exists($path)) {
$path = $root . '/public/widgets/widget_helpers_firms/' . $filename . '.' . $format;
}
return new BinaryFileResponse($path);
}
return false;
}
}