<?phpdeclare(strict_types=1);namespace ZweiPunktSidebarBannerSW6\Subscriber;use Shopware\Core\Content\Cms\Events\CmsPageLoadedEvent;use Shopware\Core\Framework\Context;use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;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\EqualsAnyFilter;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Shopware\Core\System\SystemConfig\SystemConfigService;use ZweiPunktSidebarBannerSW6\ZweiPunktSidebarBannerSW6;/** * Class AddConfigToView * * Used to format the config data and pass it to the view */class AddConfigToView implements EventSubscriberInterface{ private SystemConfigService $systemConfigService; private EntityRepository $mediaRepository; /** * AddConfigToView constructor * * @param SystemConfigService $systemConfigService * @param EntityRepository $mediaRepository */ public function __construct( SystemConfigService $systemConfigService, EntityRepository $mediaRepository ) { // Get system config $this->systemConfigService = $systemConfigService; // Get media repository $this->mediaRepository = $mediaRepository; } /** * @return array<string, string> */ public static function getSubscribedEvents(): array { return [ CmsPageLoadedEvent::class => 'onPageLoaded' ]; } /** * Prepares config data by determining the links for the images and merging the data of the banner * * @param CmsPageLoadedEvent $event */ public function onPageLoaded(CmsPageLoadedEvent $event): void { // Get sales channel id $salesChannelId = $event->getSaleschannelContext()->getSalesChannelId(); // Get plugin configuration $config = $this ->systemConfigService->get(ZweiPunktSidebarBannerSW6::PLUGIN_NAME . '.config', $salesChannelId); // Cancel if plugin is not activated if ($config['sbActivePlugin'] == false) { return; } // Number of possible banners $config['sbNumberOfEntries'] = 5; // Collect banner settings $config['banner'] = []; for ($i = 1; $i <= $config['sbNumberOfEntries']; $i++) { // skip if banner is not activated if ($config['sbBanner' . $i . 'Active'] == false) { continue; } // Get media id if (empty($config['sbBanner' . $i])) { continue; } $mediaId = $config['sbBanner' . $i]; // Get media $criteria = new Criteria(); $criteria->addFilter(new EqualsAnyFilter('id', [$mediaId])); $media = $this ->mediaRepository->search($criteria, $event->getContext())->getElements(); $altText = $config['sbAltText' . $i] ?? false; $url = $config['sbLink' . $i] ?? false; $target = ($config['sbTargetNewWindow' . $i]) ? '_blank' : '_self'; $css = $config['sbCss' . $i] ?? false; // Get data of active banner $config['banner'][] = [ 'media' => $media[$mediaId], 'altText' => $altText, 'url' => $url, 'target' => $target, 'css' => $css]; } $event->getSalesChannelContext()->assign( ['zweiPunktSidebarBannerConfig' => $config] ); }}