<?php
namespace Twigel\BonusProgram\Subscriber;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twigel\BonusProgram\Core\Content\ProductBonus\ProductBonusEntity;
class ProductDetailLoaded implements EventSubscriberInterface
{
/** @var EntityRepository */
private $bonusProductRepository;
public function __construct(EntityRepository $bonusProductRepository)
{
$this->bonusProductRepository = $bonusProductRepository;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
ProductPageLoadedEvent::class => "productLoaded"
];
}
public function productLoaded(ProductPageLoadedEvent $event){
$productId = $event->getPage()->getProduct()->getId();
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('productId', $productId));
/** @var ProductBonusEntity $bonus */
$bonus = $this->bonusProductRepository->search($criteria, $event->getContext())->first();
if(!$bonus){
return;
}
$event->getPage()->assign(['productBonus' => $bonus->getBonusAmount()]);
}
}