<?php declare(strict_types=1);
namespace Cogi\Affiliate\Subscriber;
use Cogi\Affiliate\Core\Event\AffiliateApplicationAcceptEvent;
use Cogi\Affiliate\Core\Event\AffiliateNewTransactionAdminEvent;
use Cogi\Affiliate\Core\Event\AffiliateNewTransactionAffiliateEvent;
use Cogi\Affiliate\Core\Event\AffiliatePayoutRequestEvent;
use Shopware\Core\Framework\Event\BusinessEventCollector;
use Shopware\Core\Framework\Event\BusinessEventCollectorEvent;
use Cogi\Affiliate\Core\Event\AffiliateNewApplicationEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class BusinessEventCollectorSubscriber implements EventSubscriberInterface
{
private BusinessEventCollector $businessEventCollector;
public function __construct(BusinessEventCollector $businessEventCollector)
{
$this->businessEventCollector = $businessEventCollector;
}
public static function getSubscribedEvents(): array
{
return [
BusinessEventCollectorEvent::NAME => ['onAddAffiliateEvents', 1000],
];
}
public function onAddAffiliateEvents(BusinessEventCollectorEvent $event): void
{
$collection = $event->getCollection();
$eventClasses = [
AffiliateNewApplicationEvent::class,
AffiliateApplicationAcceptEvent::class,
AffiliatePayoutRequestEvent::class,
AffiliateNewTransactionAdminEvent::class,
AffiliateNewTransactionAffiliateEvent::class
];
foreach($eventClasses as $eventClass) {
$definition = $this->businessEventCollector->define($eventClass);
if (!$definition) {
continue;
}
$collection->set($definition->getName(), $definition);
}
}
}