From a2b8405e60f38060580004c4d1d92e1f0bc55503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reu=CC=88el=20van=20der=20Steege?= Date: Mon, 24 Jul 2017 12:37:04 +0200 Subject: [PATCH] Only show `Direct Debit (mandate via ...)` gateways if cart or order contains a subscription product. --- src/DirectDebitBancontactGateway.php | 4 +++- src/DirectDebitIDealGateway.php | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/DirectDebitBancontactGateway.php b/src/DirectDebitBancontactGateway.php index 9008733..cfe0b71 100644 --- a/src/DirectDebitBancontactGateway.php +++ b/src/DirectDebitBancontactGateway.php @@ -69,7 +69,9 @@ public function get_available_payment_gateways( $available_gateways ) { return $available_gateways; } - if ( WC_Subscriptions_Cart::cart_contains_subscription() || ( isset( $_GET['order_id'] ) && wcs_order_contains_subscription( $_GET['order_id'] ) ) ) { + $order_id = filter_input( INPUT_GET, 'order_id', FILTER_SANITIZE_STRING ); + + if ( WC_Subscriptions_Cart::cart_contains_subscription() || wcs_order_contains_subscription( $order_id ) ) { return $available_gateways; } diff --git a/src/DirectDebitIDealGateway.php b/src/DirectDebitIDealGateway.php index ad0af29..84604f7 100644 --- a/src/DirectDebitIDealGateway.php +++ b/src/DirectDebitIDealGateway.php @@ -44,6 +44,9 @@ public function __construct() { // Handle subscription payments add_action( 'woocommerce_scheduled_subscription_payment_' . $this->id, array( $this, 'process_subscription_payment' ), 10, 2 ); + // Filters + add_filter( 'woocommerce_available_payment_gateways', array( $this, 'get_available_payment_gateways' ) ); + parent::__construct(); } @@ -83,4 +86,27 @@ function init_form_fields() { $this->form_fields['description']['default'] = __( 'By using this payment method you authorize us via iDEAL to debit payments from your bank account.', 'pronamic_ideal' ); $this->form_fields['icon']['default'] = plugins_url( 'images/sepa-ideal/wc-sepa-ideal.png', Pronamic_WP_Pay_Plugin::$file ); } + + /** + * Only show gateway if cart or order contains a subscription product. + * + * @since unreleased + */ + public function get_available_payment_gateways( $available_gateways ) { + if ( ! class_exists( 'WC_Subscriptions_Cart' ) || ! function_exists( 'wcs_order_contains_subscription' ) ) { + return $available_gateways; + } + + $order_id = filter_input( INPUT_GET, 'order_id', FILTER_SANITIZE_STRING ); + + if ( WC_Subscriptions_Cart::cart_contains_subscription() || wcs_order_contains_subscription( $order_id ) ) { + return $available_gateways; + } + + if ( isset( $available_gateways[ self::ID ] ) ) { + unset( $available_gateways[ self::ID ] ); + } + + return $available_gateways; + } }