Skip to content

Commit

Permalink
use "sylius.payment_methods_resolver" to get the default payment meth…
Browse files Browse the repository at this point in the history
…od in "sylius.payment_method_resolver.default"
  • Loading branch information
vvasiloi committed May 17, 2020
1 parent b733893 commit 5fcaff3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 10 deletions.
1 change: 1 addition & 0 deletions src/Sylius/Bundle/CoreBundle/Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@

<service id="sylius.payment_method_resolver.default" class="Sylius\Component\Core\Resolver\DefaultPaymentMethodResolver">
<argument type="service" id="sylius.repository.payment_method" />
<argument type="service" id="sylius.payment_methods_resolver" />
</service>
<service id="Sylius\Component\Payment\Resolver\DefaultPaymentMethodResolverInterface" alias="sylius.payment_method_resolver.default" />

Expand Down
40 changes: 30 additions & 10 deletions src/Sylius/Component/Core/Resolver/DefaultPaymentMethodResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,59 @@

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
{
/** @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();
}
Expand Down

0 comments on commit 5fcaff3

Please sign in to comment.