<?php
/**
* Date: 3/4/22
* Time: 1:53 PM
*/
namespace Samson\Subscriber;
use Samson\Event\ReviewWrittenEvent;
use Shopware\Core\Content\Product\ProductEvents;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Shopware\Core\Framework\Routing\Event\SalesChannelContextResolvedEvent;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Routing\RouterInterface;
class ReviewSubscriber implements EventSubscriberInterface
{
private EventDispatcherInterface $eventDispatcher;
private RouterInterface $router;
private SalesChannelContext $saleChannelContext;
public function __construct(EventDispatcherInterface $eventDispatcher, RouterInterface $router)
{
$this->eventDispatcher = $eventDispatcher;
$this->router = $router;
}
public static function getSubscribedEvents(): array
{
return [
SalesChannelContextResolvedEvent::class => "onSalesChannelLoaded",
ProductEvents::PRODUCT_REVIEW_WRITTEN_EVENT => 'onReviewWritten'
];
}
public function onSalesChannelLoaded(SalesChannelContextResolvedEvent $event){
$this->saleChannelContext = $event->getSalesChannelContext();
}
public function onReviewWritten(EntityWrittenEvent $event): void
{
if ($this->saleChannelContext) {
$url = $this->saleChannelContext->getSalesChannel()->getDomains()->first()->getUrl();
$url = preg_replace('/\/$/', '', $url);
$url = $url . $this->router->generate('administration.index') . '#/sw/review/detail/' . $event->getWriteResults()[0]->getPrimaryKey();
$this->eventDispatcher->dispatch(
new ReviewWrittenEvent(
ReviewWrittenEvent::$eventName,
$this->saleChannelContext->getSalesChannelId(),
$event->getContext(),
$url
)
);
}
}
}