<?php
namespace KmPitchPrint\Subscribers;
use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemCollection;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Storefront\Event\RouteRequest\OrderRouteRequestEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Storefront\Page\Account\Order\AccountEditOrderPageLoadedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
class AccountSubscriber implements EventSubscriberInterface
{
/**
* @var EntityRepository
*/
private $productRepository;
/**
* @var EntityRepository
*/
private $orderRepository;
public function __construct(
){
}
public static function getSubscribedEvents()
{
return [
OrderRouteRequestEvent::class=>'orderRouteRequestEvent',
AccountEditOrderPageLoadedEvent::class=>'accountEditOrderLoaded'
];
}
public function orderRouteRequestEvent(OrderRouteRequestEvent $event){
$criteria = $event->getCriteria();
$criteria->getAssociation('lineItems.product');
$criteria->addAssociation('lineItems.product.media');
}
/**
* @param OrderLineItemCollection $lineItems
* @return array
*/
private function exractProducts(OrderLineItemCollection $lineItems): array{
$products = [];
foreach ($lineItems as $lineItem){
if($lineItem->getProduct()){
$products[$lineItem->getProductId()] = $lineItem->getProduct();
}
}
return $products;
}
/**
* @param AccountEditOrderPageLoadedEvent $event
* @return void
*/
public function accountEditOrderLoaded(AccountEditOrderPageLoadedEvent $event): void{
$page = $event->getPage();
$products = $this->exractProducts($page->getOrder()->getLineItems());
$page->assign(['products'=>$products]);
# dump($page->products);exit;
}
}