<?php declare(strict_types=1);
namespace Wyn\CustomerTheme\Subscriber;
use Shopware\Core\Checkout\Cart\Event\AfterLineItemAddedEvent;
use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
use Shopware\Core\Content\Category\CategoryEntity;
use Shopware\Core\Content\Category\Event\NavigationLoadedEvent;
use Shopware\Core\Content\Media\MediaCollection;
use Shopware\Core\Content\Media\MediaEntity;
use Shopware\Core\Content\Product\Aggregate\ProductMedia\ProductMediaEntity;
use Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\Struct\ArrayStruct;
use Shopware\Core\Framework\Struct\ArrayStruct as ArrayStructAlias;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Content\Product\ProductEvents;
class ProductSubscriber implements EventSubscriberInterface
{
private EntityRepositoryInterface $mediaRepository;
private EntityRepositoryInterface $productMediaRepository;
/**
* @param EntityRepositoryInterface $mediaRepository
* @param EntityRepositoryInterface $productMediaRepository
*/
public function __construct(
EntityRepositoryInterface $mediaRepository,
EntityRepositoryInterface $productMediaRepository
)
{
$this->mediaRepository = $mediaRepository;
$this->productMediaRepository = $productMediaRepository;
}
public static function getSubscribedEvents(): array
{
return [
ProductEvents::PRODUCT_LOADED_EVENT => 'onProductLoaded',
];
}
/**
* If custom variant image isset from customfields => set the image as the cover
*
* @param EntityLoadedEvent $event
* @return void
*/
public function onProductLoaded(EntityLoadedEvent $event)
{
/** @var SalesChannelProductEntity $entity */
foreach ($event->getEntities() as $entity) {
if (isset($entity->getCustomFields()['wyn_product_additional_information_additional_product_image'])) {
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('id', $entity->getCustomFields()['wyn_product_additional_information_additional_product_image']));
$mediaResult = $this->mediaRepository->search($criteria, $event->getContext());
/** @var MediaEntity $mediaEntity */
$mediaEntity = $mediaResult->first();
$tempProductMedia = new ProductMediaEntity();
$tempProductMedia->setId($mediaEntity->getId());
$tempProductMedia->setMediaId($mediaEntity->getId());
$tempProductMedia->setMedia($mediaEntity);
$tempProductMedia->setPosition(0);
$entity->setCover($tempProductMedia);
}
}
}
}