<?php declare(strict_types=1);
namespace Nimbits\NimbitsCustomChanges\Subscriber;
use Shopware\Storefront\Page\Product\ProductPageCriteriaEvent;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twig\Environment;
use Nimbits\NimbitsCustomChanges\Setting\Service\SettingService;
use Shopware\Storefront\Pagelet\Footer\FooterPageletLoadedEvent;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\AndFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\NotFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Parser\QueryStringParser;
use Shopware\Core\Framework\Struct\ArrayEntity;
class StorefrontSubscriber implements EventSubscriberInterface
{
private $settingsService;
/**
* @var EntityRepositoryInterface
*/
private $productRepository;
public function __construct(
SettingService $settingsService,
EntityRepositoryInterface $productRepository
)
{
$this->settingsService = $settingsService;
$this->productRepository = $productRepository;
}
public static function getSubscribedEvents(): array
{
// Return the events to listen to as array like this: <event to listen to> => <method to execute>
return [
FooterPageletLoadedEvent::class => 'onFooterLoaded',
ProductPageLoadedEvent::class => 'onProductPageLoadedEvent',
];
}
public function onProductPageLoadedEvent(ProductPageLoadedEvent $event)
{
$freeShipping = false;
$rentRequest = false;
$event->getPage()->getProduct()->getId();
$additions = $this->productRepository->search(
(new Criteria())
->addFilter(new EqualsAnyFilter('id', [$event->getPage()->getProduct()->getId()]))
->addAssociation('tags'),
$event->getContext());
foreach ($additions->getElements() as $element) {
foreach ($element->getTags()->getElements() as $tag) {
if($tag->getName() === "Versandkostenfrei") {
$freeShipping = true;
}
if($tag->getName() === "Mietanfrage") {
$rentRequest = true;
}
}
$event->getPage()->addExtension('nimbitsFreeShipping', new ArrayEntity(['freeShipping' => $freeShipping]) );
$event->getPage()->addExtension('nimbitsRentRequest', new ArrayEntity(['rentRequest' => $rentRequest]) );
}
}
public function onFooterLoaded(FooterPageletLoadedEvent $event)
{
$event->getPagelet()->addExtension('nimbitsCustomChangesSettings',
$this->settingsService->getSettingsAsStruct($event->getSalesChannelContext()->getSalesChannel()->getId())
);
}
}
?>