<?php
declare(strict_types=1);
namespace Onedrop\News\Storefront\Pagelet\Header;
use Onedrop\News\Content\OdsSiteNews\OdsSiteNewsEntity;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Storefront\Pagelet\Header\HeaderPageletLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class HeaderPageletLoadedSubscriber implements EventSubscriberInterface
{
private EntityRepositoryInterface $odsNewsRepository;
public function __construct(EntityRepositoryInterface $odsNewsRepository)
{
$this->odsNewsRepository = $odsNewsRepository;
}
public static function getSubscribedEvents(): array
{
return [
HeaderPageletLoadedEvent::class => 'onHeaderPageletLoaded',
];
}
public function onHeaderPageletLoaded(HeaderPageletLoadedEvent $event): void
{
$odsNewExtension = $this->getOdsNewsFromExtension($event);
if (\is_null($odsNewExtension)) {
return;
}
$odsNewsId = $odsNewExtension->getId();
$criteria = new Criteria();
$criteria->addAssociation('translations.media');
$criteria->addFilter(new EqualsFilter('id', $odsNewsId));
$odsNews = $this->odsNewsRepository->search($criteria, $event->getContext());
$translations = $odsNews->getElements()[$odsNewsId]->getTranslations();
$odsNewExtension->setTranslations($translations);
}
private function getOdsNewsFromExtension(HeaderPageletLoadedEvent $event): ?OdsSiteNewsEntity
{
$navigation = $event->getPagelet()->getNavigation();
if (\is_null($navigation)) {
return null;
}
$activeNavigate = $navigation->getActive();
if (\is_null($activeNavigate)) {
return null;
}
if (!isset($activeNavigate->getExtensions()['ods_news'])) {
return null;
}
/**
* @var OdsSiteNewsEntity $odsNews
*/
$odsNews = $activeNavigate->getExtensions()['ods_news'];
return $odsNews;
}
}