vendor/shopware/core/Checkout/Payment/DataAbstractionLayer/PaymentHandlerIdentifierSubscriber.php line 29

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Payment\DataAbstractionLayer;
  3. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\AsynchronousPaymentHandlerInterface;
  4. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\PreparedPaymentHandlerInterface;
  5. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\RefundPaymentHandlerInterface;
  6. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\SynchronousPaymentHandlerInterface;
  7. use Shopware\Core\Checkout\Payment\PaymentEvents;
  8. use Shopware\Core\Checkout\Payment\PaymentMethodEntity;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  10. use Shopware\Core\Framework\Log\Package;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
  13. /**
  14.  * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
  15.  */
  16. #[Package('core')]
  17. class PaymentHandlerIdentifierSubscriber implements EventSubscriberInterface
  18. {
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             PaymentEvents::PAYMENT_METHOD_LOADED_EVENT => 'formatHandlerIdentifier',
  23.         ];
  24.     }
  25.     public function formatHandlerIdentifier(EntityLoadedEvent $event): void
  26.     {
  27.         /** @var PaymentMethodEntity $entity */
  28.         foreach ($event->getEntities() as $entity) {
  29.             $this->setPaymentMethodHandlerRuntimeFields($entity);
  30.             $explodedHandlerIdentifier explode('\\'$entity->getHandlerIdentifier());
  31.             $last $explodedHandlerIdentifier[\count($explodedHandlerIdentifier) - 1];
  32.             $entity->setShortName((new CamelCaseToSnakeCaseNameConverter())->normalize($last));
  33.             if (\count($explodedHandlerIdentifier) < 2) {
  34.                 $entity->setFormattedHandlerIdentifier($entity->getHandlerIdentifier());
  35.                 continue;
  36.             }
  37.             /** @var string|null $firstHandlerIdentifier */
  38.             $firstHandlerIdentifier array_shift($explodedHandlerIdentifier);
  39.             $lastHandlerIdentifier array_pop($explodedHandlerIdentifier);
  40.             if ($firstHandlerIdentifier === null || $lastHandlerIdentifier === null) {
  41.                 continue;
  42.             }
  43.             $formattedHandlerIdentifier 'handler_'
  44.                 mb_strtolower($firstHandlerIdentifier)
  45.                 . '_'
  46.                 mb_strtolower($lastHandlerIdentifier);
  47.             $entity->setFormattedHandlerIdentifier($formattedHandlerIdentifier);
  48.         }
  49.     }
  50.     private function setPaymentMethodHandlerRuntimeFields(PaymentMethodEntity $paymentMethod): void
  51.     {
  52.         if ($paymentMethod->getAppPaymentMethod()) {
  53.             $this->setFieldsByAppPaymentMethod($paymentMethod);
  54.             return;
  55.         }
  56.         $handlerIdentifier $paymentMethod->getHandlerIdentifier();
  57.         if (\is_a($handlerIdentifierSynchronousPaymentHandlerInterface::class, true)) {
  58.             $paymentMethod->setSynchronous(true);
  59.         }
  60.         if (\is_a($handlerIdentifierAsynchronousPaymentHandlerInterface::class, true)) {
  61.             $paymentMethod->setAsynchronous(true);
  62.         }
  63.         if (\is_a($handlerIdentifierPreparedPaymentHandlerInterface::class, true)) {
  64.             $paymentMethod->setPrepared(true);
  65.         }
  66.         if (\is_a($handlerIdentifierRefundPaymentHandlerInterface::class, true)) {
  67.             $paymentMethod->setRefundable(true);
  68.         }
  69.     }
  70.     private function setFieldsByAppPaymentMethod(PaymentMethodEntity $paymentMethod): void
  71.     {
  72.         if (!$paymentMethod->getAppPaymentMethod()) {
  73.             return;
  74.         }
  75.         $appPaymentMethod $paymentMethod->getAppPaymentMethod();
  76.         if ($appPaymentMethod->getRefundUrl()) {
  77.             $paymentMethod->setRefundable(true);
  78.         }
  79.         if ($appPaymentMethod->getValidateUrl() && $appPaymentMethod->getCaptureUrl()) {
  80.             $paymentMethod->setPrepared(true);
  81.         }
  82.         if ($appPaymentMethod->getPayUrl() && $appPaymentMethod->getFinalizeUrl()) {
  83.             $paymentMethod->setAsynchronous(true);
  84.         }
  85.         if ($paymentMethod->isAsynchronous()) {
  86.             $paymentMethod->setSynchronous(true);
  87.         }
  88.     }
  89. }