<?php declare(strict_types=1);
namespace Dvdw\AutoEmail\Content\Product\Subscriber;
use Dvdw\AutoEmail\Content\Product\Message\ProductInsertedMessage;
use Shopware\Core\Content\Product\ProductEvents;
use Shopware\Core\Defaults;
use Shopware\Core\Framework\DataAbstractionLayer\EntityWriteResult;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\MessageBusInterface;
class ProductSubscriber implements EventSubscriberInterface
{
private MessageBusInterface $bus;
public function __construct(MessageBusInterface $bus)
{
$this->bus = $bus;
}
public static function getSubscribedEvents(): iterable
{
return [ProductEvents::PRODUCT_WRITTEN_EVENT => 'onProductWritten'];
}
public function onProductWritten(EntityWrittenEvent $event): void
{
$context = $event->getContext();
if ($context->getVersionId() !== Defaults::LIVE_VERSION) {
return;
}
foreach ($event->getWriteResults() as $writeResult) {
if ($writeResult->getOperation() !== EntityWriteResult::OPERATION_INSERT) {
continue;
}
$id = $writeResult->getPrimaryKey();
if (is_array($id)) {
$id = reset($id);
}
$this->bus->dispatch(new ProductInsertedMessage($id, $context));
}
}
}