<?php
/**
* CookieConsentBundle
* Copyright (c) Die Leoparden GmbH
*/
namespace DieLeoparden\CookieConsentBundle\Controller;
use Pimcore\Cache;
use Pimcore\Model\DataObject\CookieConsentEntry;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class ApiController
*
* @Route("/cookie-consent/{api_token}", requirements={"api_token"="^[A-Za-z0-9]*$"})
*/
class ApiController extends AbstractController
{
/**
* @param Request $request
*
* @return Response
*
* @Route("/tarteaucitron.js", name="die_leoparden.cookie_consent.script")
*/
public function scriptAction(Request $request): Response
{
/** @var string $apiToken */
$apiToken = $request->get('api_token');
/** @var string|null $scriptContent */
$scriptContent = Cache::load($this->getScriptCacheIdentifier($apiToken));
if ($scriptContent) {
return $this->getScriptResponse($scriptContent);
}
/** @var CookieConsentEntry|null $cookieConsentEntry */
$cookieConsentEntry = CookieConsentEntry::getByApiToken($apiToken, 1);
if (!$cookieConsentEntry instanceof CookieConsentEntry) {
return $this->getErrorResponse();
}
$scriptContent = $this->renderView('@CookieConsent/Api/script.html.twig', [
'entry' => $cookieConsentEntry,
'script' => file_get_contents($this->getBuildPath() . 'tarteaucitron.js'),
]);
Cache::save($scriptContent, $this->getScriptCacheIdentifier($apiToken));
return $this->getScriptResponse($scriptContent);
}
/**
* @param Request $request
*
* @return Response
*
* @Route("/css/tarteaucitron.css", name="die_leoparden.cookie_consent.stylesheet")
*/
public function stylesheetAction(Request $request): Response
{
/** @var string $apiToken */
$apiToken = $request->get('api_token');
/** @var string|null $stylesheetContent */
$stylesheetContent = Cache::load($this->getStylesheetCacheIdentifier($apiToken));
if ($stylesheetContent) {
return $this->getStylesheetResponse($stylesheetContent);
}
/** @var CookieConsentEntry|null $cookieConsentEntry */
$cookieConsentEntry = CookieConsentEntry::getByApiToken($apiToken, 1);
if (!$cookieConsentEntry instanceof CookieConsentEntry) {
return $this->getErrorResponse();
}
$stylesheetContent = $this->renderView('@CookieConsent/Api/stylesheet.html.twig', [
'entry' => $cookieConsentEntry,
'stylesheet' => file_get_contents($this->getBuildPath() . 'css/tarteaucitron.css'),
]);
Cache::save($stylesheetContent, $this->getStylesheetCacheIdentifier($apiToken));
return $this->getStylesheetResponse($stylesheetContent);
}
/**
* @param Request $request
*
* @return Response
*
* @Route("/lang/tarteaucitron.{language}.js", name="die_leoparden.cookie_consent.language_script", requirements={"language"="^[a-z]*$"})
*/
public function languageScriptAction(Request $request): Response
{
/** @var string $apiToken */
$apiToken = $request->get('api_token');
/** @var string|null $languageScriptContent */
$languageScriptContent = Cache::load($this->getLanguageScriptCacheIdentifier($apiToken));
if ($languageScriptContent) {
return $this->getScriptResponse($languageScriptContent);
}
/** @var CookieConsentEntry|null $cookieConsentEntry */
$cookieConsentEntry = CookieConsentEntry::getByApiToken($apiToken, 1);
if (!$cookieConsentEntry instanceof CookieConsentEntry) {
return $this->getErrorResponse();
}
/** @var string $language */
$language = $request->get('language');
if (!file_exists($this->getBuildPath() . 'lang/tarteaucitron.' . $language . '.js')) {
return $this->getErrorResponse('No valid language');
}
$languageScriptContent = $this->renderView('@CookieConsent/Api/language_script.html.twig', [
'entry' => $cookieConsentEntry,
'language_script' => file_get_contents($this->getBuildPath() . 'lang/tarteaucitron.' . $language . '.js'),
]);
Cache::save($languageScriptContent, $this->getLanguageScriptCacheIdentifier($apiToken));
return $this->getScriptResponse($languageScriptContent);
}
/**
* @param Request $request
*
* @return Response
*
* @Route("/tarteaucitron.services.js", name="die_leoparden.cookie_consent.service_script")
*/
public function serviceScriptAction(Request $request): Response
{
/** @var string $apiToken */
$apiToken = $request->get('api_token');
/** @var string|null $serviceScriptContent */
$serviceScriptContent = Cache::load($this->getServiceScriptCacheIdentifier($apiToken));
if ($serviceScriptContent) {
return $this->getScriptResponse($serviceScriptContent);
}
/** @var CookieConsentEntry|null $cookieConsentEntry */
$cookieConsentEntry = CookieConsentEntry::getByApiToken($apiToken, 1);
if (!$cookieConsentEntry instanceof CookieConsentEntry) {
return $this->getErrorResponse();
}
$serviceScriptContent = $this->renderView('@CookieConsent/Api/service_script.html.twig', [
'entry' => $cookieConsentEntry,
'service_script' => file_get_contents($this->getBuildPath() . 'tarteaucitron.services.js'),
]);
Cache::save($serviceScriptContent, $this->getServiceScriptCacheIdentifier($apiToken));
return $this->getScriptResponse($serviceScriptContent);
}
}