<?php
declare(strict_types=1);
namespace Hofff\Contao\Consent\Core\Action;
use Contao\Controller;
use Contao\CoreBundle\Framework\Adapter;
use Hofff\Contao\Consent\Bridge\ConsentToolManager;
use Netzmacht\Contao\Toolkit\View\Template\TemplateRenderer;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Contracts\Translation\TranslatorInterface;
/** @internal */
class BannerAction extends AbstractConsentToolAwareAction
{
/** @var TemplateRenderer */
private $templateRenderer;
/** @var TranslatorInterface */
private $translator;
/** @var Adapter<Controller> */
private $controllerAdapter;
public function __construct(
ConsentToolManager $consentToolManager,
TemplateRenderer $templateRenderer,
TranslatorInterface $translator,
Adapter $controllerAdapter
) {
parent::__construct($consentToolManager);
$this->templateRenderer = $templateRenderer;
$this->translator = $translator;
$this->controllerAdapter = $controllerAdapter;
}
public function __invoke(Request $request): Response
{
$consentTool = $this->createConsentTool($request);
$rootTag = $consentTool->rootTag();
if ($rootTag === null) {
throw new BadRequestHttpException();
}
$buffer = $this->templateRenderer->render(
'fe:' . $rootTag->bannerTemplate(),
[
'tag' => $rootTag,
'closeButton' => $this->translator->trans(
'hofff_consent.closeButton',
[],
'contao_hofff_consent'
),
]
);
$buffer = $this->replaceInsertTags($buffer);
$response = new Response($buffer);
$response->headers->set('Cache-Control', 'no-cache, no-store');
$response->setPrivate();
return $response;
}
private function replaceInsertTags(string $buffer): string
{
return $this->controllerAdapter->replaceInsertTags(
$this->controllerAdapter->replaceInsertTags($buffer, false)
);
}
}