<?php declare(strict_types=1);
namespace Gshop\ConsentMode\DataResolver;
use Gshop\ConsentMode\Framework\GshopCookie\SalesChannel\AbstractCookieGroupRoute;
use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class GshopCookieElementResolver extends AbstractCmsElementResolver
{
private AbstractCookieGroupRoute $cookieGroupRoute;
private RequestStack $requestStack;
public function __construct(
AbstractCookieGroupRoute $cookieGroupRoute,
RequestStack $requestStack
)
{
$this->cookieGroupRoute = $cookieGroupRoute;
$this->requestStack = $requestStack;
}
public function getType(): string
{
return 'gshop-cookie-element';
}
public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
{
return null;
}
public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
{
$criteria = new Criteria();
$criteria->addAssociation('cookies.entries');
$criteria->getAssociation('cookies')->addSorting(new FieldSorting('position', 'ASC'));
$criteria->getAssociation('entries')->addSorting(new FieldSorting('position', 'ASC'));
$criteria->addSorting(new FieldSorting('position', 'ASC'));
$request = $this->requestStack->getCurrentRequest();
if ($request === null) {
$request = new Request();
}
$cookieGroups = $this->cookieGroupRoute->load(
$request,
$resolverContext->getSalesChannelContext(),
$criteria
)->getCookieGroups();
$slot->setData($cookieGroups);
}
}