vendor/shopware/core/Checkout/Payment/DataAbstractionLayer/PaymentMethodValidator.php line 36
<?php declare(strict_types=1);
namespace Shopware\Core\Checkout\Payment\DataAbstractionLayer;
use Doctrine\DBAL\ArrayParameterType;
use Doctrine\DBAL\Connection;
use Shopware\Core\Checkout\Payment\Exception\PluginPaymentMethodsDeleteRestrictionException;
use Shopware\Core\Checkout\Payment\PaymentMethodDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Write\Validation\PreWriteValidationEvent;
use Shopware\Core\Framework\Log\Package;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @internal
*/
#[Package('core')]
final class PaymentMethodValidator implements EventSubscriberInterface
{
/**
* @internal
*/
public function __construct(private readonly Connection $connection)
{
}
/**
* @return array<string, string|array{0: string, 1: int}|list<array{0: string, 1?: int}>>
*/
public static function getSubscribedEvents(): array
{
return [
PreWriteValidationEvent::class => 'validate',
];
}
public function validate(PreWriteValidationEvent $event): void
{
$ids = $event->getDeletedPrimaryKeys(PaymentMethodDefinition::ENTITY_NAME);
$ids = \array_column($ids, 'id');
if (empty($ids)) {
return;
}
$pluginIds = $this->connection->fetchOne(
'SELECT id FROM payment_method WHERE id IN (:ids) AND plugin_id IS NOT NULL',
['ids' => $ids],
['ids' => ArrayParameterType::STRING]
);
if (!empty($pluginIds)) {
throw new PluginPaymentMethodsDeleteRestrictionException();
}
}
}