From 1048cd281e2514104ff190c1c2dc43a317183265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=BCsken?= Date: Wed, 6 Nov 2024 09:45:03 +0100 Subject: [PATCH 1/8] replace wc_terms_and_conditions_page_id() function by directly getting page to avoid errors --- modules/ppcp-blocks/extensions.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-blocks/extensions.php b/modules/ppcp-blocks/extensions.php index 47f9cddc4..134dda6a7 100644 --- a/modules/ppcp-blocks/extensions.php +++ b/modules/ppcp-blocks/extensions.php @@ -44,7 +44,13 @@ 'woocommerce-paypal-payments' ); - if ( wc_terms_and_conditions_page_id() > 0 ) { + /** + * Replace wc_terms_and_conditions_page_id() function to avoid errors when to avoid errors because of early loading. + */ + $wc_terms_and_conditions_page_id = apply_filters( 'woocommerce_get_terms_page_id', get_option( 'woocommerce_terms_page_id' ) ); + $wc_terms_and_conditions_page_id = apply_filters( 'woocommerce_terms_and_conditions_page_id', 0 < $wc_terms_and_conditions_page_id ? absint( $wc_terms_and_conditions_page_id ) : 0 ); + + if ( $wc_terms_and_conditions_page_id > 0 ) { $label .= __( '

Important: Your store has a Terms and Conditions page configured. Buyers who use a PayPal express payment method will not be able to consent to the terms on the Classic Checkout, as the final checkout confirmation will be skipped.

', 'woocommerce-paypal-payments' From d44fafe41514665ff7b206a67dc229abcceb475d Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Thu, 23 Jan 2025 15:43:19 +0100 Subject: [PATCH 2/8] Add filter to unset payment method items --- .../src/Endpoint/PaymentRestEndpoint.php | 2 +- modules/ppcp-settings/src/SettingsModule.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/src/Endpoint/PaymentRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/PaymentRestEndpoint.php index 29516107f..15d289ef9 100644 --- a/modules/ppcp-settings/src/Endpoint/PaymentRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/PaymentRestEndpoint.php @@ -299,7 +299,7 @@ public function get_details() : WP_REST_Response { ); } - return $this->return_success( $gateway_settings ); + return $this->return_success( apply_filters( 'woocommerce_paypal_payments_payment_methods', $gateway_settings ) ); } /** diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index fc6434755..93a8d3232 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -17,6 +17,7 @@ use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ModuleClassNameIdTrait; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ServiceModule; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; +use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCProductStatus; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; /** @@ -263,6 +264,20 @@ static function () use ( $container ) : void { } ); + add_filter( + 'woocommerce_paypal_payments_payment_methods', + function( array $payment_methods ) use ( $container ) : array { + $dcc_product_status = $container->get( 'wcgateway.helper.dcc-product-status' ); + assert( $dcc_product_status instanceof DCCProductStatus ); + + if ( $dcc_product_status->dcc_is_active() ) { + unset( $payment_methods['ppcp-card-button-gateway'] ); + } + + return $payment_methods; + } + ); + return true; } From 8545689e78372252e3e4834d034c4fe3f57dd4a7 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Thu, 23 Jan 2025 16:05:43 +0100 Subject: [PATCH 3/8] Remove objects without keys --- modules/ppcp-settings/resources/js/data/payment/hooks.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-settings/resources/js/data/payment/hooks.js b/modules/ppcp-settings/resources/js/data/payment/hooks.js index c10f0969e..25a57b5af 100644 --- a/modules/ppcp-settings/resources/js/data/payment/hooks.js +++ b/modules/ppcp-settings/resources/js/data/payment/hooks.js @@ -96,12 +96,13 @@ export const usePaymentMethods = () => { export const usePaymentMethodsPayPalCheckout = () => { const { paypal, venmo, payLater, creditCard } = useHooks(); + const paymentMethodsPayPalCheckout = [ paypal, venmo, payLater, creditCard, - ]; + ].filter( ( item ) => Object.keys( item ).length !== 0 ); return { paymentMethodsPayPalCheckout, @@ -115,7 +116,7 @@ export const usePaymentMethodsOnlineCardPayments = () => { fastlane, applePay, googlePay, - ]; + ].filter( ( item ) => Object.keys( item ).length !== 0 ); return { paymentMethodsOnlineCardPayments, @@ -147,7 +148,7 @@ export const usePaymentMethodsAlternative = () => { multibanco, pui, oxxo, - ]; + ].filter( ( item ) => Object.keys( item ).length !== 0 ); return { paymentMethodsAlternative, From de475ed0ec48f6e5152ad9c5293e9c536758219f Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Thu, 23 Jan 2025 16:18:05 +0100 Subject: [PATCH 4/8] Hide venmo when store location is not united states --- modules/ppcp-settings/src/SettingsModule.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index 93a8d3232..1b343930d 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -274,6 +274,10 @@ function( array $payment_methods ) use ( $container ) : array { unset( $payment_methods['ppcp-card-button-gateway'] ); } + if ( $container->get( 'api.shop.country' ) !== 'US' ) { + unset( $payment_methods['venmo'] ); + } + return $payment_methods; } ); From c8e7ad9a5dc0bae89f2583312dca0d3999a5fb8e Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Fri, 24 Jan 2025 09:52:55 +0100 Subject: [PATCH 5/8] Add display conditional for applepay and googlepay --- modules/ppcp-settings/src/SettingsModule.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index 1b343930d..5c3f531ce 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -9,6 +9,8 @@ namespace WooCommerce\PayPalCommerce\Settings; +use WooCommerce\PayPalCommerce\Applepay\Assets\AppleProductStatus; +use WooCommerce\PayPalCommerce\Googlepay\Helper\ApmProductStatus; use WooCommerce\PayPalCommerce\Settings\Ajax\SwitchSettingsUiEndpoint; use WooCommerce\PayPalCommerce\Settings\Data\OnboardingProfile; use WooCommerce\PayPalCommerce\Settings\Endpoint\RestEndpoint; @@ -270,6 +272,12 @@ function( array $payment_methods ) use ( $container ) : array { $dcc_product_status = $container->get( 'wcgateway.helper.dcc-product-status' ); assert( $dcc_product_status instanceof DCCProductStatus ); + $googlepay_product_status = $container->get( 'googlepay.helpers.apm-product-status' ); + assert( $googlepay_product_status instanceof ApmProductStatus ); + + $applepay_product_status = $container->get( 'applepay.apple-product-status' ); + assert( $applepay_product_status instanceof AppleProductStatus ); + if ( $dcc_product_status->dcc_is_active() ) { unset( $payment_methods['ppcp-card-button-gateway'] ); } @@ -278,6 +286,14 @@ function( array $payment_methods ) use ( $container ) : array { unset( $payment_methods['venmo'] ); } + if ( ! $googlepay_product_status->is_active() ) { + unset( $payment_methods['ppcp-googlepay'] ); + } + + if ( ! $applepay_product_status->is_active() ) { + unset( $payment_methods['ppcp-applepay'] ); + } + return $payment_methods; } ); From 8cba869d7c90a71d203e68b943e6b14ee910bee9 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Fri, 24 Jan 2025 11:22:24 +0100 Subject: [PATCH 6/8] Add display conditions for applepay, googleplay and fastlane --- modules/ppcp-settings/src/SettingsModule.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index 5c3f531ce..6d08cce9a 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -278,22 +278,31 @@ function( array $payment_methods ) use ( $container ) : array { $applepay_product_status = $container->get( 'applepay.apple-product-status' ); assert( $applepay_product_status instanceof AppleProductStatus ); + // Unset BCDC if merchant is eligible for ACDC. if ( $dcc_product_status->dcc_is_active() ) { unset( $payment_methods['ppcp-card-button-gateway'] ); } + // Unset Venmo when store location is not United States. if ( $container->get( 'api.shop.country' ) !== 'US' ) { unset( $payment_methods['venmo'] ); } + // Unset if not eligible for Google Pay. if ( ! $googlepay_product_status->is_active() ) { unset( $payment_methods['ppcp-googlepay'] ); } + // Unset if not eligible for Apple Pay. if ( ! $applepay_product_status->is_active() ) { unset( $payment_methods['ppcp-applepay'] ); } + // Unset Fastlane if store location is not United States or merchant is not eligible for ACDC. + if ( $container->get( 'api.shop.country' ) !== 'US' || ! $dcc_product_status->dcc_is_active() ) { + unset( $payment_methods['ppcp-axo-gateway'] ); + } + return $payment_methods; } ); From 47e8fec98c1a083787681eded635e790543e7932 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Fri, 24 Jan 2025 11:44:46 +0100 Subject: [PATCH 7/8] Hide acdc and local apms for non acdc regions --- modules/ppcp-settings/src/SettingsModule.php | 37 +++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index 6d08cce9a..dcb4b22fd 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -9,8 +9,17 @@ namespace WooCommerce\PayPalCommerce\Settings; +use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\Applepay\Assets\AppleProductStatus; use WooCommerce\PayPalCommerce\Googlepay\Helper\ApmProductStatus; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\BancontactGateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\BlikGateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\EPSGateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\IDealGateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\MultibancoGateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\MyBankGateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\P24Gateway; +use WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods\TrustlyGateway; use WooCommerce\PayPalCommerce\Settings\Ajax\SwitchSettingsUiEndpoint; use WooCommerce\PayPalCommerce\Settings\Data\OnboardingProfile; use WooCommerce\PayPalCommerce\Settings\Endpoint\RestEndpoint; @@ -19,6 +28,10 @@ use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ModuleClassNameIdTrait; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ServiceModule; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\OXXO\OXXO; +use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayUponInvoice\PayUponInvoiceGateway; use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCProductStatus; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; @@ -269,6 +282,8 @@ static function () use ( $container ) : void { add_filter( 'woocommerce_paypal_payments_payment_methods', function( array $payment_methods ) use ( $container ) : array { + $all_payment_methods = $payment_methods; + $dcc_product_status = $container->get( 'wcgateway.helper.dcc-product-status' ); assert( $dcc_product_status instanceof DCCProductStatus ); @@ -278,9 +293,12 @@ function( array $payment_methods ) use ( $container ) : array { $applepay_product_status = $container->get( 'applepay.apple-product-status' ); assert( $applepay_product_status instanceof AppleProductStatus ); + $dcc_applies = $container->get( 'api.helpers.dccapplies' ); + assert( $dcc_applies instanceof DCCApplies ); + // Unset BCDC if merchant is eligible for ACDC. if ( $dcc_product_status->dcc_is_active() ) { - unset( $payment_methods['ppcp-card-button-gateway'] ); + unset( $payment_methods[ CardButtonGateway::ID ] ); } // Unset Venmo when store location is not United States. @@ -303,6 +321,23 @@ function( array $payment_methods ) use ( $container ) : array { unset( $payment_methods['ppcp-axo-gateway'] ); } + // For non-ACDC regions unset ACDC, local APMs and set BCDC. + if ( ! $dcc_applies ) { + unset( $payment_methods[ CreditCardGateway::ID ] ); + unset( $payment_methods[ BancontactGateway::ID ] ); + unset( $payment_methods[ BlikGateway::ID ] ); + unset( $payment_methods[ EPSGateway::ID ] ); + unset( $payment_methods[ IDealGateway::ID ] ); + unset( $payment_methods[ MyBankGateway::ID ] ); + unset( $payment_methods[ P24Gateway::ID ] ); + unset( $payment_methods[ TrustlyGateway::ID ] ); + unset( $payment_methods[ MultibancoGateway::ID ] ); + unset( $payment_methods[ PayUponInvoiceGateway::ID ] ); + unset( $payment_methods[ OXXO::ID ] ); + + $payment_methods[ CardButtonGateway::ID ] = $all_payment_methods[ CardButtonGateway::ID ]; + } + return $payment_methods; } ); From b08c6f671ac28feb68de2e1257cdef88da108b4e Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Fri, 24 Jan 2025 13:46:59 +0100 Subject: [PATCH 8/8] Add filter to register standrard card button gateway programmatically --- modules/ppcp-settings/src/SettingsModule.php | 2 +- modules/ppcp-wc-gateway/services.php | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-settings/src/SettingsModule.php b/modules/ppcp-settings/src/SettingsModule.php index dcb4b22fd..0b46cfdbf 100644 --- a/modules/ppcp-settings/src/SettingsModule.php +++ b/modules/ppcp-settings/src/SettingsModule.php @@ -297,7 +297,7 @@ function( array $payment_methods ) use ( $container ) : array { assert( $dcc_applies instanceof DCCApplies ); // Unset BCDC if merchant is eligible for ACDC. - if ( $dcc_product_status->dcc_is_active() ) { + if ( $dcc_product_status->dcc_is_active() && ! $container->get( 'wcgateway.settings.allow_card_button_gateway' ) ) { unset( $payment_methods[ CardButtonGateway::ID ] ); } diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index e17c1077d..1bac9b14e 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -1659,9 +1659,12 @@ static function ( ContainerInterface $container ): string { $settings = $container->get( 'wcgateway.settings' ); assert( $settings instanceof ContainerInterface ); - return $settings->has( 'allow_card_button_gateway' ) ? + return apply_filters( + 'woocommerce_paypal_payments_enable_standard_card_button_gateway_settings', + $settings->has( 'allow_card_button_gateway' ) ? (bool) $settings->get( 'allow_card_button_gateway' ) : - $container->get( 'wcgateway.settings.allow_card_button_gateway.default' ); + $container->get( 'wcgateway.settings.allow_card_button_gateway.default' ) + ); }, 'wcgateway.settings.has_enabled_separate_button_gateways' => static function ( ContainerInterface $container ): bool { return (bool) $container->get( 'wcgateway.settings.allow_card_button_gateway' );