custom/plugins/WynCustomerTheme/src/Subscriber/ProductSubscriber.php line 55

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wyn\CustomerTheme\Subscriber;
  3. use Shopware\Core\Checkout\Cart\Event\AfterLineItemAddedEvent;
  4. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  5. use Shopware\Core\Content\Category\CategoryEntity;
  6. use Shopware\Core\Content\Category\Event\NavigationLoadedEvent;
  7. use Shopware\Core\Content\Media\MediaCollection;
  8. use Shopware\Core\Content\Media\MediaEntity;
  9. use Shopware\Core\Content\Product\Aggregate\ProductMedia\ProductMediaEntity;
  10. use Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity;
  11. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  12. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  14. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  15. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  16. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  17. use Shopware\Core\Framework\Struct\ArrayStruct;
  18. use Shopware\Core\Framework\Struct\ArrayStruct as ArrayStructAlias;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Shopware\Core\Content\Product\ProductEvents;
  21. class ProductSubscriber implements EventSubscriberInterface
  22. {
  23.   private EntityRepositoryInterface $mediaRepository;
  24.   private EntityRepositoryInterface $productMediaRepository;
  25.   /**
  26.    * @param EntityRepositoryInterface $mediaRepository
  27.    * @param EntityRepositoryInterface $productMediaRepository
  28.    */
  29.   public function __construct(
  30.     EntityRepositoryInterface $mediaRepository,
  31.     EntityRepositoryInterface $productMediaRepository
  32.   )
  33.   {
  34.     $this->mediaRepository $mediaRepository;
  35.     $this->productMediaRepository $productMediaRepository;
  36.   }
  37.   public static function getSubscribedEvents(): array
  38.   {
  39.     return [
  40.       ProductEvents::PRODUCT_LOADED_EVENT => 'onProductLoaded',
  41.     ];
  42.   }
  43.   /**
  44.    * If custom variant image isset from customfields => set the image as the cover
  45.    *
  46.    * @param EntityLoadedEvent $event
  47.    * @return void
  48.    */
  49.   public function onProductLoaded(EntityLoadedEvent $event)
  50.   {
  51.     /** @var SalesChannelProductEntity $entity */
  52.     foreach ($event->getEntities() as $entity) {
  53.       if (isset($entity->getCustomFields()['wyn_product_additional_information_additional_product_image'])) {
  54.         $criteria = new Criteria();
  55.         $criteria->addFilter(new EqualsFilter('id'$entity->getCustomFields()['wyn_product_additional_information_additional_product_image']));
  56.         $mediaResult $this->mediaRepository->search($criteria$event->getContext());
  57.         /** @var MediaEntity $mediaEntity */
  58.         $mediaEntity $mediaResult->first();
  59.         $tempProductMedia = new ProductMediaEntity();
  60.         $tempProductMedia->setId($mediaEntity->getId());
  61.         $tempProductMedia->setMediaId($mediaEntity->getId());
  62.         $tempProductMedia->setMedia($mediaEntity);
  63.         $tempProductMedia->setPosition(0);
  64.         $entity->setCover($tempProductMedia);
  65.       }
  66.     }
  67.   }
  68. }