<?php
namespace App\Controller\Back;
use App\Entity\Page;
use App\Form\Model\Settings;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/back/config')]
class ConfigController extends AbstractController
{
public function __construct(protected ManagerRegistry $managerRegistry)
{
}
#[Route('/javascript-settings.js', name: 'back_config_javascriptSettings')]
public function javascriptSettings(): Response
{
$response = new Response($this->renderView('back/config/javascript-settings.js.twig'));
$response->headers->set('Content-Type', 'text/javascript');
return $response;
}
#[Route('/cloudinary-signature', name: 'back_config_cloudinary_signature')]
public function cloudinarySignature(): JsonResponse
{
// See: https://cloudinary.com/documentation/media_library_widget#2_optional_generate_the_authentication_signature
$data = [];
$cloudName = Settings::get('cloudinaryCloudName');
$timestamp = time();
$username = Settings::get('cloudinaryUsername');
$apiSecret = Settings::get('cloudinaryApiSecret');
$str = 'cloud_name='.$cloudName.'×tamp='.$timestamp.'&username='.$username.$apiSecret;
$encrypted = hash('sha256', $str);
$data['signature'] = $encrypted;
$data['timestamp'] = $timestamp;
return new JsonResponse($data);
}
#[Route('/javascript-pages-list.js', name: 'back_config_javascriptPageList')]
public function javascriptPageList(Request $request): Response
{
$locale = $request->get('locale', null);
$repository = $this->managerRegistry->getRepository(Page::class);
$pages = $repository->findBy(['locale' => $locale, 'status' => 'published', 'visibility' => 'public'], ['globalTitle' => 'ASC']);
$response = new Response($this->renderView('back/config/javascript-pages-list.js.twig', [
'pages' => $pages,
]));
$response->headers->set('Content-Type', 'text/javascript');
return $response;
}
#[Route('/i18n.js', name: 'back_config_javascriptMessages')]
public function javascriptMessages(): Response
{
$response = new Response($this->renderView('back/config/javascript-messages.js.twig', []));
$response->headers->set('Content-Type', 'text/javascript');
return $response;
}
}