* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\PrestashopCheckout\Event; use PrestaShop\Module\PrestashopCheckout\Logger\LoggerConfiguration; use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher as SymfonyTraceableEventDispatcher; use Symfony\Component\EventDispatcher\EventDispatcher as SymfonyEventDispatcher; use Symfony\Component\EventDispatcher\EventDispatcherInterface as SymfonyEventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface as SymfonyEventSubscriberInterface; use Symfony\Component\Stopwatch\Stopwatch as SymfonyStopwatch; class SymfonyEventDispatcherFactory { /** * @var LoggerInterface */ private $logger; /** * @var LoggerConfiguration */ private $configuration; /** * @param LoggerInterface $logger * @param LoggerConfiguration $configuration */ public function __construct(LoggerInterface $logger, LoggerConfiguration $configuration) { $this->logger = $logger; $this->configuration = $configuration; } /** * @param SymfonyEventSubscriberInterface[] $eventSubscribers * * @return SymfonyEventDispatcherInterface */ public function create(array $eventSubscribers) { $eventDispatcher = LoggerConfiguration::LEVEL_DEBUG === $this->configuration->getLevel() ? new SymfonyTraceableEventDispatcher( new SymfonyEventDispatcher(), new SymfonyStopwatch(), $this->logger ) : new SymfonyEventDispatcher(); foreach ($eventSubscribers as $eventSubscriber) { $eventDispatcher->addSubscriber($eventSubscriber); } return $eventDispatcher; } }