Skip to content

Commit

Permalink
Merge pull request #2111 from dpfaffenbauer/issue/2107
Browse files Browse the repository at this point in the history
[Checkout] introduce Payment Provider Validator to check if the selected one is still valid
  • Loading branch information
dpfaffenbauer authored Nov 15, 2022
2 parents ff8c072 + ed5fa62 commit e7e32b8
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
use CoreShop\Component\Order\Manager\CartManagerInterface;
use CoreShop\Component\Order\Model\OrderInterface;
use CoreShop\Component\Payment\Model\PaymentProviderInterface;
use CoreShop\Component\Payment\Validator\PaymentProviderValidatorInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -35,6 +36,7 @@ class PaymentCheckoutStep implements CheckoutStepInterface, OptionalCheckoutStep
public function __construct(
private FormFactoryInterface $formFactory,
private CartManagerInterface $cartManager,
private PaymentProviderValidatorInterface $paymentProviderValidator
) {
}

Expand All @@ -55,7 +57,9 @@ public function doAutoForward(OrderInterface $cart): bool

public function validate(OrderInterface $cart): bool
{
return $cart->hasItems() && $cart->getPaymentProvider() instanceof PaymentProviderInterface;
$paymentProvider = $cart->getPaymentProvider();

return $cart->hasItems() && $paymentProvider instanceof PaymentProviderInterface && $this->paymentProviderValidator->isPaymentProviderValid($paymentProvider);
}

public function commitStep(OrderInterface $cart, Request $request): bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ services:
arguments:
- '@form.factory'
- '@CoreShop\Component\Order\Manager\CartManagerInterface'
- '@CoreShop\Component\Payment\Validator\PaymentProviderValidatorInterface'

CoreShop\Bundle\CoreBundle\Checkout\Step\SummaryCheckoutStep:
arguments:
Expand Down
15 changes: 14 additions & 1 deletion src/CoreShop/Bundle/PaymentBundle/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,18 @@ imports:
- { resource: services_alias.yml }
- { resource: services/form.yml }
- { resource: services/workflow.yml }
- { resource: services/resolver.yml }
- { resource: services/pimcore.yml }

services:
_defaults:
public: true

CoreShop\Component\Payment\Resolver\PaymentProviderResolverInterface: '@CoreShop\Component\Payment\Resolver\PaymentProviderResolver'
CoreShop\Component\Payment\Resolver\PaymentProviderResolver:
arguments:
- '@coreshop.repository.payment_provider'

CoreShop\Component\Payment\Validator\PaymentProviderValidatorInterface: '@CoreShop\Component\Payment\Validator\PaymentProviderValidator'
CoreShop\Component\Payment\Validator\PaymentProviderValidator:
arguments:
- '@CoreShop\Component\Payment\Resolver\PaymentProviderResolverInterface'

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

/*
* CoreShop
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - CoreShop Commercial License (CCL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) CoreShop GmbH (https://www.coreshop.org)
* @license https://www.coreshop.org/license GPLv3 and CCL
*
*/

namespace CoreShop\Component\Payment\Validator;

use CoreShop\Component\Payment\Model\PaymentProviderInterface;
use CoreShop\Component\Payment\Resolver\PaymentProviderResolverInterface;
use CoreShop\Component\Resource\Model\ResourceInterface;

class PaymentProviderValidator implements PaymentProviderValidatorInterface
{
public function __construct(protected PaymentProviderResolverInterface $paymentProviderResolver)
{
}

public function isPaymentProviderValid(
PaymentProviderInterface $paymentProvider,
ResourceInterface $subject = null
): bool {
$validProviders = $this->paymentProviderResolver->resolvePaymentProviders($subject);

return in_array(
$paymentProvider->getId(),
array_map(static function (PaymentProviderInterface $paymentProvider) {
return $paymentProvider->getId();
}, $validProviders),
true
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

/*
* CoreShop
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - CoreShop Commercial License (CCL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) CoreShop GmbH (https://www.coreshop.org)
* @license https://www.coreshop.org/license GPLv3 and CCL
*
*/

namespace CoreShop\Component\Payment\Validator;

use CoreShop\Component\Payment\Model\PaymentProviderInterface;
use CoreShop\Component\Resource\Model\ResourceInterface;

interface PaymentProviderValidatorInterface
{
public function isPaymentProviderValid(
PaymentProviderInterface $paymentProvider,
ResourceInterface $subject = null
): bool;
}

0 comments on commit e7e32b8

Please sign in to comment.