custom/plugins/NimbitsArticlePDFsNext/src/Subscriber/Subscriber.php line 29

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Nimbits\NimbitsArticlePDFsNext\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Shopware\Core\Content\Product\ProductEvents;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  8. use Shopware\Core\Content\Cms\CmsPageEntity;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\HttpKernel\Event\KernelEvent;
  11. use Shopware\Storefront\Event\StorefrontRenderEvent;
  12. use Shopware\Storefront\Pagelet\Footer\FooterPageletLoadedEvent;
  13. use Nimbits\NimbitsArticlePDFsNext\Setting\Service\SettingService;
  14. use Shopware\Core\Content\Media\DataAbstractionLayer\MediaRepositoryDecorator;
  15. use Shopware\Core\Framework\Struct\ArrayEntity;
  16. class Subscriber implements EventSubscriberInterface
  17. {
  18.     /** @var SettingService $settingsService */
  19.     protected $settingsService;
  20.     /** @var MediaRepositoryDecorator $mediaRepository */
  21.     protected $mediaRepository;
  22.     public function __construct(
  23.         SettingService $settingsService,
  24.         MediaRepositoryDecorator $mediaRepository
  25.     )
  26.     {
  27.         $this->settingsService $settingsService;
  28.         $this->mediaRepository $mediaRepository;
  29.     }
  30.     public static function getSubscribedEvents(): array
  31.     {
  32.         // Return the events to listen to as array like this:  <event to listen to> => <method to execute>
  33.         return [
  34.             ProductPageLoadedEvent::class => 'onProductPageLoaded'
  35.         ];
  36.     }
  37.     public function onProductPageLoaded(ProductPageLoadedEvent $event)
  38.     {
  39.         $customFields $event->getPage()->getProduct()->getCustomFields();
  40.         $ids = [];
  41.         for($i 1$i <= 10$i++)
  42.         {
  43.             if(!isset($customFields['custom_nimbits_pdftab'.$i.'_media']))
  44.                 continue;
  45.             $ids[] = $customFields['custom_nimbits_pdftab'.$i.'_media'];
  46.         }
  47.         if(!empty($ids)){
  48.             /** @var EntityCollection $entities */
  49.             $mediaFiles $this->mediaRepository->search(
  50.                 new Criteria($ids),
  51.                 \Shopware\Core\Framework\Context::createDefaultContext()
  52.             );
  53.             $event->getPage()->getProduct()->addExtension('articlepdfs', new ArrayEntity($mediaFiles->getElements()));
  54.         }
  55.         else{
  56.             $event->getPage()->getProduct()->addExtension('articlepdfs', new ArrayEntity([]));
  57.         }
  58.         $event->getPage()->getProduct()->addExtension('nimbitsArticlePdfSettings'$this->settingsService->getSettingsAsStruct($event->getSalesChannelContext()->getSalesChannel()->getId()));
  59.     }
  60. }
  61. ?>