From 5fcaff39aed9dfbb2fa716e762d91885e8fc84ec Mon Sep 17 00:00:00 2001 From: Victor Vasiloi Date: Sun, 17 May 2020 16:52:15 +0300 Subject: [PATCH] use "sylius.payment_methods_resolver" to get the default payment method in "sylius.payment_method_resolver.default" --- .../CoreBundle/Resources/config/services.xml | 1 + .../Resolver/DefaultPaymentMethodResolver.php | 40 ++++++++++++++----- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/Sylius/Bundle/CoreBundle/Resources/config/services.xml b/src/Sylius/Bundle/CoreBundle/Resources/config/services.xml index ded4ff1028ca..6bc04bc0ebfe 100644 --- a/src/Sylius/Bundle/CoreBundle/Resources/config/services.xml +++ b/src/Sylius/Bundle/CoreBundle/Resources/config/services.xml @@ -86,6 +86,7 @@ + diff --git a/src/Sylius/Component/Core/Resolver/DefaultPaymentMethodResolver.php b/src/Sylius/Component/Core/Resolver/DefaultPaymentMethodResolver.php index eaa396425d35..c6a931aab26f 100644 --- a/src/Sylius/Component/Core/Resolver/DefaultPaymentMethodResolver.php +++ b/src/Sylius/Component/Core/Resolver/DefaultPaymentMethodResolver.php @@ -13,13 +13,13 @@ namespace Sylius\Component\Core\Resolver; -use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\PaymentInterface; use Sylius\Component\Core\Repository\PaymentMethodRepositoryInterface; use Sylius\Component\Payment\Exception\UnresolvedDefaultPaymentMethodException; use Sylius\Component\Payment\Model\PaymentInterface as BasePaymentInterface; use Sylius\Component\Payment\Model\PaymentMethodInterface; use Sylius\Component\Payment\Resolver\DefaultPaymentMethodResolverInterface; +use Sylius\Component\Payment\Resolver\PaymentMethodsResolverInterface; use Webmozart\Assert\Assert; class DefaultPaymentMethodResolver implements DefaultPaymentMethodResolverInterface @@ -27,25 +27,45 @@ class DefaultPaymentMethodResolver implements DefaultPaymentMethodResolverInterf /** @var PaymentMethodRepositoryInterface */ protected $paymentMethodRepository; - public function __construct(PaymentMethodRepositoryInterface $paymentMethodRepository) - { + /** @var PaymentMethodsResolverInterface|null */ + private $paymentMethodsResolver; + + public function __construct( + PaymentMethodRepositoryInterface $paymentMethodRepository, + ?PaymentMethodsResolverInterface $paymentMethodsResolver = null + ) { $this->paymentMethodRepository = $paymentMethodRepository; + + if (null === $paymentMethodsResolver) { + @trigger_error( + sprintf( + 'Not passing an $paymentMethodsResolver to "%s" constructor is deprecated since Sylius 1.8 and will be impossible in Sylius 2.0.', + self::class + ), + \E_USER_DEPRECATED + ); + } + + $this->paymentMethodsResolver = $paymentMethodsResolver; } /** - * {@inheritdoc} + * @param BasePaymentInterface|PaymentInterface $payment * * @throws UnresolvedDefaultPaymentMethodException */ - public function getDefaultPaymentMethod(BasePaymentInterface $subject): PaymentMethodInterface + public function getDefaultPaymentMethod(BasePaymentInterface $payment): PaymentMethodInterface { - /** @var PaymentInterface $subject */ - Assert::isInstanceOf($subject, PaymentInterface::class); + Assert::isInstanceOf($payment, PaymentInterface::class); + + $channel = $payment->getOrder()->getChannel(); - /** @var ChannelInterface $channel */ - $channel = $subject->getOrder()->getChannel(); + if (null !== $this->paymentMethodsResolver) { + $paymentMethods = $this->paymentMethodsResolver->getSupportedMethods($payment); + } else { + $paymentMethods = $this->paymentMethodRepository->findEnabledForChannel($channel); + } - $paymentMethods = $this->paymentMethodRepository->findEnabledForChannel($channel); if (empty($paymentMethods)) { throw new UnresolvedDefaultPaymentMethodException(); }