<?php declare(strict_types=1);
namespace Neno\VisualMailEditor\Core\Subscriber;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class CheckoutOrderPlacedDataEnhancer implements EventSubscriberInterface
{
/**
* @var EntityRepositoryInterface $mediaRepository
*/
private $mediaRepository;
public function __construct(EntityRepositoryInterface $mediaRepository)
{
$this->mediaRepository = $mediaRepository;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
CheckoutOrderPlacedEvent::class => [
['enhanceEventData', 500]
],
];
}
public function enhanceEventData(CheckoutOrderPlacedEvent $event): void
{
$order = $event->getOrder();
if ($order) {
$lineItems = $order->getLineItems();
if ($lineItems) {
$coverMediaIds = $lineItems->map(function (OrderLineItemEntity $item):?string {
return $item->getCoverId();
});
$validMediaIds = array_filter($coverMediaIds, function ($id) { return !empty($id); });
// fetch cover media in batch
$criteria = new Criteria($validMediaIds);
$criteria->addAssociation('thumbnails');
$resolvedCoverMedia = $this->mediaRepository->search($criteria, $event->getContext());
foreach ($lineItems as $lineItem) {
$lineItem->setCover($resolvedCoverMedia->get($lineItem->getCoverId()));
}
}
}
}
}