<?php declare(strict_types=1);
/*
* (c) shopware AG <info@shopware.com>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Swag\PayPal\Webhook\Registration;
use Psr\Log\LoggerInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityDeletedEvent;
use Shopware\Core\System\SalesChannel\SalesChannelEvents;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Swag\PayPal\Setting\Settings;
use Swag\PayPal\Webhook\WebhookServiceInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @internal
*/
class WebhookSubscriber implements EventSubscriberInterface
{
private LoggerInterface $logger;
private SystemConfigService $systemConfigService;
private WebhookServiceInterface $webhookService;
public function __construct(
LoggerInterface $logger,
SystemConfigService $systemConfigService,
WebhookServiceInterface $webhookService
) {
$this->logger = $logger;
$this->systemConfigService = $systemConfigService;
$this->webhookService = $webhookService;
}
public static function getSubscribedEvents(): array
{
return [
SalesChannelEvents::SALES_CHANNEL_DELETED => 'removeSalesChannelWebhookConfiguration',
];
}
public function removeSalesChannelWebhookConfiguration(EntityDeletedEvent $event): void
{
$generalWebhookId = $this->systemConfigService->getString(Settings::WEBHOOK_ID);
foreach ($event->getIds() as $salesChannelId) {
$webhookId = $this->systemConfigService->getString(Settings::WEBHOOK_ID, $salesChannelId);
try {
if ($webhookId !== $generalWebhookId) {
$this->webhookService->deregisterWebhook($salesChannelId);
}
} catch (\Throwable $e) {
$this->logger->error($e->getMessage(), ['error' => $e]);
}
}
}
}