File "DisableGateways.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-paypal-payments/modules/ppcp-wc-gateway/src/Checkout/DisableGateways.php
File size: 4 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Determines whether specific gateways need to be disabled.
*
* @package WooCommerce\PayPalCommerce\WcGateway\Checkout
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\WcGateway\Checkout;
use WooCommerce\PayPalCommerce\Button\Helper\ContextTrait;
use WooCommerce\PayPalCommerce\Session\SessionHandler;
use WooCommerce\PayPalCommerce\WcSubscriptions\Helper\SubscriptionHelper;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\WcGateway\Helper\SettingsStatus;
/**
* Class DisableGateways
*/
class DisableGateways {
use ContextTrait;
/**
* The Session Handler.
*
* @var SessionHandler
*/
private $session_handler;
/**
* The Settings.
*
* @var ContainerInterface
*/
private $settings;
/**
* The Settings status helper.
*
* @var SettingsStatus
*/
protected $settings_status;
/**
* The subscription helper.
*
* @var SubscriptionHelper
*/
private $subscription_helper;
/**
* DisableGateways constructor.
*
* @param SessionHandler $session_handler The Session Handler.
* @param ContainerInterface $settings The Settings.
* @param SettingsStatus $settings_status The Settings status helper.
* @param SubscriptionHelper $subscription_helper The subscription helper.
*/
public function __construct(
SessionHandler $session_handler,
ContainerInterface $settings,
SettingsStatus $settings_status,
SubscriptionHelper $subscription_helper
) {
$this->session_handler = $session_handler;
$this->settings = $settings;
$this->settings_status = $settings_status;
$this->subscription_helper = $subscription_helper;
}
/**
* Controls the logic for enabling/disabling gateways.
*
* @param array $methods The Gateways.
*
* @return array
*/
public function handler( array $methods ): array {
if ( ! isset( $methods[ PayPalGateway::ID ] ) && ! isset( $methods[ CreditCardGateway::ID ] ) ) {
return $methods;
}
if ( $this->disable_all_gateways() ) {
unset( $methods[ PayPalGateway::ID ] );
unset( $methods[ CreditCardGateway::ID ] );
unset( $methods[ CardButtonGateway::ID ] );
return $methods;
}
if ( ! $this->settings->has( 'client_id' ) || empty( $this->settings->get( 'client_id' ) ) ) {
unset( $methods[ CreditCardGateway::ID ] );
}
if ( ! $this->settings_status->is_smart_button_enabled_for_location( 'checkout' ) ) {
unset( $methods[ CardButtonGateway::ID ] );
if ( $this->subscription_helper->cart_contains_subscription() ) {
unset( $methods[ PayPalGateway::ID ] );
}
}
if ( ! $this->needs_to_disable_gateways() ) {
return $methods;
}
// phpcs:ignore WordPress.Security.NonceVerification.Missing
$payment_method = wc_clean( wp_unslash( $_POST['payment_method'] ?? '' ) );
if ( $payment_method && is_string( $payment_method ) ) {
return array( $payment_method => $methods[ $payment_method ] );
}
return array( PayPalGateway::ID => $methods[ PayPalGateway::ID ] );
}
/**
* Whether all gateways should be disabled or not.
*
* @return bool
*/
private function disable_all_gateways() : bool {
if ( is_null( WC()->payment_gateways ) ) {
return false;
}
foreach ( WC()->payment_gateways->payment_gateways() as $gateway ) {
if ( PayPalGateway::ID === $gateway->id && $gateway->enabled !== 'yes' ) {
return true;
}
}
if ( ! $this->settings->has( 'merchant_email' ) || ! is_email( $this->settings->get( 'merchant_email' ) ) ) {
return true;
}
return false;
}
/**
* Whether the Gateways need to be disabled. When we come to the checkout with a running PayPal
* session, we need to disable the other Gateways, so the customer can smoothly sail through the
* process.
*
* @return bool
*/
private function needs_to_disable_gateways(): bool {
return $this->is_paypal_continuation();
}
}